* Makefile.am: Bfin support.

* Makefile.in: Regenerated.
	* aclocal.m4: Regenerated.
	* configure: Regenerated.
	* configure.in: Bfin support.
	* configure.tgt: Bfin support.
	* config/bfin-aux.h: New file.
	* config/bfin-defs.h: New file.
	* config/bfin-lex.l: New file.
	* config/bfin-parse.y: New file.
	* config/tc-bfin.c: New file.
	* config/tc-bfin.h: New file.
	* doc/Makefile.am: Recognize c-bfin.texi.
	* doc/Makefile.in: Regenerated.
	* doc/all.texi: Bfin support.
	* doc/as.texinfo: Likewise.
	* doc/c-bfin.texi: Document bfin-specific syntax and
	directives.
This commit is contained in:
Catherine Moore 2005-09-30 15:05:07 +00:00
parent bfe2612a14
commit 07c1b327c7
18 changed files with 8143 additions and 159 deletions

View File

@ -1,3 +1,24 @@
2005-09-30 Catherine Moore <clm@cm00re.com>
* Makefile.am: Bfin support.
* Makefile.in: Regenerated.
* aclocal.m4: Regenerated.
* configure: Regenerated.
* configure.in: Bfin support.
* configure.tgt: Bfin support.
* config/bfin-aux.h: New file.
* config/bfin-defs.h: New file.
* config/bfin-lex.l: New file.
* config/bfin-parse.y: New file.
* config/tc-bfin.c: New file.
* config/tc-bfin.h: New file.
* doc/Makefile.am: Recognize c-bfin.texi.
* doc/Makefile.in: Regenerated.
* doc/all.texi: Bfin support.
* doc/as.texinfo: Likewise.
* doc/c-bfin.texi: Document bfin-specific syntax and
directives.
2005-09-30 Paul Brook <paul@codesourcery.com>
* config/tc-arm.c (opcode_tag): Add OT_cinfix3_legacy.

View File

