diff options
Diffstat (limited to 'binutils-2.25/gas/doc')
61 files changed, 30527 insertions, 0 deletions
diff --git a/binutils-2.25/gas/doc/Makefile.am b/binutils-2.25/gas/doc/Makefile.am new file mode 100644 index 00000000..3d1e9339 --- /dev/null +++ b/binutils-2.25/gas/doc/Makefile.am @@ -0,0 +1,140 @@ +## Process this file with automake to generate Makefile.in +# +# Copyright 2012 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. +# + +AUTOMAKE_OPTIONS = 1.8 cygnus + +# What version of the manual you want; "all" includes everything +CONFIG=all + +# Options to extract the man page from as.texinfo +MANCONF = -Dman + +TEXI2POD = perl $(BASEDIR)/etc/texi2pod.pl $(AM_MAKEINFOFLAGS) + +POD2MAN = pod2man --center="GNU Development Tools" \ + --release="binutils-$(VERSION)" --section=1 + +man_MANS = as.1 + +info_TEXINFOS = as.texinfo +as_TEXINFOS = asconfig.texi $(CPU_DOCS) + +AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \ + -I "$(top_srcdir)/../bfd/doc" -I ../../bfd/doc +TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \ + -I "$(top_srcdir)/../bfd/doc" -I ../../bfd/doc + +asconfig.texi: $(CONFIG).texi + rm -f asconfig.texi + cp $(srcdir)/$(CONFIG).texi ./asconfig.texi + chmod u+w ./asconfig.texi + +CPU_DOCS = \ + c-aarch64.texi \ + c-alpha.texi \ + c-arc.texi \ + c-arm.texi \ + c-avr.texi \ + c-bfin.texi \ + c-cr16.texi \ + c-cris.texi \ + c-d10v.texi \ + c-epiphany.texi \ + c-h8300.texi \ + c-hppa.texi \ + c-i370.texi \ + c-i386.texi \ + c-i860.texi \ + c-i960.texi \ + c-ip2k.texi \ + c-lm32.texi \ + c-m32c.texi \ + c-m32r.texi \ + c-m68hc11.texi \ + c-m68k.texi \ + c-metag.texi \ + c-microblaze.texi \ + c-mips.texi \ + c-mmix.texi \ + c-mt.texi \ + c-msp430.texi \ + c-nios2.texi \ + c-ns32k.texi \ + c-pdp11.texi \ + c-pj.texi \ + c-ppc.texi \ + c-rl78.texi \ + c-rx.texi \ + c-s390.texi \ + c-score.texi \ + c-sh.texi \ + c-sh64.texi \ + c-sparc.texi \ + c-tic54x.texi \ + c-tic6x.texi \ + c-tilegx.texi \ + c-tilepro.texi \ + c-vax.texi \ + c-v850.texi \ + c-xgate.texi \ + c-xstormy16.texi \ + c-xtensa.texi \ + c-z80.texi \ + c-z8k.texi + +# We want install to imply install-info as per GNU standards, despite the +# cygnus option. +install-data-local: install-info + +# This one isn't ready for prime time yet. Not even a little bit. + +noinst_TEXINFOS = internals.texi + +MAINTAINERCLEANFILES = asconfig.texi + +BASEDIR = $(srcdir)/../.. +BFDDIR = $(BASEDIR)/bfd + +CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in + +# Maintenance + +# We need it for the taz target in ../../Makefile.in. +info-local: $(MANS) + +# Build the man page from the texinfo file +# The sed command removes the no-adjust Nroff command so that +# the man output looks standard. +as.1: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) + touch $@ + -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod + -($(POD2MAN) as.pod | \ + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod + +MAINTAINERCLEANFILES += as.info + +# Automake 1.9 will only build info files in the objdir if they are +# mentioned in DISTCLEANFILES. It doesn't have to be unconditional, +# though, so we use a bogus condition. +if GENINSRC_NEVER +DISTCLEANFILES = as.info +endif diff --git a/binutils-2.25/gas/doc/Makefile.in b/binutils-2.25/gas/doc/Makefile.in new file mode 100644 index 00000000..4c3c4fb8 --- /dev/null +++ b/binutils-2.25/gas/doc/Makefile.in @@ -0,0 +1,806 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ + +# +# Copyright 2012 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(as_TEXINFOS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ + $(top_srcdir)/../config/zlib.m4 \ + $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gettext-sister.m4 \ + $(top_srcdir)/../config/largefile.m4 \ + $(top_srcdir)/../config/lcmessage.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/nls.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.m4 \ + $(top_srcdir)/../config/po.m4 \ + $(top_srcdir)/../config/progtest.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ + $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +depcomp = +am__depfiles_maybe = +SOURCES = +INFO_DEPS = as.info +TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/../texinfo +DVIS = as.dvi +PDFS = as.pdf +PSS = as.ps +HTMLS = as.html +TEXINFOS = as.texinfo +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDBINIT = @GDBINIT@ +GENCAT = @GENCAT@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +INCINTL = @INCINTL@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBINTL = @LIBINTL@ +LIBINTL_DEP = @LIBINTL_DEP@ +LIBM = @LIBM@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPCODES_LIB = @OPCODES_LIB@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +atof = @atof@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cgen_cpu_prefix = @cgen_cpu_prefix@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extra_objects = @extra_objects@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +install_tooldir = @install_tooldir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +obj_format = @obj_format@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_cpu_type = @target_cpu_type@ +target_os = @target_os@ +target_vendor = @target_vendor@ +te_file = @te_file@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.8 cygnus + +# What version of the manual you want; "all" includes everything +CONFIG = all + +# Options to extract the man page from as.texinfo +MANCONF = -Dman +TEXI2POD = perl $(BASEDIR)/etc/texi2pod.pl $(AM_MAKEINFOFLAGS) +POD2MAN = pod2man --center="GNU Development Tools" \ + --release="binutils-$(VERSION)" --section=1 + +man_MANS = as.1 +info_TEXINFOS = as.texinfo +as_TEXINFOS = asconfig.texi $(CPU_DOCS) +AM_MAKEINFOFLAGS = -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \ + -I "$(top_srcdir)/../bfd/doc" -I ../../bfd/doc + +TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \ + -I "$(top_srcdir)/../bfd/doc" -I ../../bfd/doc + +CPU_DOCS = \ + c-aarch64.texi \ + c-alpha.texi \ + c-arc.texi \ + c-arm.texi \ + c-avr.texi \ + c-bfin.texi \ + c-cr16.texi \ + c-cris.texi \ + c-d10v.texi \ + c-epiphany.texi \ + c-h8300.texi \ + c-hppa.texi \ + c-i370.texi \ + c-i386.texi \ + c-i860.texi \ + c-i960.texi \ + c-ip2k.texi \ + c-lm32.texi \ + c-m32c.texi \ + c-m32r.texi \ + c-m68hc11.texi \ + c-m68k.texi \ + c-metag.texi \ + c-microblaze.texi \ + c-mips.texi \ + c-mmix.texi \ + c-mt.texi \ + c-msp430.texi \ + c-nios2.texi \ + c-ns32k.texi \ + c-pdp11.texi \ + c-pj.texi \ + c-ppc.texi \ + c-rl78.texi \ + c-rx.texi \ + c-s390.texi \ + c-score.texi \ + c-sh.texi \ + c-sh64.texi \ + c-sparc.texi \ + c-tic54x.texi \ + c-tic6x.texi \ + c-tilegx.texi \ + c-tilepro.texi \ + c-vax.texi \ + c-v850.texi \ + c-xgate.texi \ + c-xstormy16.texi \ + c-xtensa.texi \ + c-z80.texi \ + c-z8k.texi + + +# This one isn't ready for prime time yet. Not even a little bit. +noinst_TEXINFOS = internals.texi +MAINTAINERCLEANFILES = asconfig.texi as.info +BASEDIR = $(srcdir)/../.. +BFDDIR = $(BASEDIR)/bfd +CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in + +# Automake 1.9 will only build info files in the objdir if they are +# mentioned in DISTCLEANFILES. It doesn't have to be unconditional, +# though, so we use a bogus condition. +@GENINSRC_NEVER_TRUE@DISTCLEANFILES = as.info +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .ps +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +as.info: as.texinfo $(as_TEXINFOS) + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo; \ + then \ + rc=0; \ + else \ + rc=$$?; \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +as.dvi: as.texinfo $(as_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo + +as.pdf: as.texinfo $(as_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) -o $@ `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo + +as.html: as.texinfo $(as_TEXINFOS) + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) `test -f 'as.texinfo' || echo '$(srcdir)/'`as.texinfo; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +.dvi.ps: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf as.aux as.cp as.cps as.fn as.fns as.ky as.log as.pg as.pgs as.tmp \ + as.toc as.tp as.tps as.vr as.vrs + +clean-aminfo: + -test -z "as.dvi as.pdf as.ps as.html" \ + || rm -rf as.dvi as.pdf as.ps as.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done + +clean-info: mostlyclean-aminfo clean-aminfo +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +check-am: +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) info-local + +install-data-am: install-data-local install-man + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-pdf-am uninstall-ps-am + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + clean-info clean-libtool dist-info distclean distclean-generic \ + distclean-libtool dvi dvi-am html html-am info info-am \ + info-local install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-man \ + uninstall-man1 uninstall-pdf-am uninstall-ps-am + + +asconfig.texi: $(CONFIG).texi + rm -f asconfig.texi + cp $(srcdir)/$(CONFIG).texi ./asconfig.texi + chmod u+w ./asconfig.texi + +# We want install to imply install-info as per GNU standards, despite the +# cygnus option. +install-data-local: install-info + +# Maintenance + +# We need it for the taz target in ../../Makefile.in. +info-local: $(MANS) + +# Build the man page from the texinfo file +# The sed command removes the no-adjust Nroff command so that +# the man output looks standard. +as.1: $(srcdir)/as.texinfo asconfig.texi $(CPU_DOCS) + touch $@ + -$(TEXI2POD) $(MANCONF) < $(srcdir)/as.texinfo > as.pod + -($(POD2MAN) as.pod | \ + sed -e '/^.if n .na/d' > $@.T$$$$ && \ + mv -f $@.T$$$$ $@) || \ + (rm -f $@.T$$$$ && exit 1) + rm -f as.pod + +# 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/binutils-2.25/gas/doc/all.texi b/binutils-2.25/gas/doc/all.texi new file mode 100644 index 00000000..99dbf8ff --- /dev/null +++ b/binutils-2.25/gas/doc/all.texi @@ -0,0 +1,107 @@ +@c Copyright 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001, 2002, +@c 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +@c 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 COFF +@set ELF +@set SOM + +@c CPUs of interest +@c ================ +@set AARCH64 +@set ALPHA +@set ARC +@set ARM +@set AVR +@set Blackfin +@set CR16 +@set CRIS +@set D10V +@set D30V +@set EPIPHANY +@set H8/300 +@set HPPA +@set I370 +@set I80386 +@set I860 +@set I960 +@set IA64 +@set IP2K +@set LM32 +@set M32C +@set M32R +@set xc16x +@set M68HC11 +@set M680X0 +@set MCORE +@set METAG +@set MICROBLAZE +@set MIPS +@set MMIX +@set MS1 +@set MSP430 +@set NIOSII +@set NS32K +@set PDP11 +@set PJ +@set PPC +@set RL78 +@set RX +@set S390 +@set SCORE +@set SH +@set SPARC +@set TIC54X +@set TIC6X +@set TILEGX +@set TILEPRO +@set V850 +@set VAX +@set XGATE +@set XSTORMY16 +@set XTENSA +@set Z80 +@set Z8000 + +@c Does this version of the assembler use the difference-table kludge? +@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/binutils-2.25/gas/doc/as.texinfo b/binutils-2.25/gas/doc/as.texinfo new file mode 100644 index 00000000..98435742 --- /dev/null +++ b/binutils-2.25/gas/doc/as.texinfo @@ -0,0 +1,7748 @@ +\input texinfo @c -*-Texinfo-*- +@c Copyright 1991-2013 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--- +@macro gcctabopt{body} +@code{\body\} +@end macro +@c defaults, config file may override: +@set have-stabs +@c --- +@c man begin NAME +@c --- +@include asconfig.texi +@include bfdver.texi +@c --- +@c man end +@c --- +@c common OR combinations of conditions +@ifset COFF +@set COFF-ELF +@end ifset +@ifset ELF +@set COFF-ELF +@end ifset +@ifset AOUT +@set aout-bout +@end ifset +@ifset ARM/Thumb +@set ARM +@end ifset +@ifset Blackfin +@set Blackfin +@end ifset +@ifset BOUT +@set aout-bout +@end ifset +@ifset H8/300 +@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 + +@ifnottex +@dircategory Software development +@direntry +* As: (as). The GNU assembler. +* Gas: (as). The GNU assembler. +@end direntry +@end ifnottex + +@finalout +@syncodeindex ky cp + +@copying +This file documents the GNU Assembler "@value{AS}". + +@c man begin COPYRIGHT +Copyright @copyright{} 1991-2013 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 +or any later version published by the Free Software Foundation; +with no Invariant Sections, with no Front-Cover Texts, and with no +Back-Cover Texts. A copy of the license is included in the +section entitled ``GNU Free Documentation License''. + +@c man end +@end copying + +@titlepage +@title Using @value{AS} +@subtitle The @sc{gnu} Assembler +@ifclear GENERIC +@subtitle for the @value{TARGET} family +@end ifclear +@ifset VERSION_PACKAGE +@sp 1 +@subtitle @value{VERSION_PACKAGE} +@end ifset +@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 @command{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-2013 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, with no Front-Cover Texts, and with no + Back-Cover Texts. A copy of the license is included in the + section entitled ``GNU Free Documentation License''. + +@end titlepage +@contents + +@ifnottex +@node Top +@top Using @value{AS} + +This file is a user guide to the @sc{gnu} assembler @command{@value{AS}} +@ifset VERSION_PACKAGE +@value{VERSION_PACKAGE} +@end ifset +version @value{VERSION}. +@ifclear GENERIC +This version of the file describes @command{@value{AS}} configured to generate +code for @value{TARGET} architectures. +@end ifclear + +This document is distributed under the terms of the GNU Free +Documentation License. A copy of the license is included in the +section entitled ``GNU Free Documentation License''. + +@menu +* Overview:: Overview +* Invoking:: Command-Line Options +* Syntax:: Syntax +* Sections:: Sections and Relocation +* Symbols:: Symbols +* Expressions:: Expressions +* Pseudo Ops:: Assembler Directives +@ifset ELF +* Object Attributes:: Object Attributes +@end ifset +* Machine Dependencies:: Machine Dependent Features +* Reporting Bugs:: Reporting Bugs +* Acknowledgements:: Who Did What +* GNU Free Documentation License:: GNU Free Documentation License +* AS Index:: AS Index +@end menu +@end ifnottex + +@node Overview +@chapter Overview +@iftex +This manual is a user guide to the @sc{gnu} assembler @command{@value{AS}}. +@ifclear GENERIC +This version of the manual describes @command{@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 @command{@value{AS}}. For details, +see @ref{Invoking,,Command-Line Options}. + +@c man title AS the portable GNU assembler. + +@ignore +@c man begin SEEALSO +gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. +@c man end +@end ignore + +@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 +@c man begin SYNOPSIS +@value{AS} [@b{-a}[@b{cdghlns}][=@var{file}]] [@b{--alternate}] [@b{-D}] + [@b{--compress-debug-sections}] [@b{--nocompress-debug-sections}] + [@b{--debug-prefix-map} @var{old}=@var{new}] + [@b{--defsym} @var{sym}=@var{val}] [@b{-f}] [@b{-g}] [@b{--gstabs}] + [@b{--gstabs+}] [@b{--gdwarf-2}] [@b{--gdwarf-sections}] + [@b{--help}] [@b{-I} @var{dir}] [@b{-J}] + [@b{-K}] [@b{-L}] [@b{--listing-lhs-width}=@var{NUM}] + [@b{--listing-lhs-width2}=@var{NUM}] [@b{--listing-rhs-width}=@var{NUM}] + [@b{--listing-cont-lines}=@var{NUM}] [@b{--keep-locals}] [@b{-o} + @var{objfile}] [@b{-R}] [@b{--reduce-memory-overheads}] [@b{--statistics}] + [@b{-v}] [@b{-version}] [@b{--version}] [@b{-W}] [@b{--warn}] + [@b{--fatal-warnings}] [@b{-w}] [@b{-x}] [@b{-Z}] [@b{@@@var{FILE}}] + [@b{--size-check=[error|warning]}] + [@b{--target-help}] [@var{target-options}] + [@b{--}|@var{files} @dots{}] +@c +@c Target dependent options are listed below. Keep the list sorted. +@c Add an empty line for separation. +@ifset AARCH64 + +@emph{Target AArch64 options:} + [@b{-EB}|@b{-EL}] + [@b{-mabi}=@var{ABI}] +@end ifset +@ifset ALPHA + +@emph{Target Alpha options:} + [@b{-m@var{cpu}}] + [@b{-mdebug} | @b{-no-mdebug}] + [@b{-replace} | @b{-noreplace}] + [@b{-relax}] [@b{-g}] [@b{-G@var{size}}] + [@b{-F}] [@b{-32addr}] +@end ifset +@ifset ARC + +@emph{Target ARC options:} + [@b{-marc[5|6|7|8]}] + [@b{-EB}|@b{-EL}] +@end ifset +@ifset ARM + +@emph{Target ARM options:} +@c Don't document the deprecated options + [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]] + [@b{-march}=@var{architecture}[+@var{extension}@dots{}]] + [@b{-mfpu}=@var{floating-point-format}] + [@b{-mfloat-abi}=@var{abi}] + [@b{-meabi}=@var{ver}] + [@b{-mthumb}] + [@b{-EB}|@b{-EL}] + [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}| + @b{-mapcs-reentrant}] + [@b{-mthumb-interwork}] [@b{-k}] +@end ifset +@ifset Blackfin + +@emph{Target Blackfin options:} + [@b{-mcpu}=@var{processor}[-@var{sirevision}]] + [@b{-mfdpic}] + [@b{-mno-fdpic}] + [@b{-mnopic}] +@end ifset +@ifset CRIS + +@emph{Target CRIS options:} + [@b{--underscore} | @b{--no-underscore}] + [@b{--pic}] [@b{-N}] + [@b{--emulation=criself} | @b{--emulation=crisaout}] + [@b{--march=v0_v10} | @b{--march=v10} | @b{--march=v32} | @b{--march=common_v10_v32}] +@c Deprecated -- deliberately not documented. +@c [@b{-h}] [@b{-H}] +@end ifset +@ifset D10V + +@emph{Target D10V options:} + [@b{-O}] +@end ifset +@ifset D30V + +@emph{Target D30V options:} + [@b{-O}|@b{-n}|@b{-N}] +@end ifset +@ifset EPIPHANY + +@emph{Target EPIPHANY options:} + [@b{-mepiphany}|@b{-mepiphany16}] +@end ifset +@ifset H8 + +@emph{Target H8/300 options:} + [-h-tick-hex] +@end ifset +@ifset HPPA +@c HPPA has no machine-dependent assembler options (yet). +@end ifset +@ifset I80386 + +@emph{Target i386 options:} + [@b{--32}|@b{--x32}|@b{--64}] [@b{-n}] + [@b{-march}=@var{CPU}[+@var{EXTENSION}@dots{}]] [@b{-mtune}=@var{CPU}] +@end ifset +@ifset I960 + +@emph{Target i960 options:} +@c see md_parse_option in tc-i960.c + [@b{-ACA}|@b{-ACA_A}|@b{-ACB}|@b{-ACC}|@b{-AKA}|@b{-AKB}| + @b{-AKC}|@b{-AMC}] + [@b{-b}] [@b{-no-relax}] +@end ifset +@ifset IA64 + +@emph{Target IA-64 options:} + [@b{-mconstant-gp}|@b{-mauto-pic}] + [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}] + [@b{-mle}|@b{mbe}] + [@b{-mtune=itanium1}|@b{-mtune=itanium2}] + [@b{-munwind-check=warning}|@b{-munwind-check=error}] + [@b{-mhint.b=ok}|@b{-mhint.b=warning}|@b{-mhint.b=error}] + [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}] +@end ifset +@ifset IP2K + +@emph{Target IP2K options:} + [@b{-mip2022}|@b{-mip2022ext}] +@end ifset +@ifset M32C + +@emph{Target M32C options:} + [@b{-m32c}|@b{-m16c}] [-relax] [-h-tick-hex] +@end ifset +@ifset M32R + +@emph{Target M32R options:} + [@b{--m32rx}|@b{--[no-]warn-explicit-parallel-conflicts}| + @b{--W[n]p}] +@end ifset +@ifset M680X0 + +@emph{Target M680X0 options:} + [@b{-l}] [@b{-m68000}|@b{-m68010}|@b{-m68020}|@dots{}] +@end ifset +@ifset M68HC11 + +@emph{Target M68HC11 options:} + [@b{-m68hc11}|@b{-m68hc12}|@b{-m68hcs12}|@b{-mm9s12x}|@b{-mm9s12xg}] + [@b{-mshort}|@b{-mlong}] + [@b{-mshort-double}|@b{-mlong-double}] + [@b{--force-long-branches}] [@b{--short-branches}] + [@b{--strict-direct-mode}] [@b{--print-insn-syntax}] + [@b{--print-opcodes}] [@b{--generate-example}] +@end ifset +@ifset MCORE + +@emph{Target MCORE options:} + [@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}] + [@b{-mcpu=[210|340]}] +@end ifset +@ifset METAG + +@emph{Target Meta options:} + [@b{-mcpu=@var{cpu}}] [@b{-mfpu=@var{cpu}}] [@b{-mdsp=@var{cpu}}] +@end ifset +@ifset MICROBLAZE +@emph{Target MICROBLAZE options:} +@c MicroBlaze has no machine-dependent assembler options. +@end ifset +@ifset MIPS + +@emph{Target MIPS options:} + [@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-O}[@var{optimization level}]] + [@b{-g}[@var{debug level}]] [@b{-G} @var{num}] [@b{-KPIC}] [@b{-call_shared}] + [@b{-non_shared}] [@b{-xgot} [@b{-mvxworks-pic}] + [@b{-mabi}=@var{ABI}] [@b{-32}] [@b{-n32}] [@b{-64}] [@b{-mfp32}] [@b{-mgp32}] + [@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}] [@b{-mips1}] [@b{-mips2}] + [@b{-mips3}] [@b{-mips4}] [@b{-mips5}] [@b{-mips32}] [@b{-mips32r2}] + [@b{-mips64}] [@b{-mips64r2}] + [@b{-construct-floats}] [@b{-no-construct-floats}] + [@b{-mnan=@var{encoding}}] + [@b{-trap}] [@b{-no-break}] [@b{-break}] [@b{-no-trap}] + [@b{-mips16}] [@b{-no-mips16}] + [@b{-mmicromips}] [@b{-mno-micromips}] + [@b{-msmartmips}] [@b{-mno-smartmips}] + [@b{-mips3d}] [@b{-no-mips3d}] + [@b{-mdmx}] [@b{-no-mdmx}] + [@b{-mdsp}] [@b{-mno-dsp}] + [@b{-mdspr2}] [@b{-mno-dspr2}] + [@b{-mmsa}] [@b{-mno-msa}] + [@b{-mmt}] [@b{-mno-mt}] + [@b{-mmcu}] [@b{-mno-mcu}] + [@b{-minsn32}] [@b{-mno-insn32}] + [@b{-mfix7000}] [@b{-mno-fix7000}] + [@b{-mfix-vr4120}] [@b{-mno-fix-vr4120}] + [@b{-mfix-vr4130}] [@b{-mno-fix-vr4130}] + [@b{-mdebug}] [@b{-no-mdebug}] + [@b{-mpdr}] [@b{-mno-pdr}] +@end ifset +@ifset MMIX + +@emph{Target MMIX options:} + [@b{--fixed-special-register-names}] [@b{--globalize-symbols}] + [@b{--gnu-syntax}] [@b{--relax}] [@b{--no-predefined-symbols}] + [@b{--no-expand}] [@b{--no-merge-gregs}] [@b{-x}] + [@b{--linker-allocated-gregs}] +@end ifset +@ifset NIOSII + +@emph{Target Nios II options:} + [@b{-relax-all}] [@b{-relax-section}] [@b{-no-relax}] + [@b{-EB}] [@b{-EL}] +@end ifset +@ifset PDP11 + +@emph{Target PDP11 options:} + [@b{-mpic}|@b{-mno-pic}] [@b{-mall}] [@b{-mno-extensions}] + [@b{-m}@var{extension}|@b{-mno-}@var{extension}] + [@b{-m}@var{cpu}] [@b{-m}@var{machine}] +@end ifset +@ifset PJ + +@emph{Target picoJava options:} + [@b{-mb}|@b{-me}] +@end ifset +@ifset PPC + +@emph{Target PowerPC options:} + [@b{-a32}|@b{-a64}] + [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}|@b{-m403}|@b{-m405}| + @b{-m440}|@b{-m464}|@b{-m476}|@b{-m7400}|@b{-m7410}|@b{-m7450}|@b{-m7455}|@b{-m750cl}|@b{-mppc64}| + @b{-m620}|@b{-me500}|@b{-e500x2}|@b{-me500mc}|@b{-me500mc64}|@b{-me5500}|@b{-me6500}|@b{-mppc64bridge}| + @b{-mbooke}|@b{-mpower4}|@b{-mpwr4}|@b{-mpower5}|@b{-mpwr5}|@b{-mpwr5x}|@b{-mpower6}|@b{-mpwr6}| + @b{-mpower7}|@b{-mpwr7}|@b{-mpower8}|@b{-mpwr8}|@b{-ma2}|@b{-mcell}|@b{-mspe}|@b{-mtitan}|@b{-me300}|@b{-mcom}] + [@b{-many}] [@b{-maltivec}|@b{-mvsx}|@b{-mhtm}|@b{-mvle}] + [@b{-mregnames}|@b{-mno-regnames}] + [@b{-mrelocatable}|@b{-mrelocatable-lib}|@b{-K PIC}] [@b{-memb}] + [@b{-mlittle}|@b{-mlittle-endian}|@b{-le}|@b{-mbig}|@b{-mbig-endian}|@b{-be}] + [@b{-msolaris}|@b{-mno-solaris}] + [@b{-nops=@var{count}}] +@end ifset +@ifset RX + +@emph{Target RX options:} + [@b{-mlittle-endian}|@b{-mbig-endian}] + [@b{-m32bit-doubles}|@b{-m64bit-doubles}] + [@b{-muse-conventional-section-names}] + [@b{-msmall-data-limit}] + [@b{-mpid}] + [@b{-mrelax}] + [@b{-mint-register=@var{number}}] + [@b{-mgcc-abi}|@b{-mrx-abi}] +@end ifset +@ifset S390 + +@emph{Target s390 options:} + [@b{-m31}|@b{-m64}] [@b{-mesa}|@b{-mzarch}] [@b{-march}=@var{CPU}] + [@b{-mregnames}|@b{-mno-regnames}] + [@b{-mwarn-areg-zero}] +@end ifset +@ifset SCORE + +@emph{Target SCORE options:} + [@b{-EB}][@b{-EL}][@b{-FIXDD}][@b{-NWARN}] + [@b{-SCORE5}][@b{-SCORE5U}][@b{-SCORE7}][@b{-SCORE3}] + [@b{-march=score7}][@b{-march=score3}] + [@b{-USE_R1}][@b{-KPIC}][@b{-O0}][@b{-G} @var{num}][@b{-V}] +@end ifset +@ifset SPARC + +@emph{Target SPARC options:} +@c The order here is important. See c-sparc.texi. + [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite} + @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}] + [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}] + [@b{-32}|@b{-64}] +@end ifset +@ifset TIC54X + +@emph{Target TIC54X options:} + [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}] + [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}] +@end ifset + +@ifset TIC6X + +@emph{Target TIC6X options:} + [@b{-march=@var{arch}}] [@b{-mbig-endian}|@b{-mlittle-endian}] + [@b{-mdsbt}|@b{-mno-dsbt}] [@b{-mpid=no}|@b{-mpid=near}|@b{-mpid=far}] + [@b{-mpic}|@b{-mno-pic}] +@end ifset +@ifset TILEGX + +@emph{Target TILE-Gx options:} + [@b{-m32}|@b{-m64}][@b{-EB}][@b{-EL}] +@end ifset +@ifset TILEPRO +@c TILEPro has no machine-dependent assembler options +@end ifset + +@ifset XTENSA + +@emph{Target Xtensa options:} + [@b{--[no-]text-section-literals}] [@b{--[no-]absolute-literals}] + [@b{--[no-]target-align}] [@b{--[no-]longcalls}] + [@b{--[no-]transform}] + [@b{--rename-section} @var{oldname}=@var{newname}] +@end ifset + +@ifset Z80 + +@emph{Target Z80 options:} + [@b{-z80}] [@b{-r800}] + [@b{ -ignore-undocumented-instructions}] [@b{-Wnud}] + [@b{ -ignore-unportable-instructions}] [@b{-Wnup}] + [@b{ -warn-undocumented-instructions}] [@b{-Wud}] + [@b{ -warn-unportable-instructions}] [@b{-Wup}] + [@b{ -forbid-undocumented-instructions}] [@b{-Fud}] + [@b{ -forbid-unportable-instructions}] [@b{-Fup}] +@end ifset + +@ifset Z8000 +@c Z8000 has no machine-dependent assembler options +@end ifset + +@c man end +@end smallexample + +@c man begin OPTIONS + +@table @gcctabopt +@include at-file.texi + +@item -a[cdghlmns] +Turn on listings, in any of a variety of ways: + +@table @gcctabopt +@item -ac +omit false conditionals + +@item -ad +omit debugging directives + +@item -ag +include general information, like @value{AS} version and options passed + +@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 --alternate +Begin in alternate macro mode. +@ifclear man +@xref{Altmacro,,@code{.altmacro}}. +@end ifclear + +@item --compress-debug-sections +Compress DWARF debug sections using zlib. The debug sections are renamed +to begin with @samp{.zdebug}, and the resulting object file may not be +compatible with older linkers and object file utilities. + +@item --nocompress-debug-sections +Do not compress DWARF debug sections. This is the default. + +@item -D +Ignored. This option is accepted for script compatibility with calls to +other assemblers. + +@item --debug-prefix-map @var{old}=@var{new} +When assembling files in directory @file{@var{old}}, record debugging +information describing them as in @file{@var{new}} instead. + +@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. The value of the symbol can be overridden inside a source file via the +use of a @code{.set} pseudo-op. + +@item -f +``fast''---skip whitespace and comment preprocessing (assume source is +compiler output). + +@item -g +@itemx --gen-debug +Generate debugging information for each assembler source line using whichever +debug format is preferred by the target. This currently means either STABS, +ECOFF or DWARF2. + +@item --gstabs +Generate stabs debugging information for each assembler line. This +may help debugging assembler code, if the debugger can handle it. + +@item --gstabs+ +Generate stabs debugging information for each assembler line, with GNU +extensions that probably only gdb can handle, and that could make other +debuggers crash or refuse to read your program. This +may help debugging assembler code. Currently the only GNU extension is +the location of the current working directory at assembling time. + +@item --gdwarf-2 +Generate DWARF2 debugging information for each assembler line. This +may help debugging assembler code, if the debugger can handle it. Note---this +option is only supported by some targets, not all of them. + +@item --gdwarf-sections +Instead of creating a .debug_line section, create a series of +.debug_line.@var{foo} sections where @var{foo} is the name of the +corresponding code section. For example a code section called @var{.text.func} +will have its dwarf line number information placed into a section called +@var{.debug_line.text.func}. If the code section is just called @var{.text} +then debug line section will still be called just @var{.debug_line} without any +suffix. + +@item --size-check=error +@itemx --size-check=warning +Issue an error or warning for invalid ELF .size directive. + +@item --help +Print a summary of the command line options and exit. + +@item --target-help +Print a summary of all target specific 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. These symbols start with +system-specific local label prefixes, typically @samp{.L} for ELF systems +or @samp{L} for traditional a.out systems. +@ifclear man +@xref{Symbol Names}. +@end ifclear + +@item --listing-lhs-width=@var{number} +Set the maximum width, in words, of the output data column for an assembler +listing to @var{number}. + +@item --listing-lhs-width2=@var{number} +Set the maximum width, in words, of the output data column for continuation +lines in an assembler listing to @var{number}. + +@item --listing-rhs-width=@var{number} +Set the maximum width of an input source line, as displayed in a listing, to +@var{number} bytes. + +@item --listing-cont-lines=@var{number} +Set the maximum number of lines printed in a listing for a single line of input +to @var{number} + 1. + +@item -o @var{objfile} +Name the object-file output from @command{@value{AS}} @var{objfile}. + +@item -R +Fold the data section into the text section. + +@kindex --hash-size=@var{number} +Set the default size of GAS's hash tables to a prime number close to +@var{number}. Increasing this value can reduce the length of time it takes the +assembler to perform its tasks, at the expense of increasing the assembler's +memory requirements. Similarly reducing this value can reduce the memory +requirements at the expense of speed. + +@item --reduce-memory-overheads +This option reduces GAS's memory requirements, at the expense of making the +assembly processes slower. Currently this switch is a synonym for +@samp{--hash-size=4051}, but in the future it may have other effects as well. + +@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 @command{as} version. + +@item --version +Print the @command{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 +@c man end + +@ifset AARCH64 + +@ifclear man +@xref{AArch64 Options}, for the options available when @value{AS} is configured +for the 64-bit mode of the ARM Architecture (AArch64). +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for the +64-bit mode of the ARM Architecture (AArch64). +@c man end +@c man begin INCLUDE +@include c-aarch64.texi +@c ended inside the included file +@end ifset + +@end ifset + +@ifset ALPHA + +@ifclear man +@xref{Alpha Options}, for the options available when @value{AS} is configured +for an Alpha processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for an Alpha +processor. +@c man end +@c man begin INCLUDE +@include c-alpha.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS +@ifset ARC +The following options are available when @value{AS} is configured for +an ARC processor. + +@table @gcctabopt +@item -marc[5|6|7|8] +This option selects the core processor variant. +@item -EB | -EL +Select either big-endian (-EB) or little-endian (-EL) output. +@end table +@end ifset + +@ifset ARM +The following options are available when @value{AS} is configured for the ARM +processor family. + +@table @gcctabopt +@item -mcpu=@var{processor}[+@var{extension}@dots{}] +Specify which ARM processor variant is the target. +@item -march=@var{architecture}[+@var{extension}@dots{}] +Specify which ARM architecture variant is used by the target. +@item -mfpu=@var{floating-point-format} +Select which Floating Point architecture is the target. +@item -mfloat-abi=@var{abi} +Select which floating point ABI is in use. +@item -mthumb +Enable Thumb only instruction decoding. +@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant +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 +@c man end + +@ifset Blackfin + +@ifclear man +@xref{Blackfin Options}, for the options available when @value{AS} is +configured for the Blackfin processor family. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for +the Blackfin processor family. +@c man end +@c man begin INCLUDE +@include c-bfin.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS +@ifset CRIS +See the info pages for documentation of the CRIS-specific options. +@end ifset + +@ifset D10V +The following options are available when @value{AS} is configured for +a D10V processor. +@table @gcctabopt +@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 @gcctabopt +@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 +@c man end + +@ifset EPIPHANY +The following options are available when @value{AS} is configured for the +Adapteva EPIPHANY series. + +@ifclear man +@xref{Epiphany Options}, for the options available when @value{AS} is +configured for an Epiphany processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for +an Epiphany processor. +@c man end +@c man begin INCLUDE +@include c-epiphany.texi +@c ended inside the included file +@end ifset + +@end ifset + +@ifset H8300 + +@ifclear man +@xref{H8/300 Options}, for the options available when @value{AS} is configured +for an H8/300 processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for an H8/300 +processor. +@c man end +@c man begin INCLUDE +@include c-h8300.texi +@c ended inside the included file +@end ifset + +@end ifset + +@ifset I80386 + +@ifclear man +@xref{i386-Options}, for the options available when @value{AS} is +configured for an i386 processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for +an i386 processor. +@c man end +@c man begin INCLUDE +@include c-i386.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS +@ifset I960 +The following options are available when @value{AS} is configured for the +Intel 80960 processor. + +@table @gcctabopt +@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 IP2K +The following options are available when @value{AS} is configured for the +Ubicom IP2K series. + +@table @gcctabopt + +@item -mip2022ext +Specifies that the extended IP2022 instructions are allowed. + +@item -mip2022 +Restores the default behaviour, which restricts the permitted instructions to +just the basic IP2022 ones. + +@end table +@end ifset + +@ifset M32C +The following options are available when @value{AS} is configured for the +Renesas M32C and M16C processors. + +@table @gcctabopt + +@item -m32c +Assemble M32C instructions. + +@item -m16c +Assemble M16C instructions (the default). + +@item -relax +Enable support for link-time relaxations. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + +@end table +@end ifset + +@ifset M32R +The following options are available when @value{AS} is configured for the +Renesas M32R (formerly Mitsubishi M32R) series. + +@table @gcctabopt + +@item --m32rx +Specify which processor in the M32R family is the target. The default +is normally the M32R, but this option changes it to the M32RX. + +@item --warn-explicit-parallel-conflicts or --Wp +Produce warning messages when questionable parallel constructs are +encountered. + +@item --no-warn-explicit-parallel-conflicts or --Wnp +Do not produce warning messages when questionable parallel constructs are +encountered. + +@end table +@end ifset + +@ifset M680X0 +The following options are available when @value{AS} is configured for the +Motorola 68000 series. + +@table @gcctabopt + +@item -l +Shorten references to undefined symbols, to one word instead of two. + +@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030 +@itemx | -m68040 | -m68060 | -m68302 | -m68331 | -m68332 +@itemx | -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 NIOSII + +@ifclear man +@xref{Nios II Options}, for the options available when @value{AS} is configured +for an Altera Nios II processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for an +Altera Nios II processor. +@c man end +@c man begin INCLUDE +@include c-nios2.texi +@c ended inside the included file +@end ifset +@end ifset + +@ifset PDP11 + +For details about the PDP-11 machine dependent features options, +see @ref{PDP-11-Options}. + +@table @gcctabopt +@item -mpic | -mno-pic +Generate position-independent (or position-dependent) code. The +default is @option{-mpic}. + +@item -mall +@itemx -mall-extensions +Enable all instruction set extensions. This is the default. + +@item -mno-extensions +Disable all instruction set extensions. + +@item -m@var{extension} | -mno-@var{extension} +Enable (or disable) a particular instruction set extension. + +@item -m@var{cpu} +Enable the instruction set extensions supported by a particular CPU, and +disable all other extensions. + +@item -m@var{machine} +Enable the instruction set extensions supported by a particular machine +model, and disable all other extensions. +@end table + +@end ifset + +@ifset PJ +The following options are available when @value{AS} is configured for +a picoJava processor. + +@table @gcctabopt + +@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 M68HC11 +The following options are available when @value{AS} is configured for the +Motorola 68HC11 or 68HC12 series. + +@table @gcctabopt + +@item -m68hc11 | -m68hc12 | -m68hcs12 | -mm9s12x | -mm9s12xg +Specify what processor is the target. The default is +defined by the configuration option when building the assembler. + +@item --xgate-ramoffset +Instruct the linker to offset RAM addresses from S12X address space into +XGATE address space. + +@item -mshort +Specify to use the 16-bit integer ABI. + +@item -mlong +Specify to use the 32-bit integer ABI. + +@item -mshort-double +Specify to use the 32-bit double ABI. + +@item -mlong-double +Specify to use the 64-bit double ABI. + +@item --force-long-branches +Relative branches are turned into absolute ones. This concerns +conditional branches, unconditional branches and branches to a +sub routine. + +@item -S | --short-branches +Do not turn relative branches into absolute ones +when the offset is out of range. + +@item --strict-direct-mode +Do not turn the direct addressing mode into extended addressing mode +when the instruction does not support direct addressing mode. + +@item --print-insn-syntax +Print the syntax of instruction in case of error. + +@item --print-opcodes +Print the list of instructions with syntax and then exit. + +@item --generate-example +Print an example of instruction for each possible instruction and then exit. +This option is only useful for testing @command{@value{AS}}. + +@end table +@end ifset + +@ifset SPARC +The following options are available when @command{@value{AS}} is configured +for the SPARC architecture: + +@table @gcctabopt +@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 TIC54X +The following options are available when @value{AS} is configured for the 'c54x +architecture. + +@table @gcctabopt +@item -mfar-mode +Enable extended addressing mode. All addresses and relocations will assume +extended addressing (usually 23 bits). +@item -mcpu=@var{CPU_VERSION} +Sets the CPU version being compiled for. +@item -merrors-to-file @var{FILENAME} +Redirect error output to a file, for broken systems which don't support such +behaviour in the shell. +@end table +@end ifset + +@ifset MIPS +The following options are available when @value{AS} is configured for +a MIPS processor. + +@table @gcctabopt +@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 +@itemx -mips4 +@itemx -mips5 +@itemx -mips32 +@itemx -mips32r2 +@itemx -mips64 +@itemx -mips64r2 +Generate code for a particular MIPS Instruction Set Architecture level. +@samp{-mips1} is an alias for @samp{-march=r3000}, @samp{-mips2} is an +alias for @samp{-march=r6000}, @samp{-mips3} is an alias for +@samp{-march=r4000} and @samp{-mips4} is an alias for @samp{-march=r8000}. +@samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips64}, and +@samp{-mips64r2} correspond to generic MIPS V, MIPS32, MIPS32 Release 2, +MIPS64, and MIPS64 Release 2 ISA processors, respectively. + +@item -march=@var{cpu} +Generate code for a particular MIPS CPU. + +@item -mtune=@var{cpu} +Schedule and tune for a particular MIPS CPU. + +@item -mfix7000 +@itemx -mno-fix7000 +Cause nops to be inserted if the read of the destination register +of an mfhi or mflo instruction occurs in the following two instructions. + +@item -mdebug +@itemx -no-mdebug +Cause stabs-style debugging output to go into an ECOFF-style .mdebug +section instead of the standard ELF .stabs sections. + +@item -mpdr +@itemx -mno-pdr +Control generation of @code{.pdr} sections. + +@item -mgp32 +@itemx -mfp32 +The register sizes are normally inferred from the ISA and ABI, but these +flags force a certain group of registers to be treated as 32 bits wide at +all times. @samp{-mgp32} controls the size of general-purpose registers +and @samp{-mfp32} controls the size of floating-point registers. + +@item -mips16 +@itemx -no-mips16 +Generate code for the MIPS 16 processor. This is equivalent to putting +@code{.set mips16} at the start of the assembly file. @samp{-no-mips16} +turns off this option. + +@item -mmicromips +@itemx -mno-micromips +Generate code for the microMIPS processor. This is equivalent to putting +@code{.set micromips} at the start of the assembly file. @samp{-mno-micromips} +turns off this option. This is equivalent to putting @code{.set nomicromips} +at the start of the assembly file. + +@item -msmartmips +@itemx -mno-smartmips +Enables the SmartMIPS extension to the MIPS32 instruction set. This is +equivalent to putting @code{.set smartmips} at the start of the assembly file. +@samp{-mno-smartmips} turns off this option. + +@item -mips3d +@itemx -no-mips3d +Generate code for the MIPS-3D Application Specific Extension. +This tells the assembler to accept MIPS-3D instructions. +@samp{-no-mips3d} turns off this option. + +@item -mdmx +@itemx -no-mdmx +Generate code for the MDMX Application Specific Extension. +This tells the assembler to accept MDMX instructions. +@samp{-no-mdmx} turns off this option. + +@item -mdsp +@itemx -mno-dsp +Generate code for the DSP Release 1 Application Specific Extension. +This tells the assembler to accept DSP Release 1 instructions. +@samp{-mno-dsp} turns off this option. + +@item -mdspr2 +@itemx -mno-dspr2 +Generate code for the DSP Release 2 Application Specific Extension. +This option implies -mdsp. +This tells the assembler to accept DSP Release 2 instructions. +@samp{-mno-dspr2} turns off this option. + +@item -mmsa +@itemx -mno-msa +Generate code for the MIPS SIMD Architecture Extension. +This tells the assembler to accept MSA instructions. +@samp{-mno-msa} turns off this option. + +@item -mmt +@itemx -mno-mt +Generate code for the MT Application Specific Extension. +This tells the assembler to accept MT instructions. +@samp{-mno-mt} turns off this option. + +@item -mmcu +@itemx -mno-mcu +Generate code for the MCU Application Specific Extension. +This tells the assembler to accept MCU instructions. +@samp{-mno-mcu} turns off this option. + +@item -minsn32 +@itemx -mno-insn32 +Only use 32-bit instruction encodings when generating code for the +microMIPS processor. This option inhibits the use of any 16-bit +instructions. This is equivalent to putting @code{.set insn32} at +the start of the assembly file. @samp{-mno-insn32} turns off this +option. This is equivalent to putting @code{.set noinsn32} at the +start of the assembly file. By default @samp{-mno-insn32} is +selected, allowing all instructions to be used. + +@item --construct-floats +@itemx --no-construct-floats +The @samp{--no-construct-floats} option disables the construction of +double width floating point constants by loading the two halves of the +value into the two single width floating point registers that make up +the double width register. By default @samp{--construct-floats} is +selected, allowing construction of these floating point constants. + +@item --relax-branch +@itemx --no-relax-branch +The @samp{--relax-branch} option enables the relaxation of out-of-range +branches. By default @samp{--no-relax-branch} is selected, causing any +out-of-range branches to produce an error. + +@item -mnan=@var{encoding} +Select between the IEEE 754-2008 (@option{-mnan=2008}) or the legacy +(@option{-mnan=legacy}) NaN encoding format. The latter is the default. + +@cindex emulation +@item --emulation=@var{name} +This option was formerly used to switch between ELF and ECOFF output +on targets like IRIX 5 that supported both. MIPS ECOFF support was +removed in GAS 2.24, so the option now serves little purpose. +It is retained for backwards compatibility. + +The available configuration names are: @samp{mipself}, @samp{mipslelf} and +@samp{mipsbelf}. Choosing @samp{mipself} now has no effect, since the output +is always ELF. @samp{mipslelf} and @samp{mipsbelf} select little- and +big-endian output respectively, but @samp{-EL} and @samp{-EB} are now the +preferred options instead. + +@item -nocpp +@command{@value{AS}} ignores this option. It is accepted for compatibility with +the native tools. + +@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. + +@item -n +When this option is used, @command{@value{AS}} will issue a warning every +time it generates a nop instruction from a macro. +@end table +@end ifset + +@ifset MCORE +The following options are available when @value{AS} is configured for +an MCore processor. + +@table @gcctabopt +@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 overridden by the @samp{-sifilter} command line option. + +@item -relax +Alter jump instructions for long displacements. + +@item -mcpu=[210|340] +Select the cpu type on the target hardware. This controls which instructions +can be assembled. + +@item -EB +Assemble for a big endian target. + +@item -EL +Assemble for a little endian target. + +@end table +@end ifset +@c man end + +@ifset METAG + +@ifclear man +@xref{Meta Options}, for the options available when @value{AS} is configured +for a Meta processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for a +Meta processor. +@c man end +@c man begin INCLUDE +@include c-metag.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS +@ifset MMIX +See the info pages for documentation of the MMIX-specific options. +@end ifset + +@c man end +@ifset PPC + +@ifclear man +@xref{PowerPC-Opts}, for the options available when @value{AS} is configured +for a PowerPC processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for a +PowerPC processor. +@c man end +@c man begin INCLUDE +@include c-ppc.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS +@ifset RX +See the info pages for documentation of the RX-specific options. +@end ifset + +@ifset S390 +The following options are available when @value{AS} is configured for the s390 +processor family. + +@table @gcctabopt +@item -m31 +@itemx -m64 +Select the word size, either 31/32 bits or 64 bits. +@item -mesa +@item -mzarch +Select the architecture mode, either the Enterprise System +Architecture (esa) or the z/Architecture mode (zarch). +@item -march=@var{processor} +Specify which s390 processor variant is the target, @samp{g6}, @samp{g6}, +@samp{z900}, @samp{z990}, @samp{z9-109}, @samp{z9-ec}, @samp{z10}, +@samp{z196}, or @samp{zEC12}. +@item -mregnames +@itemx -mno-regnames +Allow or disallow symbolic names for registers. +@item -mwarn-areg-zero +Warn whenever the operand for a base or index register has been specified +but evaluates to zero. +@end table +@end ifset +@c man end + +@ifset TIC6X + +@ifclear man +@xref{TIC6X Options}, for the options available when @value{AS} is configured +for a TMS320C6000 processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for a +TMS320C6000 processor. +@c man end +@c man begin INCLUDE +@include c-tic6x.texi +@c ended inside the included file +@end ifset + +@end ifset + +@ifset TILEGX + +@ifclear man +@xref{TILE-Gx Options}, for the options available when @value{AS} is configured +for a TILE-Gx processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for a TILE-Gx +processor. +@c man end +@c man begin INCLUDE +@include c-tilegx.texi +@c ended inside the included file +@end ifset + +@end ifset + +@ifset XTENSA + +@ifclear man +@xref{Xtensa Options}, for the options available when @value{AS} is configured +for an Xtensa processor. +@end ifclear + +@ifset man +@c man begin OPTIONS +The following options are available when @value{AS} is configured for an +Xtensa processor. +@c man end +@c man begin INCLUDE +@include c-xtensa.texi +@c ended inside the included file +@end ifset + +@end ifset + +@c man begin OPTIONS + +@ifset Z80 +The following options are available when @value{AS} is configured for +a Z80 family processor. +@table @gcctabopt +@item -z80 +Assemble for Z80 processor. +@item -r800 +Assemble for R800 processor. +@item -ignore-undocumented-instructions +@itemx -Wnud +Assemble undocumented Z80 instructions that also work on R800 without warning. +@item -ignore-unportable-instructions +@itemx -Wnup +Assemble all undocumented Z80 instructions without warning. +@item -warn-undocumented-instructions +@itemx -Wud +Issue a warning for undocumented Z80 instructions that also work on R800. +@item -warn-unportable-instructions +@itemx -Wup +Issue a warning for undocumented Z80 instructions that do not work on R800. +@item -forbid-undocumented-instructions +@itemx -Fud +Treat all undocumented instructions as errors. +@item -forbid-unportable-instructions +@itemx -Fup +Treat undocumented Z80 instructions that do not work on R800 as errors. +@end table +@end ifset + +@c man end + +@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} @command{@value{AS}}. We cover the syntax expected in source files, including +notation for symbols, constants, and expressions; the directives that +@command{@value{AS}} understands; and of course how to invoke @command{@value{AS}}. + +@ifclear GENERIC +We also cover special features in the @value{TARGET} +configuration of @command{@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}. For the H8/300H, see @cite{H8/300H Series +Programming Manual} (Renesas). +@end ifset +@ifset SH +For information on the Renesas (formerly Hitachi) / SuperH SH machine instruction set, +see @cite{SH-Microcomputer User's Manual} (Renesas) or +@cite{SH-4 32-bit CPU Core Architecture} (SuperH) and +@cite{SuperH (SH) 64-Bit RISC Series} (SuperH). +@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. + +@command{@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 +@command{@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 + +@c man begin DESCRIPTION + +@sc{gnu} @command{as} is really a family of assemblers. +@ifclear GENERIC +This manual describes @command{@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 +@command{@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 @command{@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 @command{@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 + +@c man end + +Unlike older assemblers, @command{@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 +For the @value{TARGET} target, @command{@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 I960 +On the @value{TARGET}, @command{@value{AS}} can be configured to produce either +@code{b.out} or COFF format object files. +@end ifset +@ifset HPPA +On the @value{TARGET}, @command{@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 @command{@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 @command{@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 +@command{@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 @command{@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. + +@c man begin DESCRIPTION +Each time you run @command{@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 @command{@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 @command{@value{AS}} no file names it attempts to read one input file +from the @command{@value{AS}} standard input, which is normally your terminal. You +may have to type @key{ctl-D} to tell @command{@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, @command{@value{AS}} produces a small, empty object +file. + +@c man end + +@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 @command{@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 @command{@value{AS}} source +is itself synthesized from other files. @command{@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 @command{@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 @command{@value{AS}} is configured for the Intel 80960. +@end ifset +You can give it another name by using the @option{-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 + +@c man begin DESCRIPTION + +@cindex error messages +@cindex warning messages +@cindex messages from assembler +@command{@value{AS}} may write warnings and error messages to the standard error +file (usually your terminal). This should not happen when a compiler +runs @command{@value{AS}} automatically. Warnings report an assumption made so +that @command{@value{AS}} could keep assembling a flawed program; errors report a +grave problem that stops the assembly. + +@c man end + +@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 +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; see @ref{Machine Dependencies}, +for options specific +@ifclear GENERIC +to the @value{TARGET} target. +@end ifclear +@ifset GENERIC +to particular machine architectures. +@end ifset + +@c man begin DESCRIPTION + +If you are invoking @command{@value{AS}} via the @sc{gnu} C compiler, +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 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.) + +@c man end + +@menu +* a:: -a[cdghlns] enable listings +* alternate:: --alternate enable alternate macro syntax +* D:: -D for compatibility +* f:: -f to work faster +* I:: -I for .include search path +@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 symbols +* listing:: --listing-XXX to configure listing output +* M:: -M or --mri to assemble in MRI compatibility mode +* MD:: --MD for dependency tracking +* o:: -o to name the object file +* R:: -R to join data and text sections +* statistics:: --statistics to see statistics about assembly +* traditional-format:: --traditional-format for compatible output +* v:: -v to announce version +* W:: -W, --no-warn, --warn, --fatal-warnings to control warnings +* Z:: -Z to make object file even after errors +@end menu + +@node a +@section Enable Listings: @option{-a[cdghlns]} + +@kindex -a +@kindex -ac +@kindex -ad +@kindex -ag +@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{-ag} option to print a first section with general assembly +information, like @value{AS} version, switches passed, or time stamp. + +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}. + +Note if the assembler source is coming from the standard input (e.g., +because it +is being created by @code{@value{GCC}} and the @samp{-pipe} command line switch +is being used) then the listing will not contain any comments or preprocessor +directives. This is because the listing code buffers input source lines from +stdin only after they have been preprocessed by the assembler. This reduces +memory usage and makes the code more efficient. + +@node alternate +@section @option{--alternate} + +@kindex --alternate +Begin in alternate macro mode, see @ref{Altmacro,,@code{.altmacro}}. + +@node D +@section @option{-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 +@command{@value{AS}}. + +@node f +@section Work Faster: @option{-f} + +@kindex -f +@cindex trusted compiler +@cindex faster processing (@option{-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), @command{@value{AS}} does +not work correctly. +@end quotation + +@node I +@section @code{.include} Search Path: @option{-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 +@command{@value{AS}} searches for files specified in @code{.include} +directives (@pxref{Include,,@code{.include}}). You may use @option{-I} as +many times as necessary to include a variety of paths. The current +working directory is always searched first; after that, @command{@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: @option{-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 +@command{@value{AS}} sometimes alters the code emitted for directives of the +form @samp{.word @var{sym1}-@var{sym2}}. @xref{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 Symbols: @option{-L} + +@kindex -L +@cindex local symbols, retaining in output +Symbols beginning with system-specific local label prefixes, typically +@samp{.L} for ELF systems or @samp{L} for traditional a.out systems, are +called @dfn{local symbols}. @xref{Symbol Names}. Normally you do not see +such symbols when debugging, because they are intended for the use of +programs (like compilers) that compose assembler programs, not for your +notice. Normally both @command{@value{AS}} and @code{@value{LD}} discard +such symbols, so you do not normally debug with them. + +This option tells @command{@value{AS}} to retain those local symbols +in the object file. Usually if you do this you also tell the linker +@code{@value{LD}} to preserve those symbols. + +@node listing +@section Configuring listing output: @option{--listing} + +The listing feature of the assembler can be enabled via the command line switch +@samp{-a} (@pxref{a}). This feature combines the input source file(s) with a +hex dump of the corresponding locations in the output object file, and displays +them as a listing file. The format of this listing can be controlled by +directives inside the assembler source (i.e., @code{.list} (@pxref{List}), +@code{.title} (@pxref{Title}), @code{.sbttl} (@pxref{Sbttl}), +@code{.psize} (@pxref{Psize}), and +@code{.eject} (@pxref{Eject}) and also by the following switches: + +@table @gcctabopt +@item --listing-lhs-width=@samp{number} +@kindex --listing-lhs-width +@cindex Width of first line disassembly output +Sets the maximum width, in words, of the first line of the hex byte dump. This +dump appears on the left hand side of the listing output. + +@item --listing-lhs-width2=@samp{number} +@kindex --listing-lhs-width2 +@cindex Width of continuation lines of disassembly output +Sets the maximum width, in words, of any further lines of the hex byte dump for +a given input source line. If this value is not specified, it defaults to being +the same as the value specified for @samp{--listing-lhs-width}. If neither +switch is used the default is to one. + +@item --listing-rhs-width=@samp{number} +@kindex --listing-rhs-width +@cindex Width of source line output +Sets the maximum width, in characters, of the source line that is displayed +alongside the hex dump. The default value for this parameter is 100. The +source line is displayed on the right hand side of the listing output. + +@item --listing-cont-lines=@samp{number} +@kindex --listing-cont-lines +@cindex Maximum number of continuation lines +Sets the maximum number of continuation lines of hex dump that will be +displayed for a given single line of source input. The default value is 4. +@end table + +@node M +@section Assemble in MRI Compatibility Mode: @option{-M} + +@kindex -M +@cindex MRI compatibility mode +The @option{-M} or @option{--mri} option selects MRI compatibility mode. This +changes the syntax and pseudo-op handling of @command{@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 @command{@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. @command{@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 @option{-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 @command{@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 +@command{@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. @command{@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: @option{--MD} + +@kindex --MD +@cindex dependency tracking +@cindex make rules + +@command{@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: @option{-o} + +@kindex -o +@cindex naming object file +@cindex object file name +There is always one object file output when you run @command{@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, @command{@value{AS}} overwrites any +existing file of the same name. + +@node R +@section Join Data and Text Sections: @option{-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 +@option{-R} tells @command{@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 @option{-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 @command{@value{AS}}. In future, @option{-R} may work this way. + +@ifset COFF-ELF +When @command{@value{AS}} is configured for COFF or ELF output, +this option is only useful if you use sections named @samp{.text} and +@samp{.data}. +@end ifset + +@ifset HPPA +@option{-R} is not supported for any of the HPPA targets. Using +@option{-R} generates a warning from @command{@value{AS}}. +@end ifset + +@node statistics +@section Display Assembly Statistics: @option{--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 +@command{@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: @option{--traditional-format} + +@kindex --traditional-format +For some targets, the output of @command{@value{AS}} is different in some ways +from the output of some existing assembler. This switch requests +@command{@value{AS}} to use the traditional format instead. + +For example, it disables the exception frame optimizations which +@command{@value{AS}} normally does by default on @code{@value{GCC}} output. + +@node v +@section Announce Version: @option{-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: @option{-W}, @option{--warn}, @option{--no-warn}, @option{--fatal-warnings} + +@command{@value{AS}} should never give a warning or error message when +assembling compiler output. But programs written by people often +cause @command{@value{AS}} to give a warning that a particular assumption was +made. All such warnings are directed to the standard error file. + +@kindex -W +@kindex --no-warn +@cindex suppressing warnings +@cindex warnings, suppressing +If you use the @option{-W} and @option{--no-warn} options, no warnings are issued. +This only affects the warning messages: it does not change any particular of +how @command{@value{AS}} assembles your file. Errors, which stop the assembly, +are still reported. + +@kindex --fatal-warnings +@cindex errors, caused by warnings +@cindex warnings, causing error +If you use the @option{--fatal-warnings} option, @command{@value{AS}} considers +files that generate warnings to be in error. + +@kindex --warn +@cindex warnings, switching on +You can switch these options off again by specifying @option{--warn}, which +causes warnings to be output as usual. + +@node Z +@section Generate Object File in Spite of Errors: @option{-Z} +@cindex object file, after errors +@cindex errors, continuing after +After an error message, @command{@value{AS}} normally produces no output. If for +some reason you are interested in object file output even after +@command{@value{AS}} gives an error message on your program, use the @samp{-Z} +option. If there are any errors, @command{@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. @command{@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 @command{@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 @command{@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 @command{@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 a @dfn{line comment} character up to the next newline is +considered a comment and is ignored. The line comment character is target +specific, and some targets multiple comment characters. Some targets also have +line comment characters that only work if they are the first character on a +line. Some targets use a sequence of two characters to introduce a line +comment. Some targets can also change their line comment characters depending +upon command line options that have been used. For more details see the +@emph{Syntax} section in the documentation for individual targets. + +If the line comment character is the hash sign (@samp{#}) then it still has the +special ability to enable and disable preprocessing (@pxref{Preprocessing}) and +to specify logical line numbers: + +@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 @command{@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. Multibyte characters +are supported. Symbols are delimited by characters not in that set, or by the +beginning of a file (since the source program must end with a newline, the end +of a file is not a possible symbol delimiter). @xref{Symbols}. +@cindex length of symbols + +@node Statements +@section Statements + +@cindex statements, structure of +@cindex line separator character +@cindex statement separator character + +A @dfn{statement} ends at a newline character (@samp{\n}) or a +@dfn{line separator character}. The line separator character is target +specific and described in the @emph{Syntax} section of each +target's documentation. Not all targets support a line separator character. +The newline or line separator character is considered to be part of the +preceding statement. Newlines and separators within character constants are an +exception: they do not end statements. + +@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 @command{@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 +@command{@value{AS}} to interpret the second character literally as a backslash +(which prevents @command{@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 @command{@value{AS}} has no +other interpretation, so @command{@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 H8 +(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the +Renesas SH) +@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. @command{@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 +@command{@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 +@command{@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 @command{@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 @command{@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, Renesas / SuperH 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 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. + +@command{@value{AS}} does all processing using integers. Flonums are computed +independently of any floating point hardware in the computer running +@command{@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 +@command{@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 @command{@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 @command{@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 for the Renesas / SuperH SH, +@command{@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 @command{@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-ELF +@ifset GENERIC +When it generates COFF or ELF output, +@end ifset +@command{@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 @command{@value{AS}} generates SOM or ELF output for the HPPA, +@end ifset +@command{@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, @command{@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, @command{@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 @command{@value{AS}} ever uses is expressed as +@display +(@var{section}) + (@var{offset into section}) +@end display +@noindent +Further, most expressions @command{@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 @command{@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-ELF +@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. @command{@value{AS}} and @code{@value{LD}} treat them as +separate but equal sections. Anything you can say of one section is +true of another. +@c @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. +@c @end ifset + +@cindex bss section +@item bss section +This section contains zeroed bytes when your program begins running. It +is used to hold uninitialized variables or common storage. The length of +each partial program's bss section is important, but because it starts +out containing zeroed bytes there is no need to store explicit zero +bytes in the object file. The bss section was invented to eliminate +those explicit zeros from object files. + +@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-ELF +The example uses the traditional section names @samp{.text} and @samp{.data}. +@end ifset +Memory addresses are on the horizontal axis. + +@c TEXI2ROFF-KILL +@ifnottex +@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 ifnottex +@need 5000 +@tex +\bigskip +\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 @command{@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 @command{@value{AS}} +warning messages, so it might be helpful to have an idea of their +meanings to @command{@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-ELF +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. @command{@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 @command{@value{AS}}.) +@end ifset +@ifclear GENERIC +@ifset H8 +On the H8/300 platform, each subsection is zero-padded to a word +boundary (two bytes). +The same is true on the Renesas 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 +@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 +@ifset ELF +@ifset GENERIC +When generating ELF output, you +@end ifset +@ifclear GENERIC +You +@end ifclear +can also use the @code{.subsection} directive (@pxref{SubSection}) +to specify a subsection: @samp{.subsection @var{expression}}. +@end ifset +@var{Expression} should be an absolute expression +(@pxref{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 @command{@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 @ref{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:} @command{@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 @command{@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}}. In the same way, using a double +equals sign @samp{=}@samp{=} here represents an equivalent of the +@code{.eqv} directive. @xref{Eqv,,@code{.eqv}}. + +@ifset Blackfin +Blackfin does not support symbol assignment with @samp{=}. +@end ifset + +@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 for a +particular target machine), and underscores. +@end ifclear +@ifset SPECIAL-SYMS +@ifset H8 +Symbol names begin with a letter or with one of @samp{._}. On the +Renesas SH 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}. + +Multibyte characters are supported. To generate a symbol name containing +multibyte characters enclose it within double quotes and use escape codes. cf +@xref{Strings}. Generating a multibyte symbol name from a label is not +currently supported. + +Each symbol has exactly one name. Each name in an assembly language program +refers to exactly one symbol. You may use that symbol name any number of times +in a program. + +@subheading Local Symbol Names + +@cindex local symbol names +@cindex symbol names, local +A local symbol is any symbol beginning with certain local label prefixes. +By default, the local label prefix is @samp{.L} for ELF systems or +@samp{L} for traditional a.out systems, but each target may have its own +set of local label prefixes. +@ifset HPPA +On the HPPA local symbols begin with @samp{L$}. +@end ifset + +Local symbols are defined and used within the assembler, but they are +normally not saved in object files. Thus, they are not visible when debugging. +You may use the @samp{-L} option (@pxref{L, ,Include Local Symbols: +@option{-L}}) to retain the local symbols in the object files. + +@subheading Local Labels + +@cindex local labels +@cindex temporary symbol names +@cindex symbol names, temporary +Local labels help compilers and programmers use names temporarily. +They create symbols which are guaranteed to be unique over the entire scope of +the input source code and which can be referred to by a simple notation. +To define a local label, write a label of the form @samp{@b{N}:} (where @b{N} +represents any positive integer). To refer to the most recent previous +definition of that label write @samp{@b{N}b}, using the same number as when +you defined the label. To refer to the next definition of a local label, write +@samp{@b{N}f}---the @samp{b} stands for ``backwards'' and the @samp{f} stands +for ``forwards''. + +There is no restriction on how you can use these labels, and you can reuse them +too. So that it is possible to repeatedly define the same local label (using +the same number @samp{@b{N}}), although you can only refer to the most recently +defined local label of that number (for a backwards reference) or the next +definition of a specific local label for a forward reference. It is also worth +noting that the first 10 local labels (@samp{@b{0:}}@dots{}@samp{@b{9:}}) are +implemented in a slightly more efficient manner than the others. + +Here is an example: + +@smallexample +1: branch 1f +2: branch 1b +1: branch 2f +2: branch 1b +@end smallexample + +Which is the equivalent of: + +@smallexample +label_1: branch label_3 +label_2: branch label_1 +label_3: branch label_4 +label_4: branch label_3 +@end smallexample + +Local label names are only a notational device. They are immediately +transformed into more conventional symbol names before the assembler uses them. +The symbol names are stored in the symbol table, appear in error messages, and +are optionally emitted to the object file. The names are constructed using +these parts: + +@table @code +@item @emph{local label prefix} +All local symbols begin with the system-specific local label prefix. +Normally both @command{@value{AS}} and @code{@value{LD}} forget symbols +that start with the local label prefix. These labels are +used for symbols you are never intended to see. If you use the +@samp{-L} option then @command{@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{number} +This is the number that was used in the local label definition. So if the +label is written @samp{55:} then the number is @samp{55}. + +@item @kbd{C-B} +This unusual character is included so you do not accidentally invent a symbol +of the same name. The character has ASCII value of @samp{\002} (control-B). + +@item @emph{ordinal number} +This is a serial number to keep the labels distinct. The first definition of +@samp{0:} gets the number @samp{1}. The 15th definition of @samp{0:} gets the +number @samp{15}, and so on. Likewise the first definition of @samp{1:} gets +the number @samp{1} and its 15th definition gets @samp{15} as well. +@end table + +So for example, the first @code{1:} may be named @code{.L1@kbd{C-B}1}, and +the 44th @code{3:} may be named @code{.L3@kbd{C-B}44}. + +@subheading Dollar Local Labels +@cindex dollar local symbols + +@code{@value{AS}} also supports an even more local form of local labels called +dollar labels. These labels go out of scope (i.e., they become undefined) as +soon as a non-local label is defined. Thus they remain valid for only a small +region of the input source code. Normal local labels, by contrast, remain in +scope for the entire file, or until they are redefined by another occurrence of +the same local label. + +Dollar labels are defined in exactly the same way as ordinary local labels, +except that they have a dollar sign suffix to their numeric value, e.g., +@samp{@b{55$:}}. + +They can also be distinguished from ordinary local labels by their transformed +names which use ASCII character @samp{\001} (control-A) as the magic character +to distinguish them from ordinary labels. For example, the fifth definition of +@samp{6$} may be named @samp{.L6@kbd{C-A}5}. + +@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 +@command{@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. +@ifclear no-space-dir +Thus, the expression @samp{.=.+4} is the same as saying +@samp{.space 4}. +@end ifclear + +@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, @command{@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 @command{@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 +@command{@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 @command{@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 @command{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl}, +@code{.size}, @code{.tag}, and @code{.weak} 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 @command{@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. +@command{@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 @command{@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 @command{@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 +@command{@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 @option{-}, 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 << +@dfn{Shift Left}. Same as the C operator @samp{<<}. + +@item >> +@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 +Low 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 ? + +@cindex comparison expressions +@cindex expressions, comparison +@item == +@dfn{Is Equal To} +@item <> +@itemx != +@dfn{Is Not Equal To} +@item < +@dfn{Is Less Than} +@item > +@dfn{Is Greater Than} +@item >= +@dfn{Is Greater Than Or Equal To} +@item <= +@dfn{Is Less Than Or Equal To} + +The comparison operators can be used as infix operators. A true results has a +value of -1 whereas a false result has a value of 0. Note, these operators +perform signed comparisons. +@end table + +@item Lowest Precedence + +@table @code +@item && +@dfn{Logical And}. + +@item || +@dfn{Logical Or}. + +These two logical operations can be used to combine the results of sub +expressions. Note, unlike the comparison operators a true result returns a +value of 1 but a false results does still return 0. Also note that the logical +or operator has a slightly lower precedence than logical and. + +@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 (COFF):: @code{.ABORT} +@end ifset + +* Align:: @code{.align @var{abs-expr} , @var{abs-expr}} +* Altmacro:: @code{.altmacro} +* Ascii:: @code{.ascii "@var{string}"}@dots{} +* Asciz:: @code{.asciz "@var{string}"}@dots{} +* Balign:: @code{.balign @var{abs-expr} , @var{abs-expr}} +* Bundle directives:: @code{.bundle_align_mode @var{abs-expr}}, @code{.bundle_lock}, @code{.bundle_unlock} +* Byte:: @code{.byte @var{expressions}} +* CFI directives:: @code{.cfi_startproc [simple]}, @code{.cfi_endproc}, etc. +* 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} +* Elseif:: @code{.elseif} +* 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}} +* Eqv:: @code{.eqv @var{symbol}, @var{expression}} +* Err:: @code{.err} +* Error:: @code{.error @var{string}} +* Exitm:: @code{.exitm} +* Extern:: @code{.extern} +* Fail:: @code{.fail} +* File:: @code{.file} +* 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}} +@ifset ELF +* Gnu_attribute:: @code{.gnu_attribute @var{tag},@var{value}} +* Hidden:: @code{.hidden @var{names}} +@end ifset + +* hword:: @code{.hword @var{expressions}} +* Ident:: @code{.ident} +* If:: @code{.if @var{absolute expression}} +* Incbin:: @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]} +* Include:: @code{.include "@var{file}"} +* Int:: @code{.int @var{expressions}} +@ifset ELF +* Internal:: @code{.internal @var{names}} +@end ifset + +* 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 + +* Linkonce:: @code{.linkonce [@var{type}]} +* List:: @code{.list} +* Ln:: @code{.ln @var{line-number}} +* Loc:: @code{.loc @var{fileno} @var{lineno}} +* Loc_mark_labels:: @code{.loc_mark_labels @var{enable}} +@ifset ELF +* Local:: @code{.local @var{names}} +@end ifset + +* 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}} +* Noaltmacro:: @code{.noaltmacro} +* Nolist:: @code{.nolist} +* Octa:: @code{.octa @var{bignums}} +* Offset:: @code{.offset @var{loc}} +* Org:: @code{.org @var{new-lc}, @var{fill}} +* P2align:: @code{.p2align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}} +@ifset ELF +* PopSection:: @code{.popsection} +* Previous:: @code{.previous} +@end ifset + +* Print:: @code{.print @var{string}} +@ifset ELF +* Protected:: @code{.protected @var{names}} +@end ifset + +* Psize:: @code{.psize @var{lines}, @var{columns}} +* Purgem:: @code{.purgem @var{name}} +@ifset ELF +* PushSection:: @code{.pushsection @var{name}} +@end ifset + +* Quad:: @code{.quad @var{bignums}} +* Reloc:: @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]} +* Rept:: @code{.rept @var{count}} +* Sbttl:: @code{.sbttl "@var{subheading}"} +@ifset COFF +* Scl:: @code{.scl @var{class}} +@end ifset +@ifset COFF-ELF +* Section:: @code{.section @var{name}[, @var{flags}]} +@end ifset + +* Set:: @code{.set @var{symbol}, @var{expression}} +* Short:: @code{.short @var{expressions}} +* Single:: @code{.single @var{flonums}} +@ifset COFF-ELF +* Size:: @code{.size [@var{name} , @var{expression}]} +@end ifset +@ifclear no-space-dir +* Skip:: @code{.skip @var{size} , @var{fill}} +@end ifclear + +* Sleb128:: @code{.sleb128 @var{expressions}} +@ifclear no-space-dir +* Space:: @code{.space @var{size} , @var{fill}} +@end ifclear +@ifset have-stabs +* Stab:: @code{.stabd, .stabn, .stabs} +@end ifset + +* String:: @code{.string "@var{str}"}, @code{.string8 "@var{str}"}, @code{.string16 "@var{str}"}, @code{.string32 "@var{str}"}, @code{.string64 "@var{str}"} +* Struct:: @code{.struct @var{expression}} +@ifset ELF +* SubSection:: @code{.subsection} +* 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-ELF +* Type:: @code{.type <@var{int} | @var{name} , @var{type description}>} +@end ifset + +* Uleb128:: @code{.uleb128 @var{expressions}} +@ifset COFF +* Val:: @code{.val @var{addr}} +@end ifset + +@ifset ELF +* Version:: @code{.version "@var{string}"} +* VTableEntry:: @code{.vtable_entry @var{table}, @var{offset}} +* VTableInherit:: @code{.vtable_inherit @var{child}, @var{parent}} +@end ifset + +* Warning:: @code{.warning @var{string}} +* Weak:: @code{.weak @var{names}} +* Weakref:: @code{.weakref @var{alias}, @var{symbol}} +* 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 @command{@value{AS}} to +quit also. One day @code{.abort} will not be supported. + +@ifset COFF +@node ABORT (COFF) +@section @code{.ABORT} (COFF) + +@cindex @code{ABORT} directive +When producing COFF output, @command{@value{AS}} accepts this directive as a +synonym for @samp{.abort}. + +@ifset BOUT +When producing @code{b.out} output, @command{@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 arc, hppa, i386 using ELF, i860, iq2000, m68k, or32, +s390, sparc, tic4x, tic80 and xtensa, the first expression is the +alignment request in bytes. For example @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 the tic54x, the +first expression is the alignment request in words. + +For other systems, including ppc, i386 using a.out format, arm and +strongarm, it is the +number of low-order zero bits the location counter must have after +advancement. For example @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 Altmacro +@section @code{.altmacro} +Enable alternate macro mode, enabling: + +@ftable @code +@item LOCAL @var{name} [ , @dots{} ] +One additional directive, @code{LOCAL}, is available. It is used to +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. + +@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 characters. + +@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 ftable + +@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 Bundle directives +@section @code{.bundle_align_mode @var{abs-expr}} +@cindex @code{bundle_align_mode} directive +@cindex bundle +@cindex instruction bundle +@cindex aligned instruction bundle +@code{.bundle_align_mode} enables or disables @dfn{aligned instruction +bundle} mode. In this mode, sequences of adjacent instructions are grouped +into fixed-sized @dfn{bundles}. If the argument is zero, this mode is +disabled (which is the default state). If the argument it not zero, it +gives the size of an instruction bundle as a power of two (as for the +@code{.p2align} directive, @pxref{P2align}). + +For some targets, it's an ABI requirement that no instruction may span a +certain aligned boundary. A @dfn{bundle} is simply a sequence of +instructions that starts on an aligned boundary. For example, if +@var{abs-expr} is @code{5} then the bundle size is 32, so each aligned +chunk of 32 bytes is a bundle. When aligned instruction bundle mode is in +effect, no single instruction may span a boundary between bundles. If an +instruction would start too close to the end of a bundle for the length of +that particular instruction to fit within the bundle, then the space at the +end of that bundle is filled with no-op instructions so the instruction +starts in the next bundle. As a corollary, it's an error if any single +instruction's encoding is longer than the bundle size. + +@section @code{.bundle_lock} and @code{.bundle_unlock} +@cindex @code{bundle_lock} directive +@cindex @code{bundle_unlock} directive +The @code{.bundle_lock} and directive @code{.bundle_unlock} directives +allow explicit control over instruction bundle padding. These directives +are only valid when @code{.bundle_align_mode} has been used to enable +aligned instruction bundle mode. It's an error if they appear when +@code{.bundle_align_mode} has not been used at all, or when the last +directive was @w{@code{.bundle_align_mode 0}}. + +@cindex bundle-locked +For some targets, it's an ABI requirement that certain instructions may +appear only as part of specified permissible sequences of multiple +instructions, all within the same bundle. A pair of @code{.bundle_lock} +and @code{.bundle_unlock} directives define a @dfn{bundle-locked} +instruction sequence. For purposes of aligned instruction bundle mode, a +sequence starting with @code{.bundle_lock} and ending with +@code{.bundle_unlock} is treated as a single instruction. That is, the +entire sequence must fit into a single bundle and may not span a bundle +boundary. If necessary, no-op instructions will be inserted before the +first instruction of the sequence so that the whole sequence starts on an +aligned bundle boundary. It's an error if the sequence is longer than the +bundle size. + +For convenience when using @code{.bundle_lock} and @code{.bundle_unlock} +inside assembler macros (@pxref{Macro}), bundle-locked sequences may be +nested. That is, a second @code{.bundle_lock} directive before the next +@code{.bundle_unlock} directive has no effect except that it must be +matched by another closing @code{.bundle_unlock} so that there is the +same number of @code{.bundle_lock} and @code{.bundle_unlock} directives. + +@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 CFI directives +@section @code{.cfi_sections @var{section_list}} +@cindex @code{cfi_sections} directive +@code{.cfi_sections} may be used to specify whether CFI directives +should emit @code{.eh_frame} section and/or @code{.debug_frame} section. +If @var{section_list} is @code{.eh_frame}, @code{.eh_frame} is emitted, +if @var{section_list} is @code{.debug_frame}, @code{.debug_frame} is emitted. +To emit both use @code{.eh_frame, .debug_frame}. The default if this +directive is not used is @code{.cfi_sections .eh_frame}. + +@section @code{.cfi_startproc [simple]} +@cindex @code{cfi_startproc} directive +@code{.cfi_startproc} is used at the beginning of each function that +should have an entry in @code{.eh_frame}. It initializes some internal +data structures. Don't forget to close the function by +@code{.cfi_endproc}. + +Unless @code{.cfi_startproc} is used along with parameter @code{simple} +it also emits some architecture dependent initial CFI instructions. + +@section @code{.cfi_endproc} +@cindex @code{cfi_endproc} directive +@code{.cfi_endproc} is used at the end of a function where it closes its +unwind entry previously opened by +@code{.cfi_startproc}, and emits it to @code{.eh_frame}. + +@section @code{.cfi_personality @var{encoding} [, @var{exp}]} +@code{.cfi_personality} defines personality routine and its encoding. +@var{encoding} must be a constant determining how the personality +should be encoded. If it is 255 (@code{DW_EH_PE_omit}), second +argument is not present, otherwise second argument should be +a constant or a symbol name. When using indirect encodings, +the symbol provided should be the location where personality +can be loaded from, not the personality routine itself. +The default after @code{.cfi_startproc} is @code{.cfi_personality 0xff}, +no personality routine. + +@section @code{.cfi_lsda @var{encoding} [, @var{exp}]} +@code{.cfi_lsda} defines LSDA and its encoding. +@var{encoding} must be a constant determining how the LSDA +should be encoded. If it is 255 (@code{DW_EH_PE_omit}), second +argument is not present, otherwise second argument should be a constant +or a symbol name. The default after @code{.cfi_startproc} is @code{.cfi_lsda 0xff}, +no LSDA. + +@section @code{.cfi_def_cfa @var{register}, @var{offset}} +@code{.cfi_def_cfa} defines a rule for computing CFA as: @i{take +address from @var{register} and add @var{offset} to it}. + +@section @code{.cfi_def_cfa_register @var{register}} +@code{.cfi_def_cfa_register} modifies a rule for computing CFA. From +now on @var{register} will be used instead of the old one. Offset +remains the same. + +@section @code{.cfi_def_cfa_offset @var{offset}} +@code{.cfi_def_cfa_offset} modifies a rule for computing CFA. Register +remains the same, but @var{offset} is new. Note that it is the +absolute offset that will be added to a defined register to compute +CFA address. + +@section @code{.cfi_adjust_cfa_offset @var{offset}} +Same as @code{.cfi_def_cfa_offset} but @var{offset} is a relative +value that is added/substracted from the previous offset. + +@section @code{.cfi_offset @var{register}, @var{offset}} +Previous value of @var{register} is saved at offset @var{offset} from +CFA. + +@section @code{.cfi_rel_offset @var{register}, @var{offset}} +Previous value of @var{register} is saved at offset @var{offset} from +the current CFA register. This is transformed to @code{.cfi_offset} +using the known displacement of the CFA register from the CFA. +This is often easier to use, because the number will match the +code it's annotating. + +@section @code{.cfi_register @var{register1}, @var{register2}} +Previous value of @var{register1} is saved in register @var{register2}. + +@section @code{.cfi_restore @var{register}} +@code{.cfi_restore} says that the rule for @var{register} is now the +same as it was at the beginning of the function, after all initial +instruction added by @code{.cfi_startproc} were executed. + +@section @code{.cfi_undefined @var{register}} +From now on the previous value of @var{register} can't be restored anymore. + +@section @code{.cfi_same_value @var{register}} +Current value of @var{register} is the same like in the previous frame, +i.e. no restoration needed. + +@section @code{.cfi_remember_state}, +First save all current rules for all registers by @code{.cfi_remember_state}, +then totally screw them up by subsequent @code{.cfi_*} directives and when +everything is hopelessly bad, use @code{.cfi_restore_state} to restore +the previous saved state. + +@section @code{.cfi_return_column @var{register}} +Change return column @var{register}, i.e. the return address is either +directly in @var{register} or can be accessed by rules for @var{register}. + +@section @code{.cfi_signal_frame} +Mark current function as signal trampoline. + +@section @code{.cfi_window_save} +SPARC register window has been saved. + +@section @code{.cfi_escape} @var{expression}[, @dots{}] +Allows the user to add arbitrary bytes to the unwind info. One +might use this to add OS-specific CFI opcodes, or generic CFI +opcodes that GAS does not yet support. + +@section @code{.cfi_val_encoded_addr @var{register}, @var{encoding}, @var{label}} +The current value of @var{register} is @var{label}. The value of @var{label} +will be encoded in the output file according to @var{encoding}; see the +description of @code{.cfi_personality} for details on this encoding. + +The usefulness of equating a register to a fixed label is probably +limited to the return address register. Here, it can be useful to +mark a code segment that has only one return address which is reached +by a direct branch and no copy of the return address exists in memory +or another register. + +@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 COFF-ELF +When using ELF or (as a GNU extension) PE, the @code{.comm} directive takes +an optional third argument. This is the desired alignment of the symbol, +specified for ELF as a byte boundary (for example, an alignment of 16 means +that the least significant 4 bits of the address should be zero), and for PE +as a power of two (for example, an alignment of 5 means aligned to a 32-byte +boundary). The alignment must be an absolute expression, and it must be a +power of two. If @code{@value{LD}} allocates uninitialized memory for the +common symbol, it will use the alignment when placing the symbol. If no +alignment is specified, @command{@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 on ELF, or the default section alignment of 4 on PE@footnote{This +is not the same as the executable image file alignment controlled by @code{@value{LD}}'s +@samp{--section-alignment} option; image file sections in PE are aligned to +multiples of 4096, which is far too large an alignment for ordinary variables. +It is rather the default alignment for (non-debug) sections within object +(@samp{*.o}) files, which are less strictly aligned.}. +@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 @command{@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 @command{@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 @command{@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, @command{@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 +@command{@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 +@command{@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 @command{@value{AS}} support for conditional +assembly; see @ref{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 Elseif +@section @code{.elseif} + +@cindex @code{elseif} directive +@code{.elseif} is part of the @command{@value{AS}} support for conditional +assembly; see @ref{If,,@code{.if}}. It is shorthand for beginning a new +@code{.if} block that would otherwise fill the entire @code{.else} section. + +@node End +@section @code{.end} + +@cindex @code{end} directive +@code{.end} marks the end of the assembly file. @command{@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 +@command{@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 @command{@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}; see @ref{Set,,@code{.set}}. + +@ifset HPPA +The syntax for @code{equ} on the HPPA is +@samp{@var{symbol} .equ @var{expression}}. +@end ifset + +@ifset Z80 +The syntax for @code{equ} on the Z80 is +@samp{@var{symbol} equ @var{expression}}. +On the Z80 it is an eror if @var{symbol} is already defined, +but the symbol is not protected from later redefinition. +Compare @ref{Equiv}. +@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. Note a +symbol which has been referenced but not actually defined is considered to be +undefined. + +Except for the contents of the error message, this is roughly equivalent to +@smallexample +.ifdef SYM +.err +.endif +.equ SYM,VAL +@end smallexample +plus it protects the symbol from later redefinition. + +@node Eqv +@section @code{.eqv @var{symbol}, @var{expression}} +@cindex @code{eqv} directive +The @code{.eqv} directive is like @code{.equiv}, but no attempt is made to +evaluate the expression or any part of it immediately. Instead each time +the resulting symbol is used in an expression, a snapshot of its current +value is taken. + +@node Err +@section @code{.err} +@cindex @code{err} directive +If @command{@value{AS}} assembles a @code{.err} directive, it will print an error +message and, unless the @option{-Z} option was used, it will not generate an +object file. This can be used to signal an error in conditionally compiled code. + +@node Error +@section @code{.error "@var{string}"} +@cindex error directive + +Similarly to @code{.err}, this directive emits an error, but you can specify a +string that will be emitted as the error message. If you don't specify the +message, it defaults to @code{".error directive invoked in source file"}. +@xref{Errors, ,Error and Warning Messages}. + +@smallexample + .error "This code has not been assembled and tested." +@end smallexample + +@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. @command{@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, @command{@value{AS}} will print a warning message. If the value is less +than 500, @command{@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. + +@node File +@section @code{.file} +@cindex @code{file} directive + +@ifclear no-file-dir +There are two different versions of the @code{.file} directive. Targets +that support DWARF2 line number information use the DWARF2 version of +@code{.file}. Other targets use the default version. + +@subheading Default Version + +@cindex logical file name +@cindex file name, logical +This version of the @code{.file} directive tells @command{@value{AS}} that we +are about to start a new logical file. The syntax is: + +@smallexample +.file @var{string} +@end smallexample + +@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 @command{@value{AS}} programs. + +@subheading DWARF2 Version +@end ifclear + +When emitting DWARF2 line number information, @code{.file} assigns filenames +to the @code{.debug_line} file name table. The syntax is: + +@smallexample +.file @var{fileno} @var{filename} +@end smallexample + +The @var{fileno} operand should be a unique positive integer to use as the +index of the entry in the table. The @var{filename} operand is a C string +literal. + +The detail of filename indices is exposed to the user because the filename +table is shared with the @code{.debug_info} section of the DWARF2 debugging +information, and thus the user must know the exact indices that table +entries will have. + +@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{repeat}, @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 @command{@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 +@command{@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 + +@ifset ELF +@node Gnu_attribute +@section @code{.gnu_attribute @var{tag},@var{value}} +Record a @sc{gnu} object attribute for this file. @xref{Object Attributes}. + +@node Hidden +@section @code{.hidden @var{names}} + +@cindex @code{hidden} directive +@cindex visibility +This is one of the ELF visibility directives. The other two are +@code{.internal} (@pxref{Internal,,@code{.internal}}) and +@code{.protected} (@pxref{Protected,,@code{.protected}}). + +This directive overrides the named symbols default visibility (which is set by +their binding: local, global or weak). The directive sets the visibility to +@code{hidden} which means that the symbols are not visible to other components. +Such symbols are always considered to be @code{protected} as well. +@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. The +behavior of this directive varies depending on the target. When using the +a.out object file format, @command{@value{AS}} simply accepts the directive for +source-file compatibility with existing assemblers, but does not emit anything +for it. When using COFF, comments are emitted to the @code{.comment} or +@code{.rdata} section, depending on the target. When using ELF, comments are +emitted to the @code{.comment} section. + +@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}}). +If you have several conditions to check, @code{.elseif} may be used to avoid +nesting blocks if/else within each subsequent @code{.else} block. + +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. Note a symbol which has been referenced but not yet defined +is considered to be undefined. + +@cindex @code{ifb} directive +@item .ifb @var{text} +Assembles the following section of code if the operand is blank (empty). + +@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{ifnb} directive +@item .ifnb @var{text} +Like @code{.ifb}, but the sense of the test is reversed: this assembles the +following section of code if the operand is non-blank (non-empty). + +@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. Note a symbol +which has been referenced but not yet defined is considered to be undefined. + +@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 Incbin +@section @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]} + +@cindex @code{incbin} directive +@cindex binary files, including +The @code{incbin} directive includes @var{file} verbatim at the current +location. 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}. + +The @var{skip} argument skips a number of bytes from the start of the +@var{file}. The @var{count} argument indicates the maximum number of bytes to +read. Note that the data is not aligned in any way, so it is the user's +responsibility to make sure that proper alignment is provided both before and +after the @code{incbin} directive. + +@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 most forms of the H8/300, @code{.int} emits 16-bit +integers. On the H8/300H and the Renesas SH, however, @code{.int} emits +32-bit integers. +@end ifset +@end ifclear + +@ifset ELF +@node Internal +@section @code{.internal @var{names}} + +@cindex @code{internal} directive +@cindex visibility +This is one of the ELF visibility directives. The other two are +@code{.hidden} (@pxref{Hidden,,@code{.hidden}}) and +@code{.protected} (@pxref{Protected,,@code{.protected}}). + +This directive overrides the named symbols default visibility (which is set by +their binding: local, global or weak). The directive sets the visibility to +@code{internal} which means that the symbols are considered to be @code{hidden} +(i.e., not visible to other components), and that some extra, processor specific +processing must also be performed upon the symbols as well. +@end ifset + +@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 + +For some caveats with the spelling of @var{symbol}, see also @ref{Macro}. + +@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 + +For some caveats with the spelling of @var{symbol}, see also the discussion +at @xref{Macro}. + +@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) +@command{@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 +@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 +@command{@value{AS}} will no longer support this directive: it is recognized only +for compatibility with existing assembler programs. +@end ifset + +Even though this is a directive associated with the @code{a.out} or +@code{b.out} object-code formats, @command{@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 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 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 @command{@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 @command{@value{AS}} is +configured for @code{b.out}; its effect is only associated with COFF +output format. +@end ifset +@end ifset + +@node Loc +@section @code{.loc @var{fileno} @var{lineno} [@var{column}] [@var{options}]} +@cindex @code{loc} directive +When emitting DWARF2 line number information, +the @code{.loc} directive will add a row to the @code{.debug_line} line +number matrix corresponding to the immediately following assembly +instruction. The @var{fileno}, @var{lineno}, and optional @var{column} +arguments will be applied to the @code{.debug_line} state machine before +the row is added. + +The @var{options} are a sequence of the following tokens in any order: + +@table @code +@item basic_block +This option will set the @code{basic_block} register in the +@code{.debug_line} state machine to @code{true}. + +@item prologue_end +This option will set the @code{prologue_end} register in the +@code{.debug_line} state machine to @code{true}. + +@item epilogue_begin +This option will set the @code{epilogue_begin} register in the +@code{.debug_line} state machine to @code{true}. + +@item is_stmt @var{value} +This option will set the @code{is_stmt} register in the +@code{.debug_line} state machine to @code{value}, which must be +either 0 or 1. + +@item isa @var{value} +This directive will set the @code{isa} register in the @code{.debug_line} +state machine to @var{value}, which must be an unsigned integer. + +@item discriminator @var{value} +This directive will set the @code{discriminator} register in the @code{.debug_line} +state machine to @var{value}, which must be an unsigned integer. + +@end table + +@node Loc_mark_labels +@section @code{.loc_mark_labels @var{enable}} +@cindex @code{loc_mark_labels} directive +When emitting DWARF2 line number information, +the @code{.loc_mark_labels} directive makes the assembler emit an entry +to the @code{.debug_line} line number matrix with the @code{basic_block} +register in the state machine set whenever a code label is seen. +The @var{enable} argument should be either 1 or 0, to enable or disable +this function respectively. + +@ifset ELF +@node Local +@section @code{.local @var{names}} + +@cindex @code{local} directive +This directive, which is available for ELF targets, marks each symbol in +the comma-separated list of @code{names} as a local symbol so that it +will not be externally visible. If the symbols do not already exist, +they will be created. + +For targets where the @code{.lcomm} directive (@pxref{Lcomm}) does not +accept an alignment argument, which is the case for most ELF targets, +the @code{.local} directive can be used in combination with @code{.comm} +(@pxref{Comm}) to define aligned local common data. +@end ifset + +@node Long +@section @code{.long @var{expressions}} + +@cindex @code{long} directive +@code{.long} is the same as @samp{.int}. @xref{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 qualify the macro argument to +indicate whether all invocations must specify a non-blank value (through +@samp{:@code{req}}), or whether it takes all of the remaining arguments +(through @samp{:@code{vararg}}). You can supply a default value for any +macro argument by following the name with @samp{=@var{deflt}}. You +cannot define two macros with the same @var{macname} unless it has been +subject to the @code{.purgem} directive (@pxref{Purgem}) between the two +definitions. 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}). + +@item .macro m p1:req, p2=0, p3:vararg +Begin the definition of a macro called @code{m}, with at least three +arguments. The first argument must always have a value specified, but +not the second, which instead has a default value. The third formal +will get assigned all remaining arguments specified at invocation time. + +When you call a macro, you can specify the argument values either by +position, or by keyword. For example, @samp{sum 9,17} is equivalent to +@samp{sum to=17, from=9}. + +@end table + +Note that since each of the @var{macargs} can be an identifier exactly +as any other one permitted by the target architecture, there may be +occasional problems if the target hand-crafts special meanings to certain +characters when they occur in a special position. For example, if the colon +(@code{:}) is generally permitted to be part of a symbol name, but the +architecture specific code special-cases it when occurring as the final +character of a symbol (to denote a label), then the macro parameter +replacement code will have no way of knowing that and consider the whole +construct (including the colon) an identifier, and check only this +identifier for being the subject to parameter substitution. So for example +this macro definition: + +@example + .macro label l +\l: + .endm +@end example + +might not work as expected. Invoking @samp{label foo} might not create a label +called @samp{foo} but instead just insert the text @samp{\l:} into the +assembler source, probably generating an error about an unrecognised +identifier. + +Similarly problems might occur with the period character (@samp{.}) +which is often allowed inside opcode names (and hence identifier names). So +for example constructing a macro to build an opcode from a base name and a +length specifier like this: + +@example + .macro opcode base length + \base.\length + .endm +@end example + +and invoking it as @samp{opcode store l} will not create a @samp{store.l} +instruction but instead generate some kind of error as the assembler tries to +interpret the text @samp{\base.\length}. + +There are several possible ways around this problem: + +@table @code +@item Insert white space +If it is possible to use white space characters then this is the simplest +solution. eg: + +@example + .macro label l +\l : + .endm +@end example + +@item Use @samp{\()} +The string @samp{\()} can be used to separate the end of a macro argument from +the following text. eg: + +@example + .macro opcode base length + \base\().\length + .endm +@end example + +@item Use the alternate macro syntax mode +In the alternative macro syntax mode the ampersand character (@samp{&}) can be +used as a separator. eg: + +@example + .altmacro + .macro label l +l&: + .endm +@end example +@end table + +Note: this problem of correctly identifying string parameters to pseudo ops +also applies to the identifiers used in @code{.irp} (@pxref{Irp}) +and @code{.irpc} (@pxref{Irpc}) as well. + +@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 \@@ +@command{@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}. + +@item LOCAL @var{name} [ , @dots{} ] +@emph{Warning: @code{LOCAL} is only available if you select ``alternate +macro syntax'' with @samp{--alternate} or @code{.altmacro}.} +@xref{Altmacro,,@code{.altmacro}}. +@end ftable + +@node MRI +@section @code{.mri @var{val}} + +@cindex @code{mri} directive +@cindex MRI mode, temporarily +If @var{val} is non-zero, this tells @command{@value{AS}} to enter MRI mode. If +@var{val} is zero, this tells @command{@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 Noaltmacro +@section @code{.noaltmacro} +Disable alternate macro mode. @xref{Altmacro}. + +@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 Offset +@section @code{.offset @var{loc}} + +@cindex @code{offset} directive +Set the location counter to @var{loc} in the absolute section. @var{loc} must +be an absolute expression. This directive may be useful for defining +symbols with absolute values. Do not confuse it with the @code{.org} +directive. + +@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, +@command{@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 @command{@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. + +@ifset ELF +@node PopSection +@section @code{.popsection} + +@cindex @code{popsection} directive +@cindex Section Stack +This is one of the ELF section stack manipulation directives. The others are +@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}), +@code{.pushsection} (@pxref{PushSection}), and @code{.previous} +(@pxref{Previous}). + +This directive replaces the current section (and subsection) with the top +section (and subsection) on the section stack. This section is popped off the +stack. +@end ifset + +@ifset ELF +@node Previous +@section @code{.previous} + +@cindex @code{previous} directive +@cindex Section Stack +This is one of the ELF section stack manipulation directives. The others are +@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}), +@code{.pushsection} (@pxref{PushSection}), and @code{.popsection} +(@pxref{PopSection}). + +This directive swaps the current section (and subsection) with most recently +referenced section/subsection pair prior to this one. Multiple +@code{.previous} directives in a row will flip between two sections (and their +subsections). For example: + +@smallexample +.section A + .subsection 1 + .word 0x1234 + .subsection 2 + .word 0x5678 +.previous + .word 0x9abc +@end smallexample + +Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into subsection 2 of +section A. Whilst: + +@smallexample +.section A +.subsection 1 + # Now in section A subsection 1 + .word 0x1234 +.section B +.subsection 0 + # Now in section B subsection 0 + .word 0x5678 +.subsection 1 + # Now in section B subsection 1 + .word 0x9abc +.previous + # Now in section B subsection 0 + .word 0xdef0 +@end smallexample + +Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection 0 of +section B and 0x9abc into subsection 1 of section B. + +In terms of the section stack, this directive swaps the current section with +the top section on the section stack. +@end ifset + +@node Print +@section @code{.print @var{string}} + +@cindex @code{print} directive +@command{@value{AS}} will print @var{string} on the standard output during +assembly. You must put @var{string} in double quotes. + +@ifset ELF +@node Protected +@section @code{.protected @var{names}} + +@cindex @code{protected} directive +@cindex visibility +This is one of the ELF visibility directives. The other two are +@code{.hidden} (@pxref{Hidden}) and @code{.internal} (@pxref{Internal}). + +This directive overrides the named symbols default visibility (which is set by +their binding: local, global or weak). The directive sets the visibility to +@code{protected} which means that any references to the symbols from within the +components that defines them must be resolved to the definition in that +component, even if a definition in another component would normally preempt +this. +@end ifset + +@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. + +@command{@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}. + +@ifset ELF +@node PushSection +@section @code{.pushsection @var{name} [, @var{subsection}] [, "@var{flags}"[, @@@var{type}[,@var{arguments}]]]} + +@cindex @code{pushsection} directive +@cindex Section Stack +This is one of the ELF section stack manipulation directives. The others are +@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}), +@code{.popsection} (@pxref{PopSection}), and @code{.previous} +(@pxref{Previous}). + +This directive pushes the current section (and subsection) onto the +top of the section stack, and then replaces the current section and +subsection with @code{name} and @code{subsection}. The optional +@code{flags}, @code{type} and @code{arguments} are treated the same +as in the @code{.section} (@pxref{Section}) directive. +@end ifset + +@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 Reloc +@section @code{.reloc @var{offset}, @var{reloc_name}[, @var{expression}]} + +@cindex @code{reloc} directive +Generate a relocation at @var{offset} of type @var{reloc_name} with value +@var{expression}. If @var{offset} is a number, the relocation is generated in +the current section. If @var{offset} is an expression that resolves to a +symbol plus offset, the relocation is generated in the given symbol's section. +@var{expression}, if present, must resolve to a symbol plus addend or to an +absolute value, but note that not all targets support an addend. e.g. ELF REL +targets such as i386 store an addend in the section contents rather than in the +relocation. This low level interface does not support addends stored in the +section. + +@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, @command{@value{AS}} +accepts this directive but ignores it. +@end ifset +@end ifset + +@ifset COFF-ELF +@node Section +@section @code{.section @var{name}} + +@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 +@ifset ELF +@c only print the extra heading if both COFF and ELF are set +@subheading COFF Version +@end ifset + +@cindex @code{section} directive (COFF version) +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{subsection}] +@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 e +exclude section from linking +@item r +read-only section +@item x +executable section +@item s +shared section (meaningful for PE targets) +@item a +ignored. (For compatibility with the ELF version) +@item y +section is not readable (meaningful for PE targets) +@item 0-9 +single-digit power-of-two section alignment (GNU extension) +@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. Note the @code{n} and @code{w} flags remove attributes +from the section, rather than adding them, so if they are used on their own it +will be as if no flags had been specified at all. + +If the optional argument to the @code{.section} directive is not quoted, it is +taken as a subsection number (@pxref{Sub-Sections}). +@end ifset + +@ifset ELF +@ifset COFF +@c only print the extra heading if both COFF and ELF are set +@subheading ELF Version +@end ifset + +@cindex Section Stack +This is one of the ELF section stack manipulation directives. The others are +@code{.subsection} (@pxref{SubSection}), @code{.pushsection} +(@pxref{PushSection}), @code{.popsection} (@pxref{PopSection}), and +@code{.previous} (@pxref{Previous}). + +@cindex @code{section} directive (ELF version) +For ELF targets, the @code{.section} directive is used like this: + +@smallexample +.section @var{name} [, "@var{flags}"[, @@@var{type}[,@var{flag_specific_arguments}]]] +@end smallexample + +The optional @var{flags} argument is a quoted string which may contain any +combination of the following characters: +@table @code +@item a +section is allocatable +@item e +section is excluded from executable and shared library. +@item w +section is writable +@item x +section is executable +@item M +section is mergeable +@item S +section contains zero terminated strings +@item G +section is a member of a section group +@item T +section is used for thread-local-storage +@item ? +section is a member of the previously-current section's group, if any +@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) +@item @@note +section contains data which is used by things other than the program +@item @@init_array +section contains an array of pointers to init functions +@item @@fini_array +section contains an array of pointers to finish functions +@item @@preinit_array +section contains an array of pointers to pre-init functions +@end table + +Many targets only support the first three section types. + +Note on targets where the @code{@@} character is the start of a comment (eg +ARM) then another character is used instead. For example the ARM port uses the +@code{%} character. + +If @var{flags} contains the @code{M} symbol then the @var{type} argument must +be specified as well as an extra argument---@var{entsize}---like this: + +@smallexample +.section @var{name} , "@var{flags}"M, @@@var{type}, @var{entsize} +@end smallexample + +Sections with the @code{M} flag but not @code{S} flag must contain fixed size +constants, each @var{entsize} octets long. Sections with both @code{M} and +@code{S} must contain zero terminated strings where each character is +@var{entsize} bytes long. The linker may remove duplicates within sections with +the same name, same entity size and same flags. @var{entsize} must be an +absolute expression. For sections with both @code{M} and @code{S}, a string +which is a suffix of a larger string is considered a duplicate. Thus +@code{"def"} will be merged with @code{"abcdef"}; A reference to the first +@code{"def"} will be changed to a reference to @code{"abcdef"+3}. + +If @var{flags} contains the @code{G} symbol then the @var{type} argument must +be present along with an additional field like this: + +@smallexample +.section @var{name} , "@var{flags}"G, @@@var{type}, @var{GroupName}[, @var{linkage}] +@end smallexample + +The @var{GroupName} field specifies the name of the section group to which this +particular section belongs. The optional linkage field can contain: +@table @code +@item comdat +indicates that only one copy of this section should be retained +@item .gnu.linkonce +an alias for comdat +@end table + +Note: if both the @var{M} and @var{G} flags are present then the fields for +the Merge flag should come first, like this: + +@smallexample +.section @var{name} , "@var{flags}"MG, @@@var{type}, @var{entsize}, @var{GroupName}[, @var{linkage}] +@end smallexample + +If @var{flags} contains the @code{?} symbol then it may not also contain the +@code{G} symbol and the @var{GroupName} or @var{linkage} fields should not be +present. Instead, @code{?} says to consider the section that's current before +this directive. If that section used @code{G}, then the new section will use +@code{G} with those same @var{GroupName} and @var{linkage} fields implicitly. +If not, then the @code{?} symbol has no effect. + +If no flags are specified, the default flags depend upon the section name. If +the section name is not recognized, the default will be for the section to have +none of the above flags: it will not be allocated in memory, nor writable, nor +executable. The section will contain data. + +For ELF targets, the assembler supports another type of @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 +@item #exclude +section is excluded from executable and shared library. +@item #tls +section is used for thread local storage +@end table + +This directive replaces the current section and subsection. See the +contents of the gas testsuite directory @code{gas/testsuite/gas/elf} for +some examples of how this directive and the other section stack directives +work. +@end ifset +@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 Z80 +On Z80 @code{set} is a real instruction, use +@samp{@var{symbol} defl @var{expression}} instead. +@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. @xref{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 +@command{@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-ELF +@node Size +@section @code{.size} + +This directive is used to set the size associated with a symbol. + +@ifset COFF +@ifset ELF +@c only print the extra heading if both COFF and ELF are set +@subheading COFF Version +@end ifset + +@cindex @code{size} directive (COFF version) +For COFF targets, the @code{.size} directive is only permitted inside +@code{.def}/@code{.endef} pairs. It is used like this: + +@smallexample +.size @var{expression} +@end smallexample + +@ifset BOUT +@samp{.size} is only meaningful when generating COFF format output; when +@command{@value{AS}} is generating @code{b.out}, it accepts this directive but +ignores it. +@end ifset +@end ifset + +@ifset ELF +@ifset COFF +@c only print the extra heading if both COFF and ELF are set +@subheading ELF Version +@end ifset + +@cindex @code{size} directive (ELF version) +For ELF targets, the @code{.size} directive is used like this: + +@smallexample +.size @var{name} , @var{expression} +@end smallexample + +This directive sets the size associated with a symbol @var{name}. +The size in bytes is computed from @var{expression} which can make use of label +arithmetic. This directive is typically used to set the size of function +symbols. +@end ifset +@end ifset + +@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}. +@end ifclear + +@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 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 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 @command{@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}", @code{.string8} "@var{str}", @code{.string16} +"@var{str}", @code{.string32} "@var{str}", @code{.string64} "@var{str}" + +@cindex string, copying to object file +@cindex string8, copying to object file +@cindex string16, copying to object file +@cindex string32, copying to object file +@cindex string64, copying to object file +@cindex @code{string} directive +@cindex @code{string8} directive +@cindex @code{string16} directive +@cindex @code{string32} directive +@cindex @code{string64} 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}. + +The variants @code{string16}, @code{string32} and @code{string64} differ from +the @code{string} pseudo opcode in that each 8-bit character from @var{str} is +copied and expanded to 16, 32 or 64 bits respectively. The expanded characters +are stored in target endianness byte order. + +Example: +@smallexample + .string32 "BYE" +expands to: + .string "B\0\0\0Y\0\0\0E\0\0\0" /* On little endian targets. */ + .string "\0\0\0B\0\0\0Y\0\0\0E" /* On big endian targets. */ +@end smallexample + + +@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 SubSection +@section @code{.subsection @var{name}} + +@cindex @code{subsection} directive +@cindex Section Stack +This is one of the ELF section stack manipulation directives. The others are +@code{.section} (@pxref{Section}), @code{.pushsection} (@pxref{PushSection}), +@code{.popsection} (@pxref{PopSection}), and @code{.previous} +(@pxref{Previous}). + +This directive replaces the current subsection with @code{name}. The current +section is not changed. The replaced subsection is put onto the section stack +in place of the then current top of stack subsection. +@end ifset + +@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 can be used like this: +@smallexample +.symver @var{name}, @var{name2@@nodename} +@end smallexample +If the symbol @var{name} is defined within the file +being assembled, the @code{.symver} 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. + +If the symbol @var{name} is not defined within the file being assembled, all +references to @var{name} will be changed to @var{name2@@nodename}. If no +reference to @var{name} is made, @var{name2@@nodename} will be removed from the +symbol table. + +Another usage of the @code{.symver} directive is: +@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. It is similar to @var{name2@@nodename}. The +difference is @var{name2@@@@nodename} will also be used to resolve +references to @var{name2} by the linker. + +The third usage of the @code{.symver} directive is: +@smallexample +.symver @var{name}, @var{name2@@@@@@nodename} +@end smallexample +When @var{name} is not defined within the +file being assembled, it is treated as @var{name2@@nodename}. When +@var{name} is defined within the file being assembled, the symbol +name, @var{name}, will be changed to @var{name2@@@@nodename}. +@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 +@command{@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 @command{@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-ELF +@node Type +@section @code{.type} + +This directive is used to set the type of a symbol. + +@ifset COFF +@ifset ELF +@c only print the extra heading if both COFF and ELF are set +@subheading COFF Version +@end ifset + +@cindex COFF symbol type +@cindex symbol type, COFF +@cindex @code{type} directive (COFF version) +For COFF targets, this directive is permitted only within +@code{.def}/@code{.endef} pairs. It is used like this: + +@smallexample +.type @var{int} +@end smallexample + +This 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 +@command{@value{AS}} is configured for @code{b.out} output, it accepts this +directive but ignores it. +@end ifset +@end ifset + +@ifset ELF +@ifset COFF +@c only print the extra heading if both COFF and ELF are set +@subheading ELF Version +@end ifset + +@cindex ELF symbol type +@cindex symbol type, ELF +@cindex @code{type} directive (ELF version) +For ELF targets, the @code{.type} directive is used like this: + +@smallexample +.type @var{name} , @var{type description} +@end smallexample + +This sets the type of symbol @var{name} to be either a +function symbol or an object symbol. There are five different syntaxes +supported for the @var{type description} field, in order to provide +compatibility with various other assemblers. + +Because some of the characters used in these syntaxes (such as @samp{@@} and +@samp{#}) are comment characters for some architectures, some of the syntaxes +below do not work on all architectures. The first variant will be accepted by +the GNU assembler on all architectures so that variant should be used for +maximum portability, if you do not need to assemble your code with other +assemblers. + +The syntaxes supported are: + +@smallexample + .type <name> STT_<TYPE_IN_UPPER_CASE> + .type <name>,#<type> + .type <name>,@@<type> + .type <name>,%<type> + .type <name>,"<type>" +@end smallexample + +The types supported are: + +@table @gcctabopt +@item STT_FUNC +@itemx function +Mark the symbol as being a function name. + +@item STT_GNU_IFUNC +@itemx gnu_indirect_function +Mark the symbol as an indirect function when evaluated during reloc +processing. (This is only supported on assemblers targeting GNU systems). + +@item STT_OBJECT +@itemx object +Mark the symbol as being a data object. + +@item STT_TLS +@itemx tls_object +Mark the symbol as being a thead-local data object. + +@item STT_COMMON +@itemx common +Mark the symbol as being a common data object. + +@item STT_NOTYPE +@itemx notype +Does not mark the symbol in any way. It is supported just for completeness. + +@item gnu_unique_object +Marks the symbol as being a globally unique data object. The dynamic linker +will make sure that in the entire process there is just one symbol with this +name and type in use. (This is only supported on assemblers targeting GNU +systems). + +@end table + +Note: Some targets support extra types in addition to those listed above. + +@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 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 @command{@value{AS}} is +configured for @code{b.out}, it accepts this directive but ignores it. +@end ifset +@end ifset + +@ifset ELF +@node Version +@section @code{.version "@var{string}"} + +@cindex @code{version} directive +This directive creates a @code{.note} section and places into it an ELF +formatted note of type NT_VERSION. The note's name is set to @code{string}. +@end ifset + +@ifset ELF +@node VTableEntry +@section @code{.vtable_entry @var{table}, @var{offset}} + +@cindex @code{vtable_entry} directive +This directive finds or creates a symbol @code{table} and creates a +@code{VTABLE_ENTRY} relocation for it with an addend of @code{offset}. + +@node VTableInherit +@section @code{.vtable_inherit @var{child}, @var{parent}} + +@cindex @code{vtable_inherit} directive +This directive finds the symbol @code{child} and finds or creates the symbol +@code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the +parent whose addend is the value of the child symbol. As a special case the +parent name of @code{0} is treated as referring to the @code{*ABS*} section. +@end ifset + +@node Warning +@section @code{.warning "@var{string}"} +@cindex warning directive +Similar to the directive @code{.error} +(@pxref{Error,,@code{.error "@var{string}"}}), but just emits a warning. + +@node Weak +@section @code{.weak @var{names}} + +@cindex @code{weak} directive +This directive sets the weak attribute on the comma separated list of symbol +@code{names}. If the symbols do not already exist, they will be created. + +On COFF targets other than PE, weak symbols are a GNU extension. This +directive sets the weak attribute on the comma separated list of symbol +@code{names}. If the symbols do not already exist, they will be created. + +On the PE target, weak symbols are supported natively as weak aliases. +When a weak symbol is created that is not an alias, GAS creates an +alternate symbol to hold the default value. + +@node Weakref +@section @code{.weakref @var{alias}, @var{target}} + +@cindex @code{weakref} directive +This directive creates an alias to the target symbol that enables the symbol to +be referenced with weak-symbol semantics, but without actually making it weak. +If direct references or definitions of the symbol are present, then the symbol +will not be weak, but if all references to it are through weak references, the +symbol will be marked as weak in the symbol table. + +The effect is equivalent to moving all references to the alias to a separate +assembly source file, renaming the alias to the symbol in it, declaring the +symbol as weak there, and running a reloadable link to merge the object files +resulting from the assembly of the new source file and the old source file that +had the references to the alias removed. + +The alias itself never makes to the symbol table, and is entirely handled +within the assembler. + +@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, @command{@value{AS}} emits a 32-bit number. +@end ifset +@ifset W16 +For each expression, @command{@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, +@command{@value{AS}} occasionally 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 @command{@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, @command{@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 @command{@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 ELF +@node Object Attributes +@chapter Object Attributes +@cindex object attributes + +@command{@value{AS}} assembles source files written for a specific architecture +into object files for that architecture. But not all object files are alike. +Many architectures support incompatible variations. For instance, floating +point arguments might be passed in floating point registers if the object file +requires hardware floating point support---or floating point arguments might be +passed in integer registers if the object file supports processors with no +hardware floating point unit. Or, if two objects are built for different +generations of the same architecture, the combination may require the +newer generation at run-time. + +This information is useful during and after linking. At link time, +@command{@value{LD}} can warn about incompatible object files. After link +time, tools like @command{gdb} can use it to process the linked file +correctly. + +Compatibility information is recorded as a series of object attributes. Each +attribute has a @dfn{vendor}, @dfn{tag}, and @dfn{value}. The vendor is a +string, and indicates who sets the meaning of the tag. The tag is an integer, +and indicates what property the attribute describes. The value may be a string +or an integer, and indicates how the property affects this object. Missing +attributes are the same as attributes with a zero value or empty string value. + +Object attributes were developed as part of the ABI for the ARM Architecture. +The file format is documented in @cite{ELF for the ARM Architecture}. + +@menu +* GNU Object Attributes:: @sc{gnu} Object Attributes +* Defining New Object Attributes:: Defining New Object Attributes +@end menu + +@node GNU Object Attributes +@section @sc{gnu} Object Attributes + +The @code{.gnu_attribute} directive records an object attribute +with vendor @samp{gnu}. + +Except for @samp{Tag_compatibility}, which has both an integer and a string for +its value, @sc{gnu} attributes have a string value if the tag number is odd and +an integer value if the tag number is even. The second bit (@code{@var{tag} & +2} is set for architecture-independent attributes and clear for +architecture-dependent ones. + +@subsection Common @sc{gnu} attributes + +These attributes are valid on all architectures. + +@table @r +@item Tag_compatibility (32) +The compatibility attribute takes an integer flag value and a vendor name. If +the flag value is 0, the file is compatible with other toolchains. If it is 1, +then the file is only compatible with the named toolchain. If it is greater +than 1, the file can only be processed by other toolchains under some private +arrangement indicated by the flag value and the vendor name. +@end table + +@subsection MIPS Attributes + +@table @r +@item Tag_GNU_MIPS_ABI_FP (4) +The floating-point ABI used by this object file. The value will be: + +@itemize @bullet +@item +0 for files not affected by the floating-point ABI. +@item +1 for files using the hardware floating-point with a standard double-precision +FPU. +@item +2 for files using the hardware floating-point ABI with a single-precision FPU. +@item +3 for files using the software floating-point ABI. +@item +4 for files using the hardware floating-point ABI with 64-bit wide +double-precision floating-point registers and 32-bit wide general +purpose registers. +@end itemize +@end table + +@subsection PowerPC Attributes + +@table @r +@item Tag_GNU_Power_ABI_FP (4) +The floating-point ABI used by this object file. The value will be: + +@itemize @bullet +@item +0 for files not affected by the floating-point ABI. +@item +1 for files using double-precision hardware floating-point ABI. +@item +2 for files using the software floating-point ABI. +@item +3 for files using single-precision hardware floating-point ABI. +@end itemize + +@item Tag_GNU_Power_ABI_Vector (8) +The vector ABI used by this object file. The value will be: + +@itemize @bullet +@item +0 for files not affected by the vector ABI. +@item +1 for files using general purpose registers to pass vectors. +@item +2 for files using AltiVec registers to pass vectors. +@item +3 for files using SPE registers to pass vectors. +@end itemize +@end table + +@node Defining New Object Attributes +@section Defining New Object Attributes + +If you want to define a new @sc{gnu} object attribute, here are the places you +will need to modify. New attributes should be discussed on the @samp{binutils} +mailing list. + +@itemize @bullet +@item +This manual, which is the official register of attributes. +@item +The header for your architecture @file{include/elf}, to define the tag. +@item +The @file{bfd} support file for your architecture, to merge the attribute +and issue any appropriate link warnings. +@item +Test cases in @file{ld/testsuite} for merging and link warnings. +@item +@file{binutils/readelf.c} to display your attribute. +@item +GCC, if you want the compiler to mark the attribute automatically. +@end itemize + +@end ifset + +@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 @command{@value{AS}} runs. Floating point representations +vary as well, and @command{@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 +@command{@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 AARCH64 +* AArch64-Dependent:: AArch64 Dependent Features +@end ifset +@ifset ALPHA +* Alpha-Dependent:: Alpha Dependent Features +@end ifset +@ifset ARC +* ARC-Dependent:: ARC Dependent Features +@end ifset +@ifset ARM +* ARM-Dependent:: ARM Dependent Features +@end ifset +@ifset AVR +* AVR-Dependent:: AVR Dependent Features +@end ifset +@ifset Blackfin +* Blackfin-Dependent:: Blackfin Dependent Features +@end ifset +@ifset CR16 +* CR16-Dependent:: CR16 Dependent Features +@end ifset +@ifset CRIS +* CRIS-Dependent:: CRIS Dependent Features +@end ifset +@ifset D10V +* D10V-Dependent:: D10V Dependent Features +@end ifset +@ifset D30V +* D30V-Dependent:: D30V Dependent Features +@end ifset +@ifset EPIPHANY +* Epiphany-Dependent:: EPIPHANY Dependent Features +@end ifset +@ifset H8/300 +* H8/300-Dependent:: Renesas H8/300 Dependent Features +@end ifset +@ifset HPPA +* HPPA-Dependent:: HPPA Dependent Features +@end ifset +@ifset I370 +* ESA/390-Dependent:: IBM ESA/390 Dependent Features +@end ifset +@ifset I80386 +* i386-Dependent:: Intel 80386 and AMD x86-64 Dependent Features +@end ifset +@ifset I860 +* i860-Dependent:: Intel 80860 Dependent Features +@end ifset +@ifset I960 +* i960-Dependent:: Intel 80960 Dependent Features +@end ifset +@ifset IA64 +* IA-64-Dependent:: Intel IA-64 Dependent Features +@end ifset +@ifset IP2K +* IP2K-Dependent:: IP2K Dependent Features +@end ifset +@ifset LM32 +* LM32-Dependent:: LM32 Dependent Features +@end ifset +@ifset M32C +* M32C-Dependent:: M32C Dependent Features +@end ifset +@ifset M32R +* M32R-Dependent:: M32R Dependent Features +@end ifset +@ifset M680X0 +* M68K-Dependent:: M680x0 Dependent Features +@end ifset +@ifset M68HC11 +* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features +@end ifset +@ifset METAG +* Meta-Dependent :: Meta Dependent Features +@end ifset +@ifset MICROBLAZE +* MicroBlaze-Dependent:: MICROBLAZE Dependent Features +@end ifset +@ifset MIPS +* MIPS-Dependent:: MIPS Dependent Features +@end ifset +@ifset MMIX +* MMIX-Dependent:: MMIX Dependent Features +@end ifset +@ifset MSP430 +* MSP430-Dependent:: MSP430 Dependent Features +@end ifset +@ifset NIOSII +* NiosII-Dependent:: Altera Nios II Dependent Features +@end ifset +@ifset NS32K +* NS32K-Dependent:: NS32K Dependent Features +@end ifset +@ifset SH +* SH-Dependent:: Renesas / SuperH SH Dependent Features +* SH64-Dependent:: SuperH SH64 Dependent Features +@end ifset +@ifset PDP11 +* PDP-11-Dependent:: PDP-11 Dependent Features +@end ifset +@ifset PJ +* PJ-Dependent:: picoJava Dependent Features +@end ifset +@ifset PPC +* PPC-Dependent:: PowerPC Dependent Features +@end ifset +@ifset RL78 +* RL78-Dependent:: RL78 Dependent Features +@end ifset +@ifset RX +* RX-Dependent:: RX Dependent Features +@end ifset +@ifset S390 +* S/390-Dependent:: IBM S/390 Dependent Features +@end ifset +@ifset SCORE +* SCORE-Dependent:: SCORE Dependent Features +@end ifset +@ifset SPARC +* Sparc-Dependent:: SPARC Dependent Features +@end ifset +@ifset TIC54X +* TIC54X-Dependent:: TI TMS320C54x Dependent Features +@end ifset +@ifset TIC6X +* TIC6X-Dependent :: TI TMS320C6x Dependent Features +@end ifset +@ifset TILEGX +* TILE-Gx-Dependent :: Tilera TILE-Gx Dependent Features +@end ifset +@ifset TILEPRO +* TILEPro-Dependent :: Tilera TILEPro Dependent Features +@end ifset +@ifset V850 +* V850-Dependent:: V850 Dependent Features +@end ifset +@ifset XGATE +* XGATE-Dependent:: XGATE Features +@end ifset +@ifset XSTORMY16 +* XSTORMY16-Dependent:: XStormy16 Dependent Features +@end ifset +@ifset XTENSA +* Xtensa-Dependent:: Xtensa Dependent Features +@end ifset +@ifset Z80 +* Z80-Dependent:: Z80 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 AARCH64 +@include c-aarch64.texi +@end ifset + +@ifset ALPHA +@include c-alpha.texi +@end ifset + +@ifset ARC +@include c-arc.texi +@end ifset + +@ifset ARM +@include c-arm.texi +@end ifset + +@ifset AVR +@include c-avr.texi +@end ifset + +@ifset Blackfin +@include c-bfin.texi +@end ifset + +@ifset CR16 +@include c-cr16.texi +@end ifset + +@ifset CRIS +@include c-cris.texi +@end ifset + +@ifset Renesas-all +@ifclear GENERIC +@node Machine Dependencies +@chapter Machine Dependent Features + +The machine instruction sets are different on each Renesas chip family, +and there are also some syntax differences among the families. This +chapter describes the specific @command{@value{AS}} features for each +family. + +@menu +* H8/300-Dependent:: Renesas H8/300 Dependent Features +* SH-Dependent:: Renesas 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 EPIPHANY +@include c-epiphany.texi +@end ifset + +@ifset H8/300 +@include c-h8300.texi +@end ifset + +@ifset HPPA +@include c-hppa.texi +@end ifset + +@ifset I370 +@include c-i370.texi +@end ifset + +@ifset I80386 +@include c-i386.texi +@end ifset + +@ifset I860 +@include c-i860.texi +@end ifset + +@ifset I960 +@include c-i960.texi +@end ifset + +@ifset IA64 +@include c-ia64.texi +@end ifset + +@ifset IP2K +@include c-ip2k.texi +@end ifset + +@ifset LM32 +@include c-lm32.texi +@end ifset + +@ifset M32C +@include c-m32c.texi +@end ifset + +@ifset M32R +@include c-m32r.texi +@end ifset + +@ifset M680X0 +@include c-m68k.texi +@end ifset + +@ifset M68HC11 +@include c-m68hc11.texi +@end ifset + +@ifset METAG +@include c-metag.texi +@end ifset + +@ifset MICROBLAZE +@include c-microblaze.texi +@end ifset + +@ifset MIPS +@include c-mips.texi +@end ifset + +@ifset MMIX +@include c-mmix.texi +@end ifset + +@ifset MSP430 +@include c-msp430.texi +@end ifset + +@ifset NIOSII +@include c-nios2.texi +@end ifset + +@ifset NS32K +@include c-ns32k.texi +@end ifset + +@ifset PDP11 +@include c-pdp11.texi +@end ifset + +@ifset PJ +@include c-pj.texi +@end ifset + +@ifset PPC +@include c-ppc.texi +@end ifset + +@ifset RL78 +@include c-rl78.texi +@end ifset + +@ifset RX +@include c-rx.texi +@end ifset + +@ifset S390 +@include c-s390.texi +@end ifset + +@ifset SCORE +@include c-score.texi +@end ifset + +@ifset SH +@include c-sh.texi +@include c-sh64.texi +@end ifset + +@ifset SPARC +@include c-sparc.texi +@end ifset + +@ifset TIC54X +@include c-tic54x.texi +@end ifset + +@ifset TIC6X +@include c-tic6x.texi +@end ifset + +@ifset TILEGX +@include c-tilegx.texi +@end ifset + +@ifset TILEPRO +@include c-tilepro.texi +@end ifset + +@ifset Z80 +@include c-z80.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 XGATE +@include c-xgate.texi +@end ifset + +@ifset XSTORMY16 +@include c-xstormy16.texi +@end ifset + +@ifset XTENSA +@include c-xtensa.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 @command{@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 @command{@value{AS}} work better. +Bug reports are your contribution to the maintenance of @command{@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 +@command{@value{AS}} bug. Reliable assemblers never crash. + +@cindex error on valid input +@item +If @command{@value{AS}} produces an error message for valid input, that is a bug. + +@cindex invalid input +@item +If @command{@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 @command{@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 @command{@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. + +@ifset BUGURL +In any event, we also recommend that you send bug reports for @command{@value{AS}} +to @value{BUGURL}. +@end ifset + +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?'' This cannot help us fix a bug, so it is basically useless. We +respond by asking for enough details to enable us to investigate. +You might as well expedite matters by sending them to begin with. + +To enable us to fix the bug, you should include all these things: + +@itemize @bullet +@item +The version of @command{@value{AS}}. @command{@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 @command{@value{AS}}. + +@item +Any patches you may have applied to the @command{@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 @command{@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 +@command{@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 @command{@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 +@command{@value{AS}} is out of sync, or you have encountered a bug in the C +library on your system. (This has happened!) Your copy might crash and ours +would not. If you told us to expect a crash, then when ours fails to crash, we +would know that the bug was not happening for us. If you had not told us to +expect a crash, then we would not be able to draw any conclusion from our +observations. + +@item +If you wish to suggest changes to the @command{@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 @command{@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 @command{@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 GAS and your name isn't listed here, +it is not meant as a slight. We just don't know about it. Send mail to the +maintainer, and we'll correct the situation. Currently +@c (October 2012), +the maintainer is Nick Clifton (email address @code{nickc@@redhat.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 Renesas H8/300 processors (tc-z8k, +tc-h8300), and IEEE 695 object file format (obj-ieee), was written by +Steve Chamberlain of Cygnus Support. Steve also modified the COFF back end to +use BFD for some low-level operations, for use with the H8/300 and AMD 29k +targets. + +John Gilmore built the AMD 29000 support, added @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 GAS able to generate listings. + +Hewlett-Packard contributed support for the HP9000/300. + +Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM) +along with a fairly extensive HPPA testsuite (for both SOM and ELF object +formats). This work was supported by both the Center for Software Science at +the University of Utah and Cygnus Support. + +Support for ELF format files has been worked on by Mark Eichin of Cygnus +Support (original, incomplete implementation for SPARC), Pete Hoogenboom and +Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open +Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc, +and some initial 64-bit support). + +Linas Vepstas added GAS support for the ESA/390 ``IBM 370'' architecture. + +Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD +support for openVMS/Alpha. + +Timothy Wall, Michael Hayes, and Greg Smart contributed to the various tic* +flavors. + +David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from Tensilica, +Inc.@: added support for Xtensa processors. + +Several engineers at Cygnus Support have also provided many small bug fixes and +configuration enhancements. + +Jon Beniston added support for the Lattice Mico32 architecture. + +Many others have contributed large or small bugfixes and enhancements. If +you have contributed significant work and are not mentioned on this list, and +want to be, let us know. Some of the history has been lost; we are not +intentionally leaving anyone out. + +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@include fdl.texi + +@node AS Index +@unnumbered AS Index + +@printindex cp + +@bye +@c Local Variables: +@c fill-column: 79 +@c End: diff --git a/binutils-2.25/gas/doc/c-aarch64.texi b/binutils-2.25/gas/doc/c-aarch64.texi new file mode 100644 index 00000000..60190063 --- /dev/null +++ b/binutils-2.25/gas/doc/c-aarch64.texi @@ -0,0 +1,281 @@ +@c Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +@c Contributed by ARM Ltd. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node AArch64-Dependent +@chapter AArch64 Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter AArch64 Dependent Features +@end ifclear + +@cindex AArch64 support +@cindex Thumb support +@menu +* AArch64 Options:: Options +* AArch64 Syntax:: Syntax +* AArch64 Floating Point:: Floating Point +* AArch64 Directives:: AArch64 Machine Directives +* AArch64 Opcodes:: Opcodes +* AArch64 Mapping Symbols:: Mapping Symbols +@end menu + +@node AArch64 Options +@section Options +@cindex AArch64 options (none) +@cindex options for AArch64 (none) + +@c man begin OPTIONS +@table @gcctabopt + +@cindex @code{-EB} command line option, AArch64 +@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, AArch64 +@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{-mabi=} command line option, AArch64 +@item -mabi=@var{abi} +Specify which ABI the source code uses. The recognized arguments +are: @code{ilp32} and @code{lp64}, which decides the generated object +file in ELF32 and ELF64 format respectively. The default is @code{lp64}. + +@end table +@c man end + +@node AArch64 Syntax +@section Syntax +@menu +* AArch64-Chars:: Special Characters +* AArch64-Regs:: Register Names +* AArch64-Relocations:: Relocations +@end menu + +@node AArch64-Chars +@subsection Special Characters + +@cindex line comment character, AArch64 +@cindex AArch64 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, AArch64 +@cindex statement separator, AArch64 +@cindex AArch64 line separator +The @samp{;} character can be used instead of a newline to separate +statements. + +@cindex immediate character, AArch64 +@cindex AArch64 immediate character +The @samp{#} can be optionally used to indicate immediate operands. + +@node AArch64-Regs +@subsection Register Names + +@cindex AArch64 register names +@cindex register names, AArch64 +Please refer to the section @samp{4.4 Register Names} of +@samp{ARMv8 Instruction Set Overview}, which is available at +@uref{http://infocenter.arm.com}. + +@node AArch64-Relocations +@subsection Relocations + +@cindex relocations, AArch64 +@cindex AArch64 relocations +@cindex MOVN, MOVZ and MOVK group relocations, AArch64 +Relocations for @samp{MOVZ} and @samp{MOVK} instructions can be generated +by prefixing the label with @samp{#:abs_g2:} etc. +For example to load the 48-bit absolute address of @var{foo} into x0: + +@smallexample + movz x0, #:abs_g2:foo // bits 32-47, overflow check + movk x0, #:abs_g1_nc:foo // bits 16-31, no overflow check + movk x0, #:abs_g0_nc:foo // bits 0-15, no overflow check +@end smallexample + +@cindex ADRP, ADD, LDR/STR group relocations, AArch64 +Relocations for @samp{ADRP}, and @samp{ADD}, @samp{LDR} or @samp{STR} +instructions can be generated by prefixing the label with +@samp{#:pg_hi21:} and @samp{#:lo12:} respectively. + +For example to use 33-bit (+/-4GB) pc-relative addressing to +load the address of @var{foo} into x0: + +@smallexample + adrp x0, #:pg_hi21:foo + add x0, x0, #:lo12:foo +@end smallexample + +Or to load the value of @var{foo} into x0: + +@smallexample + adrp x0, #:pg_hi21:foo + ldr x0, [x0, #:lo12:foo] +@end smallexample + +Note that @samp{#:pg_hi21:} is optional. + +@smallexample + adrp x0, foo +@end smallexample + +is equivalent to + +@smallexample + adrp x0, #:pg_hi21:foo +@end smallexample + +@node AArch64 Floating Point +@section Floating Point + +@cindex floating point, AArch64 (@sc{ieee}) +@cindex AArch64 floating point (@sc{ieee}) +The AArch64 architecture uses @sc{ieee} floating-point numbers. + +@node AArch64 Directives +@section AArch64 Machine Directives + +@cindex machine directives, AArch64 +@cindex AArch64 machine directives +@table @code + +@c AAAAAAAAAAAAAAAAAAAAAAAAA +@c BBBBBBBBBBBBBBBBBBBBBBBBBB + +@cindex @code{.bss} directive, AArch64 +@item .bss +This directive switches to the @code{.bss} section. + +@c CCCCCCCCCCCCCCCCCCCCCCCCCC +@c DDDDDDDDDDDDDDDDDDDDDDDDDD +@c EEEEEEEEEEEEEEEEEEEEEEEEEE +@c FFFFFFFFFFFFFFFFFFFFFFFFFF +@c GGGGGGGGGGGGGGGGGGGGGGGGGG +@c HHHHHHHHHHHHHHHHHHHHHHHHHH +@c IIIIIIIIIIIIIIIIIIIIIIIIII +@c JJJJJJJJJJJJJJJJJJJJJJJJJJ +@c KKKKKKKKKKKKKKKKKKKKKKKKKK +@c LLLLLLLLLLLLLLLLLLLLLLLLLL + +@cindex @code{.ltorg} directive, AArch64 +@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). +@code{GAS} maintains a separate literal pool for each section and each +sub-section. The @code{.ltorg} directive will only affect the literal +pool of the current section and sub-section. At the end of assembly +all remaining, un-empty literal pools will automatically be dumped. + +Note - older versions of @code{GAS} would dump the current literal +pool any time a section change occurred. This is no longer done, since +it prevents accurate control of the placement of literal pools. + +@c MMMMMMMMMMMMMMMMMMMMMMMMMM + +@c NNNNNNNNNNNNNNNNNNNNNNNNNN +@c OOOOOOOOOOOOOOOOOOOOOOOOOO + +@c PPPPPPPPPPPPPPPPPPPPPPPPPP + +@cindex @code{.pool} directive, AArch64 +@item .pool +This is a synonym for .ltorg. + +@c QQQQQQQQQQQQQQQQQQQQQQQQQQ +@c RRRRRRRRRRRRRRRRRRRRRRRRRR + +@cindex @code{.req} directive, AArch64 +@item @var{name} .req @var{register name} +This creates an alias for @var{register name} called @var{name}. For +example: + +@smallexample + foo .req w0 +@end smallexample + +@c SSSSSSSSSSSSSSSSSSSSSSSSSS + +@c TTTTTTTTTTTTTTTTTTTTTTTTTT + +@c UUUUUUUUUUUUUUUUUUUUUUUUUU + +@cindex @code{.unreq} directive, AArch64 +@item .unreq @var{alias-name} +This undefines a register alias which was previously defined using the +@code{req} directive. For example: + +@smallexample + foo .req w0 + .unreq foo +@end smallexample + +An error occurs if the name is undefined. Note - this pseudo op can +be used to delete builtin in register name aliases (eg 'w0'). This +should only be done if it is really necessary. + +@c VVVVVVVVVVVVVVVVVVVVVVVVVV + +@c WWWWWWWWWWWWWWWWWWWWWWWWWW +@c XXXXXXXXXXXXXXXXXXXXXXXXXX +@c YYYYYYYYYYYYYYYYYYYYYYYYYY +@c ZZZZZZZZZZZZZZZZZZZZZZZZZZ + +@end table + +@node AArch64 Opcodes +@section Opcodes + +@cindex AArch64 opcodes +@cindex opcodes for AArch64 +@code{@value{AS}} implements all the standard AArch64 opcodes. It also +implements several pseudo opcodes, including several synthetic load +instructions. + +@table @code + +@cindex @code{LDR reg,=<expr>} pseudo op, AArch64 +@item LDR = +@smallexample + ldr <register> , =<expression> +@end smallexample + +The constant expression will be placed into the nearest literal pool (if it not +already there) and a PC-relative LDR instruction will be generated. + +@end table + +For more information on the AArch64 instruction set and assembly language +notation, see @samp{ARMv8 Instruction Set Overview} available at +@uref{http://infocenter.arm.com}. + + +@node AArch64 Mapping Symbols +@section Mapping Symbols + +The AArch64 ELF specification requires that special symbols be inserted +into object files to mark certain features: + +@table @code + +@cindex @code{$x} +@item $x +At the start of a region of code containing AArch64 instructions. + +@cindex @code{$d} +@item $d +At the start of a region of data. + +@end table diff --git a/binutils-2.25/gas/doc/c-alpha.texi b/binutils-2.25/gas/doc/c-alpha.texi new file mode 100644 index 00000000..dd484138 --- /dev/null +++ b/binutils-2.25/gas/doc/c-alpha.texi @@ -0,0 +1,487 @@ +@c Copyright 2002, 2003, 2005, 2009, 2011 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node Alpha-Dependent +@chapter Alpha Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter Alpha Dependent Features +@end ifclear + +@cindex Alpha support +@menu +* Alpha Notes:: Notes +* Alpha Options:: Options +* Alpha Syntax:: Syntax +* Alpha Floating Point:: Floating Point +* Alpha Directives:: Alpha Machine Directives +* Alpha Opcodes:: Opcodes +@end menu + +@node Alpha Notes +@section Notes +@cindex Alpha notes +@cindex notes for Alpha + +The documentation here is primarily for the ELF object format. +@code{@value{AS}} also supports the ECOFF and EVAX formats, but +features specific to these formats are not yet documented. + +@node Alpha Options +@section Options +@cindex Alpha options +@cindex options for Alpha + +@c man begin OPTIONS +@table @gcctabopt +@cindex @code{-m@var{cpu}} command line option, Alpha +@item -m@var{cpu} +This option specifies the target processor. If an attempt is made to +assemble an instruction which will not execute on the target processor, +the assembler may either expand the instruction as a macro or issue an +error message. This option is equivalent to the @code{.arch} directive. + +The following processor names are recognized: +@code{21064}, +@code{21064a}, +@code{21066}, +@code{21068}, +@code{21164}, +@code{21164a}, +@code{21164pc}, +@code{21264}, +@code{21264a}, +@code{21264b}, +@code{ev4}, +@code{ev5}, +@code{lca45}, +@code{ev5}, +@code{ev56}, +@code{pca56}, +@code{ev6}, +@code{ev67}, +@code{ev68}. +The special name @code{all} may be used to allow the assembler to accept +instructions valid for any Alpha processor. + +In order to support existing practice in OSF/1 with respect to @code{.arch}, +and existing practice within @command{MILO} (the Linux ARC bootloader), the +numbered processor names (e.g.@: 21064) enable the processor-specific PALcode +instructions, while the ``electro-vlasic'' names (e.g.@: @code{ev4}) do not. + +@cindex @code{-mdebug} command line option, Alpha +@cindex @code{-no-mdebug} command line option, Alpha +@item -mdebug +@itemx -no-mdebug +Enables or disables the generation of @code{.mdebug} encapsulation for +stabs directives and procedure descriptors. The default is to automatically +enable @code{.mdebug} when the first stabs directive is seen. + +@cindex @code{-relax} command line option, Alpha +@item -relax +This option forces all relocations to be put into the object file, instead +of saving space and resolving some relocations at assembly time. Note that +this option does not propagate all symbol arithmetic into the object file, +because not all symbol arithmetic can be represented. However, the option +can still be useful in specific applications. + +@cindex @code{-replace} command line option, Alpha +@cindex @code{-noreplace} command line option, Alpha +@item -replace +@itemx -noreplace +Enables or disables the optimization of procedure calls, both at assemblage +and at link time. These options are only available for VMS targets and +@code{-replace} is the default. See section 1.4.1 of the OpenVMS Linker +Utility Manual. + +@cindex @code{-g} command line option, Alpha +@item -g +This option is used when the compiler generates debug information. When +@command{gcc} is using @command{mips-tfile} to generate debug +information for ECOFF, local labels must be passed through to the object +file. Otherwise this option has no effect. + +@cindex @code{-G} command line option, Alpha +@item -G@var{size} +A local common symbol larger than @var{size} is placed in @code{.bss}, +while smaller symbols are placed in @code{.sbss}. + +@cindex @code{-F} command line option, Alpha +@cindex @code{-32addr} command line option, Alpha +@item -F +@itemx -32addr +These options are ignored for backward compatibility. +@end table +@c man end + +@cindex Alpha Syntax +@node Alpha Syntax +@section Syntax +The assembler syntax closely follow the Alpha Reference Manual; +assembler directives and general syntax closely follow the OSF/1 and +OpenVMS syntax, with a few differences for ELF. + +@menu +* Alpha-Chars:: Special Characters +* Alpha-Regs:: Register Names +* Alpha-Relocs:: Relocations +@end menu + +@node Alpha-Chars +@subsection Special Characters + +@cindex line comment character, Alpha +@cindex Alpha line comment character +@samp{#} is the line comment character. Note that if @samp{#} is the +first character on a line then it can also be a logical line number +directive (@pxref{Comments}) or a preprocessor control +command (@pxref{Preprocessing}). + +@cindex line separator, Alpha +@cindex statement separator, Alpha +@cindex Alpha line separator +@samp{;} can be used instead of a newline to separate statements. + +@node Alpha-Regs +@subsection Register Names +@cindex Alpha registers +@cindex register names, Alpha + +The 32 integer registers are referred to as @samp{$@var{n}} or +@samp{$r@var{n}}. In addition, registers 15, 28, 29, and 30 may +be referred to by the symbols @samp{$fp}, @samp{$at}, @samp{$gp}, +and @samp{$sp} respectively. + +The 32 floating-point registers are referred to as @samp{$f@var{n}}. + +@node Alpha-Relocs +@subsection Relocations +@cindex Alpha relocations +@cindex relocations, Alpha + +Some of these relocations are available for ECOFF, but mostly +only for ELF. They are modeled after the relocation format +introduced in Digital Unix 4.0, but there are additions. + +The format is @samp{!@var{tag}} or @samp{!@var{tag}!@var{number}} +where @var{tag} is the name of the relocation. In some cases +@var{number} is used to relate specific instructions. + +The relocation is placed at the end of the instruction like so: + +@example +ldah $0,a($29) !gprelhigh +lda $0,a($0) !gprellow +ldq $1,b($29) !literal!100 +ldl $2,0($1) !lituse_base!100 +@end example + +@table @code +@item !literal +@itemx !literal!@var{N} +Used with an @code{ldq} instruction to load the address of a symbol +from the GOT. + +A sequence number @var{N} is optional, and if present is used to pair +@code{lituse} relocations with this @code{literal} relocation. The +@code{lituse} relocations are used by the linker to optimize the code +based on the final location of the symbol. + +Note that these optimizations are dependent on the data flow of the +program. Therefore, if @emph{any} @code{lituse} is paired with a +@code{literal} relocation, then @emph{all} uses of the register set by +the @code{literal} instruction must also be marked with @code{lituse} +relocations. This is because the original @code{literal} instruction +may be deleted or transformed into another instruction. + +Also note that there may be a one-to-many relationship between +@code{literal} and @code{lituse}, but not a many-to-one. That is, if +there are two code paths that load up the same address and feed the +value to a single use, then the use may not use a @code{lituse} +relocation. + +@item !lituse_base!@var{N} +Used with any memory format instruction (e.g.@: @code{ldl}) to indicate +that the literal is used for an address load. The offset field of the +instruction must be zero. During relaxation, the code may be altered +to use a gp-relative load. + +@item !lituse_jsr!@var{N} +Used with a register branch format instruction (e.g.@: @code{jsr}) to +indicate that the literal is used for a call. During relaxation, the +code may be altered to use a direct branch (e.g.@: @code{bsr}). + +@item !lituse_jsrdirect!@var{N} +Similar to @code{lituse_jsr}, but also that this call cannot be vectored +through a PLT entry. This is useful for functions with special calling +conventions which do not allow the normal call-clobbered registers to be +clobbered. + +@item !lituse_bytoff!@var{N} +Used with a byte mask instruction (e.g.@: @code{extbl}) to indicate +that only the low 3 bits of the address are relevant. During relaxation, +the code may be altered to use an immediate instead of a register shift. + +@item !lituse_addr!@var{N} +Used with any other instruction to indicate that the original address +is in fact used, and the original @code{ldq} instruction may not be +altered or deleted. This is useful in conjunction with @code{lituse_jsr} +to test whether a weak symbol is defined. + +@example +ldq $27,foo($29) !literal!1 +beq $27,is_undef !lituse_addr!1 +jsr $26,($27),foo !lituse_jsr!1 +@end example + +@item !lituse_tlsgd!@var{N} +Used with a register branch format instruction to indicate that the +literal is the call to @code{__tls_get_addr} used to compute the +address of the thread-local storage variable whose descriptor was +loaded with @code{!tlsgd!@var{N}}. + +@item !lituse_tlsldm!@var{N} +Used with a register branch format instruction to indicate that the +literal is the call to @code{__tls_get_addr} used to compute the +address of the base of the thread-local storage block for the current +module. The descriptor for the module must have been loaded with +@code{!tlsldm!@var{N}}. + +@item !gpdisp!@var{N} +Used with @code{ldah} and @code{lda} to load the GP from the current +address, a-la the @code{ldgp} macro. The source register for the +@code{ldah} instruction must contain the address of the @code{ldah} +instruction. There must be exactly one @code{lda} instruction paired +with the @code{ldah} instruction, though it may appear anywhere in +the instruction stream. The immediate operands must be zero. + +@example +bsr $26,foo +ldah $29,0($26) !gpdisp!1 +lda $29,0($29) !gpdisp!1 +@end example + +@item !gprelhigh +Used with an @code{ldah} instruction to add the high 16 bits of a +32-bit displacement from the GP. + +@item !gprellow +Used with any memory format instruction to add the low 16 bits of a +32-bit displacement from the GP. + +@item !gprel +Used with any memory format instruction to add a 16-bit displacement +from the GP. + +@item !samegp +Used with any branch format instruction to skip the GP load at the +target address. The referenced symbol must have the same GP as the +source object file, and it must be declared to either not use @code{$27} +or perform a standard GP load in the first two instructions via the +@code{.prologue} directive. + +@item !tlsgd +@itemx !tlsgd!@var{N} +Used with an @code{lda} instruction to load the address of a TLS +descriptor for a symbol in the GOT. + +The sequence number @var{N} is optional, and if present it used to +pair the descriptor load with both the @code{literal} loading the +address of the @code{__tls_get_addr} function and the @code{lituse_tlsgd} +marking the call to that function. + +For proper relaxation, both the @code{tlsgd}, @code{literal} and +@code{lituse} relocations must be in the same extended basic block. +That is, the relocation with the lowest address must be executed +first at runtime. + +@item !tlsldm +@itemx !tlsldm!@var{N} +Used with an @code{lda} instruction to load the address of a TLS +descriptor for the current module in the GOT. + +Similar in other respects to @code{tlsgd}. + +@item !gotdtprel +Used with an @code{ldq} instruction to load the offset of the TLS +symbol within its module's thread-local storage block. Also known +as the dynamic thread pointer offset or dtp-relative offset. + +@item !dtprelhi +@itemx !dtprello +@itemx !dtprel +Like @code{gprel} relocations except they compute dtp-relative offsets. + +@item !gottprel +Used with an @code{ldq} instruction to load the offset of the TLS +symbol from the thread pointer. Also known as the tp-relative offset. + +@item !tprelhi +@itemx !tprello +@itemx !tprel +Like @code{gprel} relocations except they compute tp-relative offsets. +@end table + +@node Alpha Floating Point +@section Floating Point +@cindex floating point, Alpha (@sc{ieee}) +@cindex Alpha floating point (@sc{ieee}) +The Alpha family uses both @sc{ieee} and VAX floating-point numbers. + +@node Alpha Directives +@section Alpha Assembler Directives + +@command{@value{AS}} for the Alpha supports many additional directives for +compatibility with the native assembler. This section describes them only +briefly. + +@cindex Alpha-only directives +These are the additional directives in @code{@value{AS}} for the Alpha: + +@table @code +@item .arch @var{cpu} +Specifies the target processor. This is equivalent to the +@option{-m@var{cpu}} command-line option. @xref{Alpha Options, Options}, +for a list of values for @var{cpu}. + +@item .ent @var{function}[, @var{n}] +Mark the beginning of @var{function}. An optional number may follow for +compatibility with the OSF/1 assembler, but is ignored. When generating +@code{.mdebug} information, this will create a procedure descriptor for +the function. In ELF, it will mark the symbol as a function a-la the +generic @code{.type} directive. + +@item .end @var{function} +Mark the end of @var{function}. In ELF, it will set the size of the symbol +a-la the generic @code{.size} directive. + +@item .mask @var{mask}, @var{offset} +Indicate which of the integer registers are saved in the current +function's stack frame. @var{mask} is interpreted a bit mask in which +bit @var{n} set indicates that register @var{n} is saved. The registers +are saved in a block located @var{offset} bytes from the @dfn{canonical +frame address} (CFA) which is the value of the stack pointer on entry to +the function. The registers are saved sequentially, except that the +return address register (normally @code{$26}) is saved first. + +This and the other directives that describe the stack frame are +currently only used when generating @code{.mdebug} information. They +may in the future be used to generate DWARF2 @code{.debug_frame} unwind +information for hand written assembly. + +@item .fmask @var{mask}, @var{offset} +Indicate which of the floating-point registers are saved in the current +stack frame. The @var{mask} and @var{offset} parameters are interpreted +as with @code{.mask}. + +@item .frame @var{framereg}, @var{frameoffset}, @var{retreg}[, @var{argoffset}] +Describes the shape of the stack frame. The frame pointer in use is +@var{framereg}; normally this is either @code{$fp} or @code{$sp}. The +frame pointer is @var{frameoffset} bytes below the CFA. The return +address is initially located in @var{retreg} until it is saved as +indicated in @code{.mask}. For compatibility with OSF/1 an optional +@var{argoffset} parameter is accepted and ignored. It is believed to +indicate the offset from the CFA to the saved argument registers. + +@item .prologue @var{n} +Indicate that the stack frame is set up and all registers have been +spilled. The argument @var{n} indicates whether and how the function +uses the incoming @dfn{procedure vector} (the address of the called +function) in @code{$27}. 0 indicates that @code{$27} is not used; 1 +indicates that the first two instructions of the function use @code{$27} +to perform a load of the GP register; 2 indicates that @code{$27} is +used in some non-standard way and so the linker cannot elide the load of +the procedure vector during relaxation. + +@item .usepv @var{function}, @var{which} +Used to indicate the use of the @code{$27} register, similar to +@code{.prologue}, but without the other semantics of needing to +be inside an open @code{.ent}/@code{.end} block. + +The @var{which} argument should be either @code{no}, indicating that +@code{$27} is not used, or @code{std}, indicating that the first two +instructions of the function perform a GP load. + +One might use this directive instead of @code{.prologue} if you are +also using dwarf2 CFI directives. + +@item .gprel32 @var{expression} +Computes the difference between the address in @var{expression} and the +GP for the current object file, and stores it in 4 bytes. In addition +to being smaller than a full 8 byte address, this also does not require +a dynamic relocation when used in a shared library. + +@item .t_floating @var{expression} +Stores @var{expression} as an @sc{ieee} double precision value. + +@item .s_floating @var{expression} +Stores @var{expression} as an @sc{ieee} single precision value. + +@item .f_floating @var{expression} +Stores @var{expression} as a VAX F format value. + +@item .g_floating @var{expression} +Stores @var{expression} as a VAX G format value. + +@item .d_floating @var{expression} +Stores @var{expression} as a VAX D format value. + +@item .set @var{feature} +Enables or disables various assembler features. Using the positive +name of the feature enables while using @samp{no@var{feature}} disables. + +@table @code +@item at +Indicates that macro expansions may clobber the @dfn{assembler +temporary} (@code{$at} or @code{$28}) register. Some macros may not be +expanded without this and will generate an error message if @code{noat} +is in effect. When @code{at} is in effect, a warning will be generated +if @code{$at} is used by the programmer. + +@item macro +Enables the expansion of macro instructions. Note that variants of real +instructions, such as @code{br label} vs @code{br $31,label} are +considered alternate forms and not macros. + +@item move +@itemx reorder +@itemx volatile +These control whether and how the assembler may re-order instructions. +Accepted for compatibility with the OSF/1 assembler, but @command{@value{AS}} +does not do instruction scheduling, so these features are ignored. +@end table +@end table + +The following directives are recognized for compatibility with the OSF/1 +assembler but are ignored. + +@example +.proc .aproc +.reguse .livereg +.option .aent +.ugen .eflag +.alias .noalias +@end example + +@node Alpha Opcodes +@section Opcodes +For detailed information on the Alpha machine instruction set, see the +@c Attempt to work around a very overfull hbox. +@iftex +Alpha Architecture Handbook located at +@smallfonts +@example +ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf +@end example +@textfonts +@end iftex +@ifnottex +@uref{ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf,Alpha Architecture Handbook}. +@end ifnottex diff --git a/binutils-2.25/gas/doc/c-arc.texi b/binutils-2.25/gas/doc/c-arc.texi new file mode 100644 index 00000000..38bd3c85 --- /dev/null +++ b/binutils-2.25/gas/doc/c-arc.texi @@ -0,0 +1,340 @@ +@c Copyright 2000-2013 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 ARC-Dependent +@chapter ARC Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter ARC Dependent Features +@end ifclear + +@set ARC_CORE_DEFAULT 6 + +@cindex ARC support +@menu +* ARC Options:: Options +* ARC Syntax:: Syntax +* ARC Floating Point:: Floating Point +* ARC Directives:: ARC Machine Directives +* ARC Opcodes:: Opcodes +@end menu + + +@node ARC Options +@section Options +@cindex ARC options (none) +@cindex options for ARC (none) + +@table @code + +@cindex @code{-marc[5|6|7|8]} command line option, ARC +@item -marc[5|6|7|8] +This option selects the core processor variant. Using +@code{-marc} is the same as @code{-marc@value{ARC_CORE_DEFAULT}}, which +is also the default. + +@table @code + +@cindex @code{arc5} arc5, ARC +@item arc5 +Base instruction set. + +@cindex @code{arc6} arc6, ARC +@item arc6 +Jump-and-link (jl) instruction. No requirement of an instruction between +setting flags and conditional jump. For example: + +@smallexample + mov.f r0,r1 + beq foo +@end smallexample + +@cindex @code{arc7} arc7, ARC +@item arc7 +Break (brk) and sleep (sleep) instructions. + +@cindex @code{arc8} arc8, ARC +@item arc8 +Software interrupt (swi) instruction. + +@end table + +Note: the @code{.option} directive can to be used to select a core +variant from within assembly code. + +@cindex @code{-EB} command line option, ARC +@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, ARC +@item -EL +This option specifies that the output generated by the assembler should +be marked as being encoded for a little-endian processor - this is the +default. + +@end table + +@node ARC Syntax +@section Syntax +@menu +* ARC-Chars:: Special Characters +* ARC-Regs:: Register Names +@end menu + +@node ARC-Chars +@subsection Special Characters + +@cindex line comment character, ARC +@cindex ARC 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. Note that if a line +starts with a @samp{#} character then it can also be a logical line +number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, ARC +@cindex statement separator, ARC +@cindex ARC line separator +The ARC assembler does not support a line separator character. + +@node ARC-Regs +@subsection Register Names + +@cindex ARC register names +@cindex register names, ARC +*TODO* + + +@node ARC Floating Point +@section Floating Point + +@cindex floating point, ARC (@sc{ieee}) +@cindex ARC floating point (@sc{ieee}) +The ARC core does not currently 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 machine directives, ARC +@cindex ARC machine directives +The ARC version of @code{@value{AS}} supports the following additional +machine directives: + +@table @code + +@cindex @code{2byte} directive, ARC +@item .2byte @var{expressions} +*TODO* + +@cindex @code{3byte} directive, ARC +@item .3byte @var{expressions} +*TODO* + +@cindex @code{4byte} directive, ARC +@item .4byte @var{expressions} +*TODO* + +@cindex @code{extAuxRegister} directive, ARC +@item .extAuxRegister @var{name},@var{address},@var{mode} +The ARCtangent A4 has extensible auxiliary register space. The +auxiliary registers can be defined in the assembler source code by +using this directive. The first parameter is the @var{name} of the +new auxiallry register. The second parameter is the @var{address} of +the register in the auxiliary register memory map for the variant of +the ARC. The third parameter specifies the @var{mode} in which the +register can be operated is and it can be one of: + +@table @code +@item r (readonly) +@item w (write only) +@item r|w (read or write) +@end table + +For example: + +@smallexample + .extAuxRegister mulhi,0x12,w +@end smallexample + +This specifies an extension auxiliary register called @emph{mulhi} +which is at address 0x12 in the memory space and which is only +writable. + +@cindex @code{extCondCode} directive, ARC +@item .extCondCode @var{suffix},@var{value} +The condition codes on the ARCtangent A4 are extensible and can be +specified by means of this assembler directive. They are specified +by the suffix and the value for the condition code. They can be used to +specify extra condition codes with any values. For example: + +@smallexample + .extCondCode is_busy,0x14 + + add.is_busy r1,r2,r3 + bis_busy _main +@end smallexample + +@cindex @code{extCoreRegister} directive, ARC +@item .extCoreRegister @var{name},@var{regnum},@var{mode},@var{shortcut} +Specifies an extension core register @var{name} for the application. +This allows a register @var{name} with a valid @var{regnum} between 0 +and 60, with the following as valid values for @var{mode} + +@table @samp +@item @emph{r} (readonly) +@item @emph{w} (write only) +@item @emph{r|w} (read or write) +@end table + + +The other parameter gives a description of the register having a +@var{shortcut} in the pipeline. The valid values are: + +@table @code +@item can_shortcut +@item cannot_shortcut +@end table + +For example: + +@smallexample + .extCoreRegister mlo,57,r,can_shortcut +@end smallexample + +This defines an extension core register mlo with the value 57 which +can shortcut the pipeline. + +@cindex @code{extInstruction} directive, ARC +@item .extInstruction @var{name},@var{opcode},@var{subopcode},@var{suffixclass},@var{syntaxclass} +The ARCtangent A4 allows the user to specify extension instructions. +The extension instructions are not macros. The assembler creates +encodings for use of these instructions according to the specification +by the user. The parameters are: + +@itemize @bullet +@item @var{name} +Name of the extension instruction + +@item @var{opcode} +Opcode to be used. (Bits 27:31 in the encoding). Valid values +0x10-0x1f or 0x03 + +@item @var{subopcode} +Subopcode to be used. Valid values are from 0x09-0x3f. However the +correct value also depends on @var{syntaxclass} + +@item @var{suffixclass} +Determines the kinds of suffixes to be allowed. Valid values are +@code{SUFFIX_NONE}, @code{SUFFIX_COND}, +@code{SUFFIX_FLAG} which indicates the absence or presence of +conditional suffixes and flag setting by the extension instruction. +It is also possible to specify that an instruction sets the flags and +is conditional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}. + +@item @var{syntaxclass} +Determines the syntax class for the instruction. It can have the +following values: + +@table @code +@item @code{SYNTAX_2OP}: +2 Operand Instruction +@item @code{SYNTAX_3OP}: +3 Operand Instruction +@end table + +In addition there could be modifiers for the syntax class as described +below: + +@itemize @minus +Syntax Class Modifiers are: + +@item @code{OP1_MUST_BE_IMM}: +Modifies syntax class SYNTAX_3OP, specifying that the first operand +of a three-operand instruction must be an immediate (i.e., the result +is discarded). OP1_MUST_BE_IMM is used by bitwise ORing it with +SYNTAX_3OP as given in the example below. This could usually be used +to set the flags using specific instructions and not retain results. + +@item @code{OP1_IMM_IMPLIED}: +Modifies syntax class SYNTAX_20P, it specifies that there is an +implied immediate destination operand which does not appear in the +syntax. For example, if the source code contains an instruction like: + +@smallexample +inst r1,r2 +@end smallexample + +it really means that the first argument is an implied immediate (that +is, the result is discarded). This is the same as though the source +code were: inst 0,r1,r2. You use OP1_IMM_IMPLIED by bitwise ORing it +with SYNTAX_20P. + +@end itemize +@end itemize + +For example, defining 64-bit multiplier with immediate operands: + +@smallexample +.extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , + SYNTAX_3OP|OP1_MUST_BE_IMM +@end smallexample + +The above specifies an extension instruction called mp64 which has 3 operands, +sets the flags, can be used with a condition code, for which the +first operand is an immediate. (Equivalent to discarding the result +of the operation). + +@smallexample + .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED +@end smallexample + +This describes a 2 operand instruction with an implicit first +immediate operand. The result of this operation would be discarded. + +@cindex @code{half} directive, ARC +@item .half @var{expressions} +*TODO* + +@cindex @code{long} directive, ARC +@item .long @var{expressions} +*TODO* + +@cindex @code{option} directive, ARC +@item .option @var{arc|arc5|arc6|arc7|arc8} +The @code{.option} directive must be followed by the desired core +version. Again @code{arc} is an alias for +@code{arc@value{ARC_CORE_DEFAULT}}. + +Note: the @code{.option} directive overrides the command line option +@code{-marc}; a warning is emitted when the version is not consistent +between the two - even for the implicit default core version +(arc@value{ARC_CORE_DEFAULT}). + +@cindex @code{short} directive, ARC +@item .short @var{expressions} +*TODO* + +@cindex @code{word} directive, ARC +@item .word @var{expressions} +*TODO* + +@end table + + +@node ARC Opcodes +@section Opcodes + +@cindex ARC opcodes +@cindex opcodes for ARC + +For information on the ARC instruction set, see @cite{ARC Programmers +Reference Manual}, ARC International (www.arc.com) diff --git a/binutils-2.25/gas/doc/c-arm.texi b/binutils-2.25/gas/doc/c-arm.texi new file mode 100644 index 00000000..37756a06 --- /dev/null +++ b/binutils-2.25/gas/doc/c-arm.texi @@ -0,0 +1,1188 @@ +@c Copyright 1996-2013 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 +* ARM Mapping Symbols:: Mapping Symbols +* ARM Unwinding Tutorial:: Unwinding +@end menu + +@node ARM Options +@section Options +@cindex ARM options (none) +@cindex options for ARM (none) + +@table @code + +@cindex @code{-mcpu=} command line option, ARM +@item -mcpu=@var{processor}[+@var{extension}@dots{}] +This option specifies the target processor. The assembler will issue an +error message if an attempt is made to assemble an instruction which +will not execute on the target processor. The following processor names are +recognized: +@code{arm1}, +@code{arm2}, +@code{arm250}, +@code{arm3}, +@code{arm6}, +@code{arm60}, +@code{arm600}, +@code{arm610}, +@code{arm620}, +@code{arm7}, +@code{arm7m}, +@code{arm7d}, +@code{arm7dm}, +@code{arm7di}, +@code{arm7dmi}, +@code{arm70}, +@code{arm700}, +@code{arm700i}, +@code{arm710}, +@code{arm710t}, +@code{arm720}, +@code{arm720t}, +@code{arm740t}, +@code{arm710c}, +@code{arm7100}, +@code{arm7500}, +@code{arm7500fe}, +@code{arm7t}, +@code{arm7tdmi}, +@code{arm7tdmi-s}, +@code{arm8}, +@code{arm810}, +@code{strongarm}, +@code{strongarm1}, +@code{strongarm110}, +@code{strongarm1100}, +@code{strongarm1110}, +@code{arm9}, +@code{arm920}, +@code{arm920t}, +@code{arm922t}, +@code{arm940t}, +@code{arm9tdmi}, +@code{fa526} (Faraday FA526 processor), +@code{fa626} (Faraday FA626 processor), +@code{arm9e}, +@code{arm926e}, +@code{arm926ej-s}, +@code{arm946e-r0}, +@code{arm946e}, +@code{arm946e-s}, +@code{arm966e-r0}, +@code{arm966e}, +@code{arm966e-s}, +@code{arm968e-s}, +@code{arm10t}, +@code{arm10tdmi}, +@code{arm10e}, +@code{arm1020}, +@code{arm1020t}, +@code{arm1020e}, +@code{arm1022e}, +@code{arm1026ej-s}, +@code{fa606te} (Faraday FA606TE processor), +@code{fa616te} (Faraday FA616TE processor), +@code{fa626te} (Faraday FA626TE processor), +@code{fmp626} (Faraday FMP626 processor), +@code{fa726te} (Faraday FA726TE processor), +@code{arm1136j-s}, +@code{arm1136jf-s}, +@code{arm1156t2-s}, +@code{arm1156t2f-s}, +@code{arm1176jz-s}, +@code{arm1176jzf-s}, +@code{mpcore}, +@code{mpcorenovfp}, +@code{cortex-a5}, +@code{cortex-a7}, +@code{cortex-a8}, +@code{cortex-a9}, +@code{cortex-a15}, +@code{cortex-r4}, +@code{cortex-r4f}, +@code{cortex-r5}, +@code{cortex-r7}, +@code{cortex-m4}, +@code{cortex-m3}, +@code{cortex-m1}, +@code{cortex-m0}, +@code{cortex-m0plus}, +@code{ep9312} (ARM920 with Cirrus Maverick coprocessor), +@code{i80200} (Intel XScale processor) +@code{iwmmxt} (Intel(r) XScale processor with Wireless MMX(tm) technology coprocessor) +and +@code{xscale}. +The special name @code{all} may be used to allow the +assembler to accept instructions valid for any ARM processor. + +In addition to the basic instruction set, the assembler can be told to +accept various extension mnemonics that extend the processor using the +co-processor instruction space. For example, @code{-mcpu=arm920+maverick} +is equivalent to specifying @code{-mcpu=ep9312}. + +Multiple extensions may be specified, separated by a @code{+}. The +extensions should be specified in ascending alphabetical order. + +Some extensions may be restricted to particular architectures; this is +documented in the list of extensions below. + +Extension mnemonics may also be removed from those the assembler accepts. +This is done be prepending @code{no} to the option that adds the extension. +Extensions that are removed should be listed after all extensions which have +been added, again in ascending alphabetical order. For example, +@code{-mcpu=ep9312+nomaverick} is equivalent to specifying @code{-mcpu=arm920}. + + +The following extensions are currently supported: +@code{crypto} (Cryptography Extensions for v8-A architecture, implies @code{fp+simd}), +@code{fp} (Floating Point Extensions for v8-A architecture), +@code{idiv} (Integer Divide Extensions for v7-A and v7-R architectures), +@code{iwmmxt}, +@code{iwmmxt2}, +@code{maverick}, +@code{mp} (Multiprocessing Extensions for v7-A and v7-R architectures), +@code{os} (Operating System for v6M architecture), +@code{sec} (Security Extensions for v6K and v7-A architectures), +@code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}), +@code{virt} (Virtualization Extensions for v7-A architecture, implies +@code{idiv}), +and +@code{xscale}. + +@cindex @code{-march=} command line option, ARM +@item -march=@var{architecture}[+@var{extension}@dots{}] +This option specifies the target architecture. The assembler will issue +an error message if an attempt is made to assemble an instruction which +will not execute on the target architecture. The following architecture +names are recognized: +@code{armv1}, +@code{armv2}, +@code{armv2a}, +@code{armv2s}, +@code{armv3}, +@code{armv3m}, +@code{armv4}, +@code{armv4xm}, +@code{armv4t}, +@code{armv4txm}, +@code{armv5}, +@code{armv5t}, +@code{armv5txm}, +@code{armv5te}, +@code{armv5texp}, +@code{armv6}, +@code{armv6j}, +@code{armv6k}, +@code{armv6z}, +@code{armv6zk}, +@code{armv6-m}, +@code{armv6s-m}, +@code{armv7}, +@code{armv7-a}, +@code{armv7-r}, +@code{armv7-m}, +@code{armv7e-m}, +@code{armv8-a}, +@code{iwmmxt} +and +@code{xscale}. +If both @code{-mcpu} and +@code{-march} are specified, the assembler will use +the setting for @code{-mcpu}. + +The architecture option can be extended with the same instruction set +extension options as the @code{-mcpu} option. + +@cindex @code{-mfpu=} command line option, ARM +@item -mfpu=@var{floating-point-format} + +This option specifies the floating point format to assemble for. The +assembler will issue an error message if an attempt is made to assemble +an instruction which will not execute on the target floating point unit. +The following format options are recognized: +@code{softfpa}, +@code{fpe}, +@code{fpe2}, +@code{fpe3}, +@code{fpa}, +@code{fpa10}, +@code{fpa11}, +@code{arm7500fe}, +@code{softvfp}, +@code{softvfp+vfp}, +@code{vfp}, +@code{vfp10}, +@code{vfp10-r0}, +@code{vfp9}, +@code{vfpxd}, +@code{vfpv2}, +@code{vfpv3}, +@code{vfpv3-fp16}, +@code{vfpv3-d16}, +@code{vfpv3-d16-fp16}, +@code{vfpv3xd}, +@code{vfpv3xd-d16}, +@code{vfpv4}, +@code{vfpv4-d16}, +@code{fpv4-sp-d16}, +@code{fp-armv8}, +@code{arm1020t}, +@code{arm1020e}, +@code{arm1136jf-s}, +@code{maverick}, +@code{neon}, +@code{neon-vfpv4}, +@code{neon-fp-armv8}, +and +@code{crypto-neon-fp-armv8}. + +In addition to determining which instructions are assembled, this option +also affects the way in which the @code{.double} assembler directive behaves +when assembling little-endian code. + +The default is dependent on the processor selected. For Architecture 5 or +later, the default is to assembler for VFP instructions; for earlier +architectures the default is to assemble for FPA instructions. + +@cindex @code{-mthumb} command line option, ARM +@item -mthumb +This option specifies that the assembler should start assembling Thumb +instructions; that is, it should behave as though the file starts with a +@code{.code 16} directive. + +@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{-mimplicit-it} command line option, ARM +@item -mimplicit-it=never +@itemx -mimplicit-it=always +@itemx -mimplicit-it=arm +@itemx -mimplicit-it=thumb +The @code{-mimplicit-it} option controls the behavior of the assembler when +conditional instructions are not enclosed in IT blocks. +There are four possible behaviors. +If @code{never} is specified, such constructs cause a warning in ARM +code and an error in Thumb-2 code. +If @code{always} is specified, such constructs are accepted in both +ARM and Thumb-2 code, where the IT instruction is added implicitly. +If @code{arm} is specified, such constructs are accepted in ARM code +and cause an error in Thumb-2 code. +If @code{thumb} is specified, such constructs cause a warning in ARM +code and are accepted in Thumb-2 code. If you omit this option, the +behavior is equivalent to @code{-mimplicit-it=arm}. + +@cindex @code{-mapcs-26} command line option, ARM +@cindex @code{-mapcs-32} command line option, ARM +@item -mapcs-26 +@itemx -mapcs-32 +These options specify that the output generated by the assembler should +be marked as supporting the indicated version of the Arm Procedure. +Calling Standard. + +@cindex @code{-matpcs} command line option, ARM +@item -matpcs +This option specifies that the output generated by the assembler should +be marked as supporting the Arm/Thumb Procedure Calling Standard. If +enabled this option will cause the assembler to create an empty +debugging section in the object file called .arm.atpcs. Debuggers can +use this to determine the ABI being used by. + +@cindex @code{-mapcs-float} command line option, ARM +@item -mapcs-float +This indicates the floating point variant of the APCS should be +used. In this variant floating point arguments are passed in FP +registers rather than integer registers. + +@cindex @code{-mapcs-reentrant} command line option, ARM +@item -mapcs-reentrant +This indicates that the reentrant variant of the APCS should be used. +This variant supports position independent code. + +@cindex @code{-mfloat-abi=} command line option, ARM +@item -mfloat-abi=@var{abi} +This option specifies that the output generated by the assembler should be +marked as using specified floating point ABI. +The following values are recognized: +@code{soft}, +@code{softfp} +and +@code{hard}. + +@cindex @code{-eabi=} command line option, ARM +@item -meabi=@var{ver} +This option specifies which EABI version the produced object files should +conform to. +The following values are recognized: +@code{gnu}, +@code{4} +and +@code{5}. + +@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 specifies that the output of the assembler should be marked +as position-independent code (PIC). + +@cindex @code{--fix-v4bx} command line option, ARM +@item --fix-v4bx +Allow @code{BX} instructions in ARMv4 code. This is intended for use with +the linker option of the same name. + +@cindex @code{-mwarn-deprecated} command line option, ARM +@item -mwarn-deprecated +@itemx -mno-warn-deprecated +Enable or disable warnings about using deprecated options or +features. The default is to warn. + +@end table + + +@node ARM Syntax +@section Syntax +@menu +* ARM-Instruction-Set:: Instruction Set +* ARM-Chars:: Special Characters +* ARM-Regs:: Register Names +* ARM-Relocations:: Relocations +* ARM-Neon-Alignment:: NEON Alignment Specifiers +@end menu + +@node ARM-Instruction-Set +@subsection Instruction Set Syntax +Two slightly different syntaxes are support for ARM and THUMB +instructions. The default, @code{divided}, uses the old style where +ARM and THUMB instructions had their own, separate syntaxes. The new, +@code{unified} syntax, which can be selected via the @code{.syntax} +directive, and has the following main features: + +@itemize @bullet +@item +Immediate operands do not require a @code{#} prefix. + +@item +The @code{IT} instruction may appear, and if it does it is validated +against subsequent conditional affixes. In ARM mode it does not +generate machine code, in THUMB mode it does. + +@item +For ARM instructions the conditional affixes always appear at the end +of the instruction. For THUMB instructions conditional affixes can be +used, but only inside the scope of an @code{IT} instruction. + +@item +All of the instructions new to the V6T2 architecture (and later) are +available. (Only a few such instructions can be written in the +@code{divided} syntax). + +@item +The @code{.N} and @code{.W} suffixes are recognized and honored. + +@item +All instructions set the flags if and only if they have an @code{s} +affix. +@end itemize + +@node ARM-Chars +@subsection Special Characters + +@cindex line comment character, ARM +@cindex ARM line comment character +The presence of a @samp{@@} anywhere on a line indicates the start of +a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, ARM +@cindex statement separator, ARM +@cindex ARM line separator +The @samp{;} character 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-Relocations +@subsection ARM relocation generation + +@cindex data relocations, ARM +@cindex ARM data relocations +Specific data relocations can be generated by putting the relocation name +in parentheses after the symbol name. For example: + +@smallexample + .word foo(TARGET1) +@end smallexample + +This will generate an @samp{R_ARM_TARGET1} relocation against the symbol +@var{foo}. +The following relocations are supported: +@code{GOT}, +@code{GOTOFF}, +@code{TARGET1}, +@code{TARGET2}, +@code{SBREL}, +@code{TLSGD}, +@code{TLSLDM}, +@code{TLSLDO}, +@code{TLSDESC}, +@code{TLSCALL}, +@code{GOTTPOFF}, +@code{GOT_PREL} +and +@code{TPOFF}. + +For compatibility with older toolchains the assembler also accepts +@code{(PLT)} after branch targets. On legacy targets this will +generate the deprecated @samp{R_ARM_PLT32} relocation. On EABI +targets it will encode either the @samp{R_ARM_CALL} or +@samp{R_ARM_JUMP24} relocation, as appropriate. + +@cindex MOVW and MOVT relocations, ARM +Relocations for @samp{MOVW} and @samp{MOVT} instructions can be generated +by prefixing the value with @samp{#:lower16:} and @samp{#:upper16} +respectively. For example to load the 32-bit address of foo into r0: + +@smallexample + MOVW r0, #:lower16:foo + MOVT r0, #:upper16:foo +@end smallexample + +@node ARM-Neon-Alignment +@subsection NEON Alignment Specifiers + +@cindex alignment for NEON instructions +Some NEON load/store instructions allow an optional address +alignment qualifier. +The ARM documentation specifies that this is indicated by +@samp{@@ @var{align}}. However GAS already interprets +the @samp{@@} character as a "line comment" start, +so @samp{: @var{align}} is used instead. For example: + +@smallexample + vld1.8 @{q0@}, [r0, :128] +@end smallexample + +@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 + +@c AAAAAAAAAAAAAAAAAAAAAAAAA + +@cindex @code{.2byte} directive, ARM +@cindex @code{.4byte} directive, ARM +@cindex @code{.8byte} directive, ARM +@item .2byte @var{expression} [, @var{expression}]* +@itemx .4byte @var{expression} [, @var{expression}]* +@itemx .8byte @var{expression} [, @var{expression}]* +These directives write 2, 4 or 8 byte values to the output section. + +@cindex @code{.align} directive, ARM +@item .align @var{expression} [, @var{expression}] +This is the generic @var{.align} directive. For the ARM however if the +first argument is zero (ie no alignment is needed) the assembler will +behave as if the argument had been 2 (ie pad to the next four byte +boundary). This is for compatibility with ARM's own assembler. + +@cindex @code{.arch} directive, ARM +@item .arch @var{name} +Select the target architecture. Valid values for @var{name} are the same as +for the @option{-march} commandline option. + +Specifying @code{.arch} clears any previously selected architecture +extensions. + +@cindex @code{.arch_extension} directive, ARM +@item .arch_extension @var{name} +Add or remove an architecture extension to the target architecture. Valid +values for @var{name} are the same as those accepted as architectural +extensions by the @option{-mcpu} commandline option. + +@code{.arch_extension} may be used multiple times to add or remove extensions +incrementally to the architecture being compiled for. + +@cindex @code{.arm} directive, ARM +@item .arm +This performs the same action as @var{.code 32}. + +@anchor{arm_pad} +@cindex @code{.pad} directive, ARM +@item .pad #@var{count} +Generate unwinder annotations for a stack adjustment of @var{count} bytes. +A positive value indicates the function prologue allocated stack space by +decrementing the stack pointer. + +@c BBBBBBBBBBBBBBBBBBBBBBBBBB + +@cindex @code{.bss} directive, ARM +@item .bss +This directive switches to the @code{.bss} section. + +@c CCCCCCCCCCCCCCCCCCCCCCCCCC + +@cindex @code{.cantunwind} directive, ARM +@item .cantunwind +Prevents unwinding through the current function. No personality routine +or exception table data is required or permitted. + +@cindex @code{.code} directive, ARM +@item .code @code{[16|32]} +This directive selects the instruction set being generated. The value 16 +selects Thumb, with the value 32 selecting ARM. + +@cindex @code{.cpu} directive, ARM +@item .cpu @var{name} +Select the target processor. Valid values for @var{name} are the same as +for the @option{-mcpu} commandline option. + +Specifying @code{.cpu} clears any previously selected architecture +extensions. + +@c DDDDDDDDDDDDDDDDDDDDDDDDDD + +@cindex @code{.dn} and @code{.qn} directives, ARM +@item @var{name} .dn @var{register name} [@var{.type}] [[@var{index}]] +@itemx @var{name} .qn @var{register name} [@var{.type}] [[@var{index}]] + +The @code{dn} and @code{qn} directives are used to create typed +and/or indexed register aliases for use in Advanced SIMD Extension +(Neon) instructions. The former should be used to create aliases +of double-precision registers, and the latter to create aliases of +quad-precision registers. + +If these directives are used to create typed aliases, those aliases can +be used in Neon instructions instead of writing types after the mnemonic +or after each operand. For example: + +@smallexample + x .dn d2.f32 + y .dn d3.f32 + z .dn d4.f32[1] + vmul x,y,z +@end smallexample + +This is equivalent to writing the following: + +@smallexample + vmul.f32 d2,d3,d4[1] +@end smallexample + +Aliases created using @code{dn} or @code{qn} can be destroyed using +@code{unreq}. + +@c EEEEEEEEEEEEEEEEEEEEEEEEEE + +@cindex @code{.eabi_attribute} directive, ARM +@item .eabi_attribute @var{tag}, @var{value} +Set the EABI object attribute @var{tag} to @var{value}. + +The @var{tag} is either an attribute number, or one of the following: +@code{Tag_CPU_raw_name}, @code{Tag_CPU_name}, @code{Tag_CPU_arch}, +@code{Tag_CPU_arch_profile}, @code{Tag_ARM_ISA_use}, +@code{Tag_THUMB_ISA_use}, @code{Tag_FP_arch}, @code{Tag_WMMX_arch}, +@code{Tag_Advanced_SIMD_arch}, @code{Tag_PCS_config}, +@code{Tag_ABI_PCS_R9_use}, @code{Tag_ABI_PCS_RW_data}, +@code{Tag_ABI_PCS_RO_data}, @code{Tag_ABI_PCS_GOT_use}, +@code{Tag_ABI_PCS_wchar_t}, @code{Tag_ABI_FP_rounding}, +@code{Tag_ABI_FP_denormal}, @code{Tag_ABI_FP_exceptions}, +@code{Tag_ABI_FP_user_exceptions}, @code{Tag_ABI_FP_number_model}, +@code{Tag_ABI_align_needed}, @code{Tag_ABI_align_preserved}, +@code{Tag_ABI_enum_size}, @code{Tag_ABI_HardFP_use}, +@code{Tag_ABI_VFP_args}, @code{Tag_ABI_WMMX_args}, +@code{Tag_ABI_optimization_goals}, @code{Tag_ABI_FP_optimization_goals}, +@code{Tag_compatibility}, @code{Tag_CPU_unaligned_access}, +@code{Tag_FP_HP_extension}, @code{Tag_ABI_FP_16bit_format}, +@code{Tag_MPextension_use}, @code{Tag_DIV_use}, +@code{Tag_nodefaults}, @code{Tag_also_compatible_with}, +@code{Tag_conformance}, @code{Tag_T2EE_use}, +@code{Tag_Virtualization_use} + +The @var{value} is either a @code{number}, @code{"string"}, or +@code{number, "string"} depending on the tag. + +Note - the following legacy values are also accepted by @var{tag}: +@code{Tag_VFP_arch}, @code{Tag_ABI_align8_needed}, +@code{Tag_ABI_align8_preserved}, @code{Tag_VFP_HP_extension}, + +@cindex @code{.even} directive, ARM +@item .even +This directive aligns to an even-numbered address. + +@cindex @code{.extend} directive, ARM +@cindex @code{.ldouble} directive, ARM +@item .extend @var{expression} [, @var{expression}]* +@itemx .ldouble @var{expression} [, @var{expression}]* +These directives write 12byte long double floating-point values to the +output section. These are not compatible with current ARM processors +or ABIs. + +@c FFFFFFFFFFFFFFFFFFFFFFFFFF + +@anchor{arm_fnend} +@cindex @code{.fnend} directive, ARM +@item .fnend +Marks the end of a function with an unwind table entry. The unwind index +table entry is created when this directive is processed. + +If no personality routine has been specified then standard personality +routine 0 or 1 will be used, depending on the number of unwind opcodes +required. + +@anchor{arm_fnstart} +@cindex @code{.fnstart} directive, ARM +@item .fnstart +Marks the start of a function with an unwind table entry. + +@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{.fpu} directive, ARM +@item .fpu @var{name} +Select the floating-point unit to assemble for. Valid values for @var{name} +are the same as for the @option{-mfpu} commandline option. + +@c GGGGGGGGGGGGGGGGGGGGGGGGGG +@c HHHHHHHHHHHHHHHHHHHHHHHHHH + +@cindex @code{.handlerdata} directive, ARM +@item .handlerdata +Marks the end of the current function, and the start of the exception table +entry for that function. Anything between this directive and the +@code{.fnend} directive will be added to the exception table entry. + +Must be preceded by a @code{.personality} or @code{.personalityindex} +directive. + +@c IIIIIIIIIIIIIIIIIIIIIIIIII + +@cindex @code{.inst} directive, ARM +@item .inst @var{opcode} [ , @dots{} ] +@itemx .inst.n @var{opcode} [ , @dots{} ] +@itemx .inst.w @var{opcode} [ , @dots{} ] +Generates the instruction corresponding to the numerical value @var{opcode}. +@code{.inst.n} and @code{.inst.w} allow the Thumb instruction size to be +specified explicitly, overriding the normal encoding rules. + +@c JJJJJJJJJJJJJJJJJJJJJJJJJJ +@c KKKKKKKKKKKKKKKKKKKKKKKKKK +@c LLLLLLLLLLLLLLLLLLLLLLLLLL + +@item .ldouble @var{expression} [, @var{expression}]* +See @code{.extend}. + +@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). +@code{GAS} maintains a separate literal pool for each section and each +sub-section. The @code{.ltorg} directive will only affect the literal +pool of the current section and sub-section. At the end of assembly +all remaining, un-empty literal pools will automatically be dumped. + +Note - older versions of @code{GAS} would dump the current literal +pool any time a section change occurred. This is no longer done, since +it prevents accurate control of the placement of literal pools. + +@c MMMMMMMMMMMMMMMMMMMMMMMMMM + +@cindex @code{.movsp} directive, ARM +@item .movsp @var{reg} [, #@var{offset}] +Tell the unwinder that @var{reg} contains an offset from the current +stack pointer. If @var{offset} is not specified then it is assumed to be +zero. + +@c NNNNNNNNNNNNNNNNNNNNNNNNNN +@c OOOOOOOOOOOOOOOOOOOOOOOOOO + +@cindex @code{.object_arch} directive, ARM +@item .object_arch @var{name} +Override the architecture recorded in the EABI object attribute section. +Valid values for @var{name} are the same as for the @code{.arch} directive. +Typically this is useful when code uses runtime detection of CPU features. + +@c PPPPPPPPPPPPPPPPPPPPPPPPPP + +@cindex @code{.packed} directive, ARM +@item .packed @var{expression} [, @var{expression}]* +This directive writes 12-byte packed floating-point values to the +output section. These are not compatible with current ARM processors +or ABIs. + +@cindex @code{.pad} directive, ARM +@item .pad #@var{count} +Generate unwinder annotations for a stack adjustment of @var{count} bytes. +A positive value indicates the function prologue allocated stack space by +decrementing the stack pointer. + +@cindex @code{.personality} directive, ARM +@item .personality @var{name} +Sets the personality routine for the current function to @var{name}. + +@cindex @code{.personalityindex} directive, ARM +@item .personalityindex @var{index} +Sets the personality routine for the current function to the EABI standard +routine number @var{index} + +@cindex @code{.pool} directive, ARM +@item .pool +This is a synonym for .ltorg. + +@c QQQQQQQQQQQQQQQQQQQQQQQQQQ +@c RRRRRRRRRRRRRRRRRRRRRRRRRR + +@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 + +@c SSSSSSSSSSSSSSSSSSSSSSSSSS + +@anchor{arm_save} +@cindex @code{.save} directive, ARM +@item .save @var{reglist} +Generate unwinder annotations to restore the registers in @var{reglist}. +The format of @var{reglist} is the same as the corresponding store-multiple +instruction. + +@smallexample +@exdent @emph{core registers} + .save @{r4, r5, r6, lr@} + stmfd sp!, @{r4, r5, r6, lr@} +@exdent @emph{FPA registers} + .save f4, 2 + sfmfd f4, 2, [sp]! +@exdent @emph{VFP registers} + .save @{d8, d9, d10@} + fstmdx sp!, @{d8, d9, d10@} +@exdent @emph{iWMMXt registers} + .save @{wr10, wr11@} + wstrd wr11, [sp, #-8]! + wstrd wr10, [sp, #-8]! +or + .save wr11 + wstrd wr11, [sp, #-8]! + .save wr10 + wstrd wr10, [sp, #-8]! +@end smallexample + +@anchor{arm_setfp} +@cindex @code{.setfp} directive, ARM +@item .setfp @var{fpreg}, @var{spreg} [, #@var{offset}] +Make all unwinder annotations relative to a frame pointer. Without this +the unwinder will use offsets from the stack pointer. + +The syntax of this directive is the same as the @code{add} or @code{mov} +instruction used to set the frame pointer. @var{spreg} must be either +@code{sp} or mentioned in a previous @code{.movsp} directive. + +@smallexample +.movsp ip +mov ip, sp +@dots{} +.setfp fp, ip, #4 +add fp, ip, #4 +@end smallexample + +@cindex @code{.secrel32} directive, ARM +@item .secrel32 @var{expression} [, @var{expression}]* +This directive emits relocations that evaluate to the section-relative +offset of each expression's symbol. This directive is only supported +for PE targets. + +@cindex @code{.syntax} directive, ARM +@item .syntax [@code{unified} | @code{divided}] +This directive sets the Instruction Set Syntax as described in the +@ref{ARM-Instruction-Set} section. + +@c TTTTTTTTTTTTTTTTTTTTTTTTTT + +@cindex @code{.thumb} directive, ARM +@item .thumb +This performs the same action as @var{.code 16}. + +@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. The presence of this +directive also implies @code{.thumb} + +This directive is not neccessary when generating EABI objects. On these +targets the encoding is implicit when generating Thumb code. + +@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{.tlsdescseq} directive, ARM +@item .tlsdescseq @var{tls-variable} +This directive is used to annotate parts of an inlined TLS descriptor +trampoline. Normally the trampoline is provided by the linker, and +this directive is not needed. + +@c UUUUUUUUUUUUUUUUUUUUUUUUUU + +@cindex @code{.unreq} directive, ARM +@item .unreq @var{alias-name} +This undefines a register alias which was previously defined using the +@code{req}, @code{dn} or @code{qn} directives. For example: + +@smallexample + foo .req r0 + .unreq foo +@end smallexample + +An error occurs if the name is undefined. Note - this pseudo op can +be used to delete builtin in register name aliases (eg 'r0'). This +should only be done if it is really necessary. + +@cindex @code{.unwind_raw} directive, ARM +@item .unwind_raw @var{offset}, @var{byte1}, @dots{} +Insert one of more arbitary unwind opcode bytes, which are known to adjust +the stack pointer by @var{offset} bytes. + +For example @code{.unwind_raw 4, 0xb1, 0x01} is equivalent to +@code{.save @{r0@}} + +@c VVVVVVVVVVVVVVVVVVVVVVVVVV + +@cindex @code{.vsave} directive, ARM +@item .vsave @var{vfp-reglist} +Generate unwinder annotations to restore the VFP registers in @var{vfp-reglist} +using FLDMD. Also works for VFPv3 registers +that are to be restored using VLDM. +The format of @var{vfp-reglist} is the same as the corresponding store-multiple +instruction. + +@smallexample +@exdent @emph{VFP registers} + .vsave @{d8, d9, d10@} + fstmdd sp!, @{d8, d9, d10@} +@exdent @emph{VFPv3 registers} + .vsave @{d15, d16, d17@} + vstm sp!, @{d15, d16, d17@} +@end smallexample + +Since FLDMX and FSTMX are now deprecated, this directive should be +used in favour of @code{.save} for saving VFP registers for ARMv6 and above. + +@c WWWWWWWWWWWWWWWWWWWWWWWWWW +@c XXXXXXXXXXXXXXXXXXXXXXXXXX +@c YYYYYYYYYYYYYYYYYYYYYYYYYY +@c ZZZZZZZZZZZZZZZZZZZZZZZZZZ + +@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 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. + +@node ARM Mapping Symbols +@section Mapping Symbols + +The ARM ELF specification requires that special symbols be inserted +into object files to mark certain features: + +@table @code + +@cindex @code{$a} +@item $a +At the start of a region of code containing ARM instructions. + +@cindex @code{$t} +@item $t +At the start of a region of code containing THUMB instructions. + +@cindex @code{$d} +@item $d +At the start of a region of data. + +@end table + +The assembler will automatically insert these symbols for you - there +is no need to code them yourself. Support for tagging symbols ($b, +$f, $p and $m) which is also mentioned in the current ARM ELF +specification is not implemented. This is because they have been +dropped from the new EABI and so tools cannot rely upon their +presence. + +@node ARM Unwinding Tutorial +@section Unwinding + +The ABI for the ARM Architecture specifies a standard format for +exception unwind information. This information is used when an +exception is thrown to determine where control should be transferred. +In particular, the unwind information is used to determine which +function called the function that threw the exception, and which +function called that one, and so forth. This information is also used +to restore the values of callee-saved registers in the function +catching the exception. + +If you are writing functions in assembly code, and those functions +call other functions that throw exceptions, you must use assembly +pseudo ops to ensure that appropriate exception unwind information is +generated. Otherwise, if one of the functions called by your assembly +code throws an exception, the run-time library will be unable to +unwind the stack through your assembly code and your program will not +behave correctly. + +To illustrate the use of these pseudo ops, we will examine the code +that G++ generates for the following C++ input: + +@verbatim +void callee (int *); + +int +caller () +{ + int i; + callee (&i); + return i; +} +@end verbatim + +This example does not show how to throw or catch an exception from +assembly code. That is a much more complex operation and should +always be done in a high-level language, such as C++, that directly +supports exceptions. + +The code generated by one particular version of G++ when compiling the +example above is: + +@verbatim +_Z6callerv: + .fnstart +.LFB2: + @ Function supports interworking. + @ args = 0, pretend = 0, frame = 8 + @ frame_needed = 1, uses_anonymous_args = 0 + stmfd sp!, {fp, lr} + .save {fp, lr} +.LCFI0: + .setfp fp, sp, #4 + add fp, sp, #4 +.LCFI1: + .pad #8 + sub sp, sp, #8 +.LCFI2: + sub r3, fp, #8 + mov r0, r3 + bl _Z6calleePi + ldr r3, [fp, #-8] + mov r0, r3 + sub sp, fp, #4 + ldmfd sp!, {fp, lr} + bx lr +.LFE2: + .fnend +@end verbatim + +Of course, the sequence of instructions varies based on the options +you pass to GCC and on the version of GCC in use. The exact +instructions are not important since we are focusing on the pseudo ops +that are used to generate unwind information. + +An important assumption made by the unwinder is that the stack frame +does not change during the body of the function. In particular, since +we assume that the assembly code does not itself throw an exception, +the only point where an exception can be thrown is from a call, such +as the @code{bl} instruction above. At each call site, the same saved +registers (including @code{lr}, which indicates the return address) +must be located in the same locations relative to the frame pointer. + +The @code{.fnstart} (@pxref{arm_fnstart,,.fnstart pseudo op}) pseudo +op appears immediately before the first instruction of the function +while the @code{.fnend} (@pxref{arm_fnend,,.fnend pseudo op}) pseudo +op appears immediately after the last instruction of the function. +These pseudo ops specify the range of the function. + +Only the order of the other pseudos ops (e.g., @code{.setfp} or +@code{.pad}) matters; their exact locations are irrelevant. In the +example above, the compiler emits the pseudo ops with particular +instructions. That makes it easier to understand the code, but it is +not required for correctness. It would work just as well to emit all +of the pseudo ops other than @code{.fnend} in the same order, but +immediately after @code{.fnstart}. + +The @code{.save} (@pxref{arm_save,,.save pseudo op}) pseudo op +indicates registers that have been saved to the stack so that they can +be restored before the function returns. The argument to the +@code{.save} pseudo op is a list of registers to save. If a register +is ``callee-saved'' (as specified by the ABI) and is modified by the +function you are writing, then your code must save the value before it +is modified and restore the original value before the function +returns. If an exception is thrown, the run-time library restores the +values of these registers from their locations on the stack before +returning control to the exception handler. (Of course, if an +exception is not thrown, the function that contains the @code{.save} +pseudo op restores these registers in the function epilogue, as is +done with the @code{ldmfd} instruction above.) + +You do not have to save callee-saved registers at the very beginning +of the function and you do not need to use the @code{.save} pseudo op +immediately following the point at which the registers are saved. +However, if you modify a callee-saved register, you must save it on +the stack before modifying it and before calling any functions which +might throw an exception. And, you must use the @code{.save} pseudo +op to indicate that you have done so. + +The @code{.pad} (@pxref{arm_pad,,.pad}) pseudo op indicates a +modification of the stack pointer that does not save any registers. +The argument is the number of bytes (in decimal) that are subtracted +from the stack pointer. (On ARM CPUs, the stack grows downwards, so +subtracting from the stack pointer increases the size of the stack.) + +The @code{.setfp} (@pxref{arm_setfp,,.setfp pseudo op}) pseudo op +indicates the register that contains the frame pointer. The first +argument is the register that is set, which is typically @code{fp}. +The second argument indicates the register from which the frame +pointer takes its value. The third argument, if present, is the value +(in decimal) added to the register specified by the second argument to +compute the value of the frame pointer. You should not modify the +frame pointer in the body of the function. + +If you do not use a frame pointer, then you should not use the +@code{.setfp} pseudo op. If you do not use a frame pointer, then you +should avoid modifying the stack pointer outside of the function +prologue. Otherwise, the run-time library will be unable to find +saved registers when it is unwinding the stack. + +The pseudo ops described above are sufficient for writing assembly +code that calls functions which may throw exceptions. If you need to +know more about the object-file format used to represent unwind +information, you may consult the @cite{Exception Handling ABI for the +ARM Architecture} available from @uref{http://infocenter.arm.com}. diff --git a/binutils-2.25/gas/doc/c-avr.texi b/binutils-2.25/gas/doc/c-avr.texi new file mode 100644 index 00000000..213e82c3 --- /dev/null +++ b/binutils-2.25/gas/doc/c-avr.texi @@ -0,0 +1,417 @@ +@c Copyright 2006-2013 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 AVR-Dependent +@chapter AVR Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter AVR Dependent Features +@end ifclear + +@cindex AVR support +@menu +* AVR Options:: Options +* AVR Syntax:: Syntax +* AVR Opcodes:: Opcodes +@end menu + +@node AVR Options +@section Options +@cindex AVR options (none) +@cindex options for AVR (none) + +@table @code + +@cindex @code{-mmcu=} command line option, AVR +@item -mmcu=@var{mcu} +Specify ATMEL AVR instruction set or MCU type. + +Instruction set avr1 is for the minimal AVR core, not supported by the C +compiler, only for assembler programs (MCU types: at90s1200, +attiny11, attiny12, attiny15, attiny28). + +Instruction set avr2 (default) is for the classic AVR core with up to +8K program memory space (MCU types: at90s2313, at90s2323, at90s2333, at90s2343, +attiny22, attiny26, at90s4414, at90s4433, at90s4434, at90s8515, at90c8534, +at90s8535). + +Instruction set avr25 is for the classic AVR core with up to 8K program memory +space plus the MOVW instruction (MCU types: attiny13, attiny13a, attiny2313, +attiny2313a, attiny24, attiny24a, attiny4313, attiny44, attiny44a, attiny84, +attiny84a, attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461, +attiny461a, attiny861, attiny861a, attiny87, attiny43u, attiny48, attiny88, +at86rf401). + +Instruction set avr3 is for the classic AVR core with up to 128K program +memory space (MCU types: at43usb355, at76c711). + +Instruction set avr31 is for the classic AVR core with exactly 128K program +memory space (MCU types: atmega103, at43usb320). + +Instruction set avr35 is for classic AVR core plus MOVW, CALL, and JMP +instructions (MCU types: attiny167, at90usb82, at90usb162, atmega8u2, +atmega16u2, atmega32u2). + +Instruction set avr4 is for the enhanced AVR core with up to 8K program +memory space (MCU types: atmega48, atmega48a, atmega48p, atmega8, atmega88, +atmega88a, atmega88p, atmega88pa, atmega8515, atmega8535, atmega8hva, at90pwm1, +at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81, ata6289). + +Instruction set avr5 is for the enhanced AVR core with up to 128K program +memory space (MCU types: atmega16, atmega16a, atmega161, atmega162, +atmega163, atmega164a, atmega164p, atmega165, atmega165a, atmega165p, +atmega168, atmega168a, atmega168p, atmega169, atmega169a, atmega169p, +atmega169pa, atmega32, atmega323, atmega324a, atmega324p, atmega325, +atmega325a, atmega325p, atmega325pa, atmega3250, atmega3250a, +atmega3250p, atmega3250pa, atmega328, atmega328p, atmega329, +atmega329a, atmega329p, atmega329pa, atmega3290, atmega3290a, +atmega3290p, atmega3290pa, atmega406, atmega64, atmega640, atmega644, +atmega644a, atmega644p, atmega644pa, atmega645, atmega645a, +atmega645p, atmega6450, atmega6450a, atmega6450p, atmega649, +atmega649a, atmega649p, atmega6490, atmega6490a, atmega6490p, +atmega64rfr2, atmega644rfr2, atmega16hva, atmega16hva2, atmega16hvb, +atmega16hvbrevb, atmega32hvb, atmega32hvbrevb, atmega64hve, at90can32, +at90can64, at90pwm161, at90pwm216, at90pwm316, atmega32c1, atmega64c1, +atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4, +atmega32u6, at90usb646, at90usb647, at94k, at90scr100). + +Instruction set avr51 is for the enhanced AVR core with exactly 128K program +memory space (MCU types: atmega128, atmega1280, atmega1281, atmega1284p, +atmega128rfa1, +atmega128rfr2, atmega1284rfr2, +at90can128, at90usb1286, at90usb1287, m3000). + +Instruction set avr6 is for the enhanced AVR core with a 3-byte PC (MCU types: +atmega2560, atmega2561, +atmega256rfr2, atmega2564rfr2). + +Instruction set avrxmega2 is for the XMEGA AVR core with 8K to 64K program +memory space and less than 64K data space (MCU types: atxmega16a4, atxmega16d4, +atxmega16x1, atxmega32a4, atxmega32d4, atxmega32x1). + +Instruction set avrxmega3 is for the XMEGA AVR core with 8K to 64K program +memory space and greater than 64K data space (MCU types: none). + +Instruction set avrxmega4 is for the XMEGA AVR core with up to 64K program +memory space and less than 64K data space (MCU types: atxmega64a3, atxmega64d3). + +Instruction set avrxmega5 is for the XMEGA AVR core with up to 64K program +memory space and greater than 64K data space (MCU types: atxmega64a1, +atxmega64a1u). + +Instruction set avrxmega6 is for the XMEGA AVR core with up to 256K program +memory space and less than 64K data space (MCU types: atxmega128a3, +atxmega128d3, atxmega192a3, atxmega128b1, atxmega192d3, atxmega256a3, +atxmega256a3b, atxmega256a3bu, atxmega192d3). + +Instruction set avrxmega7 is for the XMEGA AVR core with up to 256K program +memory space and greater than 64K data space (MCU types: atxmega128a1, +atxmega128a1u). + +@cindex @code{-mall-opcodes} command line option, AVR +@item -mall-opcodes +Accept all AVR opcodes, even if not supported by @code{-mmcu}. + +@cindex @code{-mno-skip-bug} command line option, AVR +@item -mno-skip-bug +This option disable warnings for skipping two-word instructions. + +@cindex @code{-mno-wrap} command line option, AVR +@item -mno-wrap +This option reject @code{rjmp/rcall} instructions with 8K wrap-around. + +@end table + + +@node AVR Syntax +@section Syntax +@menu +* AVR-Chars:: Special Characters +* AVR-Regs:: Register Names +* AVR-Modifiers:: Relocatable Expression Modifiers +@end menu + +@node AVR-Chars +@subsection Special Characters + +@cindex line comment character, AVR +@cindex AVR line comment character + +The presence of a @samp{;} anywhere on a line indicates the start of a +comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line, the whole line +is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, AVR +@cindex statement separator, AVR +@cindex AVR line separator + +The @samp{$} character can be used instead of a newline to separate +statements. + +@node AVR-Regs +@subsection Register Names + +@cindex AVR register names +@cindex register names, AVR + +The AVR has 32 x 8-bit general purpose working registers @samp{r0}, +@samp{r1}, ... @samp{r31}. +Six of the 32 registers can be used as three 16-bit indirect address +register pointers for Data Space addressing. One of the these address +pointers can also be used as an address pointer for look up tables in +Flash program memory. These added function registers are the 16-bit +@samp{X}, @samp{Y} and @samp{Z} - registers. + +@smallexample +X = @r{r26:r27} +Y = @r{r28:r29} +Z = @r{r30:r31} +@end smallexample + +@node AVR-Modifiers +@subsection Relocatable Expression Modifiers + +@cindex AVR modifiers +@cindex syntax, AVR + +The assembler supports several modifiers when using relocatable addresses +in AVR instruction operands. The general syntax is the following: + +@smallexample +modifier(relocatable-expression) +@end smallexample + +@table @code +@cindex symbol modifiers + +@item lo8 + +This modifier allows you to use bits 0 through 7 of +an address expression as 8 bit relocatable expression. + +@item hi8 + +This modifier allows you to use bits 7 through 15 of an address expression +as 8 bit relocatable expression. This is useful with, for example, the +AVR @samp{ldi} instruction and @samp{lo8} modifier. + +For example + +@smallexample +ldi r26, lo8(sym+10) +ldi r27, hi8(sym+10) +@end smallexample + +@item hh8 + +This modifier allows you to use bits 16 through 23 of +an address expression as 8 bit relocatable expression. +Also, can be useful for loading 32 bit constants. + +@item hlo8 + +Synonym of @samp{hh8}. + +@item hhi8 + +This modifier allows you to use bits 24 through 31 of +an expression as 8 bit expression. This is useful with, for example, the +AVR @samp{ldi} instruction and @samp{lo8}, @samp{hi8}, @samp{hlo8}, +@samp{hhi8}, modifier. + +For example + +@smallexample +ldi r26, lo8(285774925) +ldi r27, hi8(285774925) +ldi r28, hlo8(285774925) +ldi r29, hhi8(285774925) +; r29,r28,r27,r26 = 285774925 +@end smallexample + +@item pm_lo8 + +This modifier allows you to use bits 0 through 7 of +an address expression as 8 bit relocatable expression. +This modifier useful for addressing data or code from +Flash/Program memory. The using of @samp{pm_lo8} similar +to @samp{lo8}. + +@item pm_hi8 + +This modifier allows you to use bits 8 through 15 of +an address expression as 8 bit relocatable expression. +This modifier useful for addressing data or code from +Flash/Program memory. + +@item pm_hh8 + +This modifier allows you to use bits 15 through 23 of +an address expression as 8 bit relocatable expression. +This modifier useful for addressing data or code from +Flash/Program memory. + +@end table + +@node AVR Opcodes +@section Opcodes + +@cindex AVR opcode summary +@cindex opcode summary, AVR +@cindex mnemonics, AVR +@cindex instruction summary, AVR +For detailed information on the AVR machine instruction set, see +@url{www.atmel.com/products/AVR}. + +@code{@value{AS}} implements all the standard AVR opcodes. +The following table summarizes the AVR opcodes, and their arguments. + +@smallexample +@i{Legend:} + r @r{any register} + d @r{`ldi' register (r16-r31)} + v @r{`movw' even register (r0, r2, ..., r28, r30)} + a @r{`fmul' register (r16-r23)} + w @r{`adiw' register (r24,r26,r28,r30)} + e @r{pointer registers (X,Y,Z)} + b @r{base pointer register and displacement ([YZ]+disp)} + z @r{Z pointer register (for [e]lpm Rd,Z[+])} + M @r{immediate value from 0 to 255} + n @r{immediate value from 0 to 255 ( n = ~M ). Relocation impossible} + s @r{immediate value from 0 to 7} + P @r{Port address value from 0 to 63. (in, out)} + p @r{Port address value from 0 to 31. (cbi, sbi, sbic, sbis)} + K @r{immediate value from 0 to 63 (used in `adiw', `sbiw')} + i @r{immediate value} + l @r{signed pc relative offset from -64 to 63} + L @r{signed pc relative offset from -2048 to 2047} + h @r{absolute code address (call, jmp)} + S @r{immediate value from 0 to 7 (S = s << 4)} + ? @r{use this opcode entry if no parameters, else use next opcode entry} + +1001010010001000 clc +1001010011011000 clh +1001010011111000 cli +1001010010101000 cln +1001010011001000 cls +1001010011101000 clt +1001010010111000 clv +1001010010011000 clz +1001010000001000 sec +1001010001011000 seh +1001010001111000 sei +1001010000101000 sen +1001010001001000 ses +1001010001101000 set +1001010000111000 sev +1001010000011000 sez +100101001SSS1000 bclr S +100101000SSS1000 bset S +1001010100001001 icall +1001010000001001 ijmp +1001010111001000 lpm ? +1001000ddddd010+ lpm r,z +1001010111011000 elpm ? +1001000ddddd011+ elpm r,z +0000000000000000 nop +1001010100001000 ret +1001010100011000 reti +1001010110001000 sleep +1001010110011000 break +1001010110101000 wdr +1001010111101000 spm +000111rdddddrrrr adc r,r +000011rdddddrrrr add r,r +001000rdddddrrrr and r,r +000101rdddddrrrr cp r,r +000001rdddddrrrr cpc r,r +000100rdddddrrrr cpse r,r +001001rdddddrrrr eor r,r +001011rdddddrrrr mov r,r +100111rdddddrrrr mul r,r +001010rdddddrrrr or r,r +000010rdddddrrrr sbc r,r +000110rdddddrrrr sub r,r +001001rdddddrrrr clr r +000011rdddddrrrr lsl r +000111rdddddrrrr rol r +001000rdddddrrrr tst r +0111KKKKddddKKKK andi d,M +0111KKKKddddKKKK cbr d,n +1110KKKKddddKKKK ldi d,M +11101111dddd1111 ser d +0110KKKKddddKKKK ori d,M +0110KKKKddddKKKK sbr d,M +0011KKKKddddKKKK cpi d,M +0100KKKKddddKKKK sbci d,M +0101KKKKddddKKKK subi d,M +1111110rrrrr0sss sbrc r,s +1111111rrrrr0sss sbrs r,s +1111100ddddd0sss bld r,s +1111101ddddd0sss bst r,s +10110PPdddddPPPP in r,P +10111PPrrrrrPPPP out P,r +10010110KKddKKKK adiw w,K +10010111KKddKKKK sbiw w,K +10011000pppppsss cbi p,s +10011010pppppsss sbi p,s +10011001pppppsss sbic p,s +10011011pppppsss sbis p,s +111101lllllll000 brcc l +111100lllllll000 brcs l +111100lllllll001 breq l +111101lllllll100 brge l +111101lllllll101 brhc l +111100lllllll101 brhs l +111101lllllll111 brid l +111100lllllll111 brie l +111100lllllll000 brlo l +111100lllllll100 brlt l +111100lllllll010 brmi l +111101lllllll001 brne l +111101lllllll010 brpl l +111101lllllll000 brsh l +111101lllllll110 brtc l +111100lllllll110 brts l +111101lllllll011 brvc l +111100lllllll011 brvs l +111101lllllllsss brbc s,l +111100lllllllsss brbs s,l +1101LLLLLLLLLLLL rcall L +1100LLLLLLLLLLLL rjmp L +1001010hhhhh111h call h +1001010hhhhh110h jmp h +1001010rrrrr0101 asr r +1001010rrrrr0000 com r +1001010rrrrr1010 dec r +1001010rrrrr0011 inc r +1001010rrrrr0110 lsr r +1001010rrrrr0001 neg r +1001000rrrrr1111 pop r +1001001rrrrr1111 push r +1001010rrrrr0111 ror r +1001010rrrrr0010 swap r +00000001ddddrrrr movw v,v +00000010ddddrrrr muls d,d +000000110ddd0rrr mulsu a,a +000000110ddd1rrr fmul a,a +000000111ddd0rrr fmuls a,a +000000111ddd1rrr fmulsu a,a +1001001ddddd0000 sts i,r +1001000ddddd0000 lds r,i +10o0oo0dddddbooo ldd r,b +100!000dddddee-+ ld r,e +10o0oo1rrrrrbooo std b,r +100!001rrrrree-+ st e,r +1001010100011001 eicall +1001010000011001 eijmp +@end smallexample diff --git a/binutils-2.25/gas/doc/c-bfin.texi b/binutils-2.25/gas/doc/c-bfin.texi new file mode 100644 index 00000000..870e0dbc --- /dev/null +++ b/binutils-2.25/gas/doc/c-bfin.texi @@ -0,0 +1,274 @@ +@c Copyright 2005, 2006, 2009, 2010, 2011 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node Blackfin-Dependent +@chapter Blackfin Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter Blackfin Dependent Features +@end ifclear + +@cindex Blackfin support +@menu +* Blackfin Options:: Blackfin Options +* Blackfin Syntax:: Blackfin Syntax +* Blackfin Directives:: Blackfin Directives +@end menu + +@node Blackfin Options +@section Options +@cindex Blackfin options (none) +@cindex options for Blackfin (none) + +@c man begin OPTIONS +@table @gcctabopt + +@cindex @code{-mcpu=} command line option, Blackfin +@item -mcpu=@var{processor}@r{[}-@var{sirevision}@r{]} +This option specifies the target processor. The optional @var{sirevision} +is not used in assembler. It's here such that GCC can easily pass down its +@code{-mcpu=} option. The assembler will issue an +error message if an attempt is made to assemble an instruction which +will not execute on the target processor. The following processor names are +recognized: +@code{bf504}, +@code{bf506}, +@code{bf512}, +@code{bf514}, +@code{bf516}, +@code{bf518}, +@code{bf522}, +@code{bf523}, +@code{bf524}, +@code{bf525}, +@code{bf526}, +@code{bf527}, +@code{bf531}, +@code{bf532}, +@code{bf533}, +@code{bf534}, +@code{bf535} (not implemented yet), +@code{bf536}, +@code{bf537}, +@code{bf538}, +@code{bf539}, +@code{bf542}, +@code{bf542m}, +@code{bf544}, +@code{bf544m}, +@code{bf547}, +@code{bf547m}, +@code{bf548}, +@code{bf548m}, +@code{bf549}, +@code{bf549m}, +@code{bf561}, +and +@code{bf592}. + +@cindex @code{-mfdpic} command line option, Blackfin +@item -mfdpic +Assemble for the FDPIC ABI. + +@cindex @code{-mno-fdpic} command line option, Blackfin +@cindex @code{-mnopic} command line option, Blackfin +@item -mno-fdpic +@itemx -mnopic +Disable -mfdpic. +@end table +@c man end + +@node Blackfin Syntax +@section Syntax +@cindex Blackfin syntax +@cindex syntax, Blackfin + +@table @code +@item Special Characters +Assembler input is free format and may appear anywhere on the line. +One instruction may extend across multiple lines or more than one +instruction may appear on the same line. White space (space, tab, +comments or newline) may appear anywhere between tokens. A token must +not have embedded spaces. Tokens include numbers, register names, +keywords, user identifiers, and also some multicharacter special +symbols like "+=", "/*" or "||". + +Comments are introduced by the @samp{#} character and extend to the +end of the current line. If the @samp{#} appears as the first +character of a line, the whole line is treated as a comment, but in +this case the line can also be a logical line number directive +(@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@item Instruction Delimiting +A semicolon must terminate every instruction. Sometimes a complete +instruction will consist of more than one operation. There are two +cases where this occurs. The first is when two general operations +are combined. Normally a comma separates the different parts, as in + +@smallexample +a0= r3.h * r2.l, a1 = r3.l * r2.h ; +@end smallexample + +The second case occurs when a general instruction is combined with one +or two memory references for joint issue. The latter portions are +set off by a "||" token. + +@smallexample +a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++]; +@end smallexample + +Multiple instructions can occur on the same line. Each must be +terminated by a semicolon character. + +@item Register Names + +The assembler treats register names and instruction keywords in a case +insensitive manner. User identifiers are case sensitive. Thus, R3.l, +R3.L, r3.l and r3.L are all equivalent input to the assembler. + +Register names are reserved and may not be used as program identifiers. + +Some operations (such as "Move Register") require a register pair. +Register pairs are always data registers and are denoted using a colon, +eg., R3:2. The larger number must be written firsts. Note that the +hardware only supports odd-even pairs, eg., R7:6, R5:4, R3:2, and R1:0. + +Some instructions (such as --SP (Push Multiple)) require a group of +adjacent registers. Adjacent registers are denoted in the syntax by +the range enclosed in parentheses and separated by a colon, eg., (R7:3). +Again, the larger number appears first. + +Portions of a particular register may be individually specified. This +is written with a dot (".") following the register name and then a +letter denoting the desired portion. For 32-bit registers, ".H" +denotes the most significant ("High") portion. ".L" denotes the +least-significant portion. The subdivisions of the 40-bit registers +are described later. + +@item Accumulators +The set of 40-bit registers A1 and A0 that normally contain data that +is being manipulated. Each accumulator can be accessed in four ways. + +@table @code +@item one 40-bit register +The register will be referred to as A1 or A0. +@item one 32-bit register +The registers are designated as A1.W or A0.W. +@item two 16-bit registers +The registers are designated as A1.H, A1.L, A0.H or A0.L. +@item one 8-bit register +The registers are designated as A1.X or A0.X for the bits that +extend beyond bit 31. +@end table + +@item Data Registers +The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) that +normally contain data for manipulation. These are abbreviated as +D-register or Dreg. Data registers can be accessed as 32-bit registers +or as two independent 16-bit registers. The least significant 16 bits +of each register is called the "low" half and is designated with ".L" +following the register name. The most significant 16 bits are called +the "high" half and is designated with ".H" following the name. + +@smallexample + R7.L, r2.h, r4.L, R0.H +@end smallexample + +@item Pointer Registers +The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) that +normally contain byte addresses of data structures. These are +abbreviated as P-register or Preg. + +@smallexample +p2, p5, fp, sp +@end smallexample + +@item Stack Pointer SP +The stack pointer contains the 32-bit address of the last occupied +byte location in the stack. The stack grows by decrementing the +stack pointer. + +@item Frame Pointer FP +The frame pointer contains the 32-bit address of the previous frame +pointer in the stack. It is located at the top of a frame. + +@item Loop Top +LT0 and LT1. These registers contain the 32-bit address of the top of +a zero overhead loop. + +@item Loop Count +LC0 and LC1. These registers contain the 32-bit counter of the zero +overhead loop executions. + +@item Loop Bottom +LB0 and LB1. These registers contain the 32-bit address of the bottom +of a zero overhead loop. + +@item Index Registers +The set of 32-bit registers (I0, I1, I2, I3) that normally contain byte +addresses of data structures. Abbreviated I-register or Ireg. + +@item Modify Registers +The set of 32-bit registers (M0, M1, M2, M3) that normally contain +offset values that are added and subtracted to one of the index +registers. Abbreviated as Mreg. + +@item Length Registers +The set of 32-bit registers (L0, L1, L2, L3) that normally contain the +length in bytes of the circular buffer. Abbreviated as Lreg. Clear +the Lreg to disable circular addressing for the corresponding Ireg. + +@item Base Registers +The set of 32-bit registers (B0, B1, B2, B3) that normally contain the +base address in bytes of the circular buffer. Abbreviated as Breg. + +@item Floating Point +The Blackfin family has no hardware floating point but the .float +directive generates ieee floating point numbers for use with software +floating point libraries. + +@item Blackfin Opcodes +For detailed information on the Blackfin machine instruction set, see +the Blackfin(r) Processor Instruction Set Reference. + +@end table + +@node Blackfin Directives +@section Directives +@cindex Blackfin directives +@cindex directives, Blackfin + +The following directives are provided for compatibility with the VDSP assembler. + +@table @code +@item .byte2 +Initializes a two byte data object. + +This maps to the @code{.short} directive. +@item .byte4 +Initializes a four byte data object. + +This maps to the @code{.int} directive. +@item .db +Initializes a single byte data object. + +This directive is a synonym for @code{.byte}. +@item .dw +Initializes a two byte data object. + +This directive is a synonym for @code{.byte2}. +@item .dd +Initializes a four byte data object. + +This directive is a synonym for @code{.byte4}. +@item .var +Define and initialize a 32 bit data object. +@end table diff --git a/binutils-2.25/gas/doc/c-cr16.texi b/binutils-2.25/gas/doc/c-cr16.texi new file mode 100644 index 00000000..b996d732 --- /dev/null +++ b/binutils-2.25/gas/doc/c-cr16.texi @@ -0,0 +1,124 @@ +@c Copyright 2007-2013 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 CR16-Dependent +@chapter CR16 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter CR16 Dependent Features +@end ifclear + +@cindex CR16 support +@menu +* CR16 Operand Qualifiers:: CR16 Machine Operand Qualifiers +* CR16 Syntax:: Syntax for the CR16 +@end menu + +@node CR16 Operand Qualifiers +@section CR16 Operand Qualifiers +@cindex CR16 Operand Qualifiers + +The National Semiconductor CR16 target of @code{@value{AS}} has a few machine dependent operand qualifiers. + +Operand expression type qualifier is an optional field in the instruction operand, to determines the type of the expression field of an operand. The @code{@@} is required. CR16 architecture uses one of the following expression qualifiers: + +@table @code +@item s +- @code{Specifies expression operand type as small} +@item m +- @code{Specifies expression operand type as medium} +@item l +- @code{Specifies expression operand type as large} +@item c +- @code{Specifies the CR16 Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.} +@item got/GOT +- @code{Specifies the CR16 Assembler generates a relocation entry for the operand, offset from Global Offset Table. The linker uses this relocation entry to update the operand address at link time} +@item cgot/cGOT +- @code{Specifies the CompactRISC Assembler generates a relocation entry for the operand, where pc has implied bit, the expression is adjusted accordingly. The linker uses the relocation entry to update the operand address at link time.} +@end table + +CR16 target operand qualifiers and its size (in bits): + +@table @samp +@item Immediate Operand: s +4 bits. + +@item Immediate Operand: m +16 bits, for movb and movw instructions. + +@item Immediate Operand: m +20 bits, movd instructions. + +@item Immediate Operand: l +32 bits. + +@item Absolute Operand: s +Illegal specifier for this operand. + +@item Absolute Operand: m +20 bits, movd instructions. + +@item Displacement Operand: s +8 bits. + +@item Displacement Operand: m +16 bits. + +@item Displacement Operand: l +24 bits. + +@end table + +For example: +@example +1 @code{movw $_myfun@@c,r1} + + This loads the address of _myfun, shifted right by 1, into r1. + +2 @code{movd $_myfun@@c,(r2,r1)} + + This loads the address of _myfun, shifted right by 1, into register-pair r2-r1. + +3 @code{_myfun_ptr:} + @code{.long _myfun@@c} + @code{loadd _myfun_ptr, (r1,r0)} + @code{jal (r1,r0)} + + This .long directive, the address of _myfunc, shifted right by 1 at link time. + +4 @code{loadd _data1@@GOT(r12), (r1,r0)} + + This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1. + +5 @code{loadd _myfunc@@cGOT(r12), (r1,r0)} + + This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0. +@end example + +@node CR16 Syntax +@section CR16 Syntax +@menu +* CR16-Chars:: Special Characters +@end menu + +@node CR16-Chars +@subsection Special Characters + +@cindex line comment character, CR16 +@cindex CR16 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 the @samp{#} appears +as the first character of a line, the whole line is treated as a +comment, but in this case the line can also be a logical line number +directive (@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex line separator, CR16 +@cindex statement separator, CR16 +@cindex CR16 line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-cris.texi b/binutils-2.25/gas/doc/c-cris.texi new file mode 100644 index 00000000..ff27921b --- /dev/null +++ b/binutils-2.25/gas/doc/c-cris.texi @@ -0,0 +1,411 @@ +@c Copyright 2002, 2004 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c CRIS description contributed by Axis Communications. +@ifset GENERIC +@page +@node CRIS-Dependent +@chapter CRIS Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter CRIS Dependent Features +@end ifclear + +@cindex CRIS support +@menu +* CRIS-Opts:: Command-line Options +* CRIS-Expand:: Instruction expansion +* CRIS-Symbols:: Symbols +* CRIS-Syntax:: Syntax +@end menu + +@node CRIS-Opts +@section Command-line Options + +@cindex options, CRIS +@cindex CRIS options +The CRIS version of @code{@value{AS}} has these +machine-dependent command-line options. + +@cindex @option{--emulation=criself} command line option, CRIS +@cindex @option{--emulation=crisaout} command line option, CRIS +@cindex CRIS @option{--emulation=criself} command line option +@cindex CRIS @option{--emulation=crisaout} command line option + +The format of the generated object files can be either ELF or +a.out, specified by the command-line options +@option{--emulation=crisaout} and @option{--emulation=criself}. +The default is ELF (criself), unless @code{@value{AS}} has been +configured specifically for a.out by using the configuration +name @code{cris-axis-aout}. + +@cindex @option{--underscore} command line option, CRIS +@cindex @option{--no-underscore} command line option, CRIS +@cindex CRIS @option{--underscore} command line option +@cindex CRIS @option{--no-underscore} command line option +There are two different link-incompatible ELF object file +variants for CRIS, for use in environments where symbols are +expected to be prefixed by a leading @samp{_} character and for +environments without such a symbol prefix. The variant used for +GNU/Linux port has no symbol prefix. Which variant to produce +is specified by either of the options @option{--underscore} and +@option{--no-underscore}. The default is @option{--underscore}. +Since symbols in CRIS a.out objects are expected to have a +@samp{_} prefix, specifying @option{--no-underscore} when +generating a.out objects is an error. Besides the object format +difference, the effect of this option is to parse register names +differently (@pxref{crisnous}). The @option{--no-underscore} +option makes a @samp{$} register prefix mandatory. + +@cindex @option{--pic} command line option, CRIS +@cindex CRIS @option{--pic} command line option +@cindex Position-independent code, CRIS +@cindex CRIS position-independent code +The option @option{--pic} must be passed to @code{@value{AS}} in +order to recognize the symbol syntax used for ELF (SVR4 PIC) +position-independent-code (@pxref{crispic}). This will also +affect expansion of instructions. The expansion with +@option{--pic} will use PC-relative rather than (slightly +faster) absolute addresses in those expansions. This option is only +valid when generating ELF format object files. + +@cindex @option{--march=@var{architecture}} command line option, CRIS +@cindex CRIS @option{--march=@var{architecture}} command line option +@cindex Architecture variant option, CRIS +@cindex CRIS architecture variant option +The option @option{--march=@var{architecture}} +@anchor{march-option}specifies the recognized instruction set +and recognized register names. It also controls the +architecture type of the object file. Valid values for +@var{architecture} are: +@table @code + +@item v0_v10 +All instructions and register names for any architecture variant +in the set v0@dots{}v10 are recognized. This is the +default if the target is configured as cris-*. + +@item v10 +Only instructions and register names for CRIS v10 (as found in +ETRAX 100 LX) are recognized. This is the default if the target +is configured as crisv10-*. + +@item v32 +Only instructions and register names for CRIS v32 (code name +Guinness) are recognized. This is the default if the target is +configured as crisv32-*. This value implies +@option{--no-mul-bug-abort}. (A subsequent +@option{--mul-bug-abort} will turn it back on.) + +@item common_v10_v32 +Only instructions with register names and addressing modes with +opcodes common to the v10 and v32 are recognized. +@end table + +@cindex @option{-N} command line option, CRIS +@cindex CRIS @option{-N} command line option +When @option{-N} is specified, @code{@value{AS}} will emit a +warning when a 16-bit branch instruction is expanded into a +32-bit multiple-instruction construct (@pxref{CRIS-Expand}). + +@cindex @option{--no-mul-bug-abort} command line option, CRIS +@cindex @option{--mul-bug-abort} command line option, CRIS +@cindex CRIS @option{--no-mul-bug-abort} command line option +@cindex CRIS @option{--mul-bug-abort} command line option + +Some versions of the CRIS v10, for example in the Etrax 100 LX, +contain a bug that causes destabilizing memory accesses when a +multiply instruction is executed with certain values in the +first operand just before a cache-miss. When the +@option{--mul-bug-abort} command line option is active (the +default value), @code{@value{AS}} will refuse to assemble a file +containing a multiply instruction at a dangerous offset, one +that could be the last on a cache-line, or is in a section with +insufficient alignment. This placement checking does not catch +any case where the multiply instruction is dangerously placed +because it is located in a delay-slot. The +@option{--mul-bug-abort} command line option turns off the +checking. + +@node CRIS-Expand +@section Instruction expansion + +@cindex instruction expansion, CRIS +@cindex CRIS instruction expansion +@code{@value{AS}} will silently choose an instruction that fits +the operand size for @samp{[register+constant]} operands. For +example, the offset @code{127} in @code{move.d [r3+127],r4} fits +in an instruction using a signed-byte offset. Similarly, +@code{move.d [r2+32767],r1} will generate an instruction using a +16-bit offset. For symbolic expressions and constants that do +not fit in 16 bits including the sign bit, a 32-bit offset is +generated. + +For branches, @code{@value{AS}} will expand from a 16-bit branch +instruction into a sequence of instructions that can reach a +full 32-bit address. Since this does not correspond to a single +instruction, such expansions can optionally be warned about. +@xref{CRIS-Opts}. + +If the operand is found to fit the range, a @code{lapc} mnemonic +will translate to a @code{lapcq} instruction. Use @code{lapc.d} +to force the 32-bit @code{lapc} instruction. + +Similarly, the @code{addo} mnemonic will translate to the +shortest fitting instruction of @code{addoq}, @code{addo.w} and +@code{addo.d}, when used with a operand that is a constant known +at assembly time. + +@node CRIS-Symbols +@section Symbols +@cindex Symbols, built-in, CRIS +@cindex Symbols, CRIS, built-in +@cindex CRIS built-in symbols +@cindex Built-in symbols, CRIS + +Some symbols are defined by the assembler. They're intended to +be used in conditional assembly, for example: +@smallexample + .if ..asm.arch.cris.v32 + @var{code for CRIS v32} + .elseif ..asm.arch.cris.common_v10_v32 + @var{code common to CRIS v32 and CRIS v10} + .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10 + @var{code for v10} + .else + .error "Code needs to be added here." + .endif +@end smallexample + +These symbols are defined in the assembler, reflecting +command-line options, either when specified or the default. +They are always defined, to 0 or 1. +@table @code + +@item ..asm.arch.cris.any_v0_v10 +This symbol is non-zero when @option{--march=v0_v10} is specified +or the default. + +@item ..asm.arch.cris.common_v10_v32 +Set according to the option @option{--march=common_v10_v32}. + +@item ..asm.arch.cris.v10 +Reflects the option @option{--march=v10}. + +@item ..asm.arch.cris.v32 +Corresponds to @option{--march=v10}. +@end table + +Speaking of symbols, when a symbol is used in code, it can have +a suffix modifying its value for use in position-independent +code. @xref{CRIS-Pic}. + +@node CRIS-Syntax +@section Syntax + +There are different aspects of the CRIS assembly syntax. + +@menu +* CRIS-Chars:: Special Characters +* CRIS-Pic:: Position-Independent Code Symbols +* CRIS-Regs:: Register Names +* CRIS-Pseudos:: Assembler Directives +@end menu + +@node CRIS-Chars +@subsection Special Characters +@cindex line comment characters, CRIS +@cindex CRIS line comment characters + +The character @samp{#} is a line comment character. It starts a +comment if and only if it is placed at the beginning of a line. + +A @samp{;} character starts a comment anywhere on the line, +causing all characters up to the end of the line to be ignored. + +A @samp{@@} character is handled as a line separator equivalent +to a logical new-line character (except in a comment), so +separate instructions can be specified on a single line. + +@node CRIS-Pic +@subsection Symbols in position-independent code +@cindex Symbols in position-independent code, CRIS +@cindex CRIS symbols in position-independent code +@cindex Position-independent code, symbols in, CRIS + +When generating @anchor{crispic}position-independent code (SVR4 +PIC) for use in cris-axis-linux-gnu or crisv32-axis-linux-gnu +shared libraries, symbol +suffixes are used to specify what kind of run-time symbol lookup +will be used, expressed in the object as different +@emph{relocation types}. Usually, all absolute symbol values +must be located in a table, the @emph{global offset table}, +leaving the code position-independent; independent of values of +global symbols and independent of the address of the code. The +suffix modifies the value of the symbol, into for example an +index into the global offset table where the real symbol value +is entered, or a PC-relative value, or a value relative to the +start of the global offset table. All symbol suffixes start +with the character @samp{:} (omitted in the list below). Every +symbol use in code or a read-only section must therefore have a +PIC suffix to enable a useful shared library to be created. +Usually, these constructs must not be used with an additive +constant offset as is usually allowed, i.e.@: no 4 as in +@code{symbol + 4} is allowed. This restriction is checked at +link-time, not at assembly-time. + +@table @code +@item GOT + +Attaching this suffix to a symbol in an instruction causes the +symbol to be entered into the global offset table. The value is +a 32-bit index for that symbol into the global offset table. +The name of the corresponding relocation is +@samp{R_CRIS_32_GOT}. Example: @code{move.d +[$r0+extsym:GOT],$r9} + +@item GOT16 + +Same as for @samp{GOT}, but the value is a 16-bit index into the +global offset table. The corresponding relocation is +@samp{R_CRIS_16_GOT}. Example: @code{move.d +[$r0+asymbol:GOT16],$r10} + +@item PLT + +This suffix is used for function symbols. It causes a +@emph{procedure linkage table}, an array of code stubs, to be +created at the time the shared object is created or linked +against, together with a global offset table entry. The value +is a pc-relative offset to the corresponding stub code in the +procedure linkage table. This arrangement causes the run-time +symbol resolver to be called to look up and set the value of the +symbol the first time the function is called (at latest; +depending environment variables). It is only safe to leave the +symbol unresolved this way if all references are function calls. +The name of the relocation is @samp{R_CRIS_32_PLT_PCREL}. +Example: @code{add.d fnname:PLT,$pc} + +@item PLTG + +Like PLT, but the value is relative to the beginning of the +global offset table. The relocation is +@samp{R_CRIS_32_PLT_GOTREL}. Example: @code{move.d +fnname:PLTG,$r3} + +@item GOTPLT + +Similar to @samp{PLT}, but the value of the symbol is a 32-bit +index into the global offset table. This is somewhat of a mix +between the effect of the @samp{GOT} and the @samp{PLT} suffix; +the difference to @samp{GOT} is that there will be a procedure +linkage table entry created, and that the symbol is assumed to +be a function entry and will be resolved by the run-time +resolver as with @samp{PLT}. The relocation is +@samp{R_CRIS_32_GOTPLT}. Example: @code{jsr +[$r0+fnname:GOTPLT]} + +@item GOTPLT16 + +A variant of @samp{GOTPLT} giving a 16-bit value. Its +relocation name is @samp{R_CRIS_16_GOTPLT}. Example: @code{jsr +[$r0+fnname:GOTPLT16]} + +@item GOTOFF + +This suffix must only be attached to a local symbol, but may be +used in an expression adding an offset. The value is the +address of the symbol relative to the start of the global offset +table. The relocation name is @samp{R_CRIS_32_GOTREL}. +Example: @code{move.d [$r0+localsym:GOTOFF],r3} +@end table + +@node CRIS-Regs +@subsection Register names +@cindex register names, CRIS +@cindex CRIS register names + +A @samp{$} character may always prefix a general or special +register name in an instruction operand but is mandatory when +the option @option{--no-underscore} is specified or when the +@code{.syntax register_prefix} directive is in effect +(@pxref{crisnous}). Register names are case-insensitive. + +@node CRIS-Pseudos +@subsection Assembler Directives +@cindex assembler directives, CRIS +@cindex pseudo-ops, CRIS +@cindex CRIS assembler directives +@cindex CRIS pseudo-ops + +There are a few CRIS-specific pseudo-directives in addition to +the generic ones. @xref{Pseudo Ops}. Constants emitted by +pseudo-directives are in little-endian order for CRIS. There is +no support for floating-point-specific directives for CRIS. + +@table @code +@item .dword EXPRESSIONS +@cindex assembler directive .dword, CRIS +@cindex pseudo-op .dword, CRIS +@cindex CRIS assembler directive .dword +@cindex CRIS pseudo-op .dword + +The @code{.dword} directive is a synonym for @code{.int}, +expecting zero or more EXPRESSIONS, separated by commas. For +each expression, a 32-bit little-endian constant is emitted. + +@item .syntax ARGUMENT +@cindex assembler directive .syntax, CRIS +@cindex pseudo-op .syntax, CRIS +@cindex CRIS assembler directive .syntax +@cindex CRIS pseudo-op .syntax +The @code{.syntax} directive takes as @var{ARGUMENT} one of the +following case-sensitive choices. + +@table @code +@item no_register_prefix + +The @code{.syntax no_register_prefix} @anchor{crisnous}directive +makes a @samp{$} character prefix on all registers optional. It +overrides a previous setting, including the corresponding effect +of the option @option{--no-underscore}. If this directive is +used when ordinary symbols do not have a @samp{_} character +prefix, care must be taken to avoid ambiguities whether an +operand is a register or a symbol; using symbols with names the +same as general or special registers then invoke undefined +behavior. + +@item register_prefix + +This directive makes a @samp{$} character prefix on all +registers mandatory. It overrides a previous setting, including +the corresponding effect of the option @option{--underscore}. + +@item leading_underscore + +This is an assertion directive, emitting an error if the +@option{--no-underscore} option is in effect. + +@item no_leading_underscore + +This is the opposite of the @code{.syntax leading_underscore} +directive and emits an error if the option @option{--underscore} +is in effect. +@end table + +@item .arch ARGUMENT +@cindex assembler directive .arch, CRIS +@cindex pseudo-op .arch, CRIS +@cindex CRIS assembler directive .arch +@cindex CRIS pseudo-op .arch +This is an assertion directive, giving an error if the specified +@var{ARGUMENT} is not the same as the specified or default value +for the @option{--march=@var{architecture}} option +(@pxref{march-option}). + +@c If you compare with md_pseudo_table, you see that we don't +@c document ".file" and ".loc" here. This is because we're just +@c wrapping the corresponding ELF function and emitting an error for +@c a.out. +@end table diff --git a/binutils-2.25/gas/doc/c-d10v.texi b/binutils-2.25/gas/doc/c-d10v.texi new file mode 100644 index 00000000..d6c0bb62 --- /dev/null +++ b/binutils-2.25/gas/doc/c-d10v.texi @@ -0,0 +1,264 @@ +@c Copyright 1996, 2000, 2002 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. +@item --gstabs-packing +@itemx --no-gstabs-packing +@code{@value{AS}} packs adjacent short instructions into a single packed +instruction. @samp{--no-gstabs-packing} turns instruction packing off if +@samp{--gstabs} is specified as well; @samp{--gstabs-packing} (the +default) turns instruction packing on even when @samp{--gstabs} is +specified. +@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 +A semicolon (@samp{;}) can be used anywhere on a line to start a +comment that extends to the end of the line. + +If a @samp{#} appears as the first character of a line, the whole line +is treated as a comment, but in this case the line could also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@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 follows: +@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/binutils-2.25/gas/doc/c-d30v.texi b/binutils-2.25/gas/doc/c-d30v.texi new file mode 100644 index 00000000..aec7f68f --- /dev/null +++ b/binutils-2.25/gas/doc/c-d30v.texi @@ -0,0 +1,299 @@ +@c Copyright (C) 1997, 2011 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 +A semicolon (@samp{;}) can be used anywhere on a line to start a +comment that extends to the end of the line. + +If a @samp{#} appears as the first character of a line, the whole line +is treated as a comment, but in this case the line could also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@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/binutils-2.25/gas/doc/c-epiphany.texi b/binutils-2.25/gas/doc/c-epiphany.texi new file mode 100644 index 00000000..8e2b94dd --- /dev/null +++ b/binutils-2.25/gas/doc/c-epiphany.texi @@ -0,0 +1,67 @@ +@c Copyright 1999, 2002, 2011 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node Epiphany-Dependent +@chapter Epiphany Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter Epiphany Dependent Features +@end ifclear + +@cindex Epiphany support +@menu +* Epiphany Options:: Options +* Epiphany Syntax:: Epiphany Syntax +@end menu + +@node Epiphany Options +@section Options + +@cindex Epiphany options +@cindex options, Epiphany +@code{@value{AS}} has two additional command-line options for the Epiphany +architecture. + +@c man begin OPTIONS +@table @gcctabopt + +@cindex @code{-mepiphany} command line option, Epiphany +@item -mepiphany +Specifies that the both 32 and 16 bit instructions are allowed. This is the +default behavior. + +@cindex @code{-mepiphany16} command line option, Epiphany +@item -mepiphany16 +Restricts the permitted instructions to just the 16 bit set. +@end table +@c man end + +@node Epiphany Syntax +@section Epiphany Syntax +@menu +* Epiphany-Chars:: Special Characters +@end menu + +@node Epiphany-Chars +@subsection Special Characters + +@cindex line comment character, Epiphany +@cindex Epiphany 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 then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, Epiphany +@cindex statement separator, Epiphany +@cindex Epiphany line separator +The @samp{`} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-h8300.texi b/binutils-2.25/gas/doc/c-h8300.texi new file mode 100644 index 00000000..5245c666 --- /dev/null +++ b/binutils-2.25/gas/doc/c-h8300.texi @@ -0,0 +1,365 @@ +@c Copyright (C) 1991, 1992, 1993, 1994, 1995, 2003, 2008, 2011 +@c 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 +@cindex options, H8/300 +The Renesas H8/300 version of @code{@value{AS}} has one +machine-dependent option: + +@c man begin OPTIONS +@table @gcctabopt +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + +@end table +@c man end + +@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 the following machine-dependent directives 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. + +@item .h8300s +Recognize and emit additional instructions for the H8S variant, and +also make @code{.int} emit 32-bit numbers rather than the usual (16-bit) +for the H8/300 family. + +@item .h8300hn +Recognize and emit additional instructions for the H8/300H variant in +normal mode, and also make @code{.int} emit 32-bit numbers rather than +the usual (16-bit) for the H8/300 family. + +@item .h8300sn +Recognize and emit additional instructions for the H8S variant in +normal mode, 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}. For information specific to +the H8/300H, see @cite{H8/300H Series Programming Manual} (Renesas). + +@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/binutils-2.25/gas/doc/c-hppa.texi b/binutils-2.25/gas/doc/c-hppa.texi new file mode 100644 index 00000000..2bb1ae4f --- /dev/null +++ b/binutils-2.25/gas/doc/c-hppa.texi @@ -0,0 +1,301 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2004, 2011 +@c 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{comdat} +(subsection is comdat), @samp{common} (subsection is common block), +@samp{dup_comm} (subsection 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. + +@samp{comdat}, @samp{common} and @samp{dup_comm} can be used to implement +various flavors of one-only support when using the SOM linker. The SOM +linker only supports specific combinations of these flags. The details +are not documented. A brief description is provided here. + +@samp{comdat} provides a form of linkonce support. It is useful for +both code and data subspaces. A @samp{comdat} subspace has a key symbol +marked by the @samp{is_comdat} flag or @samp{ST_COMDAT}. Only the first +subspace for any given key is selected. The key symbol becomes universal +in shared links. This is similar to the behavior of @samp{secondary_def} +symbols. + +@samp{common} provides Fortran named common support. It is only useful +for data subspaces. Symbols with the flag @samp{is_common} retain this +flag in shared links. Referencing a @samp{is_common} symbol in a shared +library from outside the library doesn't work. Thus, @samp{is_common} +symbols must be output whenever they are needed. + +@samp{common} and @samp{dup_comm} together provide Cobol common support. +The subspaces in this case must all be the same length. Otherwise, this +support is similar to the Fortran common support. + +@samp{dup_comm} by itself provides a type of one-only support for code. +Only the first @samp{dup_comm} subspace is selected. There is a rather +complex algorithm to compare subspaces. Code symbols marked with the +@samp{dup_common} flag are hidden. This support was intended for "C++ +duplicate inlines". + +A simplified technique is used to mark the flags of symbols based on +the flags of their subspace. A symbol with the scope SS_UNIVERSAL and +type ST_ENTRY, ST_CODE or ST_DATA is marked with the corresponding +settings of @samp{comdat}, @samp{common} and @samp{dup_comm} from the +subspace, respectively. This avoids having to introduce additional +directives to mark these symbols. The HP assembler sets @samp{is_common} +from @samp{common}. However, it doesn't set the @samp{dup_common} from +@samp{dup_comm}. It doesn't have @samp{comdat} support. + +@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/binutils-2.25/gas/doc/c-i370.texi b/binutils-2.25/gas/doc/c-i370.texi new file mode 100644 index 00000000..a580a7cd --- /dev/null +++ b/binutils-2.25/gas/doc/c-i370.texi @@ -0,0 +1,200 @@ +@c Copyright 2000, 2002 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 ESA/390-Dependent +@chapter ESA/390 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter ESA/390 Dependent Features +@end ifclear + +@cindex i370 support +@cindex ESA/390 support + +@menu +* ESA/390 Notes:: Notes +* ESA/390 Options:: Options +* ESA/390 Syntax:: Syntax +* ESA/390 Floating Point:: Floating Point +* ESA/390 Directives:: ESA/390 Machine Directives +* ESA/390 Opcodes:: Opcodes +@end menu + +@node ESA/390 Notes +@section Notes +The ESA/390 @code{@value{AS}} port is currently intended to be a back-end +for the @sc{gnu} @sc{cc} compiler. It is not HLASM compatible, although +it does support a subset of some of the HLASM directives. The only +supported binary file format is ELF; none of the usual MVS/VM/OE/USS +object file formats, such as ESD or XSD, are supported. + +When used with the @sc{gnu} @sc{cc} compiler, the ESA/390 @code{@value{AS}} +will produce correct, fully relocated, functional binaries, and has been +used to compile and execute large projects. However, many aspects should +still be considered experimental; these include shared library support, +dynamically loadable objects, and any relocation other than the 31-bit +relocation. + +@node ESA/390 Options +@section Options +@code{@value{AS}} has no machine-dependent command-line options for the ESA/390. + +@cindex ESA/390 Syntax +@node ESA/390 Syntax +@section Syntax +The opcode/operand syntax follows the ESA/390 Principles of Operation +manual; assembler directives and general syntax are loosely based on the +prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives +are @emph{not} supported for the most part, with the exception of those +described herein. + +A leading dot in front of directives is optional, and the case of +directives is ignored; thus for example, .using and USING have the same +effect. + +A colon may immediately follow a label definition. This is +simply for compatibility with how most assembly language programmers +write code. + +@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. + +Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, fp6. +By using thesse symbolic names, @code{@value{AS}} can detect simple +syntax errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca +for r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base +for r3 and rpgt or r.pgt for r4. + +@samp{*} is the current location counter. Unlike @samp{.} it is always +relative to the last USING directive. Note that this means that +expressions cannot use multiplication, as any occurrence of @samp{*} +will be interpreted as a location counter. + +All labels are relative to the last USING. Thus, branches to a label +always imply the use of base+displacement. + +Many of the usual forms of address constants / address literals +are supported. Thus, +@example + .using *,r3 + L r15,=A(some_routine) + LM r6,r7,=V(some_longlong_extern) + A r1,=F'12' + AH r0,=H'42' + ME r6,=E'3.1416' + MD r6,=D'3.14159265358979' + O r6,=XL4'cacad0d0' + .ltorg +@end example +should all behave as expected: that is, an entry in the literal +pool will be created (or reused if it already exists), and the +instruction operands will be the displacement into the literal pool +using the current base register (as last declared with the @code{.using} +directive). + +@node ESA/390 Floating Point +@section Floating Point +@cindex floating point, ESA/390 (@sc{ieee}) +@cindex ESA/390 floating point (@sc{ieee}) +The assembler generates only @sc{ieee} floating-point numbers. The older +floating point formats are not supported. + + +@node ESA/390 Directives +@section ESA/390 Assembler Directives + +@code{@value{AS}} for the ESA/390 supports all of the standard ELF/SVR4 +assembler directives that are documented in the main part of this +documentation. Several additional directives are supported in order +to implement the ESA/390 addressing model. The most important of these +are @code{.using} and @code{.ltorg} + +@cindex ESA/390-only directives +These are the additional directives in @code{@value{AS}} for the ESA/390: + +@table @code +@item .dc +A small subset of the usual DC directive is supported. + +@item .drop @var{regno} +Stop using @var{regno} as the base register. The @var{regno} must +have been previously declared with a @code{.using} directive in the +same section as the current section. + +@item .ebcdic @var{string} +Emit the EBCDIC equivalent of the indicated string. The emitted string +will be null terminated. Note that the directives @code{.string} etc. emit +ascii strings by default. + +@item EQU +The standard HLASM-style EQU directive is not supported; however, the +standard @code{@value{AS}} directive .equ can be used to the same effect. + +@item .ltorg +Dump the literal pool accumulated so far; begin a new literal pool. +The literal pool will be written in the current section; in order to +generate correct assembly, a @code{.using} must have been previously +specified in the same section. + +@item .using @var{expr},@var{regno} +Use @var{regno} as the base register for all subsequent RX, RS, and SS form +instructions. The @var{expr} will be evaluated to obtain the base address; +usually, @var{expr} will merely be @samp{*}. + +This assembler allows two @code{.using} directives to be simultaneously +outstanding, one in the @code{.text} section, and one in another section +(typically, the @code{.data} section). This feature allows +dynamically loaded objects to be implemented in a relatively +straightforward way. A @code{.using} directive must always be specified +in the @code{.text} section; this will specify the base register that +will be used for branches in the @code{.text} section. A second +@code{.using} may be specified in another section; this will specify +the base register that is used for non-label address literals. +When a second @code{.using} is specified, then the subsequent +@code{.ltorg} must be put in the same section; otherwise an error will +result. + +Thus, for example, the following code uses @code{r3} to address branch +targets and @code{r4} to address the literal pool, which has been written +to the @code{.data} section. The is, the constants @code{=A(some_routine)}, +@code{=H'42'} and @code{=E'3.1416'} will all appear in the @code{.data} +section. + +@example +.data + .using LITPOOL,r4 +.text + BASR r3,0 + .using *,r3 + B START + .long LITPOOL +START: + L r4,4(,r3) + L r15,=A(some_routine) + LTR r15,r15 + BNE LABEL + AH r0,=H'42' +LABEL: + ME r6,=E'3.1416' +.data +LITPOOL: + .ltorg +@end example + + +Note that this dual-@code{.using} directive semantics extends +and is not compatible with HLASM semantics. Note that this assembler +directive does not support the full range of HLASM semantics. + +@end table + +@node ESA/390 Opcodes +@section Opcodes +For detailed information on the ESA/390 machine instruction set, see +@cite{ESA/390 Principles of Operation} (IBM Publication Number DZ9AR004). diff --git a/binutils-2.25/gas/doc/c-i386.texi b/binutils-2.25/gas/doc/c-i386.texi new file mode 100644 index 00000000..8a4a5f16 --- /dev/null +++ b/binutils-2.25/gas/doc/c-i386.texi @@ -0,0 +1,1128 @@ +@c Copyright 1991-2013 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@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 i80386 support +@cindex x86-64 support + +The i386 version @code{@value{AS}} supports both the original Intel 386 +architecture in both 16 and 32-bit mode as well as AMD x86-64 architecture +extending the Intel architecture to 64-bits. + +@menu +* i386-Options:: Options +* i386-Directives:: X86 specific directives +* i386-Syntax:: Syntactical considerations +* i386-Mnemonics:: Instruction Naming +* i386-Regs:: Register Naming +* i386-Prefixes:: Instruction Prefixes +* i386-Memory:: Memory References +* i386-Jumps:: Handling of Jump Instructions +* i386-Float:: Floating Point +* i386-SIMD:: Intel's MMX and AMD's 3DNow! SIMD Operations +* i386-LWP:: AMD's Lightweight Profiling Instructions +* i386-BMI:: Bit Manipulation Instruction +* i386-TBM:: AMD's Trailing Bit Manipulation Instructions +* i386-16bit:: Writing 16-bit Code +* i386-Arch:: Specifying an x86 CPU architecture +* i386-Bugs:: AT&T Syntax bugs +* i386-Notes:: Notes +@end menu + +@node i386-Options +@section Options + +@cindex options for i386 +@cindex options for x86-64 +@cindex i386 options +@cindex x86-64 options + +The i386 version of @code{@value{AS}} has a few machine +dependent options: + +@c man begin OPTIONS +@table @gcctabopt +@cindex @samp{--32} option, i386 +@cindex @samp{--32} option, x86-64 +@cindex @samp{--x32} option, i386 +@cindex @samp{--x32} option, x86-64 +@cindex @samp{--64} option, i386 +@cindex @samp{--64} option, x86-64 +@item --32 | --x32 | --64 +Select the word size, either 32 bits or 64 bits. @samp{--32} +implies Intel i386 architecture, while @samp{--x32} and @samp{--64} +imply AMD x86-64 architecture with 32-bit or 64-bit word-size +respectively. + +These options are only available with the ELF object file format, and +require that the necessary BFD support has been included (on a 32-bit +platform you have to add --enable-64-bit-bfd to configure enable 64-bit +usage and use x86-64 as target platform). + +@item -n +By default, x86 GAS replaces multiple nop instructions used for +alignment within code sections with multi-byte nop instructions such +as leal 0(%esi,1),%esi. This switch disables the optimization. + +@cindex @samp{--divide} option, i386 +@item --divide +On SVR4-derived platforms, the character @samp{/} is treated as a comment +character, which means that it cannot be used in expressions. The +@samp{--divide} option turns @samp{/} into a normal character. This does +not disable @samp{/} at the beginning of a line starting a comment, or +affect using @samp{#} for starting a comment. + +@cindex @samp{-march=} option, i386 +@cindex @samp{-march=} option, x86-64 +@item -march=@var{CPU}[+@var{EXTENSION}@dots{}] +This option specifies the target processor. The assembler will +issue an error message if an attempt is made to assemble an instruction +which will not execute on the target processor. The following +processor names are recognized: +@code{i8086}, +@code{i186}, +@code{i286}, +@code{i386}, +@code{i486}, +@code{i586}, +@code{i686}, +@code{pentium}, +@code{pentiumpro}, +@code{pentiumii}, +@code{pentiumiii}, +@code{pentium4}, +@code{prescott}, +@code{nocona}, +@code{core}, +@code{core2}, +@code{corei7}, +@code{l1om}, +@code{k1om}, +@code{k6}, +@code{k6_2}, +@code{athlon}, +@code{opteron}, +@code{k8}, +@code{amdfam10}, +@code{bdver1}, +@code{bdver2}, +@code{bdver3}, +@code{bdver4}, +@code{btver1}, +@code{btver2}, +@code{generic32} and +@code{generic64}. + +In addition to the basic instruction set, the assembler can be told to +accept various extension mnemonics. For example, +@code{-march=i686+sse4+vmx} extends @var{i686} with @var{sse4} and +@var{vmx}. The following extensions are currently supported: +@code{8087}, +@code{287}, +@code{387}, +@code{no87}, +@code{mmx}, +@code{nommx}, +@code{sse}, +@code{sse2}, +@code{sse3}, +@code{ssse3}, +@code{sse4.1}, +@code{sse4.2}, +@code{sse4}, +@code{nosse}, +@code{avx}, +@code{avx2}, +@code{adx}, +@code{rdseed}, +@code{prfchw}, +@code{smap}, +@code{mpx}, +@code{sha}, +@code{avx512f}, +@code{avx512cd}, +@code{avx512er}, +@code{avx512pf}, +@code{noavx}, +@code{vmx}, +@code{vmfunc}, +@code{smx}, +@code{xsave}, +@code{xsaveopt}, +@code{aes}, +@code{pclmul}, +@code{fsgsbase}, +@code{rdrnd}, +@code{f16c}, +@code{bmi2}, +@code{fma}, +@code{movbe}, +@code{ept}, +@code{lzcnt}, +@code{hle}, +@code{rtm}, +@code{invpcid}, +@code{clflush}, +@code{lwp}, +@code{fma4}, +@code{xop}, +@code{cx16}, +@code{syscall}, +@code{rdtscp}, +@code{3dnow}, +@code{3dnowa}, +@code{sse4a}, +@code{sse5}, +@code{svme}, +@code{abm} and +@code{padlock}. +Note that rather than extending a basic instruction set, the extension +mnemonics starting with @code{no} revoke the respective functionality. + +When the @code{.arch} directive is used with @option{-march}, the +@code{.arch} directive will take precedent. + +@cindex @samp{-mtune=} option, i386 +@cindex @samp{-mtune=} option, x86-64 +@item -mtune=@var{CPU} +This option specifies a processor to optimize for. When used in +conjunction with the @option{-march} option, only instructions +of the processor specified by the @option{-march} option will be +generated. + +Valid @var{CPU} values are identical to the processor list of +@option{-march=@var{CPU}}. + +@cindex @samp{-msse2avx} option, i386 +@cindex @samp{-msse2avx} option, x86-64 +@item -msse2avx +This option specifies that the assembler should encode SSE instructions +with VEX prefix. + +@cindex @samp{-msse-check=} option, i386 +@cindex @samp{-msse-check=} option, x86-64 +@item -msse-check=@var{none} +@itemx -msse-check=@var{warning} +@itemx -msse-check=@var{error} +These options control if the assembler should check SSE instructions. +@option{-msse-check=@var{none}} will make the assembler not to check SSE +instructions, which is the default. @option{-msse-check=@var{warning}} +will make the assembler issue a warning for any SSE instruction. +@option{-msse-check=@var{error}} will make the assembler issue an error +for any SSE instruction. + +@cindex @samp{-mavxscalar=} option, i386 +@cindex @samp{-mavxscalar=} option, x86-64 +@item -mavxscalar=@var{128} +@itemx -mavxscalar=@var{256} +These options control how the assembler should encode scalar AVX +instructions. @option{-mavxscalar=@var{128}} will encode scalar +AVX instructions with 128bit vector length, which is the default. +@option{-mavxscalar=@var{256}} will encode scalar AVX instructions +with 256bit vector length. + +@cindex @samp{-mevexlig=} option, i386 +@cindex @samp{-mevexlig=} option, x86-64 +@item -mevexlig=@var{128} +@itemx -mevexlig=@var{256} +@itemx -mevexlig=@var{512} +These options control how the assembler should encode length-ignored +(LIG) EVEX instructions. @option{-mevexlig=@var{128}} will encode LIG +EVEX instructions with 128bit vector length, which is the default. +@option{-mevexlig=@var{256}} and @option{-mevexlig=@var{512}} will +encode LIG EVEX instructions with 256bit and 512bit vector length, +respectively. + +@cindex @samp{-mevexwig=} option, i386 +@cindex @samp{-mevexwig=} option, x86-64 +@item -mevexwig=@var{0} +@itemx -mevexwig=@var{1} +These options control how the assembler should encode w-ignored (WIG) +EVEX instructions. @option{-mevexwig=@var{0}} will encode WIG +EVEX instructions with evex.w = 0, which is the default. +@option{-mevexwig=@var{1}} will encode WIG EVEX instructions with +evex.w = 1. + +@cindex @samp{-mmnemonic=} option, i386 +@cindex @samp{-mmnemonic=} option, x86-64 +@item -mmnemonic=@var{att} +@itemx -mmnemonic=@var{intel} +This option specifies instruction mnemonic for matching instructions. +The @code{.att_mnemonic} and @code{.intel_mnemonic} directives will +take precedent. + +@cindex @samp{-msyntax=} option, i386 +@cindex @samp{-msyntax=} option, x86-64 +@item -msyntax=@var{att} +@itemx -msyntax=@var{intel} +This option specifies instruction syntax when processing instructions. +The @code{.att_syntax} and @code{.intel_syntax} directives will +take precedent. + +@cindex @samp{-mnaked-reg} option, i386 +@cindex @samp{-mnaked-reg} option, x86-64 +@item -mnaked-reg +This opetion specifies that registers don't require a @samp{%} prefix. +The @code{.att_syntax} and @code{.intel_syntax} directives will take precedent. + +@cindex @samp{-madd-bnd-prefix} option, i386 +@cindex @samp{-madd-bnd-prefix} option, x86-64 +@item -madd-bnd-prefix +This option forces the assembler to add BND prefix to all branches, even +if such prefix was not explicitly specified in the source code. + +@end table +@c man end + +@node i386-Directives +@section x86 specific Directives + +@cindex machine directives, x86 +@cindex x86 machine directives +@table @code + +@cindex @code{lcomm} directive, COFF +@item .lcomm @var{symbol} , @var{length}[, @var{alignment}] +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. Since +@var{symbol} is not declared global, it is normally not visible to +@code{@value{LD}}. The optional third parameter, @var{alignment}, +specifies the desired alignment of the symbol in the bss section. + +This directive is only available for COFF based x86 targets. + +@c FIXME: Document other x86 specific directives ? Eg: .code16gcc, +@c .largecomm + +@end table + +@node i386-Syntax +@section i386 Syntactical Considerations +@menu +* i386-Variations:: AT&T Syntax versus Intel Syntax +* i386-Chars:: Special Characters +@end menu + +@node i386-Variations +@subsection AT&T Syntax versus Intel Syntax + +@cindex i386 intel_syntax pseudo op +@cindex intel_syntax pseudo op, i386 +@cindex i386 att_syntax pseudo op +@cindex att_syntax pseudo op, i386 +@cindex i386 syntax compatibility +@cindex syntax compatibility, i386 +@cindex x86-64 intel_syntax pseudo op +@cindex intel_syntax pseudo op, x86-64 +@cindex x86-64 att_syntax pseudo op +@cindex att_syntax pseudo op, x86-64 +@cindex x86-64 syntax compatibility +@cindex syntax compatibility, x86-64 + +@code{@value{AS}} now supports assembly using Intel assembler syntax. +@code{.intel_syntax} selects Intel mode, and @code{.att_syntax} switches +back to the usual AT&T mode for compatibility with the output of +@code{@value{GCC}}. Either of these directives may have an optional +argument, @code{prefix}, or @code{noprefix} specifying whether registers +require a @samp{%} prefix. AT&T System V/386 assembler syntax is quite +different from Intel syntax. We mention these differences because +almost all 80386 documents use Intel syntax. Notable differences +between the two syntaxes are: + +@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 + +@cindex immediate operands, x86-64 +@cindex x86-64 immediate operands +@cindex register operands, x86-64 +@cindex x86-64 register operands +@cindex jump/call operands, x86-64 +@cindex x86-64 jump/call operands +@cindex operand delimiters, x86-64 +@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 +@cindex x86-64 source, destination operands +@cindex source, destination operands; x86-64 +@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 @samp{bound}, @samp{invlpga}, and +instructions with 2 immediate operands, 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 +@cindex mnemonic suffixes, x86-64 +@cindex sizes operands, x86-64 +@cindex x86-64 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}, @samp{l} and @samp{q} specify byte (8-bit), word (16-bit), long +(32-bit) and quadruple word (64-bit) memory references. Intel syntax accomplishes +this by prefixing memory operands (@emph{not} the instruction mnemonics) with +@samp{byte ptr}, @samp{word ptr}, @samp{dword ptr} and @samp{qword ptr}. Thus, +Intel @samp{mov al, byte ptr @var{foo}} is @samp{movb @var{foo}, %al} in AT&T +syntax. + +In 64-bit code, @samp{movabs} can be used to encode the @samp{mov} +instruction with the 64-bit displacement or immediate operand. + +@cindex return instructions, i386 +@cindex i386 jump, call, return +@cindex return instructions, x86-64 +@cindex x86-64 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 +@cindex sections, x86-64 +@cindex x86-64 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-Chars +@subsection Special Characters + +@cindex line comment character, i386 +@cindex i386 line comment character +The presence of a @samp{#} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +If the @option{--divide} command line option has not been specified +then the @samp{/} character appearing anywhere on a line also +introduces a line comment. + +@cindex line separator, i386 +@cindex statement separator, i386 +@cindex i386 line separator +The @samp{;} character can be used to separate statements on the same +line. + +@node i386-Mnemonics +@section Instruction Naming + +@cindex i386 instruction naming +@cindex instruction naming, i386 +@cindex x86-64 instruction naming +@cindex instruction naming, x86-64 + +Instruction mnemonics are suffixed with one character modifiers which +specify the size of operands. The letters @samp{b}, @samp{w}, @samp{l} +and @samp{q} specify byte, word, long and quadruple word 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), +@samp{wl} (from word to long), @samp{bq} (from byte to quadruple word), +@samp{wq} (from word to quadruple word), and @samp{lq} (from long to +quadruple word). + +@cindex encoding options, i386 +@cindex encoding options, x86-64 + +Different encoding options can be specified via optional mnemonic +suffix. @samp{.s} suffix swaps 2 register operands in encoding when +moving from one register to another. @samp{.d8} or @samp{.d32} suffix +prefers 8bit or 32bit displacement in encoding. + +@cindex conversion instructions, i386 +@cindex i386 conversion instructions +@cindex conversion instructions, x86-64 +@cindex x86-64 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}, + +@item +@samp{cdqe} --- sign-extend dword in @samp{%eax} to quad in @samp{%rax} +(x86-64 only), + +@item +@samp{cqo} --- sign-extend quad in @samp{%rax} to octuple in +@samp{%rdx:%rax} (x86-64 only), +@end itemize + +@noindent +are called @samp{cbtw}, @samp{cwtl}, @samp{cwtd}, @samp{cltd}, @samp{cltq}, and +@samp{cqto} in AT&T naming. @code{@value{AS}} accepts either naming for these +instructions. + +@cindex jump instructions, i386 +@cindex call instructions, i386 +@cindex jump instructions, x86-64 +@cindex call instructions, x86-64 +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. + +@section AT&T Mnemonic versus Intel Mnemonic + +@cindex i386 mnemonic compatibility +@cindex mnemonic compatibility, i386 + +@code{@value{AS}} supports assembly using Intel mnemonic. +@code{.intel_mnemonic} selects Intel mnemonic with Intel syntax, and +@code{.att_mnemonic} switches back to the usual AT&T mnemonic with AT&T +syntax for compatibility with the output of @code{@value{GCC}}. +Several x87 instructions, @samp{fadd}, @samp{fdiv}, @samp{fdivp}, +@samp{fdivr}, @samp{fdivrp}, @samp{fmul}, @samp{fsub}, @samp{fsubp}, +@samp{fsubr} and @samp{fsubrp}, are implemented in AT&T System V/386 +assembler with different mnemonics from those in Intel IA32 specification. +@code{@value{GCC}} generates those instructions with AT&T mnemonic. + +@node i386-Regs +@section Register Naming + +@cindex i386 registers +@cindex registers, i386 +@cindex x86-64 registers +@cindex registers, x86-64 +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)}. +These registers are overloaded by 8 MMX registers @samp{%mm0}, +@samp{%mm1}, @samp{%mm2}, @samp{%mm3}, @samp{%mm4}, @samp{%mm5}, +@samp{%mm6} and @samp{%mm7}. + +@item +the 8 SSE registers registers @samp{%xmm0}, @samp{%xmm1}, @samp{%xmm2}, +@samp{%xmm3}, @samp{%xmm4}, @samp{%xmm5}, @samp{%xmm6} and @samp{%xmm7}. +@end itemize + +The AMD x86-64 architecture extends the register set by: + +@itemize @bullet +@item +enhancing the 8 32-bit registers to 64-bit: @samp{%rax} (the +accumulator), @samp{%rbx}, @samp{%rcx}, @samp{%rdx}, @samp{%rdi}, +@samp{%rsi}, @samp{%rbp} (the frame pointer), @samp{%rsp} (the stack +pointer) + +@item +the 8 extended registers @samp{%r8}--@samp{%r15}. + +@item +the 8 32-bit low ends of the extended registers: @samp{%r8d}--@samp{%r15d} + +@item +the 8 16-bit low ends of the extended registers: @samp{%r8w}--@samp{%r15w} + +@item +the 8 8-bit low ends of the extended registers: @samp{%r8b}--@samp{%r15b} + +@item +the 4 8-bit registers: @samp{%sil}, @samp{%dil}, @samp{%bpl}, @samp{%spl}. + +@item +the 8 debug registers: @samp{%db8}--@samp{%db15}. + +@item +the 8 SSE registers: @samp{%xmm8}--@samp{%xmm15}. +@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). +@cindex REX prefixes, i386 +@item +The @samp{rex} family of prefixes is used by x86-64 to encode +extensions to i386 instruction set. The @samp{rex} prefix has four +bits --- an operand size overwrite (@code{64}) used to change operand size +from 32-bit to 64-bit and X, Y and Z extensions bits used to extend the +register set. + +You may write the @samp{rex} prefixes directly. The @samp{rex64xyz} +instruction emits @samp{rex} prefix with all the bits set. By omitting +the @code{64}, @code{x}, @code{y} or @code{z} you may write other +prefixes as well. Normally, there is no need to write the prefixes +explicitly, since gas will automatically generate them based on the +instruction operands. +@end itemize + +@node i386-Memory +@section Memory References + +@cindex i386 memory references +@cindex memory references, i386 +@cindex x86-64 memory references +@cindex memory references, x86-64 +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, long, or quadruple) with an +instruction mnemonic suffix (@samp{b}, @samp{w}, @samp{l} or @samp{q}, +respectively). + +The x86-64 architecture adds an RIP (instruction pointer relative) +addressing. This addressing mode is specified by using @samp{rip} as a +base register. Only constant offsets are valid. For example: + +@table @asis +@item AT&T: @samp{1234(%rip)}, Intel: @samp{[rip + 1234]} +Points to the address 1234 bytes past the end of the current +instruction. + +@item AT&T: @samp{symbol(%rip)}, Intel: @samp{[rip + symbol]} +Points to the @code{symbol} in RIP relative way, this is shorter than +the default absolute addressing. +@end table + +Other addressing modes remain unchanged in x86-64 architecture, except +registers used are 64-bit instead of 32-bit. + +@node i386-Jumps +@section Handling of Jump Instructions + +@cindex jump optimization, i386 +@cindex i386 jump optimization +@cindex jump optimization, x86-64 +@cindex x86-64 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 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. (See also @pxref{i386-Arch}) + +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 +@cindex x86-64 floating point +@cindex floating point, x86-64 +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 +@cindex @code{float} directive, x86-64 +@cindex @code{single} directive, x86-64 +@cindex @code{double} directive, x86-64 +@cindex @code{tfloat} directive, x86-64 +@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 +@cindex @code{word} directive, x86-64 +@cindex @code{long} directive, x86-64 +@cindex @code{int} directive, x86-64 +@cindex @code{quad} directive, x86-64 +@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 +@cindex MMX, x86-64 +@cindex 3DNow!, x86-64 +@cindex SIMD, x86-64 + +@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-LWP +@section AMD's Lightweight Profiling Instructions + +@cindex LWP, i386 +@cindex LWP, x86-64 + +@code{@value{AS}} supports AMD's Lightweight Profiling (LWP) +instruction set, available on AMD's Family 15h (Orochi) processors. + +LWP enables applications to collect and manage performance data, and +react to performance events. The collection of performance data +requires no context switches. LWP runs in the context of a thread and +so several counters can be used independently across multiple threads. +LWP can be used in both 64-bit and legacy 32-bit modes. + +For detailed information on the LWP instruction set, see the +@cite{AMD Lightweight Profiling Specification} available at +@uref{http://developer.amd.com/cpu/LWP,Lightweight Profiling Specification}. + +@node i386-BMI +@section Bit Manipulation Instructions + +@cindex BMI, i386 +@cindex BMI, x86-64 + +@code{@value{AS}} supports the Bit Manipulation (BMI) instruction set. + +BMI instructions provide several instructions implementing individual +bit manipulation operations such as isolation, masking, setting, or +resetting. + +@c Need to add a specification citation here when available. + +@node i386-TBM +@section AMD's Trailing Bit Manipulation Instructions + +@cindex TBM, i386 +@cindex TBM, x86-64 + +@code{@value{AS}} supports AMD's Trailing Bit Manipulation (TBM) +instruction set, available on AMD's BDVER2 processors (Trinity and +Viperfish). + +TBM instructions provide instructions implementing individual bit +manipulation operations such as isolating, masking, setting, resetting, +complementing, and operations on trailing zeros and ones. + +@c Need to add a specification citation here when available. + +@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 +@cindex @code{code64} directive, i386 +@cindex @code{code64} directive, x86-64 +While @code{@value{AS}} normally writes only ``pure'' 32-bit i386 code +or 64-bit x86-64 code depending on the default configuration, +it also supports writing code to run in real mode or in 16-bit protected +mode code segments. To do this, put a @samp{.code16} or +@samp{.code16gcc} directive before the assembly language instructions to +be run in 16-bit mode. You can switch @code{@value{AS}} to writing +32-bit code with the @samp{.code32} directive or 64-bit code with the +@samp{.code64} 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} (i.e., without the operand size prefix), which +is correct since the processor default operand size is assumed to be 16 +bits in a 16-bit code section. + +@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-Arch +@section Specifying CPU Architecture + +@cindex arch directive, i386 +@cindex i386 arch directive +@cindex arch directive, x86-64 +@cindex x86-64 arch directive + +@code{@value{AS}} may be told to assemble for a particular CPU +(sub-)architecture with the @code{.arch @var{cpu_type}} directive. This +directive enables a warning when gas detects an instruction that is not +supported on the CPU specified. The choices for @var{cpu_type} are: + +@multitable @columnfractions .20 .20 .20 .20 +@item @samp{i8086} @tab @samp{i186} @tab @samp{i286} @tab @samp{i386} +@item @samp{i486} @tab @samp{i586} @tab @samp{i686} @tab @samp{pentium} +@item @samp{pentiumpro} @tab @samp{pentiumii} @tab @samp{pentiumiii} @tab @samp{pentium4} +@item @samp{prescott} @tab @samp{nocona} @tab @samp{core} @tab @samp{core2} +@item @samp{corei7} @tab @samp{l1om} @tab @samp{k1om} +@item @samp{k6} @tab @samp{k6_2} @tab @samp{athlon} @tab @samp{k8} +@item @samp{amdfam10} @tab @samp{bdver1} @tab @samp{bdver2} @tab @samp{bdver3} +@item @samp{bdver4} @tab @samp{btver1} @tab @samp{btver2} +@item @samp{generic32} @tab @samp{generic64} +@item @samp{.mmx} @tab @samp{.sse} @tab @samp{.sse2} @tab @samp{.sse3} +@item @samp{.ssse3} @tab @samp{.sse4.1} @tab @samp{.sse4.2} @tab @samp{.sse4} +@item @samp{.avx} @tab @samp{.vmx} @tab @samp{.smx} @tab @samp{.ept} +@item @samp{.clflush} @tab @samp{.movbe} @tab @samp{.xsave} @tab @samp{.xsaveopt} +@item @samp{.aes} @tab @samp{.pclmul} @tab @samp{.fma} @tab @samp{.fsgsbase} +@item @samp{.rdrnd} @tab @samp{.f16c} @tab @samp{.avx2} @tab @samp{.bmi2} +@item @samp{.lzcnt} @tab @samp{.invpcid} @tab @samp{.vmfunc} @tab @samp{.hle} +@item @samp{.rtm} @tab @samp{.adx} @tab @samp{.rdseed} @tab @samp{.prfchw} +@item @samp{.smap} @tab @samp{.mpx} +@item @samp{.smap} @tab @samp{.sha} +@item @samp{.3dnow} @tab @samp{.3dnowa} @tab @samp{.sse4a} @tab @samp{.sse5} +@item @samp{.syscall} @tab @samp{.rdtscp} @tab @samp{.svme} @tab @samp{.abm} +@item @samp{.lwp} @tab @samp{.fma4} @tab @samp{.xop} @tab @samp{.cx16} +@item @samp{.padlock} +@item @samp{.smap} @tab @samp{.avx512f} @tab @samp{.avx512cd} @tab @samp{.avx512er} +@item @samp{.avx512pf} @tab @samp{.3dnow} @tab @samp{.3dnowa} @tab @samp{.sse4a} +@item @samp{.sse5} @tab @samp{.syscall} @tab @samp{.rdtscp} @tab @samp{.svme} +@item @samp{.abm} @tab @samp{.lwp} @tab @samp{.fma4} @tab @samp{.xop} +@item @samp{.cx16} @tab @samp{.padlock} +@end multitable + +Apart from the warning, there are only two other effects on +@code{@value{AS}} operation; Firstly, if you specify a CPU other than +@samp{i486}, then shift by one instructions such as @samp{sarl $1, %eax} +will automatically use a two byte opcode sequence. The larger three +byte opcode sequence is used on the 486 (and when no architecture is +specified) because it executes faster on the 486. Note that you can +explicitly request the two byte opcode by writing @samp{sarl %eax}. +Secondly, if you specify @samp{i8086}, @samp{i186}, or @samp{i286}, +@emph{and} @samp{.code16} or @samp{.code16gcc} then byte offset +conditional jumps will be promoted when necessary to a two instruction +sequence consisting of a conditional jump of the opposite sense around +an unconditional jump to the target. + +Following the CPU architecture (but not a sub-architecture, which are those +starting with a dot), you may specify @samp{jumps} or @samp{nojumps} to +control automatic promotion of conditional jumps. @samp{jumps} is the +default, and enables jump promotion; All external jumps will be of the long +variety, and file-local jumps will be promoted as necessary. +(@pxref{i386-Jumps}) @samp{nojumps} leaves external conditional jumps as +byte offset jumps, and warns about file-local conditional jumps that +@code{@value{AS}} promotes. +Unconditional jumps are treated as for @samp{jumps}. + +For example + +@smallexample + .arch i8086,nojumps +@end smallexample + +@node i386-Notes +@section Notes + +@cindex i386 @code{mul}, @code{imul} instructions +@cindex @code{mul} instruction, i386 +@cindex @code{imul} instruction, i386 +@cindex @code{mul} instruction, x86-64 +@cindex @code{imul} instruction, x86-64 +There is some trickery concerning the @samp{mul} and @samp{imul} +instructions that deserves mention. The 16-, 32-, 64- and 128-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/binutils-2.25/gas/doc/c-i860.texi b/binutils-2.25/gas/doc/c-i860.texi new file mode 100644 index 00000000..a66024e3 --- /dev/null +++ b/binutils-2.25/gas/doc/c-i860.texi @@ -0,0 +1,197 @@ +@c Copyright 2000, 2003, 2011 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 i860-Dependent +@chapter Intel i860 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter Intel i860 Dependent Features +@end ifclear + +@ignore +@c FIXME: This is basically a stub for i860. There is tons more information +that I will add later (jle@cygnus.com). +@end ignore + +@cindex i860 support +@menu +* Notes-i860:: i860 Notes +* Options-i860:: i860 Command-line Options +* Directives-i860:: i860 Machine Directives +* Opcodes for i860:: i860 Opcodes +* Syntax of i860:: i860 Syntax +@end menu + +@node Notes-i860 +@section i860 Notes +This is a fairly complete i860 assembler which is compatible with the +UNIX System V/860 Release 4 assembler. However, it does not currently +support SVR4 PIC (i.e., @code{@@GOT, @@GOTOFF, @@PLT}). + +Like the SVR4/860 assembler, the output object format is ELF32. Currently, +this is the only supported object format. If there is sufficient interest, +other formats such as COFF may be implemented. + +Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter +being the default. One difference is that AT&T syntax requires the '%' +prefix on register names while Intel syntax does not. Another difference +is in the specification of relocatable expressions. The Intel syntax +is @code{ha%expression} whereas the SVR4 syntax is @code{[expression]@@ha} +(and similarly for the "l" and "h" selectors). +@node Options-i860 +@section i860 Command-line Options +@subsection SVR4 compatibility options +@table @code +@item -V +Print assembler version. +@item -Qy +Ignored. +@item -Qn +Ignored. +@end table +@subsection Other options +@table @code +@item -EL +Select little endian output (this is the default). +@item -EB +Select big endian output. Note that the i860 always reads instructions +as little endian data, so this option only effects data and not +instructions. +@item -mwarn-expand +Emit a warning message if any pseudo-instruction expansions occurred. +For example, a @code{or} instruction with an immediate larger than 16-bits +will be expanded into two instructions. This is a very undesirable feature to +rely on, so this flag can help detect any code where it happens. One +use of it, for instance, has been to find and eliminate any place +where @code{gcc} may emit these pseudo-instructions. +@item -mxp +Enable support for the i860XP instructions and control registers. By default, +this option is disabled so that only the base instruction set (i.e., i860XR) +is supported. +@item -mintel-syntax +The i860 assembler defaults to AT&T/SVR4 syntax. This option enables the +Intel syntax. +@end table + +@node Directives-i860 +@section i860 Machine Directives + +@cindex machine directives, i860 +@cindex i860 machine directives + +@table @code +@cindex @code{dual} directive, i860 +@item .dual +Enter dual instruction mode. While this directive is supported, the +preferred way to use dual instruction mode is to explicitly code +the dual bit with the @code{d.} prefix. +@end table + +@table @code +@cindex @code{enddual} directive, i860 +@item .enddual +Exit dual instruction mode. While this directive is supported, the +preferred way to use dual instruction mode is to explicitly code +the dual bit with the @code{d.} prefix. +@end table + +@table @code +@cindex @code{atmp} directive, i860 +@item .atmp +Change the temporary register used when expanding pseudo operations. The +default register is @code{r31}. +@end table + +The @code{.dual}, @code{.enddual}, and @code{.atmp} directives are available only in the Intel syntax mode. + +Both syntaxes allow for the standard @code{.align} directive. However, +the Intel syntax additionally allows keywords for the alignment +parameter: "@code{.align type}", where `type' is one of @code{.short}, @code{.long}, +@code{.quad}, @code{.single}, @code{.double} representing alignments of 2, 4, +16, 4, and 8, respectively. + +@node Opcodes for i860 +@section i860 Opcodes + +@cindex opcodes, i860 +@cindex i860 opcodes +All of the Intel i860XR and i860XP machine instructions are supported. Please see +either @emph{i860 Microprocessor Programmer's Reference Manual} or @emph{i860 Microprocessor Architecture} for more information. +@subsection Other instruction support (pseudo-instructions) +For compatibility with some other i860 assemblers, a number of +pseudo-instructions are supported. While these are supported, they are +a very undesirable feature that should be avoided -- in particular, when +they result in an expansion to multiple actual i860 instructions. Below +are the pseudo-instructions that result in expansions. +@itemize @bullet +@item Load large immediate into general register: + +The pseudo-instruction @code{mov imm,%rn} (where the immediate does +not fit within a signed 16-bit field) will be expanded into: +@smallexample +orh large_imm@@h,%r0,%rn +or large_imm@@l,%rn,%rn +@end smallexample +@item Load/store with relocatable address expression: + +For example, the pseudo-instruction @code{ld.b addr_exp(%rx),%rn} +will be expanded into: +@smallexample +orh addr_exp@@ha,%rx,%r31 +ld.l addr_exp@@l(%r31),%rn +@end smallexample + +The analogous expansions apply to @code{ld.x, st.x, fld.x, pfld.x, fst.x}, and @code{pst.x} as well. +@item Signed large immediate with add/subtract: + +If any of the arithmetic operations @code{adds, addu, subs, subu} are used +with an immediate larger than 16-bits (signed), then they will be expanded. +For instance, the pseudo-instruction @code{adds large_imm,%rx,%rn} expands to: +@smallexample +orh large_imm@@h,%r0,%r31 +or large_imm@@l,%r31,%r31 +adds %r31,%rx,%rn +@end smallexample +@item Unsigned large immediate with logical operations: + +Logical operations (@code{or, andnot, or, xor}) also result in expansions. +The pseudo-instruction @code{or large_imm,%rx,%rn} results in: +@smallexample +orh large_imm@@h,%rx,%r31 +or large_imm@@l,%r31,%rn +@end smallexample + +Similarly for the others, except for @code{and} which expands to: +@smallexample +andnot (-1 - large_imm)@@h,%rx,%r31 +andnot (-1 - large_imm)@@l,%r31,%rn +@end smallexample +@end itemize + +@node Syntax of i860 +@section i860 Syntax +@menu +* i860-Chars:: Special Characters +@end menu + +@node i860-Chars +@subsection Special Characters + +@cindex line comment character, i860 +@cindex i860 line comment character +The presence of a @samp{#} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, i860 +@cindex statement separator, i860 +@cindex i860 line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-i960.texi b/binutils-2.25/gas/doc/c-i960.texi new file mode 100644 index 00000000..e8a2e61f --- /dev/null +++ b/binutils-2.25/gas/doc/c-i960.texi @@ -0,0 +1,325 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 2002, 2006, 2011 +@c 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 +* Syntax of i960:: i960 Syntax +@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 difference 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 labeled @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 + +@node Syntax of i960 +@section Syntax for the i960 +@menu +* i960-Chars:: Special Characters +@end menu + +@node i960-Chars +@subsection Special Characters + +@cindex line comment character, i960 +@cindex i960 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, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a +preprocessor control command (@pxref{Preprocessing}). + +@cindex line separator, i960 +@cindex statement separator, i960 +@cindex i960 line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-ia64.texi b/binutils-2.25/gas/doc/c-ia64.texi new file mode 100644 index 00000000..eb928363 --- /dev/null +++ b/binutils-2.25/gas/doc/c-ia64.texi @@ -0,0 +1,202 @@ +@c Copyright 2002, 2003, 2005 +@c Free Software Foundation, Inc. +@c Contributed by David Mosberger-Tang <davidm@hpl.hp.com> +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@ifset GENERIC +@page +@node IA-64-Dependent +@chapter IA-64 Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter IA-64 Dependent Features +@end ifclear + +@cindex IA-64 support +@menu +* IA-64 Options:: Options +* IA-64 Syntax:: Syntax +@c * IA-64 Floating Point:: Floating Point // to be written +@c * IA-64 Directives:: IA-64 Machine Directives // to be written +* IA-64 Opcodes:: Opcodes +@end menu + +@node IA-64 Options +@section Options +@cindex IA-64 options +@cindex options for IA-64 + +@table @option +@cindex @code{-mconstant-gp} command line option, IA-64 + +@item -mconstant-gp +This option instructs the assembler to mark the resulting object file +as using the ``constant GP'' model. With this model, it is assumed +that the entire program uses a single global pointer (GP) value. Note +that this option does not in any fashion affect the machine code +emitted by the assembler. All it does is turn on the EF_IA_64_CONS_GP +flag in the ELF file header. + +@item -mauto-pic +This option instructs the assembler to mark the resulting object file +as using the ``constant GP without function descriptor'' data model. +This model is like the ``constant GP'' model, except that it +additionally does away with function descriptors. What this means is +that the address of a function refers directly to the function's code +entry-point. Normally, such an address would refer to a function +descriptor, which contains both the code entry-point and the GP-value +needed by the function. Note that this option does not in any fashion +affect the machine code emitted by the assembler. All it does is +turn on the EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. + +@item -milp32 +@itemx -milp64 +@itemx -mlp64 +@itemx -mp64 +These options select the data model. The assembler defaults to @code{-mlp64} +(LP64 data model). + +@item -mle +@itemx -mbe +These options select the byte order. The @code{-mle} option selects little-endian +byte order (default) and @code{-mbe} selects big-endian byte order. Note that +IA-64 machine code always uses little-endian byte order. + +@item -mtune=itanium1 +@itemx -mtune=itanium2 +Tune for a particular IA-64 CPU, @var{itanium1} or @var{itanium2}. The +default is @var{itanium2}. + +@item -munwind-check=warning +@itemx -munwind-check=error +These options control what the assembler will do when performing +consistency checks on unwind directives. @code{-munwind-check=warning} +will make the assembler issue a warning when an unwind directive check +fails. This is the default. @code{-munwind-check=error} will make the +assembler issue an error when an unwind directive check fails. + +@item -mhint.b=ok +@itemx -mhint.b=warning +@itemx -mhint.b=error +These options control what the assembler will do when the @samp{hint.b} +instruction is used. @code{-mhint.b=ok} will make the assembler accept +@samp{hint.b}. @code{-mint.b=warning} will make the assembler issue a +warning when @samp{hint.b} is used. @code{-mhint.b=error} will make +the assembler treat @samp{hint.b} as an error, which is the default. + +@item -x +@itemx -xexplicit +These options turn on dependency violation checking. + +@item -xauto +This option instructs the assembler to automatically insert stop bits where necessary +to remove dependency violations. This is the default mode. + +@item -xnone +This option turns off dependency violation checking. + +@item -xdebug +This turns on debug output intended to help tracking down bugs in the dependency +violation checker. + +@item -xdebugn +This is a shortcut for -xnone -xdebug. + +@item -xdebugx +This is a shortcut for -xexplicit -xdebug. + +@end table + +@cindex IA-64 Syntax +@node IA-64 Syntax +@section Syntax +The assembler syntax closely follows the IA-64 Assembly Language +Reference Guide. + +@menu +* IA-64-Chars:: Special Characters +* IA-64-Regs:: Register Names +* IA-64-Bits:: Bit Names +* IA-64-Relocs:: Relocations +@end menu + +@node IA-64-Chars +@subsection Special Characters + +@cindex line comment character, IA-64 +@cindex IA-64 line comment character +@samp{//} is the line comment token. + +@cindex line separator, IA-64 +@cindex statement separator, IA-64 +@cindex IA-64 line separator +@samp{;} can be used instead of a newline to separate statements. + +@node IA-64-Regs +@subsection Register Names +@cindex IA-64 registers +@cindex register names, IA-64 + +The 128 integer registers are referred to as @samp{r@var{n}}. +The 128 floating-point registers are referred to as @samp{f@var{n}}. +The 128 application registers are referred to as @samp{ar@var{n}}. +The 128 control registers are referred to as @samp{cr@var{n}}. +The 64 one-bit predicate registers are referred to as @samp{p@var{n}}. +The 8 branch registers are referred to as @samp{b@var{n}}. +In addition, the assembler defines a number of aliases: +@samp{gp} (@samp{r1}), @samp{sp} (@samp{r12}), @samp{rp} (@samp{b0}), +@samp{ret0} (@samp{r8}), @samp{ret1} (@samp{r9}), @samp{ret2} (@samp{r10}), +@samp{ret3} (@samp{r9}), @samp{farg@var{n}} (@samp{f8+@var{n}}), and +@samp{fret@var{n}} (@samp{f8+@var{n}}). + +For convenience, the assembler also defines aliases for all named application +and control registers. For example, @samp{ar.bsp} refers to the register +backing store pointer (@samp{ar17}). Similarly, @samp{cr.eoi} refers to +the end-of-interrupt register (@samp{cr67}). + +@node IA-64-Bits +@subsection IA-64 Processor-Status-Register (PSR) Bit Names +@cindex IA-64 Processor-status-Register bit names +@cindex PSR bits +@cindex bit names, IA-64 + +The assembler defines bit masks for each of the bits in the IA-64 +processor status register. For example, @samp{psr.ic} corresponds to +a value of 0x2000. These masks are primarily intended for use with +the @samp{ssm}/@samp{sum} and @samp{rsm}/@samp{rum} +instructions, but they can be used anywhere else where an integer +constant is expected. + +@node IA-64-Relocs +@subsection Relocations +@cindex IA-64 relocations + +In addition to the standard IA-64 relocations, the following relocations are +implemented by @code{@value{AS}}: + +@table @code +@item @@slotcount(@var{V}) +Convert the address offset @var{V} into a slot count. This pseudo +function is available only on VMS. The expression @var{V} must be +known at assembly time: it can't reference undefined symbols or symbols in +different sections. +@end table + +@node IA-64 Opcodes +@section Opcodes +For detailed information on the IA-64 machine instruction set, see the +@c Attempt to work around a very overfull hbox. +@iftex +IA-64 Assembly Language Reference Guide available at +@smallfonts +@example +http://developer.intel.com/design/itanium/arch_spec.htm +@end example +@textfonts +@end iftex +@ifnottex +@uref{http://developer.intel.com/design/itanium/arch_spec.htm,IA-64 Architecture Handbook}. +@end ifnottex diff --git a/binutils-2.25/gas/doc/c-ip2k.texi b/binutils-2.25/gas/doc/c-ip2k.texi new file mode 100644 index 00000000..c33042b4 --- /dev/null +++ b/binutils-2.25/gas/doc/c-ip2k.texi @@ -0,0 +1,71 @@ +@c Copyright 2002, 2011 +@c 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 IP2K-Dependent +@chapter IP2K Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter IP2K Dependent Features +@end ifclear + +@cindex IP2K support +@menu +* IP2K-Opts:: IP2K Options +* IP2K-Syntax:: IP2K Syntax +@end menu + +@node IP2K-Opts +@section IP2K Options + +@cindex options, IP2K +@cindex IP2K options + +The Ubicom IP2K version of @code{@value{AS}} has a few machine +dependent options: + +@table @code +@item -mip2022ext +@cindex @samp{-mip2022ext} option, IP2022 +@cindex architecture options, IP2022 +@cindex IP2K architecture options +@code{@value{AS}} can assemble the extended IP2022 instructions, but +it will only do so if this is specifically allowed via this command +line option. + +@item -mip2022 +@cindex @samp{-mip2022} option, IP2K +@cindex architecture options, IP2K +@cindex IP2K architecture options +This option restores the assembler's default behaviour of not +permitting the extended IP2022 instructions to be assembled. + +@end table + +@node IP2K-Syntax +@section IP2K Syntax +@menu +* IP2K-Chars:: Special Characters +@end menu + +@node IP2K-Chars +@subsection Special Characters + +@cindex line comment character, IP2K +@cindex IP2K 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, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, IP2K +@cindex statement separator, IP2K +@cindex IP2K line separator +The IP2K assembler does not currently support a line separator +character. diff --git a/binutils-2.25/gas/doc/c-lm32.texi b/binutils-2.25/gas/doc/c-lm32.texi new file mode 100644 index 00000000..d09fd27d --- /dev/null +++ b/binutils-2.25/gas/doc/c-lm32.texi @@ -0,0 +1,233 @@ +@c Copyright 2008, 2011 +@c 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 LM32-Dependent +@chapter LM32 Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter LM£" Dependent Features +@end ifclear + +@cindex LM32 support +@menu +* LM32 Options:: Options +* LM32 Syntax:: Syntax +* LM32 Opcodes:: Opcodes +@end menu + +@node LM32 Options +@section Options +@cindex LM32 options (none) +@cindex options for LM32 (none) + +@table @code + +@cindex @code{-mmultiply-enabled} command line option, LM32 +@item -mmultiply-enabled +Enable multiply instructions. + +@cindex @code{-mdivide-enabled} command line option, LM32 +@item -mdivide-enabled +Enable divide instructions. + +@cindex @code{-mbarrel-shift-enabled} command line option, LM32 +@item -mbarrel-shift-enabled +Enable barrel-shift instructions. + +@cindex @code{-msign-extend-enabled} command line option, LM32 +@item -msign-extend-enabled +Enable sign extend instructions. + +@cindex @code{-muser-enabled} command line option, LM32 +@item -muser-enabled +Enable user defined instructions. + +@cindex @code{-micache-enabled} command line option, LM32 +@item -micache-enabled +Enable instruction cache related CSRs. + +@cindex @code{-mdcache-enabled} command line option, LM32 +@item -mdcache-enabled +Enable data cache related CSRs. + +@cindex @code{-mbreak-enabled} command line option, LM32 +@item -mbreak-enabled +Enable break instructions. + +@cindex @code{-mall-enabled} command line option, LM32 +@item -mall-enabled +Enable all instructions and CSRs. + +@end table + + +@node LM32 Syntax +@section Syntax +@menu +* LM32-Regs:: Register Names +* LM32-Modifiers:: Relocatable Expression Modifiers +* LM32-Chars:: Special Characters +@end menu + +@node LM32-Regs +@subsection Register Names + +@cindex LM32 register names +@cindex register names, LM32 + +LM32 has 32 x 32-bit general purpose registers @samp{r0}, +@samp{r1}, ... @samp{r31}. + +The following aliases are defined: @samp{gp} - @samp{r26}, +@samp{fp} - @samp{r27}, @samp{sp} - @samp{r28}, +@samp{ra} - @samp{r29}, @samp{ea} - @samp{r30}, +@samp{ba} - @samp{r31}. + +LM32 has the following Control and Status Registers (CSRs). + +@table @code +@item IE +Interrupt enable. +@item IM +Interrupt mask. +@item IP +Interrupt pending. +@item ICC +Instruction cache control. +@item DCC +Data cache control. +@item CC +Cycle counter. +@item CFG +Configuration. +@item EBA +Exception base address. +@item DC +Debug control. +@item DEBA +Debug exception base address. +@item JTX +JTAG transmit. +@item JRX +JTAG receive. +@item BP0 +Breakpoint 0. +@item BP1 +Breakpoint 1. +@item BP2 +Breakpoint 2. +@item BP3 +Breakpoint 3. +@item WP0 +Watchpoint 0. +@item WP1 +Watchpoint 1. +@item WP2 +Watchpoint 2. +@item WP3 +Watchpoint 3. +@end table + +@node LM32-Modifiers +@subsection Relocatable Expression Modifiers + +@cindex LM32 modifiers +@cindex syntax, LM32 + +The assembler supports several modifiers when using relocatable addresses +in LM32 instruction operands. The general syntax is the following: + +@smallexample +modifier(relocatable-expression) +@end smallexample + +@table @code +@cindex symbol modifiers + +@item lo + +This modifier allows you to use bits 0 through 15 of +an address expression as 16 bit relocatable expression. + +@item hi + +This modifier allows you to use bits 16 through 23 of an address expression +as 16 bit relocatable expression. + +For example + +@smallexample +ori r4, r4, lo(sym+10) +orhi r4, r4, hi(sym+10) +@end smallexample + +@item gp + +This modified creates a 16-bit relocatable expression that is +the offset of the symbol from the global pointer. + +@smallexample +mva r4, gp(sym) +@end smallexample + +@item got + +This modifier places a symbol in the GOT and creates a 16-bit +relocatable expression that is the offset into the GOT of this +symbol. + +@smallexample +lw r4, (gp+got(sym)) +@end smallexample + +@item gotofflo16 + +This modifier allows you to use the bits 0 through 15 of an +address which is an offset from the GOT. + +@item gotoffhi16 + +This modifier allows you to use the bits 16 through 31 of an +address which is an offset from the GOT. + +@smallexample +orhi r4, r4, gotoffhi16(lsym) +addi r4, r4, gotofflo16(lsym) +@end smallexample + +@end table + +@node LM32-Chars +@subsection Special Characters + +@cindex line comment character, LM32 +@cindex LM32 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. Note that if a line +starts with a @samp{#} character then it can also be a logical line +number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, LM32 +@cindex statement separator, LM32 +@cindex LM32 line separator +A semicolon (@samp{;}) can be used to separate multiple statements on +the same line. + +@node LM32 Opcodes +@section Opcodes + +@cindex LM32 opcode summary +@cindex opcode summary, LM32 +@cindex mnemonics, LM32 +@cindex instruction summary, LM32 +For detailed information on the LM32 machine instruction set, see +@url{http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/}. + +@code{@value{AS}} implements all the standard LM32 opcodes. diff --git a/binutils-2.25/gas/doc/c-m32c.texi b/binutils-2.25/gas/doc/c-m32c.texi new file mode 100644 index 00000000..16acc8d3 --- /dev/null +++ b/binutils-2.25/gas/doc/c-m32c.texi @@ -0,0 +1,149 @@ +@c Copyright 2005, 2008 +@c 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 M32C-Dependent +@chapter M32C Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter M32C Dependent Features +@end ifclear + +@cindex M32C support + +@code{@value{AS}} can assemble code for several different members of +the Renesas M32C family. Normally the default is to assemble code for +the M16C microprocessor. The @code{-m32c} option may be used to +change the default to the M32C microprocessor. + +@menu +* M32C-Opts:: M32C Options +* M32C-Syntax:: M32C Syntax +@end menu + +@node M32C-Opts +@section M32C Options + +@cindex options, M32C +@cindex M32C options + +The Renesas M32C version of @code{@value{AS}} has these +machine-dependent options: + +@table @code +@item -m32c +@cindex @samp{-m32c} option, M32C +@cindex architecture options, M32C +@cindex M32C architecture option +Assemble M32C instructions. + +@item -m16c +@cindex @samp{-m16c} option, M16C +@cindex architecture options, M16C +@cindex M16C architecture option +Assemble M16C instructions (default). + +@item -relax +Enable support for link-time relaxations. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + + +@end table + +@node M32C-Syntax +@section M32C Syntax +@menu +* M32C-Modifiers:: Symbolic Operand Modifiers +* M32C-Chars:: Special Characters +@end menu + +@node M32C-Modifiers +@subsection Symbolic Operand Modifiers + +@cindex M32C modifiers +@cindex modifiers, M32C + +The assembler supports several modifiers when using symbol addresses +in M32C instruction operands. The general syntax is the following: + +@smallexample +%modifier(symbol) +@end smallexample + +@table @code +@cindex symbol modifiers + +@item %dsp8 +@itemx %dsp16 + +These modifiers override the assembler's assumptions about how big a +symbol's address is. Normally, when it sees an operand like +@samp{sym[a0]} it assumes @samp{sym} may require the widest +displacement field (16 bits for @samp{-m16c}, 24 bits for +@samp{-m32c}). These modifiers tell it to assume the address will fit +in an 8 or 16 bit (respectively) unsigned displacement. Note that, of +course, if it doesn't actually fit you will get linker errors. Example: + +@smallexample +mov.w %dsp8(sym)[a0],r1 +mov.b #0,%dsp8(sym)[a0] +@end smallexample + +@item %hi8 + +This modifier allows you to load bits 16 through 23 of a 24 bit +address into an 8 bit register. This is useful with, for example, the +M16C @samp{smovf} instruction, which expects a 20 bit address in +@samp{r1h} and @samp{a0}. Example: + +@smallexample +mov.b #%hi8(sym),r1h +mov.w #%lo16(sym),a0 +smovf.b +@end smallexample + +@item %lo16 + +Likewise, this modifier allows you to load bits 0 through 15 of a 24 +bit address into a 16 bit register. + +@item %hi16 + +This modifier allows you to load bits 16 through 31 of a 32 bit +address into a 16 bit register. While the M32C family only has 24 +bits of address space, it does support addresses in pairs of 16 bit +registers (like @samp{a1a0} for the @samp{lde} instruction). This +modifier is for loading the upper half in such cases. Example: + +@smallexample +mov.w #%hi16(sym),a1 +mov.w #%lo16(sym),a0 +@dots{} +lde.w [a1a0],r1 +@end smallexample + +@end table + +@node M32C-Chars +@subsection Special Characters + +@cindex line comment character, M32C +@cindex M32C line comment character +The presence of a @samp{;} character on a line indicates the start of +a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line, the whole line +is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a +preprocessor control command (@pxref{Preprocessing}). + +@cindex line separator, M32C +@cindex statement separator, M32C +@cindex M32C line separator +The @samp{|} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-m32r.texi b/binutils-2.25/gas/doc/c-m32r.texi new file mode 100644 index 00000000..abb07285 --- /dev/null +++ b/binutils-2.25/gas/doc/c-m32r.texi @@ -0,0 +1,356 @@ +@c Copyright 1991-2013 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-Directives:: M32R Directives +* M32R-Warnings:: M32R Warnings +@end menu + +@node M32R-Opts +@section M32R Options + +@cindex options, M32R +@cindex M32R options + +The Renease 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 +Renesas M32R family. Normally the default is to assemble code for +the M32R microprocessor. This option may be used to change the default +to the M32RX microprocessor, which adds some more instructions to the +basic M32R instruction set, and some additional parameters to some of +the original instructions. + +@item -m32r2 +@cindex @samp{-m32rx} option, M32R2 +@cindex architecture options, M32R2 +@cindex M32R architecture options +This option changes the target processor to the M32R2 +microprocessor. + +@item -m32r +@cindex @samp{-m32r} option, M32R +@cindex architecture options, M32R +@cindex M32R architecture options +This option can be used to restore the assembler's default behaviour of +assembling for the M32R microprocessor. This can be useful if the +default has been changed by a previous command line option. + +@item -little +@cindex @code{-little} option, M32R +This option tells the assembler to produce little-endian code and +data. The default is dependent upon how the toolchain was +configured. + +@item -EL +@cindex @code{-EL} option, M32R +This is a synonym for @emph{-little}. + +@item -big +@cindex @code{-big} option, M32R +This option tells the assembler to produce big-endian code and +data. + +@item -EB +@cindex @code{-EB} option, M32R +This is a synonum for @emph{-big}. + +@item -KPIC +@cindex @code{-KPIC} option, M32R +@cindex PIC code generation for M32R +This option specifies that the output of the assembler should be +marked as position-independent code (PIC). + +@item -parallel +@cindex @code{-parallel} option, M32RX +This option tells the assembler to attempts to combine two sequential +instructions into a single, parallel instruction, where it is legal to +do so. + +@item -no-parallel +@cindex @code{-no-parallel} option, M32RX +This option disables a previously enabled @emph{-parallel} option. + +@item -no-bitinst +@cindex @samp{-no-bitinst}, M32R2 +This option disables the support for the extended bit-field +instructions provided by the M32R2. If this support needs to be +re-enabled the @emph{-bitinst} switch can be used to restore it. + +@item -O +@cindex @code{-O} option, M32RX +This option tells the assembler to attempt to optimize the +instructions that it produces. This includes filling delay slots and +converting sequential instructions into parallel ones. This option +implies @emph{-parallel}. + +@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 whose +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. + +@item -ignore-parallel-conflicts +@cindex @samp{-ignore-parallel-conflicts} option, M32RX +This option tells the assembler's to stop checking parallel +instructions for constraint violations. This ability is provided for +hardware vendors testing chip designs and should not be used under +normal circumstances. + +@item -no-ignore-parallel-conflicts +@cindex @samp{-no-ignore-parallel-conflicts} option, M32RX +This option restores the assembler's default behaviour of checking +parallel instructions to detect constraint violations. + +@item -Ip +@cindex @samp{-Ip} option, M32RX +This is a shorter synonym for the @emph{-ignore-parallel-conflicts} +option. + +@item -nIp +@cindex @samp{-nIp} option, M32RX +This is a shorter synonym for the @emph{-no-ignore-parallel-conflicts} +option. + +@item -warn-unmatched-high +@cindex @samp{-warn-unmatched-high} option, M32R +This option tells the assembler to produce a warning message if a +@code{.high} pseudo op is encountered without a matching @code{.low} +pseudo op. The presence of such an unmatched pseudo op usually +indicates a programming error. + +@item -no-warn-unmatched-high +@cindex @samp{-no-warn-unmatched-high} option, M32R +Disables a previously enabled @emph{-warn-unmatched-high} option. + +@item -Wuh +@cindex @samp{-Wuh} option, M32RX +This is a shorter synonym for the @emph{-warn-unmatched-high} option. + +@item -Wnuh +@cindex @samp{-Wnuh} option, M32RX +This is a shorter synonym for the @emph{-no-warn-unmatched-high} option. + +@end table + +@node M32R-Directives +@section M32R Directives +@cindex directives, M32R +@cindex M32R directives + +The Renease M32R version of @code{@value{AS}} has a few architecture +specific directives: + +@table @code + +@cindex @code{low} directive, M32R +@item low @var{expression} +The @code{low} directive computes the value of its expression and +places the lower 16-bits of the result into the immediate-field of the +instruction. For example: + +@smallexample + or3 r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678 + add3, r0, r0, #low(fred) ; compute r0 = r0 + low 16-bits of address of fred +@end smallexample + +@item high @var{expression} +@cindex @code{high} directive, M32R +The @code{high} directive computes the value of its expression and +places the upper 16-bits of the result into the immediate-field of the +instruction. For example: + +@smallexample + seth r0, #high(0x12345678) ; compute r0 = 0x12340000 + seth, r0, #high(fred) ; compute r0 = upper 16-bits of address of fred +@end smallexample + +@item shigh @var{expression} +@cindex @code{shigh} directive, M32R +The @code{shigh} directive is very similar to the @code{high} +directive. It also computes the value of its expression and places +the upper 16-bits of the result into the immediate-field of the +instruction. The difference is that @code{shigh} also checks to see +if the lower 16-bits could be interpreted as a signed number, and if +so it assumes that a borrow will occur from the upper-16 bits. To +compensate for this the @code{shigh} directive pre-biases the upper +16 bit value by adding one to it. For example: + +For example: + +@smallexample + seth r0, #shigh(0x12345678) ; compute r0 = 0x12340000 + seth r0, #shigh(0x00008000) ; compute r0 = 0x00010000 +@end smallexample + +In the second example the lower 16-bits are 0x8000. If these are +treated as a signed value and sign extended to 32-bits then the value +becomes 0xffff8000. If this value is then added to 0x00010000 then +the result is 0x00008000. + +This behaviour is to allow for the different semantics of the +@code{or3} and @code{add3} instructions. The @code{or3} instruction +treats its 16-bit immediate argument as unsigned whereas the +@code{add3} treats its 16-bit immediate as a signed value. So for +example: + +@smallexample + seth r0, #shigh(0x00008000) + add3 r0, r0, #low(0x00008000) +@end smallexample + +Produces the correct result in r0, whereas: + +@smallexample + seth r0, #shigh(0x00008000) + or3 r0, r0, #low(0x00008000) +@end smallexample + +Stores 0xffff8000 into r0. + +Note - the @code{shigh} directive does not know where in the assembly +source code the lower 16-bits of the value are going set, so it cannot +check to make sure that an @code{or3} instruction is being used rather +than an @code{add3} instruction. It is up to the programmer to make +sure that correct directives are used. + +@cindex @code{.m32r} directive, M32R +@item .m32r +The directive performs a similar thing as the @emph{-m32r} command +line option. It tells the assembler to only accept M32R instructions +from now on. An instructions from later M32R architectures are +refused. + +@cindex @code{.m32rx} directive, M32RX +@item .m32rx +The directive performs a similar thing as the @emph{-m32rx} command +line option. It tells the assembler to start accepting the extra +instructions in the M32RX ISA as well as the ordinary M32R ISA. + +@cindex @code{.m32r2} directive, M32R2 +@item .m32r2 +The directive performs a similar thing as the @emph{-m32r2} command +line option. It tells the assembler to start accepting the extra +instructions in the M32R2 ISA as well as the ordinary M32R ISA. + +@cindex @code{.little} directive, M32RX +@item .little +The directive performs a similar thing as the @emph{-little} command +line option. It tells the assembler to start producing little-endian +code and data. This option should be used with care as producing +mixed-endian binary files is fraught with danger. + +@cindex @code{.big} directive, M32RX +@item .big +The directive performs a similar thing as the @emph{-big} command +line option. It tells the assembler to start producing big-endian +code and data. This option should be used with care as producing +mixed-endian binary files is fraught with danger. + +@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 does not recognize. + +@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/binutils-2.25/gas/doc/c-m68hc11.texi b/binutils-2.25/gas/doc/c-m68hc11.texi new file mode 100644 index 00000000..2583c016 --- /dev/null +++ b/binutils-2.25/gas/doc/c-m68hc11.texi @@ -0,0 +1,478 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2003, +@c 2006, 2011, 2012 +@c 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 M68HC11-Dependent +@chapter M68HC11 and M68HC12 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter M68HC11 and M68HC12 Dependent Features +@end ifclear + +@cindex M68HC11 and M68HC12 support +@menu +* M68HC11-Opts:: M68HC11 and M68HC12 Options +* M68HC11-Syntax:: Syntax +* M68HC11-Modifiers:: Symbolic Operand Modifiers +* M68HC11-Directives:: Assembler Directives +* M68HC11-Float:: Floating Point +* M68HC11-opcodes:: Opcodes +@end menu + +@node M68HC11-Opts +@section M68HC11 and M68HC12 Options + +@cindex options, M68HC11 +@cindex M68HC11 options +The Motorola 68HC11 and 68HC12 version of @code{@value{AS}} have a few machine +dependent options. + +@table @code + +@cindex @samp{-m68hc11} +@item -m68hc11 +This option switches the assembler into the M68HC11 mode. In this mode, +the assembler only accepts 68HC11 operands and mnemonics. It produces +code for the 68HC11. + +@cindex @samp{-m68hc12} +@item -m68hc12 +This option switches the assembler into the M68HC12 mode. In this mode, +the assembler also accepts 68HC12 operands and mnemonics. It produces +code for the 68HC12. A few 68HC11 instructions are replaced by +some 68HC12 instructions as recommended by Motorola specifications. + +@cindex @samp{-m68hcs12} +@item -m68hcs12 +This option switches the assembler into the M68HCS12 mode. This mode is +similar to @samp{-m68hc12} but specifies to assemble for the 68HCS12 +series. The only difference is on the assembling of the @samp{movb} +and @samp{movw} instruction when a PC-relative operand is used. + +@cindex @samp{-mm9s12x} +@item -mm9s12x +This option switches the assembler into the M9S12X mode. This mode is +similar to @samp{-m68hc12} but specifies to assemble for the S12X +series which is a superset of the HCS12. + +@cindex @samp{-mm9s12xg} +@item -mm9s12xg +This option switches the assembler into the XGATE mode for the RISC +co-processor featured on some S12X-family chips. + +@cindex @samp{--xgate-ramoffset} +@item --xgate-ramoffset +This option instructs the linker to offset RAM addresses from S12X address +space into XGATE address space. + +@cindex @samp{-mshort} +@item -mshort +This option controls the ABI and indicates to use a 16-bit integer ABI. +It has no effect on the assembled instructions. +This is the default. + +@cindex @samp{-mlong} +@item -mlong +This option controls the ABI and indicates to use a 32-bit integer ABI. + +@cindex @samp{-mshort-double} +@item -mshort-double +This option controls the ABI and indicates to use a 32-bit float ABI. +This is the default. + +@cindex @samp{-mlong-double} +@item -mlong-double +This option controls the ABI and indicates to use a 64-bit float ABI. + +@cindex @samp{--strict-direct-mode} +@item --strict-direct-mode +You can use the @samp{--strict-direct-mode} option to disable +the automatic translation of direct page mode addressing into +extended mode when the instruction does not support direct mode. +For example, the @samp{clr} instruction does not support direct page +mode addressing. When it is used with the direct page mode, +@code{@value{AS}} will ignore it and generate an absolute addressing. +This option prevents @code{@value{AS}} from doing this, and the wrong +usage of the direct page mode will raise an error. + +@cindex @samp{--short-branches} +@item --short-branches +The @samp{--short-branches} option turns off the translation of +relative branches into absolute branches when the branch offset is +out of range. By default @code{@value{AS}} transforms the relative +branch (@samp{bsr}, @samp{bgt}, @samp{bge}, @samp{beq}, @samp{bne}, +@samp{ble}, @samp{blt}, @samp{bhi}, @samp{bcc}, @samp{bls}, +@samp{bcs}, @samp{bmi}, @samp{bvs}, @samp{bvs}, @samp{bra}) into +an absolute branch when the offset is out of the -128 .. 127 range. +In that case, the @samp{bsr} instruction is translated into a +@samp{jsr}, the @samp{bra} instruction is translated into a +@samp{jmp} and the conditional branches instructions are inverted and +followed by a @samp{jmp}. This option disables these translations +and @code{@value{AS}} will generate an error if a relative branch +is out of range. This option does not affect the optimization +associated to the @samp{jbra}, @samp{jbsr} and @samp{jbXX} pseudo opcodes. + +@cindex @samp{--force-long-branches} +@item --force-long-branches +The @samp{--force-long-branches} option forces the translation of +relative branches into absolute branches. This option does not affect +the optimization associated to the @samp{jbra}, @samp{jbsr} and +@samp{jbXX} pseudo opcodes. + +@cindex @samp{--print-insn-syntax} +@item --print-insn-syntax +You can use the @samp{--print-insn-syntax} option to obtain the +syntax description of the instruction when an error is detected. + +@cindex @samp{--print-opcodes} +@item --print-opcodes +The @samp{--print-opcodes} option prints the list of all the +instructions with their syntax. The first item of each line +represents the instruction name and the rest of the line indicates +the possible operands for that instruction. The list is printed +in alphabetical order. Once the list is printed @code{@value{AS}} +exits. + +@cindex @samp{--generate-example} +@item --generate-example +The @samp{--generate-example} option is similar to @samp{--print-opcodes} +but it generates an example for each instruction instead. +@end table + +@node M68HC11-Syntax +@section Syntax + +@cindex M68HC11 syntax +@cindex syntax, M68HC11 + +In the M68HC11 syntax, the instruction name comes first and it may +be followed by one or several operands (up to three). Operands are +separated by comma (@samp{,}). In the normal mode, +@code{@value{AS}} will complain if too many operands are specified for +a given instruction. In the MRI mode (turned on with @samp{-M} option), +it will treat them as comments. Example: + +@smallexample +inx +lda #23 +bset 2,x #4 +brclr *bot #8 foo +@end smallexample + +@cindex line comment character, M68HC11 +@cindex M68HC11 line comment character +The presence of a @samp{;} character or a @samp{!} character anywhere +on a line indicates the start of a comment that extends to the end of +that line. + +A @samp{*} or a @samp{#} character at the start of a line also +introduces a line comment, but these characters do not work elsewhere +on the line. If the first character of the line is a @samp{#} then as +well as starting a comment, the line could also be logical line number +directive (@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex line separator, M68HC11 +@cindex statement separator, M68HC11 +@cindex M68HC11 line separator +The M68HC11 assembler does not currently support a line separator +character. + +@cindex M68HC11 addressing modes +@cindex addressing modes, M68HC11 +The following addressing modes are understood for 68HC11 and 68HC12: +@table @dfn +@item Immediate +@samp{#@var{number}} + +@item Address Register +@samp{@var{number},X}, @samp{@var{number},Y} + +The @var{number} may be omitted in which case 0 is assumed. + +@item Direct Addressing mode +@samp{*@var{symbol}}, or @samp{*@var{digits}} + +@item Absolute +@samp{@var{symbol}}, or @samp{@var{digits}} +@end table + +The M68HC12 has other more complex addressing modes. All of them +are supported and they are represented below: + +@table @dfn +@item Constant Offset Indexed Addressing Mode +@samp{@var{number},@var{reg}} + +The @var{number} may be omitted in which case 0 is assumed. +The register can be either @samp{X}, @samp{Y}, @samp{SP} or +@samp{PC}. The assembler will use the smaller post-byte definition +according to the constant value (5-bit constant offset, 9-bit constant +offset or 16-bit constant offset). If the constant is not known by +the assembler it will use the 16-bit constant offset post-byte and the value +will be resolved at link time. + +@item Offset Indexed Indirect +@samp{[@var{number},@var{reg}]} + +The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}. + +@item Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement +@samp{@var{number},-@var{reg}} +@samp{@var{number},+@var{reg}} +@samp{@var{number},@var{reg}-} +@samp{@var{number},@var{reg}+} + +The number must be in the range @samp{-8}..@samp{+8} and must not be 0. +The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}. + +@item Accumulator Offset +@samp{@var{acc},@var{reg}} + +The accumulator register can be either @samp{A}, @samp{B} or @samp{D}. +The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}. + +@item Accumulator D offset indexed-indirect +@samp{[D,@var{reg}]} + +The register can be either @samp{X}, @samp{Y}, @samp{SP} or @samp{PC}. + +@end table + +For example: + +@smallexample +ldab 1024,sp +ldd [10,x] +orab 3,+x +stab -2,y- +ldx a,pc +sty [d,sp] +@end smallexample + + +@node M68HC11-Modifiers +@section Symbolic Operand Modifiers + +@cindex M68HC11 modifiers +@cindex syntax, M68HC11 + +The assembler supports several modifiers when using symbol addresses +in 68HC11 and 68HC12 instruction operands. The general syntax is +the following: + +@smallexample +%modifier(symbol) +@end smallexample + +@table @code +@cindex symbol modifiers +@item %addr +This modifier indicates to the assembler and linker to use +the 16-bit physical address corresponding to the symbol. This is intended +to be used on memory window systems to map a symbol in the memory bank window. +If the symbol is in a memory expansion part, the physical address +corresponds to the symbol address within the memory bank window. +If the symbol is not in a memory expansion part, this is the symbol address +(using or not using the %addr modifier has no effect in that case). + +@item %page +This modifier indicates to use the memory page number corresponding +to the symbol. If the symbol is in a memory expansion part, its page +number is computed by the linker as a number used to map the page containing +the symbol in the memory bank window. If the symbol is not in a memory +expansion part, the page number is 0. + +@item %hi +This modifier indicates to use the 8-bit high part of the physical +address of the symbol. + +@item %lo +This modifier indicates to use the 8-bit low part of the physical +address of the symbol. + +@end table + +For example a 68HC12 call to a function @samp{foo_example} stored in memory +expansion part could be written as follows: + +@smallexample +call %addr(foo_example),%page(foo_example) +@end smallexample + +and this is equivalent to + +@smallexample +call foo_example +@end smallexample + +And for 68HC11 it could be written as follows: + +@smallexample +ldab #%page(foo_example) +stab _page_switch +jsr %addr(foo_example) +@end smallexample + +@node M68HC11-Directives +@section Assembler Directives + +@cindex assembler directives, M68HC11 +@cindex assembler directives, M68HC12 +@cindex M68HC11 assembler directives +@cindex M68HC12 assembler directives + +The 68HC11 and 68HC12 version of @code{@value{AS}} have the following +specific assembler directives: + +@table @code +@item .relax +@cindex assembler directive .relax, M68HC11 +@cindex M68HC11 assembler directive .relax +The relax directive is used by the @samp{GNU Compiler} to emit a specific +relocation to mark a group of instructions for linker relaxation. +The sequence of instructions within the group must be known to the linker +so that relaxation can be performed. + +@item .mode [mshort|mlong|mshort-double|mlong-double] +@cindex assembler directive .mode, M68HC11 +@cindex M68HC11 assembler directive .mode +This directive specifies the ABI. It overrides the @samp{-mshort}, +@samp{-mlong}, @samp{-mshort-double} and @samp{-mlong-double} options. + +@item .far @var{symbol} +@cindex assembler directive .far, M68HC11 +@cindex M68HC11 assembler directive .far +This directive marks the symbol as a @samp{far} symbol meaning that it +uses a @samp{call/rtc} calling convention as opposed to @samp{jsr/rts}. +During a final link, the linker will identify references to the @samp{far} +symbol and will verify the proper calling convention. + +@item .interrupt @var{symbol} +@cindex assembler directive .interrupt, M68HC11 +@cindex M68HC11 assembler directive .interrupt +This directive marks the symbol as an interrupt entry point. +This information is then used by the debugger to correctly unwind the +frame across interrupts. + +@item .xrefb @var{symbol} +@cindex assembler directive .xrefb, M68HC11 +@cindex M68HC11 assembler directive .xrefb +This directive is defined for compatibility with the +@samp{Specification for Motorola 8 and 16-Bit Assembly Language Input +Standard} and is ignored. + +@end table + +@node M68HC11-Float +@section Floating Point + +@cindex floating point, M68HC11 +@cindex M68HC11 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, M68HC11 +@item .float +@code{Single} precision floating point constants. + +@cindex @code{double} directive, M68HC11 +@item .double +@code{Double} precision floating point constants. + +@cindex @code{extend} directive M68HC11 +@cindex @code{ldouble} directive M68HC11 +@item .extend +@itemx .ldouble +@code{Extended} precision (@code{long double}) floating point constants. +@end table + +@need 2000 +@node M68HC11-opcodes +@section Opcodes + +@cindex M68HC11 opcodes +@cindex opcodes, M68HC11 +@cindex instruction set, M68HC11 + +@menu +* M68HC11-Branch:: Branch Improvement +@end menu + +@node M68HC11-Branch +@subsection Branch Improvement + +@cindex pseudo-opcodes, M68HC11 +@cindex M68HC11 pseudo-opcodes +@cindex branch improvement, M68HC11 +@cindex M68HC11 branch improvement + +Certain pseudo opcodes are permitted for branch instructions. +They expand to the shortest branch instruction that reach the +target. Generally these mnemonics are made by prepending @samp{j} to +the start of Motorola mnemonic. These pseudo opcodes are not affected +by the @samp{--short-branches} or @samp{--force-long-branches} options. + +The following table summarizes the pseudo-operations. + +@smallexample + Displacement Width + +-------------------------------------------------------------+ + | Options | + | --short-branches --force-long-branches | + +--------------------------+----------------------------------+ + Op |BYTE WORD | BYTE WORD | + +--------------------------+----------------------------------+ + bsr | bsr <pc-rel> <error> | jsr <abs> | + bra | bra <pc-rel> <error> | jmp <abs> | +jbsr | bsr <pc-rel> jsr <abs> | bsr <pc-rel> jsr <abs> | +jbra | bra <pc-rel> jmp <abs> | bra <pc-rel> jmp <abs> | + bXX | bXX <pc-rel> <error> | bNX +3; jmp <abs> | +jbXX | bXX <pc-rel> bNX +3; | bXX <pc-rel> bNX +3; jmp <abs> | + | jmp <abs> | | + +--------------------------+----------------------------------+ +XX: condition +NX: negative of condition XX + +@end smallexample + +@table @code +@item jbsr +@itemx jbra +These are the simplest jump pseudo-operations; they always map to one +particular machine instruction, depending on the displacement to the +branch target. + +@item jb@var{XX} +Here, @samp{jb@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 + jbcc jbeq jbge jbgt jbhi jbvs jbpl jblo + jbcs jbne jblt jble jbls jbvc jbmi +@end smallexample + +For the cases of non-PC relative displacements and long displacements, +@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 + jb@var{XX} foo +@end smallexample +gives +@smallexample + b@var{NX}s oof + jmp foo + oof: +@end smallexample + +@end table + + diff --git a/binutils-2.25/gas/doc/c-m68k.texi b/binutils-2.25/gas/doc/c-m68k.texi new file mode 100644 index 00000000..7beca110 --- /dev/null +++ b/binutils-2.25/gas/doc/c-m68k.texi @@ -0,0 +1,637 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2003, +@c 2004, 2006, 2007, 2011 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: + +@table @samp + +@cindex @samp{-march=} command line option, M680x0 +@item -march=@var{architecture} +This option specifies a target architecture. The following +architectures are recognized: +@code{68000}, +@code{68010}, +@code{68020}, +@code{68030}, +@code{68040}, +@code{68060}, +@code{cpu32}, +@code{isaa}, +@code{isaaplus}, +@code{isab}, +@code{isac} and +@code{cfv4e}. + + +@cindex @samp{-mcpu=} command line option, M680x0 +@item -mcpu=@var{cpu} +This option specifies a target cpu. When used in conjunction with the +@option{-march} option, the cpu must be within the specified +architecture. Also, the generic features of the architecture are used +for instruction generation, rather than those of the specific chip. + +@cindex @samp{-m[no-]68851} command line option, M680x0 +@cindex @samp{-m[no-]68881} command line option, M680x0 +@cindex @samp{-m[no-]div} command line option, M680x0 +@cindex @samp{-m[no-]usp} command line option, M680x0 +@cindex @samp{-m[no-]float} command line option, M680x0 +@cindex @samp{-m[no-]mac} command line option, M680x0 +@cindex @samp{-m[no-]emac} command line option, M680x0 +@item -m[no-]68851 +@itemx -m[no-]68881 +@itemx -m[no-]div +@itemx -m[no-]usp +@itemx -m[no-]float +@itemx -m[no-]mac +@itemx -m[no-]emac + +Enable or disable various architecture specific features. If a chip +or architecture by default supports an option (for instance +@option{-march=isaaplus} includes the @option{-mdiv} option), +explicitly disabling the option will override the default. + +@cindex @samp{-l} option, M680x0 +@item -l +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 +@item --register-prefix-optional +For some configurations, especially those where the compiler normally +does not prepend an underscore to the names of user variables, the +assembler requires a @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 +@item --bitwise-or +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} +@item --base-size-default-16 --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} +@item --disp-size-default-16 --disp-size-default-32 +If you use an addressing mode with a displacement, and the value of the +displacement is not known, @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{--pcrel} +@item --pcrel +Always keep branches PC-relative. In the M680x0 architecture all branches +are defined as PC-relative. However, on some processors they are limited +to word displacements maximum. When @code{@value{AS}} needs a long branch +that is not available, it normally emits an absolute jump instead. This +option disables this substitution. When this option is given and no long +branches are available, only word branches will be emitted. An error +message will be generated if a word branch cannot reach its target. This +option has no effect on 68020 and other processors that have long branches. +@pxref{M68K-Branch,,Branch Improvement}. + +@cindex @samp{-m68000} and related options +@cindex architecture options, M680x0 +@cindex M680x0 architecture options +@item -m68000 +@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 +@itemx -m5202 +@itemx -m5204 +@itemx -m5206 +@itemx -m5206e +@itemx -m521x +@itemx -m5249 +@itemx -m528x +@itemx -m5307 +@itemx -m5407 +@itemx -m547x +@itemx -m548x +@itemx -mcfv4 +@itemx -mcfv4e +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 +@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. + +@cindex @code{arch} directive, M680x0 +@item .arch @var{name} +Select the target architecture and extension features. Valid values +for @var{name} are the same as for the @option{-march} command line +option. This directive cannot be specified after +any instructions have been assembled. If it is given multiple times, +or in conjunction with the @option{-march} option, all uses must be for +the same architecture and extension set. + +@cindex @code{cpu} directive, M680x0 +@item .cpu @var{name} +Select the target cpu. Valid valuse +for @var{name} are the same as for the @option{-mcpu} command line +option. This directive cannot be specified after +any instructions have been assembled. If it is given multiple times, +or in conjunction with the @option{-mopt} option, all uses must be for +the same cpu. + +@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, not PC-relative OK +Pseudo-Op |BYTE WORD LONG ABSOLUTE LONG JUMP ** + +------------------------------------------------------------ + jbsr |bsrs bsrw bsrl jsr + jra |bras braw bral jmp +* jXX |bXXs bXXw bXXl bNXs;jmp +* dbXX | N/A dbXXw dbXX;bras;bral dbXX;bras;jmp + fjXX | N/A fbXXw fbXXl N/A + +XX: condition +NX: negative of condition XX + +@end smallexample +@center @code{*}---see full description below +@center @code{**}---this expansion mode is disallowed by @samp{--pcrel} + +@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. This instruction will be a byte or word branch is that +is sufficient. Otherwise, a long branch will be emitted if available. +If no long branches are available and the @samp{--pcrel} option is not +given, an absolute long jump will be emitted instead. If no long +branches are available, the @samp{--pcrel} option is given, and a word +branch cannot reach the target, an error message is generated. + +In addition to standard branch operands, @code{@value{AS}} allows these +pseudo-operations to have all operands that are allowed for jsr and jmp, +substituting these instructions if the operand given is not valid for a +branch instruction. + +@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 + +Usually, each of these pseudo-operations expands to a single branch +instruction. However, if a word branch is not sufficient, no long branches +are available, and the @samp{--pcrel} option is not given, @code{@value{AS}} +issues a longer code fragment in terms of @var{NX}, the opposite condition +to @var{XX}. For example, under these conditions: +@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 + +Motorola @samp{db@var{XX}} instructions allow word displacements only. When +a word displacement is sufficient, each of these pseudo-operations expands +to the corresponding Motorola instruction. When a word displacement is not +sufficient and long branches are available, when the source reads +@samp{db@var{XX} foo}, @code{@value{AS}} emits +@smallexample + db@var{XX} oo1 + bras oo2 + oo1:bral foo + oo2: +@end smallexample + +If, however, long branches are not available and the @samp{--pcrel} option is +not given, @code{@value{AS}} emits +@smallexample + db@var{XX} oo1 + bras oo2 + oo1:jmp 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 + +Each of these pseudo-operations always expands to a single Motorola +coprocessor branch instruction, word or long. All Motorola coprocessor +branch instructions allow both word and long displacements. + +@end table + +@node M68K-Chars +@subsection Special Characters + +@cindex special characters, M680x0 + +@cindex M680x0 line comment character +@cindex line comment character, M680x0 +@cindex comments, M680x0 +Line comments are introduced by the @samp{|} character appearing +anywhere on a line, unless the @option{--bitwise-or} command line option +has been specified. + +An asterisk (@samp{*}) as the first character on a line marks the +start of a line comment as well. + +@cindex M680x0 immediate character +@cindex immediate character, M680x0 + +A hash character (@samp{#}) as the first character on a line also +marks the start of a line comment, but in this case it could also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). If the hash character +appears elsewhere on a line it is used to introduce an immediate +value. (This is for compatibility with Sun's assembler). + +@cindex M680x0 line separator +@cindex line separator, M680x0 + +Multiple statements on the same line can appear if they are separated +by the @samp{;} character. diff --git a/binutils-2.25/gas/doc/c-metag.texi b/binutils-2.25/gas/doc/c-metag.texi new file mode 100644 index 00000000..f55db22e --- /dev/null +++ b/binutils-2.25/gas/doc/c-metag.texi @@ -0,0 +1,86 @@ +@c Copyright 2013 Free Software Foundation, Inc. +@c Contributed by Imagination Technologies Ltd. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node Meta-Dependent +@chapter Meta Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter Meta Dependent Features +@end ifclear + +@cindex Meta support +@menu +* Meta Options:: Options +* Meta Syntax:: Meta Assembler Syntax +@end menu + +@node Meta Options +@section Options + +@cindex options for Meta +@cindex Meta options +@cindex architectures, Meta +@cindex Meta architectures + +The Imagination Technologies Meta architecture is implemented in a +number of versions, with each new version adding new features such as +instructions and registers. For precise details of what instructions +each core supports, please see the chip's technical reference manual. + +The following table lists all available Meta options. + +@c man begin OPTIONS +@table @code +@item -mcpu=metac11 +Generate code for Meta 1.1. + +@item -mcpu=metac12 +Generate code for Meta 1.2. + +@item -mcpu=metac21 +Generate code for Meta 2.1. + +@item -mfpu=metac21 +Allow code to use FPU hardware of Meta 2.1. + +@end table +@c man end + +@node Meta Syntax +@section Syntax + +@menu +* Meta-Chars:: Special Characters +* Meta-Regs:: Register Names +@end menu + +@node Meta-Chars +@subsection Special Characters + +@cindex line comment character, Meta +@cindex Meta line comment character +@samp{!} is the line comment character. + +@cindex line separator, Meta +@cindex statement separator, Meta +@cindex Meta 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 Meta-Regs +@subsection Register Names + +@cindex Meta registers +@cindex registers, Meta +Registers can be specified either using their mnemonic names, such as +@samp{D0Re0}, or using the unit plus register number separated by a @samp{.}, +such as @samp{D0.0}. diff --git a/binutils-2.25/gas/doc/c-microblaze.texi b/binutils-2.25/gas/doc/c-microblaze.texi new file mode 100644 index 00000000..0027019a --- /dev/null +++ b/binutils-2.25/gas/doc/c-microblaze.texi @@ -0,0 +1,100 @@ +@c Copyright 2009, 2011 +@c 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 MicroBlaze-Dependent +@chapter MicroBlaze Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter MicroBlaze Dependent Features +@end ifclear + +@cindex MicroBlaze architectures +The Xilinx MicroBlaze processor family includes several variants, all using +the same core instruction set. This chapter covers features of the @sc{gnu} +assembler that are specific to the MicroBlaze architecture. For details about +the MicroBlaze instruction set, please see the @cite{MicroBlaze Processor +Reference Guide (UG081)} available at www.xilinx.com. + +@cindex MicroBlaze support +@menu +* MicroBlaze Directives:: Directives for MicroBlaze Processors. +* MicroBlaze Syntax:: Syntax for the MicroBlaze +@end menu + +@node MicroBlaze Directives +@section Directives +@cindex MicroBlaze directives +A number of assembler directives are available for MicroBlaze. + +@table @code +@item .data8 @var{expression},... +This directive is an alias for @code{.byte}. Each expression is assembled +into an eight-bit value. + +@item .data16 @var{expression},... +This directive is an alias for @code{.hword}. Each expression is assembled +into an 16-bit value. + +@item .data32 @var{expression},... +This directive is an alias for @code{.word}. Each expression is assembled +into an 32-bit value. + +@item .ent @var{name}[,@var{label}] +This directive is an alias for @code{.func} denoting the start of function +@var{name} at (optional) @var{label}. + +@item .end @var{name}[,@var{label}] +This directive is an alias for @code{.endfunc} denoting the end of function +@var{name}. + +@item .gpword @var{label},... +This directive is an alias for @code{.rva}. The resolved address of @var{label} +is stored in the data section. + +@item .weakext @var{label} +Declare that @var{label} is a weak external symbol. + +@item .rodata +Switch to .rodata section. Equivalent to @code{.section .rodata} + +@item .sdata2 +Switch to .sdata2 section. Equivalent to @code{.section .sdata2} + +@item .sdata +Switch to .sdata section. Equivalent to @code{.section .sdata} + +@item .bss +Switch to .bss section. Equivalent to @code{.section .bss} + +@item .sbss +Switch to .sbss section. Equivalent to @code{.section .sbss} +@end table + +@node MicroBlaze Syntax +@section Syntax for the MicroBlaze +@menu +* MicroBlaze-Chars:: Special Characters +@end menu + +@node MicroBlaze-Chars +@subsection Special Characters + +@cindex line comment character, MicroBlaze +@cindex MicroBlaze 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, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a +preprocessor control command (@pxref{Preprocessing}). + +@cindex line separator, MicroBlaze +@cindex statement separator, MicroBlaze +@cindex MicroBlaze line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-mips.texi b/binutils-2.25/gas/doc/c-mips.texi new file mode 100644 index 00000000..7927893c --- /dev/null +++ b/binutils-2.25/gas/doc/c-mips.texi @@ -0,0 +1,926 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, +@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013 +@c 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 MIPS architectures supports several +different MIPS processors, and MIPS ISA levels I through V, MIPS32, +and MIPS64. For information about the MIPS instruction set, see +@cite{MIPS RISC Architecture}, by Kane and Heindrich (Prentice-Hall). +For an overview of MIPS assembly conventions, see ``Appendix D: +Assembly Language Programming'' in the same work. + +@menu +* MIPS Options:: Assembler options +* MIPS Macros:: High-level assembly macros +* MIPS Symbol Sizes:: Directives to override the size of symbols +* MIPS Small Data:: Controlling the use of small data accesses +* MIPS ISA:: Directives to override the ISA level +* MIPS assembly options:: Directives to control code generation +* MIPS autoextend:: Directives for extending MIPS 16 bit instructions +* MIPS insn:: Directive to mark data as an instruction +* MIPS NaN Encodings:: Directives to record which NaN encoding is being used +* MIPS Option Stack:: Directives to save and restore options +* MIPS ASE Instruction Generation Overrides:: Directives to control + generation of MIPS ASE instructions +* MIPS Floating-Point:: Directives to override floating-point options +* MIPS Syntax:: MIPS specific syntactical considerations +@end menu + +@node MIPS Options +@section Assembler options + +The MIPS configurations of @sc{gnu} @code{@value{AS}} support these +special options: + +@table @code +@cindex @code{-G} option (MIPS) +@item -G @var{num} +Set the ``small data'' limit to @var{n} bytes. The default limit is 8 bytes. +@xref{MIPS Small Data,, Controlling the use of small data accesses}. + +@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 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. + +@item -KPIC +@cindex PIC selection, MIPS +@cindex @option{-KPIC} option, MIPS +Generate SVR4-style PIC. This option tells the assembler to generate +SVR4-style position-independent macro expansions. It also tells the +assembler to mark the output file as PIC. + +@item -mvxworks-pic +@cindex @option{-mvxworks-pic} option, MIPS +Generate VxWorks PIC. This option tells the assembler to generate +VxWorks-style position-independent macro expansions. + +@cindex MIPS architecture options +@item -mips1 +@itemx -mips2 +@itemx -mips3 +@itemx -mips4 +@itemx -mips5 +@itemx -mips32 +@itemx -mips32r2 +@itemx -mips64 +@itemx -mips64r2 +Generate code for a particular MIPS Instruction Set Architecture level. +@samp{-mips1} corresponds to the R2000 and R3000 processors, +@samp{-mips2} to the R6000 processor, @samp{-mips3} to the +R4000 processor, and @samp{-mips4} to the R8000 and R10000 processors. +@samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips64}, and +@samp{-mips64r2} correspond to generic MIPS V, MIPS32, MIPS32 Release 2, +MIPS64, and MIPS64 Release 2 ISA processors, respectively. You can also +switch instruction sets during the assembly; see @ref{MIPS ISA, +Directives to override the ISA level}. + +@item -mgp32 +@itemx -mfp32 +Some macros have different expansions for 32-bit and 64-bit registers. +The register sizes are normally inferred from the ISA and ABI, but these +flags force a certain group of registers to be treated as 32 bits wide at +all times. @samp{-mgp32} controls the size of general-purpose registers +and @samp{-mfp32} controls the size of floating-point registers. + +The @code{.set gp=32} and @code{.set fp=32} directives allow the size +of registers to be changed for parts of an object. The default value is +restored by @code{.set gp=default} and @code{.set fp=default}. + +On some MIPS variants there is a 32-bit mode flag; when this flag is +set, 64-bit instructions generate a trap. Also, some 32-bit OSes only +save the 32-bit registers on a context switch, so it is essential never +to use the 64-bit registers. + +@item -mgp64 +@itemx -mfp64 +Assume that 64-bit registers are available. This is provided in the +interests of symmetry with @samp{-mgp32} and @samp{-mfp32}. + +The @code{.set gp=64} and @code{.set fp=64} directives allow the size +of registers to be changed for parts of an object. The default value is +restored by @code{.set gp=default} and @code{.set fp=default}. + +@item -mips16 +@itemx -no-mips16 +Generate code for the MIPS 16 processor. This is equivalent to putting +@code{.set mips16} at the start of the assembly file. @samp{-no-mips16} +turns off this option. + +@item -mmicromips +@itemx -mno-micromips +Generate code for the microMIPS processor. This is equivalent to putting +@code{.set micromips} at the start of the assembly file. @samp{-mno-micromips} +turns off this option. This is equivalent to putting @code{.set nomicromips} +at the start of the assembly file. + +@item -msmartmips +@itemx -mno-smartmips +Enables the SmartMIPS extensions to the MIPS32 instruction set, which +provides a number of new instructions which target smartcard and +cryptographic applications. This is equivalent to putting +@code{.set smartmips} at the start of the assembly file. +@samp{-mno-smartmips} turns off this option. + +@item -mips3d +@itemx -no-mips3d +Generate code for the MIPS-3D Application Specific Extension. +This tells the assembler to accept MIPS-3D instructions. +@samp{-no-mips3d} turns off this option. + +@item -mdmx +@itemx -no-mdmx +Generate code for the MDMX Application Specific Extension. +This tells the assembler to accept MDMX instructions. +@samp{-no-mdmx} turns off this option. + +@item -mdsp +@itemx -mno-dsp +Generate code for the DSP Release 1 Application Specific Extension. +This tells the assembler to accept DSP Release 1 instructions. +@samp{-mno-dsp} turns off this option. + +@item -mdspr2 +@itemx -mno-dspr2 +Generate code for the DSP Release 2 Application Specific Extension. +This option implies -mdsp. +This tells the assembler to accept DSP Release 2 instructions. +@samp{-mno-dspr2} turns off this option. + +@item -mmt +@itemx -mno-mt +Generate code for the MT Application Specific Extension. +This tells the assembler to accept MT instructions. +@samp{-mno-mt} turns off this option. + +@item -mmcu +@itemx -mno-mcu +Generate code for the MCU Application Specific Extension. +This tells the assembler to accept MCU instructions. +@samp{-mno-mcu} turns off this option. + +@item -mmsa +@itemx -mno-msa +Generate code for the MIPS SIMD Architecture Extension. +This tells the assembler to accept MSA instructions. +@samp{-mno-msa} turns off this option. + +@item -mvirt +@itemx -mno-virt +Generate code for the Virtualization Application Specific Extension. +This tells the assembler to accept Virtualization instructions. +@samp{-mno-virt} turns off this option. + +@item -minsn32 +@itemx -mno-insn32 +Only use 32-bit instruction encodings when generating code for the +microMIPS processor. This option inhibits the use of any 16-bit +instructions. This is equivalent to putting @code{.set insn32} at +the start of the assembly file. @samp{-mno-insn32} turns off this +option. This is equivalent to putting @code{.set noinsn32} at the +start of the assembly file. By default @samp{-mno-insn32} is +selected, allowing all instructions to be used. + +@item -mfix7000 +@itemx -mno-fix7000 +Cause nops to be inserted if the read of the destination register +of an mfhi or mflo instruction occurs in the following two instructions. + +@item -mfix-loongson2f-jump +@itemx -mno-fix-loongson2f-jump +Eliminate instruction fetch from outside 256M region to work around the +Loongson2F @samp{jump} instructions. Without it, under extreme cases, +the kernel may crash. The issue has been solved in latest processor +batches, but this fix has no side effect to them. + +@item -mfix-loongson2f-nop +@itemx -mno-fix-loongson2f-nop +Replace nops by @code{or at,at,zero} to work around the Loongson2F +@samp{nop} errata. Without it, under extreme cases, the CPU might +deadlock. The issue has been solved in later Loongson2F batches, but +this fix has no side effect to them. + +@item -mfix-vr4120 +@itemx -mno-fix-vr4120 +Insert nops to work around certain VR4120 errata. This option is +intended to be used on GCC-generated code: it is not designed to catch +all problems in hand-written assembler code. + +@item -mfix-vr4130 +@itemx -mno-fix-vr4130 +Insert nops to work around the VR4130 @samp{mflo}/@samp{mfhi} errata. + +@item -mfix-24k +@itemx -mno-fix-24k +Insert nops to work around the 24K @samp{eret}/@samp{deret} errata. + +@item -mfix-cn63xxp1 +@itemx -mno-fix-cn63xxp1 +Replace @code{pref} hints 0 - 4 and 6 - 24 with hint 28 to work around +certain CN63XXP1 errata. + +@item -m4010 +@itemx -no-m4010 +Generate code for the LSI R4010 chip. This tells the assembler to +accept the 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 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 -m3900 +@itemx -no-m3900 +@itemx -m4100 +@itemx -no-m4100 +For each option @samp{-m@var{nnnn}}, generate code for the MIPS +R@var{nnnn} chip. This tells the assembler to accept instructions +specific to that chip, and to schedule for that chip's hazards. + +@item -march=@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, +vr4120, +vr4130, +vr4181, +4300, +4400, +4600, +4650, +5000, +rm5200, +rm5230, +rm5231, +rm5261, +rm5721, +vr5400, +vr5500, +6000, +rm7000, +8000, +rm9000, +10000, +12000, +14000, +16000, +4kc, +4km, +4kp, +4ksc, +4kec, +4kem, +4kep, +4ksd, +m4k, +m4kp, +m14k, +m14kc, +m14ke, +m14kec, +24kc, +24kf2_1, +24kf, +24kf1_1, +24kec, +24kef2_1, +24kef, +24kef1_1, +34kc, +34kf2_1, +34kf, +34kf1_1, +34kn, +74kc, +74kf2_1, +74kf, +74kf1_1, +74kf3_2, +1004kc, +1004kf2_1, +1004kf, +1004kf1_1, +5kc, +5kf, +20kc, +25kf, +sb1, +sb1a, +loongson2e, +loongson2f, +loongson3a, +octeon, +octeon+, +octeon2, +xlr, +xlp +@end quotation + +For compatibility reasons, @samp{@var{n}x} and @samp{@var{b}fx} are +accepted as synonyms for @samp{@var{n}f1_1}. These values are +deprecated. + +@item -mtune=@var{cpu} +Schedule and tune for a particular MIPS CPU. Valid @var{cpu} values are +identical to @samp{-march=@var{cpu}}. + +@item -mabi=@var{abi} +Record which ABI the source code uses. The recognized arguments +are: @samp{32}, @samp{n32}, @samp{o64}, @samp{64} and @samp{eabi}. + +@item -msym32 +@itemx -mno-sym32 +@cindex -msym32 +@cindex -mno-sym32 +Equivalent to adding @code{.set sym32} or @code{.set nosym32} to +the beginning of the assembler input. @xref{MIPS Symbol Sizes}. + +@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 -msoft-float +@itemx -mhard-float +Disable or enable floating-point instructions. Note that by default +floating-point instructions are always allowed even with CPU targets +that don't have support for these instructions. + +@item -msingle-float +@itemx -mdouble-float +Disable or enable double-precision floating-point operations. Note +that by default double-precision floating-point operations are always +allowed even with CPU targets that don't have support for these +operations. + +@item --construct-floats +@itemx --no-construct-floats +The @code{--no-construct-floats} option disables the construction of +double width floating point constants by loading the two halves of the +value into the two single width floating point registers that make up +the double width register. This feature is useful if the processor +support the FR bit in its status register, and this bit is known (by +the programmer) to be set. This bit prevents the aliasing of the double +width register by the single width registers. + +By default @code{--construct-floats} is selected, allowing construction +of these floating point constants. + +@item --relax-branch +@itemx --no-relax-branch +The @samp{--relax-branch} option enables the relaxation of out-of-range +branches. Any branches whose target cannot be reached directly are +converted to a small instruction sequence including an inverse-condition +branch to the physically next instruction, and a jump to the original +target is inserted between the two instructions. In PIC code the jump +will involve further instructions for address calculation. + +The @code{BC1ANY2F}, @code{BC1ANY2T}, @code{BC1ANY4F}, @code{BC1ANY4T}, +@code{BPOSGE32} and @code{BPOSGE64} instructions are excluded from +relaxation, because they have no complementing counterparts. They could +be relaxed with the use of a longer sequence involving another branch, +however this has not been implemented and if their target turns out of +reach, they produce an error even if branch relaxation is enabled. + +Also no MIPS16 branches are ever relaxed. + +By default @samp{--no-relax-branch} is selected, causing any out-of-range +branches to produce an error. + +@cindex @option{-mnan=} command line option, MIPS +@item -mnan=@var{encoding} +This option indicates whether the source code uses the IEEE 2008 +NaN encoding (@option{-mnan=2008}) or the original MIPS encoding +(@option{-mnan=legacy}). It is equivalent to adding a @code{.nan} +directive to the beginning of the source file. @xref{MIPS NaN Encodings}. + +@option{-mnan=legacy} is the default if no @option{-mnan} option or +@code{.nan} directive is used. + +@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. + +@item -mpdr +@itemx -mno-pdr +Control generation of @code{.pdr} sections. Off by default on IRIX, on +elsewhere. + +@item -mshared +@itemx -mno-shared +When generating code using the Unix calling conventions (selected by +@samp{-KPIC} or @samp{-mcall_shared}), gas will normally generate code +which can go into a shared library. The @samp{-mno-shared} option +tells gas to generate code which uses the calling convention, but can +not go into a shared library. The resulting code is slightly more +efficient. This option only affects the handling of the +@samp{.cpload} and @samp{.cpsetup} pseudo-ops. +@end table + +@node MIPS Macros +@section High-level assembly macros + +MIPS assemblers have traditionally provided a wider range of +instructions than the MIPS architecture itself. These extra +instructions are usually referred to as ``macro'' instructions +@footnote{The term ``macro'' is somewhat overloaded here, since +these macros have no relation to those defined by @code{.macro}, +@pxref{Macro,, @code{.macro}}.}. + +Some MIPS macro instructions extend an underlying architectural instruction +while others are entirely new. An example of the former type is @code{and}, +which allows the third operand to be either a register or an arbitrary +immediate value. Examples of the latter type include @code{bgt}, which +branches to the third operand when the first operand is greater than +the second operand, and @code{ulh}, which implements an unaligned +2-byte load. + +One of the most common extensions provided by macros is to expand +memory offsets to the full address range (32 or 64 bits) and to allow +symbolic offsets such as @samp{my_data + 4} to be used in place of +integer constants. For example, the architectural instruction +@code{lbu} allows only a signed 16-bit offset, whereas the macro +@code{lbu} allows code such as @samp{lbu $4,array+32769($5)}. +The implementation of these symbolic offsets depends on several factors, +such as whether the assembler is generating SVR4-style PIC (selected by +@option{-KPIC}, @pxref{MIPS Options,, Assembler options}), the size of symbols +(@pxref{MIPS Symbol Sizes,, Directives to override the size of symbols}), +and the small data limit (@pxref{MIPS Small Data,, Controlling the use +of small data accesses}). + +@kindex @code{.set macro} +@kindex @code{.set nomacro} +Sometimes it is undesirable to have one assembly instruction expand +to several machine instructions. The directive @code{.set nomacro} +tells the assembler to warn when this happens. @code{.set macro} +restores the default behavior. + +@cindex @code{at} register, MIPS +@kindex @code{.set at=@var{reg}} +Some macro instructions need a temporary register to store intermediate +results. This register is usually @code{$1}, also known as @code{$at}, +but it can be changed to any core register @var{reg} using +@code{.set at=@var{reg}}. Note that @code{$at} always refers +to @code{$1} regardless of which register is being used as the +temporary register. + +@kindex @code{.set at} +@kindex @code{.set noat} +Implicit uses of the temporary register in macros could interfere with +explicit uses in the assembly code. The assembler therefore warns +whenever it sees an explicit use of the temporary register. The directive +@code{.set noat} silences this warning while @code{.set at} restores +the default behavior. It is safe to use @code{.set noat} while +@code{.set nomacro} is in effect since single-instruction macros +never need a temporary register. + +Note that while the @sc{gnu} assembler provides these macros for compatibility, +it does not make any attempt to optimize them with the surrounding code. + +@node MIPS Symbol Sizes +@section Directives to override the size of symbols + +@kindex @code{.set sym32} +@kindex @code{.set nosym32} +The n64 ABI allows symbols to have any 64-bit value. Although this +provides a great deal of flexibility, it means that some macros have +much longer expansions than their 32-bit counterparts. For example, +the non-PIC expansion of @samp{dla $4,sym} is usually: + +@smallexample +lui $4,%highest(sym) +lui $1,%hi(sym) +daddiu $4,$4,%higher(sym) +daddiu $1,$1,%lo(sym) +dsll32 $4,$4,0 +daddu $4,$4,$1 +@end smallexample + +whereas the 32-bit expansion is simply: + +@smallexample +lui $4,%hi(sym) +daddiu $4,$4,%lo(sym) +@end smallexample + +n64 code is sometimes constructed in such a way that all symbolic +constants are known to have 32-bit values, and in such cases, it's +preferable to use the 32-bit expansion instead of the 64-bit +expansion. + +You can use the @code{.set sym32} directive to tell the assembler +that, from this point on, all expressions of the form +@samp{@var{symbol}} or @samp{@var{symbol} + @var{offset}} +have 32-bit values. For example: + +@smallexample +.set sym32 +dla $4,sym +lw $4,sym+16 +sw $4,sym+0x8000($4) +@end smallexample + +will cause the assembler to treat @samp{sym}, @code{sym+16} and +@code{sym+0x8000} as 32-bit values. The handling of non-symbolic +addresses is not affected. + +The directive @code{.set nosym32} ends a @code{.set sym32} block and +reverts to the normal behavior. It is also possible to change the +symbol size using the command-line options @option{-msym32} and +@option{-mno-sym32}. + +These options and directives are always accepted, but at present, +they have no effect for anything other than n64. + +@node MIPS Small Data +@section Controlling the use of small data accesses + +@c This section deliberately glosses over the possibility of using -G +@c in SVR4-style PIC, as could be done on IRIX. We don't support that. +@cindex small data, MIPS +@cindex @code{gp} register, MIPS +It often takes several instructions to load the address of a symbol. +For example, when @samp{addr} is a 32-bit symbol, the non-PIC expansion +of @samp{dla $4,addr} is usually: + +@smallexample +lui $4,%hi(addr) +daddiu $4,$4,%lo(addr) +@end smallexample + +The sequence is much longer when @samp{addr} is a 64-bit symbol. +@xref{MIPS Symbol Sizes,, Directives to override the size of symbols}. + +In order to cut down on this overhead, most embedded MIPS systems +set aside a 64-kilobyte ``small data'' area and guarantee that all +data of size @var{n} and smaller will be placed in that area. +The limit @var{n} is passed to both the assembler and the linker +using the command-line option @option{-G @var{n}}, @pxref{MIPS Options,, +Assembler options}. Note that the same value of @var{n} must be used +when linking and when assembling all input files to the link; any +inconsistency could cause a relocation overflow error. + +The size of an object in the @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, while leaving @code{sym} otherwise undefined. + +When no @option{-G} option is given, the default limit is 8 bytes. +The option @option{-G 0} prevents any data from being automatically +classified as small. + +It is also possible to mark specific objects as small by putting them +in the special sections @code{.sdata} and @code{.sbss}, which are +``small'' counterparts of @code{.data} and @code{.bss} respectively. +The toolchain will treat such data as small regardless of the +@option{-G} setting. + +On startup, systems that support a small data area are expected to +initialize register @code{$28}, also known as @code{$gp}, in such a +way that small data can be accessed using a 16-bit offset from that +register. For example, when @samp{addr} is small data, +the @samp{dla $4,addr} instruction above is equivalent to: + +@smallexample +daddiu $4,$28,%gp_rel(addr) +@end smallexample + +Small data is not supported for SVR4-style PIC. + +@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 MIPS Instruction Set Architecture level on the fly: @code{.set +mips@var{n}}. @var{n} should be a number from 0 to 5, or 32, 32r2, 64 +or 64r2. +The values other than 0 make the assembler accept instructions +for the corresponding ISA level, from that point on in the +assembly. @code{.set mips@var{n}} affects not only which instructions +are permitted, but also how certain macros are expanded. @code{.set +mips0} restores the ISA level to its original level: either the +level you selected with command line options, or the default for your +configuration. You can use this feature to permit specific MIPS III +instructions while assembling in 32 bit mode. Use this directive with +care! + +@cindex MIPS CPU override +@kindex @code{.set arch=@var{cpu}} +The @code{.set arch=@var{cpu}} directive provides even finer control. +It changes the effective CPU target and allows the assembler to use +instructions specific to a particular CPU. All CPUs supported by the +@samp{-march} command line option are also selectable by this directive. +The original value is restored by @code{.set arch=default}. + +The directive @code{.set mips16} puts the assembler into MIPS 16 mode, +in which it will assemble instructions for the MIPS 16 processor. Use +@code{.set nomips16} to return to normal 32 bit mode. + +Traditional MIPS assemblers do not support this directive. + +The directive @code{.set micromips} puts the assembler into microMIPS mode, +in which it will assemble instructions for the microMIPS processor. Use +@code{.set nomicromips} to return to normal 32 bit mode. + +Traditional MIPS assemblers do not support this directive. + +@node MIPS assembly options +@section Directives to control code generation + +@cindex MIPS 32-bit microMIPS instruction generation override +@kindex @code{.set insn32} +@kindex @code{.set noinsn32} +The directive @code{.set insn32} makes the assembler only use 32-bit +instruction encodings when generating code for the microMIPS processor. +This directive inhibits the use of any 16-bit instructions from that +point on in the assembly. The @code{.set noinsn32} directive allows +16-bit instructions to be accepted. + +Traditional 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 @code{.set noautoextend} will turn this +off. When @code{.set noautoextend} is in effect, any 32 bit instruction +must be explicitly extended with the @code{.e} modifier (e.g., +@code{li.e $4,1000}). The directive @code{.set autoextend} may be used +to once again automatically extend instructions when necessary. + +This directive is only meaningful when in MIPS 16 mode. Traditional +MIPS assemblers do not support this directive. + +@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 and +microMIPS modes: 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. + +@kindex @code{.global} +The @code{.global} and @code{.globl} directives supported by +@code{@value{AS}} will by default mark the symbol as pointing to a +region of data not code. This means that, for example, any +instructions following such a symbol will not be disassembled by +@code{objdump} as it will regard them as data. To change this +behaviour an optional section name can be placed after the symbol name +in the @code{.global} directive. If this section exists and is known +to be a code section, then the symbol will be marked as poiting at +code not data. Ie the syntax for the directive is: + + @code{.global @var{symbol}[ @var{section}][, @var{symbol}[ @var{section}]] ...}, + +Here is a short example: + +@example + .global foo .text, bar, baz .data +foo: + nop +bar: + .word 0x0 +baz: + .word 0x1 + +@end example + +@node MIPS NaN Encodings +@section Directives to record which NaN encoding is being used + +@cindex MIPS IEEE 754 NaN data encoding selection +@cindex @code{.nan} directive, MIPS +The IEEE 754 floating-point standard defines two types of not-a-number +(NaN) data: ``signalling'' NaNs and ``quiet'' NaNs. The original version +of the standard did not specify how these two types should be +distinguished. Most implementations followed the i387 model, in which +the first bit of the significand is set for quiet NaNs and clear for +signalling NaNs. However, the original MIPS implementation assigned the +opposite meaning to the bit, so that it was set for signalling NaNs and +clear for quiet NaNs. + +The 2008 revision of the standard formally suggested the i387 choice +and as from Sep 2012 the current release of the MIPS architecture +therefore optionally supports that form. Code that uses one NaN encoding +would usually be incompatible with code that uses the other NaN encoding, +so MIPS ELF objects have a flag (@code{EF_MIPS_NAN2008}) to record which +encoding is being used. + +Assembly files can use the @code{.nan} directive to select between the +two encodings. @samp{.nan 2008} says that the assembly file uses the +IEEE 754-2008 encoding while @samp{.nan legacy} says that the file uses +the original MIPS encoding. If several @code{.nan} directives are given, +the final setting is the one that is used. + +The command-line options @option{-mnan=legacy} and @option{-mnan=2008} +can be used instead of @samp{.nan legacy} and @samp{.nan 2008} +respectively. However, any @code{.nan} directive overrides the +command-line setting. + +@samp{.nan legacy} is the default if no @code{.nan} directive or +@option{-mnan} option is given. + +Note that @sc{gnu} @code{@value{AS}} does not produce NaNs itself and +therefore these directives do not affect code generation. They simply +control the setting of the @code{EF_MIPS_NAN2008} flag. + +Traditional MIPS assemblers do not support these directives. + +@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 MIPS assemblers do not support these directives. + +@node MIPS ASE Instruction Generation Overrides +@section Directives to control generation of MIPS ASE instructions + +@cindex MIPS MIPS-3D instruction generation override +@kindex @code{.set mips3d} +@kindex @code{.set nomips3d} +The directive @code{.set mips3d} makes the assembler accept instructions +from the MIPS-3D Application Specific Extension from that point on +in the assembly. The @code{.set nomips3d} directive prevents MIPS-3D +instructions from being accepted. + +@cindex SmartMIPS instruction generation override +@kindex @code{.set smartmips} +@kindex @code{.set nosmartmips} +The directive @code{.set smartmips} makes the assembler accept +instructions from the SmartMIPS Application Specific Extension to the +MIPS32 ISA from that point on in the assembly. The +@code{.set nosmartmips} directive prevents SmartMIPS instructions from +being accepted. + +@cindex MIPS MDMX instruction generation override +@kindex @code{.set mdmx} +@kindex @code{.set nomdmx} +The directive @code{.set mdmx} makes the assembler accept instructions +from the MDMX Application Specific Extension from that point on +in the assembly. The @code{.set nomdmx} directive prevents MDMX +instructions from being accepted. + +@cindex MIPS DSP Release 1 instruction generation override +@kindex @code{.set dsp} +@kindex @code{.set nodsp} +The directive @code{.set dsp} makes the assembler accept instructions +from the DSP Release 1 Application Specific Extension from that point +on in the assembly. The @code{.set nodsp} directive prevents DSP +Release 1 instructions from being accepted. + +@cindex MIPS DSP Release 2 instruction generation override +@kindex @code{.set dspr2} +@kindex @code{.set nodspr2} +The directive @code{.set dspr2} makes the assembler accept instructions +from the DSP Release 2 Application Specific Extension from that point +on in the assembly. This dirctive implies @code{.set dsp}. The +@code{.set nodspr2} directive prevents DSP Release 2 instructions from +being accepted. + +@cindex MIPS MT instruction generation override +@kindex @code{.set mt} +@kindex @code{.set nomt} +The directive @code{.set mt} makes the assembler accept instructions +from the MT Application Specific Extension from that point on +in the assembly. The @code{.set nomt} directive prevents MT +instructions from being accepted. + +@cindex MIPS MCU instruction generation override +@kindex @code{.set mcu} +@kindex @code{.set nomcu} +The directive @code{.set mcu} makes the assembler accept instructions +from the MCU Application Specific Extension from that point on +in the assembly. The @code{.set nomcu} directive prevents MCU +instructions from being accepted. + +@cindex MIPS SIMD Architecture instruction generation override +@kindex @code{.set msa} +@kindex @code{.set nomsa} +The directive @code{.set msa} makes the assembler accept instructions +from the MIPS SIMD Architecture Extension from that point on +in the assembly. The @code{.set nomsa} directive prevents MSA +instructions from being accepted. + +@cindex Virtualization instruction generation override +@kindex @code{.set virt} +@kindex @code{.set novirt} +The directive @code{.set virt} makes the assembler accept instructions +from the Virtualization Application Specific Extension from that point +on in the assembly. The @code{.set novirt} directive prevents Virtualization +instructions from being accepted. + +Traditional MIPS assemblers do not support these directives. + +@node MIPS Floating-Point +@section Directives to override floating-point options + +@cindex Disable floating-point instructions +@kindex @code{.set softfloat} +@kindex @code{.set hardfloat} +The directives @code{.set softfloat} and @code{.set hardfloat} provide +finer control of disabling and enabling float-point instructions. +These directives always override the default (that hard-float +instructions are accepted) or the command-line options +(@samp{-msoft-float} and @samp{-mhard-float}). + +@cindex Disable single-precision floating-point operations +@kindex @code{.set singlefloat} +@kindex @code{.set doublefloat} +The directives @code{.set singlefloat} and @code{.set doublefloat} +provide finer control of disabling and enabling double-precision +float-point operations. These directives always override the default +(that double-precision operations are accepted) or the command-line +options (@samp{-msingle-float} and @samp{-mdouble-float}). + +Traditional MIPS assemblers do not support these directives. + +@node MIPS Syntax +@section Syntactical considerations for the MIPS assembler +@menu +* MIPS-Chars:: Special Characters +@end menu + +@node MIPS-Chars +@subsection Special Characters + +@cindex line comment character, MIPS +@cindex MIPS 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, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a +preprocessor control command (@pxref{Preprocessing}). + +@cindex line separator, MIPS +@cindex statement separator, MIPS +@cindex MIPS line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-mmix.texi b/binutils-2.25/gas/doc/c-mmix.texi new file mode 100644 index 00000000..009f9d3e --- /dev/null +++ b/binutils-2.25/gas/doc/c-mmix.texi @@ -0,0 +1,589 @@ +@c Copyright 2001, 2002, 2003, 2006, 2011 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c MMIX description by Hans-Peter Nilsson, hp@bitrange.com +@ifset GENERIC +@page +@node MMIX-Dependent +@chapter MMIX Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter MMIX Dependent Features +@end ifclear + +@cindex MMIX support +@menu +* MMIX-Opts:: Command-line Options +* MMIX-Expand:: Instruction expansion +* MMIX-Syntax:: Syntax +* MMIX-mmixal:: Differences to @code{mmixal} syntax and semantics +@end menu + +@node MMIX-Opts +@section Command-line Options + +@cindex options, MMIX +@cindex MMIX options +The MMIX version of @code{@value{AS}} has some machine-dependent options. + +@cindex @samp{--fixed-special-register-names} command line option, MMIX +When @samp{--fixed-special-register-names} is specified, only the register +names specified in @ref{MMIX-Regs} are recognized in the instructions +@code{PUT} and @code{GET}. + +@cindex @samp{--globalize-symbols} command line option, MMIX +You can use the @samp{--globalize-symbols} to make all symbols global. +This option is useful when splitting up a @code{mmixal} program into +several files. + +@cindex @samp{--gnu-syntax} command line option, MMIX +The @samp{--gnu-syntax} turns off most syntax compatibility with +@code{mmixal}. Its usability is currently doubtful. + +@cindex @samp{--relax} command line option, MMIX +The @samp{--relax} option is not fully supported, but will eventually make +the object file prepared for linker relaxation. + +@cindex @samp{--no-predefined-syms} command line option, MMIX +If you want to avoid inadvertently calling a predefined symbol and would +rather get an error, for example when using @code{@value{AS}} with a +compiler or other machine-generated code, specify +@samp{--no-predefined-syms}. This turns off built-in predefined +definitions of all such symbols, including rounding-mode symbols, segment +symbols, @samp{BIT} symbols, and @code{TRAP} symbols used in @code{mmix} +``system calls''. It also turns off predefined special-register names, +except when used in @code{PUT} and @code{GET} instructions. + +@cindex @samp{--no-expand} command line option, MMIX +By default, some instructions are expanded to fit the size of the operand +or an external symbol (@pxref{MMIX-Expand}). By passing +@samp{--no-expand}, no such expansion will be done, instead causing errors +at link time if the operand does not fit. + +@cindex @samp{--no-merge-gregs} command line option, MMIX +The @code{mmixal} documentation (@pxref{mmixsite}) specifies that global +registers allocated with the @samp{GREG} directive (@pxref{MMIX-greg}) and +initialized to the same non-zero value, will refer to the same global +register. This isn't strictly enforceable in @code{@value{AS}} since the +final addresses aren't known until link-time, but it will do an effort +unless the @samp{--no-merge-gregs} option is specified. (Register merging +isn't yet implemented in @code{@value{LD}}.) + +@cindex @samp{-x} command line option, MMIX +@code{@value{AS}} will warn every time it expands an instruction to fit an +operand unless the option @samp{-x} is specified. It is believed that +this behaviour is more useful than just mimicking @code{mmixal}'s +behaviour, in which instructions are only expanded if the @samp{-x} option +is specified, and assembly fails otherwise, when an instruction needs to +be expanded. It needs to be kept in mind that @code{mmixal} is both an +assembler and linker, while @code{@value{AS}} will expand instructions +that at link stage can be contracted. (Though linker relaxation isn't yet +implemented in @code{@value{LD}}.) The option @samp{-x} also imples +@samp{--linker-allocated-gregs}. + +@cindex @samp{--no-pushj-stubs} command line option, MMIX +@cindex @samp{--no-stubs} command line option, MMIX +If instruction expansion is enabled, @code{@value{AS}} can expand a +@samp{PUSHJ} instruction into a series of instructions. The shortest +expansion is to not expand it, but just mark the call as redirectable to a +stub, which @code{@value{LD}} creates at link-time, but only if the +original @samp{PUSHJ} instruction is found not to reach the target. The +stub consists of the necessary instructions to form a jump to the target. +This happens if @code{@value{AS}} can assert that the @samp{PUSHJ} +instruction can reach such a stub. The option @samp{--no-pushj-stubs} +disables this shorter expansion, and the longer series of instructions is +then created at assembly-time. The option @samp{--no-stubs} is a synonym, +intended for compatibility with future releases, where generation of stubs +for other instructions may be implemented. + +@cindex @samp{--linker-allocated-gregs} command line option, MMIX +Usually a two-operand-expression (@pxref{GREG-base}) without a matching +@samp{GREG} directive is treated as an error by @code{@value{AS}}. When +the option @samp{--linker-allocated-gregs} is in effect, they are instead +passed through to the linker, which will allocate as many global registers +as is needed. + +@node MMIX-Expand +@section Instruction expansion + +@cindex instruction expansion, MMIX +When @code{@value{AS}} encounters an instruction with an operand that is +either not known or does not fit the operand size of the instruction, +@code{@value{AS}} (and @code{@value{LD}}) will expand the instruction into +a sequence of instructions semantically equivalent to the operand fitting +the instruction. Expansion will take place for the following +instructions: + +@table @asis +@item @samp{GETA} +Expands to a sequence of four instructions: @code{SETL}, @code{INCML}, +@code{INCMH} and @code{INCH}. The operand must be a multiple of four. +@item Conditional branches +A branch instruction is turned into a branch with the complemented +condition and prediction bit over five instructions; four instructions +setting @code{$255} to the operand value, which like with @code{GETA} must +be a multiple of four, and a final @code{GO $255,$255,0}. +@item @samp{PUSHJ} +Similar to expansion for conditional branches; four instructions set +@code{$255} to the operand value, followed by a @code{PUSHGO $255,$255,0}. +@item @samp{JMP} +Similar to conditional branches and @code{PUSHJ}. The final instruction +is @code{GO $255,$255,0}. +@end table + +The linker @code{@value{LD}} is expected to shrink these expansions for +code assembled with @samp{--relax} (though not currently implemented). + +@node MMIX-Syntax +@section Syntax + +The assembly syntax is supposed to be upward compatible with that +described in Sections 1.3 and 1.4 of @samp{The Art of Computer +Programming, Volume 1}. Draft versions of those chapters as well as other +MMIX information is located at +@anchor{mmixsite}@url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html}. +Most code examples from the mmixal package located there should work +unmodified when assembled and linked as single files, with a few +noteworthy exceptions (@pxref{MMIX-mmixal}). + +Before an instruction is emitted, the current location is aligned to the +next four-byte boundary. If a label is defined at the beginning of the +line, its value will be the aligned value. + +In addition to the traditional hex-prefix @samp{0x}, a hexadecimal number +can also be specified by the prefix character @samp{#}. + +After all operands to an MMIX instruction or directive have been +specified, the rest of the line is ignored, treated as a comment. + +@menu +* MMIX-Chars:: Special Characters +* MMIX-Symbols:: Symbols +* MMIX-Regs:: Register Names +* MMIX-Pseudos:: Assembler Directives +@end menu + +@node MMIX-Chars +@subsection Special Characters +@cindex line comment characters, MMIX +@cindex MMIX line comment characters + +The characters @samp{*} and @samp{#} are line comment characters; each +start a comment at the beginning of a line, but only at the beginning of a +line. A @samp{#} prefixes a hexadecimal number if found elsewhere on a +line. If a @samp{#} appears at the start of a line the whole line is +treated as a comment, but the line can also act as a logical line +number directive (@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +Two other characters, @samp{%} and @samp{!}, each start a comment anywhere +on the line. Thus you can't use the @samp{modulus} and @samp{not} +operators in expressions normally associated with these two characters. + +A @samp{;} is a line separator, treated as a new-line, so separate +instructions can be specified on a single line. + +@node MMIX-Symbols +@subsection Symbols +The character @samp{:} is permitted in identifiers. There are two +exceptions to it being treated as any other symbol character: if a symbol +begins with @samp{:}, it means that the symbol is in the global namespace +and that the current prefix should not be prepended to that symbol +(@pxref{MMIX-prefix}). The @samp{:} is then not considered part of the +symbol. For a symbol in the label position (first on a line), a @samp{:} +at the end of a symbol is silently stripped off. A label is permitted, +but not required, to be followed by a @samp{:}, as with many other +assembly formats. + +The character @samp{@@} in an expression, is a synonym for @samp{.}, the +current location. + +In addition to the common forward and backward local symbol formats +(@pxref{Symbol Names}), they can be specified with upper-case @samp{B} and +@samp{F}, as in @samp{8B} and @samp{9F}. A local label defined for the +current position is written with a @samp{H} appended to the number: +@smallexample +3H LDB $0,$1,2 +@end smallexample +This and traditional local-label formats cannot be mixed: a label must be +defined and referred to using the same format. + +There's a minor caveat: just as for the ordinary local symbols, the local +symbols are translated into ordinary symbols using control characters are +to hide the ordinal number of the symbol. Unfortunately, these symbols +are not translated back in error messages. Thus you may see confusing +error messages when local symbols are used. Control characters +@samp{\003} (control-C) and @samp{\004} (control-D) are used for the +MMIX-specific local-symbol syntax. + +The symbol @samp{Main} is handled specially; it is always global. + +By defining the symbols @samp{__.MMIX.start..text} and +@samp{__.MMIX.start..data}, the address of respectively the @samp{.text} +and @samp{.data} segments of the final program can be defined, though when +linking more than one object file, the code or data in the object file +containing the symbol is not guaranteed to be start at that position; just +the final executable. @xref{MMIX-loc}. + +@node MMIX-Regs +@subsection Register names +@cindex register names, MMIX +@cindex MMIX register names + +Local and global registers are specified as @samp{$0} to @samp{$255}. +The recognized special register names are @samp{rJ}, @samp{rA}, @samp{rB}, +@samp{rC}, @samp{rD}, @samp{rE}, @samp{rF}, @samp{rG}, @samp{rH}, +@samp{rI}, @samp{rK}, @samp{rL}, @samp{rM}, @samp{rN}, @samp{rO}, +@samp{rP}, @samp{rQ}, @samp{rR}, @samp{rS}, @samp{rT}, @samp{rU}, +@samp{rV}, @samp{rW}, @samp{rX}, @samp{rY}, @samp{rZ}, @samp{rBB}, +@samp{rTT}, @samp{rWW}, @samp{rXX}, @samp{rYY} and @samp{rZZ}. A leading +@samp{:} is optional for special register names. + +Local and global symbols can be equated to register names and used in +place of ordinary registers. + +Similarly for special registers, local and global symbols can be used. +Also, symbols equated from numbers and constant expressions are allowed in +place of a special register, except when either of the options +@code{--no-predefined-syms} and @code{--fixed-special-register-names} are +specified. Then only the special register names above are allowed for the +instructions having a special register operand; @code{GET} and @code{PUT}. + +@node MMIX-Pseudos +@subsection Assembler Directives +@cindex assembler directives, MMIX +@cindex pseudo-ops, MMIX +@cindex MMIX assembler directives +@cindex MMIX pseudo-ops + +@table @code +@item LOC +@cindex assembler directive LOC, MMIX +@cindex pseudo-op LOC, MMIX +@cindex MMIX assembler directive LOC +@cindex MMIX pseudo-op LOC + +@anchor{MMIX-loc} +The @code{LOC} directive sets the current location to the value of the +operand field, which may include changing sections. If the operand is a +constant, the section is set to either @code{.data} if the value is +@code{0x2000000000000000} or larger, else it is set to @code{.text}. +Within a section, the current location may only be changed to +monotonically higher addresses. A LOC expression must be a previously +defined symbol or a ``pure'' constant. + +An example, which sets the label @var{prev} to the current location, and +updates the current location to eight bytes forward: +@smallexample +prev LOC @@+8 +@end smallexample + +When a LOC has a constant as its operand, a symbol +@code{__.MMIX.start..text} or @code{__.MMIX.start..data} is defined +depending on the address as mentioned above. Each such symbol is +interpreted as special by the linker, locating the section at that +address. Note that if multiple files are linked, the first object file +with that section will be mapped to that address (not necessarily the file +with the LOC definition). + +@item LOCAL +@cindex assembler directive LOCAL, MMIX +@cindex pseudo-op LOCAL, MMIX +@cindex MMIX assembler directive LOCAL +@cindex MMIX pseudo-op LOCAL + +@anchor{MMIX-local} +Example: +@smallexample + LOCAL external_symbol + LOCAL 42 + .local asymbol +@end smallexample + +This directive-operation generates a link-time assertion that the operand +does not correspond to a global register. The operand is an expression +that at link-time resolves to a register symbol or a number. A number is +treated as the register having that number. There is one restriction on +the use of this directive: the pseudo-directive must be placed in a +section with contents, code or data. + +@item IS +@cindex assembler directive IS, MMIX +@cindex pseudo-op IS, MMIX +@cindex MMIX assembler directive IS +@cindex MMIX pseudo-op IS + +@anchor{MMIX-is} +The @code{IS} directive: +@smallexample +asymbol IS an_expression +@end smallexample +sets the symbol @samp{asymbol} to @samp{an_expression}. A symbol may not +be set more than once using this directive. Local labels may be set using +this directive, for example: +@smallexample +5H IS @@+4 +@end smallexample + +@item GREG +@cindex assembler directive GREG, MMIX +@cindex pseudo-op GREG, MMIX +@cindex MMIX assembler directive GREG +@cindex MMIX pseudo-op GREG + +@anchor{MMIX-greg} +This directive reserves a global register, gives it an initial value and +optionally gives it a symbolic name. Some examples: + +@smallexample +areg GREG +breg GREG data_value + GREG data_buffer + .greg creg, another_data_value +@end smallexample + +The symbolic register name can be used in place of a (non-special) +register. If a value isn't provided, it defaults to zero. Unless the +option @samp{--no-merge-gregs} is specified, non-zero registers allocated +with this directive may be eliminated by @code{@value{AS}}; another +register with the same value used in its place. +Any of the instructions +@samp{CSWAP}, +@samp{GO}, +@samp{LDA}, +@samp{LDBU}, +@samp{LDB}, +@samp{LDHT}, +@samp{LDOU}, +@samp{LDO}, +@samp{LDSF}, +@samp{LDTU}, +@samp{LDT}, +@samp{LDUNC}, +@samp{LDVTS}, +@samp{LDWU}, +@samp{LDW}, +@samp{PREGO}, +@samp{PRELD}, +@samp{PREST}, +@samp{PUSHGO}, +@samp{STBU}, +@samp{STB}, +@samp{STCO}, +@samp{STHT}, +@samp{STOU}, +@samp{STSF}, +@samp{STTU}, +@samp{STT}, +@samp{STUNC}, +@samp{SYNCD}, +@samp{SYNCID}, +can have a value nearby @anchor{GREG-base}an initial value in place of its +second and third operands. Here, ``nearby'' is defined as within the +range 0@dots{}255 from the initial value of such an allocated register. + +@smallexample +buffer1 BYTE 0,0,0,0,0 +buffer2 BYTE 0,0,0,0,0 + @dots{} + GREG buffer1 + LDOU $42,buffer2 +@end smallexample +In the example above, the @samp{Y} field of the @code{LDOUI} instruction +(LDOU with a constant Z) will be replaced with the global register +allocated for @samp{buffer1}, and the @samp{Z} field will have the value +5, the offset from @samp{buffer1} to @samp{buffer2}. The result is +equivalent to this code: +@smallexample +buffer1 BYTE 0,0,0,0,0 +buffer2 BYTE 0,0,0,0,0 + @dots{} +tmpreg GREG buffer1 + LDOU $42,tmpreg,(buffer2-buffer1) +@end smallexample + +Global registers allocated with this directive are allocated in order +higher-to-lower within a file. Other than that, the exact order of +register allocation and elimination is undefined. For example, the order +is undefined when more than one file with such directives are linked +together. With the options @samp{-x} and @samp{--linker-allocated-gregs}, +@samp{GREG} directives for two-operand cases like the one mentioned above +can be omitted. Sufficient global registers will then be allocated by the +linker. + +@item BYTE +@cindex assembler directive BYTE, MMIX +@cindex pseudo-op BYTE, MMIX +@cindex MMIX assembler directive BYTE +@cindex MMIX pseudo-op BYTE + +@anchor{MMIX-byte} +The @samp{BYTE} directive takes a series of operands separated by a comma. +If an operand is a string (@pxref{Strings}), each character of that string +is emitted as a byte. Other operands must be constant expressions without +forward references, in the range 0@dots{}255. If you need operands having +expressions with forward references, use @samp{.byte} (@pxref{Byte}). An +operand can be omitted, defaulting to a zero value. + +@item WYDE +@itemx TETRA +@itemx OCTA +@cindex assembler directive WYDE, MMIX +@cindex pseudo-op WYDE, MMIX +@cindex MMIX assembler directive WYDE +@cindex MMIX pseudo-op WYDE +@cindex assembler directive TETRA, MMIX +@cindex pseudo-op TETRA, MMIX +@cindex MMIX assembler directive TETRA +@cindex MMIX pseudo-op TETRA +@cindex assembler directive OCTA, MMIX +@cindex pseudo-op OCTA, MMIX +@cindex MMIX assembler directive OCTA +@cindex MMIX pseudo-op OCTA + +@anchor{MMIX-constants} +The directives @samp{WYDE}, @samp{TETRA} and @samp{OCTA} emit constants of +two, four and eight bytes size respectively. Before anything else happens +for the directive, the current location is aligned to the respective +constant-size boundary. If a label is defined at the beginning of the +line, its value will be that after the alignment. A single operand can be +omitted, defaulting to a zero value emitted for the directive. Operands +can be expressed as strings (@pxref{Strings}), in which case each +character in the string is emitted as a separate constant of the size +indicated by the directive. + +@item PREFIX +@cindex assembler directive PREFIX, MMIX +@cindex pseudo-op PREFIX, MMIX +@cindex MMIX assembler directive PREFIX +@cindex MMIX pseudo-op PREFIX + +@anchor{MMIX-prefix} +The @samp{PREFIX} directive sets a symbol name prefix to be prepended to +all symbols (except local symbols, @pxref{MMIX-Symbols}), that are not +prefixed with @samp{:}, until the next @samp{PREFIX} directive. Such +prefixes accumulate. For example, +@smallexample + PREFIX a + PREFIX b +c IS 0 +@end smallexample +defines a symbol @samp{abc} with the value 0. + +@item BSPEC +@itemx ESPEC +@cindex assembler directive BSPEC, MMIX +@cindex pseudo-op BSPEC, MMIX +@cindex MMIX assembler directive BSPEC +@cindex MMIX pseudo-op BSPEC +@cindex assembler directive ESPEC, MMIX +@cindex pseudo-op ESPEC, MMIX +@cindex MMIX assembler directive ESPEC +@cindex MMIX pseudo-op ESPEC + +@anchor{MMIX-spec} +A pair of @samp{BSPEC} and @samp{ESPEC} directives delimit a section of +special contents (without specified semantics). Example: +@smallexample + BSPEC 42 + TETRA 1,2,3 + ESPEC +@end smallexample +The single operand to @samp{BSPEC} must be number in the range +0@dots{}255. The @samp{BSPEC} number 80 is used by the GNU binutils +implementation. +@end table + +@node MMIX-mmixal +@section Differences to @code{mmixal} +@cindex mmixal differences +@cindex differences, mmixal + +The binutils @code{@value{AS}} and @code{@value{LD}} combination has a few +differences in function compared to @code{mmixal} (@pxref{mmixsite}). + +The replacement of a symbol with a GREG-allocated register +(@pxref{GREG-base}) is not handled the exactly same way in +@code{@value{AS}} as in @code{mmixal}. This is apparent in the +@code{mmixal} example file @code{inout.mms}, where different registers +with different offsets, eventually yielding the same address, are used in +the first instruction. This type of difference should however not affect +the function of any program unless it has specific assumptions about the +allocated register number. + +Line numbers (in the @samp{mmo} object format) are currently not +supported. + +Expression operator precedence is not that of mmixal: operator precedence +is that of the C programming language. It's recommended to use +parentheses to explicitly specify wanted operator precedence whenever more +than one type of operators are used. + +The serialize unary operator @code{&}, the fractional division operator +@samp{//}, the logical not operator @code{!} and the modulus operator +@samp{%} are not available. + +Symbols are not global by default, unless the option +@samp{--globalize-symbols} is passed. Use the @samp{.global} directive to +globalize symbols (@pxref{Global}). + +Operand syntax is a bit stricter with @code{@value{AS}} than +@code{mmixal}. For example, you can't say @code{addu 1,2,3}, instead you +must write @code{addu $1,$2,3}. + +You can't LOC to a lower address than those already visited +(i.e., ``backwards''). + +A LOC directive must come before any emitted code. + +Predefined symbols are visible as file-local symbols after use. (In the +ELF file, that is---the linked mmo file has no notion of a file-local +symbol.) + +Some mapping of constant expressions to sections in LOC expressions is +attempted, but that functionality is easily confused and should be avoided +unless compatibility with @code{mmixal} is required. A LOC expression to +@samp{0x2000000000000000} or higher, maps to the @samp{.data} section and +lower addresses map to the @samp{.text} section (@pxref{MMIX-loc}). + +The code and data areas are each contiguous. Sparse programs with +far-away LOC directives will take up the same amount of space as a +contiguous program with zeros filled in the gaps between the LOC +directives. If you need sparse programs, you might try and get the wanted +effect with a linker script and splitting up the code parts into sections +(@pxref{Section}). Assembly code for this, to be compatible with +@code{mmixal}, would look something like: +@smallexample + .if 0 + LOC away_expression + .else + .section away,"ax" + .fi +@end smallexample +@code{@value{AS}} will not execute the LOC directive and @code{mmixal} +ignores the lines with @code{.}. This construct can be used generally to +help compatibility. + +Symbols can't be defined twice--not even to the same value. + +Instruction mnemonics are recognized case-insensitive, though the +@samp{IS} and @samp{GREG} pseudo-operations must be specified in +upper-case characters. + +There's no unicode support. + +The following is a list of programs in @samp{mmix.tar.gz}, available at +@url{http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html}, last +checked with the version dated 2001-08-25 (md5sum +c393470cfc86fac040487d22d2bf0172) that assemble with @code{mmixal} but do +not assemble with @code{@value{AS}}: + +@table @code +@item silly.mms +LOC to a previous address. +@item sim.mms +Redefines symbol @samp{Done}. +@item test.mms +Uses the serial operator @samp{&}. +@end table diff --git a/binutils-2.25/gas/doc/c-msp430.texi b/binutils-2.25/gas/doc/c-msp430.texi new file mode 100644 index 00000000..2927add4 --- /dev/null +++ b/binutils-2.25/gas/doc/c-msp430.texi @@ -0,0 +1,363 @@ +@c Copyright 2002-2013 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 MSP430-Dependent +@chapter MSP 430 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter MSP 430 Dependent Features +@end ifclear + +@cindex MSP 430 support +@cindex 430 support +@menu +* MSP430 Options:: Options +* MSP430 Syntax:: Syntax +* MSP430 Floating Point:: Floating Point +* MSP430 Directives:: MSP 430 Machine Directives +* MSP430 Opcodes:: Opcodes +* MSP430 Profiling Capability:: Profiling Capability +@end menu + +@node MSP430 Options +@section Options +@cindex MSP 430 options (none) +@cindex options for MSP430 (none) +@table @code + +@item -mmcu +selects the mpu arch. If the architecture is 430Xv2 then this also +enables NOP generation unless the @option{-mN} is also specified. + +@item -mcpu +selects the cpu architecture. If the architecture is 430Xv2 then this +also enables NOP generation unless the @option{-mN} is also +specified. + +@item -mP +enables polymorph instructions handler. + +@item -mQ +enables relaxation at assembly time. DANGEROUS! + +@item -ml +indicates that the input uses the large code model. + +@item -mN +disables the generation of a NOP instruction following any instruction +that might change the interrupts enabled/disabled state. For the +430Xv2 architecture the instructions: @code{EINT}, @code{DINT}, +@code{BIC #8, SR}, @code{BIS #8, SR} and @code{MOV.W <>, SR} must be +followed by a NOP instruction in order to ensure the correct +processing of interrupts. By default generation of the NOP +instruction happens automatically, but this command line option +disables this behaviour. It is then up to the programmer to ensure +that interrupts are enabled and disabled correctly. + +@item -md +mark the object file as one that requires data to copied from ROM to +RAM at execution startup. Disabled by default. + +@end table + +@node MSP430 Syntax +@section Syntax +@menu +* MSP430-Macros:: Macros +* MSP430-Chars:: Special Characters +* MSP430-Regs:: Register Names +* MSP430-Ext:: Assembler Extensions +@end menu + +@node MSP430-Macros +@subsection Macros + +@cindex Macros, MSP 430 +@cindex MSP 430 macros +The macro syntax used on the MSP 430 is like that described in the MSP +430 Family Assembler Specification. Normal @code{@value{AS}} +macros should still work. + +Additional built-in macros are: + +@table @code + +@item llo(exp) +Extracts least significant word from 32-bit expression 'exp'. + +@item lhi(exp) +Extracts most significant word from 32-bit expression 'exp'. + +@item hlo(exp) +Extracts 3rd word from 64-bit expression 'exp'. + +@item hhi(exp) +Extracts 4rd word from 64-bit expression 'exp'. + +@end table + +They normally being used as an immediate source operand. +@smallexample + mov #llo(1), r10 ; == mov #1, r10 + mov #lhi(1), r10 ; == mov #0, r10 +@end smallexample + +@node MSP430-Chars +@subsection Special Characters + +@cindex line comment character, MSP 430 +@cindex MSP 430 line comment character +A semicolon (@samp{;}) appearing anywhere on a line starts a comment +that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but it can also be a logical line number +directive (@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex line separator, MSP 430 +@cindex statement separator, MSP 430 +@cindex MSP 430 line separator +Multiple statements can appear on the same line provided that they are +separated by the @samp{@{} character. + +@cindex identifiers, MSP 430 +@cindex MSP 430 identifiers +The character @samp{$} in jump instructions indicates current location and +implemented only for TI syntax compatibility. + +@node MSP430-Regs +@subsection Register Names + +@cindex MSP 430 register names +@cindex register names, MSP 430 +General-purpose registers are represented by predefined symbols of the +form @samp{r@var{N}} (for global registers), where @var{N} represents +a number between @code{0} and @code{15}. The leading +letters may be in either upper or lower case; for example, @samp{r13} +and @samp{R7} are both valid register names. + +@cindex special purpose registers, MSP 430 +Register names @samp{PC}, @samp{SP} and @samp{SR} cannot be used as register names +and will be treated as variables. Use @samp{r0}, @samp{r1}, and @samp{r2} instead. + + +@node MSP430-Ext +@subsection Assembler Extensions +@cindex MSP430 Assembler Extensions + +@table @code + +@item @@rN +As destination operand being treated as @samp{0(rn)} + +@item 0(rN) +As source operand being treated as @samp{@@rn} + +@item jCOND +N +Skips next N bytes followed by jump instruction and equivalent to +@samp{jCOND $+N+2} + +@end table + +Also, there are some instructions, which cannot be found in other assemblers. +These are branch instructions, which has different opcodes upon jump distance. +They all got PC relative addressing mode. + +@table @code +@item beq label +A polymorph instruction which is @samp{jeq label} in case if jump distance +within allowed range for cpu's jump instruction. If not, this unrolls into +a sequence of +@smallexample + jne $+6 + br label +@end smallexample + +@item bne label +A polymorph instruction which is @samp{jne label} or @samp{jeq +4; br label} + +@item blt label +A polymorph instruction which is @samp{jl label} or @samp{jge +4; br label} + +@item bltn label +A polymorph instruction which is @samp{jn label} or @samp{jn +2; jmp +4; br label} + +@item bltu label +A polymorph instruction which is @samp{jlo label} or @samp{jhs +2; br label} + +@item bge label +A polymorph instruction which is @samp{jge label} or @samp{jl +4; br label} + +@item bgeu label +A polymorph instruction which is @samp{jhs label} or @samp{jlo +4; br label} + +@item bgt label +A polymorph instruction which is @samp{jeq +2; jge label} or @samp{jeq +6; jl +4; br label} + +@item bgtu label +A polymorph instruction which is @samp{jeq +2; jhs label} or @samp{jeq +6; jlo +4; br label} + +@item bleu label +A polymorph instruction which is @samp{jeq label; jlo label} or @samp{jeq +2; jhs +4; br label} + +@item ble label +A polymorph instruction which is @samp{jeq label; jl label} or @samp{jeq +2; jge +4; br label} + +@item jump label +A polymorph instruction which is @samp{jmp label} or @samp{br label} +@end table + + +@node MSP430 Floating Point +@section Floating Point + +@cindex floating point, MSP 430 (@sc{ieee}) +@cindex MSP 430 floating point (@sc{ieee}) +The MSP 430 family uses @sc{ieee} 32-bit floating-point numbers. + +@node MSP430 Directives +@section MSP 430 Machine Directives + +@cindex machine directives, MSP 430 +@cindex MSP 430 machine directives +@table @code +@cindex @code{file} directive, MSP 430 +@item .file +This directive is ignored; it is accepted for compatibility with other +MSP 430 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 MSP 430 support. +@end quotation + +@cindex @code{line} directive, MSP 430 +@item .line +This directive is ignored; it is accepted for compatibility with other +MSP 430 assemblers. + +@cindex @code{arch} directive, MSP 430 +@item .arch +Sets the target microcontroller in the same way as the @option{-mmcu} +command line option. + +@cindex @code{cpu} directive, MSP 430 +@item .cpu +Sets the target architecture in the same way as the @option{-mcpu} +command line option. + +@cindex @code{profiler} directive, MSP 430 +@item .profiler +This directive instructs assembler to add new profile entry to the object file. + +@end table + +@node MSP430 Opcodes +@section Opcodes + +@cindex MSP 430 opcodes +@cindex opcodes for MSP 430 +@code{@value{AS}} implements all the standard MSP 430 opcodes. No +additional pseudo-instructions are needed on this family. + +For information on the 430 machine instruction set, see @cite{MSP430 +User's Manual, document slau049d}, Texas Instrument, Inc. + +@node MSP430 Profiling Capability +@section Profiling Capability + +@cindex MSP 430 profiling capability +@cindex profiling capability for MSP 430 +It is a performance hit to use gcc's profiling approach for this tiny target. +Even more -- jtag hardware facility does not perform any profiling functions. +However we've got gdb's built-in simulator where we can do anything. + +We define new section @samp{.profiler} which holds all profiling information. +We define new pseudo operation @samp{.profiler} which will instruct assembler to +add new profile entry to the object file. Profile should take place at the +present address. + +Pseudo operation format: + +@samp{.profiler flags,function_to_profile [, cycle_corrector, extra]} + + +where: + +@table @code + +@table @code + +@samp{flags} is a combination of the following characters: + +@item s +function entry +@item x +function exit +@item i +function is in init section +@item f +function is in fini section +@item l +library call +@item c +libc standard call +@item d +stack value demand +@item I +interrupt service routine +@item P +prologue start +@item p +prologue end +@item E +epilogue start +@item e +epilogue end +@item j +long jump / sjlj unwind +@item a +an arbitrary code fragment +@item t +extra parameter saved (a constant value like frame size) +@end table + +@item function_to_profile +a function address +@item cycle_corrector +a value which should be added to the cycle counter, zero if omitted. +@item extra +any extra parameter, zero if omitted. + +@end table + +For example: +@smallexample +.global fxx +.type fxx,@@function +fxx: +.LFrameOffset_fxx=0x08 +.profiler "scdP", fxx ; function entry. + ; we also demand stack value to be saved + push r11 + push r10 + push r9 + push r8 +.profiler "cdpt",fxx,0, .LFrameOffset_fxx ; check stack value at this point + ; (this is a prologue end) + ; note, that spare var filled with + ; the farme size + mov r15,r8 +... +.profiler cdE,fxx ; check stack + pop r8 + pop r9 + pop r10 + pop r11 +.profiler xcde,fxx,3 ; exit adds 3 to the cycle counter + ret ; cause 'ret' insn takes 3 cycles +@end smallexample diff --git a/binutils-2.25/gas/doc/c-mt.texi b/binutils-2.25/gas/doc/c-mt.texi new file mode 100644 index 00000000..02843f2c --- /dev/null +++ b/binutils-2.25/gas/doc/c-mt.texi @@ -0,0 +1,71 @@ +@c Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +@c 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 MT-Dependent +@chapter MT Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter MS1 Dependent Features +@end ifclear + +@cindex MT support +@menu +* MT Options:: Options +* MY Syntax:: Syntax +@end menu + +@node MT Options +@section Options +@cindex MT options (none) +@cindex options for MT (none) + +@table @code + +@cindex @code{-march=} command line option, MT +@item -march=@var{processor} +This option specifies the target processor. The assembler will issue an +error message if an attempt is made to assemble an instruction which +will not execute on the target processor. The following processor names are +recognized: +@code{ms1-64-001}, +@code{ms1-16-002}, +@code{ms1-16-003}, +and @code{ms2}. + +@cindex @code{-nosched} command line option, MT +@item -nosched +This option disables scheduling restriction checking. + +@end table + +@node MT Syntax +@section Syntax +@menu +* MT-Chars:: Special Characters +@end menu + +@node MT-Chars +@subsection Special Characters + +@cindex line comment character, MT +@cindex MT line comment character +The presence of a @samp{;} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, MT +@cindex statement separator, MT +@cindex MT line separator +The MT assembler does not currently support a line separator +character. + diff --git a/binutils-2.25/gas/doc/c-nios2.texi b/binutils-2.25/gas/doc/c-nios2.texi new file mode 100644 index 00000000..1d45dd20 --- /dev/null +++ b/binutils-2.25/gas/doc/c-nios2.texi @@ -0,0 +1,249 @@ +@c Copyright 2012, 2013 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end +@ifset GENERIC +@page +@node NiosII-Dependent +@chapter Nios II Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter Nios II Dependent Features +@end ifclear + +@cindex Altera Nios II support +@cindex Nios support +@cindex Nios II support +@menu +* Nios II Options:: Options +* Nios II Syntax:: Syntax +* Nios II Relocations:: Relocations +* Nios II Directives:: Nios II Machine Directives +* Nios II Opcodes:: Opcodes +@end menu + +@node Nios II Options +@section Options +@cindex Nios II options +@cindex options for Nios II + +@c man begin OPTIONS +@table @gcctabopt + +@cindex @code{relax-section} command line option, Nios II +@item -relax-section +Replace identified out-of-range branches with PC-relative @code{jmp} +sequences when possible. The generated code sequences are suitable +for use in position-independent code, but there is a practical limit +on the extended branch range because of the length of the sequences. +This option is the default. + +@cindex @code{relax-all} command line option, Nios II +@item -relax-all +Replace branch instructions not determinable to be in range +and all call instructions with @code{jmp} and @code{callr} sequences +(respectively). This option generates absolute relocations against the +target symbols and is not appropriate for position-independent code. + +@cindex @code{no-relax} command line option, Nios II +@item -no-relax +Do not replace any branches or calls. + +@cindex @code{EB} command line option, Nios II +@item -EB +Generate big-endian output. + +@cindex @code{EL} command line option, Nios II +@item -EL +Generate little-endian output. This is the default. + +@end table +@c man end + +@node Nios II Syntax +@section Syntax +@menu +* Nios II Chars:: Special Characters +@end menu + + +@node Nios II Chars +@subsection Special Characters + +@cindex line comment character, Nios II +@cindex Nios II line comment character +@cindex line separator character, Nios II +@cindex Nios II line separator character +@samp{#} is the line comment character. +@samp{;} is the line separator character. + + +@node Nios II Relocations +@section Nios II Machine Relocations + +@cindex machine relocations, Nios II +@cindex Nios II machine relocations + +@table @code +@cindex @code{hiadj} directive, Nios II +@item %hiadj(@var{expression}) +Extract the upper 16 bits of @var{expression} and add +one if the 15th bit is set. + +The value of @code{%hiadj(@var{expression})} is: +@smallexample +((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01) +@end smallexample + +The @code{%hiadj} relocation is intended to be used with +the @code{addi}, @code{ld} or @code{st} instructions +along with a @code{%lo}, in order to load a 32-bit constant. + +@smallexample +movhi r2, %hiadj(symbol) +addi r2, r2, %lo(symbol) +@end smallexample + +@cindex @code{hi} directive, Nios II +@item %hi(@var{expression}) +Extract the upper 16 bits of @var{expression}. + +@cindex @code{lo} directive, Nios II +@item %lo(@var{expression}) +Extract the lower 16 bits of @var{expression}. + +@cindex @code{gprel} directive, Nios II +@item %gprel(@var{expression}) +Subtract the value of the symbol @code{_gp} from +@var{expression}. + +The intention of the @code{%gprel} relocation is +to have a fast small area of memory which only +takes a 16-bit immediate to access. + +@smallexample + .section .sdata +fastint: + .int 123 + .section .text + ldw r4, %gprel(fastint)(gp) +@end smallexample + +@cindex @code{call} directive, Nios II +@cindex @code{got} directive, Nios II +@cindex @code{gotoff} directive, Nios II +@cindex @code{gotoff_lo} directive, Nios II +@cindex @code{gotoff_hiadj} directive, Nios II +@cindex @code{tls_gd} directive, Nios II +@cindex @code{tls_ie} directive, Nios II +@cindex @code{tls_le} directive, Nios II +@cindex @code{tls_ldm} directive, Nios II +@cindex @code{tls_ldo} directive, Nios II +@item %call(@var{expression}) +@itemx %got(@var{expression}) +@itemx %gotoff(@var{expression}) +@itemx %gotoff_lo(@var{expression}) +@itemx %gotoff_hiadj(@var{expression}) +@itemx %tls_gd(@var{expression}) +@itemx %tls_ie(@var{expression}) +@itemx %tls_le(@var{expression}) +@itemx %tls_ldm(@var{expression}) +@itemx %tls_ldo(@var{expression}) + +These relocations support the ABI for Linux Systems documented in the +@cite{Nios II Processor Reference Handbook}. +@end table + + +@node Nios II Directives +@section Nios II Machine Directives + +@cindex machine directives, Nios II +@cindex Nios II machine directives + +@table @code + +@cindex @code{align} directive, Nios II +@item .align @var{expression} [, @var{expression}] +This is the generic @code{.align} directive, however +this aligns to a power of two. + +@cindex @code{half} directive, Nios II +@item .half @var{expression} +Create an aligned constant 2 bytes in size. + +@cindex @code{word} directive, Nios II +@item .word @var{expression} +Create an aligned constant 4 bytes in size. + +@cindex @code{dword} directive, Nios II +@item .dword @var{expression} +Create an aligned constant 8 bytes in size. + +@cindex @code{2byte} directive, Nios II +@item .2byte @var{expression} +Create an unaligned constant 2 bytes in size. + +@cindex @code{4byte} directive, Nios II +@item .4byte @var{expression} +Create an unaligned constant 4 bytes in size. + +@cindex @code{8byte} directive, Nios II +@item .8byte @var{expression} +Create an unaligned constant 8 bytes in size. + +@cindex @code{16byte} directive, Nios II +@item .16byte @var{expression} +Create an unaligned constant 16 bytes in size. + +@cindex @code{set noat} directive, Nios II +@item .set noat +Allows assembly code to use @code{at} register without +warning. Macro or relaxation expansions +generate warnings. + +@cindex @code{set at} directive, Nios II +@item .set at +Assembly code using @code{at} register generates +warnings, and macro expansion and relaxation are +enabled. + +@cindex @code{set nobreak} directive, Nios II +@item .set nobreak +Allows assembly code to use @code{ba} and @code{bt} +registers without warning. + +@cindex @code{set break} directive, Nios II +@item .set break +Turns warnings back on for using @code{ba} and @code{bt} +registers. + +@cindex @code{set norelax} directive, Nios II +@item .set norelax +Do not replace any branches or calls. + +@cindex @code{set relaxsection} directive, Nios II +@item .set relaxsection +Replace identified out-of-range branches with +@code{jmp} sequences (default). + +@cindex @code{set relaxall} directive, Nios II +@item .set relaxsection +Replace all branch and call instructions with +@code{jmp} and @code{callr} sequences. + +@cindex @code{set} directive, Nios II +@item .set @dots{} +All other @code{.set} are the normal use. + +@end table + +@node Nios II Opcodes +@section Opcodes + +@cindex Nios II opcodes +@cindex opcodes for Nios II +@code{@value{AS}} implements all the standard Nios II opcodes documented in the +@cite{Nios II Processor Reference Handbook}, including the assembler +pseudo-instructions. diff --git a/binutils-2.25/gas/doc/c-ns32k.texi b/binutils-2.25/gas/doc/c-ns32k.texi new file mode 100644 index 00000000..7b6544cc --- /dev/null +++ b/binutils-2.25/gas/doc/c-ns32k.texi @@ -0,0 +1,77 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 2002 +@c 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 understands 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 + +@ifset GENERIC +@page +@node NS32K-Dependent +@chapter NS32K Dependent Features +@end ifset + +@ifclear GENERIC +@node Machine Dependencies +@chapter NS32K Dependent Features +@end ifclear + +@cindex N32K support +@menu +* NS32K Syntax:: Syntax +@end menu + + +@node NS32K Syntax +@section Syntax +@menu +* NS32K-Chars:: Special Characters +@end menu + +@node NS32K-Chars +@subsection Special Characters + +@cindex line comment character, NS32K +@cindex NS32K line comment character +The presence of a @samp{#} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +If Sequent compatibility has been configured into the assembler then +the @samp{|} character appearing as the first character on a line will +also indicate the start of a line comment. + +@cindex line separator, NS32K +@cindex statement separator, NS32K +@cindex NS32K line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-pdp11.texi b/binutils-2.25/gas/doc/c-pdp11.texi new file mode 100644 index 00000000..c5e0c3de --- /dev/null +++ b/binutils-2.25/gas/doc/c-pdp11.texi @@ -0,0 +1,357 @@ +@c Copyright 2001, 2002, 2006 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 PDP-11-Dependent +@chapter PDP-11 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter PDP-11 Dependent Features +@end ifclear + +@cindex PDP-11 support + +@menu +* PDP-11-Options:: Options +* PDP-11-Pseudos:: Assembler Directives +* PDP-11-Syntax:: DEC Syntax versus BSD Syntax +* PDP-11-Mnemonics:: Instruction Naming +* PDP-11-Synthetic:: Synthetic Instructions +@end menu + +@node PDP-11-Options +@section Options + +@cindex options for PDP-11 + +The PDP-11 version of @code{@value{AS}} has a rich set of machine +dependent options. + +@subsection Code Generation Options + +@table @code +@cindex -mpic +@cindex -mno-pic +@item -mpic | -mno-pic +Generate position-independent (or position-dependent) code. + +The default is to generate position-independent code. +@end table + +@subsection Instruction Set Extension Options + +These options enables or disables the use of extensions over the base +line instruction set as introduced by the first PDP-11 CPU: the KA11. +Most options come in two variants: a @code{-m}@var{extension} that +enables @var{extension}, and a @code{-mno-}@var{extension} that disables +@var{extension}. + +The default is to enable all extensions. + +@table @code +@cindex -mall +@cindex -mall-extensions +@item -mall | -mall-extensions +Enable all instruction set extensions. + +@cindex -mno-extensions +@item -mno-extensions +Disable all instruction set extensions. + +@cindex -mcis +@cindex -mno-cis +@item -mcis | -mno-cis +Enable (or disable) the use of the commercial instruction set, which +consists of these instructions: @code{ADDNI}, @code{ADDN}, @code{ADDPI}, +@code{ADDP}, @code{ASHNI}, @code{ASHN}, @code{ASHPI}, @code{ASHP}, +@code{CMPCI}, @code{CMPC}, @code{CMPNI}, @code{CMPN}, @code{CMPPI}, +@code{CMPP}, @code{CVTLNI}, @code{CVTLN}, @code{CVTLPI}, @code{CVTLP}, +@code{CVTNLI}, @code{CVTNL}, @code{CVTNPI}, @code{CVTNP}, @code{CVTPLI}, +@code{CVTPL}, @code{CVTPNI}, @code{CVTPN}, @code{DIVPI}, @code{DIVP}, +@code{L2DR}, @code{L3DR}, @code{LOCCI}, @code{LOCC}, @code{MATCI}, +@code{MATC}, @code{MOVCI}, @code{MOVC}, @code{MOVRCI}, @code{MOVRC}, +@code{MOVTCI}, @code{MOVTC}, @code{MULPI}, @code{MULP}, @code{SCANCI}, +@code{SCANC}, @code{SKPCI}, @code{SKPC}, @code{SPANCI}, @code{SPANC}, +@code{SUBNI}, @code{SUBN}, @code{SUBPI}, and @code{SUBP}. + +@cindex -mcsm +@cindex -mno-csm +@item -mcsm | -mno-csm +Enable (or disable) the use of the @code{CSM} instruction. + +@cindex -meis +@cindex -mno-eis +@item -meis | -mno-eis +Enable (or disable) the use of the extended instruction set, which +consists of these instructions: @code{ASHC}, @code{ASH}, @code{DIV}, +@code{MARK}, @code{MUL}, @code{RTT}, @code{SOB} @code{SXT}, and +@code{XOR}. + +@cindex -mfis +@cindex -mno-fis +@cindex -mkev11 +@cindex -mkev11 +@cindex -mno-kev11 +@item -mfis | -mkev11 +@itemx -mno-fis | -mno-kev11 +Enable (or disable) the use of the KEV11 floating-point instructions: +@code{FADD}, @code{FDIV}, @code{FMUL}, and @code{FSUB}. + +@cindex -mfpp +@cindex -mno-fpp +@cindex -mfpu +@cindex -mno-fpu +@cindex -mfp-11 +@cindex -mno-fp-11 +@item -mfpp | -mfpu | -mfp-11 +@itemx -mno-fpp | -mno-fpu | -mno-fp-11 +Enable (or disable) the use of FP-11 floating-point instructions: +@code{ABSF}, @code{ADDF}, @code{CFCC}, @code{CLRF}, @code{CMPF}, +@code{DIVF}, @code{LDCFF}, @code{LDCIF}, @code{LDEXP}, @code{LDF}, +@code{LDFPS}, @code{MODF}, @code{MULF}, @code{NEGF}, @code{SETD}, +@code{SETF}, @code{SETI}, @code{SETL}, @code{STCFF}, @code{STCFI}, +@code{STEXP}, @code{STF}, @code{STFPS}, @code{STST}, @code{SUBF}, and +@code{TSTF}. + +@cindex -mlimited-eis +@cindex -mno-limited-eis +@item -mlimited-eis | -mno-limited-eis +Enable (or disable) the use of the limited extended instruction set: +@code{MARK}, @code{RTT}, @code{SOB}, @code{SXT}, and @code{XOR}. + +The -mno-limited-eis options also implies -mno-eis. + +@cindex -mmfpt +@cindex -mno-mfpt +@item -mmfpt | -mno-mfpt +Enable (or disable) the use of the @code{MFPT} instruction. + +@cindex -mmutiproc +@cindex -mno-mutiproc +@item -mmultiproc | -mno-multiproc +Enable (or disable) the use of multiprocessor instructions: @code{TSTSET} and +@code{WRTLCK}. + +@cindex -mmxps +@cindex -mno-mxps +@item -mmxps | -mno-mxps +Enable (or disable) the use of the @code{MFPS} and @code{MTPS} instructions. + +@cindex -mspl +@cindex -mno-spl +@item -mspl | -mno-spl +Enable (or disable) the use of the @code{SPL} instruction. + +@cindex -mmicrocode +@cindex -mno-microcode +Enable (or disable) the use of the microcode instructions: @code{LDUB}, +@code{MED}, and @code{XFC}. +@end table + +@subsection CPU Model Options + +These options enable the instruction set extensions supported by a +particular CPU, and disables all other extensions. + +@table @code +@cindex -mka11 +@item -mka11 +KA11 CPU. Base line instruction set only. + +@cindex -mkb11 +@item -mkb11 +KB11 CPU. Enable extended instruction set and @code{SPL}. + +@cindex -mkd11a +@item -mkd11a +KD11-A CPU. Enable limited extended instruction set. + +@cindex -mkd11b +@item -mkd11b +KD11-B CPU. Base line instruction set only. + +@cindex -mkd11d +@item -mkd11d +KD11-D CPU. Base line instruction set only. + +@cindex -mkd11e +@item -mkd11e +KD11-E CPU. Enable extended instruction set, @code{MFPS}, and @code{MTPS}. + +@cindex -mkd11f +@cindex -mkd11h +@cindex -mkd11q +@item -mkd11f | -mkd11h | -mkd11q +KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended instruction set, +@code{MFPS}, and @code{MTPS}. + +@cindex -mkd11k +@item -mkd11k +KD11-K CPU. Enable extended instruction set, @code{LDUB}, @code{MED}, +@code{MFPS}, @code{MFPT}, @code{MTPS}, and @code{XFC}. + +@cindex -mkd11z +@item -mkd11z +KD11-Z CPU. Enable extended instruction set, @code{CSM}, @code{MFPS}, +@code{MFPT}, @code{MTPS}, and @code{SPL}. + +@cindex -mf11 +@item -mf11 +F11 CPU. Enable extended instruction set, @code{MFPS}, @code{MFPT}, and +@code{MTPS}. + +@cindex -mj11 +@item -mj11 +J11 CPU. Enable extended instruction set, @code{CSM}, @code{MFPS}, +@code{MFPT}, @code{MTPS}, @code{SPL}, @code{TSTSET}, and @code{WRTLCK}. + +@cindex -mt11 +@item -mt11 +T11 CPU. Enable limited extended instruction set, @code{MFPS}, and +@code{MTPS}. +@end table + +@subsection Machine Model Options + +These options enable the instruction set extensions supported by a +particular machine model, and disables all other extensions. + +@table @code +@cindex -m11/03 +@item -m11/03 +Same as @code{-mkd11f}. + +@cindex -m11/04 +@item -m11/04 +Same as @code{-mkd11d}. + +@cindex -m11/05 +@cindex -m11/10 +@item -m11/05 | -m11/10 +Same as @code{-mkd11b}. + +@cindex -m11/15 +@cindex -m11/20 +@item -m11/15 | -m11/20 +Same as @code{-mka11}. + +@cindex -m11/21 +@item -m11/21 +Same as @code{-mt11}. + +@cindex -m11/23 +@cindex -m11/24 +@item -m11/23 | -m11/24 +Same as @code{-mf11}. + +@cindex -m11/34 +@item -m11/34 +Same as @code{-mkd11e}. + +@cindex -m11/34a +@item -m11/34a +Ame as @code{-mkd11e} @code{-mfpp}. + +@cindex -m11/35 +@cindex -m11/40 +@item -m11/35 | -m11/40 +Same as @code{-mkd11a}. + +@cindex -m11/44 +@item -m11/44 +Same as @code{-mkd11z}. + +@cindex -m11/45 +@cindex -m11/50 +@cindex -m11/55 +@cindex -m11/70 +@item -m11/45 | -m11/50 | -m11/55 | -m11/70 +Same as @code{-mkb11}. + +@cindex -m11/53 +@cindex -m11/73 +@cindex -m11/83 +@cindex -m11/84 +@cindex -m11/93 +@cindex -m11/94 +@item -m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94 +Same as @code{-mj11}. + +@cindex -m11/60 +@item -m11/60 +Same as @code{-mkd11k}. +@end table + +@node PDP-11-Pseudos +@section Assembler Directives + +The PDP-11 version of @code{@value{AS}} has a few machine +dependent assembler directives. + +@table @code +@item .bss +Switch to the @code{bss} section. + +@item .even +Align the location counter to an even number. +@end table + +@node PDP-11-Syntax +@section PDP-11 Assembly Language Syntax + +@cindex PDP-11 syntax + +@cindex DEC syntax +@cindex BSD syntax +@code{@value{AS}} supports both DEC syntax and BSD syntax. The only +difference is that in DEC syntax, a @code{#} character is used to denote +an immediate constants, while in BSD syntax the character for this +purpose is @code{$}. + +@cindex PDP-11 general-purpose register syntax +general-purpose registers are named @code{r0} through @code{r7}. +Mnemonic alternatives for @code{r6} and @code{r7} are @code{sp} and +@code{pc}, respectively. + +@cindex PDP-11 floating-point register syntax +Floating-point registers are named @code{ac0} through @code{ac3}, or +alternatively @code{fr0} through @code{fr3}. + +@cindex PDP-11 comments +Comments are started with a @code{#} or a @code{/} character, and extend +to the end of the line. (FIXME: clash with immediates?) + +@cindex PDP-11 line separator +Multiple statements on the same line can be separated by the @samp{;} character. + +@node PDP-11-Mnemonics +@section Instruction Naming + +@cindex PDP-11 instruction naming + +Some instructions have alternative names. + +@table @code +@item BCC +@code{BHIS} + +@item BCS +@code{BLO} + +@item L2DR +@code{L2D} + +@item L3DR +@code{L3D} + +@item SYS +@code{TRAP} +@end table + +@node PDP-11-Synthetic +@section Synthetic Instructions + +The @code{JBR} and @code{J}@var{CC} synthetic instructions are not +supported yet. diff --git a/binutils-2.25/gas/doc/c-pj.texi b/binutils-2.25/gas/doc/c-pj.texi new file mode 100644 index 00000000..dcf32ab9 --- /dev/null +++ b/binutils-2.25/gas/doc/c-pj.texi @@ -0,0 +1,52 @@ +@c Copyright 1999, 2002, 2011 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 +* PJ Syntax:: PJ Syntax +@end menu + +@node PJ Options +@section Options + +@cindex PJ options +@cindex options, PJ +@code{@value{AS}} has two additional 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 + +@node PJ Syntax +@section PJ Syntax +@menu +* PJ-Chars:: Special Characters +@end menu + +@node PJ-Chars +@subsection Special Characters + +@cindex line comment character, PJ +@cindex PJ line comment character +The presence of a @samp{!} or @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 then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, PJ +@cindex statement separator, PJ +@cindex PJ line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-ppc.texi b/binutils-2.25/gas/doc/c-ppc.texi new file mode 100644 index 00000000..c2209edc --- /dev/null +++ b/binutils-2.25/gas/doc/c-ppc.texi @@ -0,0 +1,231 @@ +@c Copyright 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +@c 2012 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end +@ifset GENERIC +@page +@node PPC-Dependent +@chapter PowerPC Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter PowerPC Dependent Features +@end ifclear + +@cindex PowerPC support +@menu +* PowerPC-Opts:: Options +* PowerPC-Pseudo:: PowerPC Assembler Directives +* PowerPC-Syntax:: PowerPC Syntax +@end menu + +@node PowerPC-Opts +@section Options + +@cindex options for PowerPC +@cindex PowerPC options +@cindex architectures, PowerPC +@cindex PowerPC architectures +The PowerPC chip family includes several successive levels, using the same +core instruction set, but including a few additional instructions at +each level. There are exceptions to this however. For details on what +instructions each variant supports, please see the chip's architecture +reference manual. + +The following table lists all available PowerPC options. + +@c man begin OPTIONS +@table @gcctabopt +@item -a32 +Generate ELF32 or XCOFF32. + +@item -a64 +Generate ELF64 or XCOFF64. + +@item -K PIC +Set EF_PPC_RELOCATABLE_LIB in ELF flags. + +@item -mpwrx | -mpwr2 +Generate code for POWER/2 (RIOS2). + +@item -mpwr +Generate code for POWER (RIOS1) + +@item -m601 +Generate code for PowerPC 601. + +@item -mppc, -mppc32, -m603, -m604 +Generate code for PowerPC 603/604. + +@item -m403, -m405 +Generate code for PowerPC 403/405. + +@item -m440 +Generate code for PowerPC 440. BookE and some 405 instructions. + +@item -m464 +Generate code for PowerPC 464. + +@item -m476 +Generate code for PowerPC 476. + +@item -m7400, -m7410, -m7450, -m7455 +Generate code for PowerPC 7400/7410/7450/7455. + +@item -m750cl +Generate code for PowerPC 750CL. + +@item -mppc64, -m620 +Generate code for PowerPC 620/625/630. + +@item -me500, -me500x2 +Generate code for Motorola e500 core complex. + +@item -me500mc +Generate code for Freescale e500mc core complex. + +@item -me500mc64 +Generate code for Freescale e500mc64 core complex. + +@item -me5500 +Generate code for Freescale e5500 core complex. + +@item -me6500 +Generate code for Freescale e6500 core complex. + +@item -mspe +Generate code for Motorola SPE instructions. + +@item -mtitan +Generate code for AppliedMicro Titan core complex. + +@item -mppc64bridge +Generate code for PowerPC 64, including bridge insns. + +@item -mbooke +Generate code for 32-bit BookE. + +@item -ma2 +Generate code for A2 architecture. + +@item -me300 +Generate code for PowerPC e300 family. + +@item -maltivec +Generate code for processors with AltiVec instructions. + +@item -mvle +Generate code for Freescale PowerPC VLE instructions. + +@item -mvsx +Generate code for processors with Vector-Scalar (VSX) instructions. + +@item -mhtm +Generate code for processors with Hardware Transactional Memory instructions. + +@item -mpower4, -mpwr4 +Generate code for Power4 architecture. + +@item -mpower5, -mpwr5, -mpwr5x +Generate code for Power5 architecture. + +@item -mpower6, -mpwr6 +Generate code for Power6 architecture. + +@item -mpower7, -mpwr7 +Generate code for Power7 architecture. + +@item -mpower8, -mpwr8 +Generate code for Power8 architecture. + +@item -mcell +@item -mcell +Generate code for Cell Broadband Engine architecture. + +@item -mcom +Generate code Power/PowerPC common instructions. + +@item -many +Generate code for any architecture (PWR/PWRX/PPC). + +@item -mregnames +Allow symbolic names for registers. + +@item -mno-regnames +Do not allow symbolic names for registers. + +@item -mrelocatable +Support for GCC's -mrelocatable option. + +@item -mrelocatable-lib +Support for GCC's -mrelocatable-lib option. + +@item -memb +Set PPC_EMB bit in ELF flags. + +@item -mlittle, -mlittle-endian, -le +Generate code for a little endian machine. + +@item -mbig, -mbig-endian, -be +Generate code for a big endian machine. + +@item -msolaris +Generate code for Solaris. + +@item -mno-solaris +Do not generate code for Solaris. + +@item -nops=@var{count} +If an alignment directive inserts more than @var{count} nops, put a +branch at the beginning to skip execution of the nops. +@end table +@c man end + + +@node PowerPC-Pseudo +@section PowerPC Assembler Directives + +@cindex directives for PowerPC +@cindex PowerPC directives +A number of assembler directives are available for PowerPC. The +following table is far from complete. + +@table @code +@item .machine "string" +This directive allows you to change the machine for which code is +generated. @code{"string"} may be any of the -m cpu selection options +(without the -m) enclosed in double quotes, @code{"push"}, or +@code{"pop"}. @code{.machine "push"} saves the currently selected +cpu, which may be restored with @code{.machine "pop"}. +@end table + +@node PowerPC-Syntax +@section PowerPC Syntax +@menu +* PowerPC-Chars:: Special Characters +@end menu + +@node PowerPC-Chars +@subsection Special Characters + +@cindex line comment character, PowerPC +@cindex PowerPC 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 then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +If the assembler has been configured for the ppc-*-solaris* target +then the @samp{!} character also acts as a line comment character. +This can be disabled via the @option{-mno-solaris} command line +option. + +@cindex line separator, PowerPC +@cindex statement separator, PowerPC +@cindex PowerPC line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-rl78.texi b/binutils-2.25/gas/doc/c-rl78.texi new file mode 100644 index 00000000..0964ac45 --- /dev/null +++ b/binutils-2.25/gas/doc/c-rl78.texi @@ -0,0 +1,126 @@ +@c Copyright 2011-2013 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 RL78-Dependent +@chapter RL78 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter RL78 Dependent Features +@end ifclear + +@cindex RL78 support +@menu +* RL78-Opts:: RL78 Assembler Command Line Options +* RL78-Modifiers:: Symbolic Operand Modifiers +* RL78-Directives:: Assembler Directives +* RL78-Syntax:: Syntax +@end menu + +@node RL78-Opts +@section RL78 Options +@cindex options, RL78 +@cindex RL78 options + +@table @code +@item relax +Enable support for link-time relaxation. + +@item mg10 +Mark the generated binary as targeting the G10 variant of the RL78 +architecture. + +@end table + +@node RL78-Modifiers +@section Symbolic Operand Modifiers + +@cindex RL78 modifiers +@cindex syntax, RL78 + +The RL78 has three modifiers that adjust the relocations used by the +linker: + +@table @code + +@item %lo16() + +When loading a 20-bit (or wider) address into registers, this modifier +selects the 16 least significant bits. + +@smallexample + movw ax,#%lo16(_sym) +@end smallexample + +@item %hi16() + +When loading a 20-bit (or wider) address into registers, this modifier +selects the 16 most significant bits. + +@smallexample + movw ax,#%hi16(_sym) +@end smallexample + +@item %hi8() + +When loading a 20-bit (or wider) address into registers, this modifier +selects the 8 bits that would go into CS or ES (i.e. bits 23..16). + +@smallexample + mov es, #%hi8(_sym) +@end smallexample + +@end table + +@node RL78-Directives +@section Assembler Directives + +@cindex assembler directives, RL78 +@cindex RL78 assembler directives + +In addition to the common directives, the RL78 adds these: + +@table @code + +@item .double +Output a constant in ``double'' format, which is a 32-bit floating +point value on RL78. + +@item .bss +Select the BSS section. + +@item .3byte +Output a constant value in a three byte format. + +@item .int +@itemx .word +Output a constant value in a four byte format. + +@end table + +@node RL78-Syntax +@section Syntax for the RL78 +@menu +* RL78-Chars:: Special Characters +@end menu + +@node RL78-Chars +@subsection Special Characters + +@cindex line comment character, RL78 +@cindex RL78 line comment character +The presence of a @samp{;} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, RL78 +@cindex statement separator, RL78 +@cindex RL78 line separator +The @samp{|} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-rx.texi b/binutils-2.25/gas/doc/c-rx.texi new file mode 100644 index 00000000..2b3ab396 --- /dev/null +++ b/binutils-2.25/gas/doc/c-rx.texi @@ -0,0 +1,237 @@ +@c Copyright 2008-2013 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 RX-Dependent +@chapter RX Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter RX Dependent Features +@end ifclear + +@cindex RX support +@menu +* RX-Opts:: RX Assembler Command Line Options +* RX-Modifiers:: Symbolic Operand Modifiers +* RX-Directives:: Assembler Directives +* RX-Float:: Floating Point +* RX-Syntax:: Syntax +@end menu + +@node RX-Opts +@section RX Options +@cindex options, RX +@cindex RX options + +The Renesas RX port of @code{@value{AS}} has a few target specfic +command line options: + +@table @code + +@cindex @samp{-m32bit-doubles} +@item -m32bit-doubles +This option controls the ABI and indicates to use a 32-bit float ABI. +It has no effect on the assembled instructions, but it does influence +the behaviour of the @samp{.double} pseudo-op. +This is the default. + +@cindex @samp{-m64bit-doubles} +@item -m64bit-doubles +This option controls the ABI and indicates to use a 64-bit float ABI. +It has no effect on the assembled instructions, but it does influence +the behaviour of the @samp{.double} pseudo-op. + +@cindex @samp{-mbig-endian} +@item -mbig-endian +This option controls the ABI and indicates to use a big-endian data +ABI. It has no effect on the assembled instructions, but it does +influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int}, +@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops. + +@cindex @samp{-mlittle-endian} +@item -mlittle-endian +This option controls the ABI and indicates to use a little-endian data +ABI. It has no effect on the assembled instructions, but it does +influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int}, +@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops. +This is the default. + +@cindex @samp{-muse-conventional-section-names} +@item -muse-conventional-section-names +This option controls the default names given to the code (.text), +initialised data (.data) and uninitialised data sections (.bss). + +@cindex @samp{-muse-renesas-section-names} +@item -muse-renesas-section-names +This option controls the default names given to the code (.P), +initialised data (.D_1) and uninitialised data sections (.B_1). +This is the default. + +@cindex @samp{-msmall-data-limit} +@item -msmall-data-limit +This option tells the assembler that the small data limit feature of +the RX port of GCC is being used. This results in the assembler +generating an undefined reference to a symbol called @code{__gp} for +use by the relocations that are needed to support the small data limit +feature. This option is not enabled by default as it would otherwise +pollute the symbol table. + +@cindex @samp{-mpid} +@item -mpid +This option tells the assembler that the position independent data of the +RX port of GCC is being used. This results in the assembler +generating an undefined reference to a symbol called @code{__pid_base}, +and also setting the RX_PID flag bit in the e_flags field of the ELF +header of the object file. + +@cindex @samp{-mint-register} +@item -mint-register=@var{num} +This option tells the assembler how many registers have been reserved +for use by interrupt handlers. This is needed in order to compute the +correct values for the @code{%gpreg} and @code{%pidreg} meta registers. + +@cindex @samp{-mgcc-abi} +@item -mgcc-abi +This option tells the assembler that the old GCC ABI is being used by +the assembled code. With this version of the ABI function arguments +that are passed on the stack are aligned to a 32-bit boundary. + +@cindex @samp{-mrx-abi} +@item -mrx-abi +This option tells the assembler that the official RX ABI is being used +by the assembled code. With this version of the ABI function +arguments that are passed on the stack are aligned to their natural +alignments. This option is the default. + +@cindex @samp{-mcpu=} +@item -mcpu=@var{name} +This option tells the assembler the target CPU type. Currently the +@code{rx200}, @code{rx600} and @code{rx610} are recognised as valid +cpu names. Attempting to assemble an instruction not supported by the +indicated cpu type will result in an error message being generated. + +@end table + +@node RX-Modifiers +@section Symbolic Operand Modifiers + +@cindex RX modifiers +@cindex syntax, RX +@cindex %gp + +The assembler supports one modifier when using symbol addresses +in RX instruction operands. The general syntax is the following: + +@smallexample +%gp(symbol) +@end smallexample + +The modifier returns the offset from the @var{__gp} symbol to the +specified symbol as a 16-bit value. The intent is that this offset +should be used in a register+offset move instruction when generating +references to small data. Ie, like this: + +@smallexample + mov.W %gp(_foo)[%gpreg], r1 +@end smallexample + +The assembler also supports two meta register names which can be used +to refer to registers whose values may not be known to the +programmer. These meta register names are: + +@table @code + +@cindex @samp{%gpreg} +@item %gpreg +The small data address register. + +@cindex @samp{%pidreg} +@item %pidreg +The PID base address register. + +@end table + +Both registers normally have the value r13, but this can change if +some registers have been reserved for use by interrupt handlers or if +both the small data limit and position independent data features are +being used at the same time. + +@node RX-Directives +@section Assembler Directives + +@cindex assembler directives, RX +@cindex RX assembler directives + +The RX version of @code{@value{AS}} has the following specific +assembler directives: + +@table @code + +@item .3byte +@cindex assembler directive .3byte, RX +@cindex RX assembler directive .3byte +Inserts a 3-byte value into the output file at the current location. + +@item .fetchalign +@cindex assembler directive .fetchalign, RX +@cindex RX assembler directive .fetchalign +If the next opcode following this directive spans a fetch line +boundary (8 byte boundary), the opcode is aligned to that boundary. +If the next opcode does not span a fetch line, this directive has no +effect. Note that one or more labels may be between this directive +and the opcode; those labels are aligned as well. Any inserted bytes +due to alignment will form a NOP opcode. + +@end table + +@node RX-Float +@section Floating Point + +@cindex floating point, RX +@cindex RX floating point + +The floating point formats generated by directives are these. + +@table @code +@cindex @code{float} directive, RX + +@item .float +@code{Single} precision (32-bit) floating point constants. + +@cindex @code{double} directive, RX +@item .double +If the @option{-m64bit-doubles} command line option has been specified +then then @code{double} directive generates @code{double} precision +(64-bit) floating point constants, otherwise it generates +@code{single} precision (32-bit) floating point constants. To force +the generation of 64-bit floating point constants used the @code{dc.d} +directive instead. + +@end table + +@node RX-Syntax +@section Syntax for the RX +@menu +* RX-Chars:: Special Characters +@end menu + +@node RX-Chars +@subsection Special Characters + +@cindex line comment character, RX +@cindex RX line comment character +The presence of a @samp{;} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, RX +@cindex statement separator, RX +@cindex RX line separator +The @samp{!} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-s390.texi b/binutils-2.25/gas/doc/c-s390.texi new file mode 100644 index 00000000..1935fb3e --- /dev/null +++ b/binutils-2.25/gas/doc/c-s390.texi @@ -0,0 +1,900 @@ +@c Copyright 2009, 2011 +@c 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 S/390-Dependent +@chapter IBM S/390 Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter IBM S/390 Dependent Features +@end ifclear + +@cindex s390 support + +The s390 version of @code{@value{AS}} supports two architectures modes +and seven chip levels. The architecture modes are the Enterprise System +Architecture (ESA) and the newer z/Architecture mode. The chip levels +are g5, g6, z900, z990, z9-109, z9-ec, z10, z196, and zEC12. + +@menu +* s390 Options:: Command-line Options. +* s390 Characters:: Special Characters. +* s390 Syntax:: Assembler Instruction syntax. +* s390 Directives:: Assembler Directives. +* s390 Floating Point:: Floating Point. +@end menu + +@node s390 Options +@section Options +@cindex options for s390 +@cindex s390 options + +The following table lists all available s390 specific options: + +@table @code +@cindex @samp{-m31} option, s390 +@cindex @samp{-m64} option, s390 +@item -m31 | -m64 +Select 31- or 64-bit ABI implying a word size of 32- or 64-bit. + +These options are only available with the ELF object file format, and +require that the necessary BFD support has been included (on a 31-bit +platform you must add --enable-64-bit-bfd on the call to the configure +script to enable 64-bit usage and use s390x as target platform). + +@cindex @samp{-mesa} option, s390 +@cindex @samp{-mzarch} option, s390 +@item -mesa | -mzarch +Select the architecture mode, either the Enterprise System Architecture +(esa) mode or the z/Architecture mode (zarch). + +The 64-bit instructions are only available with the z/Architecture mode. +The combination of @samp{-m64} and @samp{-mesa} results in a warning +message. + +@cindex @samp{-march=} option, s390 +@item -march=@var{CPU} +This option specifies the target processor. The following processor names +are recognized: +@code{g5}, +@code{g6}, +@code{z900}, +@code{z990}, +@code{z9-109}, +@code{z9-ec}, +@code{z10} and +@code{z196}. +Assembling an instruction that is not supported on the target processor +results in an error message. Do not specify @code{g5} or @code{g6} +with @samp{-mzarch}. + +@cindex @samp{-mregnames} option, s390 +@item -mregnames +Allow symbolic names for registers. + +@cindex @samp{-mno-regnames} option, s390 +@item -mno-regnames +Do not allow symbolic names for registers. + +@cindex @samp{-mwarn-areg-zero} option, s390 +@item -mwarn-areg-zero +Warn whenever the operand for a base or index register has been specified +but evaluates to zero. This can indicate the misuse of general purpose +register 0 as an address register. + +@end table + +@node s390 Characters +@section Special Characters +@cindex line comment character, s390 +@cindex s390 line comment character + +@samp{#} is the line comment character. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, s390 +@cindex statement separator, s390 +@cindex s390 line separator +The @samp{;} character can be used instead of a newline to separate +statements. + +@node s390 Syntax +@section Instruction syntax +@cindex instruction syntax, s390 +@cindex s390 instruction syntax + +The assembler syntax closely follows the syntax outlined in +Enterprise Systems Architecture/390 Principles of Operation (SA22-7201) +and the z/Architecture Principles of Operation (SA22-7832). + +Each instruction has two major parts, the instruction mnemonic +and the instruction operands. The instruction format varies. + +@menu +* s390 Register:: Register Naming +* s390 Mnemonics:: Instruction Mnemonics +* s390 Operands:: Instruction Operands +* s390 Formats:: Instruction Formats +* s390 Aliases:: Instruction Aliases +* s390 Operand Modifier:: Instruction Operand Modifier +* s390 Instruction Marker:: Instruction Marker +* s390 Literal Pool Entries:: Literal Pool Entries +@end menu + +@node s390 Register +@subsection Register naming +@cindex register naming, s390 +@cindex s390 register naming + +The @code{@value{AS}} recognizes a number of predefined symbols for the +various processor registers. A register specification in one of the +instruction formats is an unsigned integer between 0 and 15. The specific +instruction and the position of the register in the instruction format +denotes the type of the register. The register symbols are prefixed with +@samp{%}: + +@display +@multitable {%rN} {the 16 general purpose registers, 0 <= N <= 15} +@item %rN @tab the 16 general purpose registers, 0 <= N <= 15 +@item %fN @tab the 16 floating point registers, 0 <= N <= 15 +@item %aN @tab the 16 access registers, 0 <= N <= 15 +@item %cN @tab the 16 control registers, 0 <= N <= 15 +@item %lit @tab an alias for the general purpose register %r13 +@item %sp @tab an alias for the general purpose register %r15 +@end multitable +@end display + +@node s390 Mnemonics +@subsection Instruction Mnemonics +@cindex instruction mnemonics, s390 +@cindex s390 instruction mnemonics + +All instructions documented in the Principles of Operation are supported +with the mnemonic and order of operands as described. +The instruction mnemonic identifies the instruction format +(@ref{s390 Formats}) and the specific operation code for the instruction. +For example, the @samp{lr} mnemonic denotes the instruction format @samp{RR} +with the operation code @samp{0x18}. + +The definition of the various mnemonics follows a scheme, where the first +character usually hint at the type of the instruction: + +@display +@multitable {sla, sll} {if r is the last character the instruction operates on registers} +@item a @tab add instruction, for example @samp{al} for add logical 32-bit +@item b @tab branch instruction, for example @samp{bc} for branch on condition +@item c @tab compare or convert instruction, for example @samp{cr} for compare +register 32-bit +@item d @tab divide instruction, for example @samp{dlr} devide logical register +64-bit to 32-bit +@item i @tab insert instruction, for example @samp{ic} insert character +@item l @tab load instruction, for example @samp{ltr} load and test register +@item mv @tab move instruction, for example @samp{mvc} move character +@item m @tab multiply instruction, for example @samp{mh} multiply halfword +@item n @tab and instruction, for example @samp{ni} and immediate +@item o @tab or instruction, for example @samp{oc} or character +@item sla, sll @tab shift left single instruction +@item sra, srl @tab shift right single instruction +@item st @tab store instruction, for example @samp{stm} store multiple +@item s @tab subtract instruction, for example @samp{slr} subtract +logical 32-bit +@item t @tab test or translate instruction, of example @samp{tm} test under mask +@item x @tab exclusive or instruction, for example @samp{xc} exclusive or +character +@end multitable +@end display + +Certain characters at the end of the mnemonic may describe a property +of the instruction: + +@display +@multitable {c} {if r is the last character the instruction operates on registers} +@item c @tab the instruction uses a 8-bit character operand +@item f @tab the instruction extends a 32-bit operand to 64 bit +@item g @tab the operands are treated as 64-bit values +@item h @tab the operand uses a 16-bit halfword operand +@item i @tab the instruction uses an immediate operand +@item l @tab the instruction uses unsigned, logical operands +@item m @tab the instruction uses a mask or operates on multiple values +@item r @tab if r is the last character, the instruction operates on registers +@item y @tab the instruction uses 20-bit displacements +@end multitable +@end display + +There are many exceptions to the scheme outlined in the above lists, in +particular for the priviledged instructions. For non-priviledged +instruction it works quite well, for example the instruction @samp{clgfr} +c: compare instruction, l: unsigned operands, g: 64-bit operands, +f: 32- to 64-bit extension, r: register operands. The instruction compares +an 64-bit value in a register with the zero extended 32-bit value from +a second register. +For a complete list of all mnemonics see appendix B in the Principles +of Operation. + +@node s390 Operands +@subsection Instruction Operands +@cindex instruction operands, s390 +@cindex s390 instruction operands + +Instruction operands can be grouped into three classes, operands located +in registers, immediate operands, and operands in storage. + +A register operand can be located in general, floating-point, access, +or control register. The register is identified by a four-bit field. +The field containing the register operand is called the R field. + +Immediate operands are contained within the instruction and can have +8, 16 or 32 bits. The field containing the immediate operand is called +the I field. Dependent on the instruction the I field is either signed +or unsigned. + +A storage operand consists of an address and a length. The address of a +storage operands can be specified in any of these ways: + +@itemize +@item The content of a single general R +@item The sum of the content of a general register called the base +register B plus the content of a displacement field D +@item The sum of the contents of two general registers called the +index register X and the base register B plus the content of a +displacement field +@item The sum of the current instruction address and a 32-bit signed +immediate field multiplied by two. +@end itemize + +The length of a storage operand can be: + +@itemize +@item Implied by the instruction +@item Specified by a bitmask +@item Specified by a four-bit or eight-bit length field L +@item Specified by the content of a general register +@end itemize + +The notation for storage operand addresses formed from multiple fields is +as follows: + +@table @code +@item Dn(Bn) +the address for operand number n is formed from the content of general +register Bn called the base register and the displacement field Dn. +@item Dn(Xn,Bn) +the address for operand number n is formed from the content of general +register Xn called the index register, general register Bn called the +base register and the displacement field Dn. +@item Dn(Ln,Bn) +the address for operand number n is formed from the content of general +regiser Bn called the base register and the displacement field Dn. +The length of the operand n is specified by the field Ln. +@end table + +The base registers Bn and the index registers Xn of a storage operand can +be skipped. If Bn and Xn are skipped, a zero will be stored to the operand +field. The notation changes as follows: + +@display +@multitable @columnfractions 0.30 0.30 +@headitem full notation @tab short notation +@item Dn(0,Bn) @tab Dn(Bn) +@item Dn(0,0) @tab Dn +@item Dn(0) @tab Dn +@item Dn(Ln,0) @tab Dn(Ln) +@end multitable +@end display + + +@node s390 Formats +@subsection Instruction Formats +@cindex instruction formats, s390 +@cindex s390 instruction formats + +The Principles of Operation manuals lists 26 instruction formats where +some of the formats have multiple variants. For the @samp{.insn} +pseudo directive the assembler recognizes some of the formats. +Typically, the most general variant of the instruction format is used +by the @samp{.insn} directive. + +The following table lists the abbreviations used in the table of +instruction formats: + +@display +@multitable {OpCode / OpCd} {Displacement lower 12 bits for operand x.} +@item OpCode / OpCd @tab Part of the op code. +@item Bx @tab Base register number for operand x. +@item Dx @tab Displacement for operand x. +@item DLx @tab Displacement lower 12 bits for operand x. +@item DHx @tab Displacement higher 8-bits for operand x. +@item Rx @tab Register number for operand x. +@item Xx @tab Index register number for operand x. +@item Ix @tab Signed immediate for operand x. +@item Ux @tab Unsigned immediate for operand x. +@end multitable +@end display + +An instruction is two, four, or six bytes in length and must be aligned +on a 2 byte boundary. The first two bits of the instruction specify the +length of the instruction, 00 indicates a two byte instruction, 01 and 10 +indicates a four byte instruction, and 11 indicates a six byte instruction. + +The following table lists the s390 instruction formats that are available +with the @samp{.insn} pseudo directive: + +@table @code +@item E format +@verbatim ++-------------+ +| OpCode | ++-------------+ +0 15 +@end verbatim + +@item RI format: <insn> R1,I2 +@verbatim ++--------+----+----+------------------+ +| OpCode | R1 |OpCd| I2 | ++--------+----+----+------------------+ +0 8 12 16 31 +@end verbatim + +@item RIE format: <insn> R1,R3,I2 +@verbatim ++--------+----+----+------------------+--------+--------+ +| OpCode | R1 | R3 | I2 |////////| OpCode | ++--------+----+----+------------------+--------+--------+ +0 8 12 16 32 40 47 +@end verbatim + +@item RIL format: <insn> R1,I2 +@verbatim ++--------+----+----+------------------------------------+ +| OpCode | R1 |OpCd| I2 | ++--------+----+----+------------------------------------+ +0 8 12 16 47 +@end verbatim + +@item RILU format: <insn> R1,U2 +@verbatim ++--------+----+----+------------------------------------+ +| OpCode | R1 |OpCd| U2 | ++--------+----+----+------------------------------------+ +0 8 12 16 47 +@end verbatim + +@item RIS format: <insn> R1,I2,M3,D4(B4) +@verbatim ++--------+----+----+----+-------------+--------+--------+ +| OpCode | R1 | M3 | B4 | D4 | I2 | Opcode | ++--------+----+----+----+-------------+--------+--------+ +0 8 12 16 20 32 36 47 +@end verbatim + +@item RR format: <insn> R1,R2 +@verbatim ++--------+----+----+ +| OpCode | R1 | R2 | ++--------+----+----+ +0 8 12 15 +@end verbatim + +@item RRE format: <insn> R1,R2 +@verbatim ++------------------+--------+----+----+ +| OpCode |////////| R1 | R2 | ++------------------+--------+----+----+ +0 16 24 28 31 +@end verbatim + +@item RRF format: <insn> R1,R2,R3,M4 +@verbatim ++------------------+----+----+----+----+ +| OpCode | R3 | M4 | R1 | R2 | ++------------------+----+----+----+----+ +0 16 20 24 28 31 +@end verbatim + +@item RRS format: <insn> R1,R2,M3,D4(B4) +@verbatim ++--------+----+----+----+-------------+----+----+--------+ +| OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode | ++--------+----+----+----+-------------+----+----+--------+ +0 8 12 16 20 32 36 40 47 +@end verbatim + +@item RS format: <insn> R1,R3,D2(B2) +@verbatim ++--------+----+----+----+-------------+ +| OpCode | R1 | R3 | B2 | D2 | ++--------+----+----+----+-------------+ +0 8 12 16 20 31 +@end verbatim + +@item RSE format: <insn> R1,R3,D2(B2) +@verbatim ++--------+----+----+----+-------------+--------+--------+ +| OpCode | R1 | R3 | B2 | D2 |////////| OpCode | ++--------+----+----+----+-------------+--------+--------+ +0 8 12 16 20 32 40 47 +@end verbatim + +@item RSI format: <insn> R1,R3,I2 +@verbatim ++--------+----+----+------------------------------------+ +| OpCode | R1 | R3 | I2 | ++--------+----+----+------------------------------------+ +0 8 12 16 47 +@end verbatim + +@item RSY format: <insn> R1,R3,D2(B2) +@verbatim ++--------+----+----+----+-------------+--------+--------+ +| OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode | ++--------+----+----+----+-------------+--------+--------+ +0 8 12 16 20 32 40 47 +@end verbatim + +@item RX format: <insn> R1,D2(X2,B2) +@verbatim ++--------+----+----+----+-------------+ +| OpCode | R1 | X2 | B2 | D2 | ++--------+----+----+----+-------------+ +0 8 12 16 20 31 +@end verbatim + +@item RXE format: <insn> R1,D2(X2,B2) +@verbatim ++--------+----+----+----+-------------+--------+--------+ +| OpCode | R1 | X2 | B2 | D2 |////////| OpCode | ++--------+----+----+----+-------------+--------+--------+ +0 8 12 16 20 32 40 47 +@end verbatim + +@item RXF format: <insn> R1,R3,D2(X2,B2) +@verbatim ++--------+----+----+----+-------------+----+---+--------+ +| OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode | ++--------+----+----+----+-------------+----+---+--------+ +0 8 12 16 20 32 36 40 47 +@end verbatim + +@item RXY format: <insn> R1,D2(X2,B2) +@verbatim ++--------+----+----+----+-------------+--------+--------+ +| OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | ++--------+----+----+----+-------------+--------+--------+ +0 8 12 16 20 32 36 40 47 +@end verbatim + +@item S format: <insn> D2(B2) +@verbatim ++------------------+----+-------------+ +| OpCode | B2 | D2 | ++------------------+----+-------------+ +0 16 20 31 +@end verbatim + +@item SI format: <insn> D1(B1),I2 +@verbatim ++--------+---------+----+-------------+ +| OpCode | I2 | B1 | D1 | ++--------+---------+----+-------------+ +0 8 16 20 31 +@end verbatim + +@item SIY format: <insn> D1(B1),U2 +@verbatim ++--------+---------+----+-------------+--------+--------+ +| OpCode | I2 | B1 | DL1 | DH1 | OpCode | ++--------+---------+----+-------------+--------+--------+ +0 8 16 20 32 36 40 47 +@end verbatim + +@item SIL format: <insn> D1(B1),I2 +@verbatim ++------------------+----+-------------+-----------------+ +| OpCode | B1 | D1 | I2 | ++------------------+----+-------------+-----------------+ +0 16 20 32 47 +@end verbatim + +@item SS format: <insn> D1(R1,B1),D2(B3),R3 +@verbatim ++--------+----+----+----+-------------+----+------------+ +| OpCode | R1 | R3 | B1 | D1 | B2 | D2 | ++--------+----+----+----+-------------+----+------------+ +0 8 12 16 20 32 36 47 +@end verbatim + +@item SSE format: <insn> D1(B1),D2(B2) +@verbatim ++------------------+----+-------------+----+------------+ +| OpCode | B1 | D1 | B2 | D2 | ++------------------+----+-------------+----+------------+ +0 8 12 16 20 32 36 47 +@end verbatim + +@item SSF format: <insn> D1(B1),D2(B2),R3 +@verbatim ++--------+----+----+----+-------------+----+------------+ +| OpCode | R3 |OpCd| B1 | D1 | B2 | D2 | ++--------+----+----+----+-------------+----+------------+ +0 8 12 16 20 32 36 47 +@end verbatim + +@end table + +For the complete list of all instruction format variants see the +Principles of Operation manuals. + +@node s390 Aliases +@subsection Instruction Aliases +@cindex instruction aliases, s390 +@cindex s390 instruction aliases + +A specific bit pattern can have multiple mnemonics, for example +the bit pattern @samp{0xa7000000} has the mnemonics @samp{tmh} and +@samp{tmlh}. In addition, there are a number of mnemonics recognized by +@code{@value{AS}} that are not present in the Principles of Operation. +These are the short forms of the branch instructions, where the condition +code mask operand is encoded in the mnemonic. This is relevant for the +branch instructions, the compare and branch instructions, and the +compare and trap instructions. + +For the branch instructions there are 20 condition code strings that can +be used as part of the mnemonic in place of a mask operand in the instruction +format: + +@display +@multitable @columnfractions .30 .30 +@headitem instruction @tab short form +@item bcr M1,R2 @tab b<m>r R2 +@item bc M1,D2(X2,B2) @tab b<m> D2(X2,B2) +@item brc M1,I2 @tab j<m> I2 +@item brcl M1,I2 @tab jg<m> I2 +@end multitable +@end display + +In the mnemonic for a branch instruction the condition code string <m> +can be any of the following: + +@display +@multitable {nle} {jump on not zero / if not zeros} +@item o @tab jump on overflow / if ones +@item h @tab jump on A high +@item p @tab jump on plus +@item nle @tab jump on not low or equal +@item l @tab jump on A low +@item m @tab jump on minus +@item nhe @tab jump on not high or equal +@item lh @tab jump on low or high +@item ne @tab jump on A not equal B +@item nz @tab jump on not zero / if not zeros +@item e @tab jump on A equal B +@item z @tab jump on zero / if zeroes +@item nlh @tab jump on not low or high +@item he @tab jump on high or equal +@item nl @tab jump on A not low +@item nm @tab jump on not minus / if not mixed +@item le @tab jump on low or equal +@item nh @tab jump on A not high +@item np @tab jump on not plus +@item no @tab jump on not overflow / if not ones +@end multitable +@end display + +For the compare and branch, and compare and trap instructions there +are 12 condition code strings that can be used as part of the mnemonic in +place of a mask operand in the instruction format: + +@display +@multitable @columnfractions .40 .40 +@headitem instruction @tab short form +@item crb R1,R2,M3,D4(B4) @tab crb<m> R1,R2,D4(B4) +@item cgrb R1,R2,M3,D4(B4) @tab cgrb<m> R1,R2,D4(B4) +@item crj R1,R2,M3,I4 @tab crj<m> R1,R2,I4 +@item cgrj R1,R2,M3,I4 @tab cgrj<m> R1,R2,I4 +@item cib R1,I2,M3,D4(B4) @tab cib<m> R1,I2,D4(B4) +@item cgib R1,I2,M3,D4(B4) @tab cgib<m> R1,I2,D4(B4) +@item cij R1,I2,M3,I4 @tab cij<m> R1,I2,I4 +@item cgij R1,I2,M3,I4 @tab cgij<m> R1,I2,I4 +@item crt R1,R2,M3 @tab crt<m> R1,R2 +@item cgrt R1,R2,M3 @tab cgrt<m> R1,R2 +@item cit R1,I2,M3 @tab cit<m> R1,I2 +@item cgit R1,I2,M3 @tab cgit<m> R1,I2 +@item clrb R1,R2,M3,D4(B4) @tab clrb<m> R1,R2,D4(B4) +@item clgrb R1,R2,M3,D4(B4) @tab clgrb<m> R1,R2,D4(B4) +@item clrj R1,R2,M3,I4 @tab clrj<m> R1,R2,I4 +@item clgrj R1,R2,M3,I4 @tab clgrj<m> R1,R2,I4 +@item clib R1,I2,M3,D4(B4) @tab clib<m> R1,I2,D4(B4) +@item clgib R1,I2,M3,D4(B4) @tab clgib<m> R1,I2,D4(B4) +@item clij R1,I2,M3,I4 @tab clij<m> R1,I2,I4 +@item clgij R1,I2,M3,I4 @tab clgij<m> R1,I2,I4 +@item clrt R1,R2,M3 @tab clrt<m> R1,R2 +@item clgrt R1,R2,M3 @tab clgrt<m> R1,R2 +@item clfit R1,I2,M3 @tab clfit<m> R1,I2 +@item clgit R1,I2,M3 @tab clgit<m> R1,I2 +@end multitable +@end display + +In the mnemonic for a compare and branch and compare and trap instruction +the condition code string <m> can be any of the following: + +@display +@multitable {nle} {jump on not zero / if not zeros} +@item h @tab jump on A high +@item nle @tab jump on not low or equal +@item l @tab jump on A low +@item nhe @tab jump on not high or equal +@item ne @tab jump on A not equal B +@item lh @tab jump on low or high +@item e @tab jump on A equal B +@item nlh @tab jump on not low or high +@item nl @tab jump on A not low +@item he @tab jump on high or equal +@item nh @tab jump on A not high +@item le @tab jump on low or equal +@end multitable +@end display + +@node s390 Operand Modifier +@subsection Instruction Operand Modifier +@cindex instruction operand modifier, s390 +@cindex s390 instruction operand modifier + +If a symbol modifier is attached to a symbol in an expression for an +instruction operand field, the symbol term is replaced with a reference +to an object in the global offset table (GOT) or the procedure linkage +table (PLT). The following expressions are allowed: +@samp{symbol@@modifier + constant}, +@samp{symbol@@modifier + label + constant}, and +@samp{symbol@@modifier - label + constant}. +The term @samp{symbol} is the symbol that will be entered into the GOT or +PLT, @samp{label} is a local label, and @samp{constant} is an arbitrary +expression that the assembler can evaluate to a constant value. + +The term @samp{(symbol + constant1)@@modifier +/- label + constant2} +is also accepted but a warning message is printed and the term is +converted to @samp{symbol@@modifier +/- label + constant1 + constant2}. + +@table @code +@item @@got +@itemx @@got12 +The @@got modifier can be used for displacement fields, 16-bit immediate +fields and 32-bit pc-relative immediate fields. The @@got12 modifier is +synonym to @@got. The symbol is added to the GOT. For displacement +fields and 16-bit immediate fields the symbol term is replaced with +the offset from the start of the GOT to the GOT slot for the symbol. +For a 32-bit pc-relative field the pc-relative offset to the GOT +slot from the current instruction address is used. +@item @@gotent +The @@gotent modifier can be used for 32-bit pc-relative immediate fields. +The symbol is added to the GOT and the symbol term is replaced with +the pc-relative offset from the current instruction to the GOT slot for the +symbol. +@item @@gotoff +The @@gotoff modifier can be used for 16-bit immediate fields. The symbol +term is replaced with the offset from the start of the GOT to the +address of the symbol. +@item @@gotplt +The @@gotplt modifier can be used for displacement fields, 16-bit immediate +fields, and 32-bit pc-relative immediate fields. A procedure linkage +table entry is generated for the symbol and a jump slot for the symbol +is added to the GOT. For displacement fields and 16-bit immediate +fields the symbol term is replaced with the offset from the start of the +GOT to the jump slot for the symbol. For a 32-bit pc-relative field +the pc-relative offset to the jump slot from the current instruction +address is used. +@item @@plt +The @@plt modifier can be used for 16-bit and 32-bit pc-relative immediate +fields. A procedure linkage table entry is generated for the symbol. +The symbol term is replaced with the relative offset from the current +instruction to the PLT entry for the symbol. +@item @@pltoff +The @@pltoff modifier can be used for 16-bit immediate fields. The symbol +term is replaced with the offset from the start of the PLT to the address +of the symbol. +@item @@gotntpoff +The @@gotntpoff modifier can be used for displacement fields. The symbol +is added to the static TLS block and the negated offset to the symbol +in the static TLS block is added to the GOT. The symbol term is replaced +with the offset to the GOT slot from the start of the GOT. +@item @@indntpoff +The @@indntpoff modifier can be used for 32-bit pc-relative immediate +fields. The symbol is added to the static TLS block and the negated offset +to the symbol in the static TLS block is added to the GOT. The symbol term +is replaced with the pc-relative offset to the GOT slot from the current +instruction address. +@end table + +For more information about the thread local storage modifiers +@samp{gotntpoff} and @samp{indntpoff} see the ELF extension documentation +@samp{ELF Handling For Thread-Local Storage}. + +@node s390 Instruction Marker +@subsection Instruction Marker +@cindex instruction marker, s390 +@cindex s390 instruction marker + +The thread local storage instruction markers are used by the linker to +perform code optimization. + +@table @code +@item :tls_load +The :tls_load marker is used to flag the load instruction in the initial +exec TLS model that retrieves the offset from the thread pointer to a +thread local storage variable from the GOT. +@item :tls_gdcall +The :tls_gdcall marker is used to flag the branch-and-save instruction to +the __tls_get_offset function in the global dynamic TLS model. +@item :tls_ldcall +The :tls_ldcall marker is used to flag the branch-and-save instruction to +the __tls_get_offset function in the local dynamic TLS model. +@end table + +For more information about the thread local storage instruction marker +and the linker optimizations see the ELF extension documentation +@samp{ELF Handling For Thread-Local Storage}. + +@node s390 Literal Pool Entries +@subsection Literal Pool Entries +@cindex literal pool entries, s390 +@cindex s390 literal pool entries + +A literal pool is a collection of values. To access the values a pointer +to the literal pool is loaded to a register, the literal pool register. +Usually, register %r13 is used as the literal pool register +(@ref{s390 Register}). Literal pool entries are created by adding the +suffix :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an +instruction operand. The expression is added to the literal pool and the +operand is replaced with the offset to the literal in the literal pool. + +@table @code +@item :lit1 +The literal pool entry is created as an 8-bit value. An operand modifier +must not be used for the original expression. +@item :lit2 +The literal pool entry is created as a 16 bit value. The operand modifier +@@got may be used in the original expression. The term @samp{x@@got:lit2} +will put the got offset for the global symbol x to the literal pool as +16 bit value. +@item :lit4 +The literal pool entry is created as a 32-bit value. The operand modifier +@@got and @@plt may be used in the original expression. The term +@samp{x@@got:lit4} will put the got offset for the global symbol x to the +literal pool as a 32-bit value. The term @samp{x@@plt:lit4} will put the +plt offset for the global symbol x to the literal pool as a 32-bit value. +@item :lit8 +The literal pool entry is created as a 64-bit value. The operand modifier +@@got and @@plt may be used in the original expression. The term +@samp{x@@got:lit8} will put the got offset for the global symbol x to the +literal pool as a 64-bit value. The term @samp{x@@plt:lit8} will put the +plt offset for the global symbol x to the literal pool as a 64-bit value. +@end table + +The assembler directive @samp{.ltorg} is used to emit all literal pool +entries to the current position. + +@node s390 Directives +@section Assembler Directives + +@code{@value{AS}} for s390 supports all of the standard ELF +assembler directives as outlined in the main part of this document. +Some directives have been extended and there are some additional +directives, which are only available for the s390 @code{@value{AS}}. + +@table @code +@cindex @code{.insn} directive, s390 +@item .insn +This directive permits the numeric representation of an instructions +and makes the assembler insert the operands according to one of the +instructions formats for @samp{.insn} (@ref{s390 Formats}). +For example, the instruction @samp{l %r1,24(%r15)} could be written as +@samp{.insn rx,0x58000000,%r1,24(%r15)}. +@cindex @code{.short} directive, s390 +@cindex @code{.long} directive, s390 +@cindex @code{.quad} directive, s390 +@item .short +@itemx .long +@itemx .quad +This directive places one or more 16-bit (.short), 32-bit (.long), or +64-bit (.quad) values into the current section. If an ELF or TLS modifier +is used only the following expressions are allowed: +@samp{symbol@@modifier + constant}, +@samp{symbol@@modifier + label + constant}, and +@samp{symbol@@modifier - label + constant}. +The following modifiers are available: +@table @code +@item @@got +@itemx @@got12 +The @@got modifier can be used for .short, .long and .quad. The @@got12 +modifier is synonym to @@got. The symbol is added to the GOT. The symbol +term is replaced with offset from the start of the GOT to the GOT slot for +the symbol. +@item @@gotoff +The @@gotoff modifier can be used for .short, .long and .quad. The symbol +term is replaced with the offset from the start of the GOT to the address +of the symbol. +@item @@gotplt +The @@gotplt modifier can be used for .long and .quad. A procedure linkage +table entry is generated for the symbol and a jump slot for the symbol +is added to the GOT. The symbol term is replaced with the offset from the +start of the GOT to the jump slot for the symbol. +@item @@plt +The @@plt modifier can be used for .long and .quad. A procedure linkage +table entry us generated for the symbol. The symbol term is replaced with +the address of the PLT entry for the symbol. +@item @@pltoff +The @@pltoff modifier can be used for .short, .long and .quad. The symbol +term is replaced with the offset from the start of the PLT to the address +of the symbol. +@item @@tlsgd +@itemx @@tlsldm +The @@tlsgd and @@tlsldm modifier can be used for .long and .quad. A +tls_index structure for the symbol is added to the GOT. The symbol term is +replaced with the offset from the start of the GOT to the tls_index structure. +@item @@gotntpoff +@itemx @@indntpoff +The @@gotntpoff and @@indntpoff modifier can be used for .long and .quad. +The symbol is added to the static TLS block and the negated offset to the +symbol in the static TLS block is added to the GOT. For @@gotntpoff the +symbol term is replaced with the offset from the start of the GOT to the +GOT slot, for @@indntpoff the symbol term is replaced with the address +of the GOT slot. +@item @@dtpoff +The @@dtpoff modifier can be used for .long and .quad. The symbol term +is replaced with the offset of the symbol relative to the start of the +TLS block it is contained in. +@item @@ntpoff +The @@ntpoff modifier can be used for .long and .quad. The symbol term +is replaced with the offset of the symbol relative to the TCB pointer. +@end table + +For more information about the thread local storage modifiers see the +ELF extension documentation @samp{ELF Handling For Thread-Local Storage}. + +@cindex @code{.ltorg} directive, s390 +@item .ltorg +This directive causes the current contents of the literal pool to be +dumped to the current location (@ref{s390 Literal Pool Entries}). + +@cindex @code{.machine} directive, s390 +@item .machine string +This directive allows you to change the machine for which code is +generated. @code{string} may be any of the @code{-march=} selection +options (without the -march=), @code{push}, or @code{pop}. +@code{.machine push} saves the currently selected cpu, which may be +restored with @code{.machine pop}. Be aware that the cpu string has +to be put into double quotes in case it contains characters not +appropriate for identifiers. So you have to write @code{"z9-109"} +instead of just @code{z9-109}. + +@cindex @code{.machinemode} directive, s390 +@item .machinemode string +This directive allows to change the architecture mode for which code +is being generated. @code{string} may be @code{esa}, @code{zarch}, +@code{zarch_nohighgprs}, @code{push}, or @code{pop}. +@code{.machinemode zarch_nohighgprs} can be used to prevent the +@code{highgprs} flag from being set in the ELF header of the output +file. This is useful in situations where the code is gated with a +runtime check which makes sure that the code is only executed on +kernels providing the @code{highgprs} feature. +@code{.machinemode push} saves the currently selected mode, which may +be restored with @code{.machinemode pop}. +@end table + +@node s390 Floating Point +@section Floating Point +@cindex floating point, s390 +@cindex s390 floating point + +The assembler recognizes both the @sc{ieee} floating-point instruction and +the hexadecimal floating-point instructions. The floating-point constructors +@samp{.float}, @samp{.single}, and @samp{.double} always emit the +@sc{ieee} format. To assemble hexadecimal floating-point constants the +@samp{.long} and @samp{.quad} directives must be used. diff --git a/binutils-2.25/gas/doc/c-score.texi b/binutils-2.25/gas/doc/c-score.texi new file mode 100644 index 00000000..8335ae79 --- /dev/null +++ b/binutils-2.25/gas/doc/c-score.texi @@ -0,0 +1,168 @@ +@c Copyright 2009, 2011, 2013 +@c 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 SCORE-Dependent +@chapter SCORE Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter SCORE Dependent Features +@end ifclear + +@cindex SCORE processor +@menu +* SCORE-Opts:: Assembler options +* SCORE-Pseudo:: SCORE Assembler Directives +* SCORE-Syntax:: Syntax +@end menu + +@node SCORE-Opts +@section Options + +@cindex options for SCORE +@cindex SCORE options +@cindex architectures, SCORE +@cindex SCORE architectures + +The following table lists all available SCORE options. + +@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. The default value is 8. + +@item -EB +Assemble code for a big-endian cpu + +@item -EL +Assemble code for a little-endian cpu + +@item -FIXDD +Assemble code for fix data dependency + +@item -NWARN +Assemble code for no warning message for fix data dependency + +@item -SCORE5 +Assemble code for target is SCORE5 + +@item -SCORE5U +Assemble code for target is SCORE5U + +@item -SCORE7 +Assemble code for target is SCORE7, this is default setting + +@item -SCORE3 +Assemble code for target is SCORE3 + +@item -march=score7 +Assemble code for target is SCORE7, this is default setting + +@item -march=score3 +Assemble code for target is SCORE3 + +@item -USE_R1 +Assemble code for no warning message when using temp register r1 + +@item -KPIC +Generate code for PIC. This option tells the assembler to generate +score position-independent macro expansions. It also tells the +assembler to mark the output file as PIC. + +@item -O0 +Assembler will not perform any optimizations + +@item -V +Sunplus release version + +@end table + +@node SCORE-Pseudo +@section SCORE Assembler Directives + +@cindex directives for SCORE +@cindex SCORE directives +A number of assembler directives are available for SCORE. The +following table is far from complete. + +@table @code +@item .set nwarn +Let the assembler not to generate warnings if the source machine +language instructions happen data dependency. + +@item .set fixdd +Let the assembler to insert bubbles (32 bit nop instruction / +16 bit nop! Instruction) if the source machine language instructions +happen data dependency. + +@item .set nofixdd +Let the assembler to generate warnings if the source machine +language instructions happen data dependency. (Default) + +@item .set r1 +Let the assembler not to generate warnings if the source program +uses r1. allow user to use r1 + +@item set nor1 +Let the assembler to generate warnings if the source program uses +r1. (Default) + +@item .sdata +Tell the assembler to add subsequent data into the sdata section + +@item .rdata +Tell the assembler to add subsequent data into the rdata section + +@item .frame "frame-register", "offset", "return-pc-register" +Describe a stack frame. "frame-register" is the frame register, +"offset" is the distance from the frame register to the virtual +frame pointer, "return-pc-register" is the return program register. +You must use ".ent" before ".frame" and only one ".frame" can be +used per ".ent". + +@item .mask "bitmask", "frameoffset" +Indicate which of the integer registers are saved in the current +function's stack frame, this is for the debugger to explain the +frame chain. + +@item .ent "proc-name" +Set the beginning of the procedure "proc_name". Use this directive +when you want to generate information for the debugger. + +@item .end proc-name +Set the end of a procedure. Use this directive to generate information +for the debugger. + +@item .bss +Switch the destination of following statements into the bss section, +which is used for data that is uninitialized anywhere. + +@end table + +@node SCORE-Syntax +@section SCORE Syntax +@menu +* SCORE-Chars:: Special Characters +@end menu + +@node SCORE-Chars +@subsection Special Characters + +@cindex line comment character, SCORE +@cindex SCORE line comment character +The presence of a @samp{#} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, SCORE +@cindex statement separator, SCORE +@cindex SCORE line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-sh.texi b/binutils-2.25/gas/doc/c-sh.texi new file mode 100644 index 00000000..967cea4b --- /dev/null +++ b/binutils-2.25/gas/doc/c-sh.texi @@ -0,0 +1,346 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 2001, 2003, 2004, +@c 2005, 2008, 2010, 2011, 2012 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 Renesas / SuperH 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 +@cindex options, SH +@code{@value{AS}} has following command-line options for the Renesas +(formerly Hitachi) / SuperH SH family. + +@table @code +@kindex --little +@kindex --big +@kindex --relax +@kindex --small +@kindex --dsp +@kindex --renesas +@kindex --allow-reg-prefix + +@item --little +Generate little endian code. + +@item --big +Generate big endian code. + +@item --relax +Alter jump instructions for long displacements. + +@item --small +Align sections to 4 byte boundaries, not 16. + +@item --dsp +Enable sh-dsp insns, and disable sh3e / sh4 insns. + +@item --renesas +Disable optimization with section symbol for compatibility with +Renesas assembler. + +@item --allow-reg-prefix +Allow '$' as a register name prefix. + +@kindex --fdpic +@item --fdpic +Generate an FDPIC object file. + +@item --isa=sh4 | sh4a +Specify the sh4 or sh4a instruction set. +@item --isa=dsp +Enable sh-dsp insns, and disable sh3e / sh4 insns. +@item --isa=fp +Enable sh2e, sh3e, sh4, and sh4a insn sets. +@item --isa=all +Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + +@end table + +@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. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@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}) +SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other +SH groups can use @code{.float} directive to generate @sc{ieee} +floating-point numbers. + +SH2E and SH3E support single-precision floating point calculations as +well as entirely PCAPI compatible emulation of double-precision +floating point calculations. SH2E and SH3E instructions are a subset of +the floating point calculations conforming to the IEEE754 standard. + +In addition to single-precision and double-precision floating-point +operation capability, the on-chip FPU of SH4 has a 128-bit graphic +engine that enables 32-bit floating-point data to be processed 128 +bits at a time. It also supports 4 * 4 array operations and inner +product operations. Also, a superscalar architecture is employed that +enables simultaneous execution of two instructions (including FPU +instructions), providing performance of up to twice that of +conventional architectures at the same frequency. + +@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 +@cindex @code{uaquad} directive, SH + +@table @code +@item uaword +@itemx ualong +@itemx uaquad +@code{@value{AS}} will issue a warning when a misaligned @code{.word}, +@code{.long}, or @code{.quad} directive is used. You may use +@code{.uaword}, @code{.ualong}, or @code{.uaquad} 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} (Renesas) or +@cite{SH-4 32-bit CPU Core Architecture} (SuperH) and +@cite{SuperH (SH) 64-Bit RISC Series} (SuperH). + +@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 Renesas-all +@ifclear GENERIC +@raisesections +@end ifclear +@end ifset + diff --git a/binutils-2.25/gas/doc/c-sh64.texi b/binutils-2.25/gas/doc/c-sh64.texi new file mode 100644 index 00000000..6857f29e --- /dev/null +++ b/binutils-2.25/gas/doc/c-sh64.texi @@ -0,0 +1,219 @@ +@c Copyright (C) 2002, 2003, 2008, 2011, 2012 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@page +@node SH64-Dependent +@chapter SuperH SH64 Dependent Features + +@cindex SH64 support +@menu +* SH64 Options:: Options +* SH64 Syntax:: Syntax +* SH64 Directives:: SH64 Machine Directives +* SH64 Opcodes:: Opcodes +@end menu + +@node SH64 Options +@section Options + +@cindex SH64 options +@cindex options, SH64 +@table @code + +@cindex SH64 ISA options +@cindex ISA options, SH64 +@item -isa=sh4 | sh4a +Specify the sh4 or sh4a instruction set. +@item -isa=dsp +Enable sh-dsp insns, and disable sh3e / sh4 insns. +@item -isa=fp +Enable sh2e, sh3e, sh4, and sh4a insn sets. +@item -isa=all +Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets. +@item -isa=shmedia | -isa=shcompact +Specify the default instruction set. @code{SHmedia} specifies the +32-bit opcodes, and @code{SHcompact} specifies the 16-bit opcodes +compatible with previous SH families. The default depends on the ABI +selected; the default for the 64-bit ABI is SHmedia, and the default for +the 32-bit ABI is SHcompact. If neither the ABI nor the ISA is +specified, the default is 32-bit SHcompact. + +Note that the @code{.mode} pseudo-op is not permitted if the ISA is not +specified on the command line. + +@cindex SH64 ABI options +@cindex ABI options, SH64 +@item -abi=32 | -abi=64 +Specify the default ABI. If the ISA is specified and the ABI is not, +the default ABI depends on the ISA, with SHmedia defaulting to 64-bit +and SHcompact defaulting to 32-bit. + +Note that the @code{.abi} pseudo-op is not permitted if the ABI is not +specified on the command line. When the ABI is specified on the command +line, any @code{.abi} pseudo-ops in the source must match it. + +@item -shcompact-const-crange +Emit code-range descriptors for constants in SHcompact code sections. + +@item -no-mix +Disallow SHmedia code in the same section as constants and SHcompact +code. + +@item -no-expand +Do not expand MOVI, PT, PTA or PTB instructions. + +@item -expand-pt32 +With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. + +@item -h-tick-hex +Support H'00 style hex constants in addition to 0x00 style. + +@end table + +@node SH64 Syntax +@section Syntax + +@menu +* SH64-Chars:: Special Characters +* SH64-Regs:: Register Names +* SH64-Addressing:: Addressing Modes +@end menu + +@node SH64-Chars +@subsection Special Characters + +@cindex line comment character, SH64 +@cindex SH64 line comment character +@samp{!} is the line comment character. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, SH64 +@cindex statement separator, SH64 +@cindex SH64 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 SH64-Regs +@subsection Register Names + +@cindex SH64 registers +@cindex registers, SH64 +You can use the predefined symbols @samp{r0} through @samp{r63} to refer +to the SH64 general registers, @samp{cr0} through @code{cr63} for +control registers, @samp{tr0} through @samp{tr7} for target address +registers, @samp{fr0} through @samp{fr63} for single-precision floating +point registers, @samp{dr0} through @samp{dr62} (even numbered registers +only) for double-precision floating point registers, @samp{fv0} through +@samp{fv60} (multiples of four only) for single-precision floating point +vectors, @samp{fp0} through @samp{fp62} (even numbered registers only) +for single-precision floating point pairs, @samp{mtrx0} through +@samp{mtrx48} (multiples of 16 only) for 4x4 matrices of +single-precision floating point registers, @samp{pc} for the program +counter, and @samp{fpscr} for the floating point status and control +register. + +You can also refer to the control registers by the mnemonics @samp{sr}, +@samp{ssr}, @samp{pssr}, @samp{intevt}, @samp{expevt}, @samp{pexpevt}, +@samp{tra}, @samp{spc}, @samp{pspc}, @samp{resvec}, @samp{vbr}, +@samp{tea}, @samp{dcr}, @samp{kcr0}, @samp{kcr1}, @samp{ctc}, and +@samp{usr}. + +@node SH64-Addressing +@subsection Addressing Modes + +@cindex addressing modes, SH64 +@cindex SH64 addressing modes + +SH64 operands consist of either a register or immediate value. The +immediate value can be a constant or label reference (or portion of a +label reference), as in this example: + +@example + movi 4,r2 + pt function, tr4 + movi (function >> 16) & 65535,r0 + shori function & 65535, r0 + ld.l r0,4,r0 +@end example + +@cindex datalabel, SH64 +Instruction label references can reference labels in either SHmedia or +SHcompact. To differentiate between the two, labels in SHmedia sections +will always have the least significant bit set (i.e. they will be odd), +which SHcompact labels will have the least significant bit reset +(i.e. they will be even). If you need to reference the actual address +of a label, you can use the @code{datalabel} modifier, as in this +example: + +@example + .long function + .long datalabel function +@end example + +In that example, the first longword may or may not have the least +significant bit set depending on whether the label is an SHmedia label +or an SHcompact label. The second longword will be the actual address +of the label, regardless of what type of label it is. + +@node SH64 Directives +@section SH64 Machine Directives + +In addition to the SH directives, the SH64 provides the following +directives: + +@cindex SH64 machine directives +@cindex machine directives, SH64 + +@table @code + +@item .mode [shmedia|shcompact] +@itemx .isa [shmedia|shcompact] +Specify the ISA for the following instructions (the two directives are +equivalent). Note that programs such as @code{objdump} rely on symbolic +labels to determine when such mode switches occur (by checking the least +significant bit of the label's address), so such mode/isa changes should +always be followed by a label (in practice, this is true anyway). Note +that you cannot use these directives if you didn't specify an ISA on the +command line. + +@item .abi [32|64] +Specify the ABI for the following instructions. Note that you cannot use +this directive unless you specified an ABI on the command line, and the +ABIs specified must match. + +@end table + +@node SH64 Opcodes +@section Opcodes + +@cindex SH64 opcode summary +@cindex opcode summary, SH64 +@cindex mnemonics, SH64 +@cindex instruction summary, SH64 +For detailed information on the SH64 machine instruction set, see +@cite{SuperH 64 bit RISC Series Architecture Manual} (SuperH, Inc.). + +@code{@value{AS}} implements all the standard SH64 opcodes. In +addition, the following pseudo-opcodes may be expanded into one or more +alternate opcodes: + +@table @code + +@item movi +If the value doesn't fit into a standard @code{movi} opcode, +@code{@value{AS}} will replace the @code{movi} with a sequence of +@code{movi} and @code{shori} opcodes. + +@item pt +This expands to a sequence of @code{movi} and @code{shori} opcode, +followed by a @code{ptrel} opcode, or to a @code{pta} or @code{ptb} +opcode, depending on the label referenced. + +@end table diff --git a/binutils-2.25/gas/doc/c-sparc.texi b/binutils-2.25/gas/doc/c-sparc.texi new file mode 100644 index 00000000..f6b98150 --- /dev/null +++ b/binutils-2.25/gas/doc/c-sparc.texi @@ -0,0 +1,876 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1999, 2002, 2008, +@c 2011 +@c 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-Syntax:: Syntax +* 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 versions, using the same +core instruction set, but including a few additional instructions at +each version. There are exceptions to this however. For details on what +instructions each variant supports, please see the chip's architecture +reference manual. + +By default, @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 +past sparclite by default, an option must be passed to enable the +v9 instructions. + +GAS treats sparclite as being compatible with v8, unless an architecture +is explicitly requested. SPARC v9 is always incompatible with sparclite. + +@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 -Aleon +@kindex -Asparclet +@kindex -Asparclite +@kindex -Av9 +@kindex -Av9a +@kindex -Av9b +@kindex -Av9c +@kindex -Av9d +@kindex -Av9v +@kindex -Asparc +@kindex -Asparcvis +@kindex -Asparcvis2 +@kindex -Asparcfmaf +@kindex -Asparcima +@kindex -Asparcvis3 +@kindex -Asparcvis3r +@item -Av6 | -Av7 | -Av8 | -Aleon | -Asparclet | -Asparclite +@itemx -Av8plus | -Av8plusa | -Av8plusb | -Av8plusc | -Av8plusd | -Av8plusv +@itemx -Av9 | -Av9a | -Av9b | -Av9c | -Av9d | -Av9v +@itemx -Asparc | -Asparcvis | -Asparcvis2 | -Asparcfmaf | -Asparcima +@itemx -Asparcvis3 | -Asparcvis3r +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}, @samp{-Av8plusa}, @samp{-Av8plusb}, @samp{-Av8plusc}, +@samp{-Av8plusd}, and @samp{-Av8plusv} select a 32 bit environment. + +@samp{-Av9}, @samp{-Av9a}, @samp{-Av9b}, @samp{-Av9c}, @samp{-Av9d}, and +@samp{-Av9v} 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 VIS 1.0 extensions. + +@samp{-Av8plusb} and @samp{-Av9b} enable the UltraSPARC VIS 2.0 instructions, +as well as the instructions enabled by @samp{-Av8plusa} and @samp{-Av9a}. + +@samp{-Av8plusc} and @samp{-Av9c} enable the UltraSPARC Niagara instructions, +as well as the instructions enabled by @samp{-Av8plusb} and @samp{-Av9b}. + +@samp{-Av8plusd} and @samp{-Av9d} enable the floating point fused +multiply-add, VIS 3.0, and HPC extension instructions, as well as the +instructions enabled by @samp{-Av8plusc} and @samp{-Av9c}. + +@samp{-Av8plusv} and @samp{-Av9v} enable the 'random', transactional +memory, floating point unfused multiply-add, integer multiply-add, and +cache sparing store instructions, as well as the instructions enabled +by @samp{-Av8plusd} and @samp{-Av9d}. + +@samp{-Asparc} specifies a v9 environment. It is equivalent to +@samp{-Av9} if the word size is 64-bit, and @samp{-Av8plus} otherwise. + +@samp{-Asparcvis} specifies a v9a environment. It is equivalent to +@samp{-Av9a} if the word size is 64-bit, and @samp{-Av8plusa} otherwise. + +@samp{-Asparcvis2} specifies a v9b environment. It is equivalent to +@samp{-Av9b} if the word size is 64-bit, and @samp{-Av8plusb} otherwise. + +@samp{-Asparcfmaf} specifies a v9b environment with the floating point +fused multiply-add instructions enabled. + +@samp{-Asparcima} specifies a v9b environment with the integer +multiply-add instructions enabled. + +@samp{-Asparcvis3} specifies a v9b environment with the VIS 3.0, +HPC , and floating point fused multiply-add instructions enabled. + +@samp{-Asparcvis3r} specifies a v9b environment with the VIS 3.0, +HPC, transactional memory, random, and floating point unfused multiply-add +instructions enabled. + +@item -xarch=v8plus | -xarch=v8plusa | -xarch=v8plusb | -xarch=v8plusc +@itemx -xarch=v8plusd | -xarch=v8plusv | -xarch=v9 | -xarch=v9a +@itemx -xarch=v9b | -xarch=v9c | -xarch=v9d | -xarch=v9v +@itemx -xarch=sparc | -xarch=sparcvis | -xarch=sparcvis2 +@itemx -xarch=sparcfmaf | -xarch=sparcima | -xarch=sparcvis3 +@itemx -xarch=sparcvis3r +For compatibility with the SunOS v9 assembler. These options are +equivalent to -Av8plus, -Av8plusa, -Av8plusb, -Av8plusc, -Av8plusd, +-Av8plusv, -Av9, -Av9a, -Av9b, -Av9c, -Av9d, -Av9v, -Asparc, -Asparcvis, +-Asparcvis2, -Asparcfmaf, -Asparcima, -Asparcvis3, and -Asparcvis3r, +respectively. + +@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 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 +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. + +@cindex SPARC syntax +@cindex syntax, SPARC +@node Sparc-Syntax +@section Sparc Syntax +The assembler syntax closely follows The Sparc Architecture Manual, +versions 8 and 9, as well as most extensions defined by Sun +for their UltraSPARC and Niagara line of processors. + +@menu +* Sparc-Chars:: Special Characters +* Sparc-Regs:: Register Names +* Sparc-Constants:: Constant Names +* Sparc-Relocs:: Relocations +* Sparc-Size-Translations:: Size Translations +@end menu + +@node Sparc-Chars +@subsection Special Characters + +@cindex line comment character, Sparc +@cindex Sparc line comment character +A @samp{!} character appearing anywhere on a line indicates the start +of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, Sparc +@cindex statement separator, Sparc +@cindex Sparc line separator +@samp{;} can be used instead of a newline to separate statements. + +@node Sparc-Regs +@subsection Register Names +@cindex Sparc registers +@cindex register names, Sparc + +The Sparc integer register file is broken down into global, +outgoing, local, and incoming. + +@itemize @bullet +@item +The 8 global registers are referred to as @samp{%g@var{n}}. + +@item +The 8 outgoing registers are referred to as @samp{%o@var{n}}. + +@item +The 8 local registers are referred to as @samp{%l@var{n}}. + +@item +The 8 incoming registers are referred to as @samp{%i@var{n}}. + +@item +The frame pointer register @samp{%i6} can be referenced using +the alias @samp{%fp}. + +@item +The stack pointer register @samp{%o6} can be referenced using +the alias @samp{%sp}. +@end itemize + +Floating point registers are simply referred to as @samp{%f@var{n}}. +When assembling for pre-V9, only 32 floating point registers +are available. For V9 and later there are 64, but there are +restrictions when referencing the upper 32 registers. They +can only be accessed as double or quad, and thus only even +or quad numbered accesses are allowed. For example, @samp{%f34} +is a legal floating point register, but @samp{%f35} is not. + +Certain V9 instructions allow access to ancillary state registers. +Most simply they can be referred to as @samp{%asr@var{n}} where +@var{n} can be from 16 to 31. However, there are some aliases +defined to reference ASR registers defined for various UltraSPARC +processors: + +@itemize @bullet +@item +The tick compare register is referred to as @samp{%tick_cmpr}. + +@item +The system tick register is referred to as @samp{%stick}. An alias, +@samp{%sys_tick}, exists but is deprecated and should not be used +by new software. + +@item +The system tick compare register is referred to as @samp{%stick_cmpr}. +An alias, @samp{%sys_tick_cmpr}, exists but is deprecated and should +not be used by new software. + +@item +The software interrupt register is referred to as @samp{%softint}. + +@item +The set software interrupt register is referred to as @samp{%set_softint}. +The mnemonic @samp{%softint_set} is provided as an alias. + +@item +The clear software interrupt register is referred to as +@samp{%clear_softint}. The mnemonic @samp{%softint_clear} is provided +as an alias. + +@item +The performance instrumentation counters register is referred to as +@samp{%pic}. + +@item +The performance control register is referred to as @samp{%pcr}. + +@item +The graphics status register is referred to as @samp{%gsr}. + +@item +The V9 dispatch control register is referred to as @samp{%dcr}. +@end itemize + +Various V9 branch and conditional move instructions allow +specification of which set of integer condition codes to +test. These are referred to as @samp{%xcc} and @samp{%icc}. + +In V9, there are 4 sets of floating point condition codes +which are referred to as @samp{%fcc@var{n}}. + +Several special privileged and non-privileged registers +exist: + +@itemize @bullet +@item +The V9 address space identifier register is referred to as @samp{%asi}. + +@item +The V9 restorable windows register is referred to as @samp{%canrestore}. + +@item +The V9 savable windows register is referred to as @samp{%cansave}. + +@item +The V9 clean windows register is referred to as @samp{%cleanwin}. + +@item +The V9 current window pointer register is referred to as @samp{%cwp}. + +@item +The floating-point queue register is referred to as @samp{%fq}. + +@item +The V8 co-processor queue register is referred to as @samp{%cq}. + +@item +The floating point status register is referred to as @samp{%fsr}. + +@item +The other windows register is referred to as @samp{%otherwin}. + +@item +The V9 program counter register is referred to as @samp{%pc}. + +@item +The V9 next program counter register is referred to as @samp{%npc}. + +@item +The V9 processor interrupt level register is referred to as @samp{%pil}. + +@item +The V9 processor state register is referred to as @samp{%pstate}. + +@item +The trap base address register is referred to as @samp{%tba}. + +@item +The V9 tick register is referred to as @samp{%tick}. + +@item +The V9 trap level is referred to as @samp{%tl}. + +@item +The V9 trap program counter is referred to as @samp{%tpc}. + +@item +The V9 trap next program counter is referred to as @samp{%tnpc}. + +@item +The V9 trap state is referred to as @samp{%tstate}. + +@item +The V9 trap type is referred to as @samp{%tt}. + +@item +The V9 condition codes is referred to as @samp{%ccr}. + +@item +The V9 floating-point registers state is referred to as @samp{%fprs}. + +@item +The V9 version register is referred to as @samp{%ver}. + +@item +The V9 window state register is referred to as @samp{%wstate}. + +@item +The Y register is referred to as @samp{%y}. + +@item +The V8 window invalid mask register is referred to as @samp{%wim}. + +@item +The V8 processor state register is referred to as @samp{%psr}. + +@item +The V9 global register level register is referred to as @samp{%gl}. +@end itemize + +Several special register names exist for hypervisor mode code: + +@itemize @bullet +@item +The hyperprivileged processor state register is referred to as +@samp{%hpstate}. + +@item +The hyperprivileged trap state register is referred to as @samp{%htstate}. + +@item +The hyperprivileged interrupt pending register is referred to as +@samp{%hintp}. + +@item +The hyperprivileged trap base address register is referred to as +@samp{%htba}. + +@item +The hyperprivileged implementation version register is referred +to as @samp{%hver}. + +@item +The hyperprivileged system tick compare register is referred +to as @samp{%hstick_cmpr}. Note that there is no @samp{%hstick} +register, the normal @samp{%stick} is used. +@end itemize + +@node Sparc-Constants +@subsection Constants +@cindex Sparc constants +@cindex constants, Sparc + +Several Sparc instructions take an immediate operand field for +which mnemonic names exist. Two such examples are @samp{membar} +and @samp{prefetch}. Another example are the set of V9 +memory access instruction that allow specification of an +address space identifier. + +The @samp{membar} instruction specifies a memory barrier that is +the defined by the operand which is a bitmask. The supported +mask mnemonics are: + +@itemize @bullet +@item +@samp{#Sync} requests that all operations (including nonmemory +reference operations) appearing prior to the @code{membar} must have +been performed and the effects of any exceptions become visible before +any instructions after the @code{membar} may be initiated. This +corresponds to @code{membar} cmask field bit 2. + +@item +@samp{#MemIssue} requests that all memory reference operations +appearing prior to the @code{membar} must have been performed before +any memory operation after the @code{membar} may be initiated. This +corresponds to @code{membar} cmask field bit 1. + +@item +@samp{#Lookaside} requests that a store appearing prior to the +@code{membar} must complete before any load following the +@code{membar} referencing the same address can be initiated. This +corresponds to @code{membar} cmask field bit 0. + +@item +@samp{#StoreStore} defines that the effects of all stores appearing +prior to the @code{membar} instruction must be visible to all +processors before the effect of any stores following the +@code{membar}. Equivalent to the deprecated @code{stbar} instruction. +This corresponds to @code{membar} mmask field bit 3. + +@item +@samp{#LoadStore} defines all loads appearing prior to the +@code{membar} instruction must have been performed before the effect +of any stores following the @code{membar} is visible to any other +processor. This corresponds to @code{membar} mmask field bit 2. + +@item +@samp{#StoreLoad} defines that the effects of all stores appearing +prior to the @code{membar} instruction must be visible to all +processors before loads following the @code{membar} may be performed. +This corresponds to @code{membar} mmask field bit 1. + +@item +@samp{#LoadLoad} defines that all loads appearing prior to the +@code{membar} instruction must have been performed before any loads +following the @code{membar} may be performed. This corresponds to +@code{membar} mmask field bit 0. + +@end itemize + +These values can be ored together, for example: + +@example +membar #Sync +membar #StoreLoad | #LoadLoad +membar #StoreLoad | #StoreStore +@end example + +The @code{prefetch} and @code{prefetcha} instructions take a prefetch +function code. The following prefetch function code constant +mnemonics are available: + +@itemize @bullet +@item +@samp{#n_reads} requests a prefetch for several reads, and corresponds +to a prefetch function code of 0. + +@samp{#one_read} requests a prefetch for one read, and corresponds +to a prefetch function code of 1. + +@samp{#n_writes} requests a prefetch for several writes (and possibly +reads), and corresponds to a prefetch function code of 2. + +@samp{#one_write} requests a prefetch for one write, and corresponds +to a prefetch function code of 3. + +@samp{#page} requests a prefetch page, and corresponds to a prefetch +function code of 4. + +@samp{#invalidate} requests a prefetch invalidate, and corresponds to +a prefetch function code of 16. + +@samp{#unified} requests a prefetch to the nearest unified cache, and +corresponds to a prefetch function code of 17. + +@samp{#n_reads_strong} requests a strong prefetch for several reads, +and corresponds to a prefetch function code of 20. + +@samp{#one_read_strong} requests a strong prefetch for one read, +and corresponds to a prefetch function code of 21. + +@samp{#n_writes_strong} requests a strong prefetch for several writes, +and corresponds to a prefetch function code of 22. + +@samp{#one_write_strong} requests a strong prefetch for one write, +and corresponds to a prefetch function code of 23. + +Onle one prefetch code may be specified. Here are some examples: + +@example +prefetch [%l0 + %l2], #one_read +prefetch [%g2 + 8], #n_writes +prefetcha [%g1] 0x8, #unified +prefetcha [%o0 + 0x10] %asi, #n_reads +@end example + +The actual behavior of a given prefetch function code is processor +specific. If a processor does not implement a given prefetch +function code, it will treat the prefetch instruction as a nop. + +For instructions that accept an immediate address space identifier, +@code{@value{AS}} provides many mnemonics corresponding to +V9 defined as well as UltraSPARC and Niagara extended values. +For example, @samp{#ASI_P} and @samp{#ASI_BLK_INIT_QUAD_LDD_AIUS}. +See the V9 and processor specific manuals for details. + +@end itemize + +@node Sparc-Relocs +@subsection Relocations +@cindex Sparc relocations +@cindex relocations, Sparc + +ELF relocations are available as defined in the 32-bit and 64-bit +Sparc ELF specifications. + +@code{R_SPARC_HI22} is obtained using @samp{%hi} and @code{R_SPARC_LO10} +is obtained using @samp{%lo}. Likewise @code{R_SPARC_HIX22} is +obtained from @samp{%hix} and @code{R_SPARC_LOX10} is obtained +using @samp{%lox}. For example: + +@example +sethi %hi(symbol), %g1 +or %g1, %lo(symbol), %g1 + +sethi %hix(symbol), %g1 +xor %g1, %lox(symbol), %g1 +@end example + +These ``high'' mnemonics extract bits 31:10 of their operand, +and the ``low'' mnemonics extract bits 9:0 of their operand. + +V9 code model relocations can be requested as follows: + +@itemize @bullet +@item +@code{R_SPARC_HH22} is requested using @samp{%hh}. It can +also be generated using @samp{%uhi}. +@item +@code{R_SPARC_HM10} is requested using @samp{%hm}. It can +also be generated using @samp{%ulo}. +@item +@code{R_SPARC_LM22} is requested using @samp{%lm}. + +@item +@code{R_SPARC_H44} is requested using @samp{%h44}. +@item +@code{R_SPARC_M44} is requested using @samp{%m44}. +@item +@code{R_SPARC_L44} is requested using @samp{%l44} or @samp{%l34}. +@item +@code{R_SPARC_H34} is requested using @samp{%h34}. +@end itemize + +The @samp{%l34} generates a @code{R_SPARC_L44} relocation because it +calculates the necessary value, and therefore no explicit +@code{R_SPARC_L34} relocation needed to be created for this purpose. + +The @samp{%h34} and @samp{%l34} relocations are used for the abs34 code +model. Here is an example abs34 address generation sequence: + +@example +sethi %h34(symbol), %g1 +sllx %g1, 2, %g1 +or %g1, %l34(symbol), %g1 +@end example + +The PC relative relocation @code{R_SPARC_PC22} can be obtained by +enclosing an operand inside of @samp{%pc22}. Likewise, the +@code{R_SPARC_PC10} relocation can be obtained using @samp{%pc10}. +These are mostly used when assembling PIC code. For example, the +standard PIC sequence on Sparc to get the base of the global offset +table, PC relative, into a register, can be performed as: + +@example +sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7 +add %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7 +@end example + +Several relocations exist to allow the link editor to potentially +optimize GOT data references. The @code{R_SPARC_GOTDATA_OP_HIX22} +relocation can obtained by enclosing an operand inside of +@samp{%gdop_hix22}. The @code{R_SPARC_GOTDATA_OP_LOX10} +relocation can obtained by enclosing an operand inside of +@samp{%gdop_lox10}. Likewise, @code{R_SPARC_GOTDATA_OP} can be +obtained by enclosing an operand inside of @samp{%gdop}. +For example, assuming the GOT base is in register @code{%l7}: + +@example +sethi %gdop_hix22(symbol), %l1 +xor %l1, %gdop_lox10(symbol), %l1 +ld [%l7 + %l1], %l2, %gdop(symbol) +@end example + +There are many relocations that can be requested for access to +thread local storage variables. All of the Sparc TLS mnemonics +are supported: + +@itemize @bullet +@item +@code{R_SPARC_TLS_GD_HI22} is requested using @samp{%tgd_hi22}. +@item +@code{R_SPARC_TLS_GD_LO10} is requested using @samp{%tgd_lo10}. +@item +@code{R_SPARC_TLS_GD_ADD} is requested using @samp{%tgd_add}. +@item +@code{R_SPARC_TLS_GD_CALL} is requested using @samp{%tgd_call}. + +@item +@code{R_SPARC_TLS_LDM_HI22} is requested using @samp{%tldm_hi22}. +@item +@code{R_SPARC_TLS_LDM_LO10} is requested using @samp{%tldm_lo10}. +@item +@code{R_SPARC_TLS_LDM_ADD} is requested using @samp{%tldm_add}. +@item +@code{R_SPARC_TLS_LDM_CALL} is requested using @samp{%tldm_call}. + +@item +@code{R_SPARC_TLS_LDO_HIX22} is requested using @samp{%tldo_hix22}. +@item +@code{R_SPARC_TLS_LDO_LOX10} is requested using @samp{%tldo_lox10}. +@item +@code{R_SPARC_TLS_LDO_ADD} is requested using @samp{%tldo_add}. + +@item +@code{R_SPARC_TLS_IE_HI22} is requested using @samp{%tie_hi22}. +@item +@code{R_SPARC_TLS_IE_LO10} is requested using @samp{%tie_lo10}. +@item +@code{R_SPARC_TLS_IE_LD} is requested using @samp{%tie_ld}. +@item +@code{R_SPARC_TLS_IE_LDX} is requested using @samp{%tie_ldx}. +@item +@code{R_SPARC_TLS_IE_ADD} is requested using @samp{%tie_add}. + +@item +@code{R_SPARC_TLS_LE_HIX22} is requested using @samp{%tle_hix22}. +@item +@code{R_SPARC_TLS_LE_LOX10} is requested using @samp{%tle_lox10}. +@end itemize + +Here are some example TLS model sequences. + +First, General Dynamic: + +@example +sethi %tgd_hi22(symbol), %l1 +add %l1, %tgd_lo10(symbol), %l1 +add %l7, %l1, %o0, %tgd_add(symbol) +call __tls_get_addr, %tgd_call(symbol) +nop +@end example + +Local Dynamic: + +@example +sethi %tldm_hi22(symbol), %l1 +add %l1, %tldm_lo10(symbol), %l1 +add %l7, %l1, %o0, %tldm_add(symbol) +call __tls_get_addr, %tldm_call(symbol) +nop + +sethi %tldo_hix22(symbol), %l1 +xor %l1, %tldo_lox10(symbol), %l1 +add %o0, %l1, %l1, %tldo_add(symbol) +@end example + +Initial Exec: + +@example +sethi %tie_hi22(symbol), %l1 +add %l1, %tie_lo10(symbol), %l1 +ld [%l7 + %l1], %o0, %tie_ld(symbol) +add %g7, %o0, %o0, %tie_add(symbol) + +sethi %tie_hi22(symbol), %l1 +add %l1, %tie_lo10(symbol), %l1 +ldx [%l7 + %l1], %o0, %tie_ldx(symbol) +add %g7, %o0, %o0, %tie_add(symbol) +@end example + +And finally, Local Exec: + +@example +sethi %tle_hix22(symbol), %l1 +add %l1, %tle_lox10(symbol), %l1 +add %g7, %l1, %l1 +@end example + +When assembling for 64-bit, and a secondary constant addend is +specified in an address expression that would normally generate +an @code{R_SPARC_LO10} relocation, the assembler will emit an +@code{R_SPARC_OLO10} instead. + +@node Sparc-Size-Translations +@subsection Size Translations +@cindex Sparc size translations +@cindex size, translations, Sparc + +Often it is desirable to write code in an operand size agnostic +manner. @code{@value{AS}} provides support for this via +operand size opcode translations. Translations are supported +for loads, stores, shifts, compare-and-swap atomics, and the +@samp{clr} synthetic instruction. + +If generating 32-bit code, @code{@value{AS}} will generate the +32-bit opcode. Whereas if 64-bit code is being generated, +the 64-bit opcode will be emitted. For example @code{ldn} +will be transformed into @code{ld} for 32-bit code and +@code{ldx} for 64-bit code. + +Here is an example meant to demonstrate all the supported +opcode translations: + +@example +ldn [%o0], %o1 +ldna [%o0] %asi, %o2 +stn %o1, [%o0] +stna %o2, [%o0] %asi +slln %o3, 3, %o3 +srln %o4, 8, %o4 +sran %o5, 12, %o5 +casn [%o0], %o1, %o2 +casna [%o0] %asi, %o1, %o2 +clrn %g1 +@end example + +In 32-bit mode @code{@value{AS}} will emit: + +@example +ld [%o0], %o1 +lda [%o0] %asi, %o2 +st %o1, [%o0] +sta %o2, [%o0] %asi +sll %o3, 3, %o3 +srl %o4, 8, %o4 +sra %o5, 12, %o5 +cas [%o0], %o1, %o2 +casa [%o0] %asi, %o1, %o2 +clr %g1 +@end example + +And in 64-bit mode @code{@value{AS}} will emit: + +@example +ldx [%o0], %o1 +ldxa [%o0] %asi, %o2 +stx %o1, [%o0] +stxa %o2, [%o0] %asi +sllx %o3, 3, %o3 +srlx %o4, 8, %o4 +srax %o5, 12, %o5 +casx [%o0], %o1, %o2 +casxa [%o0] %asi, %o1, %o2 +clrx %g1 +@end example + +Finally, the @samp{.nword} translating directive is supported +as well. It is documented in the section on Sparc machine +directives. + +@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 suppresses any +errors about using undeclared global register, but does not emit any +information about it into the object file. This can be useful e.g. if you +save the register before use and restore it after. + +@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/binutils-2.25/gas/doc/c-tic54x.texi b/binutils-2.25/gas/doc/c-tic54x.texi new file mode 100644 index 00000000..8a373169 --- /dev/null +++ b/binutils-2.25/gas/doc/c-tic54x.texi @@ -0,0 +1,797 @@ +@c Copyright 2000-2013 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c TI TMS320C54X description by Timothy Wall, twall@cygnus.com +@ifset GENERIC +@page +@node TIC54X-Dependent +@chapter TIC54X Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter TIC54X Dependent Features +@end ifclear + +@cindex TIC54X support +@menu +* TIC54X-Opts:: Command-line Options +* TIC54X-Block:: Blocking +* TIC54X-Env:: Environment Settings +* TIC54X-Constants:: Constants Syntax +* TIC54X-Subsyms:: String Substitution +* TIC54X-Locals:: Local Label Syntax +* TIC54X-Builtins:: Builtin Assembler Math Functions +* TIC54X-Ext:: Extended Addressing Support +* TIC54X-Directives:: Directives +* TIC54X-Macros:: Macro Features +* TIC54X-MMRegs:: Memory-mapped Registers +* TIC54X-Syntax:: Syntax +@end menu + +@node TIC54X-Opts +@section Options + +@cindex options, TIC54X +@cindex TIC54X options +The TMS320C54X version of @code{@value{AS}} has a few machine-dependent options. + +@cindex @samp{-mfar-mode} option, far-mode +@cindex @samp{-mf} option, far-mode +You can use the @samp{-mfar-mode} option to enable extended addressing mode. +All addresses will be assumed to be > 16 bits, and the appropriate +relocation types will be used. This option is equivalent to using the +@samp{.far_mode} directive in the assembly code. If you do not use the +@samp{-mfar-mode} option, all references will be assumed to be 16 bits. +This option may be abbreviated to @samp{-mf}. + +@cindex @samp{-mcpu} option, cpu +You can use the @samp{-mcpu} option to specify a particular CPU. +This option is equivalent to using the @samp{.version} directive in the +assembly code. For recognized CPU codes, see +@xref{TIC54X-Directives,,@code{.version}}. The default CPU version is +@samp{542}. + +@cindex @samp{-merrors-to-file} option, stderr redirect +@cindex @samp{-me} option, stderr redirect +You can use the @samp{-merrors-to-file} option to redirect error output +to a file (this provided for those deficient environments which don't +provide adequate output redirection). This option may be abbreviated to +@samp{-me}. + +@node TIC54X-Block +@section Blocking +A blocked section or memory block is guaranteed not to cross the blocking +boundary (usually a page, or 128 words) if it is smaller than the +blocking size, or to start on a page boundary if it is larger than the +blocking size. + +@node TIC54X-Env +@section Environment Settings + +@cindex environment settings, TIC54X +@cindex @samp{A_DIR} environment variable, TIC54X +@cindex @samp{C54XDSP_DIR} environment variable, TIC54X +@samp{C54XDSP_DIR} and @samp{A_DIR} are semicolon-separated +paths which are added to the list of directories normally searched for +source and include files. @samp{C54XDSP_DIR} will override @samp{A_DIR}. + +@node TIC54X-Constants +@section Constants Syntax + +@cindex constants, TIC54X +The TIC54X version of @code{@value{AS}} allows the following additional +constant formats, using a suffix to indicate the radix: +@smallexample +@cindex binary constants, TIC54X + +Binary @code{000000B, 011000b} +Octal @code{10Q, 224q} +Hexadecimal @code{45h, 0FH} + +@end smallexample + +@node TIC54X-Subsyms +@section String Substitution +A subset of allowable symbols (which we'll call subsyms) may be assigned +arbitrary string values. This is roughly equivalent to C preprocessor +#define macros. When @code{@value{AS}} encounters one of these +symbols, the symbol is replaced in the input stream by its string value. +Subsym names @strong{must} begin with a letter. + +Subsyms may be defined using the @code{.asg} and @code{.eval} directives +(@xref{TIC54X-Directives,,@code{.asg}}, +@xref{TIC54X-Directives,,@code{.eval}}. + +Expansion is recursive until a previously encountered symbol is seen, at +which point substitution stops. + +In this example, x is replaced with SYM2; SYM2 is replaced with SYM1, and SYM1 +is replaced with x. At this point, x has already been encountered +and the substitution stops. + +@smallexample + .asg "x",SYM1 + .asg "SYM1",SYM2 + .asg "SYM2",x + add x,a ; final code assembled is "add x, a" +@end smallexample + +Macro parameters are converted to subsyms; a side effect of this is the normal +@code{@value{AS}} '\ARG' dereferencing syntax is unnecessary. Subsyms +defined within a macro will have global scope, unless the @code{.var} +directive is used to identify the subsym as a local macro variable +@pxref{TIC54X-Directives,,@code{.var}}. + +Substitution may be forced in situations where replacement might be +ambiguous by placing colons on either side of the subsym. The following +code: + +@smallexample + .eval "10",x +LAB:X: add #x, a +@end smallexample + +When assembled becomes: + +@smallexample +LAB10 add #10, a +@end smallexample + +Smaller parts of the string assigned to a subsym may be accessed with +the following syntax: + +@table @code +@item @code{:@var{symbol}(@var{char_index}):} +Evaluates to a single-character string, the character at @var{char_index}. +@item @code{:@var{symbol}(@var{start},@var{length}):} +Evaluates to a substring of @var{symbol} beginning at @var{start} with +length @var{length}. +@end table + +@node TIC54X-Locals +@section Local Labels +Local labels may be defined in two ways: + +@itemize @bullet +@item +$N, where N is a decimal number between 0 and 9 +@item +LABEL?, where LABEL is any legal symbol name. +@end itemize + +Local labels thus defined may be redefined or automatically generated. +The scope of a local label is based on when it may be undefined or reset. +This happens when one of the following situations is encountered: + +@itemize @bullet +@item +.newblock directive @pxref{TIC54X-Directives,,@code{.newblock}} +@item +The current section is changed (.sect, .text, or .data) +@item +Entering or leaving an included file +@item +The macro scope where the label was defined is exited +@end itemize + +@node TIC54X-Builtins +@section Math Builtins + +@cindex math builtins, TIC54X +@cindex TIC54X builtin math functions +@cindex builtin math functions, TIC54X + +The following built-in functions may be used to generate a +floating-point value. All return a floating-point value except +@samp{$cvi}, @samp{$int}, and @samp{$sgn}, which return an integer +value. + +@table @code +@cindex @code{$acos} math builtin, TIC54X +@item @code{$acos(@var{expr})} +Returns the floating point arccosine of @var{expr}. + +@cindex @code{$asin} math builtin, TIC54X +@item @code{$asin(@var{expr})} +Returns the floating point arcsine of @var{expr}. + +@cindex @code{$atan} math builtin, TIC54X +@item @code{$atan(@var{expr})} +Returns the floating point arctangent of @var{expr}. + +@cindex @code{$atan2} math builtin, TIC54X +@item @code{$atan2(@var{expr1},@var{expr2})} +Returns the floating point arctangent of @var{expr1} / @var{expr2}. + +@cindex @code{$ceil} math builtin, TIC54X +@item @code{$ceil(@var{expr})} +Returns the smallest integer not less than @var{expr} as floating point. + +@cindex @code{$cosh} math builtin, TIC54X +@item @code{$cosh(@var{expr})} +Returns the floating point hyperbolic cosine of @var{expr}. + +@cindex @code{$cos} math builtin, TIC54X +@item @code{$cos(@var{expr})} +Returns the floating point cosine of @var{expr}. + +@cindex @code{$cvf} math builtin, TIC54X +@item @code{$cvf(@var{expr})} +Returns the integer value @var{expr} converted to floating-point. + +@cindex @code{$cvi} math builtin, TIC54X +@item @code{$cvi(@var{expr})} +Returns the floating point value @var{expr} converted to integer. + +@cindex @code{$exp} math builtin, TIC54X +@item @code{$exp(@var{expr})} +Returns the floating point value e ^ @var{expr}. + +@cindex @code{$fabs} math builtin, TIC54X +@item @code{$fabs(@var{expr})} +Returns the floating point absolute value of @var{expr}. + +@cindex @code{$floor} math builtin, TIC54X +@item @code{$floor(@var{expr})} +Returns the largest integer that is not greater than @var{expr} as +floating point. + +@cindex @code{$fmod} math builtin, TIC54X +@item @code{$fmod(@var{expr1},@var{expr2})} +Returns the floating point remainder of @var{expr1} / @var{expr2}. + +@cindex @code{$int} math builtin, TIC54X +@item @code{$int(@var{expr})} +Returns 1 if @var{expr} evaluates to an integer, zero otherwise. + +@cindex @code{$ldexp} math builtin, TIC54X +@item @code{$ldexp(@var{expr1},@var{expr2})} +Returns the floating point value @var{expr1} * 2 ^ @var{expr2}. + +@cindex @code{$log10} math builtin, TIC54X +@item @code{$log10(@var{expr})} +Returns the base 10 logarithm of @var{expr}. + +@cindex @code{$log} math builtin, TIC54X +@item @code{$log(@var{expr})} +Returns the natural logarithm of @var{expr}. + +@cindex @code{$max} math builtin, TIC54X +@item @code{$max(@var{expr1},@var{expr2})} +Returns the floating point maximum of @var{expr1} and @var{expr2}. + +@cindex @code{$min} math builtin, TIC54X +@item @code{$min(@var{expr1},@var{expr2})} +Returns the floating point minimum of @var{expr1} and @var{expr2}. + +@cindex @code{$pow} math builtin, TIC54X +@item @code{$pow(@var{expr1},@var{expr2})} +Returns the floating point value @var{expr1} ^ @var{expr2}. + +@cindex @code{$round} math builtin, TIC54X +@item @code{$round(@var{expr})} +Returns the nearest integer to @var{expr} as a floating point number. + +@cindex @code{$sgn} math builtin, TIC54X +@item @code{$sgn(@var{expr})} +Returns -1, 0, or 1 based on the sign of @var{expr}. + +@cindex @code{$sin} math builtin, TIC54X +@item @code{$sin(@var{expr})} +Returns the floating point sine of @var{expr}. + +@cindex @code{$sinh} math builtin, TIC54X +@item @code{$sinh(@var{expr})} +Returns the floating point hyperbolic sine of @var{expr}. + +@cindex @code{$sqrt} math builtin, TIC54X +@item @code{$sqrt(@var{expr})} +Returns the floating point square root of @var{expr}. + +@cindex @code{$tan} math builtin, TIC54X +@item @code{$tan(@var{expr})} +Returns the floating point tangent of @var{expr}. + +@cindex @code{$tanh} math builtin, TIC54X +@item @code{$tanh(@var{expr})} +Returns the floating point hyperbolic tangent of @var{expr}. + +@cindex @code{$trunc} math builtin, TIC54X +@item @code{$trunc(@var{expr})} +Returns the integer value of @var{expr} truncated towards zero as +floating point. + +@end table + +@node TIC54X-Ext +@section Extended Addressing +The @code{LDX} pseudo-op is provided for loading the extended addressing bits +of a label or address. For example, if an address @code{_label} resides +in extended program memory, the value of @code{_label} may be loaded as +follows: +@smallexample + ldx #_label,16,a ; loads extended bits of _label + or #_label,a ; loads lower 16 bits of _label + bacc a ; full address is in accumulator A +@end smallexample + +@node TIC54X-Directives +@section Directives + +@cindex machine directives, TIC54X +@cindex TIC54X machine directives + +@table @code + +@cindex @code{align} directive, TIC54X +@cindex @code{even} directive, TIC54X +@item .align [@var{size}] +@itemx .even +Align the section program counter on the next boundary, based on +@var{size}. @var{size} may be any power of 2. @code{.even} is +equivalent to @code{.align} with a @var{size} of 2. +@table @code +@item 1 +Align SPC to word boundary +@item 2 +Align SPC to longword boundary (same as .even) +@item 128 +Align SPC to page boundary +@end table + +@cindex @code{asg} directive, TIC54X +@item .asg @var{string}, @var{name} +Assign @var{name} the string @var{string}. String replacement is +performed on @var{string} before assignment. + +@cindex @code{eval} directive, TIC54X +@item .eval @var{string}, @var{name} +Evaluate the contents of string @var{string} and assign the result as a +string to the subsym @var{name}. String replacement is performed on +@var{string} before assignment. + +@cindex @code{bss} directive, TIC54X +@item .bss @var{symbol}, @var{size} [, [@var{blocking_flag}] [,@var{alignment_flag}]] +Reserve space for @var{symbol} in the .bss section. @var{size} is in +words. If present, @var{blocking_flag} indicates the allocated space +should be aligned on a page boundary if it would otherwise cross a page +boundary. If present, @var{alignment_flag} causes the assembler to +allocate @var{size} on a long word boundary. + +@cindex @code{byte} directive, TIC54X +@cindex @code{ubyte} directive, TIC54X +@cindex @code{char} directive, TIC54X +@cindex @code{uchar} directive, TIC54X +@item .byte @var{value} [,...,@var{value_n}] +@itemx .ubyte @var{value} [,...,@var{value_n}] +@itemx .char @var{value} [,...,@var{value_n}] +@itemx .uchar @var{value} [,...,@var{value_n}] +Place one or more bytes into consecutive words of the current section. +The upper 8 bits of each word is zero-filled. If a label is used, it +points to the word allocated for the first byte encountered. + +@cindex @code{clink} directive, TIC54X +@item .clink ["@var{section_name}"] +Set STYP_CLINK flag for this section, which indicates to the linker that +if no symbols from this section are referenced, the section should not +be included in the link. If @var{section_name} is omitted, the current +section is used. + +@cindex @code{c_mode} directive, TIC54X +@item .c_mode +TBD. + +@cindex @code{copy} directive, TIC54X +@item .copy "@var{filename}" | @var{filename} +@itemx .include "@var{filename}" | @var{filename} +Read source statements from @var{filename}. The normal include search +path is used. Normally .copy will cause statements from the included +file to be printed in the assembly listing and .include will not, but +this distinction is not currently implemented. + +@cindex @code{data} directive, TIC54X +@item .data +Begin assembling code into the .data section. + +@cindex @code{double} directive, TIC54X +@cindex @code{ldouble} directive, TIC54X +@cindex @code{float} directive, TIC54X +@cindex @code{xfloat} directive, TIC54X +@item .double @var{value} [,...,@var{value_n}] +@itemx .ldouble @var{value} [,...,@var{value_n}] +@itemx .float @var{value} [,...,@var{value_n}] +@itemx .xfloat @var{value} [,...,@var{value_n}] +Place an IEEE single-precision floating-point representation of one or +more floating-point values into the current section. All but +@code{.xfloat} align the result on a longword boundary. Values are +stored most-significant word first. + +@cindex @code{drlist} directive, TIC54X +@cindex @code{drnolist} directive, TIC54X +@item .drlist +@itemx .drnolist +Control printing of directives to the listing file. Ignored. + +@cindex @code{emsg} directive, TIC54X +@cindex @code{mmsg} directive, TIC54X +@cindex @code{wmsg} directive, TIC54X +@item .emsg @var{string} +@itemx .mmsg @var{string} +@itemx .wmsg @var{string} +Emit a user-defined error, message, or warning, respectively. + +@cindex @code{far_mode} directive, TIC54X +@item .far_mode +Use extended addressing when assembling statements. This should appear +only once per file, and is equivalent to the -mfar-mode option @pxref{TIC54X-Opts,,@code{-mfar-mode}}. + +@cindex @code{fclist} directive, TIC54X +@cindex @code{fcnolist} directive, TIC54X +@item .fclist +@itemx .fcnolist +Control printing of false conditional blocks to the listing file. + +@cindex @code{field} directive, TIC54X +@item .field @var{value} [,@var{size}] +Initialize a bitfield of @var{size} bits in the current section. If +@var{value} is relocatable, then @var{size} must be 16. @var{size} +defaults to 16 bits. If @var{value} does not fit into @var{size} bits, +the value will be truncated. Successive @code{.field} directives will +pack starting at the current word, filling the most significant bits +first, and aligning to the start of the next word if the field size does +not fit into the space remaining in the current word. A @code{.align} +directive with an operand of 1 will force the next @code{.field} +directive to begin packing into a new word. If a label is used, it +points to the word that contains the specified field. + +@cindex @code{global} directive, TIC54X +@cindex @code{def} directive, TIC54X +@cindex @code{ref} directive, TIC54X +@item .global @var{symbol} [,...,@var{symbol_n}] +@itemx .def @var{symbol} [,...,@var{symbol_n}] +@itemx .ref @var{symbol} [,...,@var{symbol_n}] +@code{.def} nominally identifies a symbol defined in the current file +and available to other files. @code{.ref} identifies a symbol used in +the current file but defined elsewhere. Both map to the standard +@code{.global} directive. + +@cindex @code{half} directive, TIC54X +@cindex @code{uhalf} directive, TIC54X +@cindex @code{short} directive, TIC54X +@cindex @code{ushort} directive, TIC54X +@cindex @code{int} directive, TIC54X +@cindex @code{uint} directive, TIC54X +@cindex @code{word} directive, TIC54X +@cindex @code{uword} directive, TIC54X +@item .half @var{value} [,...,@var{value_n}] +@itemx .uhalf @var{value} [,...,@var{value_n}] +@itemx .short @var{value} [,...,@var{value_n}] +@itemx .ushort @var{value} [,...,@var{value_n}] +@itemx .int @var{value} [,...,@var{value_n}] +@itemx .uint @var{value} [,...,@var{value_n}] +@itemx .word @var{value} [,...,@var{value_n}] +@itemx .uword @var{value} [,...,@var{value_n}] +Place one or more values into consecutive words of the current section. +If a label is used, it points to the word allocated for the first value +encountered. + +@cindex @code{label} directive, TIC54X +@item .label @var{symbol} +Define a special @var{symbol} to refer to the load time address of the +current section program counter. + +@cindex @code{length} directive, TIC54X +@cindex @code{width} directive, TIC54X +@item .length +@itemx .width +Set the page length and width of the output listing file. Ignored. + +@cindex @code{list} directive, TIC54X +@cindex @code{nolist} directive, TIC54X +@item .list +@itemx .nolist +Control whether the source listing is printed. Ignored. + +@cindex @code{long} directive, TIC54X +@cindex @code{ulong} directive, TIC54X +@cindex @code{xlong} directive, TIC54X +@item .long @var{value} [,...,@var{value_n}] +@itemx .ulong @var{value} [,...,@var{value_n}] +@itemx .xlong @var{value} [,...,@var{value_n}] +Place one or more 32-bit values into consecutive words in the current +section. The most significant word is stored first. @code{.long} and +@code{.ulong} align the result on a longword boundary; @code{xlong} does +not. + +@cindex @code{loop} directive, TIC54X +@cindex @code{break} directive, TIC54X +@cindex @code{endloop} directive, TIC54X +@item .loop [@var{count}] +@itemx .break [@var{condition}] +@itemx .endloop +Repeatedly assemble a block of code. @code{.loop} begins the block, and +@code{.endloop} marks its termination. @var{count} defaults to 1024, +and indicates the number of times the block should be repeated. +@code{.break} terminates the loop so that assembly begins after the +@code{.endloop} directive. The optional @var{condition} will cause the +loop to terminate only if it evaluates to zero. + +@cindex @code{macro} directive, TIC54X +@cindex @code{endm} directive, TIC54X +@item @var{macro_name} .macro [@var{param1}][,...@var{param_n}] +@itemx [.mexit] +@itemx .endm +See the section on macros for more explanation (@xref{TIC54X-Macros}. + +@cindex @code{mlib} directive, TIC54X +@item .mlib "@var{filename}" | @var{filename} +Load the macro library @var{filename}. @var{filename} must be an +archived library (BFD ar-compatible) of text files, expected to contain +only macro definitions. The standard include search path is used. + +@cindex @code{mlist} directive, TIC54X +@cindex @code{mnolist} directive, TIC54X +@item .mlist +@itemx .mnolist +Control whether to include macro and loop block expansions in the +listing output. Ignored. + +@cindex @code{mmregs} directive, TIC54X +@item .mmregs +Define global symbolic names for the 'c54x registers. Supposedly +equivalent to executing @code{.set} directives for each register with +its memory-mapped value, but in reality is provided only for +compatibility and does nothing. + +@cindex @code{newblock} directive, TIC54X +@item .newblock +This directive resets any TIC54X local labels currently defined. Normal +@code{@value{AS}} local labels are unaffected. + +@cindex @code{option} directive, TIC54X +@item .option @var{option_list} +Set listing options. Ignored. + +@cindex @code{sblock} directive, TIC54X +@item .sblock "@var{section_name}" | @var{section_name} [,"@var{name_n}" | @var{name_n}] +Designate @var{section_name} for blocking. Blocking guarantees that a +section will start on a page boundary (128 words) if it would otherwise +cross a page boundary. Only initialized sections may be designated with +this directive. See also @xref{TIC54X-Block}. + +@cindex @code{sect} directive, TIC54X +@item .sect "@var{section_name}" +Define a named initialized section and make it the current section. + +@cindex @code{set} directive, TIC54X +@cindex @code{equ} directive, TIC54X +@item @var{symbol} .set "@var{value}" +@itemx @var{symbol} .equ "@var{value}" +Equate a constant @var{value} to a @var{symbol}, which is placed in the +symbol table. @var{symbol} may not be previously defined. + +@cindex @code{space} directive, TIC54X +@cindex @code{bes} directive, TIC54X +@item .space @var{size_in_bits} +@itemx .bes @var{size_in_bits} +Reserve the given number of bits in the current section and zero-fill +them. If a label is used with @code{.space}, it points to the +@strong{first} word reserved. With @code{.bes}, the label points to the +@strong{last} word reserved. + +@cindex @code{sslist} directive, TIC54X +@cindex @code{ssnolist} directive, TIC54X +@item .sslist +@itemx .ssnolist +Controls the inclusion of subsym replacement in the listing output. Ignored. + +@cindex @code{string} directive, TIC54X +@cindex @code{pstring} directive, TIC54X +@item .string "@var{string}" [,...,"@var{string_n}"] +@itemx .pstring "@var{string}" [,...,"@var{string_n}"] +Place 8-bit characters from @var{string} into the current section. +@code{.string} zero-fills the upper 8 bits of each word, while +@code{.pstring} puts two characters into each word, filling the +most-significant bits first. Unused space is zero-filled. If a label +is used, it points to the first word initialized. + +@cindex @code{struct} directive, TIC54X +@cindex @code{tag} directive, TIC54X +@cindex @code{endstruct} directive, TIC54X +@item [@var{stag}] .struct [@var{offset}] +@itemx [@var{name_1}] element [@var{count_1}] +@itemx [@var{name_2}] element [@var{count_2}] +@itemx [@var{tname}] .tag @var{stagx} [@var{tcount}] +@itemx ... +@itemx [@var{name_n}] element [@var{count_n}] +@itemx [@var{ssize}] .endstruct +@itemx @var{label} .tag [@var{stag}] +Assign symbolic offsets to the elements of a structure. @var{stag} +defines a symbol to use to reference the structure. @var{offset} +indicates a starting value to use for the first element encountered; +otherwise it defaults to zero. Each element can have a named offset, +@var{name}, which is a symbol assigned the value of the element's offset +into the structure. If @var{stag} is missing, these become global +symbols. @var{count} adjusts the offset that many times, as if +@code{element} were an array. @code{element} may be one of +@code{.byte}, @code{.word}, @code{.long}, @code{.float}, or any +equivalent of those, and the structure offset is adjusted accordingly. +@code{.field} and @code{.string} are also allowed; the size of +@code{.field} is one bit, and @code{.string} is considered to be one +word in size. Only element descriptors, structure/union tags, +@code{.align} and conditional assembly directives are allowed within +@code{.struct}/@code{.endstruct}. @code{.align} aligns member offsets +to word boundaries only. @var{ssize}, if provided, will always be +assigned the size of the structure. + +The @code{.tag} directive, in addition to being used to define a +structure/union element within a structure, may be used to apply a +structure to a symbol. Once applied to @var{label}, the individual +structure elements may be applied to @var{label} to produce the desired +offsets using @var{label} as the structure base. + +@cindex @code{tab} directive, TIC54X +@item .tab +Set the tab size in the output listing. Ignored. + +@cindex @code{union} directive, TIC54X +@cindex @code{tag} directive, TIC54X +@cindex @code{endunion} directive, TIC54X +@item [@var{utag}] .union +@itemx [@var{name_1}] element [@var{count_1}] +@itemx [@var{name_2}] element [@var{count_2}] +@itemx [@var{tname}] .tag @var{utagx}[,@var{tcount}] +@itemx ... +@itemx [@var{name_n}] element [@var{count_n}] +@itemx [@var{usize}] .endstruct +@itemx @var{label} .tag [@var{utag}] +Similar to @code{.struct}, but the offset after each element is reset to +zero, and the @var{usize} is set to the maximum of all defined elements. +Starting offset for the union is always zero. + +@cindex @code{usect} directive, TIC54X +@item [@var{symbol}] .usect "@var{section_name}", @var{size}, [,[@var{blocking_flag}] [,@var{alignment_flag}]] +Reserve space for variables in a named, uninitialized section (similar to +.bss). @code{.usect} allows definitions sections independent of .bss. +@var{symbol} points to the first location reserved by this allocation. +The symbol may be used as a variable name. @var{size} is the allocated +size in words. @var{blocking_flag} indicates whether to block this +section on a page boundary (128 words) (@pxref{TIC54X-Block}). +@var{alignment flag} indicates whether the section should be +longword-aligned. + +@cindex @code{var} directive, TIC54X +@item .var @var{sym}[,..., @var{sym_n}] +Define a subsym to be a local variable within a macro. See +@xref{TIC54X-Macros}. + +@cindex @code{version} directive, TIC54X +@item .version @var{version} +Set which processor to build instructions for. Though the following +values are accepted, the op is ignored. +@table @code +@item 541 +@itemx 542 +@itemx 543 +@itemx 545 +@itemx 545LP +@itemx 546LP +@itemx 548 +@itemx 549 +@end table +@end table + +@node TIC54X-Macros +@section Macros + +@cindex TIC54X-specific macros +@cindex macros, TIC54X +Macros do not require explicit dereferencing of arguments (i.e., \ARG). + +During macro expansion, the macro parameters are converted to subsyms. +If the number of arguments passed the macro invocation exceeds the +number of parameters defined, the last parameter is assigned the string +equivalent of all remaining arguments. If fewer arguments are given +than parameters, the missing parameters are assigned empty strings. To +include a comma in an argument, you must enclose the argument in quotes. + +@cindex subsym builtins, TIC54X +@cindex TIC54X subsym builtins +@cindex builtin subsym functions, TIC54X +The following built-in subsym functions allow examination of the string +value of subsyms (or ordinary strings). The arguments are strings +unless otherwise indicated (subsyms passed as args will be replaced by +the strings they represent). +@table @code +@cindex @code{$symlen} subsym builtin, TIC54X +@item @code{$symlen(@var{str})} +Returns the length of @var{str}. + +@cindex @code{$symcmp} subsym builtin, TIC54X +@item @code{$symcmp(@var{str1},@var{str2})} +Returns 0 if @var{str1} == @var{str2}, non-zero otherwise. + +@cindex @code{$firstch} subsym builtin, TIC54X +@item @code{$firstch(@var{str},@var{ch})} +Returns index of the first occurrence of character constant @var{ch} in +@var{str}. + +@cindex @code{$lastch} subsym builtin, TIC54X +@item @code{$lastch(@var{str},@var{ch})} +Returns index of the last occurrence of character constant @var{ch} in +@var{str}. + +@cindex @code{$isdefed} subsym builtin, TIC54X +@item @code{$isdefed(@var{symbol})} +Returns zero if the symbol @var{symbol} is not in the symbol table, +non-zero otherwise. + +@cindex @code{$ismember} subsym builtin, TIC54X +@item @code{$ismember(@var{symbol},@var{list})} +Assign the first member of comma-separated string @var{list} to +@var{symbol}; @var{list} is reassigned the remainder of the list. Returns +zero if @var{list} is a null string. Both arguments must be subsyms. + +@cindex @code{$iscons} subsym builtin, TIC54X +@item @code{$iscons(@var{expr})} +Returns 1 if string @var{expr} is binary, 2 if octal, 3 if hexadecimal, +4 if a character, 5 if decimal, and zero if not an integer. + +@cindex @code{$isname} subsym builtin, TIC54X +@item @code{$isname(@var{name})} +Returns 1 if @var{name} is a valid symbol name, zero otherwise. + +@cindex @code{$isreg} subsym builtin, TIC54X +@item @code{$isreg(@var{reg})} +Returns 1 if @var{reg} is a valid predefined register name (AR0-AR7 only). + +@cindex @code{$structsz} subsym builtin, TIC54X +@item @code{$structsz(@var{stag})} +Returns the size of the structure or union represented by @var{stag}. + +@cindex @code{$structacc} subsym builtin, TIC54X +@item @code{$structacc(@var{stag})} +Returns the reference point of the structure or union represented by +@var{stag}. Always returns zero. + +@end table + +@node TIC54X-MMRegs +@section Memory-mapped Registers + +@cindex TIC54X memory-mapped registers +@cindex registers, TIC54X memory-mapped +@cindex memory-mapped registers, TIC54X +The following symbols are recognized as memory-mapped registers: + +@table @code +@end table + +@node TIC54X-Syntax +@section TIC54X Syntax +@menu +* TIC54X-Chars:: Special Characters +@end menu + +@node TIC54X-Chars +@subsection Special Characters + +@cindex line comment character, TIC54X +@cindex TIC54X line comment character +The presence of a @samp{;} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +The presence of an asterisk (@samp{*}) at the start of a line also +indicates a comment that extends to the end of that line. + +@cindex line separator, TIC54X +@cindex statement separator, TIC54X +@cindex TIC54X line separator +The TIC54X assembler does not currently support a line separator +character. + diff --git a/binutils-2.25/gas/doc/c-tic6x.texi b/binutils-2.25/gas/doc/c-tic6x.texi new file mode 100644 index 00000000..a39a9a71 --- /dev/null +++ b/binutils-2.25/gas/doc/c-tic6x.texi @@ -0,0 +1,195 @@ +@c Copyright 2010, 2011 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end +@ifset GENERIC +@page +@node TIC6X-Dependent +@chapter TIC6X Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter TIC6X Dependent Features +@end ifclear + +@cindex TIC6X support +@cindex TMS320C6X support +@menu +* TIC6X Options:: Options +* TIC6X Syntax:: Syntax +* TIC6X Directives:: Directives +@end menu + +@node TIC6X Options +@section TIC6X Options +@cindex TIC6X options +@cindex options for TIC6X + +@c man begin OPTIONS +@table @gcctabopt + +@cindex @code{-march=} command line option, TIC6X +@item -march=@var{arch} +Enable (only) instructions from architecture @var{arch}. By default, +all instructions are permitted. + +The following values of @var{arch} are accepted: @code{c62x}, +@code{c64x}, @code{c64x+}, @code{c67x}, @code{c67x+}, @code{c674x}. + +@cindex @code{-mdsbt} command line option, TIC6X +@cindex @code{-mno-dsbt} command line option, TIC6X +@item -mdsbt +@itemx -mno-dsbt +The @option{-mdsbt} option causes the assembler to generate the +@code{Tag_ABI_DSBT} attribute with a value of 1, indicating that the +code is using DSBT addressing. The @option{-mno-dsbt} option, the +default, causes the tag to have a value of 0, indicating that the code +does not use DSBT addressing. The linker will emit a warning if +objects of different type (DSBT and non-DSBT) are linked together. + +@cindex @code{-mpid=} command line option, TIC6X +@item -mpid=no +@itemx -mpid=near +@itemx -mpid=far +The @option{-mpid=} option causes the assembler to generate the +@code{Tag_ABI_PID} attribute with a value indicating the form of data +addressing used by the code. @option{-mpid=no}, the default, +indicates position-dependent data addressing, @option{-mpid=near} +indicates position-independent addressing with GOT accesses using near +DP addressing, and @option{-mpid=far} indicates position-independent +addressing with GOT accesses using far DP addressing. The linker will +emit a warning if objects built with different settings of this option +are linked together. + +@cindex @code{-mpic} command line option, TIC6X +@cindex @code{-mno-pic} command line option, TIC6X +@item -mpic +@itemx -mno-pic +The @option{-mpic} option causes the assembler to generate the +@code{Tag_ABI_PIC} attribute with a value of 1, indicating that the +code is using position-independent code addressing, The +@code{-mno-pic} option, the default, causes the tag to have a value of +0, indicating position-dependent code addressing. The linker will +emit a warning if objects of different type (position-dependent and +position-independent) are linked together. + +@cindex TIC6X big-endian output +@cindex TIC6X little-endian output +@cindex big-endian output, TIC6X +@cindex little-endian output, TIC6X +@item -mbig-endian +@itemx -mlittle-endian +Generate code for the specified endianness. The default is +little-endian. + +@end table +@c man end + +@node TIC6X Syntax +@section TIC6X Syntax + +@cindex line comment character, TIC6X +@cindex TIC6X 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{#} or +@samp{*} appears as the first character of a line, the whole line is +treated as a comment. Note that if a line starts with a @samp{#} +character then it can also be a logical line number directive +(@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex line separator, TIC6X +@cindex statement separator, TIC6X +@cindex TIC6X line separator +The @samp{@@} character can be used instead of a newline to separate +statements. + +Instruction, register and functional unit names are case-insensitive. +@command{@value{AS}} requires fully-specified functional unit names, +such as @samp{.S1}, @samp{.L1X} or @samp{.D1T2}, on all instructions +using a functional unit. + +For some instructions, there may be syntactic ambiguity between +register or functional unit names and the names of labels or other +symbols. To avoid this, enclose the ambiguous symbol name in +parentheses; register and functional unit names may not be enclosed in +parentheses. + +@node TIC6X Directives +@section TIC6X Directives + +@cindex machine directives, TIC6X +@cindex TIC6X machine directives + +Directives controlling the set of instructions accepted by the +assembler have effect for instructions between the directive and any +subsequent directive overriding it. + +@table @code + +@cindex @code{.arch} directive, TIC6X +@item .arch @var{arch} +This has the same effect as @option{-march=@var{arch}}. + +@cindex @code{.cantunwind} directive, TIC6X +@item .cantunwind +Prevents unwinding through the current function. No personality routine +or exception table data is required or permitted. + +If this is not specified then frame unwinding information will be +constructed from CFI directives. @pxref{CFI directives}. + +@cindex @code{.c6xabi_attribute} directive, TIC6X +@item .c6xabi_attribute @var{tag}, @var{value} +Set the C6000 EABI build attribute @var{tag} to @var{value}. + +The @var{tag} is either an attribute number or one of +@code{Tag_ISA}, @code{Tag_ABI_wchar_t}, +@code{Tag_ABI_stack_align_needed}, +@code{Tag_ABI_stack_align_preserved}, @code{Tag_ABI_DSBT}, +@code{Tag_ABI_PID}, @code{Tag_ABI_PIC}, +@code{TAG_ABI_array_object_alignment}, +@code{TAG_ABI_array_object_align_expected}, +@code{Tag_ABI_compatibility} and @code{Tag_ABI_conformance}. The +@var{value} is either a @code{number}, @code{"string"}, or +@code{number, "string"} depending on the tag. + +@cindex @code{.ehtype} directive, TIC6X +@item .ehtype @var{symbol} +Output an exception type table reference to @var{symbol}. + +@cindex @code{.endp} directive, TIC6X +@item .endp +Marks the end of and exception table or function. If preceeded by a +@code{.handlerdata} directive then this also switched back to the previous +text section. + +@cindex @code{.handlerdata} directive, TIC6X +@item .handlerdata +Marks the end of the current function, and the start of the exception table +entry for that function. Anything between this directive and the +@code{.endp} directive will be added to the exception table entry. + +Must be preceded by a CFI block containing a @code{.cfi_lsda} directive. + +@cindex @code{.nocmp} directive, TIC6X +@item .nocmp +Disallow use of C64x+ compact instructions in the current text +section. + +@cindex @code{.personalityindex} directive, TIC6X +@item .personalityindex @var{index} +Sets the personality routine for the current function to the ABI specified +compact routine number @var{index} + +@cindex @code{.personality} directive, TIC6X +@item .personality @var{name} +Sets the personality routine for the current function to @var{name}. + +@cindex @code{.scomm} directive, TIC6X +@item .scomm @var{symbol}, @var{size}, @var{align} +Like @code{.comm}, creating a common symbol @var{symbol} with size @var{size} +and alignment @var{align}, but unlike when using @code{.comm}, this symbol +will be placed into the small BSS section by the linker. + +@end table diff --git a/binutils-2.25/gas/doc/c-tilegx.texi b/binutils-2.25/gas/doc/c-tilegx.texi new file mode 100644 index 00000000..0d8c038b --- /dev/null +++ b/binutils-2.25/gas/doc/c-tilegx.texi @@ -0,0 +1,363 @@ +@c Copyright 2011 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c man end + +@ifset GENERIC +@page +@node TILE-Gx-Dependent +@chapter TILE-Gx Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter TILE-Gx Dependent Features +@end ifclear + +@cindex TILE-Gx support +@menu +* TILE-Gx Options:: TILE-Gx Options +* TILE-Gx Syntax:: TILE-Gx Syntax +* TILE-Gx Directives:: TILE-Gx Directives +@end menu + +@node TILE-Gx Options +@section Options + +The following table lists all available TILE-Gx specific options: + +@c man begin OPTIONS +@table @gcctabopt +@cindex @samp{-m32} option, TILE-Gx +@cindex @samp{-m64} option, TILE-Gx +@item -m32 | -m64 +Select the word size, either 32 bits or 64 bits. + +@cindex @samp{-EB} option, TILE-Gx +@cindex @samp{-EL} option, TILE-Gx +@item -EB | -EL +Select the endianness, either big-endian (-EB) or little-endian (-EL). + +@end table +@c man end + +@node TILE-Gx Syntax +@section Syntax +@cindex TILE-Gx syntax +@cindex syntax, TILE-Gx + +Block comments are delimited by @samp{/*} and @samp{*/}. End of line +comments may be introduced by @samp{#}. + +Instructions consist of a leading opcode or macro name followed by +whitespace and an optional comma-separated list of operands: + +@smallexample +@var{opcode} [@var{operand}, @dots{}] +@end smallexample + +Instructions must be separated by a newline or semicolon. + +There are two ways to write code: either write naked instructions, +which the assembler is free to combine into VLIW bundles, or specify +the VLIW bundles explicitly. + +Bundles are specified using curly braces: + +@smallexample +@{ @var{add} r3,r4,r5 ; @var{add} r7,r8,r9 ; @var{lw} r10,r11 @} +@end smallexample + +A bundle can span multiple lines. If you want to put multiple +instructions on a line, whether in a bundle or not, you need to +separate them with semicolons as in this example. + +A bundle may contain one or more instructions, up to the limit +specified by the ISA (currently three). If fewer instructions are +specified than the hardware supports in a bundle, the assembler +inserts @code{fnop} instructions automatically. + +The assembler will prefer to preserve the ordering of instructions +within the bundle, putting the first instruction in a lower-numbered +pipeline than the next one, etc. This fact, combined with the +optional use of explicit @code{fnop} or @code{nop} instructions, +allows precise control over which pipeline executes each instruction. + +If the instructions cannot be bundled in the listed order, the +assembler will automatically try to find a valid pipeline +assignment. If there is no way to bundle the instructions together, +the assembler reports an error. + +The assembler does not yet auto-bundle (automatically combine multiple +instructions into one bundle), but it reserves the right to do so in +the future. If you want to force an instruction to run by itself, put +it in a bundle explicitly with curly braces and use @code{nop} +instructions (not @code{fnop}) to fill the remaining pipeline slots in +that bundle. + +@menu +* TILE-Gx Opcodes:: Opcode Naming Conventions. +* TILE-Gx Registers:: Register Naming. +* TILE-Gx Modifiers:: Symbolic Operand Modifiers. +@end menu + +@node TILE-Gx Opcodes +@subsection Opcode Names +@cindex TILE-Gx opcode names +@cindex opcode names, TILE-Gx + +For a complete list of opcodes and descriptions of their semantics, +see @cite{TILE-Gx Instruction Set Architecture}, available upon +request at www.tilera.com. + +@node TILE-Gx Registers +@subsection Register Names +@cindex TILE-Gx register names +@cindex register names, TILE-Gx + +General-purpose registers are represented by predefined symbols of the +form @samp{r@var{N}}, where @var{N} represents a number between +@code{0} and @code{63}. However, the following registers have +canonical names that must be used instead: + +@table @code +@item r54 +sp + +@item r55 +lr + +@item r56 +sn + +@item r57 +idn0 + +@item r58 +idn1 + +@item r59 +udn0 + +@item r60 +udn1 + +@item r61 +udn2 + +@item r62 +udn3 + +@item r63 +zero + +@end table + +The assembler will emit a warning if a numeric name is used instead of +the non-numeric name. The @code{.no_require_canonical_reg_names} +assembler pseudo-op turns off this +warning. @code{.require_canonical_reg_names} turns it back on. + +@node TILE-Gx Modifiers +@subsection Symbolic Operand Modifiers +@cindex TILE-Gx modifiers +@cindex symbol modifiers, TILE-Gx + +The assembler supports several modifiers when using symbol addresses +in TILE-Gx instruction operands. The general syntax is the following: + +@smallexample +modifier(symbol) +@end smallexample + +The following modifiers are supported: + +@table @code + +@item hw0 + +This modifier is used to load bits 0-15 of the symbol's address. + +@item hw1 + +This modifier is used to load bits 16-31 of the symbol's address. + +@item hw2 + +This modifier is used to load bits 32-47 of the symbol's address. + +@item hw3 + +This modifier is used to load bits 48-63 of the symbol's address. + +@item hw0_last + +This modifier yields the same value as @code{hw0}, but it also checks +that the value does not overflow. + +@item hw1_last + +This modifier yields the same value as @code{hw1}, but it also checks +that the value does not overflow. + +@item hw2_last + +This modifier yields the same value as @code{hw2}, but it also checks +that the value does not overflow. + +A 48-bit symbolic value is constructed by using the following idiom: + +@smallexample +moveli r0, hw2_last(sym) +shl16insli r0, r0, hw1(sym) +shl16insli r0, r0, hw0(sym) +@end smallexample + +@item hw0_got + +This modifier is used to load bits 0-15 of the symbol's offset in the +GOT entry corresponding to the symbol. + +@item hw0_last_got + +This modifier yields the same value as @code{hw0_got}, but it also +checks that the value does not overflow. + +@item hw1_last_got + +This modifier is used to load bits 16-31 of the symbol's offset in the +GOT entry corresponding to the symbol, and it also checks that the +value does not overflow. + +@item plt + +This modifier is used for function symbols. It causes a +@emph{procedure linkage table}, an array of code stubs, to be created +at the time the shared object is created or linked against, together +with a global offset table entry. The value is a pc-relative offset +to the corresponding stub code in the procedure linkage table. This +arrangement causes the run-time symbol resolver to be called to look +up and set the value of the symbol the first time the function is +called (at latest; depending environment variables). It is only safe +to leave the symbol unresolved this way if all references are function +calls. + +@item hw0_plt + +This modifier is used to load bits 0-15 of the pc-relative address of +a plt entry. + +@item hw1_plt + +This modifier is used to load bits 16-31 of the pc-relative address of +a plt entry. + +@item hw1_last_plt + +This modifier yields the same value as @code{hw1_plt}, but it also +checks that the value does not overflow. + +@item hw2_last_plt + +This modifier is used to load bits 32-47 of the pc-relative address of +a plt entry, and it also checks that the value does not overflow. + +@item hw0_tls_gd + +This modifier is used to load bits 0-15 of the offset of the GOT entry +of the symbol's TLS descriptor, to be used for general-dynamic TLS +accesses. + +@item hw0_last_tls_gd + +This modifier yields the same value as @code{hw0_tls_gd}, but it also +checks that the value does not overflow. + +@item hw1_last_tls_gd + +This modifier is used to load bits 16-31 of the offset of the GOT +entry of the symbol's TLS descriptor, to be used for general-dynamic +TLS accesses. It also checks that the value does not overflow. + +@item hw0_tls_ie + +This modifier is used to load bits 0-15 of the offset of the GOT entry +containing the offset of the symbol's address from the TCB, to be used +for initial-exec TLS accesses. + +@item hw0_last_tls_ie + +This modifier yields the same value as @code{hw0_tls_ie}, but it also +checks that the value does not overflow. + +@item hw1_last_tls_ie + +This modifier is used to load bits 16-31 of the offset of the GOT +entry containing the offset of the symbol's address from the TCB, to +be used for initial-exec TLS accesses. It also checks that the value +does not overflow. + +@item hw0_tls_le + +This modifier is used to load bits 0-15 of the offset of the symbol's +address from the TCB, to be used for local-exec TLS accesses. + +@item hw0_last_tls_le + +This modifier yields the same value as @code{hw0_tls_le}, but it also +checks that the value does not overflow. + +@item hw1_last_tls_le + +This modifier is used to load bits 16-31 of the offset of the symbol's +address from the TCB, to be used for local-exec TLS accesses. It +also checks that the value does not overflow. + +@item tls_gd_call + +This modifier is used to tag an instrution as the ``call'' part of a +calling sequence for a TLS GD reference of its operand. + +@item tls_gd_add + +This modifier is used to tag an instruction as the ``add'' part of a +calling sequence for a TLS GD reference of its operand. + +@item tls_ie_load + +This modifier is used to tag an instruction as the ``load'' part of a +calling sequence for a TLS IE reference of its operand. + +@end table + +@node TILE-Gx Directives +@section TILE-Gx Directives +@cindex machine directives, TILE-Gx +@cindex TILE-Gx machine directives + +@table @code + +@cindex @code{.align} directive, TILE-Gx +@item .align @var{expression} [, @var{expression}] +This is the generic @var{.align} directive. The first argument is the +requested alignment in bytes. + +@cindex @code{.allow_suspicious_bundles} directive, TILE-Gx +@item .allow_suspicious_bundles +Turns on error checking for combinations of instructions in a bundle +that probably indicate a programming error. This is on by default. + +@item .no_allow_suspicious_bundles +Turns off error checking for combinations of instructions in a bundle +that probably indicate a programming error. + +@cindex @code{.require_canonical_reg_names} directive, TILE-Gx +@item .require_canonical_reg_names +Require that canonical register names be used, and emit a warning if +the numeric names are used. This is on by default. + +@item .no_require_canonical_reg_names +Permit the use of numeric names for registers that have canonical +names. + +@end table diff --git a/binutils-2.25/gas/doc/c-tilepro.texi b/binutils-2.25/gas/doc/c-tilepro.texi new file mode 100644 index 00000000..5d80c4f0 --- /dev/null +++ b/binutils-2.25/gas/doc/c-tilepro.texi @@ -0,0 +1,332 @@ +@c Copyright 2011 +@c 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 TILEPro-Dependent +@chapter TILEPro Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter TILEPro Dependent Features +@end ifclear + +@cindex TILEPro support +@menu +* TILEPro Options:: TILEPro Options +* TILEPro Syntax:: TILEPro Syntax +* TILEPro Directives:: TILEPro Directives +@end menu + +@node TILEPro Options +@section Options + +@code{@value{AS}} has no machine-dependent command-line options for +TILEPro. + +@node TILEPro Syntax +@section Syntax +@cindex TILEPro syntax +@cindex syntax, TILEPro + +Block comments are delimited by @samp{/*} and @samp{*/}. End of line +comments may be introduced by @samp{#}. + +Instructions consist of a leading opcode or macro name followed by +whitespace and an optional comma-separated list of operands: + +@smallexample +@var{opcode} [@var{operand}, @dots{}] +@end smallexample + +Instructions must be separated by a newline or semicolon. + +There are two ways to write code: either write naked instructions, +which the assembler is free to combine into VLIW bundles, or specify +the VLIW bundles explicitly. + +Bundles are specified using curly braces: + +@smallexample +@{ @var{add} r3,r4,r5 ; @var{add} r7,r8,r9 ; @var{lw} r10,r11 @} +@end smallexample + +A bundle can span multiple lines. If you want to put multiple +instructions on a line, whether in a bundle or not, you need to +separate them with semicolons as in this example. + +A bundle may contain one or more instructions, up to the limit +specified by the ISA (currently three). If fewer instructions are +specified than the hardware supports in a bundle, the assembler +inserts @code{fnop} instructions automatically. + +The assembler will prefer to preserve the ordering of instructions +within the bundle, putting the first instruction in a lower-numbered +pipeline than the next one, etc. This fact, combined with the +optional use of explicit @code{fnop} or @code{nop} instructions, +allows precise control over which pipeline executes each instruction. + +If the instructions cannot be bundled in the listed order, the +assembler will automatically try to find a valid pipeline +assignment. If there is no way to bundle the instructions together, +the assembler reports an error. + +The assembler does not yet auto-bundle (automatically combine multiple +instructions into one bundle), but it reserves the right to do so in +the future. If you want to force an instruction to run by itself, put +it in a bundle explicitly with curly braces and use @code{nop} +instructions (not @code{fnop}) to fill the remaining pipeline slots in +that bundle. + +@menu +* TILEPro Opcodes:: Opcode Naming Conventions. +* TILEPro Registers:: Register Naming. +* TILEPro Modifiers:: Symbolic Operand Modifiers. +@end menu + +@node TILEPro Opcodes +@subsection Opcode Names +@cindex TILEPro opcode names +@cindex opcode names, TILEPro + +For a complete list of opcodes and descriptions of their semantics, +see @cite{TILE Processor User Architecture Manual}, available upon +request at www.tilera.com. + +@node TILEPro Registers +@subsection Register Names +@cindex TILEPro register names +@cindex register names, TILEPro + +General-purpose registers are represented by predefined symbols of the +form @samp{r@var{N}}, where @var{N} represents a number between +@code{0} and @code{63}. However, the following registers have +canonical names that must be used instead: + +@table @code +@item r54 +sp + +@item r55 +lr + +@item r56 +sn + +@item r57 +idn0 + +@item r58 +idn1 + +@item r59 +udn0 + +@item r60 +udn1 + +@item r61 +udn2 + +@item r62 +udn3 + +@item r63 +zero + +@end table + +The assembler will emit a warning if a numeric name is used instead of +the canonical name. The @code{.no_require_canonical_reg_names} +assembler pseudo-op turns off this +warning. @code{.require_canonical_reg_names} turns it back on. + +@node TILEPro Modifiers +@subsection Symbolic Operand Modifiers +@cindex TILEPro modifiers +@cindex symbol modifiers, TILEPro + +The assembler supports several modifiers when using symbol addresses +in TILEPro instruction operands. The general syntax is the following: + +@smallexample +modifier(symbol) +@end smallexample + +The following modifiers are supported: + +@table @code + +@item lo16 + +This modifier is used to load the low 16 bits of the symbol's address, +sign-extended to a 32-bit value (sign-extension allows it to be +range-checked against signed 16 bit immediate operands without +complaint). + +@item hi16 + +This modifier is used to load the high 16 bits of the symbol's +address, also sign-extended to a 32-bit value. + +@item ha16 + +@code{ha16(N)} is identical to @code{hi16(N)}, except if +@code{lo16(N)} is negative it adds one to the @code{hi16(N)} +value. This way @code{lo16} and @code{ha16} can be added to create any +32-bit value using @code{auli}. For example, here is how you move an +arbitrary 32-bit address into r3: + +@smallexample +moveli r3, lo16(sym) +auli r3, r3, ha16(sym) +@end smallexample + +@item got + +This modifier is used to load the offset of the GOT entry +corresponding to the symbol. + +@item got_lo16 + +This modifier is used to load the sign-extended low 16 bits of the +offset of the GOT entry corresponding to the symbol. + +@item got_hi16 + +This modifier is used to load the sign-extended high 16 bits of the +offset of the GOT entry corresponding to the symbol. + +@item got_ha16 + +This modifier is like @code{got_hi16}, but it adds one if +@code{got_lo16} of the input value is negative. + +@item plt + +This modifier is used for function symbols. It causes a +@emph{procedure linkage table}, an array of code stubs, to be created +at the time the shared object is created or linked against, together +with a global offset table entry. The value is a pc-relative offset +to the corresponding stub code in the procedure linkage table. This +arrangement causes the run-time symbol resolver to be called to look +up and set the value of the symbol the first time the function is +called (at latest; depending environment variables). It is only safe +to leave the symbol unresolved this way if all references are function +calls. + +@item tls_gd + +This modifier is used to load the offset of the GOT entry of the +symbol's TLS descriptor, to be used for general-dynamic TLS accesses. + +@item tls_gd_lo16 + +This modifier is used to load the sign-extended low 16 bits of the +offset of the GOT entry of the symbol's TLS descriptor, to be used for +general dynamic TLS accesses. + +@item tls_gd_hi16 + +This modifier is used to load the sign-extended high 16 bits of the +offset of the GOT entry of the symbol's TLS descriptor, to be used for +general dynamic TLS accesses. + +@item tls_gd_ha16 + +This modifier is like @code{tls_gd_hi16}, but it adds one to the value +if @code{tls_gd_lo16} of the input value is negative. + +@item tls_ie + +This modifier is used to load the offset of the GOT entry containing +the offset of the symbol's address from the TCB, to be used for +initial-exec TLS accesses. + +@item tls_ie_lo16 + +This modifier is used to load the low 16 bits of the offset of the GOT +entry containing the offset of the symbol's address from the TCB, to +be used for initial-exec TLS accesses. + +@item tls_ie_hi16 + +This modifier is used to load the high 16 bits of the offset of the +GOT entry containing the offset of the symbol's address from the TCB, +to be used for initial-exec TLS accesses. + +@item tls_ie_ha16 + +This modifier is like @code{tls_ie_hi16}, but it adds one to the value +if @code{tls_ie_lo16} of the input value is negative. + +@item tls_le + +This modifier is used to load the offset of the symbol's address from +the TCB, to be used for local-exec TLS accesses. + +@item tls_le_lo16 + +This modifier is used to load the low 16 bits of the offset of the +symbol's address from the TCB, to be used for local-exec TLS accesses. + +@item tls_le_hi16 + +This modifier is used to load the high 16 bits of the offset of the +symbol's address from the TCB, to be used for local-exec TLS accesses. + +@item tls_le_ha16 + +This modifier is like @code{tls_le_hi16}, but it adds one to the value +if @code{tls_le_lo16} of the input value is negative. + +@item tls_gd_call + +This modifier is used to tag an instrution as the ``call'' part of a +calling sequence for a TLS GD reference of its operand. + +@item tls_gd_add + +This modifier is used to tag an instruction as the ``add'' part of a +calling sequence for a TLS GD reference of its operand. + +@item tls_ie_load + +This modifier is used to tag an instruction as the ``load'' part of a +calling sequence for a TLS IE reference of its operand. + +@end table + +@node TILEPro Directives +@section TILEPro Directives +@cindex machine directives, TILEPro +@cindex TILEPro machine directives + +@table @code + +@cindex @code{.align} directive, TILEPro +@item .align @var{expression} [, @var{expression}] +This is the generic @var{.align} directive. The first argument is the +requested alignment in bytes. + +@cindex @code{.allow_suspicious_bundles} directive, TILEPro +@item .allow_suspicious_bundles +Turns on error checking for combinations of instructions in a bundle +that probably indicate a programming error. This is on by default. + +@item .no_allow_suspicious_bundles +Turns off error checking for combinations of instructions in a bundle +that probably indicate a programming error. + +@cindex @code{.require_canonical_reg_names} directive, TILEPro +@item .require_canonical_reg_names +Require that canonical register names be used, and emit a warning if +the numeric names are used. This is on by default. + +@item .no_require_canonical_reg_names +Permit the use of numeric names for registers that have canonical +names. + +@end table + diff --git a/binutils-2.25/gas/doc/c-v850.texi b/binutils-2.25/gas/doc/c-v850.texi new file mode 100644 index 00000000..2516a838 --- /dev/null +++ b/binutils-2.25/gas/doc/c-v850.texi @@ -0,0 +1,475 @@ +@c Copyright 1997-2013 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{-mv850e1} command line option, V850 +@item -mv850e1 +Specifies that the assembled code should be marked as being targeted at +the V850E1 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@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. + +@cindex @code{-mv850e2} command line option, V850 +@item -mv850e2 +Specifies that the assembled code should be marked as being targeted at +the V850E2 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{-mv850e2v3} command line option, V850 +@item -mv850e2v3 +Specifies that the assembled code should be marked as being targeted at +the V850E2V3 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{-mv850e2v4} command line option, V850 +@item -mv850e2v4 +This is an alias for @option{-mv850e3v5}. + +@cindex @code{-mv850e3v5} command line option, V850 +@item -mv850e3v5 +Specifies that the assembled code should be marked as being targeted at +the V850E3V5 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{-mrelax} command line option, V850 +@item -mrelax +Enables relaxation. This allows the .longcall and .longjump pseudo +ops to be used in the assembler source code. These ops label sections +of code which are either a long function call or a long branch. The +assembler will then flag these sections of code and the linker will +attempt to relax them. + +@cindex @code{-mgcc-abi} command line option, V850 +@item -mgcc-abi +Marks the generated objecy file as supporting the old GCC ABI. + +@cindex @code{-mrh850-abi} command line option, V850 +@item -mrh850-abi +Marks the generated objecy file as supporting the RH850 ABI. This is +the default. + +@cindex @code{-m8byte-align} command line option, V850 +@item -m8byte-align +Marks the generated objecy file as supporting a maximum 64-bits of +alignment for variables defined in the source code. + +@cindex @code{-m4byte-align} command line option, V850 +@item -m4byte-align +Marks the generated objecy file as supporting a maximum 32-bits of +alignment for variables defined in the source code. This is the +default. + +@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. If a @samp{#} appears as the +first character of a line, the whole line is treated as a comment, but +in this case the line can also be a logical line number directive +(@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +Two dashes (@samp{--}) can also be used to start a line comment. + +@cindex line separator, V850 +@cindex statement separator, V850 +@cindex V850 line separator + +The @samp{;} character can be used to separate statements on the same +line. + +@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. + +@cindex @code{.v850e1} directive, V850 +@item .v850e1 +Specifies that the assembled code should be marked as being targeted at +the V850E1 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{.v850e2} directive, V850 +@item .v850e2 +Specifies that the assembled code should be marked as being targeted at +the V850E2 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{.v850e2v3} directive, V850 +@item .v850e2v3 +Specifies that the assembled code should be marked as being targeted at +the V850E2V3 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{.v850e2v4} directive, V850 +@item .v850e2v4 +Specifies that the assembled code should be marked as being targeted at +the V850E3V5 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@cindex @code{.v850e3v5} directive, V850 +@item .v850e3v5 +Specifies that the assembled code should be marked as being targeted at +the V850E3V5 processor. This allows the linker to detect attempts to link +such code with code assembled for other processors. + +@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 multiplies 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 +extension on its immediate operand. So for example if the address of +'here' was 0xFFFFFFFF then without the special behaviour of the hi() +pseudo-op the movhi instruction would put 0xFFFF0000 into r6, then the +movea instruction would takes its immediate operand, 0xFFFF, sign extend +it to 32 bits, 0xFFFFFFFF, and then add it into r6 giving 0xFFFEFFFF +which is wrong (the fifth nibble is E). With the hi() pseudo op adding +in the top bit of the lo() pseudo op, the movhi instruction actually +stores 0 into r6 (0xFFFF + 1 = 0x0000), so that the movea instruction +stores 0xFFFFFFFF into r6 - the right value. + +@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'. + +@cindex @code{longcall} pseudo-op, V850 +@item .longcall @code{name} +Indicates that the following sequence of instructions is a long call +to function @code{name}. The linker will attempt to shorten this call +sequence if @code{name} is within a 22bit offset of the call. Only +valid if the @code{-mrelax} command line switch has been enabled. + +@cindex @code{longjump} pseudo-op, V850 +@item .longjump @code{name} +Indicates that the following sequence of instructions is a long jump +to label @code{name}. The linker will attempt to shorten this code +sequence if @code{name} is within a 22bit offset of the jump. Only +valid if the @code{-mrelax} command line switch has been enabled. + +@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/binutils-2.25/gas/doc/c-vax.texi b/binutils-2.25/gas/doc/c-vax.texi new file mode 100644 index 00000000..9eacd10d --- /dev/null +++ b/binutils-2.25/gas/doc/c-vax.texi @@ -0,0 +1,384 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2002, 2011 +@c 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 enhanced 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 +* VAX-Syntax:: VAX Syntax +@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. + +@node VAX-Syntax +@section VAX Syntax +@menu +* VAX-Chars:: Special Characters +@end menu + +@node VAX-Chars +@subsection Special Characters + +@cindex line comment character, VAX +@cindex VAX line comment character +The presence of a @samp{#} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, VAX +@cindex statement separator, VAX +@cindex VAX line separator +The @samp{;} character can be used to separate statements on the same +line. diff --git a/binutils-2.25/gas/doc/c-xc16x.texi b/binutils-2.25/gas/doc/c-xc16x.texi new file mode 100644 index 00000000..9589139c --- /dev/null +++ b/binutils-2.25/gas/doc/c-xc16x.texi @@ -0,0 +1,80 @@ +@c Copyright 2006, 2011 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@page +@node xc16x-Dependent +@chapter Infineon xc16x Dependent Features + +@cindex xc16x support +@menu +* xc16x Directives:: xc16x Machine Directives +* xc16x Syntax:: xc16x Syntax +@end menu + +@node xc16x Directives +@section xc16x Machine Directives + +The xc16x version of the assembler supports the following machine +directives: + +@table @code +@cindex @code{align} directive, xc16x +@item .align +This directive aligns the section program counter on the next 2-byte +boundary. + + +@cindex @code{byte} directive, xc16x +@item .byte @var{expr} +This directive assembles a half-word (8-bit) constant. + +@cindex @code{word} directive, xc16x +@item .word @var{expr} +This assembles a word (16-bit) constant. + +@cindex @code{ascii} directive, xc16x +@item .ascii "@var{ascii}" +This directive used for copying @var{str} into the object file. +The string is terminated with a null byte. + +@cindex @code{set} directive, xc16x +@item .set @var{symbol}, @var{value} +This directive creates a symbol named @var{symbol} which is an alias for +another symbol (possibly not yet defined). This should not be confused +with the mnemonic @code{set}, which is a legitimate xc16x instruction. + + + +@cindex @code{bss} directive, xc16x +@item .bss @var{symbol}, @var{length} +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. +@end table + +@node xc16x Syntax +@section xc16x Syntax +@menu +* xc16x-Chars:: Special Characters +@end menu + +@node xc16x-Chars +@subsection Special Characters + +@cindex line comment character, xc16x +@cindex xc16c line comment character +The presence of a @samp{;} appearing anywhere on a line indicates the +start of a comment that extends to the end of that line. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line can also be a +logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, xc16x +@cindex statement separator, xc16x +@cindex xc16x line separator +The XC16X assembler does not support a line separator character. diff --git a/binutils-2.25/gas/doc/c-xgate.texi b/binutils-2.25/gas/doc/c-xgate.texi new file mode 100644 index 00000000..360554fd --- /dev/null +++ b/binutils-2.25/gas/doc/c-xgate.texi @@ -0,0 +1,209 @@ +@c Copyright 2012 +@c 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 XGATE-Dependent +@chapter XGATE Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter XGATE Dependent Features +@end ifclear + +@cindex XGATE support +@menu +* XGATE-Opts:: XGATE Options +* XGATE-Syntax:: Syntax +* XGATE-Directives:: Assembler Directives +* XGATE-Float:: Floating Point +* XGATE-opcodes:: Opcodes +@end menu + +@node XGATE-Opts +@section XGATE Options + +@cindex options, XGATE +@cindex XGATE options +The Freescale XGATE version of @code{@value{AS}} has a few machine +dependent options. + +@table @code + +@cindex @samp{-mshort} +@item -mshort +This option controls the ABI and indicates to use a 16-bit integer ABI. +It has no effect on the assembled instructions. +This is the default. + +@cindex @samp{-mlong} +@item -mlong +This option controls the ABI and indicates to use a 32-bit integer ABI. + +@cindex @samp{-mshort-double} +@item -mshort-double +This option controls the ABI and indicates to use a 32-bit float ABI. +This is the default. + +@cindex @samp{-mlong-double} +@item -mlong-double +This option controls the ABI and indicates to use a 64-bit float ABI. + +@cindex @samp{--print-insn-syntax} +@item --print-insn-syntax +You can use the @samp{--print-insn-syntax} option to obtain the +syntax description of the instruction when an error is detected. + +@cindex @samp{--print-opcodes} +@item --print-opcodes +The @samp{--print-opcodes} option prints the list of all the +instructions with their syntax. Once the list is printed +@code{@value{AS}} exits. + +@end table + +@node XGATE-Syntax +@section Syntax + +@cindex XGATE syntax +@cindex syntax, XGATE + +In XGATE RISC syntax, the instruction name comes first and it may +be followed by up to three operands. Operands are separated by commas +(@samp{,}). @code{@value{AS}} will complain if too many operands are specified +for a given instruction. The same will happen if you specified too few + operands. + +@smallexample +nop +ldl #23 +CMP R1, R2 +@end smallexample + +@cindex line comment character, XGATE +@cindex XGATE line comment character +The presence of a @samp{;} character or a @samp{!} character anywhere +on a line indicates the start of a comment that extends to the end of +that line. + +A @samp{*} or a @samp{#} character at the start of a line also +introduces a line comment, but these characters do not work elsewhere +on the line. If the first character of the line is a @samp{#} then as +well as starting a comment, the line could also be logical line number +directive (@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex line separator, XGATE +@cindex statement separator, XGATE +@cindex XGATE line separator +The XGATE assembler does not currently support a line separator +character. + +@cindex XGATE addressing modes +@cindex addressing modes, XGATE +The following addressing modes are understood for XGATE: +@table @dfn +@item Inherent +@samp{} + +@item Immediate 3 Bit Wide +@samp{#@var{number}} + +@item Immediate 4 Bit Wide +@samp{#@var{number}} + +@item Immediate 8 Bit Wide +@samp{#@var{number}} + +@item Monadic Addressing +@samp{@var{reg}} + +@item Dyadic Addressing +@samp{@var{reg}, @var{reg}} + +@item Triadic Addressing +@samp{@var{reg}, @var{reg}, @var{reg}} + +@item Relative Addressing 9 Bit Wide +@samp{*@var{symbol}} + +@item Relative Addressing 10 Bit Wide +@samp{*@var{symbol}} + +@item Index Register plus Immediate Offset +@samp{@var{reg}, (@var{reg}, #@var{number})} + +@item Index Register plus Register Offset +@samp{@var{reg}, @var{reg}, @var{reg}} + +@item Index Register plus Register Offset with Post-increment +@samp{@var{reg}, @var{reg}, @var{reg}+} + +@item Index Register plus Register Offset with Pre-decrement +@samp{@var{reg}, @var{reg}, -@var{reg}} + +The register can be either @samp{R0}, @samp{R1}, @samp{R2}, @samp{R3}, +@samp{R4}, @samp{R5}, @samp{R6} or @samp{R7}. + +@end table + +Convience macro opcodes to deal with 16-bit values have been added. + +@table @dfn + +@item Immediate 16 Bit Wide +@samp{#@var{number}}, or @samp{*@var{symbol}} + +For example: + +@smallexample +ldw R1, #1024 +ldw R3, timer +ldw R1, (R1, #0) +COM R1 +stw R2, (R1, #0) +@end smallexample +@end table + +@node XGATE-Directives +@section Assembler Directives + +@cindex assembler directives, XGATE +@cindex XGATE assembler directives + +The XGATE version of @code{@value{AS}} have the following +specific assembler directives: + +@node XGATE-Float +@section Floating Point + +@cindex floating point, XGATE +@cindex XGATE floating point +Packed decimal (P) format floating literals are not supported(yet). + +The floating point formats generated by directives are these. + +@table @code +@cindex @code{float} directive, XGATE +@item .float +@code{Single} precision floating point constants. + +@cindex @code{double} directive, XGATE +@item .double +@code{Double} precision floating point constants. + +@cindex @code{extend} directive XGATE +@cindex @code{ldouble} directive XGATE +@item .extend +@itemx .ldouble +@code{Extended} precision (@code{long double}) floating point constants. +@end table + +@need 2000 +@node XGATE-opcodes +@section Opcodes + +@cindex XGATE opcodes +@cindex instruction set, XGATE + diff --git a/binutils-2.25/gas/doc/c-xstormy16.texi b/binutils-2.25/gas/doc/c-xstormy16.texi new file mode 100644 index 00000000..31ba6f96 --- /dev/null +++ b/binutils-2.25/gas/doc/c-xstormy16.texi @@ -0,0 +1,104 @@ +@c Copyright 2010, 2011 Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@node XSTORMY16-Dependent +@chapter XStormy16 Dependent Features + +@cindex XStormy16 support +@menu +* XStormy16 Syntax:: Syntax +* XStormy16 Directives:: Machine Directives +* XStormy16 Opcodes:: Pseudo-Opcodes +@end menu + +@node XStormy16 Syntax +@section Syntax +@menu +* XStormy16-Chars:: Special Characters +@end menu + +@node XStormy16-Chars +@subsection Special Characters + +@cindex line comment character, XStormy16 +@cindex XStormy16 line comment character +@samp{#} is the line comment character. If a @samp{#} appears as the +first character of a line, the whole line is treated as a comment, but +in this case the line can also be a logical line number directive +(@pxref{Comments}) or a preprocessor control command +(@pxref{Preprocessing}). + +@cindex comment character, XStormy16 +@cindex XStormy16 comment character +A semicolon (@samp{;}) can be used to start a comment that extends +from wherever the character appears on the line up to the end of the +line. + +@cindex line separator, XStormy16 +@cindex statement separator, XStormy16 +@cindex XStormy16 line separator + +The @samp{|} character can be used to separate statements on the same +line. + + +@node XStormy16 Directives +@section XStormy16 Machine Directives + +@cindex machine directives, XStormy16 +@cindex XStormy16 machine directives +@table @code + +@cindex @code{16bit_pointers} directive, XStormy16 +@item .16bit_pointers +Like the @option{--16bit-pointers} command line option this directive +indicates that the assembly code makes use of 16-bit pointers. + +@cindex @code{32bit_pointers} directive, XStormy16 +@item .32bit_pointers +Like the @option{--32bit-pointers} command line option this directive +indicates that the assembly code makes use of 32-bit pointers. + +@cindex @code{.no_pointers} directive, XStormy16 +@item .no_pointers +Like the @option{--no-pointers} command line option this directive +indicates that the assembly code does not makes use pointers. + +@end table + +@node XStormy16 Opcodes +@section XStormy16 Pseudo-Opcodes + +@cindex XStormy16 pseudo-opcodes +@cindex pseudo-opcodes for XStormy16 +@code{@value{AS}} implements all the standard XStormy16 opcodes. + +@code{@value{AS}} also implements the following pseudo ops: + +@table @code + +@cindex @code{@@lo} pseudo-op, XStormy16 +@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{add r6, @@lo(here - there)} + +computes the difference between the address of labels 'here' and +'there', takes the lower 16 bits of this difference and adds it to +register 6. + +@cindex @code{@@hi} pseudo-op, XStormy16 +@item @@hi() +Computes the higher 16 bits of the given expression and stores it into +the immediate operand field of the given instruction. For example: + + @samp{addc r7, @@hi(here - there)} + +computes the difference between the address of labels 'here' and +'there', takes the upper 16 bits of this difference, shifts it down 16 +bits and then adds it, along with the carry bit, to the value in +register 7. + +@end table diff --git a/binutils-2.25/gas/doc/c-xtensa.texi b/binutils-2.25/gas/doc/c-xtensa.texi new file mode 100644 index 00000000..bf5b38b0 --- /dev/null +++ b/binutils-2.25/gas/doc/c-xtensa.texi @@ -0,0 +1,820 @@ +@c Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. +@c +@c man end +@ifset GENERIC +@page +@node Xtensa-Dependent +@chapter Xtensa Dependent Features +@end ifset +@ifclear GENERIC +@node Machine Dependencies +@chapter Xtensa Dependent Features +@end ifclear + +@cindex Xtensa architecture +This chapter covers features of the @sc{gnu} assembler that are specific +to the Xtensa architecture. For details about the Xtensa instruction +set, please consult the @cite{Xtensa Instruction Set Architecture (ISA) +Reference Manual}. + +@menu +* Xtensa Options:: Command-line Options. +* Xtensa Syntax:: Assembler Syntax for Xtensa Processors. +* Xtensa Optimizations:: Assembler Optimizations. +* Xtensa Relaxation:: Other Automatic Transformations. +* Xtensa Directives:: Directives for Xtensa Processors. +@end menu + +@node Xtensa Options +@section Command Line Options + +@c man begin OPTIONS +@table @gcctabopt + +@item --text-section-literals | --no-text-section-literals +@kindex --text-section-literals +@kindex --no-text-section-literals +Control the treatment of literal pools. The default is +@samp{--no-@-text-@-section-@-literals}, which places literals in +separate sections in the output file. This allows the literal pool to be +placed in a data RAM/ROM. With @samp{--text-@-section-@-literals}, the +literals are interspersed in the text section in order to keep them as +close as possible to their references. This may be necessary for large +assembly files, where the literals would otherwise be out of range of the +@code{L32R} instructions in the text section. These options only affect +literals referenced via PC-relative @code{L32R} instructions; literals +for absolute mode @code{L32R} instructions are handled separately. +@xref{Literal Directive, ,literal}. + +@item --absolute-literals | --no-absolute-literals +@kindex --absolute-literals +@kindex --no-absolute-literals +Indicate to the assembler whether @code{L32R} instructions use absolute +or PC-relative addressing. If the processor includes the absolute +addressing option, the default is to use absolute @code{L32R} +relocations. Otherwise, only the PC-relative @code{L32R} relocations +can be used. + +@item --target-align | --no-target-align +@kindex --target-align +@kindex --no-target-align +Enable or disable automatic alignment to reduce branch penalties at some +expense in code size. @xref{Xtensa Automatic Alignment, ,Automatic +Instruction Alignment}. This optimization is enabled by default. Note +that the assembler will always align instructions like @code{LOOP} that +have fixed alignment requirements. + +@item --longcalls | --no-longcalls +@kindex --longcalls +@kindex --no-longcalls +Enable or disable transformation of call instructions to allow calls +across a greater range of addresses. @xref{Xtensa Call Relaxation, +,Function Call Relaxation}. This option should be used when call +targets can potentially be out of range. It may degrade both code size +and performance, but the linker can generally optimize away the +unnecessary overhead when a call ends up within range. The default is +@samp{--no-@-longcalls}. + +@item --transform | --no-transform +@kindex --transform +@kindex --no-transform +Enable or disable all assembler transformations of Xtensa instructions, +including both relaxation and optimization. The default is +@samp{--transform}; @samp{--no-transform} should only be used in the +rare cases when the instructions must be exactly as specified in the +assembly source. Using @samp{--no-transform} causes out of range +instruction operands to be errors. + +@item --rename-section @var{oldname}=@var{newname} +@kindex --rename-section +Rename the @var{oldname} section to @var{newname}. This option can be used +multiple times to rename multiple sections. +@end table + +@c man end + +@node Xtensa Syntax +@section Assembler Syntax +@cindex syntax, Xtensa assembler +@cindex Xtensa assembler syntax +@cindex FLIX syntax + +Block comments are delimited by @samp{/*} and @samp{*/}. End of line +comments may be introduced with either @samp{#} or @samp{//}. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +Instructions consist of a leading opcode or macro name followed by +whitespace and an optional comma-separated list of operands: + +@smallexample +@var{opcode} [@var{operand}, @dots{}] +@end smallexample + +Instructions must be separated by a newline or semicolon (@samp{;}). + +FLIX instructions, which bundle multiple opcodes together in a single +instruction, are specified by enclosing the bundled opcodes inside +braces: + +@smallexample +@group +@{ +[@var{format}] +@var{opcode0} [@var{operands}] +@end group +@var{opcode1} [@var{operands}] +@group +@var{opcode2} [@var{operands}] +@dots{} +@} +@end group +@end smallexample + +The opcodes in a FLIX instruction are listed in the same order as the +corresponding instruction slots in the TIE format declaration. +Directives and labels are not allowed inside the braces of a FLIX +instruction. A particular TIE format name can optionally be specified +immediately after the opening brace, but this is usually unnecessary. +The assembler will automatically search for a format that can encode the +specified opcodes, so the format name need only be specified in rare +cases where there is more than one applicable format and where it +matters which of those formats is used. A FLIX instruction can also be +specified on a single line by separating the opcodes with semicolons: + +@smallexample +@{ [@var{format};] @var{opcode0} [@var{operands}]; @var{opcode1} [@var{operands}]; @var{opcode2} [@var{operands}]; @dots{} @} +@end smallexample + +If an opcode can only be encoded in a FLIX instruction but is not +specified as part of a FLIX bundle, the assembler will choose the +smallest format where the opcode can be encoded and +will fill unused instruction slots with no-ops. + +@menu +* Xtensa Opcodes:: Opcode Naming Conventions. +* Xtensa Registers:: Register Naming. +@end menu + +@node Xtensa Opcodes +@subsection Opcode Names +@cindex Xtensa opcode names +@cindex opcode names, Xtensa + +See the @cite{Xtensa Instruction Set Architecture (ISA) Reference +Manual} for a complete list of opcodes and descriptions of their +semantics. + +@cindex _ opcode prefix +If an opcode name is prefixed with an underscore character (@samp{_}), +@command{@value{AS}} will not transform that instruction in any way. The +underscore prefix disables both optimization (@pxref{Xtensa +Optimizations, ,Xtensa Optimizations}) and relaxation (@pxref{Xtensa +Relaxation, ,Xtensa Relaxation}) for that particular instruction. Only +use the underscore prefix when it is essential to select the exact +opcode produced by the assembler. Using this feature unnecessarily +makes the code less efficient by disabling assembler optimization and +less flexible by disabling relaxation. + +Note that this special handling of underscore prefixes only applies to +Xtensa opcodes, not to either built-in macros or user-defined macros. +When an underscore prefix is used with a macro (e.g., @code{_MOV}), it +refers to a different macro. The assembler generally provides built-in +macros both with and without the underscore prefix, where the underscore +versions behave as if the underscore carries through to the instructions +in the macros. For example, @code{_MOV} may expand to @code{_MOV.N}@. + +The underscore prefix only applies to individual instructions, not to +series of instructions. For example, if a series of instructions have +underscore prefixes, the assembler will not transform the individual +instructions, but it may insert other instructions between them (e.g., +to align a @code{LOOP} instruction). To prevent the assembler from +modifying a series of instructions as a whole, use the +@code{no-transform} directive. @xref{Transform Directive, ,transform}. + +@node Xtensa Registers +@subsection Register Names +@cindex Xtensa register names +@cindex register names, Xtensa +@cindex sp register + +The assembly syntax for a register file entry is the ``short'' name for +a TIE register file followed by the index into that register file. For +example, the general-purpose @code{AR} register file has a short name of +@code{a}, so these registers are named @code{a0}@dots{}@code{a15}. +As a special feature, @code{sp} is also supported as a synonym for +@code{a1}. Additional registers may be added by processor configuration +options and by designer-defined TIE extensions. An initial @samp{$} +character is optional in all register names. + +@node Xtensa Optimizations +@section Xtensa Optimizations +@cindex optimizations + +The optimizations currently supported by @command{@value{AS}} are +generation of density instructions where appropriate and automatic +branch target alignment. + +@menu +* Density Instructions:: Using Density Instructions. +* Xtensa Automatic Alignment:: Automatic Instruction Alignment. +@end menu + +@node Density Instructions +@subsection Using Density Instructions +@cindex density instructions + +The Xtensa instruction set has a code density option that provides +16-bit versions of some of the most commonly used opcodes. Use of these +opcodes can significantly reduce code size. When possible, the +assembler automatically translates instructions from the core +Xtensa instruction set into equivalent instructions from the Xtensa code +density option. This translation can be disabled by using underscore +prefixes (@pxref{Xtensa Opcodes, ,Opcode Names}), by using the +@samp{--no-transform} command-line option (@pxref{Xtensa Options, ,Command +Line Options}), or by using the @code{no-transform} directive +(@pxref{Transform Directive, ,transform}). + +It is a good idea @emph{not} to use the density instructions directly. +The assembler will automatically select dense instructions where +possible. If you later need to use an Xtensa processor without the code +density option, the same assembly code will then work without modification. + +@node Xtensa Automatic Alignment +@subsection Automatic Instruction Alignment +@cindex alignment of @code{LOOP} instructions +@cindex alignment of branch targets +@cindex @code{LOOP} instructions, alignment +@cindex branch target alignment + +The Xtensa assembler will automatically align certain instructions, both +to optimize performance and to satisfy architectural requirements. + +As an optimization to improve performance, the assembler attempts to +align branch targets so they do not cross instruction fetch boundaries. +(Xtensa processors can be configured with either 32-bit or 64-bit +instruction fetch widths.) An +instruction immediately following a call is treated as a branch target +in this context, because it will be the target of a return from the +call. This alignment has the potential to reduce branch penalties at +some expense in code size. +This optimization is enabled by default. You can disable it with the +@samp{--no-target-@-align} command-line option (@pxref{Xtensa Options, +,Command Line Options}). + +The target alignment optimization is done without adding instructions +that could increase the execution time of the program. If there are +density instructions in the code preceding a target, the assembler can +change the target alignment by widening some of those instructions to +the equivalent 24-bit instructions. Extra bytes of padding can be +inserted immediately following unconditional jump and return +instructions. +This approach is usually successful in aligning many, but not all, +branch targets. + +The @code{LOOP} family of instructions must be aligned such that the +first instruction in the loop body does not cross an instruction fetch +boundary (e.g., with a 32-bit fetch width, a @code{LOOP} instruction +must be on either a 1 or 2 mod 4 byte boundary). The assembler knows +about this restriction and inserts the minimal number of 2 or 3 byte +no-op instructions to satisfy it. When no-op instructions are added, +any label immediately preceding the original loop will be moved in order +to refer to the loop instruction, not the newly generated no-op +instruction. To preserve binary compatibility across processors with +different fetch widths, the assembler conservatively assumes a 32-bit +fetch width when aligning @code{LOOP} instructions (except if the first +instruction in the loop is a 64-bit instruction). + +Previous versions of the assembler automatically aligned @code{ENTRY} +instructions to 4-byte boundaries, but that alignment is now the +programmer's responsibility. + +@node Xtensa Relaxation +@section Xtensa Relaxation +@cindex relaxation + +When an instruction operand is outside the range allowed for that +particular instruction field, @command{@value{AS}} can transform the code +to use a functionally-equivalent instruction or sequence of +instructions. This process is known as @dfn{relaxation}. This is +typically done for branch instructions because the distance of the +branch targets is not known until assembly-time. The Xtensa assembler +offers branch relaxation and also extends this concept to function +calls, @code{MOVI} instructions and other instructions with immediate +fields. + +@menu +* Xtensa Branch Relaxation:: Relaxation of Branches. +* Xtensa Call Relaxation:: Relaxation of Function Calls. +* Xtensa Immediate Relaxation:: Relaxation of other Immediate Fields. +@end menu + +@node Xtensa Branch Relaxation +@subsection Conditional Branch Relaxation +@cindex relaxation of branch instructions +@cindex branch instructions, relaxation + +When the target of a branch is too far away from the branch itself, +i.e., when the offset from the branch to the target is too large to fit +in the immediate field of the branch instruction, it may be necessary to +replace the branch with a branch around a jump. For example, + +@smallexample + beqz a2, L +@end smallexample + +may result in: + +@smallexample +@group + bnez.n a2, M + j L +M: +@end group +@end smallexample + +(The @code{BNEZ.N} instruction would be used in this example only if the +density option is available. Otherwise, @code{BNEZ} would be used.) + +This relaxation works well because the unconditional jump instruction +has a much larger offset range than the various conditional branches. +However, an error will occur if a branch target is beyond the range of a +jump instruction. @command{@value{AS}} cannot relax unconditional jumps. +Similarly, an error will occur if the original input contains an +unconditional jump to a target that is out of range. + +Branch relaxation is enabled by default. It can be disabled by using +underscore prefixes (@pxref{Xtensa Opcodes, ,Opcode Names}), the +@samp{--no-transform} command-line option (@pxref{Xtensa Options, +,Command Line Options}), or the @code{no-transform} directive +(@pxref{Transform Directive, ,transform}). + +@node Xtensa Call Relaxation +@subsection Function Call Relaxation +@cindex relaxation of call instructions +@cindex call instructions, relaxation + +Function calls may require relaxation because the Xtensa immediate call +instructions (@code{CALL0}, @code{CALL4}, @code{CALL8} and +@code{CALL12}) provide a PC-relative offset of only 512 Kbytes in either +direction. For larger programs, it may be necessary to use indirect +calls (@code{CALLX0}, @code{CALLX4}, @code{CALLX8} and @code{CALLX12}) +where the target address is specified in a register. The Xtensa +assembler can automatically relax immediate call instructions into +indirect call instructions. This relaxation is done by loading the +address of the called function into the callee's return address register +and then using a @code{CALLX} instruction. So, for example: + +@smallexample + call8 func +@end smallexample + +might be relaxed to: + +@smallexample +@group + .literal .L1, func + l32r a8, .L1 + callx8 a8 +@end group +@end smallexample + +Because the addresses of targets of function calls are not generally +known until link-time, the assembler must assume the worst and relax all +the calls to functions in other source files, not just those that really +will be out of range. The linker can recognize calls that were +unnecessarily relaxed, and it will remove the overhead introduced by the +assembler for those cases where direct calls are sufficient. + +Call relaxation is disabled by default because it can have a negative +effect on both code size and performance, although the linker can +usually eliminate the unnecessary overhead. If a program is too large +and some of the calls are out of range, function call relaxation can be +enabled using the @samp{--longcalls} command-line option or the +@code{longcalls} directive (@pxref{Longcalls Directive, ,longcalls}). + +@node Xtensa Immediate Relaxation +@subsection Other Immediate Field Relaxation +@cindex immediate fields, relaxation +@cindex relaxation of immediate fields + +The assembler normally performs the following other relaxations. They +can be disabled by using underscore prefixes (@pxref{Xtensa Opcodes, +,Opcode Names}), the @samp{--no-transform} command-line option +(@pxref{Xtensa Options, ,Command Line Options}), or the +@code{no-transform} directive (@pxref{Transform Directive, ,transform}). + +@cindex @code{MOVI} instructions, relaxation +@cindex relaxation of @code{MOVI} instructions +The @code{MOVI} machine instruction can only materialize values in the +range from -2048 to 2047. Values outside this range are best +materialized with @code{L32R} instructions. Thus: + +@smallexample + movi a0, 100000 +@end smallexample + +is assembled into the following machine code: + +@smallexample +@group + .literal .L1, 100000 + l32r a0, .L1 +@end group +@end smallexample + +@cindex @code{L8UI} instructions, relaxation +@cindex @code{L16SI} instructions, relaxation +@cindex @code{L16UI} instructions, relaxation +@cindex @code{L32I} instructions, relaxation +@cindex relaxation of @code{L8UI} instructions +@cindex relaxation of @code{L16SI} instructions +@cindex relaxation of @code{L16UI} instructions +@cindex relaxation of @code{L32I} instructions +The @code{L8UI} machine instruction can only be used with immediate +offsets in the range from 0 to 255. The @code{L16SI} and @code{L16UI} +machine instructions can only be used with offsets from 0 to 510. The +@code{L32I} machine instruction can only be used with offsets from 0 to +1020. A load offset outside these ranges can be materialized with +an @code{L32R} instruction if the destination register of the load +is different than the source address register. For example: + +@smallexample + l32i a1, a0, 2040 +@end smallexample + +is translated to: + +@smallexample +@group + .literal .L1, 2040 + l32r a1, .L1 +@end group +@group + add a1, a0, a1 + l32i a1, a1, 0 +@end group +@end smallexample + +@noindent +If the load destination and source address register are the same, an +out-of-range offset causes an error. + +@cindex @code{ADDI} instructions, relaxation +@cindex relaxation of @code{ADDI} instructions +The Xtensa @code{ADDI} instruction only allows immediate operands in the +range from -128 to 127. There are a number of alternate instruction +sequences for the @code{ADDI} operation. First, if the +immediate is 0, the @code{ADDI} will be turned into a @code{MOV.N} +instruction (or the equivalent @code{OR} instruction if the code density +option is not available). If the @code{ADDI} immediate is outside of +the range -128 to 127, but inside the range -32896 to 32639, an +@code{ADDMI} instruction or @code{ADDMI}/@code{ADDI} sequence will be +used. Finally, if the immediate is outside of this range and a free +register is available, an @code{L32R}/@code{ADD} sequence will be used +with a literal allocated from the literal pool. + +For example: + +@smallexample +@group + addi a5, a6, 0 + addi a5, a6, 512 +@end group +@group + addi a5, a6, 513 + addi a5, a6, 50000 +@end group +@end smallexample + +is assembled into the following: + +@smallexample +@group + .literal .L1, 50000 + mov.n a5, a6 +@end group + addmi a5, a6, 0x200 + addmi a5, a6, 0x200 + addi a5, a5, 1 +@group + l32r a5, .L1 + add a5, a6, a5 +@end group +@end smallexample + +@node Xtensa Directives +@section Directives +@cindex Xtensa directives +@cindex directives, Xtensa + +The Xtensa assembler supports a region-based directive syntax: + +@smallexample +@group + .begin @var{directive} [@var{options}] + @dots{} + .end @var{directive} +@end group +@end smallexample + +All the Xtensa-specific directives that apply to a region of code use +this syntax. + +The directive applies to code between the @code{.begin} and the +@code{.end}. The state of the option after the @code{.end} reverts to +what it was before the @code{.begin}. +A nested @code{.begin}/@code{.end} region can further +change the state of the directive without having to be aware of its +outer state. For example, consider: + +@smallexample +@group + .begin no-transform +L: add a0, a1, a2 +@end group + .begin transform +M: add a0, a1, a2 + .end transform +@group +N: add a0, a1, a2 + .end no-transform +@end group +@end smallexample + +The @code{ADD} opcodes at @code{L} and @code{N} in the outer +@code{no-transform} region both result in @code{ADD} machine instructions, +but the assembler selects an @code{ADD.N} instruction for the +@code{ADD} at @code{M} in the inner @code{transform} region. + +The advantage of this style is that it works well inside macros which can +preserve the context of their callers. + +The following directives are available: +@menu +* Schedule Directive:: Enable instruction scheduling. +* Longcalls Directive:: Use Indirect Calls for Greater Range. +* Transform Directive:: Disable All Assembler Transformations. +* Literal Directive:: Intermix Literals with Instructions. +* Literal Position Directive:: Specify Inline Literal Pool Locations. +* Literal Prefix Directive:: Specify Literal Section Name Prefix. +* Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals. +@end menu + +@node Schedule Directive +@subsection schedule +@cindex @code{schedule} directive +@cindex @code{no-schedule} directive + +The @code{schedule} directive is recognized only for compatibility with +Tensilica's assembler. + +@smallexample +@group + .begin [no-]schedule + .end [no-]schedule +@end group +@end smallexample + +This directive is ignored and has no effect on @command{@value{AS}}. + +@node Longcalls Directive +@subsection longcalls +@cindex @code{longcalls} directive +@cindex @code{no-longcalls} directive + +The @code{longcalls} directive enables or disables function call +relaxation. @xref{Xtensa Call Relaxation, ,Function Call Relaxation}. + +@smallexample +@group + .begin [no-]longcalls + .end [no-]longcalls +@end group +@end smallexample + +Call relaxation is disabled by default unless the @samp{--longcalls} +command-line option is specified. The @code{longcalls} directive +overrides the default determined by the command-line options. + +@node Transform Directive +@subsection transform +@cindex @code{transform} directive +@cindex @code{no-transform} directive + +This directive enables or disables all assembler transformation, +including relaxation (@pxref{Xtensa Relaxation, ,Xtensa Relaxation}) and +optimization (@pxref{Xtensa Optimizations, ,Xtensa Optimizations}). + +@smallexample +@group + .begin [no-]transform + .end [no-]transform +@end group +@end smallexample + +Transformations are enabled by default unless the @samp{--no-transform} +option is used. The @code{transform} directive overrides the default +determined by the command-line options. An underscore opcode prefix, +disabling transformation of that opcode, always takes precedence over +both directives and command-line flags. + +@node Literal Directive +@subsection literal +@cindex @code{literal} directive + +The @code{.literal} directive is used to define literal pool data, i.e., +read-only 32-bit data accessed via @code{L32R} instructions. + +@smallexample + .literal @var{label}, @var{value}[, @var{value}@dots{}] +@end smallexample + +This directive is similar to the standard @code{.word} directive, except +that the actual location of the literal data is determined by the +assembler and linker, not by the position of the @code{.literal} +directive. Using this directive gives the assembler freedom to locate +the literal data in the most appropriate place and possibly to combine +identical literals. For example, the code: + +@smallexample +@group + entry sp, 40 + .literal .L1, sym + l32r a4, .L1 +@end group +@end smallexample + +can be used to load a pointer to the symbol @code{sym} into register +@code{a4}. The value of @code{sym} will not be placed between the +@code{ENTRY} and @code{L32R} instructions; instead, the assembler puts +the data in a literal pool. + +Literal pools are placed by default in separate literal sections; +however, when using the @samp{--text-@-section-@-literals} +option (@pxref{Xtensa Options, ,Command Line Options}), the literal +pools for PC-relative mode @code{L32R} instructions +are placed in the current section.@footnote{Literals for the +@code{.init} and @code{.fini} sections are always placed in separate +sections, even when @samp{--text-@-section-@-literals} is enabled.} +These text section literal +pools are created automatically before @code{ENTRY} instructions and +manually after @samp{.literal_position} directives (@pxref{Literal +Position Directive, ,literal_position}). If there are no preceding +@code{ENTRY} instructions, explicit @code{.literal_position} directives +must be used to place the text section literal pools; otherwise, +@command{@value{AS}} will report an error. + +When literals are placed in separate sections, the literal section names +are derived from the names of the sections where the literals are +defined. The base literal section names are @code{.literal} for +PC-relative mode @code{L32R} instructions and @code{.lit4} for absolute +mode @code{L32R} instructions (@pxref{Absolute Literals Directive, +,absolute-literals}). These base names are used for literals defined in +the default @code{.text} section. For literals defined in other +sections or within the scope of a @code{literal_prefix} directive +(@pxref{Literal Prefix Directive, ,literal_prefix}), the following rules +determine the literal section name: + +@enumerate +@item +If the current section is a member of a section group, the literal +section name includes the group name as a suffix to the base +@code{.literal} or @code{.lit4} name, with a period to separate the base +name and group name. The literal section is also made a member of the +group. + +@item +If the current section name (or @code{literal_prefix} value) begins with +``@code{.gnu.linkonce.@var{kind}.}'', the literal section name is formed +by replacing ``@code{.@var{kind}}'' with the base @code{.literal} or +@code{.lit4} name. For example, for literals defined in a section named +@code{.gnu.linkonce.t.func}, the literal section will be +@code{.gnu.linkonce.literal.func} or @code{.gnu.linkonce.lit4.func}. + +@item +If the current section name (or @code{literal_prefix} value) ends with +@code{.text}, the literal section name is formed by replacing that +suffix with the base @code{.literal} or @code{.lit4} name. For example, +for literals defined in a section named @code{.iram0.text}, the literal +section will be @code{.iram0.literal} or @code{.iram0.lit4}. + +@item +If none of the preceding conditions apply, the literal section name is +formed by adding the base @code{.literal} or @code{.lit4} name as a +suffix to the current section name (or @code{literal_prefix} value). +@end enumerate + +@node Literal Position Directive +@subsection literal_position +@cindex @code{literal_position} directive + +When using @samp{--text-@-section-@-literals} to place literals inline +in the section being assembled, the @code{.literal_position} directive +can be used to mark a potential location for a literal pool. + +@smallexample + .literal_position +@end smallexample + +The @code{.literal_position} directive is ignored when the +@samp{--text-@-section-@-literals} option is not used or when +@code{L32R} instructions use the absolute addressing mode. + +The assembler will automatically place text section literal pools +before @code{ENTRY} instructions, so the @code{.literal_position} +directive is only needed to specify some other location for a literal +pool. You may need to add an explicit jump instruction to skip over an +inline literal pool. + +For example, an interrupt vector does not begin with an @code{ENTRY} +instruction so the assembler will be unable to automatically find a good +place to put a literal pool. Moreover, the code for the interrupt +vector must be at a specific starting address, so the literal pool +cannot come before the start of the code. The literal pool for the +vector must be explicitly positioned in the middle of the vector (before +any uses of the literals, due to the negative offsets used by +PC-relative @code{L32R} instructions). The @code{.literal_position} +directive can be used to do this. In the following code, the literal +for @samp{M} will automatically be aligned correctly and is placed after +the unconditional jump. + +@smallexample +@group + .global M +code_start: +@end group + j continue + .literal_position + .align 4 +@group +continue: + movi a4, M +@end group +@end smallexample + +@node Literal Prefix Directive +@subsection literal_prefix +@cindex @code{literal_prefix} directive + +The @code{literal_prefix} directive allows you to override the default +literal section names, which are derived from the names of the sections +where the literals are defined. + +@smallexample +@group + .begin literal_prefix [@var{name}] + .end literal_prefix +@end group +@end smallexample + +For literals defined within the delimited region, the literal section +names are derived from the @var{name} argument instead of the name of +the current section. The rules used to derive the literal section names +do not change. @xref{Literal Directive, ,literal}. If the @var{name} +argument is omitted, the literal sections revert to the defaults. This +directive has no effect when using the +@samp{--text-@-section-@-literals} option (@pxref{Xtensa Options, +,Command Line Options}). + +@node Absolute Literals Directive +@subsection absolute-literals +@cindex @code{absolute-literals} directive +@cindex @code{no-absolute-literals} directive + +The @code{absolute-@-literals} and @code{no-@-absolute-@-literals} +directives control the absolute vs.@: PC-relative mode for @code{L32R} +instructions. These are relevant only for Xtensa configurations that +include the absolute addressing option for @code{L32R} instructions. + +@smallexample +@group + .begin [no-]absolute-literals + .end [no-]absolute-literals +@end group +@end smallexample + +These directives do not change the @code{L32R} mode---they only cause +the assembler to emit the appropriate kind of relocation for @code{L32R} +instructions and to place the literal values in the appropriate section. +To change the @code{L32R} mode, the program must write the +@code{LITBASE} special register. It is the programmer's responsibility +to keep track of the mode and indicate to the assembler which mode is +used in each region of code. + +If the Xtensa configuration includes the absolute @code{L32R} addressing +option, the default is to assume absolute @code{L32R} addressing unless +the @samp{--no-@-absolute-@-literals} command-line option is specified. +Otherwise, the default is to assume PC-relative @code{L32R} addressing. +The @code{absolute-@-literals} directive can then be used to override +the default determined by the command-line options. + +@c Local Variables: +@c fill-column: 72 +@c End: diff --git a/binutils-2.25/gas/doc/c-z80.texi b/binutils-2.25/gas/doc/c-z80.texi new file mode 100644 index 00000000..df5a65fc --- /dev/null +++ b/binutils-2.25/gas/doc/c-z80.texi @@ -0,0 +1,268 @@ +@c Copyright 2011 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 Z80-Dependent +@chapter Z80 Dependent Features +@end ifset + + +@ifclear GENERIC +@node Machine Dependencies +@chapter Z80 Dependent Features +@end ifclear + +@cindex Z80 support +@menu +* Z80 Options:: Options +* Z80 Syntax:: Syntax +* Z80 Floating Point:: Floating Point +* Z80 Directives:: Z80 Machine Directives +* Z80 Opcodes:: Opcodes +@end menu + +@node Z80 Options +@section Options +@cindex Z80 options +@cindex options for Z80 +The Zilog Z80 and Ascii R800 version of @code{@value{AS}} have a few machine +dependent options. +@table @option +@cindex @code{-z80} command line option, Z80 +@item -z80 +Produce code for the Z80 processor. There are additional options to +request warnings and error messages for undocumented instructions. +@item -ignore-undocumented-instructions +@itemx -Wnud +Silently assemble undocumented Z80-instructions that have been adopted +as documented R800-instructions. +@item -ignore-unportable-instructions +@itemx -Wnup +Silently assemble all undocumented Z80-instructions. +@item -warn-undocumented-instructions +@itemx -Wud +Issue warnings for undocumented Z80-instructions that work on R800, do +not assemble other undocumented instructions without warning. +@item -warn-unportable-instructions +@itemx -Wup +Issue warnings for other undocumented Z80-instructions, do not treat any +undocumented instructions as errors. +@item -forbid-undocumented-instructions +@itemx -Fud +Treat all undocumented z80-instructions as errors. +@item -forbid-unportable-instructions +@itemx -Fup +Treat undocumented z80-instructions that do not work on R800 as errors. + +@cindex @code{-r800} command line option, Z80 +@item -r800 +Produce code for the R800 processor. The assembler does not support +undocumented instructions for the R800. +In line with common practice, @code{@value{AS}} uses Z80 instruction names +for the R800 processor, as far as they exist. +@end table + +@cindex Z80 Syntax +@node Z80 Syntax +@section Syntax +The assembler syntax closely follows the 'Z80 family CPU User Manual' by +Zilog. +In expressions a single @samp{=} may be used as ``is equal to'' +comparison operator. + +Suffices can be used to indicate the radix of integer constants; +@samp{H} or @samp{h} for hexadecimal, @samp{D} or @samp{d} for decimal, +@samp{Q}, @samp{O}, @samp{q} or @samp{o} for octal, and @samp{B} for +binary. + +The suffix @samp{b} denotes a backreference to local label. + +@menu +* Z80-Chars:: Special Characters +* Z80-Regs:: Register Names +* Z80-Case:: Case Sensitivity +@end menu + +@node Z80-Chars +@subsection Special Characters + +@cindex line comment character, Z80 +@cindex Z80 line comment character +The semicolon @samp{;} is the line comment character; + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@cindex line separator, Z80 +@cindex statement separator, Z80 +@cindex Z80 line separator +The Z80 assembler does not support a line separator character. + +@cindex location counter, Z80 +@cindex hexadecimal prefix, Z80 +@cindex Z80 $ +The dollar sign @samp{$} can be used as a prefix for hexadecimal numbers +and as a symbol denoting the current location counter. + +@cindex character escapes, Z80 +@cindex Z80, \ +A backslash @samp{\} is an ordinary character for the Z80 assembler. + +@cindex character constant, Z80 +@cindex single quote, Z80 +@cindex Z80 ' +The single quote @samp{'} must be followed by a closing quote. If there +is one character in between, it is a character constant, otherwise it is +a string constant. + +@node Z80-Regs +@subsection Register Names +@cindex Z80 registers +@cindex register names, Z80 + +The registers are referred to with the letters assigned to them by +Zilog. In addition @command{@value{AS}} recognizes @samp{ixl} and +@samp{ixh} as the least and most significant octet in @samp{ix}, and +similarly @samp{iyl} and @samp{iyh} as parts of @samp{iy}. + +@c The @samp{'} in @samp{ex af,af'} may be omitted. + +@node Z80-Case +@subsection Case Sensitivity +@cindex Z80, case sensitivity +@cindex case sensitivity, Z80 + +Upper and lower case are equivalent in register names, opcodes, +condition codes and assembler directives. +The case of letters is significant in labels and symbol names. The case +is also important to distinguish the suffix @samp{b} for a backward reference +to a local label from the suffix @samp{B} for a number in binary notation. + +@node Z80 Floating Point +@section Floating Point +@cindex floating point, Z80 +@cindex Z80 floating point +Floating-point numbers are not supported. + +@node Z80 Directives +@section Z80 Assembler Directives + +@command{@value{AS}} for the Z80 supports some additional directives for +compatibility with other assemblers. + +@cindex Z80-only directives +These are the additional directives in @code{@value{AS}} for the Z80: + +@table @code +@item db @var{expression}|@var{string}[,@var{expression}|@var{string}...] +@itemx defb @var{expression}|@var{string}[,@var{expression}|@var{string}...] +For each @var{string} the characters are copied to the object file, for +each other @var{expression} the value is stored in one byte. +A warning is issued in case of an overflow. + +@item dw @var{expression}[,@var{expression}...] +@itemx defw @var{expression}[,@var{expression}...] +For each @var{expression} the value is stored in two bytes, ignoring +overflow. + +@item d24 @var{expression}[,@var{expression}...] +@itemx def24 @var{expression}[,@var{expression}...] +For each @var{expression} the value is stored in three bytes, ignoring +overflow. + +@item d32 @var{expression}[,@var{expression}...] +@itemx def32 @var{expression}[,@var{expression}...] +For each @var{expression} the value is stored in four bytes, ignoring +overflow. + +@item ds @var{count}[, @var{value}] +@itemx defs @var{count}[, @var{value}] +@c Synonyms for @code{ds.b}, +@c which should have been described elsewhere +Fill @var{count} bytes in the object file with @var{value}, if +@var{value} is omitted it defaults to zero. + +@item @var{symbol} equ @var{expression} +@itemx @var{symbol} defl @var{expression} +These directives set the value of @var{symbol} to @var{expression}. If +@code{equ} is used, it is an error if @var{symbol} is already defined. +Symbols defined with @code{equ} are not protected from redefinition. + +@item set +This is a normal instruction on Z80, and not an assembler directive. + +@item psect @var{name} +A synonym for @xref{Section}, no second argument should be given. +@ignore + +The following attributes will possibly be recognized in the future +@table @code +@item abs +The section is to be absolute. @code{@value{AS}} will issue an error +message because it can not produce an absolute section. +@item global +The section is to be concatenated with other sections of the same name +by the linker, this is the default. +@item local +The section is not global. @code{@value{AS}} will issue a warning if +object file format is not soff. +@item ovrld +The section is to be overlapped with other sections of the same name by +the linker. @code{@value{AS}} will issue an error message +because it can not mark a section as such. +@item pure +The section is marked as read only. +@end table +@end ignore + +@end table + +@node Z80 Opcodes +@section Opcodes +In line with common practice, Z80 mnemonics are used for both the Z80 and +the R800. + +In many instructions it is possible to use one of the half index +registers (@samp{ixl},@samp{ixh},@samp{iyl},@samp{iyh}) in stead of an +8-bit general purpose register. This yields instructions that are +documented on the R800 and undocumented on the Z80. +Similarly @code{in f,(c)} is documented on the R800 and undocumented on +the Z80. + +The assembler also supports the following undocumented Z80-instructions, +that have not been adopted in the R800 instruction set: +@table @code +@item out (c),0 +Sends zero to the port pointed to by register c. + +@item sli @var{m} +Equivalent to @code{@var{m} = (@var{m}<<1)+1}, the operand @var{m} can +be any operand that is valid for @samp{sla}. One can use @samp{sll} as a +synonym for @samp{sli}. + +@item @var{op} (ix+@var{d}), @var{r} +This is equivalent to + +@example +ld @var{r}, (ix+@var{d}) +@var{opc} @var{r} +ld (ix+@var{d}), @var{r} +@end example + +The operation @samp{@var{opc}} may be any of @samp{res @var{b},}, +@samp{set @var{b},}, @samp{rl}, @samp{rlc}, @samp{rr}, @samp{rrc}, +@samp{sla}, @samp{sli}, @samp{sra} and @samp{srl}, and the register +@samp{@var{r}} may be any of @samp{a}, @samp{b}, @samp{c}, @samp{d}, +@samp{e}, @samp{h} and @samp{l}. + +@item @var{opc} (iy+@var{d}), @var{r} +As above, but with @samp{iy} instead of @samp{ix}. +@end table + +The web site at @uref{http://www.z80.info} is a good starting place to +find more information on programming the Z80. + diff --git a/binutils-2.25/gas/doc/c-z8k.texi b/binutils-2.25/gas/doc/c-z8k.texi new file mode 100644 index 00000000..51f00e12 --- /dev/null +++ b/binutils-2.25/gas/doc/c-z8k.texi @@ -0,0 +1,405 @@ +@c Copyright 1991, 1992, 1993, 1994, 1995, 2003, 2011 +@c 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:: Command-line options for the 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 +@table @option +@cindex @code{-z8001} command line option, Z8000 +@item -z8001 +Generate segmented code by default. + +@cindex @code{-z8002} command line option, Z8000 +@item -z8002 +Generate unsegmented code by default. +@end table + +@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. + +If a @samp{#} appears as the first character of a line then the whole +line is treated as a comment, but in this case the line could also be +a logical line number directive (@pxref{Comments}) or a preprocessor +control command (@pxref{Preprocessing}). + +@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{rl@var{n}} and @samp{rh@var{n}}. + +@smallexample +@exdent @emph{byte registers} +rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3 +rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7 + +@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 rl@var{n} +@itemx rh@var{n} +@itemx r@var{n} +@itemx rr@var{n} +@itemx rq@var{n} +Register direct: 8bit, 16bit, 32bit, and 64bit registers. + +@item @@r@var{n} +@itemx @@rr@var{n} +Indirect register: @@rr@var{n} in segmented mode, @@r@var{n} in unsegmented +mode. + +@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}) +@itemx rr@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}) +@itemx rr@var{n}(r@var{m}) +Base Index: the 16 or 24 bit register r@var{n} or rr@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 additional assembler directives, +for compatibility with other Z8000 assemblers. These do not begin with +@samp{.} (unlike the ordinary @value{AS} directives). + +@table @code +@kindex segm +@item segm +@kindex .z8001 +@itemx .z8001 +Generate code for the segmented Z8001. + +@kindex unsegm +@item unsegm +@kindex .z8002 +@itemx .z8002 +Generate 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/binutils-2.25/gas/doc/fdl.texi b/binutils-2.25/gas/doc/fdl.texi new file mode 100644 index 00000000..8805f1a4 --- /dev/null +++ b/binutils-2.25/gas/doc/fdl.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/binutils-2.25/gas/doc/h8.texi b/binutils-2.25/gas/doc/h8.texi new file mode 100644 index 00000000..2b9e9dd3 --- /dev/null +++ b/binutils-2.25/gas/doc/h8.texi @@ -0,0 +1,31 @@ +@c Copyright 2012 +@c Free Software Foundation, Inc. +@c This is part of the GAS manual. +@c For copying conditions, see the file as.texinfo. + +@clear ALL-ARCH +@clear GENERIC +@clear INTERNALS +@clear MULTI-OBJ +@clear AOUT +@clear BOUT +@set COFF +@clear ELF +@set Renesas-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 Renesas SH +@set OBJ-NAME COFF +@c +@clear have-stabs +@set abnormal-separator diff --git a/binutils-2.25/gas/doc/internals.texi b/binutils-2.25/gas/doc/internals.texi new file mode 100644 index 00000000..cf15fb51 --- /dev/null +++ b/binutils-2.25/gas/doc/internals.texi @@ -0,0 +1,1990 @@ +\input texinfo +@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +@c 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +@c Free Software Foundation, Inc. +@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 is not updated regularly, and it may be out of date. + +@menu +* 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 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 with @var{finalize_syms} non-zero +in @code{write_object_file}. + +The expression is often simply a constant. Before @code{resolve_symbol_value} +is called with @var{finalize_syms} set, 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 doubly +linked list. 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 sy_volatile +Whether the symbol can be re-defined. + +@item sy_forward_ref +Whether the symbol's value must only be evaluated upon use. + +@item sy_weakrefr +Whether the symbol is a @code{weakref} alias to another symbol. + +@item sy_weakrefd +Whether the symbol is or was referenced by one or more @code{weakref} aliases, +and has not had any direct references. + +@item bsym +This points to the BFD @code{asymbol} that +will be used in writing the object file. + +@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. + +@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, or if it is a @code{weakref} alias or +symbol that has not been strongly referenced. + +@item S_IS_WEAKREFR +@cindex S_IS_WEAKREFR +Return non-zero if the symbol is a @code{weakref} alias. + +@item S_IS_WEAKREFD +@cindex S_IS_WEAKREFD +Return non-zero if the symbol was aliased by a @code{weakref} alias and has not +had any strong references. + +@item S_IS_VOLATILE +@cindex S_IS_VOLATILE +Return non-zero if the symbol may be re-defined. Such symbols get created by +the @code{=} operator, @code{equ}, or @code{set}. + +@item S_IS_FORWARD_REF +@cindex S_IS_FORWARD_REF +Return non-zero if the symbol is a forward reference, that is its value must +only be determined upon use. + +@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_SET_WEAKREFR +@cindex S_SET_WEAKREFR +Mark the symbol as the referrer in a @code{weakref} directive. The symbol it +aliases must have been set to the value expression before this point. If the +alias has already been used, the symbol is marked as used too. + +@item S_CLEAR_WEAKREFR +@cindex S_CLEAR_WEAKREFR +Clear the @code{weakref} alias status of a symbol. This is implicitly called +whenever a symbol is defined or set to a new expression. + +@item S_SET_WEAKREFD +@cindex S_SET_WEAKREFD +Mark the symbol as the referred symbol in a @code{weakref} directive. +Implicitly marks the symbol as weak, but see below. It should only be called +if the referenced symbol has just been added to the symbol table. + +@item S_SET_WEAKREFD +@cindex S_SET_WEAKREFD +Clear the @code{weakref} aliased status of a symbol. This is implicitly called +whenever the symbol is looked up, as part of a direct reference or a +definition, but not as part of a @code{weakref} directive. + +@item S_SET_VOLATILE +@cindex S_SET_VOLATILE +Indicate that the symbol may be re-defined. + +@item S_CLEAR_VOLATILE +@cindex S_CLEAR_VOLATILE +Indicate that the symbol may no longer be re-defined. + +@item S_SET_FORWARD_REF +@cindex S_SET_FORWARD_REF +Indicate that the symbol is a forward reference, that is its value must only +be determined upon use. + +@item S_GET_TYPE +@itemx S_GET_DESC +@itemx 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 +@itemx S_SET_DESC +@itemx 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 + +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 too 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. +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. + +@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 +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. The function +@code{frag_room} says by how much the current frag can be extended. +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. +@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}. + +There is a special case for COFF. For historical reason, the GNU COFF +assembler doesn't follow the documented behavior on certain debug symbols for +the compatibility with other COFF assemblers. A port can define +@code{STRICTCOFF} in the configure script to make the GNU COFF assembler +to follow the documented behavior. + +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 +@itemx md_after_parse_args +@cindex md_shortopts +@cindex md_longopts +@cindex md_longopts_size +@cindex md_parse_option +@cindex md_show_usage +@cindex md_after_parse_args +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}. This function should return non-zero if it handled the +option and zero otherwise. There is no need to print a message about an option +not being recognized. This will be handled by the generic code. + +GAS will call @code{md_show_usage} when a usage message is printed; it should +print a description of the machine specific options. @code{md_after_pase_args}, +if defined, is called after all options are processed, to let the backend +override settings done by the generic option parsing. + +@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 +alphanumeric 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 (null and newline are such characters by default, and need not be +listed in this array). Note that line_separator_chars do not separate lines +if found in a comment, such as after a character in line_comment_chars or +comment_chars. + +@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 name. + +@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 NUMBERS_WITH_SUFFIX +@cindex NUMBERS_WITH_SUFFIX +When this macro is defined to be non-zero, the parser allows the radix of a +constant to be indicated with a suffix. Valid suffixes are binary (B), +octal (Q), and hexadecimal (H). Case is not significant. + +@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 +@itemx TC_START_LABEL_WITHOUT_COLON +@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 TC_START_LABEL_WITHOUT_COLON +@cindex TC_START_LABEL_WITHOUT_COLON +Same as TC_START_LABEL, but should be used instead of TC_START_LABEL when +LABELS_WITHOUT_COLONS is defined. + +@item TC_FAKE_LABEL +@cindex TC_FAKE_LABEL +You may define this macro to control what GAS considers to be a fake +label. The default fake label is FAKE_LABEL_NAME. + +@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 call it with two +arguments, the character before the @kbd{=} character, and the value of +the string preceding the equal sign. GAS uses this macro 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 TC_CASE_SENSITIVE +@cindex TC_CASE_SENSITIVE +Define this macro if instruction mnemonics and pseudos are case sensitive. +The default is to have it undefined giving case insensitive names. + +@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. One argument is passed, a @code{char *} for the symbol. + +@item md_operand +@cindex md_operand +GAS will call this function with one argument, an @code{expressionS} +pointer, 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 md_register_arithmetic +@cindex md_register_arithmetic +If this macro is defined and evaluates to zero then GAS will not fold +expressions that add or subtract a constant to/from a register to give +another register. For example GAS's default behaviour is to fold the +expression "r8 + 1" into "r9", which is probably not the result +intended by the programmer. The default is to allow such folding, +since this maintains backwards compatibility with earlier releases of +GAS. + +@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 TC_IMPLICIT_LCOMM_ALIGNMENT (@var{size}, @var{p2var}) +@cindex TC_IMPLICIT_LCOMM_ALIGNMENT +An @code{.lcomm} directive with no explicit alignment parameter will use this +macro to set @var{p2var} to the alignment that a request for @var{size} bytes +will have. The alignment is expressed as a power of two. If no alignment +should take place, the macro definition should do nothing. Some targets define +a @code{.bss} directive that is also affected by this macro. The default +definition will set @var{p2var} to the truncated power of two of sizes up to +eight bytes. + +@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_ADDRESS_BYTES +@cindex TC_ADDRESS_BYTES +Define this macro to specify the number of bytes used to store an address. +Used to implement @code{dc.a}. The target must have a reloc for this size. + +@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_atof (@var{type},@var{litP},@var{sizeP}) +@cindex md_atof +This function is called to convert an ASCII string into a floating point value +in format used by the CPU. It takes three arguments. The first is @var{type} +which is a byte describing the type of floating point number to be created. It +is one of the characters defined in the @code{FLT_CHARS} macro. Possible +values are @var{'f'} or @var{'s'} for single precision, @var{'d'} or @var{'r'} +for double precision and @var{'x'} or @var{'p'} for extended precision. Either +lower or upper case versions of these letters can be used. Note: some targets +do not support all of these types, and some targets may also support other +types not mentioned here. + +The second parameter is @var{litP} which is a pointer to a byte array where the +converted value should be stored. The value is converted into LITTLENUMs and +is stored in the target's endian-ness order. (@var{LITTLENUM} is defined in +gas/bignum.h). Single precision values occupy 2 littlenums. Double precision +values occupy 4 littlenums and extended precision values occupy either 5 or 6 +littlenums, depending upon the target. + +The third argument is @var{sizeP}, which is a pointer to a integer that should +be filled in with the number of chars emitted into the byte array. + +The function should return NULL upon success or an error string upon failure. + +@item TC_LARGEST_EXPONENT_IS_NORMAL +@cindex TC_LARGEST_EXPONENT_IS_NORMAL (@var{precision}) +This macro is used only by @file{atof-ieee.c}. It should evaluate to true +if floats of the given precision use the largest exponent for normal numbers +instead of NaNs and infinities. @var{precision} is @samp{F_PRECISION} for +single precision, @samp{D_PRECISION} for double precision, or +@samp{X_PRECISION} for extended double precision. + +The macro has a default definition which returns 0 for all cases. + +@item WORKING_DOT_WORD +@itemx md_short_jump_size +@itemx md_long_jump_size +@itemx md_create_short_jump +@itemx md_create_long_jump +@itemx TC_CHECK_ADJUSTED_BROKEN_DOT_WORD +@cindex WORKING_DOT_WORD +@cindex md_short_jump_size +@cindex md_long_jump_size +@cindex md_create_short_jump +@cindex md_create_long_jump +@cindex TC_CHECK_ADJUSTED_BROKEN_DOT_WORD +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 +number of long jumps) 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 number of long +jumps, and define @code{md_create_long_jump} to create a long jump. +If defined, the macro TC_CHECK_ADJUSTED_BROKEN_DOT_WORD will be called for each +adjusted word just before the word is output. The macro takes two arguments, +an @code{addressT} with the adjusted word and a pointer to the current +@code{struct broken_word}. + +@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 +segment, 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 TC_LINKRELAX_FIXUP (@var{segT}) +@cindex TC_LINKRELAX_FIXUP +If defined, this macro allows control over whether fixups for a +given section will be processed when the @var{linkrelax} variable is +set. The macro is given the N_TYPE bits for the section in its +@var{segT} argument. If the macro evaluates to a non-zero value +then the fixups will be converted into relocs, otherwise they will +be passed to @var{md_apply_fix} as normal. + +@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 TC_FINALIZE_SYMS_BEFORE_SIZE_SEG +@cindex TC_FINALIZE_SYMS_BEFORE_SIZE_SEG +Specifies the value to be assigned to @code{finalize_syms} before the function +@code{size_segs} is called. Since @code{size_segs} calls @code{cvt_frag_to_fill} +which can call @code{md_convert_frag}, this constant governs whether the symbols +accessed in @code{md_convert_frag} will be fully resolved. In particular it +governs whether local symbols will have been resolved, and had their frag +information removed. Depending upon the processing performed by +@code{md_convert_frag} the frag information may or may not be necessary, as may +the resolved values of the symbols. The default value is 1. + +@item TC_VALIDATE_FIX (@var{fixP}, @var{seg}, @var{skip}) +@cindex TC_VALIDATE_FIX +This macro is evaluated for each fixup (when @var{linkrelax} is not set). +It may be used to change the fixup in @code{struct fix *@var{fixP}} before +the generic code sees it, or to fully process the fixup. In the latter case, +a @code{goto @var{skip}} will bypass the generic code. + +@item md_apply_fix (@var{fixP}, @var{valP}, @var{seg}) +@cindex md_apply_fix +GAS will call this for each fixup that passes the @code{TC_VALIDATE_FIX} test +when @var{linkrelax} is not set. It should store the correct value in the +object file. @code{struct fix *@var{fixP}} is the fixup @code{md_apply_fix} +is operating on. @code{valueT *@var{valP}} is the value to store into the +object files, or at least is the generic code's best guess. Specifically, +*@var{valP} is the value of the fixup symbol, perhaps modified by +@code{MD_APPLY_SYM_VALUE}, plus @code{@var{fixP}->fx_offset} (symbol addend), +less @code{MD_PCREL_FROM_SECTION} for pc-relative fixups. +@code{segT @var{seg}} is the section the fix is in. +@code{fixup_segment} performs a generic overflow check on *@var{valP} after +@code{md_apply_fix} returns. If the overflow check is relevant for the target +machine, then @code{md_apply_fix} should modify *@var{valP}, typically to the +value stored in the object file. + +@item TC_FORCE_RELOCATION (@var{fix}) +@cindex TC_FORCE_RELOCATION +If this macro returns non-zero, it guarantees that a relocation will be emitted +even when the value can be resolved locally, as @code{fixup_segment} tries to +reduce the number of relocations emitted. For example, a fixup expression +against an absolute symbol will normally not require a reloc. If undefined, +a default of @w{@code{(S_FORCE_RELOC ((@var{fix})->fx_addsy))}} is used. + +@item TC_FORCE_RELOCATION_ABS (@var{fix}) +@cindex TC_FORCE_RELOCATION_ABS +Like @code{TC_FORCE_RELOCATION}, but used only for fixup expressions against an +absolute symbol. If undefined, @code{TC_FORCE_RELOCATION} will be used. + +@item TC_FORCE_RELOCATION_LOCAL (@var{fix}) +@cindex TC_FORCE_RELOCATION_LOCAL +Like @code{TC_FORCE_RELOCATION}, but used only for fixup expressions against a +symbol in the current section. If undefined, fixups that are not +@code{fx_pcrel} or for which @code{TC_FORCE_RELOCATION} +returns non-zero, will emit relocs. + +@item TC_FORCE_RELOCATION_SUB_SAME (@var{fix}, @var{seg}) +@cindex TC_FORCE_RELOCATION_SUB_SAME +This macro controls resolution of fixup expressions involving the +difference of two symbols in the same section. If this macro returns zero, +the subtrahend will be resolved and @code{fx_subsy} set to @code{NULL} for +@code{md_apply_fix}. If undefined, the default of +@w{@code{! SEG_NORMAL (@var{seg})}} will be used. + +@item TC_FORCE_RELOCATION_SUB_ABS (@var{fix}, @var{seg}) +@cindex TC_FORCE_RELOCATION_SUB_ABS +Like @code{TC_FORCE_RELOCATION_SUB_SAME}, but used when the subtrahend is an +absolute symbol. If the macro is undefined a default of @code{0} is used. + +@item TC_FORCE_RELOCATION_SUB_LOCAL (@var{fix}, @var{seg}) +@cindex TC_FORCE_RELOCATION_SUB_LOCAL +Like @code{TC_FORCE_RELOCATION_SUB_ABS}, but the subtrahend is a symbol in the +same section as the fixup. + +@item TC_VALIDATE_FIX_SUB (@var{fix}, @var{seg}) +@cindex TC_VALIDATE_FIX_SUB +This macro is evaluated for any fixup with a @code{fx_subsy} that +@code{fixup_segment} cannot reduce to a number. If the macro returns +@code{false} an error will be reported. + +@item TC_GLOBAL_REGISTER_SYMBOL_OK +@cindex TC_GLOBAL_REGISTER_SYMBOL_OK +Define this macro if global register symbols are supported. The default +is to disallow global register symbols. + +@item MD_APPLY_SYM_VALUE (@var{fix}) +@cindex MD_APPLY_SYM_VALUE +This macro controls whether the symbol value becomes part of the value passed +to @code{md_apply_fix}. If the macro is undefined, or returns non-zero, the +symbol value will be included. For ELF, a suitable definition might simply be +@code{0}, because ELF relocations don't include the symbol value in the addend. + +@item S_FORCE_RELOC (@var{sym}, @var{strict}) +@cindex S_FORCE_RELOC +This function returns true for symbols +that should not be reduced to section symbols or eliminated from expressions, +because they may be overridden by the linker. ie. for symbols that are +undefined or common, and when @var{strict} is set, weak, or global (for ELF +assemblers that support ELF shared library linking semantics). + +@item EXTERN_FORCE_RELOC +@cindex EXTERN_FORCE_RELOC +This macro controls whether @code{S_FORCE_RELOC} returns true for global +symbols. If undefined, the default is @code{true} for ELF assemblers, and +@code{false} for non-ELF. + +@item tc_gen_reloc +@cindex tc_gen_reloc +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 (@var{fixp}, @var{section}) +@cindex MD_PCREL_FROM_SECTION +If you define this macro, it should return the position from which the PC +relative adjustment for a PC relative fixup 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, plus the address of +the PC relative fixup. The latter can be calculated as +@var{fixp}->fx_where + @var{fixp}->fx_frag->fr_address . + +@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 tc_new_dot_label +@cindex tc_new_dot_label +If you define this macro, GAS will call it each time a fake label is created +off the special dot symbol. + +@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. The function +must take two arguments, a @code{segT} for the section and a @code{valueT} +for the size of the section, and return a @code{valueT} for the rounded +size. + +@item md_macro_start +@cindex md_macro_start +If defined, GAS will call this macro when it starts to include a macro +expansion. @code{macro_nest} indicates the current macro nesting level, which +includes the one being expanded. + +@item md_macro_info +@cindex md_macro_info +If defined, GAS will call this macro after the macro expansion has been +included in the input and after parsing the macro arguments. The single +argument is a pointer to the macro processing's internal representation of the +macro (macro_entry *), which includes expansion of the formal arguments. + +@item md_macro_end +@cindex md_macro_end +Complement to md_macro_start. If defined, it is called when finished +processing an inserted macro expansion, just before decrementing macro_nest. + +@item DOUBLEBAR_PARALLEL +@cindex DOUBLEBAR_PARALLEL +Affects the preprocessor so that lines containing '||' don't have their +whitespace stripped following the double bar. This is useful for targets that +implement parallel instructions. + +@item KEEP_WHITE_AROUND_COLON +@cindex KEEP_WHITE_AROUND_COLON +Normally, whitespace is compressed and removed when, in the presence of the +colon, the adjoining tokens can be distinguished. This option affects the +preprocessor so that whitespace around colons is preserved. This is useful +when colons might be removed from the input after preprocessing but before +assembling, so that adjoining tokens can still be distinguished if there is +whitespace, or concatenated if there is not. + +@item tc_frob_section +@cindex tc_frob_section +If you define this macro, 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 defining 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 md_post_relax_hook +If you define this macro, GAS will call it after relaxing and sizing the +segments. + +@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. + +@item TC_COFF_SECTION_DEFAULT_ATTRIBUTES +@cindex TC_COFF_SECTION_DEFAULT_ATTRIBUTES +The COFF @code{.section} directive will use the value of this macro to set +a new section's attributes when a directive has no valid flags or when the +flag is @code{w}. The default value of the macro is @code{SEC_LOAD | SEC_DATA}. + +@item DWARF2_FORMAT (@var{sec}) +@cindex DWARF2_FORMAT +If you define this, it should return one of @code{dwarf2_format_32bit}, +@code{dwarf2_format_64bit}, or @code{dwarf2_format_64bit_irix} to indicate +the size of internal DWARF section offsets and the format of the DWARF initial +length fields. When @code{dwarf2_format_32bit} is returned, the initial +length field will be 4 bytes long and section offsets are 32 bits in size. +For @code{dwarf2_format_64bit} and @code{dwarf2_format_64bit_irix}, section +offsets are 64 bits in size, but the initial length field differs. An 8 byte +initial length is indicated by @code{dwarf2_format_64bit_irix} and +@code{dwarf2_format_64bit} indicates a 12 byte initial length field in +which the first four bytes are 0xffffffff and the next 8 bytes are +the section's length. + +If you don't define this, @code{dwarf2_format_32bit} will be used as +the default. + +This define only affects debug +sections generated by the assembler. DWARF 2 sections generated by +other tools will be unaffected by this setting. + +@item DWARF2_ADDR_SIZE (@var{bfd}) +@cindex DWARF2_ADDR_SIZE +It should return the size of an address, as it should be represented in +debugging info. If you don't define this macro, the default definition uses +the number of bits per address, as defined in @var{bfd}, divided by 8. + +@item MD_DEBUG_FORMAT_SELECTOR +@cindex MD_DEBUG_FORMAT_SELECTOR +If defined this macro is the name of a function to be called when the +@samp{--gen-debug} switch is detected on the assembler's command line. The +prototype for the function looks like this: + +@smallexample + enum debug_info_type MD_DEBUG_FORMAT_SELECTOR (int * use_gnu_extensions) +@end smallexample + +The function should return the debug format that is preferred by the CPU +backend. This format will be used when generating assembler specific debug +information. + +@item md_allow_local_subtract (@var{left}, @var{right}, @var{section}) +If defined, GAS will call this macro when evaluating an expression which is the +difference of two symbols defined in the same section. It takes three +arguments: @code{expressioS * @var{left}} which is the symbolic expression on +the left hand side of the subtraction operation, @code{expressionS * +@var{right}} which is the symbolic expression on the right hand side of the +subtraction, and @code{segT @var{section}} which is the section containing the two +symbols. The macro should return a non-zero value if the expression should be +evaluated. Targets which implement link time relaxation which may change the +position of the two symbols relative to each other should ensure that this +macro returns zero in situations where this can occur. + +@item md_allow_eh_opt +If defined, GAS will check this macro before performing any optimizations on +the DWARF call frame debug information that is emitted. Targets which +implement link time relaxation may need to define this macro and set it to zero +if it is possible to change the size of a function's prologue. +@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}. + +@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_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 relocation 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 a nonzero value 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 defining this +macro to set its second argument to a non-zero value. + +@item obj_set_weak_hook +@cindex obj_set_weak_hook +If you define this macro, @code{S_SET_WEAK} will call it before modifying the +symbol's flags. + +@item obj_clear_weak_hook +@cindex obj_clear_weak_hook +If you define this macro, @code{S_CLEAR_WEAKREFD} will call it after cleaning +the @code{weakrefd} flag, but before modifying any other flags. + +@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}. +@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 +accommodate 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 movable +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}. + +If you generate frags separately for the basic insn opcode and any relaxable +operands, do not call @code{fix_new} thinking you can emit fixups for the +opcode field from the relaxable frag. It is not guaranteed to be the same frag. +If you need to emit fixups for the opcode field from inspection of the +relaxable frag, then you need to generate a common frag for both the basic +opcode and relaxable fields, or you need to provide the frag for the opcode to +pass to @code{fix_new}. The latter can be done for example by defining +@code{TC_FRAG_TYPE} to include a pointer to it and defining @code{TC_FRAG_INIT} +to set the pointer. + +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_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 sprint_value (char *@var{buf}, valueT @var{val}) +This function is 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 @{@} void *hash_delete (struct hash_control *, const char *, int) +Deletes entry from the hash table, returns the value it had. If the last +arg is non-zero, free memory allocated for this entry and all entries +allocated more recently than this entry. +@end deftypefun + +@deftypefun @{@} void *hash_replace (struct hash_control *, const char *, void *) +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 *, void *) +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 *, void *) +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: |