@ -45,6 +45,7 @@ CPU_TYPES = \
arc \
arm \
avr \
bfin \
cris \
crx \
d10v \
@ -227,6 +228,7 @@ TARGET_CPU_CFILES = \
config/tc-arc.c \
config/tc-arm.c \
config/tc-avr.c \
config/tc-bfin.c \
config/tc-cris.c \
config/tc-crx.c \
config/tc-d10v.c \
@ -275,6 +277,7 @@ TARGET_CPU_HFILES = \
config/tc-arc.h \
config/tc-arm.h \
config/tc-avr.h \
config/tc-bfin.h \
config/tc-cris.h \
config/tc-crx.h \
config/tc-d10v.h \
@ -437,7 +440,9 @@ noinst_PROGRAMS = as-new
noinst_SCRIPTS = $(GDBINIT)
EXTRA_SCRIPTS = .gdbinit
EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c
EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c \
bfin-parse.c bfin-lex.l bfin-defs.h
diststuff: $(EXTRA_DIST) info
all: info
@ -567,7 +572,7 @@ xtensa-relax.o: $(srcdir)/config/xtensa-relax.c
# The m68k operand parser.
EXTRA_as_new_SOURCES = config/m68k-parse.y
EXTRA_as_new_SOURCES = config/m68k-parse.y config/bfin-parse.y
# If m68k-parse.y is in a different directory, then ylwrap will use an
# absolute path when it invokes yacc, which will cause yacc to put the
@ -600,6 +605,18 @@ m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
m68k-parse.h: ; @true
$(srcdir)/config/m68k-parse.h: ; @true
bfin-parse.c bfin-parse.tab.h: $(srcdir)/config/bfin-parse.y
$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.tab.h -- $(YACCCOMPILE) -d ;
bfin-parse.o: bfin-parse.c bfin-parse.tab.h $(srcdir)/config/bfin-defs.h
bfin-defs.h: ; @true
$(srcdir)/config/bfin-defs.h: ; @true
bfin-lex.c: $(srcdir)/config/bfin-lex.l
$(SHELL) $(YLWRAP) "$(LEX)" <$(srcdir)/config/bfin-lex.l lex.yy.c bfin-lex.c
bfin-lex.o: bfin-lex.c bfin-parse.tab.h $(srcdir)/config/bfin-defs.h
$(COMPILE) -c $< $(NO_WERROR)
# The instruction table specification lexical analyzer and parser.
itbl-lex.c: $(srcdir)/itbl-lex.l
@ -989,6 +1006,11 @@ DEPTC_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/avr.h
DEPTC_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/bfin.h $(srcdir)/config/bfin-defs.h
DEPTC_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
$(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
@ -1525,6 +1547,11 @@ DEPOBJ_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
$(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
$(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
@ -1968,6 +1995,9 @@ DEP_avr_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-avr.h \
DEP_avr_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h
DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h
DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_cris_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \

View File

@ -1,4 +1,4 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@ -42,14 +42,16 @@ host_triplet = @host@
target_triplet = @target@
noinst_PROGRAMS = as-new$(EXEEXT)
EXTRA_PROGRAMS = itbl-test$(EXEEXT)
DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub NEWS \
README ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub \
INSTALL NEWS README AUTHORS ChangeLog THANKS \
$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \
$(srcdir)/config.in $(srcdir)/../mkinstalldirs \
$(srcdir)/gdbinit.in $(srcdir)/gdbinit.in \
$(top_srcdir)/po/Make-in m68k-parse.c itbl-parse.c itbl-lex.c \
$(srcdir)/../ylwrap $(srcdir)/../ltmain.sh \
$(srcdir)/../config.guess $(srcdir)/../config.sub
$(top_srcdir)/po/Make-in m68k-parse.c bfin-parse.c \
itbl-parse.c itbl-lex.c $(srcdir)/../ylwrap \
$(srcdir)/../ltmain.sh $(srcdir)/../config.guess \
$(srcdir)/../config.sub
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
@ -274,6 +276,7 @@ CPU_TYPES = \
arc \
arm \
avr \
bfin \
cris \
crx \
d10v \
@ -454,6 +457,7 @@ TARGET_CPU_CFILES = \
config/tc-arc.c \
config/tc-arm.c \
config/tc-avr.c \
config/tc-bfin.c \
config/tc-cris.c \
config/tc-crx.c \
config/tc-d10v.c \
@ -502,6 +506,7 @@ TARGET_CPU_HFILES = \
config/tc-arc.h \
config/tc-arm.h \
config/tc-avr.h \
config/tc-bfin.h \
config/tc-cris.h \
config/tc-crx.h \
config/tc-d10v.h \
@ -656,7 +661,9 @@ POTFILES = $(MULTI_CFILES) $(TARGET_ENV_HFILES) $(OBJ_FORMAT_HFILES) \
noinst_SCRIPTS = $(GDBINIT)
EXTRA_SCRIPTS = .gdbinit
EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c
EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c \
bfin-parse.c bfin-lex.l bfin-defs.h
DISTCLEANFILES = targ-cpu.h obj-format.h targ-env.h itbl-cpu.h cgen-desc.h
# Now figure out from those variables how to compile and link.
@ -698,7 +705,7 @@ RUNTEST = runtest
RUNTESTFLAGS =
# The m68k operand parser.
EXTRA_as_new_SOURCES = config/m68k-parse.y
EXTRA_as_new_SOURCES = config/m68k-parse.y config/bfin-parse.y
itbl_test_SOURCES = itbl-parse.y itbl-lex.l
itbl_test_LDADD = itbl-tops.o itbl-test.o $(GASLIBS) @LEXLIB@
@ -786,6 +793,12 @@ DEPTC_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/avr.h
DEPTC_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
$(INCDIR)/opcode/bfin.h $(srcdir)/config/bfin-defs.h
DEPTC_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
$(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
@ -1426,6 +1439,12 @@ DEPOBJ_avr_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
DEPOBJ_bfin_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h \
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h
DEPOBJ_cris_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
$(srcdir)/config/tc-cris.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
$(INCDIR)/aout/aout64.h $(INCDIR)/obstack.h
@ -1972,6 +1991,10 @@ DEP_avr_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-avr.h
DEP_bfin_elf = $(srcdir)/config/obj-elf.h $(INCDIR)/symcat.h \
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-bfin.h
DEP_cris_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-cris.h \
$(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
@ -2438,6 +2461,9 @@ distclean-compile:
.y.c:
$(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
bfin-parse.c: config/bfin-parse.y
$(SHELL) $(YLWRAP) `test -f 'config/bfin-parse.y' || echo '$(srcdir)/'`config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.h y.output bfin-parse.output -- $(YACC) $(YFLAGS) $(AM_YFLAGS)
mostlyclean-libtool:
-rm -f *.lo
@ -2455,13 +2481,7 @@ uninstall-info-am:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -2473,7 +2493,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@ -2481,13 +2501,7 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
@set fnord $$MAKEFLAGS; amf=$$2; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@ -2508,7 +2522,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@ -2637,6 +2651,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-rm -f bfin-parse.c
-rm -f itbl-lex.c
-rm -f itbl-parse.c
-rm -f m68k-parse.c
@ -2713,6 +2728,7 @@ uninstall-info: uninstall-info-recursive
po/POTFILES.in: @MAINT@ Makefile
for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
&& mv tmp $(srcdir)/po/POTFILES.in
diststuff: $(EXTRA_DIST) info
all: info
@ -2827,6 +2843,18 @@ m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h
m68k-parse.h: ; @true
$(srcdir)/config/m68k-parse.h: ; @true
bfin-parse.c bfin-parse.tab.h: $(srcdir)/config/bfin-parse.y
$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.tab.h -- $(YACCCOMPILE) -d ;
bfin-parse.o: bfin-parse.c bfin-parse.tab.h $(srcdir)/config/bfin-defs.h
bfin-defs.h: ; @true
$(srcdir)/config/bfin-defs.h: ; @true
bfin-lex.c: $(srcdir)/config/bfin-lex.l
$(SHELL) $(YLWRAP) "$(LEX)" <$(srcdir)/config/bfin-lex.l lex.yy.c bfin-lex.c
bfin-lex.o: bfin-lex.c bfin-parse.tab.h $(srcdir)/config/bfin-defs.h
$(COMPILE) -c $< $(NO_WERROR)
# The instruction table specification lexical analyzer and parser.
itbl-lex.c: $(srcdir)/itbl-lex.l

463
gas/aclocal.m4 vendored
View File

@ -1,4 +1,4 @@
# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
# generated automatically by aclocal 1.9.2 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005 Free Software Foundation, Inc.
@ -11,11 +11,23 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# -*- Autoconf -*-
# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
# Generated from amversion.in; do not edit by hand.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
@ -28,15 +40,26 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.9.5])])
[AM_AUTOMAKE_VERSION([1.9.2])])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# AM_AUX_DIR_EXPAND
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
@ -83,16 +106,26 @@ AC_PREREQ([2.50])dnl
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
# serial 7
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 6
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
@ -116,15 +149,26 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
# serial 7 -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.
#
# This file 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.
# serial 8
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@ -133,6 +177,7 @@ fi])])
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
@ -272,16 +317,27 @@ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.
#serial 3
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#serial 2
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
@ -340,32 +396,55 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
# serial 8
# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 7
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# Do all the work for Automake. -*- Autoconf -*-
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# serial 12
# This macro actually does too much. Some checks are only needed if
# This macro actually does too much some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 11
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
@ -466,27 +545,51 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# -*- Autoconf -*-
# Copyright (C) 2003 Free Software Foundation, Inc.
# serial 2
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 1
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
@ -501,14 +604,26 @@ fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# serial 5
# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 4
# AM_PROG_LEX
# -----------
@ -522,17 +637,28 @@ if test "$LEX" = :; then
LEX=${am_missing_run}flex
fi])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# Add --enable-maintainer-mode option to configure.
# From Jim Meyering
# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.
#
# This file 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.
# serial 4
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 3
AC_DEFUN([AM_MAINTAINER_MODE],
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
@ -551,15 +677,26 @@ AC_DEFUN([AM_MAINTAINER_MODE],
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
# serial 3
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 2
# AM_MAKE_INCLUDE()
# -----------------
@ -603,16 +740,27 @@ AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# serial 4
# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 3
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
@ -638,16 +786,27 @@ else
fi
])
# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
#
# This file 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.
# AM_PROG_MKDIR_P
# ---------------
# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
#
# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
# created by `make install' are always world readable, even if the
# installer happens to have an overly restrictive umask (e.g. 077).
@ -701,15 +860,26 @@ else
fi
AC_SUBST([mkdir_p])])
# Helper functions for option handling. -*- Autoconf -*-
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
# serial 3
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 2
# _AM_MANGLE_OPTION(NAME)
# -----------------------
@ -734,16 +904,28 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file 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.
# Check to make sure that the build environment is sane.
#
# serial 4
# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 3
# AM_SANITY_CHECK
# ---------------
@ -786,14 +968,25 @@ Check your system clock])
fi
AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file 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.
# AM_PROG_INSTALL_STRIP
# ---------------------
# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
@ -816,13 +1009,25 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
#
# This file 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.
# Copyright (C) 2004 Free Software Foundation, Inc.
# This program 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 2, 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# serial 1
# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------

151
gas/config/bfin-aux.h Executable file
View File

@ -0,0 +1,151 @@
/* bfin-aux.h ADI Blackfin Header file for gas
Copyright 2005
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS 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 2, or (at your option)
any later version.
GAS 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 GAS; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
#include "bfin-defs.h"
#define REG_T Register *
INSTR_T
bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p,
int h01, int h11, int h00, int h10,
int op0, REG_T dst, REG_T src0, REG_T src1, int w0);
INSTR_T
bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p,
int h01, int h11, int h00, int h10,
int op0, REG_T dst, REG_T src0, REG_T src1, int w0);
INSTR_T
bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x,
REG_T dst0, REG_T dst1, REG_T src0, REG_T src1);
INSTR_T
bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1,
int sop, int hls);
INSTR_T
bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1,
int sop, int hls);
INSTR_T
bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword,
int reloc);
INSTR_T
bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z,
Expr_Node *offset);
INSTR_T
bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w);
INSTR_T
bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op);
INSTR_T
bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w);
INSTR_T
bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx);
INSTR_T
bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m);
INSTR_T
bfin_gen_alu2op (REG_T dst, REG_T src, int opc);
INSTR_T
bfin_gen_compi2opd (REG_T dst, int src, int op);
INSTR_T
bfin_gen_compi2opp (REG_T dst, int src, int op);
INSTR_T
bfin_gen_dagmodik (REG_T i, int op);
INSTR_T
bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br);
INSTR_T
bfin_gen_ptr2op (REG_T dst, REG_T src, int opc);
INSTR_T
bfin_gen_logi2op (int dst, int src, int opc);
INSTR_T
bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc);
INSTR_T
bfin_gen_ccmv (REG_T src, REG_T dst, int t);
INSTR_T
bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g);
INSTR_T
bfin_gen_cc2stat (int cbit, int op, int d);
INSTR_T
bfin_gen_regmv (REG_T src, REG_T dst);
INSTR_T
bfin_gen_cc2dreg (int op, REG_T reg);
INSTR_T
bfin_gen_brcc (int t, int b, Expr_Node *offset);
INSTR_T
bfin_gen_ujump (Expr_Node *offset);
INSTR_T
bfin_gen_cactrl (REG_T reg, int a, int op);
INSTR_T
bfin_gen_progctrl (int prgfunc, int poprnd);
INSTR_T
bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop,
Expr_Node *eoffset, REG_T reg);
INSTR_T
bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg);
INSTR_T
bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w);
INSTR_T
bfin_gen_pushpopreg (REG_T reg, int w);
INSTR_T
bfin_gen_calla (Expr_Node *addr, int s);
INSTR_T
bfin_gen_linkage (int r, int framesize);
INSTR_T
bfin_gen_pseudodbg (int fn, int reg, int grp);
INSTR_T
bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected);
bfd_boolean
bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2);
INSTR_T
bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2);

383
gas/config/bfin-defs.h Normal file
View File

@ -0,0 +1,383 @@
/* bfin-defs.h ADI Blackfin gas header file
Copyright 2005
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS 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 2, or (at your option)
any later version.
GAS 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 GAS; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
#ifndef BFIN_PARSE_H
#define BFIN_PARSE_H
#include <bfd.h>
#include "as.h"
#define PCREL 1
#define CODE_FRAG_SIZE 4096 /* 1 page. */
/* Definition for all status bits. */
typedef enum
{
c_0,
c_1,
c_4,
c_2,
c_uimm2,
c_uimm3,
c_imm3,
c_pcrel4,
c_imm4,
c_uimm4s4,
c_uimm4,
c_uimm4s2,
c_negimm5s4,
c_imm5,
c_uimm5,
c_imm6,
c_imm7,
c_imm8,
c_uimm8,
c_pcrel8,
c_uimm8s4,
c_pcrel8s4,
c_lppcrel10,
c_pcrel10,
c_pcrel12,
c_imm16s4,
c_luimm16,
c_imm16,
c_huimm16,
c_rimm16,
c_imm16s2,
c_uimm16s4,
c_uimm16,
c_pcrel24
} const_forms_t;
/* High-Nibble: group code, low nibble: register code. */
#define T_REG_R 0x00
#define T_REG_P 0x10
#define T_REG_I 0x20
#define T_REG_B 0x30
#define T_REG_L 0x34
#define T_REG_M 0x24
#define T_REG_A 0x40
/* All registers above this value don't
belong to a usuable register group. */
#define T_NOGROUP 0xa0
/* Flags. */
#define F_REG_ALL 0x1000
#define F_REG_HIGH 0x2000 /* Half register: high half. */
enum machine_registers
{
REG_R0 = T_REG_R, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7,
REG_P0 = T_REG_P, REG_P1, REG_P2, REG_P3, REG_P4, REG_P5, REG_SP, REG_FP,
REG_I0 = T_REG_I, REG_I1, REG_I2, REG_I3,
REG_M0 = T_REG_M, REG_M1, REG_M2, REG_M3,
REG_B0 = T_REG_B, REG_B1, REG_B2, REG_B3,
REG_L0 = T_REG_L, REG_L1, REG_L2, REG_L3,
REG_A0x = T_REG_A, REG_A0w, REG_A1x, REG_A1w,
REG_ASTAT = 0x46,
REG_RETS = 0x47,
REG_LC0 = 0x60, REG_LT0, REG_LB0, REG_LC1, REG_LT1, REG_LB1,
REG_CYCLES, REG_CYCLES2,
REG_USP = 0x70, REG_SEQSTAT, REG_SYSCFG,
REG_RETI, REG_RETX, REG_RETN, REG_RETE, REG_EMUDAT,
/* These don't have groups. */
REG_sftreset = T_NOGROUP, REG_omode, REG_excause, REG_emucause,
REG_idle_req, REG_hwerrcause,
REG_A0 = 0xc0, REG_A1, REG_CC,
/* Pseudo registers, used only for distinction from symbols. */
REG_RL0, REG_RL1, REG_RL2, REG_RL3,
REG_RL4, REG_RL5, REG_RL6, REG_RL7,
REG_RH0, REG_RH1, REG_RH2, REG_RH3,
REG_RH4, REG_RH5, REG_RH6, REG_RH7,
REG_LASTREG
};
/* Status register flags. */
enum statusflags
{
S_AZ = 0,
S_AN,
S_AQ = 6,
S_AC0 = 12,
S_AC1,
S_AV0 = 16,
S_AV0S,
S_AV1,
S_AV1S,
S_V = 24,
S_VS = 25
};
enum reg_class
{
rc_dregs_lo,
rc_dregs_hi,
rc_dregs,
rc_dregs_pair,
rc_pregs,
rc_spfp,
rc_dregs_hilo,
rc_accum_ext,
rc_accum_word,
rc_accum,
rc_iregs,
rc_mregs,
rc_bregs,
rc_lregs,
rc_dpregs,
rc_gregs,
rc_regs,
rc_statbits,
rc_ignore_bits,
rc_ccstat,
rc_counters,
rc_dregs2_sysregs1,
rc_open,
rc_sysregs2,
rc_sysregs3,
rc_allregs,
LIM_REG_CLASSES
};
/* mmod field. */
#define M_S2RND 1
#define M_T 2
#define M_W32 3
#define M_FU 4
#define M_TFU 6
#define M_IS 8
#define M_ISS2 9
#define M_IH 11
#define M_IU 12
/* Register type checking macros. */
#define CODE_MASK 0x07
#define CLASS_MASK 0xf0
#define REG_SAME(a, b) ((a).regno == (b).regno)
#define REG_EQUAL(a, b) (((a).regno & CODE_MASK) == ((b).regno & CODE_MASK))
#define REG_CLASS(a) ((a.regno) & 0xf0)
#define IS_A1(a) ((a).regno == REG_A1)
#define IS_H(a) ((a).regno & F_REG_HIGH ? 1: 0)
#define IS_EVEN(r) (r.regno % 2 == 0)
#define IS_HCOMPL(a, b) (REG_EQUAL(a, b) && \
((a).regno & F_REG_HIGH) != ((b).regno & F_REG_HIGH))
/* register type checking. */
#define _TYPECHECK(r, x) (((r).regno & CLASS_MASK) == T_REG_##x)
#define IS_DREG(r) _TYPECHECK(r, R)
#define IS_DREG_H(r) (_TYPECHECK(r, R) && IS_H(r))
#define IS_DREG_L(r) (_TYPECHECK(r, R) && !IS_H(r))
#define IS_PREG(r) _TYPECHECK(r, P)
#define IS_IREG(r) (((r).regno & 0xf4) == T_REG_I)
#define IS_MREG(r) (((r).regno & 0xf4) == T_REG_M)
#define IS_CREG(r) ((r).regno == REG_LC0 || (r).regno == REG_LC1)
#define IS_ALLREG(r) ((r).regno < T_NOGROUP)
/* Expression value macros. */
typedef enum
{
ones_compl,
twos_compl,
mult,
divide,
mod,
add,
sub,
lsh,
rsh,
logand,
logior,
logxor
} expr_opcodes_t;
struct expressionS;
#define SYMBOL_T symbolS*
struct expression_cell
{
int value;
SYMBOL_T symbol;
};
/* User Type Definitions. */
struct bfin_insn
{
unsigned long value;
struct bfin_insn *next;
struct expression_cell *exp;
int pcrel;
int reloc;
};
#define INSTR_T struct bfin_insn*
#define EXPR_T struct expression_cell*
typedef struct expr_node_struct Expr_Node;
extern INSTR_T gencode (unsigned long x);
extern INSTR_T conscode (INSTR_T head, INSTR_T tail);
extern INSTR_T conctcode (INSTR_T head, INSTR_T tail);
extern INSTR_T note_reloc
(INSTR_T code, Expr_Node *, int reloc,int pcrel);
extern INSTR_T note_reloc1
(INSTR_T code, const char * sym, int reloc, int pcrel);
extern INSTR_T note_reloc2
(INSTR_T code, const char *symbol, int reloc, int value, int pcrel);
/* Types of expressions. */
typedef enum
{
Expr_Node_Binop, /* Binary operator. */
Expr_Node_Unop, /* Unary operator. */
Expr_Node_Reloc, /* Symbol to be relocated. */
Expr_Node_Constant /* Constant. */
} Expr_Node_Type;
/* Types of operators. */
typedef enum
{
Expr_Op_Type_Add,
Expr_Op_Type_Sub,
Expr_Op_Type_Mult,
Expr_Op_Type_Div,
Expr_Op_Type_Mod,
Expr_Op_Type_Lshift,
Expr_Op_Type_Rshift,
Expr_Op_Type_BAND, /* Bitwise AND. */
Expr_Op_Type_BOR, /* Bitwise OR. */
Expr_Op_Type_BXOR, /* Bitwise exclusive OR. */
Expr_Op_Type_LAND, /* Logical AND. */
Expr_Op_Type_LOR, /* Logical OR. */
Expr_Op_Type_NEG,
Expr_Op_Type_COMP /* Complement. */
} Expr_Op_Type;
/* The value that can be stored ... depends on type. */
typedef union
{
const char *s_value; /* if relocation symbol, the text. */
int i_value; /* if constant, the value. */
Expr_Op_Type op_value; /* if operator, the value. */
} Expr_Node_Value;
/* The expression node. */
struct expr_node_struct
{
Expr_Node_Type type;
Expr_Node_Value value;
Expr_Node *Left_Child;
Expr_Node *Right_Child;
};
/* Operations on the expression node. */
Expr_Node *Expr_Node_Create (Expr_Node_Type type,
Expr_Node_Value value,
Expr_Node *Left_Child,
Expr_Node *Right_Child);
/* Generate the reloc structure as a series of instructions. */
INSTR_T Expr_Node_Gen_Reloc (Expr_Node *head, int parent_reloc);
#define MKREF(x) mkexpr (0,x)
#define ALLOCATE(x) malloc (x)
#define NULL_CODE ((INSTR_T) 0)
#ifndef EXPR_VALUE
#define EXPR_VALUE(x) (((x)->type == Expr_Node_Constant) ? ((x)->value.i_value) : 0)
#endif
#ifndef EXPR_SYMBOL
#define EXPR_SYMBOL(x) ((x)->symbol)
#endif
typedef long reg_t;
typedef struct _register
{
reg_t regno; /* Register ID as defined in machine_registers. */
int flags;
} Register;
typedef struct _macfunc
{
char n;
char op;
char w;
char P;
Register dst;
Register s0;
Register s1;
} Macfunc;
typedef struct _opt_mode
{
int MM;
int mod;
} Opt_mode;
typedef enum
{
SEMANTIC_ERROR,
NO_INSN_GENERATED,
INSN_GENERATED
} parse_state;
#ifdef __cplusplus
extern "C" {
#endif
extern int debug_codeselection;
void error (char *format, ...);
void warn (char *format, ...);
int semantic_error (char *syntax);
void semantic_error_2 (char *syntax);
EXPR_T mkexpr (int, SYMBOL_T);
extern void bfin_equals (Expr_Node *sym);
/* Defined in bfin-lex.l. */
void set_start_state (void);
#ifdef __cplusplus
}
#endif
#endif /* BFIN_PARSE_H */

554
gas/config/bfin-lex.l Normal file
View File

@ -0,0 +1,554 @@
/* bfin-lex.l ADI Blackfin lexer
Copyright 2005
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS 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 2, or (at your option)
any later version.
GAS 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 GAS; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
%{
#include <stdlib.h>
#include <string.h>
#include "bfin-defs.h"
#include "bfin-parse.tab.h"
#include "as.h"
static long parse_int (char **end);
static int parse_halfreg (Register *r, int cl, char *hr);
static int parse_reg (Register *r, int type, char *rt);
int yylex (void);
#define _REG yylval.reg
%}
/* Define Start States ... Actually we will use exclusion.
If no start state is specified it should match any state
and <INITIAL> would match some keyword rules only with
initial. */
%s KEYWORD
%%
[sS][fF][tT][rR][eE][sS][eE][tT] _REG.regno = REG_sftreset; return REG;
[oO][mM][oO][dD][eE] _REG.regno = REG_omode; return REG;
[iI][dD][lL][eE]_[rR][eE][qQ] _REG.regno = REG_idle_req; return REG;
[hH][wW][eE][rR][rR][cC][aA][uU][sS][eE] _REG.regno = REG_hwerrcause; return REG;
[eE][xX][cC][aA][uU][sS][eE] _REG.regno = REG_excause; return REG;
[eE][mM][uU][cC][aA][uU][sS][eE] _REG.regno = REG_emucause; return REG;
[zZ] return Z;
[xX] return X;
[wW]32 yylval.value = M_W32; return MMOD;
[wW] return W;
[vV][iI][tT]_[mM][aA][xX] return VIT_MAX;
[vV] return V; /* Special: V is a statflag and a modifier. */
[uU][sS][pP] _REG.regno = REG_USP; return REG;
[tT][lL] return TL;
[tT][hH] return TH;
[tT][fF][uU] yylval.value = M_TFU; return MMOD;
[tT][eE][sS][tT][sS][eE][tT] return TESTSET;
[tT] yylval.value = M_T; return MMOD;
[sS] return S;
[sS][yY][sS][cC][fF][gG] _REG.regno = REG_SYSCFG; return REG;
[sS][tT][iI] return STI;
[sS][sS][yY][nN][cC] return SSYNC;
[sS][pP]"."[lL] _REG.regno = REG_SP; return HALF_REG;
[sS][pP]"."[hH] _REG.regno = REG_SP | F_REG_HIGH; return HALF_REG;
[sS][pP] _REG.regno = REG_SP; return REG;
[sS][iI][gG][nN][bB][iI][tT][sS] return SIGNBITS;
[sS][iI][gG][nN] return SIGN;
[sS][eE][qQ][sS][tT][aA][tT] _REG.regno = REG_SEQSTAT; return REG;
[sS][eE][aA][rR][cC][hH] return SEARCH;
[sS][hH][iI][fF][tT] return SHIFT;
[sS][cC][oO] return SCO;
[sS][aA][aA] return SAA;
[sS]2[rR][nN][dD] yylval.value = M_S2RND; return MMOD;
[rR][tT][xX] return RTX;
[rR][tT][sS] return RTS;
[rR][tT][nN] return RTN;
[rR][tT][iI] return RTI;
[rR][tT][eE] return RTE;
[rR][oO][tT] return ROT;
[rR][nN][dD]20 return RND20;
[rR][nN][dD]12 return RND12;
[rR][nN][dD][lL] return RNDL;
[rR][nN][dD][hH] return RNDH;
[rR][nN][dD] return RND;
[rR][0-7]"."[lLhHbB] return parse_halfreg(&yylval.reg, T_REG_R, yytext);
[rR][eE][tT][sS] _REG.regno = REG_RETS; return REG;
[rR][eE][tT][iI] _REG.regno = REG_RETI; return REG;
[rR][eE][tT][xX] _REG.regno = REG_RETX; return REG;
[rR][eE][tT][nN] _REG.regno = REG_RETN; return REG;
[rR][eE][tT][eE] _REG.regno = REG_RETE; return REG;
[eE][mM][uU][dD][aA][tT] _REG.regno = REG_EMUDAT; return REG;
[rR][aA][iI][sS][eE] return RAISE;
[rR][0-7] return parse_reg (&yylval.reg, T_REG_R, yytext);
[rR] return R;
[pP][rR][nN][tT] return PRNT;
[pP][cC] return PC;
[pP][aA][cC][kK] return PACK;
[pP][0-5]"."[lLhH] return parse_halfreg (&yylval.reg, T_REG_P, yytext);
[pP][0-5] return parse_reg (&yylval.reg, T_REG_P, yytext);
[oO][uU][tT][cC] return OUTC;
[oO][nN][eE][sS] return ONES;
[nN][oO][tT] return NOT;
[nN][oO][pP] return NOP;
[mM][nN][oO][pP] return MNOP;
[nN][sS] return NS;
[mM][iI][nN] return MIN;
[mM][aA][xX] return MAX;
[mM][0-3]"."[lLhH] return parse_halfreg (&yylval.reg, T_REG_M, yytext);
[mM][0-3] return parse_reg (&yylval.reg, T_REG_M, yytext);
[mM] return M;
[lL][tT] return LT;
[lL][sS][hH][iI][fF][tT] return LSHIFT;
[lL][sS][eE][tT][uU][pP] return LSETUP;
[lL][oO][oO][pP] return LOOP;
[lL][oO][oO][pP]_[bB][eE][gG][iI][nN] return LOOP_BEGIN;
[lL][oO][oO][pP]_[eE][nN][dD] return LOOP_END;
[lL][eE] return LE;
[lL][cC]0 _REG.regno = REG_LC0; return REG;
[lL][tT]0 _REG.regno = REG_LT0; return REG;
[lL][bB]0 _REG.regno = REG_LB0; return REG;
[lL][cC]1 _REG.regno = REG_LC1; return REG;
[lL][tT]1 _REG.regno = REG_LT1; return REG;
[lL][bB]1 _REG.regno = REG_LB1; return REG;
[lL][0-3]"."[lLhH] return parse_halfreg (&yylval.reg, T_REG_L, yytext);
[lL][0-3] return parse_reg (&yylval.reg, T_REG_L, yytext);
[lL][oO] return LO;
[jJ][uU][mM][pP]"."[sS] { BEGIN 0; return JUMP_DOT_S;}
[jJ][uU][mM][pP]"."[lL] { BEGIN 0; return JUMP_DOT_L;}
[jJ][uU][mM][pP] { BEGIN 0; return JUMP;}
[jJ][uU][mM][pP]"."[xX] { BEGIN 0; return JUMP_DOT_L; }
[iI][uU] yylval.value = M_IU; return MMOD;
[iI][sS][sS]2 yylval.value = M_ISS2; return MMOD;
[iI][sS] yylval.value = M_IS; return MMOD;
[iI][hH] yylval.value = M_IH; return MMOD;
[iI][fF] return IF;
[iI][0-3]"."[lLhH] return parse_halfreg (&yylval.reg, T_REG_I, yytext);
[iI][0-3] return parse_reg (&yylval.reg, T_REG_I, yytext);
[hH][lL][tT] return HLT;
[hH][iI] return HI;
[gG][tT] return GT;
[gG][eE] return GE;
[fF][uU] yylval.value = M_FU; return MMOD;
[fF][pP] _REG.regno = REG_FP; return REG;
[fF][pP]"."[lL] _REG.regno = REG_FP; return HALF_REG;
[fF][pP]"."[hH] _REG.regno = REG_FP | F_REG_HIGH; return HALF_REG;
[eE][xX][tT][rR][aA][cC][tT] return EXTRACT;
[eE][xX][pP][aA][dD][jJ] return EXPADJ;
[eE][xX][cC][pP][tT] return EXCPT;
[eE][mM][uU][eE][xX][cC][pP][tT] return EMUEXCPT;
[dD][iI][vV][sS] return DIVS;
[dD][iI][vV][qQ] return DIVQ;
[dD][iI][sS][aA][lL][gG][nN][eE][xX][cC][pP][tT] return DISALGNEXCPT;
[dD][eE][pP][oO][sS][iI][tT] return DEPOSIT;
[dD][bB][gG][hH][aA][lL][tT] return DBGHALT;
[dD][bB][gG][cC][mM][pP][lL][xX] return DBGCMPLX;
[dD][bB][gG][aA][lL] return DBGAL;
[dD][bB][gG][aA][hH] return DBGAH;
[dD][bB][gG][aA] return DBGA;
[dD][bB][gG] return DBG;
[cC][yY][cC][lL][eE][sS]2 { _REG.regno = REG_CYCLES2; return REG; }
[cC][yY][cC][lL][eE][sS] { _REG.regno = REG_CYCLES; return REG; }
[cC][sS][yY][nN][cC] return CSYNC;
[cC][oO] return CO;
[cC][lL][iI] return CLI;
[cC][cC] _REG.regno = REG_CC; return CCREG;
[cC][aA][lL][lL]"."[xX] { BEGIN 0; return CALL;}
[cC][aA][lL][lL] { BEGIN 0; return CALL;}
[bB][yY][tT][eE][uU][nN][pP][aA][cC][kK] return BYTEUNPACK;
[bB][yY][tT][eE][pP][aA][cC][kK] return BYTEPACK;
[bB][yY][tT][eE][oO][pP]16[mM] return BYTEOP16M;
[bB][yY][tT][eE][oO][pP]16[pP] return BYTEOP16P;
[bB][yY][tT][eE][oO][pP]3[pP] return BYTEOP3P;
[bB][yY][tT][eE][oO][pP]2[mM] return BYTEOP2M;
[bB][yY][tT][eE][oO][pP]2[pP] return BYTEOP2P;
[bB][yY][tT][eE][oO][pP]1[pP] return BYTEOP1P;
[bB][yY] return BY;
[bB][xX][oO][rR][sS][hH][iI][fF][tT] return BXORSHIFT;
[bB][xX][oO][rR] return BXOR;
[bB][rR][eE][vV] return BREV;
[bB][pP] return BP;
[bB][iI][tT][tT][sS][tT] return BITTST;
[bB][iI][tT][tT][gG][lL] return BITTGL;
[bB][iI][tT][sS][eE][tT] return BITSET;
[bB][iI][tT][mM][uU][xX] return BITMUX;
[bB][iI][tT][cC][lL][rR] return BITCLR;
[bB][0-3]"."[lLhH] return parse_halfreg (&yylval.reg, T_REG_B, yytext);
[bB][0-3] return parse_reg (&yylval.reg, T_REG_B, yytext);
[bB] return B;
[aA][zZ] _REG.regno = S_AZ; return STATUS_REG;
[aA][nN] _REG.regno = S_AN; return STATUS_REG;
[aA][qQ] _REG.regno = S_AQ; return STATUS_REG;
[aA][cC]0 _REG.regno = S_AC0; return STATUS_REG;
[aA][cC]1 _REG.regno = S_AC1; return STATUS_REG;
[aA][vV]0 _REG.regno = S_AV0; return STATUS_REG;
[aA][vV]0[sS] _REG.regno = S_AV0S; return STATUS_REG;
[aA][vV]1 _REG.regno = S_AV1; return STATUS_REG;
[aA][vV]1[sS] _REG.regno = S_AV1S; return STATUS_REG;
[vV] _REG.regno = S_V; return STATUS_REG;
[vV][sS] _REG.regno = S_VS; return STATUS_REG;
[aA][sS][tT][aA][tT] _REG.regno = REG_ASTAT; return REG;
[aA][sS][hH][iI][fF][tT] return ASHIFT;
[aA][sS][lL] return ASL;
[aA][sS][rR] return ASR;
[aA][lL][iI][gG][nN]8 return ALIGN8;
[aA][lL][iI][gG][nN]16 return ALIGN16;
[aA][lL][iI][gG][nN]24 return ALIGN24;
[aA]1"."[lL] return A_ONE_DOT_L;
[aA]0"."[lL] return A_ZERO_DOT_L;
[aA]1"."[hH] return A_ONE_DOT_H;
[aA]0"."[hH] return A_ZERO_DOT_H;
[aA][bB][sS] return ABS;
abort return ABORT;
[aA]1"."[xX] _REG.regno = REG_A1x; return REG;
[aA]1"."[wW] _REG.regno = REG_A1w; return REG;
[aA]1 _REG.regno = REG_A1; return REG_A_DOUBLE_ONE;
[aA]0"."[xX] _REG.regno = REG_A0x; return REG;
[aA]0"."[wW] _REG.regno = REG_A0w; return REG;
[aA]0 _REG.regno = REG_A0; return REG_A_DOUBLE_ZERO;
[Gg][Oo][Tt] return GOT;
[Pp][Ll][Tt][Pp][Cc] return PLTPC;
"~" return TILDA;
"|=" return _BAR_ASSIGN;
"|" return BAR;
"^=" return _CARET_ASSIGN;
"^" return CARET;
"]" return RBRACK;
"[" return LBRACK;
">>>=" return _GREATER_GREATER_GREATER_THAN_ASSIGN;
">>=" return _GREATER_GREATER_ASSIGN;
">>>" return _GREATER_GREATER_GREATER;
">>" return GREATER_GREATER;
"==" return _ASSIGN_ASSIGN;
"=" return ASSIGN;
"<=" return _LESS_THAN_ASSIGN;
"<<=" return _LESS_LESS_ASSIGN;
"<<" return LESS_LESS;
"<" return LESS_THAN;
"(" return LPAREN;
")" return RPAREN;
":" return COLON;
"/" return SLASH;
"-=" return _MINUS_ASSIGN;
"+|+" return _PLUS_BAR_PLUS;
"-|+" return _MINUS_BAR_PLUS;
"+|-" return _PLUS_BAR_MINUS;
"-|-" return _MINUS_BAR_MINUS;
"--" return _MINUS_MINUS;
"-" return MINUS;
"," return COMMA;
"+=" return _PLUS_ASSIGN;
"++" return _PLUS_PLUS;
"+" return PLUS;
"*=" return _STAR_ASSIGN;
"*" return STAR;
"&=" return _AMPERSAND_ASSIGN;
"&" return AMPERSAND;
"%" return PERCENT;
"!" return BANG;
";" return SEMICOLON;
"=!" return _ASSIGN_BANG;
"||" return DOUBLE_BAR;
"@" return AT;
<KEYWORD>[pP][rR][eE][fF][eE][tT][cC][hH] return PREFETCH;
<KEYWORD>[uU][nN][lL][iI][nN][kK] return UNLINK;
<KEYWORD>[lL][iI][nN][kK] return LINK;
<KEYWORD>[iI][dD][lL][eE] return IDLE;
<KEYWORD>[iI][fF][lL][uU][sS][hH] return IFLUSH;
<KEYWORD>[fF][lL][uU][sS][hH][iI][nN][vV] return FLUSHINV;
<KEYWORD>[fF][lL][uU][sS][hH] return FLUSH;
([0-9]+)|(0[xX][0-9a-fA-F]+)|([bhfodBHOFD]#[0-9a-fA-F]+)|(0.[0-9]+) {
yylval.value = parse_int (&yytext);
return NUMBER;
}
[A-Za-z_$.][A-Za-z0-9_$.]* {
yylval.symbol = symbol_find_or_make (yytext);
symbol_mark_used (yylval.symbol);
return SYMBOL;
}
[0-9][bfBF] {
char *name;
char *ref = strdup (yytext);
if (ref[1] == 'b' || ref[1] == 'B')
{
name = fb_label_name ((int) (ref[0] - '0'), 0);
yylval.symbol = symbol_find (name);
if ((yylval.symbol != NULL)
&& (S_IS_DEFINED (yylval.symbol)))
return SYMBOL;
as_bad ("backward reference to unknown label %d:",
(int) (ref[0] - '0'));
}
else if (ref[1] == 'f' || ref[1] == 'F')
{
/* Forward reference. Expect symbol to be undefined or
unknown. undefined: seen it before. unknown: never seen
it before.
Construct a local label name, then an undefined symbol.
Just return it as never seen before. */
name = fb_label_name ((int) (ref[0] - '0'), 1);
yylval.symbol = symbol_find_or_make (name);
/* We have no need to check symbol properties. */
return SYMBOL;
}
}
[ \t\n] ;
"/*".*"*/" ;
. return yytext[0];
%%
static long parse_int (char **end)
{
char fmt = '\0';
int not_done = 1;
int shiftvalue = 0;
char * char_bag;
long value = 0;
char c;
char *arg = *end;
while (*arg && *arg == ' ')
arg++;
switch (*arg)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
fmt = 'd';
break;
case '0': /* Accept different formated integers hex octal and binary. */
{
c = *++arg;
arg++;
if (c == 'x' || c == 'X') /* Hex input. */
fmt = 'h';
else if (c == 'b' || c == 'B')
fmt = 'b';
else if (c == '.')
fmt = 'f';
else
{ /* Octal. */
arg--;
fmt = 'o';
}
break;
}
case 'd':
case 'D':
case 'h':
case 'H':
case 'o':
case 'O':
case 'b':
case 'B':
case 'f':
case 'F':
{
fmt = *arg++;
if (*arg == '#')
arg++;
}
}
switch (fmt)
{
case 'h':
case 'H':
shiftvalue = 4;
char_bag = "0123456789ABCDEFabcdef";
break;
case 'o':
case 'O':
shiftvalue = 3;
char_bag = "01234567";
break;
case 'b':
case 'B':
shiftvalue = 1;
char_bag = "01";
break;
/* The assembler allows for fractional constants to be created
by either the 0.xxxx or the f#xxxx format
i.e. 0.5 would result in 0x4000
note .5 would result in the identifier .5.
The assembler converts to fractional format 1.15 by the simple rule:
value = (short) (finput * (1 << 15)). */
case 'f':
case 'F':
{
float fval = 0.0;
float pos = 10.0;
while (1)
{
int c;
c = *arg++;
if (c >= '0' && c <= '9')
{
float digit = (c - '0') / pos;
fval = fval + digit;
pos = pos * 10.0;
}
else
{
*--arg = c;
value = (short) (fval * (1 << 15));
break;
}
}
*end = arg+1;
return value;
}
case 'd':
case 'D':
default:
{
while (1)
{
int c;
c = *arg++;
if (c >= '0' && c <= '9')
value = (value * 10) + (c - '0');
else
{
/* Constants that are suffixed with k|K are multiplied by 1024
This suffix is only allowed on decimal constants. */
if (c == 'k' || c == 'K')
value *= 1024;
else
*--arg = c;
break;
}
}
*end = arg+1;
return value;
}
}
while (not_done)
{
char c;
c = *arg++;
if (c == 0 || !index (char_bag, c))
{
not_done = 0;
*--arg = c;
}
else
{
if (c >= 'a' && c <= 'z')
c = c - ('a' - '9') + 1;
else if (c >= 'A' && c <= 'Z')
c = c - ('A' - '9') + 1;
c -= '0';
value = (value << shiftvalue) + c;
}
}
*end = arg+1;
return value;
}
static int parse_reg (Register *r, int cl, char *rt)
{
r->regno = cl | (rt[1] - '0');
return REG;
}
static int parse_halfreg (Register *r, int cl, char *rt)
{
r->regno = cl | (rt[1] - '0');
switch (rt[3])
{
case 'b':
case 'B':
return BYTE_DREG;
case 'l':
case 'L':
break;
case 'h':
case 'H':
r->regno |= F_REG_HIGH;
break;
}
return HALF_REG;
}
/* Our start state is KEYWORD as we have
command keywords such as PREFETCH. */
void
set_start_state (void)
{
BEGIN KEYWORD;
}
#ifndef yywrap
int
yywrap ()
{
return 1;
}
#endif

4360
gas/config/bfin-parse.y Normal file

File diff suppressed because it is too large Load Diff

1951
gas/config/tc-bfin.c Normal file

File diff suppressed because it is too large Load Diff

75
gas/config/tc-bfin.h Normal file
View File

@ -0,0 +1,75 @@
/* tc-bfin.h - header file for tc-bfin.c
Copyright 2005
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS 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 2, or (at your option)
any later version.
GAS 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 GAS; see the file COPYING. If not, write to the Free
Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
#define TC_BFIN 1
#define TC_ADI_BFIN 1
#define TARGET_BYTES_BIG_ENDIAN 0
#define TARGET_ARCH bfd_arch_bfin
/*
* Define the target format macro here. The value for this should be
* "elf32-bfin", not "elf32-little-bfin". Since the BFD source file
* elf32-bfin.c defines TARGET_LITTLE_NAME to be "elf32-little-bfin",
* we must use this value, until this is corrected and BFD is rebuilt. */
#ifdef OBJ_ELF
#define TARGET_FORMAT "elf32-bfin"
#endif
#define LISTING_HEADER "BFIN GAS "
#define WORKING_DOT_WORD
extern void bfin_start_line_hook PARAMS ((void));
extern bfd_boolean bfin_start_label PARAMS ((char *));
#define md_start_line_hook() bfin_start_line_hook()
#define md_number_to_chars number_to_chars_littleendian
#define md_convert_frag(b,s,f) as_fatal ("bfin convert_frag\n");
/* Allow for [, ], etc. */
#define LEX_BR 6
#define TC_EOL_IN_INSN(PTR) (bfin_eol_in_insn(PTR) ? 1 : 0)
extern bfd_boolean bfin_eol_in_insn PARAMS ((char *));
/* The instruction is permitted to contain an = character. */
#define TC_EQUAL_IN_INSN(C, NAME) (bfin_name_is_register (NAME) ? 1 : 0)
extern bfd_boolean bfin_name_is_register PARAMS ((char *));
#define NOP_OPCODE 0x0000
#define LOCAL_LABELS_FB 1
#define DOUBLESLASH_LINE_COMMENTS
#define TC_START_LABEL(ch ,ptr) (ch == ':' && bfin_start_label (ptr))
#define tc_fix_adjustable(FIX) bfin_fix_adjustable (FIX)
extern bfd_boolean bfin_fix_adjustable PARAMS ((struct fix *));
#define TC_FORCE_RELOCATION(FIX) bfin_force_relocation (FIX)
extern int bfin_force_relocation PARAMS ((struct fix *));
/* Call md_pcrel_from_section(), not md_pcrel_from(). */
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
/* end of tc-bfin.h */

13
gas/configure vendored
View File

@ -4641,6 +4641,19 @@ _ACEOF
# Any other special object files needed ?
case ${cpu_type} in
bfin)
echo ${extra_objects} | grep -s "bfin-parse.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects bfin-parse.o"
fi
echo ${extra_objects} | grep -s "bfin-lex.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects bfin-lex.o"
fi
;;
fr30 | ip2k | iq2000 | m32r | openrisc)
using_cgen=yes
;;

View File

@ -274,6 +274,19 @@ changequote([,])dnl
# Any other special object files needed ?
case ${cpu_type} in
bfin)
echo ${extra_objects} | grep -s "bfin-parse.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects bfin-parse.o"
fi
echo ${extra_objects} | grep -s "bfin-lex.o"
if test $? -ne 0 ; then
extra_objects="$extra_objects bfin-lex.o"
fi
;;
fr30 | ip2k | iq2000 | m32r | openrisc)
using_cgen=yes
;;

View File

@ -33,6 +33,7 @@ case ${cpu} in
am33_2.0) cpu_type=mn10300 endian=little ;;
arm*be|arm*b) cpu_type=arm endian=big ;;
arm*) cpu_type=arm endian=little ;;
bfin*) cpu_type=bfin endian=little ;;
c4x*) cpu_type=tic4x ;;
crisv32) cpu_type=cris arch=crisv32 ;;
crx*) cpu_type=crx endian=little ;;
@ -117,7 +118,9 @@ case ${generic_target} in
arm-*-pe | thumb-*-pe) fmt=coff em=pe ;;
arm-*-riscix*) fmt=aout em=riscix ;;
avr-*-*) fmt=elf ;;
avr-*-*) fmt=elf bfd_gas=yes ;;
bfin-*-*) fmt=elf bfd_gas=yes ;;
bfin-*elf) fmt=elf ;;
cris-*-linux-* | crisv32-*-linux-*)
fmt=multi em=linux ;;

View File

@ -27,6 +27,7 @@ CPU_DOCS = \
c-alpha.texi \
c-arc.texi \
c-arm.texi \
c-bfin.texi \
c-d10v.texi \
c-cris.texi \
c-h8300.texi \

View File

@ -1,4 +1,4 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# Makefile.in generated by automake 1.9.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@ -218,6 +218,7 @@ CPU_DOCS = \
c-alpha.texi \
c-arc.texi \
c-arm.texi \
c-bfin.texi \
c-d10v.texi \
c-cris.texi \
c-h8300.texi \
@ -346,7 +347,7 @@ as.html: as.texinfo
$(DVIPS) -o $@ $<
uninstall-info-am:
@$(PRE_UNINSTALL)
$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
@ -362,7 +363,7 @@ uninstall-info-am:
relfile=`echo "$$file" | sed 's|^.*/||'`; \
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
(if 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]"; \
echo " 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

View File

@ -29,6 +29,7 @@
@set ALPHA
@set ARC
@set ARM
@set BFIN
@set CRIS
@set D10V
@set D30V

View File

@ -6083,6 +6083,9 @@ subject, see the hardware manufacturer's manual.
@ifset ARM
* ARM-Dependent:: ARM Dependent Features
@end ifset
@ifset BFIN
* BFIN-Dependent:: BFIN Dependent Features
@end ifset
@ifset CRIS
* CRIS-Dependent:: CRIS Dependent Features
@end ifset
@ -6193,6 +6196,10 @@ subject, see the hardware manufacturer's manual.
@include c-arm.texi
@end ifset
@ifset BFIN
@include c-bfin.texi
@end ifset
@ifset CRIS
@include c-cris.texi
@end ifset

187
gas/doc/c-bfin.texi Normal file
View File

@ -0,0 +1,187 @@
@c Copyright 2005
@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 BFIN-Dependent
@chapter Blackfin Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter Blackfin Dependent Features
@end ifclear
@cindex Blackfin support
@menu
* BFIN Syntax:: BFIN Syntax
* BFIN Directives:: BFIN Directives
@end menu
@node BFIN Syntax
@section Syntax
@cindex BFIN syntax
@cindex syntax, BFIN
@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 "||".
@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
@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 desginated 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 subracted 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 BFIN Directives
@section Directives
@cindex BFIN directives
@cindex directives, BFIN
The following directives are provided for compatibility with the VDSP assembler.
@table @code
@item .byte2
Initializes a four byte data object.
@item .byte4
Initializes a two byte data object.
@item .db
TBD
@item .dd
TBD
@item .dw
TBD
@item .var
Define and initialize a 32 bit data object.
@end table