Merge tag 'binutils-2_24' into ng/2.24/nacl-hacks
diff --git a/ChangeLog b/ChangeLog
index a93e13e..e41638b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-23  Alan Modra  <amodra@gmail.com>
+
+	* config.sub, config.guess: Import from upstream.
+
 2013-09-20  Alan Modra  <amodra@gmail.com>
 
 	* libtool.m4 (_LT_ENABLE_LOCK <ld -m flags>): Remove non-canonical
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 11a0586..2c4719c 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,21 @@
+2013-12-02  Tristan Gingold  <gingold@adacore.com>
+
+	* configure.in: Bump version to 2.24
+	* Makefile.am (RELEASE): Set.
+	* configure, Makefile.in: Regenerate.
+
+2013-11-26  Tristan Gingold  <gingold@adacore.com>
+
+	* configure.in: Bump version to 2.23.92
+	* configure: Regenerate.
+
+2013-11-22  Cory Fields  <cory@coryfields.com>
+
+	* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
+	* libcoff.h: Regenerate.
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Only use a real
+	timestamp if --insert-timestamp was used.
+
 2013-11-19  Roland McGrath  <mcgrathr@google.com>
 
 	* elf-nacl.c (nacl_modify_segment_map): Calculate SIZEOF_HEADERS
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
index 6f0e477..c645563 100644
--- a/bfd/Makefile.am
+++ b/bfd/Makefile.am
@@ -21,7 +21,7 @@
 ACLOCAL_AMFLAGS = -I . -I .. -I ../config
 
 # Uncomment the following line when doing a release.
-# RELEASE=y
+RELEASE=y
 
 INCDIR = $(srcdir)/../include
 CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 8a38a76..78d2d2c 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -339,7 +339,7 @@
 ACLOCAL_AMFLAGS = -I . -I .. -I ../config
 
 # Uncomment the following line when doing a release.
-# RELEASE=y
+RELEASE = y
 INCDIR = $(srcdir)/../include
 CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
 SUBDIRS = doc po
diff --git a/bfd/configure b/bfd/configure
index 9731579..90cd397 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for bfd 2.23.91.
+# Generated by GNU Autoconf 2.64 for bfd 2.24.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
@@ -556,8 +556,8 @@
 # Identity of this package.
 PACKAGE_NAME='bfd'
 PACKAGE_TARNAME='bfd'
-PACKAGE_VERSION='2.23.91'
-PACKAGE_STRING='bfd 2.23.91'
+PACKAGE_VERSION='2.24'
+PACKAGE_STRING='bfd 2.24'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1349,7 +1349,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bfd 2.23.91 to adapt to many kinds of systems.
+\`configure' configures bfd 2.24 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1420,7 +1420,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bfd 2.23.91:";;
+     short | recursive ) echo "Configuration of bfd 2.24:";;
    esac
   cat <<\_ACEOF
 
@@ -1541,7 +1541,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bfd configure 2.23.91
+bfd configure 2.24
 generated by GNU Autoconf 2.64
 
 Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2183,7 +2183,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bfd $as_me 2.23.91, which was
+It was created by bfd $as_me 2.24, which was
 generated by GNU Autoconf 2.64.  Invocation command line was
 
   $ $0 $@
@@ -3991,7 +3991,7 @@
 
 # Define the identity of the package.
  PACKAGE='bfd'
- VERSION='2.23.91'
+ VERSION='2.24'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -16481,7 +16481,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bfd $as_me 2.23.91, which was
+This file was extended by bfd $as_me 2.24, which was
 generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16545,7 +16545,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-bfd config.status 2.23.91
+bfd config.status 2.24
 configured by $0, generated by GNU Autoconf 2.64,
   with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
diff --git a/bfd/configure.in b/bfd/configure.in
index 11e9e0c..0e88d78 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -18,7 +18,7 @@
 dnl
 
 AC_PREREQ(2.59)
-AC_INIT([bfd], [2.23.91])
+AC_INIT([bfd], [2.24])
 AC_CONFIG_SRCDIR([libbfd.c])
 
 AC_CANONICAL_TARGET
diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info
new file mode 100644
index 0000000..0dc93b6
--- /dev/null
+++ b/bfd/doc/bfd.info
Binary files differ
diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h
index 6efbc52..49b5f10 100644
--- a/bfd/libcoff-in.h
+++ b/bfd/libcoff-in.h
@@ -1,7 +1,5 @@
 /* BFD COFF object file private structure.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright 1990-2013 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -118,6 +116,7 @@
   int dll;
   int has_reloc_section;
   int dont_strip_reloc;
+  bfd_boolean insert_timestamp;
   bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
   flagword real_flags;
 } pe_data_type;
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index 6270bab..19b6d9c 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -3,9 +3,7 @@
    Run "make headers" in your build bfd/ to regenerate.  */
 
 /* BFD COFF object file private structure.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright 1990-2013 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -122,6 +120,7 @@
   int dll;
   int has_reloc_section;
   int dont_strip_reloc;
+  bfd_boolean insert_timestamp;
   bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
   flagword real_flags;
 } pe_data_type;
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index d0f7a96..287e4a2 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -1,6 +1,5 @@
 /* Support for the generic parts of PE/PEI; the common executable parts.
-   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
+   Copyright 1995-2013 Free Software Foundation, Inc.
    Written by Cygnus Solutions.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -793,7 +792,10 @@
   H_PUT_16 (abfd, filehdr_in->f_magic, filehdr_out->f_magic);
   H_PUT_16 (abfd, filehdr_in->f_nscns, filehdr_out->f_nscns);
 
-  H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
+  /* Only use a real timestamp if the option was chosen.  */
+  if ((pe_data (abfd)->insert_timestamp))
+    H_PUT_32 (abfd, time(0), filehdr_out->f_timdat);
+
   PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
 		      filehdr_out->f_symptr);
   H_PUT_32 (abfd, filehdr_in->f_nsyms, filehdr_out->f_nsyms);
diff --git a/bfd/po/da.gmo b/bfd/po/da.gmo
new file mode 100644
index 0000000..deb4565
--- /dev/null
+++ b/bfd/po/da.gmo
Binary files differ
diff --git a/bfd/po/es.gmo b/bfd/po/es.gmo
new file mode 100644
index 0000000..d31fab0
--- /dev/null
+++ b/bfd/po/es.gmo
Binary files differ
diff --git a/bfd/po/fi.gmo b/bfd/po/fi.gmo
new file mode 100644
index 0000000..25fe52e
--- /dev/null
+++ b/bfd/po/fi.gmo
Binary files differ
diff --git a/bfd/po/fr.gmo b/bfd/po/fr.gmo
new file mode 100644
index 0000000..176e230
--- /dev/null
+++ b/bfd/po/fr.gmo
Binary files differ
diff --git a/bfd/po/id.gmo b/bfd/po/id.gmo
new file mode 100644
index 0000000..46b2f30
--- /dev/null
+++ b/bfd/po/id.gmo
Binary files differ
diff --git a/bfd/po/ja.gmo b/bfd/po/ja.gmo
new file mode 100644
index 0000000..321f833
--- /dev/null
+++ b/bfd/po/ja.gmo
Binary files differ
diff --git a/bfd/po/ro.gmo b/bfd/po/ro.gmo
new file mode 100644
index 0000000..8621928
--- /dev/null
+++ b/bfd/po/ro.gmo
Binary files differ
diff --git a/bfd/po/ru.gmo b/bfd/po/ru.gmo
new file mode 100644
index 0000000..9dd8b47
--- /dev/null
+++ b/bfd/po/ru.gmo
Binary files differ
diff --git a/bfd/po/rw.gmo b/bfd/po/rw.gmo
new file mode 100644
index 0000000..49d9e2f
--- /dev/null
+++ b/bfd/po/rw.gmo
Binary files differ
diff --git a/bfd/po/sv.gmo b/bfd/po/sv.gmo
new file mode 100644
index 0000000..e746ec0
--- /dev/null
+++ b/bfd/po/sv.gmo
Binary files differ
diff --git a/bfd/po/tr.gmo b/bfd/po/tr.gmo
new file mode 100644
index 0000000..74c0ea8
--- /dev/null
+++ b/bfd/po/tr.gmo
Binary files differ
diff --git a/bfd/po/uk.gmo b/bfd/po/uk.gmo
new file mode 100644
index 0000000..9c85a90
--- /dev/null
+++ b/bfd/po/uk.gmo
Binary files differ
diff --git a/bfd/po/vi.gmo b/bfd/po/vi.gmo
new file mode 100644
index 0000000..0687a74
--- /dev/null
+++ b/bfd/po/vi.gmo
Binary files differ
diff --git a/bfd/po/zh_CN.gmo b/bfd/po/zh_CN.gmo
new file mode 100644
index 0000000..6599886
--- /dev/null
+++ b/bfd/po/zh_CN.gmo
Binary files differ
diff --git a/bfd/version.h b/bfd/version.h
index b1ccffa..dec6798 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,4 +1,4 @@
-#define BFD_VERSION_DATE 20131120
+#define BFD_VERSION_DATE 20131202
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 1b851ab..f9014b5 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-22  Cory Fields  <cory@coryfields.com>
+
+	* windres.c (define_resource): Use zero for timestamp, making
+	output deterministic. time.h include is no longer needed.
+	* resres.c (res_append_resource): Likewise.
+
 2013-11-15  Alan Modra  <amodra@gmail.com>
 
 	Apply changes from mainline to 2.24
diff --git a/binutils/doc/binutils.info b/binutils/doc/binutils.info
new file mode 100644
index 0000000..f7d0976
--- /dev/null
+++ b/binutils/doc/binutils.info
Binary files differ
diff --git a/binutils/po/bg.gmo b/binutils/po/bg.gmo
new file mode 100644
index 0000000..6a59d30
--- /dev/null
+++ b/binutils/po/bg.gmo
Binary files differ
diff --git a/binutils/po/da.gmo b/binutils/po/da.gmo
new file mode 100644
index 0000000..d870bd7
--- /dev/null
+++ b/binutils/po/da.gmo
Binary files differ
diff --git a/binutils/po/es.gmo b/binutils/po/es.gmo
new file mode 100644
index 0000000..65268df
--- /dev/null
+++ b/binutils/po/es.gmo
Binary files differ
diff --git a/binutils/po/fi.gmo b/binutils/po/fi.gmo
new file mode 100644
index 0000000..1c9fd7e
--- /dev/null
+++ b/binutils/po/fi.gmo
Binary files differ
diff --git a/binutils/po/fr.gmo b/binutils/po/fr.gmo
new file mode 100644
index 0000000..b5e57e9
--- /dev/null
+++ b/binutils/po/fr.gmo
Binary files differ
diff --git a/binutils/po/hr.gmo b/binutils/po/hr.gmo
new file mode 100644
index 0000000..14c292d
--- /dev/null
+++ b/binutils/po/hr.gmo
Binary files differ
diff --git a/binutils/po/id.gmo b/binutils/po/id.gmo
new file mode 100644
index 0000000..5cbebab
--- /dev/null
+++ b/binutils/po/id.gmo
Binary files differ
diff --git a/binutils/po/it.gmo b/binutils/po/it.gmo
new file mode 100644
index 0000000..6e01870
--- /dev/null
+++ b/binutils/po/it.gmo
Binary files differ
diff --git a/binutils/po/ja.gmo b/binutils/po/ja.gmo
new file mode 100644
index 0000000..0f4f1e2
--- /dev/null
+++ b/binutils/po/ja.gmo
Binary files differ
diff --git a/binutils/po/ro.gmo b/binutils/po/ro.gmo
new file mode 100644
index 0000000..f1c1e0e
--- /dev/null
+++ b/binutils/po/ro.gmo
Binary files differ
diff --git a/binutils/po/ru.gmo b/binutils/po/ru.gmo
new file mode 100644
index 0000000..d1e39e8
--- /dev/null
+++ b/binutils/po/ru.gmo
Binary files differ
diff --git a/binutils/po/rw.gmo b/binutils/po/rw.gmo
new file mode 100644
index 0000000..6d5d7b9
--- /dev/null
+++ b/binutils/po/rw.gmo
Binary files differ
diff --git a/binutils/po/sk.gmo b/binutils/po/sk.gmo
new file mode 100644
index 0000000..df4639a
--- /dev/null
+++ b/binutils/po/sk.gmo
Binary files differ
diff --git a/binutils/po/sv.gmo b/binutils/po/sv.gmo
new file mode 100644
index 0000000..0efae30
--- /dev/null
+++ b/binutils/po/sv.gmo
Binary files differ
diff --git a/binutils/po/tr.gmo b/binutils/po/tr.gmo
new file mode 100644
index 0000000..7190446
--- /dev/null
+++ b/binutils/po/tr.gmo
Binary files differ
diff --git a/binutils/po/uk.gmo b/binutils/po/uk.gmo
new file mode 100644
index 0000000..5b91ef9
--- /dev/null
+++ b/binutils/po/uk.gmo
Binary files differ
diff --git a/binutils/po/vi.gmo b/binutils/po/vi.gmo
new file mode 100644
index 0000000..dee68e3
--- /dev/null
+++ b/binutils/po/vi.gmo
Binary files differ
diff --git a/binutils/po/zh_CN.gmo b/binutils/po/zh_CN.gmo
new file mode 100644
index 0000000..b4448b1
--- /dev/null
+++ b/binutils/po/zh_CN.gmo
Binary files differ
diff --git a/binutils/po/zh_TW.gmo b/binutils/po/zh_TW.gmo
new file mode 100644
index 0000000..b02a71e
--- /dev/null
+++ b/binutils/po/zh_TW.gmo
Binary files differ
diff --git a/binutils/resres.c b/binutils/resres.c
index ff95cb5..84f956f 100644
--- a/binutils/resres.c
+++ b/binutils/resres.c
@@ -1,6 +1,5 @@
 /* resres.c: read_res_file and write_res_file implementation for windres.
-   Copyright 1998, 1999, 2001, 2002, 2005, 2007, 2008, 2011
-   Free Software Foundation, Inc.
+   Copyright 1998-2013 Free Software Foundation, Inc.
    Written by Anders Norlander <anorland@hem2.passagen.se>.
    Rewritten by Kai Tietz, Onevision.
 
@@ -32,7 +31,6 @@
 #include "windres.h"
 
 #include <assert.h>
-#include <time.h>
 
 static rc_uint_type write_res_directory (windres_bfd *, rc_uint_type,
 				    	 const rc_res_directory *, const rc_res_id *,
@@ -660,17 +658,13 @@
 
       if (*res_dirs == NULL)
 	{
-	  static unsigned long timeval;
-
-	  /* Use the same timestamp for every resource created in a
-	     single run.  */
-	  if (timeval == 0)
-	    timeval = time (NULL);
-
 	  *res_dirs = ((rc_res_directory *)
 			res_alloc (sizeof (rc_res_directory)));
+
 	  (*res_dirs)->characteristics = 0;
-	  (*res_dirs)->time = timeval;
+	  /* Using a real timestamp only serves to create non-deterministic
+	     results.  Use zero instead.  */
+	  (*res_dirs)->time = 0;
 	  (*res_dirs)->major = 0;
 	  (*res_dirs)->minor = 0;
 	  (*res_dirs)->entries = NULL;
diff --git a/binutils/windres.c b/binutils/windres.c
index 7de73ef..64afb3a 100644
--- a/binutils/windres.c
+++ b/binutils/windres.c
@@ -1,6 +1,5 @@
 /* windres.c -- a program to manipulate Windows resources
-   Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
-   2009, 2011, 2012 Free Software Foundation, Inc.
+   Copyright 1997-2013 Free Software Foundation, Inc.
    Written by Ian Lance Taylor, Cygnus Support.
    Rewritten by Kai Tietz, Onevision.
 
@@ -37,7 +36,6 @@
 
 #include "sysdep.h"
 #include <assert.h>
-#include <time.h>
 #include "bfd.h"
 #include "getopt.h"
 #include "bucomm.h"
@@ -339,17 +337,12 @@
 
       if (*resources == NULL)
 	{
-	  static unsigned int timeval;
-
-	  /* Use the same timestamp for every resource created in a
-             single run.  */
-	  if (timeval == 0)
-	    timeval = time (NULL);
-
 	  *resources = ((rc_res_directory *)
 			res_alloc (sizeof (rc_res_directory)));
 	  (*resources)->characteristics = 0;
-	  (*resources)->time = timeval;
+	  /* Using a real timestamp only serves to create non-deterministic
+	     results.  Use zero instead.  */
+	  (*resources)->time = 0;
 	  (*resources)->major = 0;
 	  (*resources)->minor = 0;
 	  (*resources)->entries = NULL;
diff --git a/config.guess b/config.guess
index 2055429..b79252d 100755
--- a/config.guess
+++ b/config.guess
@@ -2,7 +2,7 @@
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2013-04-24'
+timestamp='2013-06-10'
 
 # 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
@@ -132,6 +132,27 @@
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -853,21 +874,21 @@
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
     aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     aarch64_be:Linux:*:*)
 	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -880,67 +901,54 @@
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	else
 	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
 		| grep -q __ARM_PCS_VFP
 	    then
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
 	    else
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
 	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:Linux:*:*)
-	LIBC=gnu
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-	#else
-	#include <features.h>
-	#ifdef __UCLIBC__
-	LIBC=uclibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -959,59 +967,63 @@
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
     or1k:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     or32:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-gnu
+	echo sparc-unknown-linux-${LIBC}
 	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+	echo hppa64-unknown-linux-${LIBC}
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
 	exit ;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
+	echo powerpc64-unknown-linux-${LIBC}
 	exit ;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
     sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	LIBC=gnu
-	test -r /lib/libc.so && od -An -S13 /lib/libc.so | grep -q __uClibc_main && LIBC=uclibc
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1244,19 +1256,21 @@
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    i386)
-		eval $set_cc_for_build
-		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		      grep IS_64BIT_ARCH >/dev/null
-		  then
-		      UNAME_PROCESSOR="x86_64"
-		  fi
-		fi ;;
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		case $UNAME_PROCESSOR in
+		    i386) UNAME_PROCESSOR=x86_64 ;;
+		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		esac
+	    fi
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
diff --git a/config.sub b/config.sub
index 8b612ab..61cb4bc 100755
--- a/config.sub
+++ b/config.sub
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2013-04-24'
+timestamp='2013-10-01'
 
 # 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
@@ -257,7 +257,7 @@
 	| avr | avr32 \
 	| be32 | be64 \
 	| bfin \
-	| c4x | clipper \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
 	| epiphany \
 	| fido | fr30 | frv \
@@ -265,6 +265,7 @@
 	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
@@ -324,7 +325,7 @@
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -372,7 +373,7 @@
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -381,6 +382,7 @@
 	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
@@ -794,7 +796,7 @@
 		os=-mingw64
 		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -830,7 +832,7 @@
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
 	msys)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-msys
 		;;
 	mvs)
@@ -1546,6 +1548,9 @@
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
+	c8051-*)
+		os=-elf
+		;;
 	hexagon-*)
 		os=-elf
 		;;
diff --git a/etc/configure.info b/etc/configure.info
new file mode 100644
index 0000000..cee206a
--- /dev/null
+++ b/etc/configure.info
Binary files differ
diff --git a/etc/standards.info b/etc/standards.info
new file mode 100644
index 0000000..2d39178
--- /dev/null
+++ b/etc/standards.info
Binary files differ
diff --git a/gas/bfin-lex.c b/gas/bfin-lex.c
new file mode 100644
index 0000000..936775b
--- /dev/null
+++ b/gas/bfin-lex.c
@@ -0,0 +1,3560 @@
+
+#line 3 "bfin-lex.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	yy_size_t yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	yyleng = (yy_size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 239
+#define YY_END_OF_BUFFER 240
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[571] =
+    {   0,
+        0,    0,    0,    0,    0,    0,  240,  238,  236,  236,
+      221,  234,  220,  219,  201,  202,  217,  215,  212,  211,
+      204,  233,  233,  203,  222,  200,  196,  238,  225,  234,
+      147,  234,  234,  234,  234,  234,  234,  234,  234,  234,
+      234,  234,  234,  234,   54,  234,  234,  234,   12,   10,
+      190,  189,  188,  186,  184,  234,  234,  234,  234,  234,
+       70,   19,   18,    8,    7,  234,  218,  216,  214,  213,
+        0,  210,  205,    0,    0,    0,  233,  235,    0,  199,
+      197,  223,  195,  194,  179,  176,  234,  234,  234,  149,
+      152,  234,  234,  148,    0,  146,  234,  139,  234,  234,
+
+      135,  234,  125,  234,  123,  234,  234,  234,  234,  234,
+      234,  234,  103,  102,  101,  234,  100,   99,  234,  234,
+       97,  234,   95,   94,   93,   91,  234,   85,  234,  234,
+       77,   86,  234,   71,   69,  234,  234,  234,  234,   65,
+      234,  234,  234,   59,  234,   56,  234,  234,   53,  234,
+      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
+      234,   25,  234,  234,  234,  234,  234,   15,   14,  234,
+      234,  159,  234,  234,  187,  185,  224,  234,  234,   95,
+      234,  234,  234,  206,  208,  207,  209,    0,    0,  233,
+      233,  198,  192,  193,  234,  234,  234,  172,  153,  154,
+
+      234,  234,  163,  164,  234,  155,  157,  233,  234,  234,
+      234,  234,  234,  234,  124,  234,  234,  119,  234,  234,
+      234,  234,  234,  234,  234,  234,  234,  180,   98,  234,
+      234,  234,  234,  234,  234,   80,   83,   78,   81,  234,
+      234,  234,   79,   82,  234,   67,   66,  234,   63,   62,
+      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
+       44,   39,   38,   37,   36,   35,   34,  234,   32,   31,
+      234,  234,  234,  234,  234,  234,  234,   21,  234,  234,
+       16,   13,  234,  234,    9,  234,  234,  234,  234,  234,
+      234,  237,  191,  171,  169,  178,  177,  170,  168,  175,
+
+      174,  234,  234,  234,  234,  234,  156,  158,  145,  234,
+      234,  234,  234,  138,  137,  234,  127,  234,  234,  118,
+      234,  234,  234,  234,  111,  110,  234,  234,  234,  234,
+      234,  234,  234,  105,  104,  234,  234,  234,   96,  234,
+       92,   89,   84,   74,  234,  234,   68,   64,  234,   61,
+       60,   58,   57,  234,   55,   45,  234,   50,   47,   49,
+       46,   48,  234,  234,   43,   42,  234,  234,  234,  234,
+      234,  234,   27,   24,   23,  234,  234,  234,  234,  234,
+      234,  229,  234,  228,  234,  234,  173,  234,  234,  234,
+      161,  234,  234,  234,  234,  234,  234,  234,  234,  234,
+
+      234,  122,  234,  117,  116,  234,  234,  234,  234,  234,
+      234,  234,  234,  108,  234,  234,  234,  234,  234,  234,
+      234,  234,  234,  234,    2,  183,   52,   41,   40,  234,
+       33,  234,  234,  234,   30,  234,   22,  234,  234,  234,
+      234,  232,  234,  234,  234,  234,  234,  234,  165,  162,
+      144,  143,  142,  141,  140,  234,  234,  234,  234,  126,
+      121,  234,  234,  234,  234,  234,   51,  234,  234,  107,
+      234,  234,  234,  234,  234,   88,   87,   90,  234,  234,
+       73,   72,  234,   29,  234,  234,  234,   20,  234,  234,
+      151,  234,  230,  234,  227,  234,  166,  167,  234,  234,
+
+      234,  234,  234,  234,  120,  234,  114,  113,  234,  234,
+      234,    5,  106,  234,  181,  234,  234,  234,  234,  160,
+       28,  234,  234,   17,   11,  234,  234,  150,  234,  234,
+      134,  133,  132,  129,  234,  115,  234,    6,  109,  234,
+      234,    3,  234,   76,    1,   26,  231,  226,  136,  130,
+      131,  234,  234,  234,  234,  234,  128,  234,  234,    4,
+       75,  234,  234,  112,  234,  234,  234,  234,  182,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    4,    1,    5,    6,    7,    8,    1,    9,
+       10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
+       20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
+       30,   31,    1,   32,   33,   34,   35,   36,   37,   38,
+       39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+       49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
+       59,    1,   60,   61,   62,    1,   33,   34,   35,   36,
+
+       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
+       47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
+       57,   58,    1,   63,    1,   64,    1,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
+        6,    6,    6,    6,    6
+    } ;
+
+static yyconst flex_int32_t yy_meta[65] =
+    {   0,
+        1,    1,    2,    1,    1,    3,    1,    1,    1,    1,
+        1,    1,    1,    1,    4,    1,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    1,    1,    1,    1,
+        1,    1,    6,    7,    6,    6,    6,    7,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    4,    3,    3,    1,    1,
+        1,    3,    1,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[577] =
+    {   0,
+        0,    0,   27,   28,   32,   40,  666,  667,  667,  667,
+      667,    0,  667,  635,  667,  667,  634,   67,  667,   56,
+      652,   67,   72,  667,  667,   44,   63,  631,  667,  114,
+      168,   67,   99,   33,   89,   70,  111,  157,  608,  209,
+      161,   48,   98,  245,  279,  313,  101,  609,   84,  639,
+      667,  667,  628,   90,  667,  152,   77,  616,  606,   75,
+      235,    0,  175,    0,    0,    0,  667,  667,  667,  667,
+      115,  667,  667,  142,  644,    0,   74,  667,    0,  624,
+      667,  667,  667,  131,  638,  637,  120,  152,  610,    0,
+        0,  190,  165,    0,    0,  635,  597,    0,  611,  600,
+
+      594,  601,    0,  603,    0,  586,  607,  602,  592,   96,
+      586,  169,  623,  591,    0,  584,    0,    0,  583,  597,
+      618,  588,    0,    0,  580,    0,  585,  614,  172,  174,
+        0,  581,  161,  205,  612,  570,  579,  577,  151,    0,
+      576,  585,  569,  605,  584,    0,  566,  571,  601,  574,
+      562,  577,  560,  236,  561,  577,  562,  187,  556,  566,
+      567,  590,  547,  562,  551,  550,  547,    0,    0,  551,
+      546,    0,  562,  577,  667,  667,  667,  542,  550,  549,
+      546,  195,  547,  667,  667,  667,  667,  579,  148,    0,
+        0,  667,  667,  559,  193,  195,  538,    0,  525,    0,
+
+      547,  544,    0,    0,  551,  532,  531,    0,  230,  234,
+      527,  530,  542,  534,    0,  531,  532,  271,  528,  541,
+      196,  222,  242,  540,  522,  244,  536,  552,    0,  519,
+      265,  531,  548,  518,  270,    0,    0,    0,    0,  517,
+      512,  522,    0,    0,  273,    0,    0,  514,    0,    0,
+      525,  509,  524,  275,  515,  509,  504,  284,  504,  293,
+      318,    0,    0,    0,    0,    0,    0,  508,    0,    0,
+      503,  501,  501,  512,  503,  283,  502,    0,  512,  494,
+        0,    0,  483,  497,    0,  492,  505,  488,  497,  501,
+      497,  526,  667,    0,    0,    0,    0,    0,    0,    0,
+
+        0,  484,  500,  488,  495,  480,    0,    0,    0,  487,
+      477,  492,  232,    0,  477,  294,  512,  491,  488,  289,
+      479,  490,  471,  477,    0,    0,  487,  486,  462,  464,
+      464,  479,  481,    0,    0,  477,  488,  461,    0,  448,
+        0,  494,    0,  446,  454,  468,    0,    0,  468,    0,
+        0,    0,    0,  469,    0,    0,  466,    0,    0,    0,
+        0,    0,  483,  484,    0,    0,  455,  463,  463,  445,
+      459,  443,  460,    0,    0,  458,  454,  440,  445,  441,
+      448,  425,  435,    0,  448,  438,    0,  436,  338,  430,
+        0,  431,  424,  427,  434,  425,  436,  427,  441,  427,
+
+      416,    0,  420,    0,    0,  422,  425,  427,  428,  413,
+      413,  429,  412,    0,  420,  426,  423,  414,  423,  407,
+      315,  177,  408,  403,    0,    0,    0,    0,    0,  407,
+        0,  413,  419,  400,    0,  409,    0,  410,  411,  414,
+      389,  404,  404,  391,  399,  393,  417,  418,    0,    0,
+        0,    0,    0,    0,    0,  397,  302,  402,  388,    0,
+      416,  390,  381,  380,  385,  379,    0,  381,  391,    0,
+      375,  375,  404,  391,  386,    0,    0,    0,  385,  375,
+        0,    0,  384,    0,  367,  381,  365,    0,  364,  359,
+        0,  368,    0,  378,    0,  355,    0,    0,  373,   86,
+
+      362,  361,  365,  374,    0,  350,    0,    0,  368,  367,
+      351,    0,    0,  356,    0,  335,  330,  339,  341,    0,
+        0,  324,  324,    0,    0,  320,  333,    0,  320,  246,
+        0,    0,    0,    0,  334,    0,  312,    0,    0,  305,
+      309,    0,  314,    0,    0,    0,    0,    0,    0,    0,
+        0,  309,  310,  304,  303,  292,    0,  287,  261,    0,
+        0,  255,  241,    0,  254,  214,  186,  185,    0,  667,
+      378,  382,  389,  179,  392,  395
+    } ;
+
+static yyconst flex_int16_t yy_def[577] =
+    {   0,
+      570,    1,    1,    1,    1,    1,  570,  570,  570,  570,
+      570,  571,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  572,  572,  570,  570,  570,  570,  570,  570,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      570,  570,  570,  570,  570,  571,   38,   40,   44,  571,
+      571,   46,  571,  571,  571,  571,  570,  570,  570,  570,
+      570,  570,  570,  570,  573,  574,   23,  570,  575,  570,
+      570,  570,  570,  570,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  576,  571,  571,  571,  571,  571,
+
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  570,  570,  570,  571,  571,  571,
+      571,  571,  571,  570,  570,  570,  570,  573,  573,  574,
+      575,  570,  570,  570,  571,  571,  571,  571,  571,  571,
+
+      571,  571,  571,  571,  571,  571,  571,  576,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  573,  570,  571,  571,  571,  571,  571,  571,  571,
+
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,    0,
+      570,  570,  570,  570,  570,  570
+    } ;
+
+static yyconst flex_int16_t yy_nxt[732] =
+    {   0,
+        8,    9,   10,   11,    8,   12,   13,   14,   15,   16,
+       17,   18,   19,   20,   12,   21,   22,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   24,   25,   26,   27,
+       28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
+       38,   39,   12,   40,   41,   42,   43,   44,   12,   45,
+       46,   47,   48,   49,   50,   12,   12,   12,   51,   52,
+       53,   12,   54,   55,   56,   56,   82,   57,   57,   72,
+       58,   58,   80,   81,   59,   59,   61,  111,   69,   60,
+       60,   76,   62,   63,   61,   73,  570,   64,  112,   65,
+       62,   63,   83,   95,  139,   64,   70,   65,  140,  102,
+
+       78,  103,   95,   95,   78,   78,  115,  570,  530,   78,
+      104,  570,  179,  105,  180,   95,  116,  106,   74,  176,
+      183,  117,   79,  107,  171,  170,  184,  570,  185,   71,
+       85,   86,  108,  531,  172,  109,  113,  166,  167,  110,
+      168,  114,  141,  142,  169,  173,  220,   87,   88,  221,
+      143,  118,  177,  186,  119,  187,   95,   89,  189,   90,
+      193,  194,   91,  292,   92,  120,  197,   93,  199,  200,
+      198,   94,   95,  121,  121,  121,  121,  135,  135,  135,
+      135,  206,  207,  190,   96,   96,   96,   96,  236,  237,
+      238,  239,  122,  136,  123,  178,  124,  241,  249,  113,
+
+      242,  137,  250,  223,  114,  569,  138,  125,   97,  126,
+      479,  166,  167,  480,  168,   98,  224,   99,  169,  271,
+      225,  243,  244,  100,  101,  128,  128,  128,  128,  202,
+      568,  290,  294,  203,  298,  272,  295,  567,  299,  204,
+      257,  205,  129,  130,  325,  131,  326,  296,  297,  300,
+      301,  135,  135,  135,  135,  132,  327,  328,  329,  133,
+      134,  144,  144,  144,  144,  144,  144,  136,  310,  309,
+      395,  566,  263,  309,  330,  137,  264,  145,  311,  146,
+      138,  265,  396,  334,  312,  313,  266,  335,  147,  331,
+      550,  267,  565,  551,  148,  149,  149,  149,  149,  149,
+
+      149,  149,  149,  320,  339,  321,  564,  563,  339,  343,
+      322,  150,  347,  343,  352,  151,  347,  356,  352,  500,
+      501,  502,  374,  356,  152,  153,  375,  356,  404,  358,
+      154,  155,  405,  359,  562,  363,  364,  561,  360,  560,
+      398,  399,  559,  361,  558,  156,  400,  157,  362,  158,
+      159,  557,  160,  161,  556,  447,  448,  365,  476,  555,
+      162,  366,  449,  163,  164,  477,  554,  553,  552,  165,
+      478,  549,  548,  547,  546,  545,  544,  543,  542,  367,
+       66,   66,   66,   66,   66,   77,   77,  541,   77,  188,
+      540,  188,  188,  188,  188,  188,  191,  191,  191,  208,
+
+      208,  208,  539,  538,  537,  536,  535,  534,  533,  532,
+      529,  528,  527,  526,  525,  524,  523,  522,  521,  520,
+      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
+      509,  508,  507,  506,  505,  504,  503,  499,  498,  497,
+      496,  495,  494,  493,  492,  491,  490,  489,  488,  487,
+      486,  485,  484,  483,  482,  481,  475,  474,  473,  472,
+      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
+      461,  460,  459,  458,  457,  456,  455,  454,  453,  452,
+      451,  450,  446,  445,  444,  443,  420,  442,  441,  440,
+      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
+
+      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
+      409,  408,  407,  406,  403,  402,  401,  397,  394,  393,
+      392,  391,  390,  389,  388,  387,  189,  386,  385,  384,
+      383,  382,  381,  380,  379,  378,  377,  376,  373,  372,
+      371,  370,  369,  368,  357,  355,  354,  353,  351,  350,
+      349,  348,  346,  345,  344,  342,  341,  340,  338,  337,
+      336,  333,  332,  324,  323,  319,  318,  317,  316,  315,
+      314,  308,  307,  306,  305,  304,  303,  302,  293,  189,
+      291,  289,  288,  287,  286,  285,  284,  283,  282,  281,
+
+      280,  279,  278,  277,  276,  275,  274,  273,  270,  269,
+      268,  262,  261,  260,  259,  258,  257,  256,  255,  254,
+      253,  252,  251,  248,  247,  246,  245,  240,  235,  234,
+      233,  232,  231,  230,  229,  228,  227,  226,  222,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  210,  209,
+      201,  196,  195,  192,  189,  182,  181,  175,  174,  170,
+      127,   84,   75,   68,   67,  570,    7,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570
+    } ;
+
+static yyconst flex_int16_t yy_chk[732] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    3,    4,   27,    3,    4,   20,
+        3,    4,   26,   26,    3,    4,    5,   34,   18,    3,
+        4,   22,    5,    5,    6,   20,   23,    5,   34,    5,
+        6,    6,   27,   35,   42,    6,   18,    6,   42,   32,
+
+       22,   32,   43,   33,   22,   23,   36,   77,  500,   23,
+       32,   77,   57,   32,   57,   37,   36,   32,   20,   54,
+       60,   36,   22,   32,   49,   60,   71,   23,   71,   18,
+       30,   30,   33,  500,   49,   33,   35,   47,   47,   33,
+       47,   35,   43,   43,   47,   49,  110,   30,   30,  110,
+       43,   37,   54,   74,   37,   74,   56,   30,  189,   30,
+       84,   84,   30,  189,   30,   37,   87,   30,   88,   88,
+       87,   30,   31,   38,   38,   38,   38,   41,   41,   41,
+       41,   93,   93,  574,   31,   31,   31,   31,  129,  129,
+      130,  130,   38,   41,   38,   56,   38,  133,  139,   56,
+
+      133,   41,  139,  112,   56,  568,   41,   38,   31,   38,
+      422,   63,   63,  422,   63,   31,  112,   31,   63,  158,
+      112,  134,  134,   31,   31,   40,   40,   40,   40,   92,
+      567,  182,  195,   92,  196,  158,  195,  566,  196,   92,
+      182,   92,   40,   40,  221,   40,  221,  195,  195,  196,
+      196,   61,   61,   61,   61,   40,  222,  222,  222,   40,
+       40,   44,   44,   44,   44,   44,   44,   61,  210,  209,
+      313,  565,  154,  209,  223,   61,  154,   44,  210,   44,
+       61,  154,  313,  226,  210,  210,  154,  226,   44,  223,
+      530,  154,  563,  530,   44,   45,   45,   45,   45,   45,
+
+       45,   45,   45,  218,  231,  218,  562,  559,  231,  235,
+      218,   45,  245,  235,  254,   45,  245,  258,  254,  457,
+      457,  457,  276,  258,   45,   45,  276,  258,  320,  260,
+       45,   46,  320,  260,  558,  261,  261,  556,  260,  555,
+      316,  316,  554,  260,  553,   46,  316,   46,  260,   46,
+       46,  552,   46,   46,  543,  389,  389,  261,  421,  541,
+       46,  261,  389,   46,   46,  421,  540,  537,  535,   46,
+      421,  529,  527,  526,  523,  522,  519,  518,  517,  261,
+      571,  571,  571,  571,  571,  572,  572,  516,  572,  573,
+      514,  573,  573,  573,  573,  573,  575,  575,  575,  576,
+
+      576,  576,  511,  510,  509,  506,  504,  503,  502,  501,
+      499,  496,  494,  492,  490,  489,  487,  486,  485,  483,
+      480,  479,  475,  474,  473,  472,  471,  469,  468,  466,
+      465,  464,  463,  462,  461,  459,  458,  456,  448,  447,
+      446,  445,  444,  443,  442,  441,  440,  439,  438,  436,
+      434,  433,  432,  430,  424,  423,  420,  419,  418,  417,
+      416,  415,  413,  412,  411,  410,  409,  408,  407,  406,
+      403,  401,  400,  399,  398,  397,  396,  395,  394,  393,
+      392,  390,  388,  386,  385,  383,  382,  381,  380,  379,
+      378,  377,  376,  373,  372,  371,  370,  369,  368,  367,
+
+      364,  363,  357,  354,  349,  346,  345,  344,  342,  340,
+      338,  337,  336,  333,  332,  331,  330,  329,  328,  327,
+      324,  323,  322,  321,  319,  318,  317,  315,  312,  311,
+      310,  306,  305,  304,  303,  302,  292,  291,  290,  289,
+      288,  287,  286,  284,  283,  280,  279,  277,  275,  274,
+      273,  272,  271,  268,  259,  257,  256,  255,  253,  252,
+      251,  248,  242,  241,  240,  234,  233,  232,  230,  228,
+      227,  225,  224,  220,  219,  217,  216,  214,  213,  212,
+      211,  207,  206,  205,  202,  201,  199,  197,  194,  188,
+      183,  181,  180,  179,  178,  174,  173,  171,  170,  167,
+
+      166,  165,  164,  163,  162,  161,  160,  159,  157,  156,
+      155,  153,  152,  151,  150,  149,  148,  147,  145,  144,
+      143,  142,  141,  138,  137,  136,  135,  132,  128,  127,
+      125,  122,  121,  120,  119,  116,  114,  113,  111,  109,
+      108,  107,  106,  104,  102,  101,  100,   99,   97,   96,
+       89,   86,   85,   80,   75,   59,   58,   53,   50,   48,
+       39,   28,   21,   17,   14,    7,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
+      570
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "bfin-lex.l"
+/* bfin-lex.l  ADI Blackfin lexer
+   Copyright 2005, 2006, 2007, 2008, 2010
+   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 3, 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.  */
+#line 22 "bfin-lex.l"
+
+#include "as.h"
+#include "bfin-defs.h"
+#include "bfin-parse.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.  */
+
+
+#line 841 "bfin-lex.c"
+
+#define INITIAL 0
+#define KEYWORD 1
+#define FLAGS 2
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yyget_in (void );
+
+void yyset_in  (FILE * in_str  );
+
+FILE *yyget_out (void );
+
+void yyset_out  (FILE * out_str  );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		yy_size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+#line 44 "bfin-lex.l"
+
+#line 1027 "bfin-lex.c"
+
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			yyensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				yy_create_buffer(yyin,YY_BUF_SIZE );
+		}
+
+		yy_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of yytext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 571 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 667 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 45 "bfin-lex.l"
+_REG.regno = REG_sftreset;  return REG;
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 46 "bfin-lex.l"
+_REG.regno = REG_omode;     return REG;
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 47 "bfin-lex.l"
+_REG.regno = REG_idle_req;  return REG;
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 48 "bfin-lex.l"
+_REG.regno = REG_hwerrcause; return REG;
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 49 "bfin-lex.l"
+_REG.regno = REG_excause;   return REG;
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 50 "bfin-lex.l"
+_REG.regno = REG_emucause;  return REG;
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 51 "bfin-lex.l"
+return Z;
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 52 "bfin-lex.l"
+return X;
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 53 "bfin-lex.l"
+yylval.value = M_W32; return MMOD;
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 54 "bfin-lex.l"
+return W;
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 55 "bfin-lex.l"
+return VIT_MAX;
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 56 "bfin-lex.l"
+return V; /* Special: V is a statflag and a modifier.  */
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 57 "bfin-lex.l"
+_REG.regno = REG_USP; return REG;
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 58 "bfin-lex.l"
+return TL;
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 59 "bfin-lex.l"
+return TH;
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 60 "bfin-lex.l"
+yylval.value = M_TFU; return MMOD;
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 61 "bfin-lex.l"
+return TESTSET;
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 62 "bfin-lex.l"
+yylval.value = M_T; return MMOD;
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 63 "bfin-lex.l"
+return S;
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 64 "bfin-lex.l"
+_REG.regno = REG_SYSCFG; return REG;
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 65 "bfin-lex.l"
+return STI;
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 66 "bfin-lex.l"
+return SSYNC;
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 67 "bfin-lex.l"
+_REG.regno = REG_SP; _REG.flags = F_REG_LOW; return HALF_REG;
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 68 "bfin-lex.l"
+_REG.regno = REG_SP; _REG.flags = F_REG_HIGH; return HALF_REG;
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 69 "bfin-lex.l"
+_REG.regno = REG_SP; return REG;
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 70 "bfin-lex.l"
+return SIGNBITS;
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 71 "bfin-lex.l"
+return SIGN;
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 72 "bfin-lex.l"
+_REG.regno = REG_SEQSTAT; return REG;
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 73 "bfin-lex.l"
+return SEARCH;
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 74 "bfin-lex.l"
+return SHIFT;
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 75 "bfin-lex.l"
+return SCO;
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 77 "bfin-lex.l"
+return SAA;
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 78 "bfin-lex.l"
+yylval.value = M_S2RND; return MMOD;
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 79 "bfin-lex.l"
+return RTX;
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 80 "bfin-lex.l"
+return RTS;
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 81 "bfin-lex.l"
+return RTN;
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 82 "bfin-lex.l"
+return RTI;
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 83 "bfin-lex.l"
+return RTE;
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 84 "bfin-lex.l"
+return ROT;
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 85 "bfin-lex.l"
+return RND20;
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 86 "bfin-lex.l"
+return RND12;
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 87 "bfin-lex.l"
+return RNDL;
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 88 "bfin-lex.l"
+return RNDH;
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 89 "bfin-lex.l"
+return RND;
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 91 "bfin-lex.l"
+return parse_halfreg(&yylval.reg, T_REG_R, yytext);
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 93 "bfin-lex.l"
+_REG.regno = REG_RETS; return REG;
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 94 "bfin-lex.l"
+_REG.regno = REG_RETI; return REG;
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 95 "bfin-lex.l"
+_REG.regno = REG_RETX; return REG;
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 96 "bfin-lex.l"
+_REG.regno = REG_RETN; return REG;
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 97 "bfin-lex.l"
+_REG.regno = REG_RETE; return REG;
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 98 "bfin-lex.l"
+_REG.regno = REG_EMUDAT; return REG;
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 99 "bfin-lex.l"
+return RAISE;
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 101 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_R, yytext);
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 103 "bfin-lex.l"
+return R;
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 104 "bfin-lex.l"
+return PRNT;
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 105 "bfin-lex.l"
+return PC;
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 106 "bfin-lex.l"
+return PACK;
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 108 "bfin-lex.l"
+return parse_halfreg (&yylval.reg, T_REG_P, yytext);
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 109 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_P, yytext);
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 111 "bfin-lex.l"
+return OUTC;
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 112 "bfin-lex.l"
+return ONES;
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 114 "bfin-lex.l"
+return NOT;
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 115 "bfin-lex.l"
+return NOP;
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 116 "bfin-lex.l"
+return MNOP;
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 117 "bfin-lex.l"
+return NS;
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 120 "bfin-lex.l"
+return MIN;
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 121 "bfin-lex.l"
+return MAX;
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 123 "bfin-lex.l"
+return parse_halfreg (&yylval.reg, T_REG_M, yytext);
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 124 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_M, yytext);
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 126 "bfin-lex.l"
+return M;
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 127 "bfin-lex.l"
+return LT;
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 128 "bfin-lex.l"
+return LSHIFT;
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 129 "bfin-lex.l"
+return LSETUP;
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 130 "bfin-lex.l"
+return LOOP;
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 131 "bfin-lex.l"
+return LOOP_BEGIN;
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 132 "bfin-lex.l"
+return LOOP_END;
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 134 "bfin-lex.l"
+return LE;
+	YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 135 "bfin-lex.l"
+_REG.regno = REG_LC0; return REG;
+	YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 136 "bfin-lex.l"
+_REG.regno = REG_LT0; return REG;
+	YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 137 "bfin-lex.l"
+_REG.regno = REG_LB0; return REG;
+	YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 138 "bfin-lex.l"
+_REG.regno = REG_LC1; return REG;
+	YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 139 "bfin-lex.l"
+_REG.regno = REG_LT1; return REG;
+	YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 140 "bfin-lex.l"
+_REG.regno = REG_LB1; return REG;
+	YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 142 "bfin-lex.l"
+return parse_halfreg (&yylval.reg, T_REG_L, yytext);
+	YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 143 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_L, yytext);
+	YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 144 "bfin-lex.l"
+return LO;
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 145 "bfin-lex.l"
+{ BEGIN 0; return JUMP_DOT_S;}
+	YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 146 "bfin-lex.l"
+{ BEGIN 0; return JUMP_DOT_L;}
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 147 "bfin-lex.l"
+{ BEGIN 0; return JUMP;}
+	YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 148 "bfin-lex.l"
+{ BEGIN 0; return JUMP_DOT_L; }
+	YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 149 "bfin-lex.l"
+yylval.value = M_IU;   return MMOD;
+	YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 150 "bfin-lex.l"
+yylval.value = M_ISS2; return MMOD;
+	YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 151 "bfin-lex.l"
+yylval.value = M_IS;   return MMOD;
+	YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 152 "bfin-lex.l"
+yylval.value = M_IH;   return MMOD;
+	YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 153 "bfin-lex.l"
+return IF;
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 154 "bfin-lex.l"
+return parse_halfreg (&yylval.reg, T_REG_I, yytext);
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 155 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_I, yytext);
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 156 "bfin-lex.l"
+return HLT;
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 157 "bfin-lex.l"
+return HI;
+	YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 158 "bfin-lex.l"
+return GT;
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 159 "bfin-lex.l"
+return GE;
+	YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 160 "bfin-lex.l"
+yylval.value = M_FU; return MMOD;
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 161 "bfin-lex.l"
+_REG.regno = REG_FP; return REG;
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 162 "bfin-lex.l"
+_REG.regno = REG_FP; _REG.flags = F_REG_LOW; return HALF_REG;
+	YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 163 "bfin-lex.l"
+_REG.regno = REG_FP; _REG.flags = F_REG_HIGH; return HALF_REG;
+	YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 165 "bfin-lex.l"
+return EXTRACT;
+	YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 166 "bfin-lex.l"
+return EXPADJ;
+	YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 167 "bfin-lex.l"
+return EXCPT;
+	YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 168 "bfin-lex.l"
+return EMUEXCPT;
+	YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 169 "bfin-lex.l"
+return DIVS;
+	YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 170 "bfin-lex.l"
+return DIVQ;
+	YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 171 "bfin-lex.l"
+return DISALGNEXCPT;
+	YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 172 "bfin-lex.l"
+return DEPOSIT;
+	YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 173 "bfin-lex.l"
+return DBGHALT;
+	YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 174 "bfin-lex.l"
+return DBGCMPLX;
+	YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 175 "bfin-lex.l"
+return DBGAL;
+	YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 176 "bfin-lex.l"
+return DBGAH;
+	YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 177 "bfin-lex.l"
+return DBGA;
+	YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 178 "bfin-lex.l"
+return DBG;
+	YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 179 "bfin-lex.l"
+{ _REG.regno = REG_CYCLES2; return REG; }
+	YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 180 "bfin-lex.l"
+{ _REG.regno = REG_CYCLES; return REG; }
+	YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 181 "bfin-lex.l"
+return CSYNC;
+	YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 182 "bfin-lex.l"
+return CO;
+	YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 183 "bfin-lex.l"
+return CLI;
+	YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 185 "bfin-lex.l"
+_REG.regno = REG_CC; return CCREG;
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 186 "bfin-lex.l"
+{ BEGIN 0; return CALL;}
+	YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 187 "bfin-lex.l"
+{ BEGIN 0; return CALL;}
+	YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 188 "bfin-lex.l"
+return BYTEUNPACK;
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 189 "bfin-lex.l"
+return BYTEPACK;
+	YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 190 "bfin-lex.l"
+return BYTEOP16M;
+	YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 191 "bfin-lex.l"
+return BYTEOP16P;
+	YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 192 "bfin-lex.l"
+return BYTEOP3P;
+	YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 193 "bfin-lex.l"
+return BYTEOP2P;
+	YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 194 "bfin-lex.l"
+return BYTEOP1P;
+	YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 195 "bfin-lex.l"
+return BY;
+	YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 196 "bfin-lex.l"
+return BXORSHIFT;
+	YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 197 "bfin-lex.l"
+return BXOR;
+	YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 199 "bfin-lex.l"
+return BREV;
+	YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 200 "bfin-lex.l"
+return BP;
+	YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 201 "bfin-lex.l"
+return BITTST;
+	YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 202 "bfin-lex.l"
+return BITTGL;
+	YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 203 "bfin-lex.l"
+return BITSET;
+	YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 204 "bfin-lex.l"
+return BITMUX;
+	YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 205 "bfin-lex.l"
+return BITCLR;
+	YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 206 "bfin-lex.l"
+return parse_halfreg (&yylval.reg, T_REG_B, yytext);
+	YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 207 "bfin-lex.l"
+return parse_reg (&yylval.reg, T_REG_B, yytext);
+	YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 208 "bfin-lex.l"
+return B;
+	YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 209 "bfin-lex.l"
+_REG.regno = S_AZ;   return STATUS_REG;
+	YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 210 "bfin-lex.l"
+_REG.regno = S_AN;   return STATUS_REG;
+	YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 211 "bfin-lex.l"
+_REG.regno = S_AC0_COPY; return STATUS_REG;
+	YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 212 "bfin-lex.l"
+_REG.regno = S_V_COPY;   return STATUS_REG;
+	YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 213 "bfin-lex.l"
+_REG.regno = S_AQ;   return STATUS_REG;
+	YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 214 "bfin-lex.l"
+_REG.regno = S_AC0;  return STATUS_REG;
+	YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 215 "bfin-lex.l"
+_REG.regno = S_AC1;  return STATUS_REG;
+	YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 216 "bfin-lex.l"
+_REG.regno = S_AV0;  return STATUS_REG;
+	YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 217 "bfin-lex.l"
+_REG.regno = S_AV0S; return STATUS_REG;
+	YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 218 "bfin-lex.l"
+_REG.regno = S_AV1;  return STATUS_REG;
+	YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 219 "bfin-lex.l"
+_REG.regno = S_AV1S; return STATUS_REG;
+	YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 220 "bfin-lex.l"
+_REG.regno = S_VS;   return STATUS_REG;
+	YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 221 "bfin-lex.l"
+_REG.regno = S_RND_MOD; return STATUS_REG;
+	YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 224 "bfin-lex.l"
+_REG.regno = REG_ASTAT; return REG;
+	YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 225 "bfin-lex.l"
+return ASHIFT;
+	YY_BREAK
+case 163:
+YY_RULE_SETUP
+#line 226 "bfin-lex.l"
+return ASL;
+	YY_BREAK
+case 164:
+YY_RULE_SETUP
+#line 227 "bfin-lex.l"
+return ASR;
+	YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 228 "bfin-lex.l"
+return ALIGN8;
+	YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 229 "bfin-lex.l"
+return ALIGN16;
+	YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 230 "bfin-lex.l"
+return ALIGN24;
+	YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 231 "bfin-lex.l"
+return A_ONE_DOT_L;
+	YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 232 "bfin-lex.l"
+return A_ZERO_DOT_L;
+	YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 233 "bfin-lex.l"
+return A_ONE_DOT_H;
+	YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 234 "bfin-lex.l"
+return A_ZERO_DOT_H;
+	YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 235 "bfin-lex.l"
+return ABS;
+	YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 236 "bfin-lex.l"
+return ABORT;
+	YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 237 "bfin-lex.l"
+_REG.regno = REG_A1x; return REG;
+	YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 238 "bfin-lex.l"
+_REG.regno = REG_A1w; return REG;
+	YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 239 "bfin-lex.l"
+_REG.regno = REG_A1;  return REG_A_DOUBLE_ONE;
+	YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 240 "bfin-lex.l"
+_REG.regno = REG_A0x; return REG;
+	YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 241 "bfin-lex.l"
+_REG.regno = REG_A0w; return REG;
+	YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 242 "bfin-lex.l"
+_REG.regno = REG_A0;  return REG_A_DOUBLE_ZERO;
+	YY_BREAK
+case 180:
+YY_RULE_SETUP
+#line 243 "bfin-lex.l"
+return GOT;
+	YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 244 "bfin-lex.l"
+return GOT17M4;
+	YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 245 "bfin-lex.l"
+return FUNCDESC_GOT17M4;
+	YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 246 "bfin-lex.l"
+return PLTPC;
+	YY_BREAK
+case 184:
+YY_RULE_SETUP
+#line 249 "bfin-lex.l"
+return TILDA;
+	YY_BREAK
+case 185:
+YY_RULE_SETUP
+#line 250 "bfin-lex.l"
+return _BAR_ASSIGN;
+	YY_BREAK
+case 186:
+YY_RULE_SETUP
+#line 251 "bfin-lex.l"
+return BAR;
+	YY_BREAK
+case 187:
+YY_RULE_SETUP
+#line 252 "bfin-lex.l"
+return _CARET_ASSIGN;
+	YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 253 "bfin-lex.l"
+return CARET;
+	YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 254 "bfin-lex.l"
+return RBRACK;
+	YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 255 "bfin-lex.l"
+return LBRACK;
+	YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 256 "bfin-lex.l"
+return _GREATER_GREATER_GREATER_THAN_ASSIGN;
+	YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 257 "bfin-lex.l"
+return _GREATER_GREATER_ASSIGN;
+	YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 258 "bfin-lex.l"
+return _GREATER_GREATER_GREATER;
+	YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 259 "bfin-lex.l"
+return GREATER_GREATER;
+	YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 260 "bfin-lex.l"
+return _ASSIGN_ASSIGN;
+	YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 261 "bfin-lex.l"
+return ASSIGN;
+	YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 262 "bfin-lex.l"
+return _LESS_THAN_ASSIGN;
+	YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 263 "bfin-lex.l"
+return _LESS_LESS_ASSIGN;
+	YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 264 "bfin-lex.l"
+return LESS_LESS;
+	YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 265 "bfin-lex.l"
+return LESS_THAN;
+	YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 266 "bfin-lex.l"
+BEGIN(FLAGS); return LPAREN;
+	YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 267 "bfin-lex.l"
+BEGIN(INITIAL); return RPAREN;
+	YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 268 "bfin-lex.l"
+return COLON;
+	YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 269 "bfin-lex.l"
+return SLASH;
+	YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 270 "bfin-lex.l"
+return _MINUS_ASSIGN;
+	YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 271 "bfin-lex.l"
+return _PLUS_BAR_PLUS;
+	YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 272 "bfin-lex.l"
+return _MINUS_BAR_PLUS;
+	YY_BREAK
+case 208:
+YY_RULE_SETUP
+#line 273 "bfin-lex.l"
+return _PLUS_BAR_MINUS;
+	YY_BREAK
+case 209:
+YY_RULE_SETUP
+#line 274 "bfin-lex.l"
+return _MINUS_BAR_MINUS;
+	YY_BREAK
+case 210:
+YY_RULE_SETUP
+#line 275 "bfin-lex.l"
+return _MINUS_MINUS;
+	YY_BREAK
+case 211:
+YY_RULE_SETUP
+#line 276 "bfin-lex.l"
+return MINUS;
+	YY_BREAK
+case 212:
+YY_RULE_SETUP
+#line 277 "bfin-lex.l"
+return COMMA;
+	YY_BREAK
+case 213:
+YY_RULE_SETUP
+#line 278 "bfin-lex.l"
+return _PLUS_ASSIGN;
+	YY_BREAK
+case 214:
+YY_RULE_SETUP
+#line 279 "bfin-lex.l"
+return _PLUS_PLUS;
+	YY_BREAK
+case 215:
+YY_RULE_SETUP
+#line 280 "bfin-lex.l"
+return PLUS;
+	YY_BREAK
+case 216:
+YY_RULE_SETUP
+#line 281 "bfin-lex.l"
+return _STAR_ASSIGN;
+	YY_BREAK
+case 217:
+YY_RULE_SETUP
+#line 282 "bfin-lex.l"
+return STAR;
+	YY_BREAK
+case 218:
+YY_RULE_SETUP
+#line 283 "bfin-lex.l"
+return _AMPERSAND_ASSIGN;
+	YY_BREAK
+case 219:
+YY_RULE_SETUP
+#line 284 "bfin-lex.l"
+return AMPERSAND;
+	YY_BREAK
+case 220:
+YY_RULE_SETUP
+#line 285 "bfin-lex.l"
+return PERCENT;
+	YY_BREAK
+case 221:
+YY_RULE_SETUP
+#line 286 "bfin-lex.l"
+return BANG;
+	YY_BREAK
+case 222:
+YY_RULE_SETUP
+#line 287 "bfin-lex.l"
+return SEMICOLON;
+	YY_BREAK
+case 223:
+YY_RULE_SETUP
+#line 288 "bfin-lex.l"
+return _ASSIGN_BANG;
+	YY_BREAK
+case 224:
+YY_RULE_SETUP
+#line 289 "bfin-lex.l"
+return DOUBLE_BAR;
+	YY_BREAK
+case 225:
+YY_RULE_SETUP
+#line 290 "bfin-lex.l"
+return AT;
+	YY_BREAK
+case 226:
+YY_RULE_SETUP
+#line 291 "bfin-lex.l"
+return PREFETCH;
+	YY_BREAK
+case 227:
+YY_RULE_SETUP
+#line 292 "bfin-lex.l"
+return UNLINK;
+	YY_BREAK
+case 228:
+YY_RULE_SETUP
+#line 293 "bfin-lex.l"
+return LINK;
+	YY_BREAK
+case 229:
+YY_RULE_SETUP
+#line 294 "bfin-lex.l"
+return IDLE;
+	YY_BREAK
+case 230:
+YY_RULE_SETUP
+#line 295 "bfin-lex.l"
+return IFLUSH;
+	YY_BREAK
+case 231:
+YY_RULE_SETUP
+#line 296 "bfin-lex.l"
+return FLUSHINV;
+	YY_BREAK
+case 232:
+YY_RULE_SETUP
+#line 297 "bfin-lex.l"
+return FLUSH;
+	YY_BREAK
+case 233:
+YY_RULE_SETUP
+#line 298 "bfin-lex.l"
+{
+    yylval.value = parse_int (&yytext);
+    return NUMBER;
+  }
+	YY_BREAK
+case 234:
+YY_RULE_SETUP
+#line 302 "bfin-lex.l"
+{
+    yylval.symbol = symbol_find_or_make (yytext);
+    symbol_mark_used (yylval.symbol);
+    return SYMBOL;
+  }
+	YY_BREAK
+case 235:
+YY_RULE_SETUP
+#line 307 "bfin-lex.l"
+{
+    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;
+      }
+  }
+	YY_BREAK
+case 236:
+/* rule 236 can match eol */
+YY_RULE_SETUP
+#line 336 "bfin-lex.l"
+;
+	YY_BREAK
+case 237:
+YY_RULE_SETUP
+#line 337 "bfin-lex.l"
+;
+	YY_BREAK
+case 238:
+YY_RULE_SETUP
+#line 338 "bfin-lex.l"
+return yytext[0];
+	YY_BREAK
+case 239:
+YY_RULE_SETUP
+#line 339 "bfin-lex.l"
+ECHO;
+	YY_BREAK
+#line 2341 "bfin-lex.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(KEYWORD):
+case YY_STATE_EOF(FLAGS):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( yywrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			yy_size_t num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				yy_size_t new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart(yyin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 571 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 571 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 570);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up yytext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register yy_size_t number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart(yyin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap( ) )
+						return 0;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE );
+	}
+
+	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+	yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
+     */
+	yyensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	yy_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * 
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yyfree((void *) b->yy_ch_buf  );
+
+	yyfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	yy_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	yyensure_buffer_stack();
+
+	/* This block is copied from yy_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void yypop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	yy_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		yy_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+	yy_size_t num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+    
+	return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n, i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) yyalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = (yy_hold_char); \
+		(yy_c_buf_p) = yytext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int yyget_lineno  (void)
+{
+        
+    return yylineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yyget_in  (void)
+{
+        return yyin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yyget_out  (void)
+{
+        return yyout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+yy_size_t yyget_leng  (void)
+{
+        return yyleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yyget_text  (void)
+{
+        return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yyset_lineno (int  line_number )
+{
+    
+    yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str )
+{
+        yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str )
+{
+        yyout = out_str ;
+}
+
+int yyget_debug  (void)
+{
+        return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug )
+{
+        yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		yy_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		yypop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	yyfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 339 "bfin-lex.l"
+
+
+static long parse_int (char **end)
+{
+  char fmt = '\0';
+  int not_done = 1;
+  int shiftvalue = 0;
+  char * char_bag;
+  long value = 0;
+  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. */
+        {
+	  char 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)
+            {
+              char 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 || !strchr (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');
+  r->flags = F_REG_NONE;
+  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':
+	r->flags = F_REG_LOW;
+	break;
+
+      case 'h':
+      case 'H':
+	r->flags = 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
+
diff --git a/gas/bfin-parse.c b/gas/bfin-parse.c
new file mode 100644
index 0000000..d8ef387
--- /dev/null
+++ b/gas/bfin-parse.c
@@ -0,0 +1,7954 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     BYTEOP16P = 258,
+     BYTEOP16M = 259,
+     BYTEOP1P = 260,
+     BYTEOP2P = 261,
+     BYTEOP3P = 262,
+     BYTEUNPACK = 263,
+     BYTEPACK = 264,
+     PACK = 265,
+     SAA = 266,
+     ALIGN8 = 267,
+     ALIGN16 = 268,
+     ALIGN24 = 269,
+     VIT_MAX = 270,
+     EXTRACT = 271,
+     DEPOSIT = 272,
+     EXPADJ = 273,
+     SEARCH = 274,
+     ONES = 275,
+     SIGN = 276,
+     SIGNBITS = 277,
+     LINK = 278,
+     UNLINK = 279,
+     REG = 280,
+     PC = 281,
+     CCREG = 282,
+     BYTE_DREG = 283,
+     REG_A_DOUBLE_ZERO = 284,
+     REG_A_DOUBLE_ONE = 285,
+     A_ZERO_DOT_L = 286,
+     A_ZERO_DOT_H = 287,
+     A_ONE_DOT_L = 288,
+     A_ONE_DOT_H = 289,
+     HALF_REG = 290,
+     NOP = 291,
+     RTI = 292,
+     RTS = 293,
+     RTX = 294,
+     RTN = 295,
+     RTE = 296,
+     HLT = 297,
+     IDLE = 298,
+     STI = 299,
+     CLI = 300,
+     CSYNC = 301,
+     SSYNC = 302,
+     EMUEXCPT = 303,
+     RAISE = 304,
+     EXCPT = 305,
+     LSETUP = 306,
+     LOOP = 307,
+     LOOP_BEGIN = 308,
+     LOOP_END = 309,
+     DISALGNEXCPT = 310,
+     JUMP = 311,
+     JUMP_DOT_S = 312,
+     JUMP_DOT_L = 313,
+     CALL = 314,
+     ABORT = 315,
+     NOT = 316,
+     TILDA = 317,
+     BANG = 318,
+     AMPERSAND = 319,
+     BAR = 320,
+     PERCENT = 321,
+     CARET = 322,
+     BXOR = 323,
+     MINUS = 324,
+     PLUS = 325,
+     STAR = 326,
+     SLASH = 327,
+     NEG = 328,
+     MIN = 329,
+     MAX = 330,
+     ABS = 331,
+     DOUBLE_BAR = 332,
+     _PLUS_BAR_PLUS = 333,
+     _PLUS_BAR_MINUS = 334,
+     _MINUS_BAR_PLUS = 335,
+     _MINUS_BAR_MINUS = 336,
+     _MINUS_MINUS = 337,
+     _PLUS_PLUS = 338,
+     SHIFT = 339,
+     LSHIFT = 340,
+     ASHIFT = 341,
+     BXORSHIFT = 342,
+     _GREATER_GREATER_GREATER_THAN_ASSIGN = 343,
+     ROT = 344,
+     LESS_LESS = 345,
+     GREATER_GREATER = 346,
+     _GREATER_GREATER_GREATER = 347,
+     _LESS_LESS_ASSIGN = 348,
+     _GREATER_GREATER_ASSIGN = 349,
+     DIVS = 350,
+     DIVQ = 351,
+     ASSIGN = 352,
+     _STAR_ASSIGN = 353,
+     _BAR_ASSIGN = 354,
+     _CARET_ASSIGN = 355,
+     _AMPERSAND_ASSIGN = 356,
+     _MINUS_ASSIGN = 357,
+     _PLUS_ASSIGN = 358,
+     _ASSIGN_BANG = 359,
+     _LESS_THAN_ASSIGN = 360,
+     _ASSIGN_ASSIGN = 361,
+     GE = 362,
+     LT = 363,
+     LE = 364,
+     GT = 365,
+     LESS_THAN = 366,
+     FLUSHINV = 367,
+     FLUSH = 368,
+     IFLUSH = 369,
+     PREFETCH = 370,
+     PRNT = 371,
+     OUTC = 372,
+     WHATREG = 373,
+     TESTSET = 374,
+     ASL = 375,
+     ASR = 376,
+     B = 377,
+     W = 378,
+     NS = 379,
+     S = 380,
+     CO = 381,
+     SCO = 382,
+     TH = 383,
+     TL = 384,
+     BP = 385,
+     BREV = 386,
+     X = 387,
+     Z = 388,
+     M = 389,
+     MMOD = 390,
+     R = 391,
+     RND = 392,
+     RNDL = 393,
+     RNDH = 394,
+     RND12 = 395,
+     RND20 = 396,
+     V = 397,
+     LO = 398,
+     HI = 399,
+     BITTGL = 400,
+     BITCLR = 401,
+     BITSET = 402,
+     BITTST = 403,
+     BITMUX = 404,
+     DBGAL = 405,
+     DBGAH = 406,
+     DBGHALT = 407,
+     DBG = 408,
+     DBGA = 409,
+     DBGCMPLX = 410,
+     IF = 411,
+     COMMA = 412,
+     BY = 413,
+     COLON = 414,
+     SEMICOLON = 415,
+     RPAREN = 416,
+     LPAREN = 417,
+     LBRACK = 418,
+     RBRACK = 419,
+     STATUS_REG = 420,
+     MNOP = 421,
+     SYMBOL = 422,
+     NUMBER = 423,
+     GOT = 424,
+     GOT17M4 = 425,
+     FUNCDESC_GOT17M4 = 426,
+     AT = 427,
+     PLTPC = 428
+   };
+#endif
+/* Tokens.  */
+#define BYTEOP16P 258
+#define BYTEOP16M 259
+#define BYTEOP1P 260
+#define BYTEOP2P 261
+#define BYTEOP3P 262
+#define BYTEUNPACK 263
+#define BYTEPACK 264
+#define PACK 265
+#define SAA 266
+#define ALIGN8 267
+#define ALIGN16 268
+#define ALIGN24 269
+#define VIT_MAX 270
+#define EXTRACT 271
+#define DEPOSIT 272
+#define EXPADJ 273
+#define SEARCH 274
+#define ONES 275
+#define SIGN 276
+#define SIGNBITS 277
+#define LINK 278
+#define UNLINK 279
+#define REG 280
+#define PC 281
+#define CCREG 282
+#define BYTE_DREG 283
+#define REG_A_DOUBLE_ZERO 284
+#define REG_A_DOUBLE_ONE 285
+#define A_ZERO_DOT_L 286
+#define A_ZERO_DOT_H 287
+#define A_ONE_DOT_L 288
+#define A_ONE_DOT_H 289
+#define HALF_REG 290
+#define NOP 291
+#define RTI 292
+#define RTS 293
+#define RTX 294
+#define RTN 295
+#define RTE 296
+#define HLT 297
+#define IDLE 298
+#define STI 299
+#define CLI 300
+#define CSYNC 301
+#define SSYNC 302
+#define EMUEXCPT 303
+#define RAISE 304
+#define EXCPT 305
+#define LSETUP 306
+#define LOOP 307
+#define LOOP_BEGIN 308
+#define LOOP_END 309
+#define DISALGNEXCPT 310
+#define JUMP 311
+#define JUMP_DOT_S 312
+#define JUMP_DOT_L 313
+#define CALL 314
+#define ABORT 315
+#define NOT 316
+#define TILDA 317
+#define BANG 318
+#define AMPERSAND 319
+#define BAR 320
+#define PERCENT 321
+#define CARET 322
+#define BXOR 323
+#define MINUS 324
+#define PLUS 325
+#define STAR 326
+#define SLASH 327
+#define NEG 328
+#define MIN 329
+#define MAX 330
+#define ABS 331
+#define DOUBLE_BAR 332
+#define _PLUS_BAR_PLUS 333
+#define _PLUS_BAR_MINUS 334
+#define _MINUS_BAR_PLUS 335
+#define _MINUS_BAR_MINUS 336
+#define _MINUS_MINUS 337
+#define _PLUS_PLUS 338
+#define SHIFT 339
+#define LSHIFT 340
+#define ASHIFT 341
+#define BXORSHIFT 342
+#define _GREATER_GREATER_GREATER_THAN_ASSIGN 343
+#define ROT 344
+#define LESS_LESS 345
+#define GREATER_GREATER 346
+#define _GREATER_GREATER_GREATER 347
+#define _LESS_LESS_ASSIGN 348
+#define _GREATER_GREATER_ASSIGN 349
+#define DIVS 350
+#define DIVQ 351
+#define ASSIGN 352
+#define _STAR_ASSIGN 353
+#define _BAR_ASSIGN 354
+#define _CARET_ASSIGN 355
+#define _AMPERSAND_ASSIGN 356
+#define _MINUS_ASSIGN 357
+#define _PLUS_ASSIGN 358
+#define _ASSIGN_BANG 359
+#define _LESS_THAN_ASSIGN 360
+#define _ASSIGN_ASSIGN 361
+#define GE 362
+#define LT 363
+#define LE 364
+#define GT 365
+#define LESS_THAN 366
+#define FLUSHINV 367
+#define FLUSH 368
+#define IFLUSH 369
+#define PREFETCH 370
+#define PRNT 371
+#define OUTC 372
+#define WHATREG 373
+#define TESTSET 374
+#define ASL 375
+#define ASR 376
+#define B 377
+#define W 378
+#define NS 379
+#define S 380
+#define CO 381
+#define SCO 382
+#define TH 383
+#define TL 384
+#define BP 385
+#define BREV 386
+#define X 387
+#define Z 388
+#define M 389
+#define MMOD 390
+#define R 391
+#define RND 392
+#define RNDL 393
+#define RNDH 394
+#define RND12 395
+#define RND20 396
+#define V 397
+#define LO 398
+#define HI 399
+#define BITTGL 400
+#define BITCLR 401
+#define BITSET 402
+#define BITTST 403
+#define BITMUX 404
+#define DBGAL 405
+#define DBGAH 406
+#define DBGHALT 407
+#define DBG 408
+#define DBGA 409
+#define DBGCMPLX 410
+#define IF 411
+#define COMMA 412
+#define BY 413
+#define COLON 414
+#define SEMICOLON 415
+#define RPAREN 416
+#define LPAREN 417
+#define LBRACK 418
+#define RBRACK 419
+#define STATUS_REG 420
+#define MNOP 421
+#define SYMBOL 422
+#define NUMBER 423
+#define GOT 424
+#define GOT17M4 425
+#define FUNCDESC_GOT17M4 426
+#define AT 427
+#define PLTPC 428
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 21 "bfin-parse.y"
+
+
+#include "as.h"
+#include <obstack.h>
+
+#include "bfin-aux.h"  /* Opcode generating auxiliaries.  */
+#include "libbfd.h"
+#include "elf/common.h"
+#include "elf/bfin.h"
+
+#define DSP32ALU(aopcde, HL, dst1, dst0, src0, src1, s, x, aop) \
+	bfin_gen_dsp32alu (HL, aopcde, aop, s, x, dst0, dst1, src0, src1)
+
+#define DSP32MAC(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
+	bfin_gen_dsp32mac (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
+	                   dst, src0, src1, w0)
+
+#define DSP32MULT(op1, MM, mmod, w1, P, h01, h11, h00, h10, dst, op0, src0, src1, w0) \
+	bfin_gen_dsp32mult (op1, MM, mmod, w1, P, h01, h11, h00, h10, op0, \
+	                    dst, src0, src1, w0)
+
+#define DSP32SHIFT(sopcde, dst0, src0, src1, sop, hls)  \
+	bfin_gen_dsp32shift (sopcde, dst0, src0, src1, sop, hls)
+
+#define DSP32SHIFTIMM(sopcde, dst0, immag, src1, sop, hls)  \
+	bfin_gen_dsp32shiftimm (sopcde, dst0, immag, src1, sop, hls)
+
+#define LDIMMHALF_R(reg, h, s, z, hword) \
+	bfin_gen_ldimmhalf (reg, h, s, z, hword, 1)
+
+#define LDIMMHALF_R5(reg, h, s, z, hword) \
+        bfin_gen_ldimmhalf (reg, h, s, z, hword, 2)
+
+#define LDSTIDXI(ptr, reg, w, sz, z, offset)  \
+	bfin_gen_ldstidxi (ptr, reg, w, sz, z, offset)
+
+#define LDST(ptr, reg, aop, sz, z, w)  \
+	bfin_gen_ldst (ptr, reg, aop, sz, z, w)
+
+#define LDSTII(ptr, reg, offset, w, op)  \
+	bfin_gen_ldstii (ptr, reg, offset, w, op)
+
+#define DSPLDST(i, m, reg, aop, w) \
+	bfin_gen_dspldst (i, reg, aop, w, m)
+
+#define LDSTPMOD(ptr, reg, idx, aop, w) \
+	bfin_gen_ldstpmod (ptr, reg, aop, w, idx)
+
+#define LDSTIIFP(offset, reg, w)  \
+	bfin_gen_ldstiifp (reg, offset, w)
+
+#define LOGI2OP(dst, src, opc) \
+	bfin_gen_logi2op (opc, src, dst.regno & CODE_MASK)
+
+#define ALU2OP(dst, src, opc)  \
+	bfin_gen_alu2op (dst, src, opc)
+
+#define BRCC(t, b, offset) \
+	bfin_gen_brcc (t, b, offset)
+
+#define UJUMP(offset) \
+	bfin_gen_ujump (offset)
+
+#define PROGCTRL(prgfunc, poprnd) \
+	bfin_gen_progctrl (prgfunc, poprnd)
+
+#define PUSHPOPMULTIPLE(dr, pr, d, p, w) \
+	bfin_gen_pushpopmultiple (dr, pr, d, p, w)
+
+#define PUSHPOPREG(reg, w) \
+	bfin_gen_pushpopreg (reg, w)
+
+#define CALLA(addr, s)  \
+	bfin_gen_calla (addr, s)
+
+#define LINKAGE(r, framesize) \
+	bfin_gen_linkage (r, framesize)
+
+#define COMPI2OPD(dst, src, op)  \
+	bfin_gen_compi2opd (dst, src, op)
+
+#define COMPI2OPP(dst, src, op)  \
+	bfin_gen_compi2opp (dst, src, op)
+
+#define DAGMODIK(i, op)  \
+	bfin_gen_dagmodik (i, op)
+
+#define DAGMODIM(i, m, op, br)  \
+	bfin_gen_dagmodim (i, m, op, br)
+
+#define COMP3OP(dst, src0, src1, opc)   \
+	bfin_gen_comp3op (src0, src1, dst, opc)
+
+#define PTR2OP(dst, src, opc)   \
+	bfin_gen_ptr2op (dst, src, opc)
+
+#define CCFLAG(x, y, opc, i, g)  \
+	bfin_gen_ccflag (x, y, opc, i, g)
+
+#define CCMV(src, dst, t) \
+	bfin_gen_ccmv (src, dst, t)
+
+#define CACTRL(reg, a, op) \
+	bfin_gen_cactrl (reg, a, op)
+
+#define LOOPSETUP(soffset, c, rop, eoffset, reg) \
+	bfin_gen_loopsetup (soffset, c, rop, eoffset, reg)
+
+#define HL2(r1, r0)  (IS_H (r1) << 1 | IS_H (r0))
+#define IS_RANGE(bits, expr, sign, mul)    \
+	value_match(expr, bits, sign, mul, 1)
+#define IS_URANGE(bits, expr, sign, mul)    \
+	value_match(expr, bits, sign, mul, 0)
+#define IS_CONST(expr) (expr->type == Expr_Node_Constant)
+#define IS_RELOC(expr) (expr->type != Expr_Node_Constant)
+#define IS_IMM(expr, bits)  value_match (expr, bits, 0, 1, 1)
+#define IS_UIMM(expr, bits)  value_match (expr, bits, 0, 1, 0)
+
+#define IS_PCREL4(expr) \
+	(value_match (expr, 4, 0, 2, 0))
+
+#define IS_LPPCREL10(expr) \
+	(value_match (expr, 10, 0, 2, 0))
+
+#define IS_PCREL10(expr) \
+	(value_match (expr, 10, 0, 2, 1))
+
+#define IS_PCREL12(expr) \
+	(value_match (expr, 12, 0, 2, 1))
+
+#define IS_PCREL24(expr) \
+	(value_match (expr, 24, 0, 2, 1))
+
+
+static int value_match (Expr_Node *, int, int, int, int);
+
+extern FILE *errorf;
+extern INSTR_T insn;
+
+static Expr_Node *binary (Expr_Op_Type, Expr_Node *, Expr_Node *);
+static Expr_Node *unary  (Expr_Op_Type, Expr_Node *);
+
+static void notethat (char *, ...);
+
+char *current_inputline;
+extern char *yytext;
+int yyerror (char *);
+
+/* Used to set SRCx fields to all 1s as described in the PRM.  */
+static Register reg7 = {REG_R7, 0};
+
+void error (char *format, ...)
+{
+    va_list ap;
+    static char buffer[2000];
+
+    va_start (ap, format);
+    vsprintf (buffer, format, ap);
+    va_end (ap);
+
+    as_bad ("%s", buffer);
+}
+
+int
+yyerror (char *msg)
+{
+  if (msg[0] == '\0')
+    error ("%s", msg);
+
+  else if (yytext[0] != ';')
+    error ("%s. Input text was %s.", msg, yytext);
+  else
+    error ("%s.", msg);
+
+  return -1;
+}
+
+static int
+in_range_p (Expr_Node *exp, int from, int to, unsigned int mask)
+{
+  int val = EXPR_VALUE (exp);
+  if (exp->type != Expr_Node_Constant)
+    return 0;
+  if (val < from || val > to)
+    return 0;
+  return (val & mask) == 0;
+}
+
+extern int yylex (void);
+
+#define imm3(x) EXPR_VALUE (x)
+#define imm4(x) EXPR_VALUE (x)
+#define uimm4(x) EXPR_VALUE (x)
+#define imm5(x) EXPR_VALUE (x)
+#define uimm5(x) EXPR_VALUE (x)
+#define imm6(x) EXPR_VALUE (x)
+#define imm7(x) EXPR_VALUE (x)
+#define uimm8(x) EXPR_VALUE (x)
+#define imm16(x) EXPR_VALUE (x)
+#define uimm16s4(x) ((EXPR_VALUE (x)) >> 2)
+#define uimm16(x) EXPR_VALUE (x)
+
+/* Return true if a value is inside a range.  */
+#define IN_RANGE(x, low, high) \
+  (((EXPR_VALUE(x)) >= (low)) && (EXPR_VALUE(x)) <= ((high)))
+
+/* Auxiliary functions.  */
+
+static int
+valid_dreg_pair (Register *reg1, Expr_Node *reg2)
+{
+  if (!IS_DREG (*reg1))
+    {
+      yyerror ("Dregs expected");
+      return 0;
+    }
+
+  if (reg1->regno != 1 && reg1->regno != 3)
+    {
+      yyerror ("Bad register pair");
+      return 0;
+    }
+
+  if (imm7 (reg2) != reg1->regno - 1)
+    {
+      yyerror ("Bad register pair");
+      return 0;
+    }
+
+  reg1->regno--;
+  return 1;
+}
+
+static int
+check_multiply_halfregs (Macfunc *aa, Macfunc *ab)
+{
+  if ((!REG_EQUAL (aa->s0, ab->s0) && !REG_EQUAL (aa->s0, ab->s1))
+      || (!REG_EQUAL (aa->s1, ab->s1) && !REG_EQUAL (aa->s1, ab->s0)))
+    return yyerror ("Source multiplication register mismatch");
+
+  return 0;
+}
+
+
+/* Check mac option.  */
+
+static int
+check_macfunc_option (Macfunc *a, Opt_mode *opt)
+{
+  /* Default option is always valid.  */
+  if (opt->mod == 0)
+    return 0;
+
+  if ((a->w == 1 && a->P == 1
+       && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
+       && opt->mod != M_S2RND && opt->mod != M_ISS2)
+      || (a->w == 1 && a->P == 0
+	  && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU
+	  && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND
+	  && opt->mod != M_ISS2 && opt->mod != M_IH)
+      || (a->w == 0 && a->P == 0
+	  && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32))
+    return -1;
+
+  return 0;
+}
+
+/* Check (vector) mac funcs and ops.  */
+
+static int
+check_macfuncs (Macfunc *aa, Opt_mode *opa,
+		Macfunc *ab, Opt_mode *opb)
+{
+  /* Variables for swapping.  */
+  Macfunc mtmp;
+  Opt_mode otmp;
+
+  /* The option mode should be put at the end of the second instruction
+     of the vector except M, which should follow MAC1 instruction.  */
+  if (opa->mod != 0)
+    return yyerror ("Bad opt mode");
+
+  /* If a0macfunc comes before a1macfunc, swap them.  */
+
+  if (aa->n == 0)
+    {
+      /*  (M) is not allowed here.  */
+      if (opa->MM != 0)
+	return yyerror ("(M) not allowed with A0MAC");
+      if (ab->n != 1)
+	return yyerror ("Vector AxMACs can't be same");
+
+      mtmp = *aa; *aa = *ab; *ab = mtmp;
+      otmp = *opa; *opa = *opb; *opb = otmp;
+    }
+  else
+    {
+      if (opb->MM != 0)
+	return yyerror ("(M) not allowed with A0MAC");
+      if (ab->n != 0)
+	return yyerror ("Vector AxMACs can't be same");
+    }
+
+  /*  If both ops are one of 0, 1, or 2, we have multiply_halfregs in both
+  assignment_or_macfuncs.  */
+  if ((aa->op == 0 || aa->op == 1 || aa->op == 2)
+      && (ab->op == 0 || ab->op == 1 || ab->op == 2))
+    {
+      if (check_multiply_halfregs (aa, ab) < 0)
+	return -1;
+    }
+  else
+    {
+      /*  Only one of the assign_macfuncs has a half reg multiply
+      Evil trick: Just 'OR' their source register codes:
+      We can do that, because we know they were initialized to 0
+      in the rules that don't use multiply_halfregs.  */
+      aa->s0.regno |= (ab->s0.regno & CODE_MASK);
+      aa->s1.regno |= (ab->s1.regno & CODE_MASK);
+    }
+
+  if (aa->w == ab->w && aa->P != ab->P)
+    return yyerror ("Destination Dreg sizes (full or half) must match");
+
+  if (aa->w && ab->w)
+    {
+      if (aa->P && (aa->dst.regno - ab->dst.regno) != 1)
+	return yyerror ("Destination Dregs (full) must differ by one");
+      if (!aa->P && aa->dst.regno != ab->dst.regno)
+	return yyerror ("Destination Dregs (half) must match");
+    }
+
+  /* Make sure mod flags get ORed, too.  */
+  opb->mod |= opa->mod;
+
+  /* Check option.  */
+  if (check_macfunc_option (aa, opb) < 0
+      && check_macfunc_option (ab, opb) < 0)
+    return yyerror ("bad option");
+
+  /* Make sure first macfunc has got both P flags ORed.  */
+  aa->P |= ab->P;
+
+  return 0;
+}
+
+
+static int
+is_group1 (INSTR_T x)
+{
+  /* Group1 is dpsLDST, LDSTpmod, LDST, LDSTiiFP, LDSTii.  */
+  if ((x->value & 0xc000) == 0x8000 || (x->value == 0x0000))
+    return 1;
+
+  return 0;
+}
+
+static int
+is_group2 (INSTR_T x)
+{
+  if ((((x->value & 0xfc00) == 0x9c00)  /* dspLDST.  */
+       && !((x->value & 0xfde0) == 0x9c60)  /* dagMODim.  */
+       && !((x->value & 0xfde0) == 0x9ce0)  /* dagMODim with bit rev.  */
+       && !((x->value & 0xfde0) == 0x9d60)) /* pick dagMODik.  */
+      || (x->value == 0x0000))
+    return 1;
+  return 0;
+}
+
+static int
+is_store (INSTR_T x)
+{
+  if (!x)
+    return 0;
+
+  if ((x->value & 0xf000) == 0x8000)
+    {
+      int aop = ((x->value >> 9) & 0x3);
+      int w = ((x->value >> 11) & 0x1);
+      if (!w || aop == 3)
+	return 0;
+      return 1;
+    }
+
+  if (((x->value & 0xFF60) == 0x9E60) ||  /* dagMODim_0 */
+      ((x->value & 0xFFF0) == 0x9F60))    /* dagMODik_0 */
+    return 0;
+
+  /* decode_dspLDST_0 */
+  if ((x->value & 0xFC00) == 0x9C00)
+    {
+      int w = ((x->value >> 9) & 0x1);
+      if (w)
+	return 1;
+    }
+
+  return 0;
+}
+
+static INSTR_T
+gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2)
+{
+  int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0;
+  int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0;
+  int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0;
+
+  if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3))
+    yyerror ("resource conflict in multi-issue instruction");
+
+  /* Anomaly 05000074 */
+  if (ENABLE_AC_05000074
+      && dsp32 != NULL && dsp16_grp1 != NULL
+      && (dsp32->value & 0xf780) == 0xc680
+      && ((dsp16_grp1->value & 0xfe40) == 0x9240
+	  || (dsp16_grp1->value & 0xfe08) == 0xba08
+	  || (dsp16_grp1->value & 0xfc00) == 0xbc00))
+    yyerror ("anomaly 05000074 - Multi-Issue Instruction with \
+dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported");
+
+  if (is_store (dsp16_grp1) && is_store (dsp16_grp2))
+    yyerror ("Only one instruction in multi-issue instruction can be a store");
+
+  return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2);
+}
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 448 "bfin-parse.y"
+{
+  INSTR_T instr;
+  Expr_Node *expr;
+  SYMBOL_T symbol;
+  long value;
+  Register reg;
+  Macfunc macfunc;
+  struct { int r0; int s0; int x0; int aop; } modcodes;
+  struct { int r0; } r0;
+  Opt_mode mod;
+}
+/* Line 193 of yacc.c.  */
+#line 881 "bfin-parse.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 894 "bfin-parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  156
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   1309
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  174
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  47
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  354
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  1021
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   428
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     4,     6,     9,    16,    21,    23,    25,
+      28,    34,    36,    43,    50,    54,    58,    76,    94,   106,
+     118,   130,   143,   156,   169,   175,   179,   183,   187,   196,
+     210,   223,   237,   251,   260,   278,   285,   295,   299,   306,
+     310,   316,   323,   332,   341,   344,   347,   352,   356,   359,
+     364,   368,   375,   380,   388,   396,   400,   404,   411,   415,
+     420,   424,   428,   432,   444,   456,   466,   472,   478,   488,
+     494,   500,   507,   514,   520,   526,   532,   539,   546,   552,
+     554,   558,   562,   566,   570,   575,   580,   590,   600,   606,
+     614,   619,   626,   633,   641,   651,   660,   669,   681,   691,
+     696,   702,   709,   717,   724,   729,   736,   742,   749,   756,
+     761,   770,   781,   792,   805,   811,   818,   824,   831,   836,
+     841,   846,   854,   864,   874,   884,   891,   898,   905,   914,
+     923,   930,   936,   942,   951,   956,   964,   966,   968,   970,
+     972,   974,   976,   978,   980,   982,   984,   987,   990,   995,
+    1000,  1007,  1014,  1017,  1020,  1025,  1028,  1031,  1034,  1037,
+    1040,  1043,  1050,  1057,  1063,  1068,  1072,  1076,  1080,  1084,
+    1088,  1092,  1097,  1100,  1105,  1108,  1113,  1116,  1121,  1124,
+    1132,  1141,  1150,  1158,  1166,  1174,  1184,  1192,  1201,  1211,
+    1220,  1227,  1235,  1244,  1254,  1263,  1271,  1279,  1286,  1298,
+    1306,  1318,  1326,  1330,  1333,  1335,  1343,  1353,  1365,  1369,
+    1375,  1383,  1386,  1389,  1392,  1395,  1397,  1399,  1402,  1405,
+    1410,  1412,  1414,  1421,  1428,  1435,  1438,  1441,  1443,  1445,
+    1446,  1452,  1458,  1462,  1466,  1470,  1474,  1475,  1477,  1479,
+    1481,  1483,  1485,  1486,  1490,  1491,  1495,  1499,  1500,  1504,
+    1508,  1514,  1520,  1521,  1525,  1529,  1530,  1534,  1538,  1539,
+    1543,  1547,  1551,  1557,  1563,  1564,  1568,  1569,  1573,  1575,
+    1577,  1579,  1581,  1582,  1586,  1590,  1594,  1600,  1606,  1608,
+    1610,  1612,  1613,  1617,  1618,  1622,  1627,  1632,  1634,  1636,
+    1638,  1640,  1642,  1644,  1646,  1648,  1652,  1656,  1660,  1664,
+    1670,  1676,  1682,  1688,  1692,  1696,  1702,  1708,  1709,  1711,
+    1713,  1716,  1719,  1722,  1726,  1728,  1734,  1740,  1744,  1747,
+    1750,  1753,  1757,  1759,  1761,  1763,  1765,  1769,  1773,  1777,
+    1781,  1783,  1785,  1787,  1789,  1793,  1795,  1797,  1801,  1803,
+    1805,  1809,  1812,  1815,  1817,  1821,  1825,  1829,  1833,  1837,
+    1841,  1845,  1849,  1853,  1857
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     175,     0,    -1,    -1,   176,    -1,   177,   160,    -1,   177,
+      77,   177,    77,   177,   160,    -1,   177,    77,   177,   160,
+      -1,     1,    -1,   166,    -1,   208,   179,    -1,   208,   179,
+     157,   208,   179,    -1,    55,    -1,    25,    97,   162,   207,
+     178,   161,    -1,    35,    97,   162,   207,   178,   161,    -1,
+      32,    97,    35,    -1,    34,    97,    35,    -1,   162,    25,
+     157,    25,   161,    97,     3,   162,    25,   159,   219,   157,
+      25,   159,   219,   161,   192,    -1,   162,    25,   157,    25,
+     161,    97,     4,   162,    25,   159,   219,   157,    25,   159,
+     219,   161,   192,    -1,   162,    25,   157,    25,   161,    97,
+       8,    25,   159,   219,   192,    -1,   162,    25,   157,    25,
+     161,    97,    19,    25,   162,   191,   161,    -1,    25,    97,
+      33,    70,    34,   157,    25,    97,    31,    70,    32,    -1,
+      25,    97,   178,    70,   178,   157,    25,    97,   178,    69,
+     178,   184,    -1,    25,    97,    25,   201,    25,   157,    25,
+      97,    25,   201,    25,   184,    -1,    25,    97,    25,   200,
+      25,   157,    25,    97,    25,   200,    25,   185,    -1,    25,
+      97,    76,    25,   189,    -1,   205,    76,   178,    -1,    31,
+      97,    35,    -1,    33,    97,    35,    -1,    25,    97,   194,
+     162,    25,   157,    25,   161,    -1,    25,    97,     5,   162,
+      25,   159,   219,   157,    25,   159,   219,   161,   193,    -1,
+      25,    97,     5,   162,    25,   159,   219,   157,    25,   159,
+     219,   161,    -1,    25,    97,     6,   162,    25,   159,   219,
+     157,    25,   159,   219,   161,   202,    -1,    25,    97,     7,
+     162,    25,   159,   219,   157,    25,   159,   219,   161,   203,
+      -1,    25,    97,     9,   162,    25,   157,    25,   161,    -1,
+      35,    97,    35,    97,    21,   162,    35,   161,    71,    35,
+      70,    21,   162,    35,   161,    71,    35,    -1,    25,    97,
+      25,   201,    25,   184,    -1,    25,    97,   199,   162,    25,
+     157,    25,   161,   189,    -1,   205,    69,   178,    -1,    35,
+      97,    35,   201,    35,   184,    -1,   205,   205,   219,    -1,
+     205,   178,   162,   125,   161,    -1,    35,    97,    25,   162,
+     137,   161,    -1,    35,    97,    25,   201,    25,   162,   140,
+     161,    -1,    35,    97,    25,   201,    25,   162,   141,   161,
+      -1,   205,   178,    -1,   205,    25,    -1,    25,    97,    35,
+     186,    -1,    35,    97,   219,    -1,   205,   219,    -1,    25,
+      97,   219,   187,    -1,    35,    97,    25,    -1,    25,    97,
+      25,   200,    25,   183,    -1,    25,    97,    28,   186,    -1,
+     205,    76,   178,   157,   205,    76,   178,    -1,   205,    69,
+     178,   157,   205,    69,   178,    -1,   206,   178,   195,    -1,
+      25,   102,   219,    -1,    25,   103,    25,   162,   131,   161,
+      -1,    25,   102,    25,    -1,   178,   103,   178,   195,    -1,
+      25,   103,    25,    -1,    25,   103,   219,    -1,    25,    98,
+      25,    -1,    11,   162,    25,   159,   219,   157,    25,   159,
+     219,   161,   192,    -1,   205,   178,   162,   125,   161,   157,
+     205,   178,   162,   125,   161,    -1,    25,    97,   162,    25,
+      70,    25,   161,    90,   219,    -1,    25,    97,    25,    65,
+      25,    -1,    25,    97,    25,    67,    25,    -1,    25,    97,
+      25,    70,   162,    25,    90,   219,   161,    -1,    27,    97,
+     178,   106,   178,    -1,    27,    97,   178,   111,   178,    -1,
+      27,    97,    25,   111,    25,   196,    -1,    27,    97,    25,
+     111,   219,   196,    -1,    27,    97,    25,   106,    25,    -1,
+      27,    97,    25,   106,   219,    -1,    27,    97,   178,   105,
+     178,    -1,    27,    97,    25,   105,    25,   196,    -1,    27,
+      97,    25,   105,   219,   196,    -1,    25,    97,    25,    64,
+      25,    -1,   212,    -1,    25,    97,    25,    -1,    27,    97,
+      25,    -1,    25,    97,    27,    -1,    27,   104,    27,    -1,
+      35,    97,   210,   179,    -1,    25,    97,   210,   179,    -1,
+      35,    97,   210,   179,   157,    35,    97,   210,   179,    -1,
+      25,    97,   210,   179,   157,    25,    97,   210,   179,    -1,
+     205,    86,   178,   158,    35,    -1,    35,    97,    86,    35,
+     158,    35,   190,    -1,   205,   178,    90,   219,    -1,    25,
+      97,    25,    90,   219,   188,    -1,    35,    97,    35,    90,
+     219,   190,    -1,    25,    97,    86,    25,   158,    35,   188,
+      -1,    35,    97,    18,   162,    25,   157,    35,   161,   189,
+      -1,    35,    97,    18,   162,    35,   157,    35,   161,    -1,
+      25,    97,    17,   162,    25,   157,    25,   161,    -1,    25,
+      97,    17,   162,    25,   157,    25,   161,   162,   132,   161,
+      -1,    25,    97,    16,   162,    25,   157,    35,   161,   186,
+      -1,   205,   178,    92,   219,    -1,   205,    85,   178,   158,
+      35,    -1,    35,    97,    85,    35,   158,    35,    -1,    25,
+      97,    85,    25,   158,    35,   189,    -1,    25,    97,    84,
+      25,   158,    35,    -1,   205,   178,    91,   219,    -1,    25,
+      97,    25,    91,   219,   189,    -1,    35,    97,    35,    91,
+     219,    -1,    35,    97,    35,    92,   219,   190,    -1,    25,
+      97,    25,    92,   219,   188,    -1,    35,    97,    20,    25,
+      -1,    25,    97,    10,   162,    35,   157,    35,   161,    -1,
+      35,    97,    27,    97,    87,   162,   178,   157,    25,   161,
+      -1,    35,    97,    27,    97,    68,   162,   178,   157,    25,
+     161,    -1,    35,    97,    27,    97,    68,   162,   178,   157,
+     178,   157,    27,   161,    -1,   205,    89,   178,   158,    35,
+      -1,    25,    97,    89,    25,   158,    35,    -1,   205,    89,
+     178,   158,   219,    -1,    25,    97,    89,    25,   158,   219,
+      -1,    35,    97,    22,   178,    -1,    35,    97,    22,    25,
+      -1,    35,    97,    22,    35,    -1,    35,    97,    15,   162,
+      25,   161,   180,    -1,    25,    97,    15,   162,    25,   157,
+      25,   161,   180,    -1,   149,   162,    25,   157,    25,   157,
+     178,   161,   180,    -1,   205,    87,   162,   178,   157,   178,
+     157,    27,   161,    -1,   146,   162,    25,   157,   219,   161,
+      -1,   147,   162,    25,   157,   219,   161,    -1,   145,   162,
+      25,   157,   219,   161,    -1,    27,   104,   148,   162,    25,
+     157,   219,   161,    -1,    27,    97,   148,   162,    25,   157,
+     219,   161,    -1,   156,    63,    27,    25,    97,    25,    -1,
+     156,    27,    25,    97,    25,    -1,   156,    63,    27,    56,
+     219,    -1,   156,    63,    27,    56,   219,   162,   130,   161,
+      -1,   156,    27,    56,   219,    -1,   156,    27,    56,   219,
+     162,   130,   161,    -1,    36,    -1,    38,    -1,    37,    -1,
+      39,    -1,    40,    -1,    41,    -1,    43,    -1,    46,    -1,
+      47,    -1,    48,    -1,    45,    25,    -1,    44,    25,    -1,
+      56,   162,    25,   161,    -1,    59,   162,    25,   161,    -1,
+      59,   162,    26,    70,    25,   161,    -1,    56,   162,    26,
+      70,    25,   161,    -1,    49,   219,    -1,    50,   219,    -1,
+     119,   162,    25,   161,    -1,    56,   219,    -1,    57,   219,
+      -1,    58,   219,    -1,    58,   217,    -1,    59,   219,    -1,
+      59,   217,    -1,    96,   162,    25,   157,    25,   161,    -1,
+      95,   162,    25,   157,    25,   161,    -1,    25,    97,    69,
+      25,   188,    -1,    25,    97,    62,    25,    -1,    25,    94,
+      25,    -1,    25,    94,   219,    -1,    25,    88,    25,    -1,
+      25,    93,    25,    -1,    25,    93,   219,    -1,    25,    88,
+     219,    -1,   113,   163,    25,   164,    -1,   113,   198,    -1,
+     112,   163,    25,   164,    -1,   112,   198,    -1,   114,   163,
+      25,   164,    -1,   114,   198,    -1,   115,   163,    25,   164,
+      -1,   115,   198,    -1,   122,   163,    25,   204,   164,    97,
+      25,    -1,   122,   163,    25,   201,   219,   164,    97,    25,
+      -1,   123,   163,    25,   201,   219,   164,    97,    25,    -1,
+     123,   163,    25,   204,   164,    97,    25,    -1,   123,   163,
+      25,   204,   164,    97,    35,    -1,   163,    25,   201,   219,
+     164,    97,    25,    -1,    25,    97,   123,   163,    25,   201,
+     219,   164,   186,    -1,    35,    97,   123,   163,    25,   204,
+     164,    -1,    25,    97,   123,   163,    25,   204,   164,   186,
+      -1,    25,    97,   123,   163,    25,    83,    25,   164,   186,
+      -1,    35,    97,   123,   163,    25,    83,    25,   164,    -1,
+     163,    25,   204,   164,    97,    25,    -1,   163,    25,    83,
+      25,   164,    97,    25,    -1,   123,   163,    25,    83,    25,
+     164,    97,    35,    -1,    25,    97,   122,   163,    25,   201,
+     219,   164,   186,    -1,    25,    97,   122,   163,    25,   204,
+     164,   186,    -1,    25,    97,   163,    25,    83,    25,   164,
+      -1,    25,    97,   163,    25,   201,   216,   164,    -1,    25,
+      97,   163,    25,   204,   164,    -1,   197,    97,   162,    25,
+     159,   219,   157,    25,   159,   219,   161,    -1,   197,    97,
+     162,    25,   159,   219,   161,    -1,   162,    25,   159,   219,
+     157,    25,   159,   219,   161,    97,   198,    -1,   162,    25,
+     159,   219,   161,    97,   198,    -1,   197,    97,    25,    -1,
+      23,   219,    -1,    24,    -1,    51,   162,   219,   157,   219,
+     161,    25,    -1,    51,   162,   219,   157,   219,   161,    25,
+      97,    25,    -1,    51,   162,   219,   157,   219,   161,    25,
+      97,    25,    91,   219,    -1,    52,   219,    25,    -1,    52,
+     219,    25,    97,    25,    -1,    52,   219,    25,    97,    25,
+      91,   219,    -1,    53,   168,    -1,    53,   219,    -1,    54,
+     168,    -1,    54,   219,    -1,    60,    -1,   153,    -1,   153,
+     178,    -1,   153,    25,    -1,   155,   162,    25,   161,    -1,
+     152,    -1,    42,    -1,   154,   162,    35,   157,   219,   161,
+      -1,   151,   162,    25,   157,   219,   161,    -1,   150,   162,
+      25,   157,   219,   161,    -1,   117,   219,    -1,   117,    25,
+      -1,    29,    -1,    30,    -1,    -1,   162,   134,   157,   135,
+     161,    -1,   162,   135,   157,   134,   161,    -1,   162,   135,
+     161,    -1,   162,   134,   161,    -1,   162,   120,   161,    -1,
+     162,   121,   161,    -1,    -1,   125,    -1,   126,    -1,   127,
+      -1,   120,    -1,   121,    -1,    -1,   162,   181,   161,    -1,
+      -1,   162,   124,   161,    -1,   162,   125,   161,    -1,    -1,
+     162,   182,   161,    -1,   162,   181,   161,    -1,   162,   182,
+     157,   181,   161,    -1,   162,   181,   157,   182,   161,    -1,
+      -1,   162,   133,   161,    -1,   162,   132,   161,    -1,    -1,
+     162,   132,   161,    -1,   162,   133,   161,    -1,    -1,   162,
+     124,   161,    -1,   162,   125,   161,    -1,   162,   142,   161,
+      -1,   162,   142,   157,   125,   161,    -1,   162,   125,   157,
+     142,   161,    -1,    -1,   162,   142,   161,    -1,    -1,   162,
+     125,   161,    -1,   107,    -1,   110,    -1,   109,    -1,   108,
+      -1,    -1,   162,   136,   161,    -1,   162,   136,   161,    -1,
+     162,   135,   161,    -1,   162,   135,   157,   136,   161,    -1,
+     162,   136,   157,   135,   161,    -1,    12,    -1,    13,    -1,
+      14,    -1,    -1,   162,   135,   161,    -1,    -1,   162,   135,
+     161,    -1,   163,    82,    25,   164,    -1,   163,    25,    83,
+     164,    -1,    74,    -1,    75,    -1,    78,    -1,    79,    -1,
+      80,    -1,    81,    -1,    70,    -1,    69,    -1,   162,   139,
+     161,    -1,   162,   128,   161,    -1,   162,   138,   161,    -1,
+     162,   129,   161,    -1,   162,   139,   157,   136,   161,    -1,
+     162,   128,   157,   136,   161,    -1,   162,   138,   157,   136,
+     161,    -1,   162,   129,   157,   136,   161,    -1,   162,   143,
+     161,    -1,   162,   144,   161,    -1,   162,   143,   157,   136,
+     161,    -1,   162,   144,   157,   136,   161,    -1,    -1,    83,
+      -1,    82,    -1,   178,    97,    -1,   178,   102,    -1,   178,
+     103,    -1,    25,    97,   178,    -1,   209,    -1,    25,    97,
+     162,   209,   161,    -1,    35,    97,   162,   209,   161,    -1,
+      35,    97,   178,    -1,   205,   210,    -1,   207,   210,    -1,
+     206,   210,    -1,    35,    71,    35,    -1,    97,    -1,    99,
+      -1,   101,    -1,   100,    -1,    27,   211,   165,    -1,    27,
+     211,   142,    -1,   165,   211,    27,    -1,   142,   211,    27,
+      -1,   167,    -1,   169,    -1,   170,    -1,   171,    -1,   213,
+     172,   214,    -1,   215,    -1,   219,    -1,   213,   172,   173,
+      -1,   168,    -1,   213,    -1,   162,   220,   161,    -1,    62,
+     220,    -1,    69,   220,    -1,   220,    -1,   220,    71,   220,
+      -1,   220,    72,   220,    -1,   220,    66,   220,    -1,   220,
+      70,   220,    -1,   220,    69,   220,    -1,   220,    90,   220,
+      -1,   220,    91,   220,    -1,   220,    64,   220,    -1,   220,
+      67,   220,    -1,   220,    65,   220,    -1,   218,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   649,   649,   650,   662,   664,   697,   724,   735,   739,
+     777,   797,   802,   812,   822,   827,   832,   850,   868,   882,
+     895,   911,   933,   951,   976,   998,  1003,  1013,  1024,  1035,
+    1049,  1064,  1080,  1096,  1107,  1121,  1147,  1165,  1170,  1176,
+    1188,  1199,  1210,  1221,  1232,  1243,  1254,  1280,  1294,  1304,
+    1349,  1368,  1379,  1390,  1401,  1412,  1423,  1439,  1456,  1472,
+    1483,  1494,  1527,  1538,  1551,  1562,  1601,  1611,  1621,  1641,
+    1651,  1661,  1672,  1686,  1697,  1710,  1720,  1732,  1747,  1758,
+    1764,  1786,  1797,  1808,  1816,  1842,  1872,  1901,  1932,  1946,
+    1957,  1971,  2005,  2023,  2048,  2060,  2078,  2089,  2100,  2111,
+    2124,  2135,  2146,  2157,  2168,  2179,  2212,  2222,  2235,  2255,
+    2266,  2277,  2290,  2303,  2314,  2325,  2336,  2347,  2357,  2368,
+    2379,  2391,  2402,  2413,  2427,  2440,  2452,  2464,  2475,  2486,
+    2497,  2509,  2521,  2532,  2543,  2554,  2564,  2570,  2576,  2582,
+    2588,  2594,  2600,  2606,  2612,  2618,  2624,  2635,  2646,  2657,
+    2668,  2679,  2690,  2701,  2707,  2721,  2732,  2743,  2754,  2765,
+    2775,  2788,  2796,  2804,  2828,  2839,  2850,  2861,  2872,  2883,
+    2895,  2908,  2917,  2928,  2939,  2951,  2962,  2973,  2984,  2998,
+    3010,  3036,  3066,  3077,  3102,  3139,  3167,  3192,  3203,  3214,
+    3225,  3251,  3270,  3284,  3308,  3320,  3339,  3385,  3422,  3438,
+    3457,  3471,  3490,  3506,  3514,  3523,  3534,  3546,  3560,  3568,
+    3578,  3590,  3601,  3611,  3622,  3633,  3639,  3644,  3649,  3655,
+    3663,  3669,  3675,  3681,  3687,  3693,  3701,  3715,  3719,  3729,
+    3733,  3738,  3743,  3748,  3755,  3759,  3766,  3770,  3775,  3780,
+    3788,  3792,  3799,  3803,  3811,  3816,  3822,  3831,  3836,  3842,
+    3848,  3854,  3863,  3866,  3870,  3877,  3880,  3884,  3891,  3896,
+    3902,  3908,  3914,  3919,  3927,  3930,  3937,  3940,  3947,  3951,
+    3955,  3959,  3966,  3969,  3976,  3981,  3988,  3995,  4007,  4011,
+    4015,  4022,  4025,  4035,  4038,  4047,  4053,  4062,  4066,  4073,
+    4077,  4081,  4085,  4092,  4096,  4103,  4111,  4119,  4127,  4135,
+    4142,  4149,  4157,  4167,  4172,  4177,  4182,  4190,  4193,  4197,
+    4206,  4213,  4220,  4227,  4242,  4248,  4261,  4274,  4292,  4299,
+    4306,  4316,  4329,  4333,  4337,  4341,  4348,  4354,  4360,  4366,
+    4376,  4385,  4387,  4389,  4393,  4401,  4405,  4412,  4418,  4424,
+    4428,  4432,  4436,  4442,  4448,  4452,  4456,  4460,  4464,  4468,
+    4472,  4476,  4480,  4484,  4488
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "BYTEOP16P", "BYTEOP16M", "BYTEOP1P",
+  "BYTEOP2P", "BYTEOP3P", "BYTEUNPACK", "BYTEPACK", "PACK", "SAA",
+  "ALIGN8", "ALIGN16", "ALIGN24", "VIT_MAX", "EXTRACT", "DEPOSIT",
+  "EXPADJ", "SEARCH", "ONES", "SIGN", "SIGNBITS", "LINK", "UNLINK", "REG",
+  "PC", "CCREG", "BYTE_DREG", "REG_A_DOUBLE_ZERO", "REG_A_DOUBLE_ONE",
+  "A_ZERO_DOT_L", "A_ZERO_DOT_H", "A_ONE_DOT_L", "A_ONE_DOT_H", "HALF_REG",
+  "NOP", "RTI", "RTS", "RTX", "RTN", "RTE", "HLT", "IDLE", "STI", "CLI",
+  "CSYNC", "SSYNC", "EMUEXCPT", "RAISE", "EXCPT", "LSETUP", "LOOP",
+  "LOOP_BEGIN", "LOOP_END", "DISALGNEXCPT", "JUMP", "JUMP_DOT_S",
+  "JUMP_DOT_L", "CALL", "ABORT", "NOT", "TILDA", "BANG", "AMPERSAND",
+  "BAR", "PERCENT", "CARET", "BXOR", "MINUS", "PLUS", "STAR", "SLASH",
+  "NEG", "MIN", "MAX", "ABS", "DOUBLE_BAR", "_PLUS_BAR_PLUS",
+  "_PLUS_BAR_MINUS", "_MINUS_BAR_PLUS", "_MINUS_BAR_MINUS", "_MINUS_MINUS",
+  "_PLUS_PLUS", "SHIFT", "LSHIFT", "ASHIFT", "BXORSHIFT",
+  "_GREATER_GREATER_GREATER_THAN_ASSIGN", "ROT", "LESS_LESS",
+  "GREATER_GREATER", "_GREATER_GREATER_GREATER", "_LESS_LESS_ASSIGN",
+  "_GREATER_GREATER_ASSIGN", "DIVS", "DIVQ", "ASSIGN", "_STAR_ASSIGN",
+  "_BAR_ASSIGN", "_CARET_ASSIGN", "_AMPERSAND_ASSIGN", "_MINUS_ASSIGN",
+  "_PLUS_ASSIGN", "_ASSIGN_BANG", "_LESS_THAN_ASSIGN", "_ASSIGN_ASSIGN",
+  "GE", "LT", "LE", "GT", "LESS_THAN", "FLUSHINV", "FLUSH", "IFLUSH",
+  "PREFETCH", "PRNT", "OUTC", "WHATREG", "TESTSET", "ASL", "ASR", "B", "W",
+  "NS", "S", "CO", "SCO", "TH", "TL", "BP", "BREV", "X", "Z", "M", "MMOD",
+  "R", "RND", "RNDL", "RNDH", "RND12", "RND20", "V", "LO", "HI", "BITTGL",
+  "BITCLR", "BITSET", "BITTST", "BITMUX", "DBGAL", "DBGAH", "DBGHALT",
+  "DBG", "DBGA", "DBGCMPLX", "IF", "COMMA", "BY", "COLON", "SEMICOLON",
+  "RPAREN", "LPAREN", "LBRACK", "RBRACK", "STATUS_REG", "MNOP", "SYMBOL",
+  "NUMBER", "GOT", "GOT17M4", "FUNCDESC_GOT17M4", "AT", "PLTPC", "$accept",
+  "statement", "asm", "asm_1", "REG_A", "opt_mode", "asr_asl", "sco",
+  "asr_asl_0", "amod0", "amod1", "amod2", "xpmod", "xpmod1", "vsmod",
+  "vmod", "smod", "searchmod", "aligndir", "byteop_mod", "c_align",
+  "w32_or_nothing", "iu_or_nothing", "reg_with_predec", "reg_with_postinc",
+  "min_max", "op_bar_op", "plus_minus", "rnd_op", "b3_op", "post_op",
+  "a_assign", "a_minusassign", "a_plusassign", "assign_macfunc",
+  "a_macfunc", "multiply_halfregs", "cc_op", "ccstat", "symbol",
+  "any_gotrel", "got", "got_or_expr", "pltpc", "eterm", "expr", "expr_1", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,   174,   175,   175,   176,   176,   176,   176,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   177,   177,   177,
+     177,   177,   177,   177,   177,   177,   177,   178,   178,   179,
+     179,   179,   179,   179,   180,   180,   181,   181,   181,   181,
+     182,   182,   183,   183,   184,   184,   184,   185,   185,   185,
+     185,   185,   186,   186,   186,   187,   187,   187,   188,   188,
+     188,   188,   188,   188,   189,   189,   190,   190,   191,   191,
+     191,   191,   192,   192,   193,   193,   193,   193,   194,   194,
+     194,   195,   195,   196,   196,   197,   198,   199,   199,   200,
+     200,   200,   200,   201,   201,   202,   202,   202,   202,   202,
+     202,   202,   202,   203,   203,   203,   203,   204,   204,   204,
+     205,   206,   207,   208,   208,   208,   208,   208,   209,   209,
+     209,   210,   211,   211,   211,   211,   212,   212,   212,   212,
+     213,   214,   214,   214,   215,   216,   216,   217,   218,   218,
+     218,   218,   218,   219,   220,   220,   220,   220,   220,   220,
+     220,   220,   220,   220,   220
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     0,     1,     2,     6,     4,     1,     1,     2,
+       5,     1,     6,     6,     3,     3,    17,    17,    11,    11,
+      11,    12,    12,    12,     5,     3,     3,     3,     8,    13,
+      12,    13,    13,     8,    17,     6,     9,     3,     6,     3,
+       5,     6,     8,     8,     2,     2,     4,     3,     2,     4,
+       3,     6,     4,     7,     7,     3,     3,     6,     3,     4,
+       3,     3,     3,    11,    11,     9,     5,     5,     9,     5,
+       5,     6,     6,     5,     5,     5,     6,     6,     5,     1,
+       3,     3,     3,     3,     4,     4,     9,     9,     5,     7,
+       4,     6,     6,     7,     9,     8,     8,    11,     9,     4,
+       5,     6,     7,     6,     4,     6,     5,     6,     6,     4,
+       8,    10,    10,    12,     5,     6,     5,     6,     4,     4,
+       4,     7,     9,     9,     9,     6,     6,     6,     8,     8,
+       6,     5,     5,     8,     4,     7,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     4,     4,
+       6,     6,     2,     2,     4,     2,     2,     2,     2,     2,
+       2,     6,     6,     5,     4,     3,     3,     3,     3,     3,
+       3,     4,     2,     4,     2,     4,     2,     4,     2,     7,
+       8,     8,     7,     7,     7,     9,     7,     8,     9,     8,
+       6,     7,     8,     9,     8,     7,     7,     6,    11,     7,
+      11,     7,     3,     2,     1,     7,     9,    11,     3,     5,
+       7,     2,     2,     2,     2,     1,     1,     2,     2,     4,
+       1,     1,     6,     6,     6,     2,     2,     1,     1,     0,
+       5,     5,     3,     3,     3,     3,     0,     1,     1,     1,
+       1,     1,     0,     3,     0,     3,     3,     0,     3,     3,
+       5,     5,     0,     3,     3,     0,     3,     3,     0,     3,
+       3,     3,     5,     5,     0,     3,     0,     3,     1,     1,
+       1,     1,     0,     3,     3,     3,     5,     5,     1,     1,
+       1,     0,     3,     0,     3,     4,     4,     1,     1,     1,
+       1,     1,     1,     1,     1,     3,     3,     3,     3,     5,
+       5,     5,     5,     3,     3,     5,     5,     0,     1,     1,
+       2,     2,     2,     3,     1,     5,     5,     3,     2,     2,
+       2,     3,     1,     1,     1,     1,     3,     3,     3,     3,
+       1,     1,     1,     1,     3,     1,     1,     3,     1,     1,
+       3,     2,     2,     1,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint16 yydefact[] =
+{
+       0,     7,     0,     0,   204,     0,     0,   227,   228,     0,
+       0,     0,     0,     0,   136,   138,   137,   139,   140,   141,
+     221,   142,     0,     0,   143,   144,   145,     0,     0,     0,
+       0,     0,     0,    11,     0,     0,     0,     0,   215,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   220,   216,     0,     0,
+       0,     0,     0,     0,     8,     0,     3,     0,     0,     0,
+       0,     0,     0,   229,   314,    79,     0,     0,     0,     0,
+     330,   338,   339,   354,   203,   343,     0,     0,     0,     0,
+       0,     0,     0,   322,   323,   325,   324,     0,     0,     0,
+       0,     0,     0,     0,   147,   146,   152,   153,     0,     0,
+     338,   212,   338,   214,     0,   155,   156,   339,   158,   157,
+       0,   160,   159,     0,     0,     0,   174,     0,   172,     0,
+     176,     0,   178,   226,   225,     0,     0,     0,   322,     0,
+       0,     0,     0,     0,     0,     0,   218,   217,     0,     0,
+       0,     0,     0,   307,     0,     0,     1,     0,     4,   310,
+     311,   312,     0,    45,     0,     0,     0,     0,     0,     0,
+       0,    44,     0,   318,    48,   281,   320,   319,     0,     9,
+       0,   341,   342,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   167,   170,   168,   169,   165,   166,
+       0,     0,     0,     0,     0,   278,   279,   280,     0,     0,
+       0,    80,    82,   252,     0,   252,     0,     0,   287,   288,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   313,
+       0,     0,   229,   255,    62,    58,    56,    60,    61,    81,
+       0,     0,    83,     0,   327,   326,    26,    14,    27,    15,
+       0,     0,     0,     0,    50,     0,     0,     0,     0,     0,
+       0,   317,   229,    47,     0,   208,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   307,   307,
+     329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   293,   309,   308,     0,     0,
+       0,   328,     0,   281,   202,     0,     0,    37,    25,     0,
+       0,     0,     0,     0,     0,     0,     0,    39,     0,    55,
+       0,     0,     0,     0,   340,   351,   353,   346,   352,   348,
+     347,   344,   345,   349,   350,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   293,   289,   290,   291,
+     292,     0,     0,     0,     0,     0,     0,    52,     0,    46,
+     164,   258,   264,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   307,     0,     0,     0,    85,
+       0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   109,   119,   120,   118,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      84,     0,     0,   148,     0,   337,   149,     0,     0,     0,
+       0,   173,   171,   175,   177,   154,   308,     0,     0,   308,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   219,
+       0,   134,     0,     0,     0,     0,     0,     0,     0,   285,
+       0,     6,    59,     0,   321,     0,     0,     0,     0,     0,
+       0,    90,   104,    99,     0,     0,     0,   233,     0,   232,
+       0,     0,   229,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    78,    66,    67,     0,   258,   264,   258,   242,
+     244,     0,     0,     0,     0,   163,     0,    24,     0,     0,
+       0,     0,   307,   307,     0,   312,     0,   315,   308,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   283,   283,
+      73,    74,   283,   283,     0,    75,    69,    70,     0,     0,
+       0,     0,     0,     0,     0,     0,   266,   106,   266,     0,
+     244,     0,     0,   307,     0,   316,     0,     0,   209,     0,
+       0,     0,     0,   286,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   131,     0,     0,   132,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   100,    88,     0,   114,   116,    40,   282,     0,     0,
+       0,     0,    10,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    91,   105,   108,     0,   236,    51,     0,
+       0,    35,   254,   253,     0,     0,     0,     0,     0,   103,
+     264,   258,   115,   117,     0,     0,   308,     0,     0,     0,
+      12,     0,   339,   335,     0,   336,   197,     0,     0,     0,
+       0,   256,   257,    57,     0,    76,    77,    71,    72,     0,
+       0,     0,     0,     0,    41,     0,     0,     0,     0,    92,
+     107,     0,    38,   101,   266,   308,     0,    13,     0,     0,
+       0,   151,   150,   162,   161,     0,     0,     0,     0,     0,
+     127,   125,   126,     0,   224,   223,   222,     0,   130,     0,
+       0,     0,     0,     0,     0,   190,     5,     0,     0,     0,
+       0,     0,   230,   231,     0,   313,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   237,   238,
+     239,     0,     0,     0,     0,     0,   259,     0,   260,     0,
+     261,   265,   102,    93,     0,   252,     0,     0,   252,     0,
+     195,     0,   196,     0,     0,     0,     0,     0,     0,     0,
+       0,   121,     0,     0,     0,     0,     0,     0,     0,     0,
+      89,     0,   186,     0,   205,   210,     0,   179,     0,     0,
+     182,   183,     0,   135,     0,     0,     0,     0,     0,     0,
+       0,   201,   191,   184,     0,   199,    54,    53,     0,     0,
+       0,     0,     0,     0,    33,   110,     0,   252,    96,     0,
+       0,   243,     0,   245,   246,     0,     0,     0,   252,   194,
+     252,   252,   187,     0,   331,   332,   333,   334,     0,    28,
+     264,   229,   284,   129,   128,     0,     0,   264,    95,    42,
+      43,     0,     0,   267,     0,   189,   229,     0,   180,   192,
+     181,     0,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   122,    98,     0,    68,
+       0,     0,     0,   263,   262,   193,   188,   185,    65,     0,
+      36,    87,   234,   235,    94,     0,     0,     0,     0,    86,
+     206,   123,     0,     0,     0,     0,     0,     0,   124,     0,
+     272,     0,     0,     0,     0,     0,     0,     0,     0,   112,
+       0,   111,     0,     0,     0,     0,   272,   268,   271,   270,
+     269,     0,     0,     0,     0,     0,    63,     0,     0,     0,
+      97,   247,   244,    20,   244,     0,     0,   207,     0,     0,
+      18,    19,   200,   198,    64,     0,    30,     0,     0,   236,
+      23,    22,    21,   113,     0,     0,     0,   273,     0,    29,
+       0,    31,     0,    32,   240,   241,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     249,   236,   248,     0,     0,     0,     0,   275,     0,   274,
+       0,   296,     0,   298,     0,   297,     0,   295,     0,   303,
+       0,   304,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   251,   250,     0,   272,   272,
+     276,   277,   300,   302,   301,   299,   305,   306,    34,    16,
+      17
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,    65,    66,    67,   370,   179,   751,   721,   957,   608,
+     611,   940,   357,   381,   495,   497,   659,   911,   916,   949,
+     230,   319,   645,    69,   126,   231,   354,   298,   951,   953,
+     299,   371,   372,    72,    73,    74,   177,    98,    75,    82,
+     817,   633,   634,   118,    83,    84,    85
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -869
+static const yytype_int16 yypact[] =
+{
+     862,  -869,   -96,   -14,  -869,   653,   618,  -869,  -869,   -22,
+      -7,    20,    71,    85,  -869,  -869,  -869,  -869,  -869,  -869,
+    -869,  -869,    58,   176,  -869,  -869,  -869,   -14,   -14,    48,
+     -14,   167,   231,  -869,   327,   -14,   -14,   376,  -869,    53,
+      56,    94,    96,   120,   126,   114,    64,   139,   144,   419,
+     115,   171,   185,   199,   207,   230,  -869,   324,   250,   258,
+      43,   358,    25,   419,  -869,   387,  -869,   -39,    13,   325,
+     223,   245,   390,   300,  -869,  -869,   443,   -14,   -14,   -14,
+    -869,  -869,  -869,  -869,  -869,   582,   152,   170,   178,   496,
+     453,   203,   259,     7,  -869,  -869,  -869,    26,   -46,   448,
+     455,   458,   464,   111,  -869,  -869,  -869,  -869,   -14,   463,
+     -10,  -869,    -9,  -869,    32,  -869,  -869,   308,  -869,  -869,
+     102,  -869,  -869,   479,   492,   497,  -869,   505,  -869,   508,
+    -869,   523,  -869,  -869,  -869,   526,   541,   561,  -869,   530,
+     567,   581,   586,   602,   611,   625,  -869,  -869,   549,   632,
+      57,   589,   221,   172,   637,   614,  -869,  1008,  -869,  -869,
+    -869,   365,     4,  -869,   584,   394,   365,   365,   365,   498,
+     365,    -6,   -14,  -869,  -869,   507,  -869,  -869,   301,   510,
+     519,  -869,  -869,   524,   -14,   -14,   -14,   -14,   -14,   -14,
+     -14,   -14,   -14,   -14,  -869,  -869,  -869,  -869,  -869,  -869,
+     548,   554,   563,   576,   583,  -869,  -869,  -869,   587,   592,
+     597,   601,  -869,   598,   673,   -19,   279,   293,  -869,  -869,
+     663,   698,   719,   723,   728,   594,   599,    63,   733,   691,
+     603,   604,   300,   605,  -869,  -869,  -869,   606,  -869,   225,
+     607,   271,  -869,   608,  -869,  -869,  -869,  -869,  -869,  -869,
+     609,   610,   739,   208,   -25,   676,   538,   740,   741,   615,
+     394,  -869,   300,  -869,   617,   680,   620,   709,   612,   621,
+     710,   626,   627,   -41,    -3,    14,    17,   628,   281,   349,
+    -869,   631,   633,   634,   636,   638,   639,   640,   641,   690,
+     -14,    62,   767,   -14,  -869,  -869,  -869,   769,   -14,   643,
+     644,  -869,    -8,   507,  -869,   773,   764,   646,   647,   648,
+     651,   365,   652,   -14,   -14,   -14,   675,  -869,   666,  -869,
+     134,   166,   276,   -14,  -869,   630,   642,  -869,   483,   368,
+     368,  -869,  -869,   532,   532,   780,   786,   787,   788,   779,
+     790,   791,   792,   793,   794,   795,   659,  -869,  -869,  -869,
+    -869,   -14,   -14,   -14,   797,   798,   318,  -869,   799,  -869,
+    -869,   662,   664,   667,   669,   670,   671,   806,   807,   765,
+     340,   390,   390,   245,   677,   384,   365,   809,   811,   682,
+     493,  -869,   706,   297,   317,   319,   815,   365,   365,   365,
+     816,   817,   226,  -869,  -869,  -869,  -869,   707,   818,    37,
+     -14,   -14,   -14,   824,   812,   688,   692,   823,   245,   693,
+     694,   -14,   827,  -869,   828,  -869,  -869,   830,   831,   833,
+     685,  -869,  -869,  -869,  -869,  -869,  -869,   -14,   697,   842,
+     -14,   704,   -14,   -14,   -14,   844,   -14,   -14,   -14,  -869,
+     845,   712,   774,   -14,   714,   182,   715,   716,   785,  -869,
+    1008,  -869,  -869,   724,  -869,   365,   365,   849,   853,   766,
+     100,  -869,  -869,  -869,   729,   763,   796,  -869,   800,  -869,
+     829,   832,   300,   768,   771,   776,   777,   770,   775,   781,
+     783,   784,  -869,  -869,  -869,   903,   662,   664,   662,   -58,
+     -15,   772,   782,   789,    33,  -869,   802,  -869,   902,   907,
+     910,   472,   281,   445,   924,  -869,   801,  -869,   925,   -14,
+     803,   804,   808,   813,   926,   805,   810,   819,   820,   820,
+    -869,  -869,   820,   820,   821,  -869,  -869,  -869,   826,   825,
+     834,   835,   836,   837,   838,   839,   840,  -869,   840,   841,
+     843,   917,   918,   562,   859,  -869,   919,   860,   864,   861,
+     865,   868,   869,  -869,   846,   863,   870,   872,   866,   908,
+     909,   911,   914,   912,   913,   915,  -869,   857,   931,   916,
+     867,   934,   871,   875,   876,   944,   920,   -14,   891,   921,
+     922,  -869,  -869,   365,  -869,  -869,   927,  -869,   928,   929,
+       5,    10,  -869,   964,   -14,   -14,   -14,   968,   959,   970,
+     961,   981,   933,  -869,  -869,  -869,  1050,   119,  -869,  1052,
+     559,  -869,  -869,  -869,  1054,   930,   211,   247,   932,  -869,
+     664,   662,  -869,  -869,   -14,   923,  1056,   -14,   935,   936,
+    -869,   937,   938,  -869,   941,  -869,  -869,  1057,  1058,  1060,
+     989,  -869,  -869,  -869,   953,  -869,  -869,  -869,  -869,   -14,
+     -14,   940,  1059,  1061,  -869,   546,   365,   365,   967,  -869,
+    -869,  1063,  -869,  -869,   840,  1070,   942,  -869,  1003,  1082,
+     -14,  -869,  -869,  -869,  -869,  1011,  1084,  1014,  1015,   278,
+    -869,  -869,  -869,   365,  -869,  -869,  -869,   952,  -869,   984,
+     216,   956,   954,  1091,  1093,  -869,  -869,   287,   365,   365,
+     962,   365,  -869,  -869,   365,  -869,   365,   965,   969,   971,
+     972,   973,   974,   975,   976,   977,   -14,  1035,  -869,  -869,
+    -869,   978,  1036,   979,   980,  1045,  -869,  1001,  -869,  1019,
+    -869,  -869,  -869,  -869,   982,   598,   983,   985,   598,  1055,
+    -869,   407,  -869,  1051,   990,   991,   390,   995,  1004,  1005,
+     574,  -869,  1006,  1007,  1016,  1017,  1012,  1018,  1020,  1021,
+    -869,  1022,  -869,   390,  1075,  -869,  1151,  -869,  1144,  1155,
+    -869,  -869,  1023,  -869,  1024,  1025,  1026,  1158,  1164,   -14,
+    1165,  -869,  -869,  -869,  1166,  -869,  -869,  -869,  1167,   365,
+     -14,  1168,  1170,  1171,  -869,  -869,   940,   598,  1030,  1037,
+    1172,  -869,  1174,  -869,  -869,  1169,  1040,  1041,   598,  -869,
+     598,   598,  -869,   -14,  -869,  -869,  -869,  -869,   365,  -869,
+     664,   300,  -869,  -869,  -869,  1042,  1043,   664,  -869,  -869,
+    -869,   372,  1180,  -869,  1135,  -869,   300,  1182,  -869,  -869,
+    -869,   940,  -869,  1183,  1184,  1053,  1048,  1062,  1128,  1065,
+    1064,  1066,  1068,  1067,  1071,  1072,  -869,  -869,  1081,  -869,
+     596,   635,  1145,  -869,  -869,  -869,  -869,  -869,  -869,  1147,
+    -869,  -869,  -869,  -869,  -869,  1073,  1076,  1074,  1179,  -869,
+    1126,  -869,  1077,  1078,   -14,   619,  1121,   -14,  -869,  1094,
+    1079,   -14,   -14,   -14,  1083,  1195,  1196,  1190,   365,  -869,
+    1200,  -869,  1162,   -14,   -14,   -14,  1079,  -869,  -869,  -869,
+    -869,  1085,   954,  1086,  1087,  1102,  -869,  1088,  1089,  1090,
+    -869,  1080,   843,  -869,   843,  1092,  1218,  -869,  1095,  1097,
+    -869,  -869,  -869,  -869,  -869,  1096,  1098,  1099,  1100,   350,
+    -869,  -869,  -869,  -869,  1101,  1215,  1220,  -869,   595,  -869,
+      84,  -869,   591,  -869,  -869,  -869,   312,   375,  1208,  1105,
+    1106,   378,   402,   403,   418,   426,   460,   476,   481,   616,
+    -869,   119,  -869,  1107,   -14,   -14,  1119,  -869,  1123,  -869,
+    1120,  -869,  1130,  -869,  1131,  -869,  1133,  -869,  1134,  -869,
+    1136,  -869,  1110,  1112,  1188,  1113,  1114,  1115,  1116,  1117,
+    1118,  1122,  1124,  1125,  1127,  -869,  -869,  1245,  1079,  1079,
+    -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,  -869,
+    -869
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -869,  -869,  -869,  -133,    41,  -216,  -733,  -868,   313,  -869,
+    -509,  -869,  -198,  -869,  -458,  -460,  -515,  -869,  -804,  -869,
+    -869,   986,    23,  -869,   -31,  -869,   421,  -205,  -869,  -869,
+    -253,     2,    22,  -171,   987,  -206,   -56,    46,  -869,   -17,
+    -869,  -869,  -869,  1247,  -869,   -27,     0
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -214
+static const yytype_int16 yytable[] =
+{
+     106,   107,    70,   109,   111,   113,   355,   115,   116,   119,
+     122,   128,   130,   132,   173,   176,   379,   359,   134,   117,
+     117,   374,    71,   660,   302,   428,   431,   604,   603,   304,
+     605,   662,   239,   232,     7,     8,     7,     8,   157,     7,
+       8,    68,   420,   174,   294,   295,   410,   262,    77,   398,
+     153,   404,   306,   242,   409,    78,   373,   266,   267,   195,
+     197,   199,   233,   856,   236,   238,    76,  -211,  -213,   450,
+     150,   956,   172,   427,   430,    99,   263,   181,   182,   183,
+     420,   264,   289,   104,   313,   314,   315,   442,   369,   408,
+     100,   159,     7,     8,    77,   139,   244,   420,   147,   606,
+     420,    78,   930,   993,   607,   534,   151,   154,   881,   155,
+     159,   171,   175,   290,   183,   160,   161,   101,   443,   245,
+     183,   158,   510,   421,   535,    77,   250,   269,   270,   251,
+     229,   252,    78,   253,   241,   584,   254,   397,   255,   133,
+       7,     8,   609,   356,   261,   317,   256,   610,    79,   760,
+    -211,  -213,   451,    80,    81,   240,   316,   615,   616,    70,
+     732,   422,    77,   733,    77,   182,   305,   704,   102,    78,
+     509,    78,   706,    77,   243,   617,    77,   194,   423,    71,
+      78,   424,   103,    78,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,    79,   196,   257,   258,    68,    80,
+      81,   105,   303,   198,  1019,  1020,   307,   308,   309,   310,
+     108,   312,   963,   964,    77,   123,   181,   182,   124,   775,
+     776,    78,   965,   966,   777,    79,   135,   183,   235,    77,
+      80,    81,    77,   394,   259,   778,    78,     7,     8,    78,
+      77,   294,   295,   395,   718,   719,   720,    78,   163,   625,
+     628,   530,     7,     8,   296,   297,   592,   125,   164,   127,
+     183,   531,    79,   441,    79,    77,   445,    80,    81,    80,
+      81,   447,    78,   260,     7,     8,    79,   140,    80,    81,
+     164,    80,    81,   129,   237,    77,   461,   462,   463,   131,
+     666,   466,   165,    77,   396,   467,   473,   624,   627,   166,
+      78,   470,   136,   770,   360,     7,     8,   137,   167,   168,
+     169,   471,   170,   771,    79,   173,   176,   576,   361,    80,
+      81,    77,   518,   468,   486,   487,   488,   469,    78,    79,
+     383,   384,    79,   141,    80,   110,   385,    80,    81,   571,
+      79,    77,   520,   572,   522,    80,    81,   142,    78,   146,
+     294,   295,   459,     7,     8,    77,   519,   521,   523,    77,
+     870,   143,    78,   296,   426,    79,    78,   874,   727,   144,
+      80,    81,   728,   536,   537,   538,   387,   388,   292,    77,
+     293,    77,   389,   152,   547,    79,    78,   156,    78,    77,
+      80,    81,   145,    79,     7,     8,    78,   875,    80,   112,
+     554,     7,     8,   557,   729,   559,   560,   561,   730,   563,
+     564,   565,   148,   941,   506,   942,   569,   511,   294,   295,
+     149,    79,   162,     7,     8,   164,    80,    81,   525,   526,
+     527,   296,   429,   585,   186,   320,   321,   159,    77,   190,
+     191,    79,   160,   505,   784,    78,    80,    81,   785,   544,
+     491,   492,    70,   294,   295,    79,    77,   579,   580,    79,
+      80,    81,   178,    78,    80,    81,   296,   508,   180,   969,
+     954,   955,    71,   970,   623,   718,   719,   720,   234,    79,
+     268,    79,   635,   246,    80,    81,    80,    81,   265,   114,
+     247,    68,   632,   248,    80,    81,   578,   578,   374,   249,
+     409,   200,   201,   202,   271,   203,   204,   622,   205,   206,
+     207,   208,   209,   210,   294,   295,   138,   272,    94,    95,
+      96,   211,   273,   212,   213,     7,     8,   296,   626,   214,
+     274,   215,   971,   275,    77,   976,   972,   809,   120,   977,
+     812,    78,   646,    80,    81,   647,   648,   184,   276,   186,
+     697,   277,   188,   189,   190,   191,    79,   280,   216,   978,
+     980,    80,    81,   979,   981,   217,   278,   708,   709,   710,
+     218,   219,   220,   192,   193,   982,   814,   815,   816,   983,
+     221,   222,   223,   984,   287,   224,   279,   985,   184,   185,
+     186,   187,   281,   188,   189,   190,   191,   734,   186,   857,
+     737,   188,   189,   190,   191,   871,   282,   294,   295,   306,
+     865,   283,   866,   867,   192,   193,   291,   986,   225,   226,
+     879,   987,   748,   749,   700,   515,   516,   284,   400,   401,
+     402,   705,   261,   988,    79,   403,   285,   989,   990,    80,
+      81,   301,   991,   765,   296,   665,   184,   185,   186,   187,
+     286,   188,   189,   190,   191,   306,   896,   288,   227,   228,
+     311,   781,   300,    80,    81,   343,   344,   322,   345,   318,
+     294,   346,   192,   193,   347,   348,   349,   350,   323,   347,
+     348,   349,   350,   723,   724,   324,   754,   755,   362,   799,
+     821,   351,   352,   353,   825,   826,   186,   756,   757,   188,
+     189,   190,   191,   789,   294,   295,   184,   836,   186,   187,
+     335,   188,   189,   190,   191,    93,   336,    94,    95,    96,
+     192,   193,    97,   363,   772,   337,   907,   908,   909,   910,
+     961,   962,   192,   193,   967,   968,   954,   955,   338,   786,
+     787,    86,   578,   358,   364,   339,    87,    88,   365,   340,
+      89,    90,   847,   366,   341,    91,    92,   367,   375,   342,
+     356,   376,   368,   852,   393,   377,   378,   380,   382,   386,
+     390,   391,   392,   399,   411,   405,   406,   412,   407,   414,
+     417,   413,   416,   418,   419,   415,   868,   440,   432,   425,
+     433,   434,   444,   435,   446,   436,   437,   438,   453,   454,
+     464,   465,   439,   455,   456,   474,   457,   448,   449,   458,
+     460,   475,   476,   477,   478,   479,   480,   481,   482,   483,
+     484,   485,   489,   490,   494,   498,   496,   499,   500,   501,
+     851,   502,   503,   493,   512,   504,   513,   517,   507,   514,
+     524,   528,   529,   533,   532,   539,   541,   540,   543,   553,
+     542,   546,   548,   549,   545,   550,   551,   906,   552,   869,
+     913,   555,    -2,     1,   917,   918,   919,   556,   558,   562,
+     566,   568,   876,     2,   567,   570,   927,   928,   929,   573,
+     574,   932,   575,   577,   581,     3,     4,     5,   582,     6,
+     586,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,   583,   587,   593,   590,   597,   602,   591,
+     594,   588,   598,   612,   589,   595,   596,   619,   599,   924,
+     600,   601,   620,   613,   618,   621,   614,   995,   996,   629,
+     631,   640,   663,   664,   668,   670,   688,    39,    40,   691,
+     676,   637,   630,   679,   690,   638,   641,   636,   692,   695,
+     639,   642,   693,   694,    41,    42,    43,    44,   649,    45,
+     643,    46,   644,   650,    47,    48,   651,   687,   159,   707,
+     698,   652,   653,   711,   712,   713,   714,   654,   699,   655,
+     656,   657,   658,   661,    49,   610,   715,    50,    51,    52,
+     675,    53,    54,    55,    56,    57,    58,    59,    60,     2,
+     667,   669,   671,   716,    61,    62,   672,    63,    64,   673,
+     674,     3,     4,     5,   677,     6,   678,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,   680,
+     681,   683,   682,   684,   685,   717,   686,   722,   689,   725,
+     696,   736,   743,   744,   701,   745,   746,   735,   747,   702,
+     703,   726,   758,   731,   752,   761,   753,   739,   759,   738,
+     763,   740,   750,    39,    40,   742,   762,   764,   766,   767,
+     741,   768,   769,   773,   774,   779,   782,   780,   783,   788,
+      41,    42,    43,    44,   790,    45,   791,    46,   792,   793,
+      47,    48,   800,   802,   794,   795,   796,   797,   798,   801,
+     803,   804,   805,   806,   807,   813,   808,   810,   818,   811,
+      49,   819,   820,    50,    51,    52,   822,    53,    54,    55,
+      56,    57,    58,    59,    60,   823,   824,   827,   828,   831,
+      61,    62,   837,    63,    64,   832,   838,   829,   830,   839,
+     840,   833,   834,   845,   841,   842,   835,   843,   844,   846,
+     848,   849,   858,   853,   850,   854,   855,   860,   859,   861,
+     862,   863,   864,   872,   873,   877,   878,   880,   882,   883,
+     885,   420,   884,   894,   902,   897,   898,   903,   912,   914,
+     921,   922,   923,   886,   887,   888,   891,   925,   889,   890,
+     892,   893,   926,   900,   899,   901,   904,   905,   935,   944,
+     959,   915,   939,   973,   920,   960,   931,   933,   934,   936,
+     937,   938,   945,   943,   946,   997,   999,   947,   998,  1007,
+     948,   950,   952,   958,   974,   975,  1000,  1001,   994,  1002,
+    1003,  1005,  1004,  1006,  1008,  1009,  1010,  1011,  1012,  1013,
+    1018,   895,   992,  1014,   121,  1015,  1016,     0,  1017,   452,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   472
+};
+
+static const yytype_int16 yycheck[] =
+{
+      27,    28,     0,    30,    31,    32,   211,    34,    35,    36,
+      37,    42,    43,    44,    70,    71,   232,   215,    45,    36,
+      37,   227,     0,   538,   157,   278,   279,   487,   486,    25,
+     488,   540,    25,    89,    29,    30,    29,    30,    77,    29,
+      30,     0,    83,    70,    69,    70,   262,   103,    62,   254,
+      25,   256,    71,    27,   260,    69,   227,    25,    26,    86,
+      87,    88,    89,   796,    91,    92,   162,    77,    77,    77,
+      27,   939,    70,   278,   279,    97,   103,    77,    78,    79,
+      83,   108,    25,    25,    90,    91,    92,    25,    25,   260,
+      97,    97,    29,    30,    62,    49,   142,    83,    57,   157,
+      83,    69,   906,   971,   162,    68,    63,    82,   841,    63,
+      97,    70,    71,    56,   114,   102,   103,    97,    56,   165,
+     120,   160,   375,   164,    87,    62,    15,    25,    26,    18,
+      89,    20,    69,    22,    93,    35,    25,   162,    27,    25,
+      29,    30,   157,   162,   103,   172,    35,   162,   162,   664,
+     160,   160,   160,   167,   168,   148,   162,   124,   125,   157,
+     620,   164,    62,   621,    62,   165,   162,   162,    97,    69,
+     375,    69,   162,    62,   148,   142,    62,    25,   164,   157,
+      69,   164,    97,    69,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   162,    25,    85,    86,   157,   167,
+     168,    25,   161,    25,  1008,  1009,   165,   166,   167,   168,
+     162,   170,   128,   129,    62,   162,   216,   217,   162,     3,
+       4,    69,   138,   139,     8,   162,   162,   227,    25,    62,
+     167,   168,    62,    25,   123,    19,    69,    29,    30,    69,
+      62,    69,    70,    35,   125,   126,   127,    69,    25,   502,
+     503,    25,    29,    30,    82,    83,   472,   163,    35,   163,
+     260,    35,   162,   290,   162,    62,   293,   167,   168,   167,
+     168,   298,    69,   162,    29,    30,   162,   162,   167,   168,
+      35,   167,   168,   163,    25,    62,   313,   314,   315,   163,
+     543,   157,    69,    62,   253,   161,   323,   502,   503,    76,
+      69,    25,   163,    25,    25,    29,    30,   163,    85,    86,
+      87,    35,    89,    35,   162,   371,   372,   450,    25,   167,
+     168,    62,    25,   157,   351,   352,   353,   161,    69,   162,
+     105,   106,   162,   162,   167,   168,   111,   167,   168,   157,
+     162,    62,    25,   161,    25,   167,   168,   162,    69,    25,
+      69,    70,   311,    29,    30,    62,   383,   384,   385,    62,
+     820,   162,    69,    82,    83,   162,    69,   827,   157,   162,
+     167,   168,   161,   400,   401,   402,   105,   106,   157,    62,
+     159,    62,   111,    25,   411,   162,    69,     0,    69,    62,
+     167,   168,   162,   162,    29,    30,    69,    25,   167,   168,
+     427,    29,    30,   430,   157,   432,   433,   434,   161,   436,
+     437,   438,   162,   922,   373,   924,   443,   376,    69,    70,
+     162,   162,    97,    29,    30,    35,   167,   168,   387,   388,
+     389,    82,    83,   460,    66,   134,   135,    97,    62,    71,
+      72,   162,   102,   103,   157,    69,   167,   168,   161,   408,
+     132,   133,   450,    69,    70,   162,    62,   455,   456,   162,
+     167,   168,   162,    69,   167,   168,    82,    83,    25,   157,
+     120,   121,   450,   161,   501,   125,   126,   127,    25,   162,
+     172,   162,   509,    35,   167,   168,   167,   168,    25,   162,
+      35,   450,   509,    35,   167,   168,   455,   456,   704,    35,
+     706,     5,     6,     7,    25,     9,    10,    35,    12,    13,
+      14,    15,    16,    17,    69,    70,    97,    25,    99,   100,
+     101,    25,    25,    27,    28,    29,    30,    82,    83,    33,
+      25,    35,   157,    25,    62,   157,   161,   735,   162,   161,
+     738,    69,   519,   167,   168,   522,   523,    64,    25,    66,
+     577,    25,    69,    70,    71,    72,   162,    27,    62,   157,
+     157,   167,   168,   161,   161,    69,    25,   594,   595,   596,
+      74,    75,    76,    90,    91,   157,   169,   170,   171,   161,
+      84,    85,    86,   157,    35,    89,    25,   161,    64,    65,
+      66,    67,    25,    69,    70,    71,    72,   624,    66,   797,
+     627,    69,    70,    71,    72,   821,    25,    69,    70,    71,
+     808,    25,   810,   811,    90,    91,    27,   157,   122,   123,
+     836,   161,   649,   650,   583,   132,   133,    25,    90,    91,
+      92,   590,   591,   157,   162,    97,    25,   161,   157,   167,
+     168,    27,   161,   670,    82,    83,    64,    65,    66,    67,
+      25,    69,    70,    71,    72,    71,   861,    25,   162,   163,
+     162,   692,    25,   167,   168,    64,    65,   157,    67,   162,
+      69,    70,    90,    91,    78,    79,    80,    81,   159,    78,
+      79,    80,    81,   124,   125,   161,   140,   141,    25,   716,
+     746,    90,    91,    92,   120,   121,    66,   656,   657,    69,
+      70,    71,    72,   701,    69,    70,    64,   763,    66,    67,
+     162,    69,    70,    71,    72,    97,   162,    99,   100,   101,
+      90,    91,   104,    25,   683,   162,   107,   108,   109,   110,
+     135,   136,    90,    91,   143,   144,   120,   121,   162,   698,
+     699,    88,   701,    70,    25,   162,    93,    94,    25,   162,
+      97,    98,   779,    25,   162,   102,   103,   163,    25,   162,
+     162,    70,   163,   790,    25,   162,   162,   162,   162,   162,
+     162,   162,   162,    97,   157,    35,    35,    97,   163,    70,
+      70,   161,   161,   157,   157,   173,   813,    97,   157,   161,
+     157,   157,    25,   157,    25,   157,   157,   157,    25,    35,
+     125,   135,   161,   157,   157,    25,   158,   164,   164,   158,
+     158,    25,    25,    25,    35,    25,    25,    25,    25,    25,
+      25,   162,    25,    25,   162,   158,   162,   158,   158,   158,
+     789,    25,    25,    34,    25,    70,    25,   131,   161,   157,
+      25,    25,    25,    25,   137,    21,   158,    35,    25,   164,
+     158,   157,    25,    25,   161,    25,    25,   884,    25,   818,
+     887,   164,     0,     1,   891,   892,   893,    25,   164,    25,
+      25,    97,   831,    11,   162,   161,   903,   904,   905,   164,
+     164,   912,    97,   159,    35,    23,    24,    25,    35,    27,
+     161,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,   157,   161,   157,    97,   157,    25,    97,
+     159,   135,   157,   161,   134,   159,   159,    35,   157,   898,
+     157,   157,    35,   161,   142,    35,   157,   974,   975,    25,
+      25,    25,    35,    35,    35,    91,    25,    95,    96,    25,
+      97,   157,   161,    97,    97,   157,   161,   164,    97,    25,
+     157,   161,    97,    97,   112,   113,   114,   115,   157,   117,
+     161,   119,   162,   157,   122,   123,   161,   130,    97,    25,
+      69,   157,   157,    25,    35,    25,    35,   161,    76,   162,
+     162,   162,   162,   162,   142,   162,    25,   145,   146,   147,
+     164,   149,   150,   151,   152,   153,   154,   155,   156,    11,
+     161,   161,   161,    90,   162,   163,   161,   165,   166,   161,
+     161,    23,    24,    25,   164,    27,   164,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,   161,
+     161,   157,   161,   161,   161,    25,   161,    25,   162,    25,
+     160,    25,    25,    25,   157,    25,    97,   164,   135,   161,
+     161,   161,   125,   161,    35,    25,    35,   161,    35,   164,
+      97,   164,   162,    95,    96,   164,   164,    25,    97,    25,
+     172,    97,    97,   161,   130,   159,    25,   163,    25,   157,
+     112,   113,   114,   115,   159,   117,   157,   119,   157,   157,
+     122,   123,    97,    97,   161,   161,   161,   161,   161,   161,
+     161,   161,    97,   142,   125,    90,   164,   164,    97,   164,
+     142,   161,   161,   145,   146,   147,   161,   149,   150,   151,
+     152,   153,   154,   155,   156,   161,   161,   161,   161,   157,
+     162,   163,    97,   165,   166,   157,    25,   161,   161,    35,
+      25,   161,   161,    25,   161,   161,   164,   162,   162,    25,
+      25,    25,   162,    25,    27,    25,    25,    25,   161,    25,
+      31,   161,   161,   161,   161,    25,    71,    25,    25,    25,
+     162,    83,   159,   132,    35,    70,    69,    91,    97,   125,
+      25,    25,    32,   161,   159,   161,   159,    27,   162,   161,
+     159,   159,    70,   157,   161,   161,   159,   159,   136,    21,
+      25,   162,   162,    35,   161,    25,   161,   161,   161,   161,
+     161,   161,   157,   161,   157,   136,   136,   161,   135,    71,
+     162,   162,   162,   162,   159,   159,   136,   136,   161,   136,
+     136,   161,   136,   161,   161,   161,   161,   161,   161,   161,
+      35,   860,   969,   161,    37,   161,   161,    -1,   161,   303,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   322
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     1,    11,    23,    24,    25,    27,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    95,
+      96,   112,   113,   114,   115,   117,   119,   122,   123,   142,
+     145,   146,   147,   149,   150,   151,   152,   153,   154,   155,
+     156,   162,   163,   165,   166,   175,   176,   177,   178,   197,
+     205,   206,   207,   208,   209,   212,   162,    62,    69,   162,
+     167,   168,   213,   218,   219,   220,    88,    93,    94,    97,
+      98,   102,   103,    97,    99,   100,   101,   104,   211,    97,
+      97,    97,    97,    97,    25,    25,   219,   219,   162,   219,
+     168,   219,   168,   219,   162,   219,   219,   213,   217,   219,
+     162,   217,   219,   162,   162,   163,   198,   163,   198,   163,
+     198,   163,   198,    25,   219,   162,   163,   163,    97,   211,
+     162,   162,   162,   162,   162,   162,    25,   178,   162,   162,
+      27,    63,    25,    25,    82,   211,     0,    77,   160,    97,
+     102,   103,    97,    25,    35,    69,    76,    85,    86,    87,
+      89,   178,   205,   210,   219,   178,   210,   210,   162,   179,
+      25,   220,   220,   220,    64,    65,    66,    67,    69,    70,
+      71,    72,    90,    91,    25,   219,    25,   219,    25,   219,
+       5,     6,     7,     9,    10,    12,    13,    14,    15,    16,
+      17,    25,    27,    28,    33,    35,    62,    69,    74,    75,
+      76,    84,    85,    86,    89,   122,   123,   162,   163,   178,
+     194,   199,   210,   219,    25,    25,   219,    25,   219,    25,
+     148,   178,    27,   148,   142,   165,    35,    35,    35,    35,
+      15,    18,    20,    22,    25,    27,    35,    85,    86,   123,
+     162,   178,   210,   219,   219,    25,    25,    26,   172,    25,
+      26,    25,    25,    25,    25,    25,    25,    25,    25,    25,
+      27,    25,    25,    25,    25,    25,    25,    35,    25,    25,
+      56,    27,   157,   159,    69,    70,    82,    83,   201,   204,
+      25,    27,   177,   178,    25,   162,    71,   178,   178,   178,
+     178,   162,   178,    90,    91,    92,   162,   219,   162,   195,
+     134,   135,   157,   159,   161,   220,   220,   220,   220,   220,
+     220,   220,   220,   220,   220,   162,   162,   162,   162,   162,
+     162,   162,   162,    64,    65,    67,    70,    78,    79,    80,
+      81,    90,    91,    92,   200,   201,   162,   186,    70,   186,
+      25,    25,    25,    25,    25,    25,    25,   163,   163,    25,
+     178,   205,   206,   207,   209,    25,    70,   162,   162,   179,
+     162,   187,   162,   105,   106,   111,   162,   105,   106,   111,
+     162,   162,   162,    25,    25,    35,   178,   162,   201,    97,
+      90,    91,    92,    97,   201,    35,    35,   163,   207,   209,
+     179,   157,    97,   161,    70,   173,   161,    70,   157,   157,
+      83,   164,   164,   164,   164,   161,    83,   201,   204,    83,
+     201,   204,   157,   157,   157,   157,   157,   157,   157,   161,
+      97,   219,    25,    56,    25,   219,    25,   219,   164,   164,
+      77,   160,   195,    25,    35,   157,   157,   158,   158,   178,
+     158,   219,   219,   219,   125,   135,   157,   161,   157,   161,
+      25,    35,   208,   219,    25,    25,    25,    25,    35,    25,
+      25,    25,    25,    25,    25,   162,   219,   219,   219,    25,
+      25,   132,   133,    34,   162,   188,   162,   189,   158,   158,
+     158,   158,    25,    25,    70,   103,   178,   161,    83,   201,
+     204,   178,    25,    25,   157,   132,   133,   131,    25,   219,
+      25,   219,    25,   219,    25,   178,   178,   178,    25,    25,
+      25,    35,   137,    25,    68,    87,   219,   219,   219,    21,
+      35,   158,   158,    25,   178,   161,   157,   219,    25,    25,
+      25,    25,    25,   164,   219,   164,    25,   219,   164,   219,
+     219,   219,    25,   219,   219,   219,    25,   162,    97,   219,
+     161,   157,   161,   164,   164,    97,   177,   159,   178,   205,
+     205,    35,    35,   157,    35,   219,   161,   161,   135,   134,
+      97,    97,   179,   157,   159,   159,   159,   157,   157,   157,
+     157,   157,    25,   188,   189,   188,   157,   162,   183,   157,
+     162,   184,   161,   161,   157,   124,   125,   142,   142,    35,
+      35,    35,    35,   219,   201,   204,    83,   201,   204,    25,
+     161,    25,   213,   215,   216,   219,   164,   157,   157,   157,
+      25,   161,   161,   161,   162,   196,   196,   196,   196,   157,
+     157,   161,   157,   157,   161,   162,   162,   162,   162,   190,
+     190,   162,   184,    35,    35,    83,   204,   161,    35,   161,
+      91,   161,   161,   161,   161,   164,    97,   164,   164,    97,
+     161,   161,   161,   157,   161,   161,   161,   130,    25,   162,
+      97,    25,    97,    97,    97,    25,   160,   219,    69,    76,
+     178,   157,   161,   161,   162,   178,   162,    25,   219,   219,
+     219,    25,    35,    25,    35,    25,    90,    25,   125,   126,
+     127,   181,    25,   124,   125,    25,   161,   157,   161,   157,
+     161,   161,   189,   188,   219,   164,    25,   219,   164,   161,
+     164,   172,   164,    25,    25,    25,    97,   135,   219,   219,
+     162,   180,    35,    35,   140,   141,   178,   178,   125,    35,
+     190,    25,   164,    97,    25,   219,    97,    25,    97,    97,
+      25,    35,   178,   161,   130,     3,     4,     8,    19,   159,
+     163,   198,    25,    25,   157,   161,   178,   178,   157,   205,
+     159,   157,   157,   157,   161,   161,   161,   161,   161,   219,
+      97,   161,    97,   161,   161,    97,   142,   125,   164,   186,
+     164,   164,   186,    90,   169,   170,   171,   214,    97,   161,
+     161,   210,   161,   161,   161,   120,   121,   161,   161,   161,
+     161,   157,   157,   161,   161,   164,   210,    97,    25,    35,
+      25,   161,   161,   162,   162,    25,    25,   219,    25,    25,
+      27,   178,   219,    25,    25,    25,   180,   186,   162,   161,
+      25,    25,    31,   161,   161,   186,   186,   186,   219,   178,
+     189,   179,   161,   161,   189,    25,   178,    25,    71,   179,
+      25,   180,    25,    25,   159,   162,   161,   159,   161,   162,
+     161,   159,   159,   159,   132,   200,   201,    70,    69,   161,
+     157,   161,    35,    91,   159,   159,   219,   107,   108,   109,
+     110,   191,    97,   219,   125,   162,   192,   219,   219,   219,
+     161,    25,    25,    32,   178,    27,    70,   219,   219,   219,
+     192,   161,   198,   161,   161,   136,   161,   161,   161,   162,
+     185,   184,   184,   161,    21,   157,   157,   161,   162,   193,
+     162,   202,   162,   203,   120,   121,   181,   182,   162,    25,
+      25,   135,   136,   128,   129,   138,   139,   143,   144,   157,
+     161,   157,   161,    35,   159,   159,   157,   161,   157,   161,
+     157,   161,   157,   161,   157,   161,   157,   161,   157,   161,
+     157,   161,   182,   181,   161,   219,   219,   136,   135,   136,
+     136,   136,   136,   136,   136,   161,   161,    71,   161,   161,
+     161,   161,   161,   161,   161,   161,   161,   161,    35,   192,
+     192
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 3:
+#line 651 "bfin-parse.y"
+    {
+	  insn = (yyvsp[(1) - (1)].instr);
+	  if (insn == (INSTR_T) 0)
+	    return NO_INSN_GENERATED;
+	  else if (insn == (INSTR_T) - 1)
+	    return SEMANTIC_ERROR;
+	  else
+	    return INSN_GENERATED;
+	}
+    break;
+
+  case 5:
+#line 665 "bfin-parse.y"
+    {
+	  if (((yyvsp[(1) - (6)].instr)->value & 0xf800) == 0xc000)
+	    {
+	      if (is_group1 ((yyvsp[(3) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr));
+	      else if (is_group2 ((yyvsp[(3) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr));
+	      else
+		return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group");
+	    }
+	  else if (((yyvsp[(3) - (6)].instr)->value & 0xf800) == 0xc000)
+	    {
+	      if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr));
+	      else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr));
+	      else
+		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group");
+	    }
+	  else if (((yyvsp[(5) - (6)].instr)->value & 0xf800) == 0xc000)
+	    {
+	      if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(3) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr));
+	      else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(3) - (6)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr));
+	      else
+		return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group");
+	    }
+	  else
+	    error ("\nIllegal Multi Issue Construct, at least any one of the slot must be DSP32 instruction group\n");
+	}
+    break;
+
+  case 6:
+#line 698 "bfin-parse.y"
+    {
+	  if (((yyvsp[(1) - (4)].instr)->value & 0xf800) == 0xc000)
+	    {
+	      if (is_group1 ((yyvsp[(3) - (4)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0);
+	      else if (is_group2 ((yyvsp[(3) - (4)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr));
+	      else
+		return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group");
+	    }
+	  else if (((yyvsp[(3) - (4)].instr)->value & 0xf800) == 0xc000)
+	    {
+	      if (is_group1 ((yyvsp[(1) - (4)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0);
+	      else if (is_group2 ((yyvsp[(1) - (4)].instr)))
+		(yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr));
+	      else
+		return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group");
+	    }
+	  else if (is_group1 ((yyvsp[(1) - (4)].instr)) && is_group2 ((yyvsp[(3) - (4)].instr)))
+	      (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr));
+	  else if (is_group2 ((yyvsp[(1) - (4)].instr)) && is_group1 ((yyvsp[(3) - (4)].instr)))
+	    (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr));
+	  else
+	    return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group");
+	}
+    break;
+
+  case 7:
+#line 725 "bfin-parse.y"
+    {
+	(yyval.instr) = 0;
+	yyerror ("");
+	yyerrok;
+	}
+    break;
+
+  case 8:
+#line 736 "bfin-parse.y"
+    {
+	  (yyval.instr) = DSP32MAC (3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0);
+	}
+    break;
+
+  case 9:
+#line 740 "bfin-parse.y"
+    {
+	  int op0, op1;
+	  int w0 = 0, w1 = 0;
+	  int h00, h10, h01, h11;
+
+	  if (check_macfunc_option (&(yyvsp[(1) - (2)].macfunc), &(yyvsp[(2) - (2)].mod)) < 0)
+	    return yyerror ("bad option");
+
+	  if ((yyvsp[(1) - (2)].macfunc).n == 0)
+	    {
+	      if ((yyvsp[(2) - (2)].mod).MM)
+		return yyerror ("(m) not allowed with a0 unit");
+	      op1 = 3;
+	      op0 = (yyvsp[(1) - (2)].macfunc).op;
+	      w1 = 0;
+              w0 = (yyvsp[(1) - (2)].macfunc).w;
+	      h00 = IS_H ((yyvsp[(1) - (2)].macfunc).s0);
+              h10 = IS_H ((yyvsp[(1) - (2)].macfunc).s1);
+	      h01 = h11 = 0;
+	    }
+	  else
+	    {
+	      op1 = (yyvsp[(1) - (2)].macfunc).op;
+	      op0 = 3;
+	      w1 = (yyvsp[(1) - (2)].macfunc).w;
+              w0 = 0;
+	      h00 = h10 = 0;
+	      h01 = IS_H ((yyvsp[(1) - (2)].macfunc).s0);
+              h11 = IS_H ((yyvsp[(1) - (2)].macfunc).s1);
+	    }
+	  (yyval.instr) = DSP32MAC (op1, (yyvsp[(2) - (2)].mod).MM, (yyvsp[(2) - (2)].mod).mod, w1, (yyvsp[(1) - (2)].macfunc).P, h01, h11, h00, h10,
+			 &(yyvsp[(1) - (2)].macfunc).dst, op0, &(yyvsp[(1) - (2)].macfunc).s0, &(yyvsp[(1) - (2)].macfunc).s1, w0);
+	}
+    break;
+
+  case 10:
+#line 778 "bfin-parse.y"
+    {
+	  Register *dst;
+
+	  if (check_macfuncs (&(yyvsp[(1) - (5)].macfunc), &(yyvsp[(2) - (5)].mod), &(yyvsp[(4) - (5)].macfunc), &(yyvsp[(5) - (5)].mod)) < 0)
+	    return -1;
+	  notethat ("assign_macfunc (.), assign_macfunc (.)\n");
+
+	  if ((yyvsp[(1) - (5)].macfunc).w)
+	    dst = &(yyvsp[(1) - (5)].macfunc).dst;
+	  else
+	    dst = &(yyvsp[(4) - (5)].macfunc).dst;
+
+	  (yyval.instr) = DSP32MAC ((yyvsp[(1) - (5)].macfunc).op, (yyvsp[(2) - (5)].mod).MM, (yyvsp[(5) - (5)].mod).mod, (yyvsp[(1) - (5)].macfunc).w, (yyvsp[(1) - (5)].macfunc).P,
+			 IS_H ((yyvsp[(1) - (5)].macfunc).s0),  IS_H ((yyvsp[(1) - (5)].macfunc).s1), IS_H ((yyvsp[(4) - (5)].macfunc).s0), IS_H ((yyvsp[(4) - (5)].macfunc).s1),
+			 dst, (yyvsp[(4) - (5)].macfunc).op, &(yyvsp[(1) - (5)].macfunc).s0, &(yyvsp[(1) - (5)].macfunc).s1, (yyvsp[(4) - (5)].macfunc).w);
+	}
+    break;
+
+  case 11:
+#line 798 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: DISALGNEXCPT\n");
+	  (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3);
+	}
+    break;
+
+  case 12:
+#line 803 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = ( A0 += A1 )\n");
+	      (yyval.instr) = DSP32ALU (11, 0, 0, &(yyvsp[(1) - (6)].reg), &reg7, &reg7, 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 13:
+#line 813 "bfin-parse.y"
+    {
+	  if (!IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs_half = ( A0 += A1 )\n");
+	      (yyval.instr) = DSP32ALU (11, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &reg7, &reg7, 0, 0, 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 14:
+#line 823 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
+	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0);
+	}
+    break;
+
+  case 15:
+#line 828 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n");
+	  (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2);
+	}
+    break;
+
+  case 16:
+#line 834 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (REG_SAME ((yyvsp[(2) - (17)].reg), (yyvsp[(4) - (17)].reg)))
+	    return yyerror ("Illegal dest register combination");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(13) - (17)].reg), (yyvsp[(15) - (17)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16P (dregs_pair , dregs_pair ) (aligndir)\n");
+	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[(2) - (17)].reg), &(yyvsp[(4) - (17)].reg), &(yyvsp[(9) - (17)].reg), &(yyvsp[(13) - (17)].reg), (yyvsp[(17) - (17)].r0).r0, 0, 0);
+	    }
+	}
+    break;
+
+  case 17:
+#line 852 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (REG_SAME ((yyvsp[(2) - (17)].reg), (yyvsp[(4) - (17)].reg)))
+	    return yyerror ("Illegal dest register combination");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(13) - (17)].reg), (yyvsp[(15) - (17)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: (dregs , dregs ) = BYTEOP16M (dregs_pair , dregs_pair ) (aligndir)\n");
+	      (yyval.instr) = DSP32ALU (21, 0, &(yyvsp[(2) - (17)].reg), &(yyvsp[(4) - (17)].reg), &(yyvsp[(9) - (17)].reg), &(yyvsp[(13) - (17)].reg), (yyvsp[(17) - (17)].r0).r0, 0, 1);
+	    }
+	}
+    break;
+
+  case 18:
+#line 869 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(2) - (11)].reg)) || !IS_DREG ((yyvsp[(4) - (11)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (REG_SAME ((yyvsp[(2) - (11)].reg), (yyvsp[(4) - (11)].reg)))
+	    return yyerror ("Illegal dest register combination");
+	  else if (!valid_dreg_pair (&(yyvsp[(8) - (11)].reg), (yyvsp[(10) - (11)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: (dregs , dregs ) = BYTEUNPACK dregs_pair (aligndir)\n");
+	      (yyval.instr) = DSP32ALU (24, 0, &(yyvsp[(2) - (11)].reg), &(yyvsp[(4) - (11)].reg), &(yyvsp[(8) - (11)].reg), 0, (yyvsp[(11) - (11)].r0).r0, 0, 1);
+	    }
+	}
+    break;
+
+  case 19:
+#line 883 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(2) - (11)].reg), (yyvsp[(4) - (11)].reg)))
+	    return yyerror ("Illegal dest register combination");
+
+	  if (IS_DREG ((yyvsp[(2) - (11)].reg)) && IS_DREG ((yyvsp[(4) - (11)].reg)) && IS_DREG ((yyvsp[(8) - (11)].reg)))
+	    {
+	      notethat ("dsp32alu: (dregs , dregs ) = SEARCH dregs (searchmod)\n");
+	      (yyval.instr) = DSP32ALU (13, 0, &(yyvsp[(2) - (11)].reg), &(yyvsp[(4) - (11)].reg), &(yyvsp[(8) - (11)].reg), 0, 0, 0, (yyvsp[(10) - (11)].r0).r0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 20:
+#line 897 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(7) - (11)].reg)))
+	    return yyerror ("Illegal dest register combination");
+
+	  if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = A1.l + A1.h, dregs = A0.l + A0.h  \n");
+	      (yyval.instr) = DSP32ALU (12, 0, &(yyvsp[(1) - (11)].reg), &(yyvsp[(7) - (11)].reg), &reg7, &reg7, 0, 0, 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 21:
+#line 912 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (12)].reg), (yyvsp[(7) - (12)].reg)))
+	    return yyerror ("Resource conflict in dest reg");
+
+	  if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg))
+	      && IS_A1 ((yyvsp[(9) - (12)].reg)) && !IS_A1 ((yyvsp[(11) - (12)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = A1 + A0 , dregs = A1 - A0 (amod1)\n");
+	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &reg7, &reg7, (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 0);
+
+	    }
+	  else if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg))
+		   && !IS_A1 ((yyvsp[(9) - (12)].reg)) && IS_A1 ((yyvsp[(11) - (12)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = A0 + A1 , dregs = A0 - A1 (amod1)\n");
+	      (yyval.instr) = DSP32ALU (17, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &reg7, &reg7, (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 22:
+#line 934 "bfin-parse.y"
+    {
+	  if ((yyvsp[(4) - (12)].r0).r0 == (yyvsp[(10) - (12)].r0).r0)
+	    return yyerror ("Operators must differ");
+
+	  if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(3) - (12)].reg)) && IS_DREG ((yyvsp[(5) - (12)].reg))
+	      && REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) && REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = dregs + dregs,"
+		       "dregs = dregs - dregs (amod1)\n");
+	      (yyval.instr) = DSP32ALU (4, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, 2);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 23:
+#line 952 "bfin-parse.y"
+    {
+	  if (!REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) || !REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg)))
+	    return yyerror ("Differing source registers");
+
+	  if (!IS_DREG ((yyvsp[(1) - (12)].reg)) || !IS_DREG ((yyvsp[(3) - (12)].reg)) || !IS_DREG ((yyvsp[(5) - (12)].reg)) || !IS_DREG ((yyvsp[(7) - (12)].reg)))
+	    return yyerror ("Dregs expected");
+
+	  if (REG_SAME ((yyvsp[(1) - (12)].reg), (yyvsp[(7) - (12)].reg)))
+	    return yyerror ("Resource conflict in dest reg");
+
+	  if ((yyvsp[(4) - (12)].r0).r0 == 1 && (yyvsp[(10) - (12)].r0).r0 == 2)
+	    {
+	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
+	      (yyval.instr) = DSP32ALU (1, 1, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, (yyvsp[(12) - (12)].modcodes).r0);
+	    }
+	  else if ((yyvsp[(4) - (12)].r0).r0 == 0 && (yyvsp[(10) - (12)].r0).r0 == 3)
+	    {
+	      notethat ("dsp32alu:  dregs = dregs .|. dregs , dregs = dregs .|. dregs (amod2)\n");
+	      (yyval.instr) = DSP32ALU (1, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(7) - (12)].reg), &(yyvsp[(3) - (12)].reg), &(yyvsp[(5) - (12)].reg), (yyvsp[(12) - (12)].modcodes).s0, (yyvsp[(12) - (12)].modcodes).x0, (yyvsp[(12) - (12)].modcodes).r0);
+	    }
+	  else
+	    return yyerror ("Bar operand mismatch");
+	}
+    break;
+
+  case 24:
+#line 977 "bfin-parse.y"
+    {
+	  int op;
+
+	  if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg)))
+	    {
+	      if ((yyvsp[(5) - (5)].r0).r0)
+		{
+		  notethat ("dsp32alu: dregs = ABS dregs (v)\n");
+		  op = 6;
+		}
+	      else
+		{
+		  /* Vector version of ABS.  */
+		  notethat ("dsp32alu: dregs = ABS dregs\n");
+		  op = 7;
+		}
+	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, 0, 0, 2);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 25:
+#line 999 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: Ax = ABS Ax\n");
+	  (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, &reg7, &reg7, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg)));
+	}
+    break;
+
+  case 26:
+#line 1004 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("dsp32alu: A0.l = reg_half\n");
+	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("A0.l = Rx.l expected");
+	}
+    break;
+
+  case 27:
+#line 1014 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("dsp32alu: A1.l = reg_half\n");
+	      (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2);
+	    }
+	  else
+	    return yyerror ("A1.l = Rx.l expected");
+	}
+    break;
+
+  case 28:
+#line 1025 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = ALIGN8 (dregs , dregs )\n");
+	      (yyval.instr) = DSP32SHIFT (13, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), (yyvsp[(3) - (8)].r0).r0, 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 29:
+#line 1036 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (13)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
+	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, 0, (yyvsp[(13) - (13)].modcodes).r0);
+	    }
+	}
+    break;
+
+  case 30:
+#line 1050 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (12)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (!valid_dreg_pair (&(yyvsp[(5) - (12)].reg), (yyvsp[(7) - (12)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (12)].reg), (yyvsp[(11) - (12)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: dregs = BYTEOP1P (dregs_pair , dregs_pair ) (T)\n");
+	      (yyval.instr) = DSP32ALU (20, 0, 0, &(yyvsp[(1) - (12)].reg), &(yyvsp[(5) - (12)].reg), &(yyvsp[(9) - (12)].reg), 0, 0, 0);
+	    }
+	}
+    break;
+
+  case 31:
+#line 1066 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (13)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
+	      (yyval.instr) = DSP32ALU (22, (yyvsp[(13) - (13)].modcodes).r0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, (yyvsp[(13) - (13)].modcodes).x0, (yyvsp[(13) - (13)].modcodes).aop);
+	    }
+	}
+    break;
+
+  case 32:
+#line 1082 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (13)].reg)))
+	    return yyerror ("Dregs expected");
+	  else if (!valid_dreg_pair (&(yyvsp[(5) - (13)].reg), (yyvsp[(7) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(9) - (13)].reg), (yyvsp[(11) - (13)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: dregs = BYTEOP3P (dregs_pair , dregs_pair ) (b3_op)\n");
+	      (yyval.instr) = DSP32ALU (23, (yyvsp[(13) - (13)].modcodes).x0, 0, &(yyvsp[(1) - (13)].reg), &(yyvsp[(5) - (13)].reg), &(yyvsp[(9) - (13)].reg), (yyvsp[(13) - (13)].modcodes).s0, 0, 0);
+	    }
+	}
+    break;
+
+  case 33:
+#line 1097 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = BYTEPACK (dregs , dregs )\n");
+	      (yyval.instr) = DSP32ALU (24, 0, 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(5) - (8)].reg), &(yyvsp[(7) - (8)].reg), 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 34:
+#line 1109 "bfin-parse.y"
+    {
+	  if (IS_HCOMPL ((yyvsp[(1) - (17)].reg), (yyvsp[(3) - (17)].reg)) && IS_HCOMPL ((yyvsp[(7) - (17)].reg), (yyvsp[(14) - (17)].reg)) && IS_HCOMPL ((yyvsp[(10) - (17)].reg), (yyvsp[(17) - (17)].reg)))
+	    {
+	      notethat ("dsp32alu:	dregs_hi = dregs_lo ="
+		       "SIGN (dregs_hi) * dregs_hi + "
+		       "SIGN (dregs_lo) * dregs_lo \n");
+
+		(yyval.instr) = DSP32ALU (12, 0, 0, &(yyvsp[(1) - (17)].reg), &(yyvsp[(7) - (17)].reg), &(yyvsp[(10) - (17)].reg), 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 35:
+#line 1122 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	    {
+	      if ((yyvsp[(6) - (6)].modcodes).aop == 0)
+		{
+	          /* No saturation flag specified, generate the 16 bit variant.  */
+		  notethat ("COMP3op: dregs = dregs +- dregs\n");
+		  (yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(4) - (6)].r0).r0);
+		}
+	      else
+		{
+		 /* Saturation flag specified, generate the 32 bit variant.  */
+                 notethat ("dsp32alu: dregs = dregs +- dregs (amod1)\n");
+                 (yyval.instr) = DSP32ALU (4, 0, 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, (yyvsp[(4) - (6)].r0).r0);
+		}
+	    }
+	  else
+	    if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)) && (yyvsp[(4) - (6)].r0).r0 == 0)
+	      {
+		notethat ("COMP3op: pregs = pregs + pregs\n");
+		(yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 5);
+	      }
+	    else
+	      return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 36:
+#line 1148 "bfin-parse.y"
+    {
+	  int op;
+
+	  if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg)))
+	    {
+	      if ((yyvsp[(9) - (9)].r0).r0)
+		op = 6;
+	      else
+		op = 7;
+
+	      notethat ("dsp32alu: dregs = {MIN|MAX} (dregs, dregs)\n");
+	      (yyval.instr) = DSP32ALU (op, 0, 0, &(yyvsp[(1) - (9)].reg), &(yyvsp[(5) - (9)].reg), &(yyvsp[(7) - (9)].reg), 0, 0, (yyvsp[(3) - (9)].r0).r0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 37:
+#line 1166 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: Ax = - Ax\n");
+	  (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, &reg7, &reg7, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg)));
+	}
+    break;
+
+  case 38:
+#line 1171 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n");
+	  (yyval.instr) = DSP32ALU (2 | (yyvsp[(4) - (6)].r0).r0, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg),
+			 (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, HL2 ((yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg)));
+	}
+    break;
+
+  case 39:
+#line 1177 "bfin-parse.y"
+    {
+	  if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 0 && !REG_SAME ((yyvsp[(1) - (3)].reg), (yyvsp[(2) - (3)].reg)))
+	    {
+	      notethat ("dsp32alu: A1 = A0 = 0\n");
+	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 0, 0, 2);
+	    }
+	  else
+	    return yyerror ("Bad value, 0 expected");
+	}
+    break;
+
+  case 40:
+#line 1189 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(2) - (5)].reg)))
+	    {
+	      notethat ("dsp32alu: Ax = Ax (S)\n");
+	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 1, 0, IS_A1 ((yyvsp[(1) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Registers must be equal");
+	}
+    break;
+
+  case 41:
+#line 1200 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs_half = dregs (RND)\n");
+	      (yyval.instr) = DSP32ALU (12, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 0, 0, 0, 3);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 42:
+#line 1211 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs_half = dregs (+-) dregs (RND12)\n");
+	      (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[(1) - (8)].reg)), 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(3) - (8)].reg), &(yyvsp[(5) - (8)].reg), 0, 0, (yyvsp[(4) - (8)].r0).r0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 43:
+#line 1222 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs_half = dregs -+ dregs (RND20)\n");
+	      (yyval.instr) = DSP32ALU (5, IS_H ((yyvsp[(1) - (8)].reg)), 0, &(yyvsp[(1) - (8)].reg), &(yyvsp[(3) - (8)].reg), &(yyvsp[(5) - (8)].reg), 0, 1, (yyvsp[(4) - (8)].r0).r0 | 2);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 44:
+#line 1233 "bfin-parse.y"
+    {
+	  if (!REG_SAME ((yyvsp[(1) - (2)].reg), (yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("dsp32alu: An = Am\n");
+	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, IS_A1 ((yyvsp[(1) - (2)].reg)), 0, 3);
+	    }
+	  else
+	    return yyerror ("Accu reg arguments must differ");
+	}
+    break;
+
+  case 45:
+#line 1244 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("dsp32alu: An = dregs\n");
+	      (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(2) - (2)].reg), 0, 1, 0, IS_A1 ((yyvsp[(1) - (2)].reg)) << 1);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 46:
+#line 1255 "bfin-parse.y"
+    {
+	  if (!IS_H ((yyvsp[(3) - (4)].reg)))
+	    {
+	      if ((yyvsp[(1) - (4)].reg).regno == REG_A0x && IS_DREG ((yyvsp[(3) - (4)].reg)))
+		{
+		  notethat ("dsp32alu: A0.x = dregs_lo\n");
+		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(3) - (4)].reg), 0, 0, 0, 1);
+		}
+	      else if ((yyvsp[(1) - (4)].reg).regno == REG_A1x && IS_DREG ((yyvsp[(3) - (4)].reg)))
+		{
+		  notethat ("dsp32alu: A1.x = dregs_lo\n");
+		  (yyval.instr) = DSP32ALU (9, 0, 0, 0, &(yyvsp[(3) - (4)].reg), 0, 0, 0, 3);
+		}
+	      else if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg)))
+		{
+		  notethat ("ALU2op: dregs = dregs_lo\n");
+		  (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(3) - (4)].reg), 10 | ((yyvsp[(4) - (4)].r0).r0 ? 0: 1));
+		}
+	      else
+	        return yyerror ("Register mismatch");
+	    }
+	  else
+	    return yyerror ("Low reg expected");
+	}
+    break;
+
+  case 47:
+#line 1281 "bfin-parse.y"
+    {
+	  notethat ("LDIMMhalf: pregs_half = imm16\n");
+
+	  if (!IS_DREG ((yyvsp[(1) - (3)].reg)) && !IS_PREG ((yyvsp[(1) - (3)].reg)) && !IS_IREG ((yyvsp[(1) - (3)].reg))
+	      && !IS_MREG ((yyvsp[(1) - (3)].reg)) && !IS_BREG ((yyvsp[(1) - (3)].reg)) && !IS_LREG ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Wrong register for load immediate");
+
+	  if (!IS_IMM ((yyvsp[(3) - (3)].expr), 16) && !IS_UIMM ((yyvsp[(3) - (3)].expr), 16))
+	    return yyerror ("Constant out of range");
+
+	  (yyval.instr) = LDIMMHALF_R (&(yyvsp[(1) - (3)].reg), IS_H ((yyvsp[(1) - (3)].reg)), 0, 0, (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 48:
+#line 1295 "bfin-parse.y"
+    {
+	  notethat ("dsp32alu: An = 0\n");
+
+	  if (imm7 ((yyvsp[(2) - (2)].expr)) != 0)
+	    return yyerror ("0 expected");
+
+	  (yyval.instr) = DSP32ALU (8, 0, 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(1) - (2)].reg)));
+	}
+    break;
+
+  case 49:
+#line 1305 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (4)].reg)) && !IS_PREG ((yyvsp[(1) - (4)].reg)) && !IS_IREG ((yyvsp[(1) - (4)].reg))
+	      && !IS_MREG ((yyvsp[(1) - (4)].reg)) && !IS_BREG ((yyvsp[(1) - (4)].reg)) && !IS_LREG ((yyvsp[(1) - (4)].reg)))
+	    return yyerror ("Wrong register for load immediate");
+
+	  if ((yyvsp[(4) - (4)].r0).r0 == 0)
+	    {
+	      /* 7 bit immediate value if possible.
+		 We will check for that constant value for efficiency
+		 If it goes to reloc, it will be 16 bit.  */
+	      if (IS_CONST ((yyvsp[(3) - (4)].expr)) && IS_IMM ((yyvsp[(3) - (4)].expr), 7) && IS_DREG ((yyvsp[(1) - (4)].reg)))
+		{
+		  notethat ("COMPI2opD: dregs = imm7 (x) \n");
+		  (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (4)].reg), imm7 ((yyvsp[(3) - (4)].expr)), 0);
+		}
+	      else if (IS_CONST ((yyvsp[(3) - (4)].expr)) && IS_IMM ((yyvsp[(3) - (4)].expr), 7) && IS_PREG ((yyvsp[(1) - (4)].reg)))
+		{
+		  notethat ("COMPI2opP: pregs = imm7 (x)\n");
+		  (yyval.instr) = COMPI2OPP (&(yyvsp[(1) - (4)].reg), imm7 ((yyvsp[(3) - (4)].expr)), 0);
+		}
+	      else
+		{
+		  if (IS_CONST ((yyvsp[(3) - (4)].expr)) && !IS_IMM ((yyvsp[(3) - (4)].expr), 16))
+		    return yyerror ("Immediate value out of range");
+
+		  notethat ("LDIMMhalf: regs = luimm16 (x)\n");
+		  /* reg, H, S, Z.   */
+		  (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[(1) - (4)].reg), 0, 1, 0, (yyvsp[(3) - (4)].expr));
+		}
+	    }
+	  else
+	    {
+	      /* (z) There is no 7 bit zero extended instruction.
+	      If the expr is a relocation, generate it.   */
+
+	      if (IS_CONST ((yyvsp[(3) - (4)].expr)) && !IS_UIMM ((yyvsp[(3) - (4)].expr), 16))
+		return yyerror ("Immediate value out of range");
+
+	      notethat ("LDIMMhalf: regs = luimm16 (x)\n");
+	      /* reg, H, S, Z.  */
+	      (yyval.instr) = LDIMMHALF_R5 (&(yyvsp[(1) - (4)].reg), 0, 0, 1, (yyvsp[(3) - (4)].expr));
+	    }
+	}
+    break;
+
+  case 50:
+#line 1350 "bfin-parse.y"
+    {
+	  if (IS_H ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Low reg expected");
+
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_A0x)
+	    {
+	      notethat ("dsp32alu: dregs_lo = A0.x\n");
+	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[(1) - (3)].reg), &reg7, &reg7, 0, 0, 0);
+	    }
+	  else if (IS_DREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_A1x)
+	    {
+	      notethat ("dsp32alu: dregs_lo = A1.x\n");
+	      (yyval.instr) = DSP32ALU (10, 0, 0, &(yyvsp[(1) - (3)].reg), &reg7, &reg7, 0, 0, 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 51:
+#line 1369 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	    {
+	      notethat ("dsp32alu: dregs = dregs .|. dregs (amod0)\n");
+	      (yyval.instr) = DSP32ALU (0, 0, 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, (yyvsp[(6) - (6)].modcodes).x0, (yyvsp[(4) - (6)].r0).r0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 52:
+#line 1380 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("ALU2op: dregs = dregs_byte\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(3) - (4)].reg), 12 | ((yyvsp[(4) - (4)].r0).r0 ? 0: 1));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 53:
+#line 1391 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg)))
+	    {
+	      notethat ("dsp32alu: A1 = ABS A1 , A0 = ABS A0\n");
+	      (yyval.instr) = DSP32ALU (16, 0, 0, 0, &reg7, &reg7, 0, 0, 3);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 54:
+#line 1402 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg)))
+	    {
+	      notethat ("dsp32alu: A1 = - A1 , A0 = - A0\n");
+	      (yyval.instr) = DSP32ALU (14, 0, 0, 0, &reg7, &reg7, 0, 0, 3);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 55:
+#line 1413 "bfin-parse.y"
+    {
+	  if (!IS_A1 ((yyvsp[(1) - (3)].reg)) && IS_A1 ((yyvsp[(2) - (3)].reg)))
+	    {
+	      notethat ("dsp32alu: A0 -= A1\n");
+	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, &reg7, &reg7, (yyvsp[(3) - (3)].r0).r0, 0, 3);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 56:
+#line 1424 "bfin-parse.y"
+    {
+	  if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4)
+	    {
+	      notethat ("dagMODik: iregs -= 4\n");
+	      (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 3);
+	    }
+	  else if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 2)
+	    {
+	      notethat ("dagMODik: iregs -= 2\n");
+	      (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 1);
+	    }
+	  else
+	    return yyerror ("Register or value mismatch");
+	}
+    break;
+
+  case 57:
+#line 1440 "bfin-parse.y"
+    {
+	  if (IS_IREG ((yyvsp[(1) - (6)].reg)) && IS_MREG ((yyvsp[(3) - (6)].reg)))
+	    {
+	      notethat ("dagMODim: iregs += mregs (opt_brev)\n");
+	      /* i, m, op, br.  */
+	      (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 0, 1);
+	    }
+	  else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)))
+	    {
+	      notethat ("PTR2op: pregs += pregs (BREV )\n");
+	      (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 5);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 58:
+#line 1457 "bfin-parse.y"
+    {
+	  if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("dagMODim: iregs -= mregs\n");
+	      (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 1, 0);
+	    }
+	  else if (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_PREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("PTR2op: pregs -= pregs\n");
+	      (yyval.instr) = PTR2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 59:
+#line 1473 "bfin-parse.y"
+    {
+	  if (!IS_A1 ((yyvsp[(1) - (4)].reg)) && IS_A1 ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("dsp32alu: A0 += A1 (W32)\n");
+	      (yyval.instr) = DSP32ALU (11, 0, 0, 0, &reg7, &reg7, (yyvsp[(4) - (4)].r0).r0, 0, 2);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 60:
+#line 1484 "bfin-parse.y"
+    {
+	  if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("dagMODim: iregs += mregs\n");
+	      (yyval.instr) = DAGMODIM (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0, 0);
+	    }
+	  else
+	    return yyerror ("iregs += mregs expected");
+	}
+    break;
+
+  case 61:
+#line 1495 "bfin-parse.y"
+    {
+	  if (IS_IREG ((yyvsp[(1) - (3)].reg)))
+	    {
+	      if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4)
+		{
+		  notethat ("dagMODik: iregs += 4\n");
+		  (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 2);
+		}
+	      else if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 2)
+		{
+		  notethat ("dagMODik: iregs += 2\n");
+		  (yyval.instr) = DAGMODIK (&(yyvsp[(1) - (3)].reg), 0);
+		}
+	      else
+		return yyerror ("iregs += [ 2 | 4 ");
+	    }
+	  else if (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_IMM ((yyvsp[(3) - (3)].expr), 7))
+	    {
+	      notethat ("COMPI2opP: pregs += imm7\n");
+	      (yyval.instr) = COMPI2OPP (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1);
+	    }
+	  else if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_IMM ((yyvsp[(3) - (3)].expr), 7))
+	    {
+	      notethat ("COMPI2opD: dregs += imm7\n");
+	      (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1);
+	    }
+	  else if ((IS_DREG ((yyvsp[(1) - (3)].reg)) || IS_PREG ((yyvsp[(1) - (3)].reg))) && IS_CONST ((yyvsp[(3) - (3)].expr)))
+	    return yyerror ("Immediate value out of range");
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 62:
+#line 1528 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("ALU2op: dregs *= dregs\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 3);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 63:
+#line 1539 "bfin-parse.y"
+    {
+	  if (!valid_dreg_pair (&(yyvsp[(3) - (11)].reg), (yyvsp[(5) - (11)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else if (!valid_dreg_pair (&(yyvsp[(7) - (11)].reg), (yyvsp[(9) - (11)].expr)))
+	    return yyerror ("Bad dreg pair");
+	  else
+	    {
+	      notethat ("dsp32alu: SAA (dregs_pair , dregs_pair ) (aligndir)\n");
+	      (yyval.instr) = DSP32ALU (18, 0, 0, 0, &(yyvsp[(3) - (11)].reg), &(yyvsp[(7) - (11)].reg), (yyvsp[(11) - (11)].r0).r0, 0, 0);
+	    }
+	}
+    break;
+
+  case 64:
+#line 1552 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(2) - (11)].reg)) && REG_SAME ((yyvsp[(7) - (11)].reg), (yyvsp[(8) - (11)].reg)) && !REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(7) - (11)].reg)))
+	    {
+	      notethat ("dsp32alu: A1 = A1 (S) , A0 = A0 (S)\n");
+	      (yyval.instr) = DSP32ALU (8, 0, 0, 0, &reg7, &reg7, 1, 0, 2);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 65:
+#line 1563 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(4) - (9)].reg)) && IS_DREG ((yyvsp[(6) - (9)].reg))
+	      && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg)))
+	    {
+	      if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 1)
+		{
+		  notethat ("ALU2op: dregs = (dregs + dregs) << 1\n");
+		  (yyval.instr) = ALU2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 4);
+		}
+	      else if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 2)
+		{
+		  notethat ("ALU2op: dregs = (dregs + dregs) << 2\n");
+		  (yyval.instr) = ALU2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 5);
+		}
+	      else
+		return yyerror ("Bad shift value");
+	    }
+	  else if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(4) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg))
+		   && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg)))
+	    {
+	      if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 1)
+		{
+		  notethat ("PTR2op: pregs = (pregs + pregs) << 1\n");
+		  (yyval.instr) = PTR2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 6);
+		}
+	      else if (EXPR_VALUE ((yyvsp[(9) - (9)].expr)) == 2)
+		{
+		  notethat ("PTR2op: pregs = (pregs + pregs) << 2\n");
+		  (yyval.instr) = PTR2OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(6) - (9)].reg), 7);
+		}
+	      else
+		return yyerror ("Bad shift value");
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 66:
+#line 1602 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("COMP3op: dregs = dregs | dregs\n");
+	      (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 3);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 67:
+#line 1612 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("COMP3op: dregs = dregs ^ dregs\n");
+	      (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 4);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 68:
+#line 1622 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(3) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg)))
+	    {
+	      if (EXPR_VALUE ((yyvsp[(8) - (9)].expr)) == 1)
+		{
+		  notethat ("COMP3op: pregs = pregs + (pregs << 1)\n");
+		  (yyval.instr) = COMP3OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(3) - (9)].reg), &(yyvsp[(6) - (9)].reg), 6);
+		}
+	      else if (EXPR_VALUE ((yyvsp[(8) - (9)].expr)) == 2)
+		{
+		  notethat ("COMP3op: pregs = pregs + (pregs << 2)\n");
+		  (yyval.instr) = COMP3OP (&(yyvsp[(1) - (9)].reg), &(yyvsp[(3) - (9)].reg), &(yyvsp[(6) - (9)].reg), 7);
+		}
+	      else
+		  return yyerror ("Bad shift value");
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 69:
+#line 1642 "bfin-parse.y"
+    {
+	  if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1)
+	    {
+	      notethat ("CCflag: CC = A0 == A1\n");
+	      (yyval.instr) = CCFLAG (0, 0, 5, 0, 0);
+	    }
+	  else
+	    return yyerror ("AREGs are in bad order or same");
+	}
+    break;
+
+  case 70:
+#line 1652 "bfin-parse.y"
+    {
+	  if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1)
+	    {
+	      notethat ("CCflag: CC = A0 < A1\n");
+	      (yyval.instr) = CCFLAG (0, 0, 6, 0, 0);
+	    }
+	  else
+	    return yyerror ("AREGs are in bad order or same");
+	}
+    break;
+
+  case 71:
+#line 1662 "bfin-parse.y"
+    {
+	  if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	      || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg))))
+	    {
+	      notethat ("CCflag: CC = dpregs < dpregs\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad register in comparison");
+	}
+    break;
+
+  case 72:
+#line 1673 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg)))
+	    return yyerror ("Bad register in comparison");
+
+	  if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3))
+	      || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3)))
+	    {
+	      notethat ("CCflag: CC = dpregs < (u)imm3\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), (yyvsp[(6) - (6)].r0).r0, 1, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad constant value");
+	}
+    break;
+
+  case 73:
+#line 1687 "bfin-parse.y"
+    {
+	  if ((IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg)))
+	      || (IS_PREG ((yyvsp[(3) - (5)].reg)) && IS_PREG ((yyvsp[(5) - (5)].reg))))
+	    {
+	      notethat ("CCflag: CC = dpregs == dpregs\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad register in comparison");
+	}
+    break;
+
+  case 74:
+#line 1698 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(3) - (5)].reg)) && !IS_PREG ((yyvsp[(3) - (5)].reg)))
+	    return yyerror ("Bad register in comparison");
+
+	  if (IS_IMM ((yyvsp[(5) - (5)].expr), 3))
+	    {
+	      notethat ("CCflag: CC = dpregs == imm3\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), imm3 ((yyvsp[(5) - (5)].expr)), 0, 1, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad constant range");
+	}
+    break;
+
+  case 75:
+#line 1711 "bfin-parse.y"
+    {
+	  if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1)
+	    {
+	      notethat ("CCflag: CC = A0 <= A1\n");
+	      (yyval.instr) = CCFLAG (0, 0, 7, 0, 0);
+	    }
+	  else
+	    return yyerror ("AREGs are in bad order or same");
+	}
+    break;
+
+  case 76:
+#line 1721 "bfin-parse.y"
+    {
+	  if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	      || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg))))
+	    {
+	      notethat ("CCflag: CC = dpregs <= dpregs (..)\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK,
+			   1 + (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad register in comparison");
+	}
+    break;
+
+  case 77:
+#line 1733 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg)))
+	    return yyerror ("Bad register in comparison");
+
+	  if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3))
+	      || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3)))
+	    {
+	      notethat ("CCflag: CC = dpregs <= (u)imm3\n");
+	      (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0);
+	    }
+	  else
+	    return yyerror ("Bad constant value");
+	}
+    break;
+
+  case 78:
+#line 1748 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("COMP3op: dregs = dregs & dregs\n");
+	      (yyval.instr) = COMP3OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(3) - (5)].reg), &(yyvsp[(5) - (5)].reg), 2);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 79:
+#line 1759 "bfin-parse.y"
+    {
+	  notethat ("CC2stat operation\n");
+	  (yyval.instr) = bfin_gen_cc2stat ((yyvsp[(1) - (1)].modcodes).r0, (yyvsp[(1) - (1)].modcodes).x0, (yyvsp[(1) - (1)].modcodes).s0);
+	}
+    break;
+
+  case 80:
+#line 1765 "bfin-parse.y"
+    {
+	  if ((IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP)
+	      || ((yyvsp[(1) - (3)].reg).regno == REG_USP && IS_GENREG ((yyvsp[(3) - (3)].reg)))
+	      || ((yyvsp[(1) - (3)].reg).regno == REG_USP && (yyvsp[(3) - (3)].reg).regno == REG_USP)
+	      || (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_ALLREG ((yyvsp[(1) - (3)].reg)) && IS_EMUDAT ((yyvsp[(3) - (3)].reg)))
+	      || (IS_EMUDAT ((yyvsp[(1) - (3)].reg)) && IS_ALLREG ((yyvsp[(3) - (3)].reg)))
+	      || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP))
+	    {
+	      (yyval.instr) = bfin_gen_regmv (&(yyvsp[(3) - (3)].reg), &(yyvsp[(1) - (3)].reg));
+	    }
+	  else
+	    return yyerror ("Unsupported register move");
+	}
+    break;
+
+  case 81:
+#line 1787 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("CC2dreg: CC = dregs\n");
+	      (yyval.instr) = bfin_gen_cc2dreg (1, &(yyvsp[(3) - (3)].reg));
+	    }
+	  else
+	    return yyerror ("Only 'CC = Dreg' supported");
+	}
+    break;
+
+  case 82:
+#line 1798 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)))
+	    {
+	      notethat ("CC2dreg: dregs = CC\n");
+	      (yyval.instr) = bfin_gen_cc2dreg (0, &(yyvsp[(1) - (3)].reg));
+	    }
+	  else
+	    return yyerror ("Only 'Dreg = CC' supported");
+	}
+    break;
+
+  case 83:
+#line 1809 "bfin-parse.y"
+    {
+	  notethat ("CC2dreg: CC =! CC\n");
+	  (yyval.instr) = bfin_gen_cc2dreg (3, 0);
+	}
+    break;
+
+  case 84:
+#line 1817 "bfin-parse.y"
+    {
+	  notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n");
+
+	  if (!IS_H ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM)
+	    return yyerror ("(M) not allowed with MAC0");
+
+	  if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS
+	      && (yyvsp[(4) - (4)].mod).mod != M_IU && (yyvsp[(4) - (4)].mod).mod != M_T && (yyvsp[(4) - (4)].mod).mod != M_TFU
+	      && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2 && (yyvsp[(4) - (4)].mod).mod != M_IH)
+	    return yyerror ("bad option.");
+
+	  if (IS_H ((yyvsp[(1) - (4)].reg)))
+	    {
+	      (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 0,
+			      IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), 0, 0,
+			      &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 0);
+	    }
+	  else
+	    {
+	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[(4) - (4)].mod).mod, 0, 0,
+			      0, 0, IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1),
+			      &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 1);
+	    }
+	}
+    break;
+
+  case 85:
+#line 1843 "bfin-parse.y"
+    {
+	  /* Odd registers can use (M).  */
+	  if (!IS_DREG ((yyvsp[(1) - (4)].reg)))
+	    return yyerror ("Dreg expected");
+
+	  if (IS_EVEN ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM)
+	    return yyerror ("(M) not allowed with MAC0");
+
+	  if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS
+	      && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2)
+	    return yyerror ("bad option");
+
+	  if (!IS_EVEN ((yyvsp[(1) - (4)].reg)))
+	    {
+	      notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n");
+
+	      (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 1,
+			      IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1), 0, 0,
+			      &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 0);
+	    }
+	  else
+	    {
+	      notethat ("dsp32mult: dregs = multiply_halfregs opt_mode\n");
+	      (yyval.instr) = DSP32MULT (0, 0, (yyvsp[(4) - (4)].mod).mod, 0, 1,
+			      0, 0, IS_H ((yyvsp[(3) - (4)].macfunc).s0), IS_H ((yyvsp[(3) - (4)].macfunc).s1),
+			      &(yyvsp[(1) - (4)].reg),  0, &(yyvsp[(3) - (4)].macfunc).s0, &(yyvsp[(3) - (4)].macfunc).s1, 1);
+	    }
+	}
+    break;
+
+  case 86:
+#line 1874 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg)))
+	    return yyerror ("Dregs expected");
+
+	  if (!IS_HCOMPL((yyvsp[(1) - (9)].reg), (yyvsp[(6) - (9)].reg)))
+	    return yyerror ("Dest registers mismatch");
+
+	  if (check_multiply_halfregs (&(yyvsp[(3) - (9)].macfunc), &(yyvsp[(8) - (9)].macfunc)) < 0)
+	    return -1;
+
+	  if ((!IS_H ((yyvsp[(1) - (9)].reg)) && (yyvsp[(4) - (9)].mod).MM)
+	      || (!IS_H ((yyvsp[(6) - (9)].reg)) && (yyvsp[(9) - (9)].mod).MM))
+	    return yyerror ("(M) not allowed with MAC0");
+
+	  notethat ("dsp32mult: dregs_hi = multiply_halfregs mxd_mod, "
+		    "dregs_lo = multiply_halfregs opt_mode\n");
+
+	  if (IS_H ((yyvsp[(1) - (9)].reg)))
+	    (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 0,
+			    IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1),
+			    &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1);
+	  else
+	    (yyval.instr) = DSP32MULT (0, (yyvsp[(9) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 0,
+			    IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1),
+			    &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1);
+	}
+    break;
+
+  case 87:
+#line 1902 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg)))
+	    return yyerror ("Dregs expected");
+
+	  if ((IS_EVEN ((yyvsp[(1) - (9)].reg)) && (yyvsp[(6) - (9)].reg).regno - (yyvsp[(1) - (9)].reg).regno != 1)
+	      || (IS_EVEN ((yyvsp[(6) - (9)].reg)) && (yyvsp[(1) - (9)].reg).regno - (yyvsp[(6) - (9)].reg).regno != 1))
+	    return yyerror ("Dest registers mismatch");
+
+	  if (check_multiply_halfregs (&(yyvsp[(3) - (9)].macfunc), &(yyvsp[(8) - (9)].macfunc)) < 0)
+	    return -1;
+
+	  if ((IS_EVEN ((yyvsp[(1) - (9)].reg)) && (yyvsp[(4) - (9)].mod).MM)
+	      || (IS_EVEN ((yyvsp[(6) - (9)].reg)) && (yyvsp[(9) - (9)].mod).MM))
+	    return yyerror ("(M) not allowed with MAC0");
+
+	  notethat ("dsp32mult: dregs = multiply_halfregs mxd_mod, "
+		   "dregs = multiply_halfregs opt_mode\n");
+
+	  if (IS_EVEN ((yyvsp[(1) - (9)].reg)))
+	    (yyval.instr) = DSP32MULT (0, (yyvsp[(9) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 1,
+			    IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1), IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1),
+			    &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1);
+	  else
+	    (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (9)].mod).MM, (yyvsp[(9) - (9)].mod).mod, 1, 1,
+			    IS_H ((yyvsp[(3) - (9)].macfunc).s0), IS_H ((yyvsp[(3) - (9)].macfunc).s1), IS_H ((yyvsp[(8) - (9)].macfunc).s0), IS_H ((yyvsp[(8) - (9)].macfunc).s1),
+			    &(yyvsp[(1) - (9)].reg), 0, &(yyvsp[(3) - (9)].macfunc).s0, &(yyvsp[(3) - (9)].macfunc).s1, 1);
+	}
+    break;
+
+  case 88:
+#line 1933 "bfin-parse.y"
+    {
+	  if (!REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)))
+	    return yyerror ("Aregs must be same");
+
+	  if (IS_DREG ((yyvsp[(5) - (5)].reg)) && !IS_H ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("dsp32shift: A0 = ASHIFT A0 BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 0, IS_A1 ((yyvsp[(1) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 89:
+#line 1947 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_half = ASHIFT dregs_half BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), (yyvsp[(7) - (7)].modcodes).s0, HL2 ((yyvsp[(1) - (7)].reg), (yyvsp[(4) - (7)].reg)));
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 90:
+#line 1958 "bfin-parse.y"
+    {
+	  if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)))
+	    return yyerror ("Aregs must be same");
+
+	  if (IS_UIMM ((yyvsp[(4) - (4)].expr), 5))
+	    {
+	      notethat ("dsp32shiftimm: A0 = A0 << uimm5\n");
+	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm5 ((yyvsp[(4) - (4)].expr)), 0, 0, IS_A1 ((yyvsp[(1) - (4)].reg)));
+	    }
+	  else
+	    return yyerror ("Bad shift value");
+	}
+    break;
+
+  case 91:
+#line 1972 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      if ((yyvsp[(6) - (6)].modcodes).r0)
+		{
+		  /*  Vector?  */
+		  notethat ("dsp32shiftimm: dregs = dregs << expr (V, .)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), imm4 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0 ? 1 : 2, 0);
+		}
+	      else
+		{
+		  notethat ("dsp32shiftimm: dregs =  dregs << uimm5 (.)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), imm6 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0 ? 1 : 2, 0);
+		}
+	    }
+	  else if ((yyvsp[(6) - (6)].modcodes).s0 == 0 && IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)))
+	    {
+	      if (EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 2)
+		{
+		  notethat ("PTR2op: pregs = pregs << 2\n");
+		  (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 1);
+		}
+	      else if (EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 1)
+		{
+		  notethat ("COMP3op: pregs = pregs << 1\n");
+		  (yyval.instr) = COMP3OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(3) - (6)].reg), 5);
+		}
+	      else
+		return yyerror ("Bad shift value");
+	    }
+	  else
+	    return yyerror ("Bad shift value or register");
+	}
+    break;
+
+  case 92:
+#line 2006 "bfin-parse.y"
+    {
+	  if (IS_UIMM ((yyvsp[(5) - (6)].expr), 4))
+	    {
+	      if ((yyvsp[(6) - (6)].modcodes).s0)
+		{
+		  notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg)));
+		}
+	      else
+		{
+		  notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n");
+		  (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg)));
+		}
+	    }
+	  else
+	    return yyerror ("Bad shift value");
+	}
+    break;
+
+  case 93:
+#line 2024 "bfin-parse.y"
+    {
+	  int op;
+
+	  if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg)))
+	    {
+	      if ((yyvsp[(7) - (7)].modcodes).r0)
+		{
+		  op = 1;
+		  notethat ("dsp32shift: dregs = ASHIFT dregs BY "
+			   "dregs_lo (V, .)\n");
+		}
+	      else
+		{
+
+		  op = 2;
+		  notethat ("dsp32shift: dregs = ASHIFT dregs BY dregs_lo (.)\n");
+		}
+	      (yyval.instr) = DSP32SHIFT (op, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), (yyvsp[(7) - (7)].modcodes).s0, 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 94:
+#line 2049 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (9)].reg)) && IS_DREG_L ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs , dregs_lo )\n");
+	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0);
+	    }
+	  else
+	    return yyerror ("Bad shift value or register");
+	}
+    break;
+
+  case 95:
+#line 2061 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_L ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_lo, dregs_lo)\n");
+	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 2, 0);
+	    }
+	  else if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_H ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = EXPADJ (dregs_hi, dregs_lo)\n");
+	      (yyval.instr) = DSP32SHIFT (7, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 3, 0);
+	    }
+	  else
+	    return yyerror ("Bad shift value or register");
+	}
+    break;
+
+  case 96:
+#line 2079 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs )\n");
+	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), 2, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 97:
+#line 2090 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(5) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = DEPOSIT (dregs , dregs ) (X)\n");
+	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (11)].reg), &(yyvsp[(7) - (11)].reg), &(yyvsp[(5) - (11)].reg), 3, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 98:
+#line 2101 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = EXTRACT (dregs, dregs_lo ) (.)\n");
+	      (yyval.instr) = DSP32SHIFT (10, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 99:
+#line 2112 "bfin-parse.y"
+    {
+	  if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)))
+	    return yyerror ("Aregs must be same");
+
+	  if (IS_UIMM ((yyvsp[(4) - (4)].expr), 5))
+	    {
+	      notethat ("dsp32shiftimm: Ax = Ax >>> uimm5\n");
+	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[(4) - (4)].expr)), 0, 0, IS_A1 ((yyvsp[(1) - (4)].reg)));
+	    }
+	  else
+	    return yyerror ("Shift value range error");
+	}
+    break;
+
+  case 100:
+#line 2125 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("dsp32shift: Ax = LSHIFT Ax BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 1, IS_A1 ((yyvsp[(1) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 101:
+#line 2136 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = LSHIFT dregs_hi BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 2, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 102:
+#line 2147 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG_L ((yyvsp[(6) - (7)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = LSHIFT dregs BY dregs_lo (V )\n");
+	      (yyval.instr) = DSP32SHIFT ((yyvsp[(7) - (7)].r0).r0 ? 1: 2, &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), &(yyvsp[(4) - (7)].reg), 2, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 103:
+#line 2158 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = SHIFT dregs BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 2, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 104:
+#line 2169 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)) && IS_IMM ((yyvsp[(4) - (4)].expr), 6) >= 0)
+	    {
+	      notethat ("dsp32shiftimm: Ax = Ax >> imm6\n");
+	      (yyval.instr) = DSP32SHIFTIMM (3, 0, -imm6 ((yyvsp[(4) - (4)].expr)), 0, 1, IS_A1 ((yyvsp[(1) - (4)].reg)));
+	    }
+	  else
+	    return yyerror ("Accu register expected");
+	}
+    break;
+
+  case 105:
+#line 2180 "bfin-parse.y"
+    {
+	  if ((yyvsp[(6) - (6)].r0).r0 == 1)
+	    {
+	      if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+		{
+		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5 (V)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, 0);
+		}
+	      else
+	        return yyerror ("Register mismatch");
+	    }
+	  else
+	    {
+	      if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+		{
+		  notethat ("dsp32shiftimm: dregs = dregs >> uimm5\n");
+		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), -imm6 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, 0);
+		}
+	      else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 2)
+		{
+		  notethat ("PTR2op: pregs = pregs >> 2\n");
+		  (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 3);
+		}
+	      else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(3) - (6)].reg)) && EXPR_VALUE ((yyvsp[(5) - (6)].expr)) == 1)
+		{
+		  notethat ("PTR2op: pregs = pregs >> 1\n");
+		  (yyval.instr) = PTR2OP (&(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), 4);
+		}
+	      else
+	        return yyerror ("Register mismatch");
+	    }
+	}
+    break;
+
+  case 106:
+#line 2213 "bfin-parse.y"
+    {
+	  if (IS_UIMM ((yyvsp[(5) - (5)].expr), 5))
+	    {
+	      notethat ("dsp32shiftimm:  dregs_half =  dregs_half >> uimm5\n");
+	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[(1) - (5)].reg), -uimm5 ((yyvsp[(5) - (5)].expr)), &(yyvsp[(3) - (5)].reg), 2, HL2 ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 107:
+#line 2223 "bfin-parse.y"
+    {
+	  if (IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      notethat ("dsp32shiftimm: dregs_half = dregs_half >>> uimm5\n");
+	      (yyval.instr) = DSP32SHIFTIMM (0, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg),
+				  (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg)));
+	    }
+	  else
+	    return yyerror ("Register or modifier mismatch");
+	}
+    break;
+
+  case 108:
+#line 2236 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      if ((yyvsp[(6) - (6)].modcodes).r0)
+		{
+		  /* Vector?  */
+		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (V, .)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (1, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, 0);
+		}
+	      else
+		{
+		  notethat ("dsp32shiftimm: dregs  =  dregs >>> uimm5 (.)\n");
+		  (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), -uimm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, 0);
+		}
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 109:
+#line 2256 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = ONES dregs\n");
+	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 3, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 110:
+#line 2267 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = PACK (dregs_hi , dregs_hi )\n");
+	      (yyval.instr) = DSP32SHIFT (4, &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), &(yyvsp[(5) - (8)].reg), HL2 ((yyvsp[(5) - (8)].reg), (yyvsp[(7) - (8)].reg)), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 111:
+#line 2278 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (10)].reg))
+	      && (yyvsp[(7) - (10)].reg).regno == REG_A0
+	      && IS_DREG ((yyvsp[(9) - (10)].reg)) && !IS_H ((yyvsp[(1) - (10)].reg)) && !IS_A1 ((yyvsp[(7) - (10)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = CC = BXORSHIFT (A0 , dregs )\n");
+	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[(1) - (10)].reg), &(yyvsp[(9) - (10)].reg), 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 112:
+#line 2291 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (10)].reg))
+	      && (yyvsp[(7) - (10)].reg).regno == REG_A0
+	      && IS_DREG ((yyvsp[(9) - (10)].reg)) && !IS_H ((yyvsp[(1) - (10)].reg)) && !IS_A1 ((yyvsp[(7) - (10)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , dregs)\n");
+	      (yyval.instr) = DSP32SHIFT (11, &(yyvsp[(1) - (10)].reg), &(yyvsp[(9) - (10)].reg), 0, 1, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 113:
+#line 2304 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (12)].reg)) && !IS_H ((yyvsp[(1) - (12)].reg)) && !REG_SAME ((yyvsp[(7) - (12)].reg), (yyvsp[(9) - (12)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = CC = BXOR (A0 , A1 , CC)\n");
+	      (yyval.instr) = DSP32SHIFT (12, &(yyvsp[(1) - (12)].reg), 0, 0, 1, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 114:
+#line 2315 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg)))
+	    {
+	      notethat ("dsp32shift: Ax = ROT Ax BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (3, 0, &(yyvsp[(5) - (5)].reg), 0, 2, IS_A1 ((yyvsp[(1) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 115:
+#line 2326 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = ROT dregs BY dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (2, &(yyvsp[(1) - (6)].reg), &(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 3, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 116:
+#line 2337 "bfin-parse.y"
+    {
+	  if (IS_IMM ((yyvsp[(5) - (5)].expr), 6))
+	    {
+	      notethat ("dsp32shiftimm: An = ROT An BY imm6\n");
+	      (yyval.instr) = DSP32SHIFTIMM (3, 0, imm6 ((yyvsp[(5) - (5)].expr)), 0, 2, IS_A1 ((yyvsp[(1) - (5)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 117:
+#line 2348 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_IMM ((yyvsp[(6) - (6)].expr), 6))
+	    {
+	      (yyval.instr) = DSP32SHIFTIMM (2, &(yyvsp[(1) - (6)].reg), imm6 ((yyvsp[(6) - (6)].expr)), &(yyvsp[(4) - (6)].reg), 3, IS_A1 ((yyvsp[(1) - (6)].reg)));
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 118:
+#line 2358 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (4)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = SIGNBITS An\n");
+	      (yyval.instr) = DSP32SHIFT (6, &(yyvsp[(1) - (4)].reg), 0, 0, IS_A1 ((yyvsp[(4) - (4)].reg)), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 119:
+#line 2369 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs\n");
+	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 0, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 120:
+#line 2380 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (4)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = SIGNBITS dregs_lo\n");
+	      (yyval.instr) = DSP32SHIFT (5, &(yyvsp[(1) - (4)].reg), 0, &(yyvsp[(4) - (4)].reg), 1 + IS_H ((yyvsp[(4) - (4)].reg)), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 121:
+#line 2392 "bfin-parse.y"
+    {
+	  if (IS_DREG_L ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(5) - (7)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs_lo = VIT_MAX (dregs) (..)\n");
+	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[(1) - (7)].reg), 0, &(yyvsp[(5) - (7)].reg), ((yyvsp[(7) - (7)].r0).r0 ? 0 : 1), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 122:
+#line 2403 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg)))
+	    {
+	      notethat ("dsp32shift: dregs = VIT_MAX (dregs, dregs) (ASR)\n");
+	      (yyval.instr) = DSP32SHIFT (9, &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), &(yyvsp[(5) - (9)].reg), 2 | ((yyvsp[(9) - (9)].r0).r0 ? 0 : 1), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 123:
+#line 2414 "bfin-parse.y"
+    {
+	  if (REG_SAME ((yyvsp[(3) - (9)].reg), (yyvsp[(5) - (9)].reg)))
+	    return yyerror ("Illegal source register combination");
+
+	  if (IS_DREG ((yyvsp[(3) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && !IS_A1 ((yyvsp[(7) - (9)].reg)))
+	    {
+	      notethat ("dsp32shift: BITMUX (dregs , dregs , A0) (ASR)\n");
+	      (yyval.instr) = DSP32SHIFT (8, 0, &(yyvsp[(3) - (9)].reg), &(yyvsp[(5) - (9)].reg), (yyvsp[(9) - (9)].r0).r0, 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 124:
+#line 2428 "bfin-parse.y"
+    {
+	  if (!IS_A1 ((yyvsp[(1) - (9)].reg)) && !IS_A1 ((yyvsp[(4) - (9)].reg)) && IS_A1 ((yyvsp[(6) - (9)].reg)))
+	    {
+	      notethat ("dsp32shift: A0 = BXORSHIFT (A0 , A1 , CC )\n");
+	      (yyval.instr) = DSP32SHIFT (12, 0, 0, 0, 0, 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 125:
+#line 2441 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 4);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 126:
+#line 2453 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 2);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 127:
+#line 2465 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5))
+	    {
+	      notethat ("LOGI2op: BITCLR (dregs , uimm5 )\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(3) - (6)].reg), uimm5 ((yyvsp[(5) - (6)].expr)), 3);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 128:
+#line 2476 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5))
+	    {
+	      notethat ("LOGI2op: CC =! BITTST (dregs , uimm5 )\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(5) - (8)].reg), uimm5 ((yyvsp[(7) - (8)].expr)), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch or value error");
+	}
+    break;
+
+  case 129:
+#line 2487 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5))
+	    {
+	      notethat ("LOGI2op: CC = BITTST (dregs , uimm5 )\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(5) - (8)].reg), uimm5 ((yyvsp[(7) - (8)].expr)), 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch or value error");
+	}
+    break;
+
+  case 130:
+#line 2498 "bfin-parse.y"
+    {
+	  if ((IS_DREG ((yyvsp[(4) - (6)].reg)) || IS_PREG ((yyvsp[(4) - (6)].reg)))
+	      && (IS_DREG ((yyvsp[(6) - (6)].reg)) || IS_PREG ((yyvsp[(6) - (6)].reg))))
+	    {
+	      notethat ("ccMV: IF ! CC gregs = gregs\n");
+	      (yyval.instr) = CCMV (&(yyvsp[(6) - (6)].reg), &(yyvsp[(4) - (6)].reg), 0);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 131:
+#line 2510 "bfin-parse.y"
+    {
+	  if ((IS_DREG ((yyvsp[(5) - (5)].reg)) || IS_PREG ((yyvsp[(5) - (5)].reg)))
+	      && (IS_DREG ((yyvsp[(3) - (5)].reg)) || IS_PREG ((yyvsp[(3) - (5)].reg))))
+	    {
+	      notethat ("ccMV: IF CC gregs = gregs\n");
+	      (yyval.instr) = CCMV (&(yyvsp[(5) - (5)].reg), &(yyvsp[(3) - (5)].reg), 1);
+	    }
+	  else
+	    return yyerror ("Register mismatch");
+	}
+    break;
+
+  case 132:
+#line 2522 "bfin-parse.y"
+    {
+	  if (IS_PCREL10 ((yyvsp[(5) - (5)].expr)))
+	    {
+	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
+	      (yyval.instr) = BRCC (0, 0, (yyvsp[(5) - (5)].expr));
+	    }
+	  else
+	    return yyerror ("Bad jump offset");
+	}
+    break;
+
+  case 133:
+#line 2533 "bfin-parse.y"
+    {
+	  if (IS_PCREL10 ((yyvsp[(5) - (8)].expr)))
+	    {
+	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
+	      (yyval.instr) = BRCC (0, 1, (yyvsp[(5) - (8)].expr));
+	    }
+	  else
+	    return yyerror ("Bad jump offset");
+	}
+    break;
+
+  case 134:
+#line 2544 "bfin-parse.y"
+    {
+	  if (IS_PCREL10 ((yyvsp[(4) - (4)].expr)))
+	    {
+	      notethat ("BRCC: IF CC JUMP  pcrel11m2\n");
+	      (yyval.instr) = BRCC (1, 0, (yyvsp[(4) - (4)].expr));
+	    }
+	  else
+	    return yyerror ("Bad jump offset");
+	}
+    break;
+
+  case 135:
+#line 2555 "bfin-parse.y"
+    {
+	  if (IS_PCREL10 ((yyvsp[(4) - (7)].expr)))
+	    {
+	      notethat ("BRCC: IF !CC JUMP  pcrel11m2\n");
+	      (yyval.instr) = BRCC (1, 1, (yyvsp[(4) - (7)].expr));
+	    }
+	  else
+	    return yyerror ("Bad jump offset");
+	}
+    break;
+
+  case 136:
+#line 2565 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: NOP\n");
+	  (yyval.instr) = PROGCTRL (0, 0);
+	}
+    break;
+
+  case 137:
+#line 2571 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: RTS\n");
+	  (yyval.instr) = PROGCTRL (1, 0);
+	}
+    break;
+
+  case 138:
+#line 2577 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: RTI\n");
+	  (yyval.instr) = PROGCTRL (1, 1);
+	}
+    break;
+
+  case 139:
+#line 2583 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: RTX\n");
+	  (yyval.instr) = PROGCTRL (1, 2);
+	}
+    break;
+
+  case 140:
+#line 2589 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: RTN\n");
+	  (yyval.instr) = PROGCTRL (1, 3);
+	}
+    break;
+
+  case 141:
+#line 2595 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: RTE\n");
+	  (yyval.instr) = PROGCTRL (1, 4);
+	}
+    break;
+
+  case 142:
+#line 2601 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: IDLE\n");
+	  (yyval.instr) = PROGCTRL (2, 0);
+	}
+    break;
+
+  case 143:
+#line 2607 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: CSYNC\n");
+	  (yyval.instr) = PROGCTRL (2, 3);
+	}
+    break;
+
+  case 144:
+#line 2613 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: SSYNC\n");
+	  (yyval.instr) = PROGCTRL (2, 4);
+	}
+    break;
+
+  case 145:
+#line 2619 "bfin-parse.y"
+    {
+	  notethat ("ProgCtrl: EMUEXCPT\n");
+	  (yyval.instr) = PROGCTRL (2, 5);
+	}
+    break;
+
+  case 146:
+#line 2625 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("ProgCtrl: CLI dregs\n");
+	      (yyval.instr) = PROGCTRL (3, (yyvsp[(2) - (2)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Dreg expected for CLI");
+	}
+    break;
+
+  case 147:
+#line 2636 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("ProgCtrl: STI dregs\n");
+	      (yyval.instr) = PROGCTRL (4, (yyvsp[(2) - (2)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Dreg expected for STI");
+	}
+    break;
+
+  case 148:
+#line 2647 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("ProgCtrl: JUMP (pregs )\n");
+	      (yyval.instr) = PROGCTRL (5, (yyvsp[(3) - (4)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Bad register for indirect jump");
+	}
+    break;
+
+  case 149:
+#line 2658 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("ProgCtrl: CALL (pregs )\n");
+	      (yyval.instr) = PROGCTRL (6, (yyvsp[(3) - (4)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Bad register for indirect call");
+	}
+    break;
+
+  case 150:
+#line 2669 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(5) - (6)].reg)))
+	    {
+	      notethat ("ProgCtrl: CALL (PC + pregs )\n");
+	      (yyval.instr) = PROGCTRL (7, (yyvsp[(5) - (6)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Bad register for indirect call");
+	}
+    break;
+
+  case 151:
+#line 2680 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(5) - (6)].reg)))
+	    {
+	      notethat ("ProgCtrl: JUMP (PC + pregs )\n");
+	      (yyval.instr) = PROGCTRL (8, (yyvsp[(5) - (6)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Bad register for indirect jump");
+	}
+    break;
+
+  case 152:
+#line 2691 "bfin-parse.y"
+    {
+	  if (IS_UIMM ((yyvsp[(2) - (2)].expr), 4))
+	    {
+	      notethat ("ProgCtrl: RAISE uimm4\n");
+	      (yyval.instr) = PROGCTRL (9, uimm4 ((yyvsp[(2) - (2)].expr)));
+	    }
+	  else
+	    return yyerror ("Bad value for RAISE");
+	}
+    break;
+
+  case 153:
+#line 2702 "bfin-parse.y"
+    {
+		notethat ("ProgCtrl: EMUEXCPT\n");
+		(yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[(2) - (2)].expr)));
+	}
+    break;
+
+  case 154:
+#line 2708 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      if ((yyvsp[(3) - (4)].reg).regno == REG_SP || (yyvsp[(3) - (4)].reg).regno == REG_FP)
+		return yyerror ("Bad register for TESTSET");
+
+	      notethat ("ProgCtrl: TESTSET (pregs )\n");
+	      (yyval.instr) = PROGCTRL (11, (yyvsp[(3) - (4)].reg).regno & CODE_MASK);
+	    }
+	  else
+	    return yyerror ("Preg expected");
+	}
+    break;
+
+  case 155:
+#line 2722 "bfin-parse.y"
+    {
+	  if (IS_PCREL12 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("UJUMP: JUMP pcrel12\n");
+	      (yyval.instr) = UJUMP ((yyvsp[(2) - (2)].expr));
+	    }
+	  else
+	    return yyerror ("Bad value for relative jump");
+	}
+    break;
+
+  case 156:
+#line 2733 "bfin-parse.y"
+    {
+	  if (IS_PCREL12 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("UJUMP: JUMP_DOT_S pcrel12\n");
+	      (yyval.instr) = UJUMP((yyvsp[(2) - (2)].expr));
+	    }
+	  else
+	    return yyerror ("Bad value for relative jump");
+	}
+    break;
+
+  case 157:
+#line 2744 "bfin-parse.y"
+    {
+	  if (IS_PCREL24 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("CALLa: jump.l pcrel24\n");
+	      (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 0);
+	    }
+	  else
+	    return yyerror ("Bad value for long jump");
+	}
+    break;
+
+  case 158:
+#line 2755 "bfin-parse.y"
+    {
+	  if (IS_PCREL24 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("CALLa: jump.l pcrel24\n");
+	      (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 2);
+	    }
+	  else
+	    return yyerror ("Bad value for long jump");
+	}
+    break;
+
+  case 159:
+#line 2766 "bfin-parse.y"
+    {
+	  if (IS_PCREL24 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("CALLa: CALL pcrel25m2\n");
+	      (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 1);
+	    }
+	  else
+	    return yyerror ("Bad call address");
+	}
+    break;
+
+  case 160:
+#line 2776 "bfin-parse.y"
+    {
+	  if (IS_PCREL24 ((yyvsp[(2) - (2)].expr)))
+	    {
+	      notethat ("CALLa: CALL pcrel25m2\n");
+	      (yyval.instr) = CALLA ((yyvsp[(2) - (2)].expr), 2);
+	    }
+	  else
+	    return yyerror ("Bad call address");
+	}
+    break;
+
+  case 161:
+#line 2789 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	    (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 8);
+	  else
+	    return yyerror ("Bad registers for DIVQ");
+	}
+    break;
+
+  case 162:
+#line 2797 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg)))
+	    (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 9);
+	  else
+	    return yyerror ("Bad registers for DIVS");
+	}
+    break;
+
+  case 163:
+#line 2805 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg)))
+	    {
+	      if ((yyvsp[(5) - (5)].modcodes).r0 == 0 && (yyvsp[(5) - (5)].modcodes).s0 == 0 && (yyvsp[(5) - (5)].modcodes).aop == 0)
+		{
+		  notethat ("ALU2op: dregs = - dregs\n");
+		  (yyval.instr) = ALU2OP (&(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 14);
+		}
+	      else if ((yyvsp[(5) - (5)].modcodes).r0 == 1 && (yyvsp[(5) - (5)].modcodes).s0 == 0 && (yyvsp[(5) - (5)].modcodes).aop == 3)
+		{
+		  notethat ("dsp32alu: dregs = - dregs (.)\n");
+		  (yyval.instr) = DSP32ALU (15, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, (yyvsp[(5) - (5)].modcodes).s0, 0, 3);
+		}
+	      else
+		{
+		  notethat ("dsp32alu: dregs = - dregs (.)\n");
+		  (yyval.instr) = DSP32ALU (7, 0, 0, &(yyvsp[(1) - (5)].reg), &(yyvsp[(4) - (5)].reg), 0, (yyvsp[(5) - (5)].modcodes).s0, 0, 3);
+		}
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 164:
+#line 2829 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg)))
+	    {
+	      notethat ("ALU2op: dregs = ~dregs\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (4)].reg), &(yyvsp[(4) - (4)].reg), 15);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 165:
+#line 2840 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("ALU2op: dregs >>= dregs\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 1);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 166:
+#line 2851 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5))
+	    {
+	      notethat ("LOGI2op: dregs >>= uimm5\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 6);
+	    }
+	  else
+	    return yyerror ("Dregs expected or value error");
+	}
+    break;
+
+  case 167:
+#line 2862 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("ALU2op: dregs >>>= dregs\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 0);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 168:
+#line 2873 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("ALU2op: dregs <<= dregs\n");
+	      (yyval.instr) = ALU2OP (&(yyvsp[(1) - (3)].reg), &(yyvsp[(3) - (3)].reg), 2);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 169:
+#line 2884 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5))
+	    {
+	      notethat ("LOGI2op: dregs <<= uimm5\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 7);
+	    }
+	  else
+	    return yyerror ("Dregs expected or const value error");
+	}
+    break;
+
+  case 170:
+#line 2896 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5))
+	    {
+	      notethat ("LOGI2op: dregs >>>= uimm5\n");
+	      (yyval.instr) = LOGI2OP ((yyvsp[(1) - (3)].reg), uimm5 ((yyvsp[(3) - (3)].expr)), 5);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 171:
+#line 2909 "bfin-parse.y"
+    {
+	  notethat ("CaCTRL: FLUSH [ pregs ]\n");
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 2);
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 172:
+#line 2918 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("CaCTRL: FLUSH [ pregs ++ ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 2);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 173:
+#line 2929 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("CaCTRL: FLUSHINV [ pregs ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 1);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 174:
+#line 2940 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("CaCTRL: FLUSHINV [ pregs ++ ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 1);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 175:
+#line 2952 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("CaCTRL: IFLUSH [ pregs ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 3);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 176:
+#line 2963 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("CaCTRL: IFLUSH [ pregs ++ ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 3);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for FLUSH");
+	}
+    break;
+
+  case 177:
+#line 2974 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(3) - (4)].reg)))
+	    {
+	      notethat ("CaCTRL: PREFETCH [ pregs ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(3) - (4)].reg), 0, 0);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for PREFETCH");
+	}
+    break;
+
+  case 178:
+#line 2985 "bfin-parse.y"
+    {
+	  if (IS_PREG ((yyvsp[(2) - (2)].reg)))
+	    {
+	      notethat ("CaCTRL: PREFETCH [ pregs ++ ]\n");
+	      (yyval.instr) = CACTRL (&(yyvsp[(2) - (2)].reg), 1, 0);
+	    }
+	  else
+	    return yyerror ("Bad register(s) for PREFETCH");
+	}
+    break;
+
+  case 179:
+#line 2999 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(7) - (7)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if (!IS_PREG ((yyvsp[(3) - (7)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDST: B [ pregs <post_op> ] = dregs\n");
+	  (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1);
+	}
+    break;
+
+  case 180:
+#line 3011 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(5) - (8)].expr);
+
+	  if (!IS_DREG ((yyvsp[(8) - (8)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if (!IS_PREG ((yyvsp[(3) - (8)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if (IS_RELOC ((yyvsp[(5) - (8)].expr)))
+	    return yyerror ("Plain symbol used as offset");
+
+	  if ((yyvsp[(4) - (8)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (in_range_p (tmp, -32768, 32767, 0))
+	    {
+	      notethat ("LDST: B [ pregs + imm16 ] = dregs\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 2, 0, (yyvsp[(5) - (8)].expr));
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 181:
+#line 3037 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(5) - (8)].expr);
+
+	  if (!IS_DREG ((yyvsp[(8) - (8)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if (!IS_PREG ((yyvsp[(3) - (8)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if ((yyvsp[(4) - (8)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (IS_RELOC ((yyvsp[(5) - (8)].expr)))
+	    return yyerror ("Plain symbol used as offset");
+
+	  if (in_range_p (tmp, 0, 30, 1))
+	    {
+	      notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n");
+	      (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), tmp, 1, 1);
+	    }
+	  else if (in_range_p (tmp, -65536, 65535, 1))
+	    {
+	      notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, tmp);
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 182:
+#line 3067 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(7) - (7)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if (!IS_PREG ((yyvsp[(3) - (7)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDST: W [ pregs <post_op> ] = dregs\n");
+	  (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1);
+	}
+    break;
+
+  case 183:
+#line 3078 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(7) - (7)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if ((yyvsp[(4) - (7)].modcodes).x0 == 2)
+	    {
+	      if (!IS_IREG ((yyvsp[(3) - (7)].reg)) && !IS_PREG ((yyvsp[(3) - (7)].reg)))
+		return yyerror ("Ireg or Preg expected in address");
+	    }
+	  else if (!IS_IREG ((yyvsp[(3) - (7)].reg)))
+	    return yyerror ("Ireg expected in address");
+
+	  if (IS_IREG ((yyvsp[(3) - (7)].reg)))
+	    {
+	      notethat ("dspLDST: W [ iregs <post_op> ] = dregs_half\n");
+	      (yyval.instr) = DSPLDST (&(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1);
+	    }
+	  else
+	    {
+	      notethat ("LDSTpmod: W [ pregs ] = dregs_half\n");
+	      (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), 1);
+	    }
+	}
+    break;
+
+  case 184:
+#line 3103 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(4) - (7)].expr);
+	  int ispreg = IS_PREG ((yyvsp[(7) - (7)].reg));
+
+	  if (!IS_PREG ((yyvsp[(2) - (7)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if (!IS_DREG ((yyvsp[(7) - (7)].reg)) && !ispreg)
+	    return yyerror ("Preg expected for source operand");
+
+	  if ((yyvsp[(3) - (7)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (IS_RELOC ((yyvsp[(4) - (7)].expr)))
+	    return yyerror ("Plain symbol used as offset");
+
+	  if (in_range_p (tmp, 0, 63, 3))
+	    {
+	      notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n");
+	      (yyval.instr) = LDSTII (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), tmp, 1, ispreg ? 3 : 0);
+	    }
+	  else if ((yyvsp[(2) - (7)].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
+	    {
+	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
+	      tmp = unary (Expr_Op_Type_NEG, tmp);
+	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[(7) - (7)].reg), 1);
+	    }
+	  else if (in_range_p (tmp, -131072, 131071, 3))
+	    {
+	      notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1 : 0, tmp);
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 185:
+#line 3140 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(7) - (9)].expr);
+	  if (!IS_DREG ((yyvsp[(1) - (9)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (9)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if ((yyvsp[(6) - (9)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (IS_RELOC ((yyvsp[(7) - (9)].expr)))
+	    return yyerror ("Plain symbol used as offset");
+
+	  if (in_range_p (tmp, 0, 30, 1))
+	    {
+	      notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n");
+	      (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), tmp, 0, 1 << (yyvsp[(9) - (9)].r0).r0);
+	    }
+	  else if (in_range_p (tmp, -65536, 65535, 1))
+	    {
+	      notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, tmp);
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 186:
+#line 3168 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (7)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  if ((yyvsp[(6) - (7)].modcodes).x0 == 2)
+	    {
+	      if (!IS_IREG ((yyvsp[(5) - (7)].reg)) && !IS_PREG ((yyvsp[(5) - (7)].reg)))
+		return yyerror ("Ireg or Preg expected in address");
+	    }
+	  else if (!IS_IREG ((yyvsp[(5) - (7)].reg)))
+	    return yyerror ("Ireg expected in address");
+
+	  if (IS_IREG ((yyvsp[(5) - (7)].reg)))
+	    {
+	      notethat ("dspLDST: dregs_half = W [ iregs <post_op> ]\n");
+	      (yyval.instr) = DSPLDST(&(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), &(yyvsp[(1) - (7)].reg), (yyvsp[(6) - (7)].modcodes).x0, 0);
+	    }
+	  else
+	    {
+	      notethat ("LDSTpmod: dregs_half = W [ pregs <post_op> ]\n");
+	      (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), 0);
+	    }
+	}
+    break;
+
+  case 187:
+#line 3193 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (8)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (8)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDST: dregs = W [ pregs <post_op> ] (.)\n");
+	  (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0);
+	}
+    break;
+
+  case 188:
+#line 3204 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (9)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (9)].reg)) || !IS_PREG ((yyvsp[(7) - (9)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n");
+	  (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0);
+	}
+    break;
+
+  case 189:
+#line 3215 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (8)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (8)].reg)) || !IS_PREG ((yyvsp[(7) - (8)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n");
+	  (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0);
+	}
+    break;
+
+  case 190:
+#line 3226 "bfin-parse.y"
+    {
+	  if (!IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_PREG ((yyvsp[(2) - (6)].reg)))
+	    return yyerror ("Ireg or Preg expected in address");
+	  else if (IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+	  else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg)) && !IS_PREG ((yyvsp[(6) - (6)].reg)))
+	    return yyerror ("Dreg or Preg expected for source operand");
+
+	  if (IS_IREG ((yyvsp[(2) - (6)].reg)))
+	    {
+	      notethat ("dspLDST: [ iregs <post_op> ] = dregs\n");
+	      (yyval.instr) = DSPLDST(&(yyvsp[(2) - (6)].reg), 0, &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 1);
+	    }
+	  else if (IS_DREG ((yyvsp[(6) - (6)].reg)))
+	    {
+	      notethat ("LDST: [ pregs <post_op> ] = dregs\n");
+	      (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 0, 1);
+	    }
+	  else
+	    {
+	      notethat ("LDST: [ pregs <post_op> ] = pregs\n");
+	      (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 1, 1);
+	    }
+	}
+    break;
+
+  case 191:
+#line 3252 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(7) - (7)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+
+	  if (IS_IREG ((yyvsp[(2) - (7)].reg)) && IS_MREG ((yyvsp[(4) - (7)].reg)))
+	    {
+	      notethat ("dspLDST: [ iregs ++ mregs ] = dregs\n");
+	      (yyval.instr) = DSPLDST(&(yyvsp[(2) - (7)].reg), (yyvsp[(4) - (7)].reg).regno & CODE_MASK, &(yyvsp[(7) - (7)].reg), 3, 1);
+	    }
+	  else if (IS_PREG ((yyvsp[(2) - (7)].reg)) && IS_PREG ((yyvsp[(4) - (7)].reg)))
+	    {
+	      notethat ("LDSTpmod: [ pregs ++ pregs ] = dregs\n");
+	      (yyval.instr) = LDSTPMOD (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(4) - (7)].reg), 0, 1);
+	    }
+	  else
+	    return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
+	}
+    break;
+
+  case 192:
+#line 3271 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(8) - (8)].reg)))
+	    return yyerror ("Dreg expected for source operand");
+
+	  if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg)))
+	    {
+	      notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n");
+	      (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), &(yyvsp[(5) - (8)].reg), 1 + IS_H ((yyvsp[(8) - (8)].reg)), 1);
+	    }
+	  else
+	    return yyerror ("Preg ++ Preg expected in address");
+	}
+    break;
+
+  case 193:
+#line 3285 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(7) - (9)].expr);
+	  if (!IS_DREG ((yyvsp[(1) - (9)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (9)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if ((yyvsp[(6) - (9)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (IS_RELOC ((yyvsp[(7) - (9)].expr)))
+	    return yyerror ("Plain symbol used as offset");
+
+	  if (in_range_p (tmp, -32768, 32767, 0))
+	    {
+	      notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n",
+		       (yyvsp[(9) - (9)].r0).r0 ? 'X' : 'Z');
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, tmp);
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 194:
+#line 3309 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (8)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+	  if (!IS_PREG ((yyvsp[(5) - (8)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  notethat ("LDST: dregs = B [ pregs <post_op> ] (%c)\n",
+		    (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z');
+	  (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0);
+	}
+    break;
+
+  case 195:
+#line 3321 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(1) - (7)].reg)))
+	    return yyerror ("Dreg expected for destination operand");
+
+	  if (IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg)))
+	    {
+	      notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n");
+	      (yyval.instr) = DSPLDST(&(yyvsp[(4) - (7)].reg), (yyvsp[(6) - (7)].reg).regno & CODE_MASK, &(yyvsp[(1) - (7)].reg), 3, 0);
+	    }
+	  else if (IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg)))
+	    {
+	      notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n");
+	      (yyval.instr) = LDSTPMOD (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), 0, 0);
+	    }
+	  else
+	    return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address");
+	}
+    break;
+
+  case 196:
+#line 3340 "bfin-parse.y"
+    {
+	  Expr_Node *tmp = (yyvsp[(6) - (7)].expr);
+	  int ispreg = IS_PREG ((yyvsp[(1) - (7)].reg));
+	  int isgot = IS_RELOC((yyvsp[(6) - (7)].expr));
+
+	  if (!IS_PREG ((yyvsp[(4) - (7)].reg)))
+	    return yyerror ("Preg expected in address");
+
+	  if (!IS_DREG ((yyvsp[(1) - (7)].reg)) && !ispreg)
+	    return yyerror ("Dreg or Preg expected for destination operand");
+
+	  if (tmp->type == Expr_Node_Reloc
+	      && strcmp (tmp->value.s_value,
+			 "_current_shared_library_p5_offset_") != 0)
+	    return yyerror ("Plain symbol used as offset");
+
+	  if ((yyvsp[(5) - (7)].r0).r0)
+	    tmp = unary (Expr_Op_Type_NEG, tmp);
+
+	  if (isgot)
+	    {
+	      notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp);
+	    }
+	  else if (in_range_p (tmp, 0, 63, 3))
+	    {
+	      notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n");
+	      (yyval.instr) = LDSTII (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), tmp, 0, ispreg ? 3 : 0);
+	    }
+	  else if ((yyvsp[(4) - (7)].reg).regno == REG_FP && in_range_p (tmp, -128, 0, 3))
+	    {
+	      notethat ("LDSTiiFP: dpregs = [ FP - uimm7m4 ]\n");
+	      tmp = unary (Expr_Op_Type_NEG, tmp);
+	      (yyval.instr) = LDSTIIFP (tmp, &(yyvsp[(1) - (7)].reg), 0);
+	    }
+	  else if (in_range_p (tmp, -131072, 131071, 3))
+	    {
+	      notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n");
+	      (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp);
+
+	    }
+	  else
+	    return yyerror ("Displacement out of range");
+	}
+    break;
+
+  case 197:
+#line 3386 "bfin-parse.y"
+    {
+	  if (!IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_PREG ((yyvsp[(4) - (6)].reg)))
+	    return yyerror ("Ireg or Preg expected in address");
+	  else if (IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg)))
+	    return yyerror ("Dreg expected in destination operand");
+	  else if (IS_PREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_PREG ((yyvsp[(1) - (6)].reg))
+		   && ((yyvsp[(4) - (6)].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[(1) - (6)].reg)) || (yyvsp[(5) - (6)].modcodes).x0 != 0))
+	    return yyerror ("Dreg or Preg expected in destination operand");
+
+	  if (IS_IREG ((yyvsp[(4) - (6)].reg)))
+	    {
+	      notethat ("dspLDST: dregs = [ iregs <post_op> ]\n");
+	      (yyval.instr) = DSPLDST (&(yyvsp[(4) - (6)].reg), 0, &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0);
+	    }
+	  else if (IS_DREG ((yyvsp[(1) - (6)].reg)))
+	    {
+	      notethat ("LDST: dregs = [ pregs <post_op> ]\n");
+	      (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 0, 0);
+	    }
+	  else if (IS_PREG ((yyvsp[(1) - (6)].reg)))
+	    {
+	      if (REG_SAME ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 != 2)
+		return yyerror ("Pregs can't be same");
+
+	      notethat ("LDST: pregs = [ pregs <post_op> ]\n");
+	      (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 1, 0);
+	    }
+	  else
+	    {
+	      notethat ("PushPopReg: allregs = [ SP ++ ]\n");
+	      (yyval.instr) = PUSHPOPREG (&(yyvsp[(1) - (6)].reg), 0);
+	    }
+	}
+    break;
+
+  case 198:
+#line 3423 "bfin-parse.y"
+    {
+	  if ((yyvsp[(1) - (11)].reg).regno != REG_SP)
+	    yyerror ("Stack Pointer expected");
+	  if ((yyvsp[(4) - (11)].reg).regno == REG_R7
+	      && IN_RANGE ((yyvsp[(6) - (11)].expr), 0, 7)
+	      && (yyvsp[(8) - (11)].reg).regno == REG_P5
+	      && IN_RANGE ((yyvsp[(10) - (11)].expr), 0, 5))
+	    {
+	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim , P5 : reglim )\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(6) - (11)].expr)), imm5 ((yyvsp[(10) - (11)].expr)), 1, 1, 1);
+	    }
+	  else
+	    return yyerror ("Bad register for PushPopMultiple");
+	}
+    break;
+
+  case 199:
+#line 3439 "bfin-parse.y"
+    {
+	  if ((yyvsp[(1) - (7)].reg).regno != REG_SP)
+	    yyerror ("Stack Pointer expected");
+
+	  if ((yyvsp[(4) - (7)].reg).regno == REG_R7 && IN_RANGE ((yyvsp[(6) - (7)].expr), 0, 7))
+	    {
+	      notethat ("PushPopMultiple: [ -- SP ] = (R7 : reglim )\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(6) - (7)].expr)), 0, 1, 0, 1);
+	    }
+	  else if ((yyvsp[(4) - (7)].reg).regno == REG_P5 && IN_RANGE ((yyvsp[(6) - (7)].expr), 0, 6))
+	    {
+	      notethat ("PushPopMultiple: [ -- SP ] = (P5 : reglim )\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[(6) - (7)].expr)), 0, 1, 1);
+	    }
+	  else
+	    return yyerror ("Bad register for PushPopMultiple");
+	}
+    break;
+
+  case 200:
+#line 3458 "bfin-parse.y"
+    {
+	  if ((yyvsp[(11) - (11)].reg).regno != REG_SP)
+	    yyerror ("Stack Pointer expected");
+	  if ((yyvsp[(2) - (11)].reg).regno == REG_R7 && (IN_RANGE ((yyvsp[(4) - (11)].expr), 0, 7))
+	      && (yyvsp[(6) - (11)].reg).regno == REG_P5 && (IN_RANGE ((yyvsp[(8) - (11)].expr), 0, 6)))
+	    {
+	      notethat ("PushPopMultiple: (R7 : reglim , P5 : reglim ) = [ SP ++ ]\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(4) - (11)].expr)), imm5 ((yyvsp[(8) - (11)].expr)), 1, 1, 0);
+	    }
+	  else
+	    return yyerror ("Bad register range for PushPopMultiple");
+	}
+    break;
+
+  case 201:
+#line 3472 "bfin-parse.y"
+    {
+	  if ((yyvsp[(7) - (7)].reg).regno != REG_SP)
+	    yyerror ("Stack Pointer expected");
+
+	  if ((yyvsp[(2) - (7)].reg).regno == REG_R7 && IN_RANGE ((yyvsp[(4) - (7)].expr), 0, 7))
+	    {
+	      notethat ("PushPopMultiple: (R7 : reglim ) = [ SP ++ ]\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (imm5 ((yyvsp[(4) - (7)].expr)), 0, 1, 0, 0);
+	    }
+	  else if ((yyvsp[(2) - (7)].reg).regno == REG_P5 && IN_RANGE ((yyvsp[(4) - (7)].expr), 0, 6))
+	    {
+	      notethat ("PushPopMultiple: (P5 : reglim ) = [ SP ++ ]\n");
+	      (yyval.instr) = PUSHPOPMULTIPLE (0, imm5 ((yyvsp[(4) - (7)].expr)), 0, 1, 0);
+	    }
+	  else
+	    return yyerror ("Bad register range for PushPopMultiple");
+	}
+    break;
+
+  case 202:
+#line 3491 "bfin-parse.y"
+    {
+	  if ((yyvsp[(1) - (3)].reg).regno != REG_SP)
+	    yyerror ("Stack Pointer expected");
+
+	  if (IS_ALLREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      notethat ("PushPopReg: [ -- SP ] = allregs\n");
+	      (yyval.instr) = PUSHPOPREG (&(yyvsp[(3) - (3)].reg), 1);
+	    }
+	  else
+	    return yyerror ("Bad register for PushPopReg");
+	}
+    break;
+
+  case 203:
+#line 3507 "bfin-parse.y"
+    {
+	  if (IS_URANGE (16, (yyvsp[(2) - (2)].expr), 0, 4))
+	    (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[(2) - (2)].expr)));
+	  else
+	    return yyerror ("Bad constant for LINK");
+	}
+    break;
+
+  case 204:
+#line 3515 "bfin-parse.y"
+    {
+		notethat ("linkage: UNLINK\n");
+		(yyval.instr) = LINKAGE (1, 0);
+	}
+    break;
+
+  case 205:
+#line 3524 "bfin-parse.y"
+    {
+	  if (IS_PCREL4 ((yyvsp[(3) - (7)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (7)].expr)) && IS_CREG ((yyvsp[(7) - (7)].reg)))
+	    {
+	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters\n");
+	      (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (7)].expr), &(yyvsp[(7) - (7)].reg), 0, (yyvsp[(5) - (7)].expr), 0);
+	    }
+	  else
+	    return yyerror ("Bad register or values for LSETUP");
+
+	}
+    break;
+
+  case 206:
+#line 3535 "bfin-parse.y"
+    {
+	  if (IS_PCREL4 ((yyvsp[(3) - (9)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (9)].expr))
+	      && IS_PREG ((yyvsp[(9) - (9)].reg)) && IS_CREG ((yyvsp[(7) - (9)].reg)))
+	    {
+	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs\n");
+	      (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (9)].expr), &(yyvsp[(7) - (9)].reg), 1, (yyvsp[(5) - (9)].expr), &(yyvsp[(9) - (9)].reg));
+	    }
+	  else
+	    return yyerror ("Bad register or values for LSETUP");
+	}
+    break;
+
+  case 207:
+#line 3547 "bfin-parse.y"
+    {
+	  if (IS_PCREL4 ((yyvsp[(3) - (11)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (11)].expr))
+	      && IS_PREG ((yyvsp[(9) - (11)].reg)) && IS_CREG ((yyvsp[(7) - (11)].reg))
+	      && EXPR_VALUE ((yyvsp[(11) - (11)].expr)) == 1)
+	    {
+	      notethat ("LoopSetup: LSETUP (pcrel4 , lppcrel10 ) counters = pregs >> 1\n");
+	      (yyval.instr) = LOOPSETUP ((yyvsp[(3) - (11)].expr), &(yyvsp[(7) - (11)].reg), 3, (yyvsp[(5) - (11)].expr), &(yyvsp[(9) - (11)].reg));
+	    }
+	  else
+	    return yyerror ("Bad register or values for LSETUP");
+	}
+    break;
+
+  case 208:
+#line 3561 "bfin-parse.y"
+    {
+	  if (!IS_RELOC ((yyvsp[(2) - (3)].expr)))
+	    return yyerror ("Invalid expression in loop statement");
+	  if (!IS_CREG ((yyvsp[(3) - (3)].reg)))
+            return yyerror ("Invalid loop counter register");
+	(yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (3)].expr), &(yyvsp[(3) - (3)].reg), 0, 0);
+	}
+    break;
+
+  case 209:
+#line 3569 "bfin-parse.y"
+    {
+	  if (IS_RELOC ((yyvsp[(2) - (5)].expr)) && IS_PREG ((yyvsp[(5) - (5)].reg)) && IS_CREG ((yyvsp[(3) - (5)].reg)))
+	    {
+	      notethat ("Loop: LOOP expr counters = pregs\n");
+	      (yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (5)].expr), &(yyvsp[(3) - (5)].reg), 1, &(yyvsp[(5) - (5)].reg));
+	    }
+	  else
+	    return yyerror ("Bad register or values for LOOP");
+	}
+    break;
+
+  case 210:
+#line 3579 "bfin-parse.y"
+    {
+	  if (IS_RELOC ((yyvsp[(2) - (7)].expr)) && IS_PREG ((yyvsp[(5) - (7)].reg)) && IS_CREG ((yyvsp[(3) - (7)].reg)) && EXPR_VALUE ((yyvsp[(7) - (7)].expr)) == 1)
+	    {
+	      notethat ("Loop: LOOP expr counters = pregs >> 1\n");
+	      (yyval.instr) = bfin_gen_loop ((yyvsp[(2) - (7)].expr), &(yyvsp[(3) - (7)].reg), 3, &(yyvsp[(5) - (7)].reg));
+	    }
+	  else
+	    return yyerror ("Bad register or values for LOOP");
+	}
+    break;
+
+  case 211:
+#line 3591 "bfin-parse.y"
+    {
+	  Expr_Node_Value val;
+	  val.i_value = (yyvsp[(2) - (2)].value);
+	  Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
+	  bfin_loop_attempt_create_label (tmp, 1);
+	  if (!IS_RELOC (tmp))
+	    return yyerror ("Invalid expression in LOOP_BEGIN statement");
+	  bfin_loop_beginend (tmp, 1);
+	  (yyval.instr) = 0;
+	}
+    break;
+
+  case 212:
+#line 3602 "bfin-parse.y"
+    {
+	  if (!IS_RELOC ((yyvsp[(2) - (2)].expr)))
+	    return yyerror ("Invalid expression in LOOP_BEGIN statement");
+
+	  bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 1);
+	  (yyval.instr) = 0;
+	}
+    break;
+
+  case 213:
+#line 3612 "bfin-parse.y"
+    {
+	  Expr_Node_Value val;
+	  val.i_value = (yyvsp[(2) - (2)].value);
+	  Expr_Node *tmp = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
+	  bfin_loop_attempt_create_label (tmp, 1);
+	  if (!IS_RELOC (tmp))
+	    return yyerror ("Invalid expression in LOOP_END statement");
+	  bfin_loop_beginend (tmp, 0);
+	  (yyval.instr) = 0;
+	}
+    break;
+
+  case 214:
+#line 3623 "bfin-parse.y"
+    {
+	  if (!IS_RELOC ((yyvsp[(2) - (2)].expr)))
+	    return yyerror ("Invalid expression in LOOP_END statement");
+
+	  bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 0);
+	  (yyval.instr) = 0;
+	}
+    break;
+
+  case 215:
+#line 3634 "bfin-parse.y"
+    {
+	  notethat ("psedoDEBUG: ABORT\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, 3, 0);
+	}
+    break;
+
+  case 216:
+#line 3640 "bfin-parse.y"
+    {
+	  notethat ("pseudoDEBUG: DBG\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0);
+	}
+    break;
+
+  case 217:
+#line 3645 "bfin-parse.y"
+    {
+	  notethat ("pseudoDEBUG: DBG REG_A\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[(2) - (2)].reg)), 0);
+	}
+    break;
+
+  case 218:
+#line 3650 "bfin-parse.y"
+    {
+	  notethat ("pseudoDEBUG: DBG allregs\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[(2) - (2)].reg).regno & CODE_MASK, ((yyvsp[(2) - (2)].reg).regno & CLASS_MASK) >> 4);
+	}
+    break;
+
+  case 219:
+#line 3656 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(3) - (4)].reg)))
+	    return yyerror ("Dregs expected");
+	  notethat ("pseudoDEBUG: DBGCMPLX (dregs )\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, 6, ((yyvsp[(3) - (4)].reg).regno & CODE_MASK) >> 4);
+	}
+    break;
+
+  case 220:
+#line 3664 "bfin-parse.y"
+    {
+	  notethat ("psedoDEBUG: DBGHALT\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0);
+	}
+    break;
+
+  case 221:
+#line 3670 "bfin-parse.y"
+    {
+	  notethat ("psedoDEBUG: HLT\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0);
+	}
+    break;
+
+  case 222:
+#line 3676 "bfin-parse.y"
+    {
+	  notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n");
+	  (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[(3) - (6)].reg)), &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr)));
+	}
+    break;
+
+  case 223:
+#line 3682 "bfin-parse.y"
+    {
+	  notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n");
+	  (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr)));
+	}
+    break;
+
+  case 224:
+#line 3688 "bfin-parse.y"
+    {
+	  notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n");
+	  (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr)));
+	}
+    break;
+
+  case 225:
+#line 3694 "bfin-parse.y"
+    {
+	  if (!IS_UIMM ((yyvsp[(2) - (2)].expr), 8))
+	    return yyerror ("Constant out of range");
+	  notethat ("psedodbg_assert: OUTC uimm8\n");
+	  (yyval.instr) = bfin_gen_pseudochr (uimm8 ((yyvsp[(2) - (2)].expr)));
+	}
+    break;
+
+  case 226:
+#line 3702 "bfin-parse.y"
+    {
+	  if (!IS_DREG ((yyvsp[(2) - (2)].reg)))
+	    return yyerror ("Dregs expected");
+	  notethat ("psedodbg_assert: OUTC dreg\n");
+	  (yyval.instr) = bfin_gen_pseudodbg (2, (yyvsp[(2) - (2)].reg).regno & CODE_MASK, 0);
+	}
+    break;
+
+  case 227:
+#line 3716 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(1) - (1)].reg);
+	}
+    break;
+
+  case 228:
+#line 3720 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(1) - (1)].reg);
+	}
+    break;
+
+  case 229:
+#line 3729 "bfin-parse.y"
+    {
+	(yyval.mod).MM = 0;
+	(yyval.mod).mod = 0;
+	}
+    break;
+
+  case 230:
+#line 3734 "bfin-parse.y"
+    {
+	(yyval.mod).MM = 1;
+	(yyval.mod).mod = (yyvsp[(4) - (5)].value);
+	}
+    break;
+
+  case 231:
+#line 3739 "bfin-parse.y"
+    {
+	(yyval.mod).MM = 1;
+	(yyval.mod).mod = (yyvsp[(2) - (5)].value);
+	}
+    break;
+
+  case 232:
+#line 3744 "bfin-parse.y"
+    {
+	(yyval.mod).MM = 0;
+	(yyval.mod).mod = (yyvsp[(2) - (3)].value);
+	}
+    break;
+
+  case 233:
+#line 3749 "bfin-parse.y"
+    {
+	(yyval.mod).MM = 1;
+	(yyval.mod).mod = 0;
+	}
+    break;
+
+  case 234:
+#line 3756 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 235:
+#line 3760 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 236:
+#line 3766 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 237:
+#line 3771 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 1;
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 238:
+#line 3776 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 1;
+	}
+    break;
+
+  case 239:
+#line 3781 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 1;
+	(yyval.modcodes).x0 = 1;
+	}
+    break;
+
+  case 240:
+#line 3789 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 241:
+#line 3793 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 242:
+#line 3799 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 243:
+#line 3804 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0;
+	(yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0;
+	}
+    break;
+
+  case 244:
+#line 3811 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	(yyval.modcodes).aop = 0;
+	}
+    break;
+
+  case 245:
+#line 3817 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	(yyval.modcodes).aop = 1;
+	}
+    break;
+
+  case 246:
+#line 3823 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 1;
+	(yyval.modcodes).x0 = 0;
+	(yyval.modcodes).aop = 1;
+	}
+    break;
+
+  case 247:
+#line 3831 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 248:
+#line 3837 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 2 + (yyvsp[(2) - (3)].r0).r0;
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 249:
+#line 3843 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0;
+	(yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0;
+	}
+    break;
+
+  case 250:
+#line 3849 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 2 + (yyvsp[(2) - (5)].r0).r0;
+	(yyval.modcodes).s0 = (yyvsp[(4) - (5)].modcodes).s0;
+	(yyval.modcodes).x0 = (yyvsp[(4) - (5)].modcodes).x0;
+	}
+    break;
+
+  case 251:
+#line 3855 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 2 + (yyvsp[(4) - (5)].r0).r0;
+	(yyval.modcodes).s0 = (yyvsp[(2) - (5)].modcodes).s0;
+	(yyval.modcodes).x0 = (yyvsp[(2) - (5)].modcodes).x0;
+	}
+    break;
+
+  case 252:
+#line 3863 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 253:
+#line 3867 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 254:
+#line 3871 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 255:
+#line 3877 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 256:
+#line 3881 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 257:
+#line 3885 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 258:
+#line 3891 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).aop = 0;
+	}
+    break;
+
+  case 259:
+#line 3897 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).aop = 3;
+	}
+    break;
+
+  case 260:
+#line 3903 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = 1;
+	(yyval.modcodes).aop = 3;
+	}
+    break;
+
+  case 261:
+#line 3909 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 0;
+	(yyval.modcodes).aop = 3;
+	}
+    break;
+
+  case 262:
+#line 3915 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 263:
+#line 3920 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 264:
+#line 3927 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 265:
+#line 3931 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 266:
+#line 3937 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 0;
+	}
+    break;
+
+  case 267:
+#line 3941 "bfin-parse.y"
+    {
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 268:
+#line 3948 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 269:
+#line 3952 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 270:
+#line 3956 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 3;
+	}
+    break;
+
+  case 271:
+#line 3960 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 2;
+	}
+    break;
+
+  case 272:
+#line 3966 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 273:
+#line 3970 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 274:
+#line 3977 "bfin-parse.y"
+    {
+	(yyval.modcodes).r0 = 0;
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 275:
+#line 3982 "bfin-parse.y"
+    {
+	if ((yyvsp[(2) - (3)].value) != M_T)
+	  return yyerror ("Bad modifier");
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 0;
+	}
+    break;
+
+  case 276:
+#line 3989 "bfin-parse.y"
+    {
+	if ((yyvsp[(2) - (5)].value) != M_T)
+	  return yyerror ("Bad modifier");
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 277:
+#line 3996 "bfin-parse.y"
+    {
+	if ((yyvsp[(4) - (5)].value) != M_T)
+	  return yyerror ("Bad modifier");
+	(yyval.modcodes).r0 = 1;
+	(yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 278:
+#line 4008 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 279:
+#line 4012 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 280:
+#line 4016 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 2;
+	}
+    break;
+
+  case 281:
+#line 4022 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 282:
+#line 4026 "bfin-parse.y"
+    {
+	  if ((yyvsp[(2) - (3)].value) == M_W32)
+	    (yyval.r0).r0 = 1;
+	  else
+	    return yyerror ("Only (W32) allowed");
+	}
+    break;
+
+  case 283:
+#line 4035 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 284:
+#line 4039 "bfin-parse.y"
+    {
+	  if ((yyvsp[(2) - (3)].value) == M_IU)
+	    (yyval.r0).r0 = 3;
+	  else
+	    return yyerror ("(IU) expected");
+	}
+    break;
+
+  case 285:
+#line 4048 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(3) - (4)].reg);
+	}
+    break;
+
+  case 286:
+#line 4054 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(2) - (4)].reg);
+	}
+    break;
+
+  case 287:
+#line 4063 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 288:
+#line 4067 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 289:
+#line 4074 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 290:
+#line 4078 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 291:
+#line 4082 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 2;
+	}
+    break;
+
+  case 292:
+#line 4086 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 3;
+	}
+    break;
+
+  case 293:
+#line 4093 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 294:
+#line 4097 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 295:
+#line 4104 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 1;	/* HL.  */
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 0;	/* aop.  */
+	}
+    break;
+
+  case 296:
+#line 4112 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 1;	/* HL.  */
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 1;	/* aop.  */
+	}
+    break;
+
+  case 297:
+#line 4120 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0;	/* HL.  */
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 0;	/* aop.  */
+	}
+    break;
+
+  case 298:
+#line 4128 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0;	/* HL.  */
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 1;
+	}
+    break;
+
+  case 299:
+#line 4136 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 1;	/* HL.  */
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 0;	/* aop.  */
+	}
+    break;
+
+  case 300:
+#line 4143 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 1;	/* HL.  */
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 1;	/* aop.  */
+	}
+    break;
+
+  case 301:
+#line 4150 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0;	/* HL.  */
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 0;	/* aop.  */
+	}
+    break;
+
+  case 302:
+#line 4158 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0;	/* HL.  */
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* x.  */
+	  (yyval.modcodes).aop = 1;	/* aop.  */
+	}
+    break;
+
+  case 303:
+#line 4168 "bfin-parse.y"
+    {
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* HL.  */
+	}
+    break;
+
+  case 304:
+#line 4173 "bfin-parse.y"
+    {
+	  (yyval.modcodes).s0 = 0;	/* s.  */
+	  (yyval.modcodes).x0 = 1;	/* HL.  */
+	}
+    break;
+
+  case 305:
+#line 4178 "bfin-parse.y"
+    {
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 0;	/* HL.  */
+	}
+    break;
+
+  case 306:
+#line 4183 "bfin-parse.y"
+    {
+	  (yyval.modcodes).s0 = 1;	/* s.  */
+	  (yyval.modcodes).x0 = 1;	/* HL.  */
+	}
+    break;
+
+  case 307:
+#line 4190 "bfin-parse.y"
+    {
+	(yyval.modcodes).x0 = 2;
+	}
+    break;
+
+  case 308:
+#line 4194 "bfin-parse.y"
+    {
+	(yyval.modcodes).x0 = 0;
+	}
+    break;
+
+  case 309:
+#line 4198 "bfin-parse.y"
+    {
+	(yyval.modcodes).x0 = 1;
+	}
+    break;
+
+  case 310:
+#line 4207 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(1) - (2)].reg);
+	}
+    break;
+
+  case 311:
+#line 4214 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(1) - (2)].reg);
+	}
+    break;
+
+  case 312:
+#line 4221 "bfin-parse.y"
+    {
+	(yyval.reg) = (yyvsp[(1) - (2)].reg);
+	}
+    break;
+
+  case 313:
+#line 4228 "bfin-parse.y"
+    {
+	  if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Cannot move A1 to even register");
+	  else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Cannot move A0 to odd register");
+
+	  (yyval.macfunc).w = 1;
+          (yyval.macfunc).P = 1;
+          (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg));
+	  (yyval.macfunc).op = 3;
+          (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg);
+	  (yyval.macfunc).s0.regno = 0;
+          (yyval.macfunc).s1.regno = 0;
+	}
+    break;
+
+  case 314:
+#line 4243 "bfin-parse.y"
+    {
+	  (yyval.macfunc) = (yyvsp[(1) - (1)].macfunc);
+	  (yyval.macfunc).w = 0; (yyval.macfunc).P = 0;
+	  (yyval.macfunc).dst.regno = 0;
+	}
+    break;
+
+  case 315:
+#line 4249 "bfin-parse.y"
+    {
+	  if ((yyvsp[(4) - (5)].macfunc).n && IS_EVEN ((yyvsp[(1) - (5)].reg)))
+	    return yyerror ("Cannot move A1 to even register");
+	  else if (!(yyvsp[(4) - (5)].macfunc).n && !IS_EVEN ((yyvsp[(1) - (5)].reg)))
+	    return yyerror ("Cannot move A0 to odd register");
+
+	  (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc);
+	  (yyval.macfunc).w = 1;
+          (yyval.macfunc).P = 1;
+          (yyval.macfunc).dst = (yyvsp[(1) - (5)].reg);
+	}
+    break;
+
+  case 316:
+#line 4262 "bfin-parse.y"
+    {
+	  if ((yyvsp[(4) - (5)].macfunc).n && !IS_H ((yyvsp[(1) - (5)].reg)))
+	    return yyerror ("Cannot move A1 to low half of register");
+	  else if (!(yyvsp[(4) - (5)].macfunc).n && IS_H ((yyvsp[(1) - (5)].reg)))
+	    return yyerror ("Cannot move A0 to high half of register");
+
+	  (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc);
+	  (yyval.macfunc).w = 1;
+	  (yyval.macfunc).P = 0;
+          (yyval.macfunc).dst = (yyvsp[(1) - (5)].reg);
+	}
+    break;
+
+  case 317:
+#line 4275 "bfin-parse.y"
+    {
+	  if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Cannot move A1 to low half of register");
+	  else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg)))
+	    return yyerror ("Cannot move A0 to high half of register");
+
+	  (yyval.macfunc).w = 1;
+	  (yyval.macfunc).P = 0;
+	  (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg));
+	  (yyval.macfunc).op = 3;
+          (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg);
+	  (yyval.macfunc).s0.regno = 0;
+          (yyval.macfunc).s1.regno = 0;
+	}
+    break;
+
+  case 318:
+#line 4293 "bfin-parse.y"
+    {
+	  (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg));
+	  (yyval.macfunc).op = 0;
+	  (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0;
+	  (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1;
+	}
+    break;
+
+  case 319:
+#line 4300 "bfin-parse.y"
+    {
+	  (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg));
+	  (yyval.macfunc).op = 1;
+	  (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0;
+	  (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1;
+	}
+    break;
+
+  case 320:
+#line 4307 "bfin-parse.y"
+    {
+	  (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg));
+	  (yyval.macfunc).op = 2;
+	  (yyval.macfunc).s0 = (yyvsp[(2) - (2)].macfunc).s0;
+	  (yyval.macfunc).s1 = (yyvsp[(2) - (2)].macfunc).s1;
+	}
+    break;
+
+  case 321:
+#line 4317 "bfin-parse.y"
+    {
+	  if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg)))
+	    {
+	      (yyval.macfunc).s0 = (yyvsp[(1) - (3)].reg);
+              (yyval.macfunc).s1 = (yyvsp[(3) - (3)].reg);
+	    }
+	  else
+	    return yyerror ("Dregs expected");
+	}
+    break;
+
+  case 322:
+#line 4330 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 0;
+	}
+    break;
+
+  case 323:
+#line 4334 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 1;
+	}
+    break;
+
+  case 324:
+#line 4338 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 2;
+	}
+    break;
+
+  case 325:
+#line 4342 "bfin-parse.y"
+    {
+	(yyval.r0).r0 = 3;
+	}
+    break;
+
+  case 326:
+#line 4349 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno;
+	  (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0;
+	  (yyval.modcodes).s0 = 0;
+	}
+    break;
+
+  case 327:
+#line 4355 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0x18;
+	  (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0;
+	  (yyval.modcodes).s0 = 0;
+	}
+    break;
+
+  case 328:
+#line 4361 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno;
+	  (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0;
+	  (yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 329:
+#line 4367 "bfin-parse.y"
+    {
+	  (yyval.modcodes).r0 = 0x18;
+	  (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0;
+	  (yyval.modcodes).s0 = 1;
+	}
+    break;
+
+  case 330:
+#line 4377 "bfin-parse.y"
+    {
+	Expr_Node_Value val;
+	val.s_value = S_GET_NAME((yyvsp[(1) - (1)].symbol));
+	(yyval.expr) = Expr_Node_Create (Expr_Node_Reloc, val, NULL, NULL);
+	}
+    break;
+
+  case 331:
+#line 4386 "bfin-parse.y"
+    { (yyval.value) = BFD_RELOC_BFIN_GOT; }
+    break;
+
+  case 332:
+#line 4388 "bfin-parse.y"
+    { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; }
+    break;
+
+  case 333:
+#line 4390 "bfin-parse.y"
+    { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; }
+    break;
+
+  case 334:
+#line 4394 "bfin-parse.y"
+    {
+	Expr_Node_Value val;
+	val.i_value = (yyvsp[(3) - (3)].value);
+	(yyval.expr) = Expr_Node_Create (Expr_Node_GOT_Reloc, val, (yyvsp[(1) - (3)].expr), NULL);
+	}
+    break;
+
+  case 335:
+#line 4402 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (1)].expr);
+	}
+    break;
+
+  case 336:
+#line 4406 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (1)].expr);
+	}
+    break;
+
+  case 337:
+#line 4413 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (3)].expr);
+	}
+    break;
+
+  case 338:
+#line 4419 "bfin-parse.y"
+    {
+	Expr_Node_Value val;
+	val.i_value = (yyvsp[(1) - (1)].value);
+	(yyval.expr) = Expr_Node_Create (Expr_Node_Constant, val, NULL, NULL);
+	}
+    break;
+
+  case 339:
+#line 4425 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (1)].expr);
+	}
+    break;
+
+  case 340:
+#line 4429 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(2) - (3)].expr);
+	}
+    break;
+
+  case 341:
+#line 4433 "bfin-parse.y"
+    {
+	(yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[(2) - (2)].expr));
+	}
+    break;
+
+  case 342:
+#line 4437 "bfin-parse.y"
+    {
+	(yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[(2) - (2)].expr));
+	}
+    break;
+
+  case 343:
+#line 4443 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (1)].expr);
+	}
+    break;
+
+  case 344:
+#line 4449 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 345:
+#line 4453 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 346:
+#line 4457 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 347:
+#line 4461 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 348:
+#line 4465 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 349:
+#line 4469 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 350:
+#line 4473 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 351:
+#line 4477 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 352:
+#line 4481 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 353:
+#line 4485 "bfin-parse.y"
+    {
+	(yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
+	}
+    break;
+
+  case 354:
+#line 4489 "bfin-parse.y"
+    {
+	(yyval.expr) = (yyvsp[(1) - (1)].expr);
+	}
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 7561 "bfin-parse.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 4495 "bfin-parse.y"
+
+
+EXPR_T
+mkexpr (int x, SYMBOL_T s)
+{
+  EXPR_T e = (EXPR_T) ALLOCATE (sizeof (struct expression_cell));
+  e->value = x;
+  EXPR_SYMBOL(e) = s;
+  return e;
+}
+
+static int
+value_match (Expr_Node *exp, int sz, int sign, int mul, int issigned)
+{
+  int umax = (1 << sz) - 1;
+  int min = -1 << (sz - 1);
+  int max = (1 << (sz - 1)) - 1;
+
+  int v = (EXPR_VALUE (exp)) & 0xffffffff;
+
+  if ((v % mul) != 0)
+    {
+      error ("%s:%d: Value Error -- Must align to %d\n", __FILE__, __LINE__, mul);
+      return 0;
+    }
+
+  v /= mul;
+
+  if (sign)
+    v = -v;
+
+  if (issigned)
+    {
+      if (v >= min && v <= max) return 1;
+
+#ifdef DEBUG
+      fprintf(stderr, "signed value %lx out of range\n", v * mul);
+#endif
+      return 0;
+    }
+  if (v <= umax && v >= 0)
+    return 1;
+#ifdef DEBUG
+  fprintf(stderr, "unsigned value %lx out of range\n", v * mul);
+#endif
+  return 0;
+}
+
+/* Return the expression structure that allows symbol operations.
+   If the left and right children are constants, do the operation.  */
+static Expr_Node *
+binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
+{
+  Expr_Node_Value val;
+
+  if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
+    {
+      switch (op)
+	{
+        case Expr_Op_Type_Add:
+	  x->value.i_value += y->value.i_value;
+	  break;
+        case Expr_Op_Type_Sub:
+	  x->value.i_value -= y->value.i_value;
+	  break;
+        case Expr_Op_Type_Mult:
+	  x->value.i_value *= y->value.i_value;
+	  break;
+        case Expr_Op_Type_Div:
+	  if (y->value.i_value == 0)
+	    error ("Illegal Expression:  Division by zero.");
+	  else
+	    x->value.i_value /= y->value.i_value;
+	  break;
+        case Expr_Op_Type_Mod:
+	  x->value.i_value %= y->value.i_value;
+	  break;
+        case Expr_Op_Type_Lshift:
+	  x->value.i_value <<= y->value.i_value;
+	  break;
+        case Expr_Op_Type_Rshift:
+	  x->value.i_value >>= y->value.i_value;
+	  break;
+        case Expr_Op_Type_BAND:
+	  x->value.i_value &= y->value.i_value;
+	  break;
+        case Expr_Op_Type_BOR:
+	  x->value.i_value |= y->value.i_value;
+	  break;
+        case Expr_Op_Type_BXOR:
+	  x->value.i_value ^= y->value.i_value;
+	  break;
+        case Expr_Op_Type_LAND:
+	  x->value.i_value = x->value.i_value && y->value.i_value;
+	  break;
+        case Expr_Op_Type_LOR:
+	  x->value.i_value = x->value.i_value || y->value.i_value;
+	  break;
+
+	default:
+	  error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
+	}
+      return x;
+    }
+  /* Canonicalize order to EXPR OP CONSTANT.  */
+  if (x->type == Expr_Node_Constant)
+    {
+      Expr_Node *t = x;
+      x = y;
+      y = t;
+    }
+  /* Canonicalize subtraction of const to addition of negated const.  */
+  if (op == Expr_Op_Type_Sub && y->type == Expr_Node_Constant)
+    {
+      op = Expr_Op_Type_Add;
+      y->value.i_value = -y->value.i_value;
+    }
+  if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
+      && x->Right_Child->type == Expr_Node_Constant)
+    {
+      if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
+	{
+	  x->Right_Child->value.i_value += y->value.i_value;
+	  return x;
+	}
+    }
+
+  /* Create a new expression structure.  */
+  val.op_value = op;
+  return Expr_Node_Create (Expr_Node_Binop, val, x, y);
+}
+
+static Expr_Node *
+unary (Expr_Op_Type op, Expr_Node *x)
+{
+  if (x->type == Expr_Node_Constant)
+    {
+      switch (op)
+	{
+	case Expr_Op_Type_NEG:
+	  x->value.i_value = -x->value.i_value;
+	  break;
+	case Expr_Op_Type_COMP:
+	  x->value.i_value = ~x->value.i_value;
+	  break;
+	default:
+	  error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__);
+	}
+      return x;
+    }
+  else
+    {
+      /* Create a new expression structure.  */
+      Expr_Node_Value val;
+      val.op_value = op;
+      return Expr_Node_Create (Expr_Node_Unop, val, x, NULL);
+    }
+}
+
+int debug_codeselection = 0;
+static void
+notethat (char *format, ...)
+{
+  va_list ap;
+  va_start (ap, format);
+  if (debug_codeselection)
+    {
+      vfprintf (errorf, format, ap);
+    }
+  va_end (ap);
+}
+
+#ifdef TEST
+main (int argc, char **argv)
+{
+  yyparse();
+}
+#endif
+
+
diff --git a/gas/bfin-parse.h b/gas/bfin-parse.h
new file mode 100644
index 0000000..5732683
--- /dev/null
+++ b/gas/bfin-parse.h
@@ -0,0 +1,414 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     BYTEOP16P = 258,
+     BYTEOP16M = 259,
+     BYTEOP1P = 260,
+     BYTEOP2P = 261,
+     BYTEOP3P = 262,
+     BYTEUNPACK = 263,
+     BYTEPACK = 264,
+     PACK = 265,
+     SAA = 266,
+     ALIGN8 = 267,
+     ALIGN16 = 268,
+     ALIGN24 = 269,
+     VIT_MAX = 270,
+     EXTRACT = 271,
+     DEPOSIT = 272,
+     EXPADJ = 273,
+     SEARCH = 274,
+     ONES = 275,
+     SIGN = 276,
+     SIGNBITS = 277,
+     LINK = 278,
+     UNLINK = 279,
+     REG = 280,
+     PC = 281,
+     CCREG = 282,
+     BYTE_DREG = 283,
+     REG_A_DOUBLE_ZERO = 284,
+     REG_A_DOUBLE_ONE = 285,
+     A_ZERO_DOT_L = 286,
+     A_ZERO_DOT_H = 287,
+     A_ONE_DOT_L = 288,
+     A_ONE_DOT_H = 289,
+     HALF_REG = 290,
+     NOP = 291,
+     RTI = 292,
+     RTS = 293,
+     RTX = 294,
+     RTN = 295,
+     RTE = 296,
+     HLT = 297,
+     IDLE = 298,
+     STI = 299,
+     CLI = 300,
+     CSYNC = 301,
+     SSYNC = 302,
+     EMUEXCPT = 303,
+     RAISE = 304,
+     EXCPT = 305,
+     LSETUP = 306,
+     LOOP = 307,
+     LOOP_BEGIN = 308,
+     LOOP_END = 309,
+     DISALGNEXCPT = 310,
+     JUMP = 311,
+     JUMP_DOT_S = 312,
+     JUMP_DOT_L = 313,
+     CALL = 314,
+     ABORT = 315,
+     NOT = 316,
+     TILDA = 317,
+     BANG = 318,
+     AMPERSAND = 319,
+     BAR = 320,
+     PERCENT = 321,
+     CARET = 322,
+     BXOR = 323,
+     MINUS = 324,
+     PLUS = 325,
+     STAR = 326,
+     SLASH = 327,
+     NEG = 328,
+     MIN = 329,
+     MAX = 330,
+     ABS = 331,
+     DOUBLE_BAR = 332,
+     _PLUS_BAR_PLUS = 333,
+     _PLUS_BAR_MINUS = 334,
+     _MINUS_BAR_PLUS = 335,
+     _MINUS_BAR_MINUS = 336,
+     _MINUS_MINUS = 337,
+     _PLUS_PLUS = 338,
+     SHIFT = 339,
+     LSHIFT = 340,
+     ASHIFT = 341,
+     BXORSHIFT = 342,
+     _GREATER_GREATER_GREATER_THAN_ASSIGN = 343,
+     ROT = 344,
+     LESS_LESS = 345,
+     GREATER_GREATER = 346,
+     _GREATER_GREATER_GREATER = 347,
+     _LESS_LESS_ASSIGN = 348,
+     _GREATER_GREATER_ASSIGN = 349,
+     DIVS = 350,
+     DIVQ = 351,
+     ASSIGN = 352,
+     _STAR_ASSIGN = 353,
+     _BAR_ASSIGN = 354,
+     _CARET_ASSIGN = 355,
+     _AMPERSAND_ASSIGN = 356,
+     _MINUS_ASSIGN = 357,
+     _PLUS_ASSIGN = 358,
+     _ASSIGN_BANG = 359,
+     _LESS_THAN_ASSIGN = 360,
+     _ASSIGN_ASSIGN = 361,
+     GE = 362,
+     LT = 363,
+     LE = 364,
+     GT = 365,
+     LESS_THAN = 366,
+     FLUSHINV = 367,
+     FLUSH = 368,
+     IFLUSH = 369,
+     PREFETCH = 370,
+     PRNT = 371,
+     OUTC = 372,
+     WHATREG = 373,
+     TESTSET = 374,
+     ASL = 375,
+     ASR = 376,
+     B = 377,
+     W = 378,
+     NS = 379,
+     S = 380,
+     CO = 381,
+     SCO = 382,
+     TH = 383,
+     TL = 384,
+     BP = 385,
+     BREV = 386,
+     X = 387,
+     Z = 388,
+     M = 389,
+     MMOD = 390,
+     R = 391,
+     RND = 392,
+     RNDL = 393,
+     RNDH = 394,
+     RND12 = 395,
+     RND20 = 396,
+     V = 397,
+     LO = 398,
+     HI = 399,
+     BITTGL = 400,
+     BITCLR = 401,
+     BITSET = 402,
+     BITTST = 403,
+     BITMUX = 404,
+     DBGAL = 405,
+     DBGAH = 406,
+     DBGHALT = 407,
+     DBG = 408,
+     DBGA = 409,
+     DBGCMPLX = 410,
+     IF = 411,
+     COMMA = 412,
+     BY = 413,
+     COLON = 414,
+     SEMICOLON = 415,
+     RPAREN = 416,
+     LPAREN = 417,
+     LBRACK = 418,
+     RBRACK = 419,
+     STATUS_REG = 420,
+     MNOP = 421,
+     SYMBOL = 422,
+     NUMBER = 423,
+     GOT = 424,
+     GOT17M4 = 425,
+     FUNCDESC_GOT17M4 = 426,
+     AT = 427,
+     PLTPC = 428
+   };
+#endif
+/* Tokens.  */
+#define BYTEOP16P 258
+#define BYTEOP16M 259
+#define BYTEOP1P 260
+#define BYTEOP2P 261
+#define BYTEOP3P 262
+#define BYTEUNPACK 263
+#define BYTEPACK 264
+#define PACK 265
+#define SAA 266
+#define ALIGN8 267
+#define ALIGN16 268
+#define ALIGN24 269
+#define VIT_MAX 270
+#define EXTRACT 271
+#define DEPOSIT 272
+#define EXPADJ 273
+#define SEARCH 274
+#define ONES 275
+#define SIGN 276
+#define SIGNBITS 277
+#define LINK 278
+#define UNLINK 279
+#define REG 280
+#define PC 281
+#define CCREG 282
+#define BYTE_DREG 283
+#define REG_A_DOUBLE_ZERO 284
+#define REG_A_DOUBLE_ONE 285
+#define A_ZERO_DOT_L 286
+#define A_ZERO_DOT_H 287
+#define A_ONE_DOT_L 288
+#define A_ONE_DOT_H 289
+#define HALF_REG 290
+#define NOP 291
+#define RTI 292
+#define RTS 293
+#define RTX 294
+#define RTN 295
+#define RTE 296
+#define HLT 297
+#define IDLE 298
+#define STI 299
+#define CLI 300
+#define CSYNC 301
+#define SSYNC 302
+#define EMUEXCPT 303
+#define RAISE 304
+#define EXCPT 305
+#define LSETUP 306
+#define LOOP 307
+#define LOOP_BEGIN 308
+#define LOOP_END 309
+#define DISALGNEXCPT 310
+#define JUMP 311
+#define JUMP_DOT_S 312
+#define JUMP_DOT_L 313
+#define CALL 314
+#define ABORT 315
+#define NOT 316
+#define TILDA 317
+#define BANG 318
+#define AMPERSAND 319
+#define BAR 320
+#define PERCENT 321
+#define CARET 322
+#define BXOR 323
+#define MINUS 324
+#define PLUS 325
+#define STAR 326
+#define SLASH 327
+#define NEG 328
+#define MIN 329
+#define MAX 330
+#define ABS 331
+#define DOUBLE_BAR 332
+#define _PLUS_BAR_PLUS 333
+#define _PLUS_BAR_MINUS 334
+#define _MINUS_BAR_PLUS 335
+#define _MINUS_BAR_MINUS 336
+#define _MINUS_MINUS 337
+#define _PLUS_PLUS 338
+#define SHIFT 339
+#define LSHIFT 340
+#define ASHIFT 341
+#define BXORSHIFT 342
+#define _GREATER_GREATER_GREATER_THAN_ASSIGN 343
+#define ROT 344
+#define LESS_LESS 345
+#define GREATER_GREATER 346
+#define _GREATER_GREATER_GREATER 347
+#define _LESS_LESS_ASSIGN 348
+#define _GREATER_GREATER_ASSIGN 349
+#define DIVS 350
+#define DIVQ 351
+#define ASSIGN 352
+#define _STAR_ASSIGN 353
+#define _BAR_ASSIGN 354
+#define _CARET_ASSIGN 355
+#define _AMPERSAND_ASSIGN 356
+#define _MINUS_ASSIGN 357
+#define _PLUS_ASSIGN 358
+#define _ASSIGN_BANG 359
+#define _LESS_THAN_ASSIGN 360
+#define _ASSIGN_ASSIGN 361
+#define GE 362
+#define LT 363
+#define LE 364
+#define GT 365
+#define LESS_THAN 366
+#define FLUSHINV 367
+#define FLUSH 368
+#define IFLUSH 369
+#define PREFETCH 370
+#define PRNT 371
+#define OUTC 372
+#define WHATREG 373
+#define TESTSET 374
+#define ASL 375
+#define ASR 376
+#define B 377
+#define W 378
+#define NS 379
+#define S 380
+#define CO 381
+#define SCO 382
+#define TH 383
+#define TL 384
+#define BP 385
+#define BREV 386
+#define X 387
+#define Z 388
+#define M 389
+#define MMOD 390
+#define R 391
+#define RND 392
+#define RNDL 393
+#define RNDH 394
+#define RND12 395
+#define RND20 396
+#define V 397
+#define LO 398
+#define HI 399
+#define BITTGL 400
+#define BITCLR 401
+#define BITSET 402
+#define BITTST 403
+#define BITMUX 404
+#define DBGAL 405
+#define DBGAH 406
+#define DBGHALT 407
+#define DBG 408
+#define DBGA 409
+#define DBGCMPLX 410
+#define IF 411
+#define COMMA 412
+#define BY 413
+#define COLON 414
+#define SEMICOLON 415
+#define RPAREN 416
+#define LPAREN 417
+#define LBRACK 418
+#define RBRACK 419
+#define STATUS_REG 420
+#define MNOP 421
+#define SYMBOL 422
+#define NUMBER 423
+#define GOT 424
+#define GOT17M4 425
+#define FUNCDESC_GOT17M4 426
+#define AT 427
+#define PLTPC 428
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 448 "bfin-parse.y"
+{
+  INSTR_T instr;
+  Expr_Node *expr;
+  SYMBOL_T symbol;
+  long value;
+  Register reg;
+  Macfunc macfunc;
+  struct { int r0; int s0; int x0; int aop; } modcodes;
+  struct { int r0; } r0;
+  Opt_mode mod;
+}
+/* Line 1529 of yacc.c.  */
+#line 407 "bfin-parse.h"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/gas/doc/as.info b/gas/doc/as.info
new file mode 100644
index 0000000..67e22ab
--- /dev/null
+++ b/gas/doc/as.info
Binary files differ
diff --git a/gas/itbl-lex.c b/gas/itbl-lex.c
new file mode 100644
index 0000000..439d01f
--- /dev/null
+++ b/gas/itbl-lex.c
@@ -0,0 +1,1925 @@
+
+#line 3 "itbl-lex.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = (yy_hold_char); \
+		YY_RESTORE_YY_MORE_OFFSET \
+		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	yy_size_t yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
+yy_size_t yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;		/* whether we need to initialize */
+static int yy_start = 0;	/* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	(yytext_ptr) = yy_bp; \
+	yyleng = (yy_size_t) (yy_cp - yy_bp); \
+	(yy_hold_char) = *yy_cp; \
+	*yy_cp = '\0'; \
+	(yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 15
+#define YY_END_OF_BUFFER 16
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[60] =
+    {   0,
+        0,    0,   16,   14,   13,   12,   11,    8,    8,   10,
+       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+       10,    8,    0,   10,   10,   10,   10,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,    7,    9,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+        5,    1,    2,    3,   10,    6,   10,    4,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    1,    1,    5,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    6,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    1,    8,    1,
+        1,    1,    1,    1,    9,   10,   11,   12,   13,   10,
+       14,   15,   16,   15,   15,   15,   17,   18,   15,   15,
+       15,   19,   20,   15,   15,   15,   15,   15,   15,   15,
+        1,    1,    1,    1,   15,    1,   21,   10,   22,   23,
+
+       24,   10,   25,   15,   26,   15,   15,   15,   27,   28,
+       15,   29,   15,   30,   31,   15,   15,   15,   15,   32,
+       15,   15,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[33] =
+    {   0,
+        1,    1,    1,    1,    1,    2,    2,    1,    2,    2,
+        2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
+        2,    2,    2,    2,    3,    3,    3,    3,    3,    3,
+        3,    3
+    } ;
+
+static yyconst flex_int16_t yy_base[62] =
+    {   0,
+        0,    0,   83,   84,   84,   84,   84,   27,   29,   70,
+        0,   62,   61,   60,   20,   55,   47,   46,   45,   12,
+       35,   37,    0,    0,   62,   60,   59,   58,   53,   49,
+       45,   43,   42,   41,   37,   32,    0,    0,   43,   44,
+       43,   42,   42,   36,   23,   27,   26,   25,   25,   20,
+        0,    0,    0,    0,   35,    0,   23,    0,   84,   58,
+       43
+    } ;
+
+static yyconst flex_int16_t yy_def[62] =
+    {   0,
+       59,    1,   59,   59,   59,   59,   59,   59,   59,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   59,   61,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   61,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,    0,   59,
+       59
+    } ;
+
+static yyconst flex_int16_t yy_nxt[117] =
+    {   0,
+        4,    5,    6,    5,    7,    8,    9,    7,   10,   11,
+       12,   13,   11,   14,   11,   15,   11,   11,   11,   11,
+       16,   17,   18,   11,   19,   20,   11,   11,   21,   11,
+       11,   11,   22,   22,   22,   22,   29,   30,   35,   36,
+       37,   37,   22,   22,   38,   58,   58,   56,   57,   54,
+       53,   52,   51,   56,   55,   54,   53,   52,   23,   24,
+       24,   51,   50,   49,   48,   47,   46,   45,   44,   43,
+       42,   41,   40,   39,   34,   33,   32,   31,   28,   27,
+       26,   25,   59,    3,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59
+    } ;
+
+static yyconst flex_int16_t yy_chk[117] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    8,    8,    9,    9,   15,   15,   20,   20,
+       21,   21,   22,   22,   61,   57,   55,   50,   49,   48,
+       47,   46,   45,   44,   43,   42,   41,   40,    8,   60,
+       60,   39,   36,   35,   34,   33,   32,   31,   30,   29,
+       28,   27,   26,   25,   19,   18,   17,   16,   14,   13,
+       12,   10,    3,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "itbl-lex.l"
+/* itbl-lex.l
+   Copyright 1997, 1998, 2001, 2002, 2005, 2006, 2007
+   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 3, 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.  */
+#line 23 "itbl-lex.l"
+#include "as.h"
+#include "itbl-lex.h"
+#include <itbl-parse.h>
+
+#ifdef DEBUG
+#define DBG(x) printf x
+#define MDBG(x) printf x
+#else
+#define DBG(x)
+#define MDBG(x)
+#endif
+
+int insntbl_line = 1;
+#line 528 "itbl-lex.c"
+
+#define INITIAL 0
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yyget_in (void );
+
+void yyset_in  (FILE * in_str  );
+
+FILE *yyget_out (void );
+
+void yyset_out  (FILE * out_str  );
+
+yy_size_t yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		yy_size_t n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    
+#line 43 "itbl-lex.l"
+
+
+#line 713 "itbl-lex.c"
+
+	if ( !(yy_init) )
+		{
+		(yy_init) = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! (yy_start) )
+			(yy_start) = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			yyensure_buffer_stack ();
+			YY_CURRENT_BUFFER_LVALUE =
+				yy_create_buffer(yyin,YY_BUF_SIZE );
+		}
+
+		yy_load_buffer_state( );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = (yy_c_buf_p);
+
+		/* Support of yytext. */
+		*yy_cp = (yy_hold_char);
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = (yy_start);
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				(yy_last_accepting_state) = yy_current_state;
+				(yy_last_accepting_cpos) = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 60 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_base[yy_current_state] != 84 );
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+		if ( yy_act == 0 )
+			{ /* have to back up */
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			yy_act = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = (yy_hold_char);
+			yy_cp = (yy_last_accepting_cpos);
+			yy_current_state = (yy_last_accepting_state);
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 45 "itbl-lex.l"
+{
+    return CREG;
+  }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 48 "itbl-lex.l"
+{
+    return DREG;
+  }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 51 "itbl-lex.l"
+{
+    return GREG;
+  }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 54 "itbl-lex.l"
+{
+    return IMMED;
+  }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 57 "itbl-lex.l"
+{
+    return ADDR;
+  }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 60 "itbl-lex.l"
+{
+    return INSN;
+  }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 63 "itbl-lex.l"
+{
+    yytext[yyleng] = 0;
+    yylval.processor = strtoul (yytext+1, 0, 0);
+    return PNUM;
+  }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 68 "itbl-lex.l"
+{
+    yytext[yyleng] = 0;
+    yylval.num = strtoul (yytext, 0, 0);
+    return NUM;
+  }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 73 "itbl-lex.l"
+{
+    yytext[yyleng] = 0;
+    yylval.num = strtoul (yytext, 0, 0);
+    return NUM;
+  }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 78 "itbl-lex.l"
+{
+    yytext[yyleng] = 0;
+    yylval.str = strdup (yytext);
+    return ID;
+  }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 83 "itbl-lex.l"
+{
+    int c;
+    while ((c = input ()) !=  EOF) 
+      {
+        if (c ==  '\n') 
+    	{
+    		unput (c);
+    		break;
+    	}
+      }
+  }
+	YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+#line 94 "itbl-lex.l"
+{ 
+    insntbl_line++; 
+    MDBG (("in lex, NL = %d (x%x)\n", NL, NL));
+    return NL; 
+  }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 99 "itbl-lex.l"
+{ 
+  }
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 101 "itbl-lex.l"
+{
+    MDBG (("char = %x, %d\n", yytext[0], yytext[0]));
+    return yytext[0];
+  }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 105 "itbl-lex.l"
+ECHO;
+	YY_BREAK
+#line 918 "itbl-lex.c"
+case YY_STATE_EOF(INITIAL):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = (yy_hold_char);
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state(  );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++(yy_c_buf_p);
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = (yy_c_buf_p);
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer(  ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				(yy_did_buffer_switch_on_eof) = 0;
+
+				if ( yywrap( ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				(yy_c_buf_p) =
+					(yytext_ptr) + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				(yy_c_buf_p) =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+				yy_current_state = yy_get_previous_state(  );
+
+				yy_cp = (yy_c_buf_p);
+				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = (yytext_ptr);
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+	else
+		{
+			yy_size_t num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				yy_size_t new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			(yy_n_chars), num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	if ( (yy_n_chars) == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart(yyin  );
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	(yy_n_chars) += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    
+	yy_current_state = (yy_start);
+
+	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			(yy_last_accepting_state) = yy_current_state;
+			(yy_last_accepting_cpos) = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 60 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+	register int yy_is_jam;
+    	register char *yy_cp = (yy_c_buf_p);
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		(yy_last_accepting_state) = yy_current_state;
+		(yy_last_accepting_cpos) = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 60 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 59);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+	register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+	/* undo effects of setting up yytext */
+	*yy_cp = (yy_hold_char);
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register yy_size_t number_to_move = (yy_n_chars) + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+	(yytext_ptr) = yy_bp;
+	(yy_hold_char) = *yy_cp;
+	(yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+	int c;
+    
+	*(yy_c_buf_p) = (yy_hold_char);
+
+	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+			/* This was really a NUL. */
+			*(yy_c_buf_p) = '\0';
+
+		else
+			{ /* need more input */
+			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			++(yy_c_buf_p);
+
+			switch ( yy_get_next_buffer(  ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart(yyin );
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap( ) )
+						return 0;
+
+					if ( ! (yy_did_buffer_switch_on_eof) )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput();
+#else
+					return input();
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					(yy_c_buf_p) = (yytext_ptr) + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
+	*(yy_c_buf_p) = '\0';	/* preserve yytext */
+	(yy_hold_char) = *++(yy_c_buf_p);
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file )
+{
+    
+	if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack ();
+		YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE );
+	}
+
+	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+	yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
+     */
+	yyensure_buffer_stack ();
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	yy_load_buffer_state( );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state  (void)
+{
+    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	(yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer(b,file );
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * 
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yyfree((void *) b->yy_ch_buf  );
+
+	yyfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+	int oerrno = errno;
+    
+	yy_flush_buffer(b );
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
+{
+    	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+    	if (new_buffer == NULL)
+		return;
+
+	yyensure_buffer_stack();
+
+	/* This block is copied from yy_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*(yy_c_buf_p) = (yy_hold_char);
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		(yy_buffer_stack_top)++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state( );
+	(yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void yypop_buffer_state (void)
+{
+    	if (!YY_CURRENT_BUFFER)
+		return;
+
+	yy_delete_buffer(YY_CURRENT_BUFFER );
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if ((yy_buffer_stack_top) > 0)
+		--(yy_buffer_stack_top);
+
+	if (YY_CURRENT_BUFFER) {
+		yy_load_buffer_state( );
+		(yy_did_buffer_switch_on_eof) = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+	yy_size_t num_to_alloc;
+    
+	if (!(yy_buffer_stack)) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+								  
+		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		(yy_buffer_stack_max) = num_to_alloc;
+		(yy_buffer_stack_top) = 0;
+		return;
+	}
+
+	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = (yy_buffer_stack_max) + grow_size;
+		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+								((yy_buffer_stack),
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								);
+		if ( ! (yy_buffer_stack) )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+		(yy_buffer_stack_max) = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer(b  );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+    
+	return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n, i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) yyalloc(n  );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer(buf,n );
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = (yy_hold_char); \
+		(yy_c_buf_p) = yytext + yyless_macro_arg; \
+		(yy_hold_char) = *(yy_c_buf_p); \
+		*(yy_c_buf_p) = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int yyget_lineno  (void)
+{
+        
+    return yylineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yyget_in  (void)
+{
+        return yyin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yyget_out  (void)
+{
+        return yyout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+yy_size_t yyget_leng  (void)
+{
+        return yyleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yyget_text  (void)
+{
+        return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yyset_lineno (int  line_number )
+{
+    
+    yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str )
+{
+        yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str )
+{
+        yyout = out_str ;
+}
+
+int yyget_debug  (void)
+{
+        return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug )
+{
+        yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		yy_delete_buffer(YY_CURRENT_BUFFER  );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		yypop_buffer_state();
+	}
+
+	/* Destroy the stack itself. */
+	yyfree((yy_buffer_stack) );
+	(yy_buffer_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size )
+{
+	return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size )
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 105 "itbl-lex.l"
+
+
+
+#ifndef yywrap
+int 
+yywrap () 
+  { 
+    return 1; 
+  }
+#endif
+
diff --git a/gas/itbl-parse.c b/gas/itbl-parse.c
new file mode 100644
index 0000000..6dc09e3
--- /dev/null
+++ b/gas/itbl-parse.c
@@ -0,0 +1,2006 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     DREG = 258,
+     CREG = 259,
+     GREG = 260,
+     IMMED = 261,
+     ADDR = 262,
+     INSN = 263,
+     NUM = 264,
+     ID = 265,
+     NL = 266,
+     PNUM = 267
+   };
+#endif
+/* Tokens.  */
+#define DREG 258
+#define CREG 259
+#define GREG 260
+#define IMMED 261
+#define ADDR 262
+#define INSN 263
+#define NUM 264
+#define ID 265
+#define NL 266
+#define PNUM 267
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 21 "itbl-parse.y"
+
+
+/* 
+
+Yacc grammar for instruction table entries.
+
+=======================================================================
+Original Instruction table specification document:
+
+	    MIPS Coprocessor Table Specification
+	    ====================================
+
+This document describes the format of the MIPS coprocessor table.  The
+table specifies a list of valid functions, data registers and control
+registers that can be used in coprocessor instructions.  This list,
+together with the coprocessor instruction classes listed below,
+specifies the complete list of coprocessor instructions that will
+be recognized and assembled by the GNU assembler.  In effect,
+this makes the GNU assembler table-driven, where the table is
+specified by the programmer.
+
+The table is an ordinary text file that the GNU assembler reads when
+it starts.  Using the information in the table, the assembler
+generates an internal list of valid coprocessor registers and
+functions.  The assembler uses this internal list in addition to the
+standard MIPS registers and instructions which are built-in to the 
+assembler during code generation.
+
+To specify the coprocessor table when invoking the GNU assembler, use
+the command line option "--itbl file", where file is the
+complete name of the table, including path and extension.
+
+Examples:
+
+	    gas -t cop.tbl test.s -o test.o
+	    gas -t /usr/local/lib/cop.tbl test.s -o test.o
+	    gas --itbl d:\gnu\data\cop.tbl test.s -o test.o
+
+Only one table may be supplied during a single invocation of
+the assembler.
+
+
+Instruction classes
+===================
+
+Below is a list of the valid coprocessor instruction classes for
+any given coprocessor "z".  These instructions are already recognized
+by the assembler, and are listed here only for reference.
+
+Class   format	    	    	      instructions
+-------------------------------------------------
+Class1:
+	op base rt offset
+	    	    	    	    	    	    	    LWCz rt,offset (base)
+	    	    	    	    	    	    	    SWCz rt,offset (base)
+Class2:
+	COPz sub rt rd 0
+	    	    	    	    	    	    	    MTCz rt,rd
+	    	    	    	    	    	    	    MFCz rt,rd
+	    	    	    	    	    	    	    CTCz rt,rd
+	    	    	    	    	    	    	    CFCz rt,rd
+Class3:
+	COPz CO cofun
+	    	    	    	    	    	    	    COPz cofun
+Class4:
+	COPz BC br offset
+	    	    	    	    	    	    	    BCzT offset
+	    	    	    	    	    	    	    BCzF offset
+Class5:
+	COPz sub rt rd 0
+	    	    	    	    	    	    	    DMFCz rt,rd
+	    	    	    	    	    	    	    DMTCz rt,rd
+Class6:
+	op base rt offset
+	    	    	    	    	    	    	    LDCz rt,offset (base)
+	    	    	    	    	    	    	    SDCz rt,offset (base)
+Class7:
+	COPz BC br offset
+	    	    	    	    	    	    	    BCzTL offset
+	    	    	    	    	    	    	    BCzFL offset
+
+The coprocessor table defines coprocessor-specific registers that can
+be used with all of the above classes of instructions, where
+appropriate.  It also defines additional coprocessor-specific
+functions for Class3 (COPz cofun) instructions, Thus, the table allows
+the programmer to use convenient mnemonics and operands for these
+functions, instead of the COPz mmenmonic and cofun operand.
+
+The names of the MIPS general registers and their aliases are defined
+by the assembler and will be recognized as valid register names by the
+assembler when used (where allowed) in coprocessor instructions.
+However, the names and values of all coprocessor data and control
+register mnemonics must be specified in the coprocessor table.
+
+
+Table Grammar
+=============
+
+Here is the grammar for the coprocessor table:
+
+	    table -> entry*
+
+	    entry -> [z entrydef] [comment] '\n'
+
+	    entrydef -> type name val
+	    entrydef -> 'insn' name val funcdef ; type of entry (instruction)
+
+	    z -> 'p'['0'..'3']	    	     ; processor number 
+	    type -> ['dreg' | 'creg' | 'greg' ]	     ; type of entry (register)
+	; 'dreg', 'creg' or 'greg' specifies a data, control, or general
+	;	    register mnemonic, respectively
+	    name -> [ltr|dec]*	    	     ; mnemonic of register/function
+	    val -> [dec|hex]	    	     ; register/function number (integer constant)
+
+	    funcdef -> frange flags fields
+	    	    	    	; bitfield range for opcode
+	    	    	    	; list of fields' formats
+	    fields -> field*
+	    field -> [','] ftype frange flags
+	    flags -> ['*' flagexpr]
+	    flagexpr -> '[' flagexpr ']'
+	    flagexpr -> val '|' flagexpr 
+	    ftype -> [ type | 'immed' | 'addr' ]
+	; 'immed' specifies an immediate value; see grammar for "val" above
+	    	; 'addr' specifies a C identifier; name of symbol to be resolved at 
+	;	    link time
+	    frange -> ':' val '-' val	; starting to ending bit positions, where
+	    	    	    	; where 0 is least significant bit
+	    frange -> (null)	    	; default range of 31-0 will be assumed
+
+	    comment -> [';'|'#'] [char]*
+	    char -> any printable character
+	    ltr -> ['a'..'z'|'A'..'Z'] 
+	    dec -> ['0'..'9']*	    	    	    	    	     ; value in decimal
+	    hex -> '0x'['0'..'9' | 'a'..'f' | 'A'..'F']*	; value in hexadecimal 
+
+
+Examples
+========
+
+Example 1:
+
+The table:
+
+	    p1 dreg d1 1	     ; data register "d1" for COP1 has value 1
+	    p1 creg c3 3	     ; ctrl register "c3" for COP1 has value 3
+	    p3 func fill 0x1f:24-20	      ; function "fill" for COP3 has value 31 and 
+	    	    	; no fields
+
+will allow the assembler to accept the following coprocessor instructions:
+
+	    LWC1 d1,0x100 ($2)
+	    fill
+
+Here, the general purpose register "$2", and instruction "LWC1", are standard 
+mnemonics built-in to the MIPS assembler.  
+
+
+Example 2:
+
+The table:
+
+	    p3 dreg d3 3	     ; data register "d3" for COP3 has value 3
+	    p3 creg c2 22	     ; control register "c2" for COP3 has value 22
+	    p3 func fee 0x1f:24-20 dreg:17-13 creg:12-8 immed:7-0 
+	    	; function "fee" for COP3 has value 31, and 3 fields 
+	    	; consisting of a data register, a control register, 
+	    	; and an immediate value.
+
+will allow the assembler to accept the following coprocessor instruction:
+
+	    fee d3,c2,0x1
+
+and will emit the object code:
+
+	    31-26  25 24-20 19-18  17-13 12-8  7-0
+	    COPz   CO fun	    	      dreg  creg  immed
+	    010011 1  11111 00	     00011 10110 00000001 
+
+	    0x4ff07601
+
+
+Example 3:
+
+The table:
+
+	    p3 dreg d3 3	     ; data register "d3" for COP3 has value 3
+	    p3 creg c2 22	     ; control register "c2" for COP3 has value 22
+	    p3 func fuu 0x01f00001 dreg:17-13 creg:12-8
+
+will allow the assembler to accept the following coprocessor
+instruction:
+
+	    fuu d3,c2
+
+and will emit the object code:
+
+	    31-26  25 24-20 19-18  17-13 12-8  7-0
+	    COPz   CO fun	    	      dreg  creg  
+	    010011 1  11111 00	     00011 10110 00000001 
+
+	    0x4ff07601
+
+In this way, the programmer can force arbitrary bits of an instruction
+to have predefined values.
+
+=======================================================================
+Additional notes:
+
+Encoding of ranges:
+To handle more than one bit position range within an instruction,
+use 0s to mask out the ranges which don't apply.
+May decide to modify the syntax to allow commas separate multiple 
+ranges within an instruction (range','range).
+
+Changes in grammar:
+	The number of parms argument to the function entry
+was deleted from the original format such that we now count the fields.
+
+----
+FIXME! should really change lexical analyzer 
+to recognize 'dreg' etc. in context sensitive way.
+Currently function names or mnemonics may be incorrectly parsed as keywords
+
+FIXME! hex is ambiguous with any digit
+
+*/
+
+#include "as.h"
+#include "itbl-lex.h"
+#include "itbl-ops.h"
+
+/* #define DEBUG */
+
+#ifdef DEBUG
+#ifndef DBG_LVL
+#define DBG_LVL 1
+#endif
+#else
+#define DBG_LVL 0
+#endif
+
+#if DBG_LVL >= 1
+#define DBG(x) printf x
+#else
+#define DBG(x) 
+#endif
+
+#if DBG_LVL >= 2
+#define DBGL2(x) printf x
+#else
+#define DBGL2(x) 
+#endif
+
+static int sbit, ebit;
+static struct itbl_entry *insn=0;
+static int yyerror (const char *);
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 282 "itbl-parse.y"
+{
+    char *str;
+    int num;
+    int processor;
+    unsigned long val;
+  }
+/* Line 193 of yacc.c.  */
+#line 387 "itbl-parse.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 400 "itbl-parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  9
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   46
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  20
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  15
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  29
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  51
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   267
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,    17,     2,    13,    19,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    18,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    15,     2,    16,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    14,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     8,     9,    15,    16,    26,    28,
+      31,    35,    38,    39,    41,    43,    45,    49,    53,    57,
+      59,    62,    63,    68,    69,    71,    73,    75,    77,    79
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      21,     0,    -1,    22,    -1,    23,    22,    -1,    -1,    31,
+      32,    33,    34,    11,    -1,    -1,    31,     8,    33,    34,
+      30,    29,    24,    25,    11,    -1,    11,    -1,     1,    11,
+      -1,    13,    27,    25,    -1,    27,    25,    -1,    -1,    32,
+      -1,     7,    -1,     6,    -1,    26,    30,    29,    -1,     9,
+      14,    28,    -1,    15,    28,    16,    -1,     9,    -1,    17,
+      28,    -1,    -1,    18,     9,    19,     9,    -1,    -1,    12,
+      -1,     3,    -1,     4,    -1,     5,    -1,    10,    -1,     9,
+      -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   299,   299,   303,   304,   308,   315,   314,   323,   324,
+     328,   329,   330,   334,   339,   344,   352,   361,   365,   369,
+     376,   382,   388,   395,   402,   410,   415,   420,   428,   444
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "DREG", "CREG", "GREG", "IMMED", "ADDR",
+  "INSN", "NUM", "ID", "NL", "PNUM", "','", "'|'", "'['", "']'", "'*'",
+  "':'", "'-'", "$accept", "insntbl", "entrys", "entry", "@1",
+  "fieldspecs", "ftype", "fieldspec", "flagexpr", "flags", "range", "pnum",
+  "regtype", "name", "value", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,    44,   124,    91,    93,    42,    58,    45
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    20,    21,    22,    22,    23,    24,    23,    23,    23,
+      25,    25,    25,    26,    26,    26,    27,    28,    28,    28,
+      29,    29,    30,    30,    31,    32,    32,    32,    33,    34
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     2,     0,     5,     0,     9,     1,     2,
+       3,     2,     0,     1,     1,     1,     3,     3,     3,     1,
+       2,     0,     4,     0,     1,     1,     1,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     0,     8,    24,     0,     2,     0,     0,     9,     1,
+       3,    25,    26,    27,     0,     0,    28,     0,     0,    29,
+      23,     0,     0,    21,     5,     0,     0,     6,     0,    19,
+       0,    20,    12,    22,     0,     0,    15,    14,     0,     0,
+      23,    12,    13,    17,    18,    12,     7,    21,    11,    10,
+      16
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     4,     5,     6,    32,    39,    40,    41,    31,    27,
+      23,     7,    42,    17,    20
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -16
+static const yytype_int8 yypact[] =
+{
+       0,    -9,   -16,   -16,    10,   -16,     0,    12,   -16,   -16,
+     -16,   -16,   -16,   -16,     3,     3,   -16,     9,     9,   -16,
+      11,     8,    19,    15,   -16,    14,    -6,   -16,    25,    21,
+      -6,   -16,     1,   -16,    -6,    20,   -16,   -16,    18,    26,
+      11,     1,   -16,   -16,   -16,     1,   -16,    15,   -16,   -16,
+     -16
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -16,   -16,    32,   -16,   -16,   -15,   -16,     2,    -3,    -8,
+       4,   -16,    34,    27,    28
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -5
+static const yytype_int8 yytable[] =
+{
+      -4,     1,     8,    29,    11,    12,    13,    36,    37,    30,
+       9,     2,     3,    16,    38,    11,    12,    13,    19,    24,
+      14,    11,    12,    13,    36,    37,    48,    35,    25,    22,
+      49,    43,    26,    28,    33,    34,    44,    46,    10,    50,
+      45,    15,    18,     0,    47,     0,    21
+};
+
+static const yytype_int8 yycheck[] =
+{
+       0,     1,    11,     9,     3,     4,     5,     6,     7,    15,
+       0,    11,    12,    10,    13,     3,     4,     5,     9,    11,
+       8,     3,     4,     5,     6,     7,    41,    30,     9,    18,
+      45,    34,    17,    19,     9,    14,    16,    11,     6,    47,
+      38,     7,    15,    -1,    40,    -1,    18
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     1,    11,    12,    21,    22,    23,    31,    11,     0,
+      22,     3,     4,     5,     8,    32,    10,    33,    33,     9,
+      34,    34,    18,    30,    11,     9,    17,    29,    19,     9,
+      15,    28,    24,     9,    14,    28,     6,     7,    13,    25,
+      26,    27,    32,    28,    16,    27,    11,    30,    25,    25,
+      29
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 5:
+#line 309 "itbl-parse.y"
+    {
+	    DBG (("line %d: entry pnum=%d type=%d name=%s value=x%x\n", 
+	    	    insntbl_line, (yyvsp[(1) - (5)].num), (yyvsp[(2) - (5)].num), (yyvsp[(3) - (5)].str), (yyvsp[(4) - (5)].val)));
+	    itbl_add_reg ((yyvsp[(1) - (5)].num), (yyvsp[(2) - (5)].num), (yyvsp[(3) - (5)].str), (yyvsp[(4) - (5)].val));
+	  }
+    break;
+
+  case 6:
+#line 315 "itbl-parse.y"
+    {
+	    DBG (("line %d: entry pnum=%d type=INSN name=%s value=x%x",
+	    	    insntbl_line, (yyvsp[(1) - (6)].num), (yyvsp[(3) - (6)].str), (yyvsp[(4) - (6)].val)));
+	    DBG ((" sbit=%d ebit=%d flags=0x%x\n", sbit, ebit, (yyvsp[(6) - (6)].val)));
+	    insn=itbl_add_insn ((yyvsp[(1) - (6)].num), (yyvsp[(3) - (6)].str), (yyvsp[(4) - (6)].val), sbit, ebit, (yyvsp[(6) - (6)].val));
+	  }
+    break;
+
+  case 7:
+#line 322 "itbl-parse.y"
+    {}
+    break;
+
+  case 13:
+#line 335 "itbl-parse.y"
+    {
+	    DBGL2 (("ftype\n"));
+	    (yyval.num) = (yyvsp[(1) - (1)].num);
+	  }
+    break;
+
+  case 14:
+#line 340 "itbl-parse.y"
+    {
+	    DBGL2 (("addr\n"));
+	    (yyval.num) = ADDR;
+	  }
+    break;
+
+  case 15:
+#line 345 "itbl-parse.y"
+    {
+	    DBGL2 (("immed\n"));
+	    (yyval.num) = IMMED;
+	  }
+    break;
+
+  case 16:
+#line 353 "itbl-parse.y"
+    {
+	    DBG (("line %d: field type=%d sbit=%d ebit=%d, flags=0x%x\n", 
+	    	    insntbl_line, (yyvsp[(1) - (3)].num), sbit, ebit, (yyvsp[(3) - (3)].val)));
+	    itbl_add_operand (insn, (yyvsp[(1) - (3)].num), sbit, ebit, (yyvsp[(3) - (3)].val));
+	  }
+    break;
+
+  case 17:
+#line 362 "itbl-parse.y"
+    {
+	    (yyval.val) = (yyvsp[(1) - (3)].num) | (yyvsp[(3) - (3)].val);
+	  }
+    break;
+
+  case 18:
+#line 366 "itbl-parse.y"
+    {
+	    (yyval.val) = (yyvsp[(2) - (3)].val);
+	  }
+    break;
+
+  case 19:
+#line 370 "itbl-parse.y"
+    {
+	    (yyval.val) = (yyvsp[(1) - (1)].num);
+	  }
+    break;
+
+  case 20:
+#line 377 "itbl-parse.y"
+    {
+	    DBGL2 (("flags=%d\n", (yyvsp[(2) - (2)].val)));
+	    (yyval.val) = (yyvsp[(2) - (2)].val);
+	  }
+    break;
+
+  case 21:
+#line 382 "itbl-parse.y"
+    {
+	    (yyval.val) = 0;
+	  }
+    break;
+
+  case 22:
+#line 389 "itbl-parse.y"
+    {
+	    DBGL2 (("range %d %d\n", (yyvsp[(2) - (4)].num), (yyvsp[(4) - (4)].num)));
+	    sbit = (yyvsp[(2) - (4)].num);
+	    ebit = (yyvsp[(4) - (4)].num);
+	  }
+    break;
+
+  case 23:
+#line 395 "itbl-parse.y"
+    {
+	    sbit = 31;
+	    ebit = 0;
+	  }
+    break;
+
+  case 24:
+#line 403 "itbl-parse.y"
+    {
+	    DBGL2 (("pnum=%d\n",(yyvsp[(1) - (1)].num)));
+	    (yyval.num) = (yyvsp[(1) - (1)].num);
+	  }
+    break;
+
+  case 25:
+#line 411 "itbl-parse.y"
+    {
+	    DBGL2 (("dreg\n"));
+	    (yyval.num) = DREG;
+	  }
+    break;
+
+  case 26:
+#line 416 "itbl-parse.y"
+    {
+	    DBGL2 (("creg\n"));
+	    (yyval.num) = CREG;
+	  }
+    break;
+
+  case 27:
+#line 421 "itbl-parse.y"
+    {
+	    DBGL2 (("greg\n"));
+	    (yyval.num) = GREG;
+	  }
+    break;
+
+  case 28:
+#line 429 "itbl-parse.y"
+    {
+	    DBGL2 (("name=%s\n",(yyvsp[(1) - (1)].str)));
+	    (yyval.str) = (yyvsp[(1) - (1)].str); 
+	  }
+    break;
+
+  case 29:
+#line 445 "itbl-parse.y"
+    {
+	    DBGL2 (("val=x%x\n",(yyvsp[(1) - (1)].num)));
+	    (yyval.val) = (yyvsp[(1) - (1)].num);
+	  }
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 1783 "itbl-parse.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 450 "itbl-parse.y"
+
+
+static int
+yyerror (msg)
+     const char *msg;
+{
+  printf ("line %d: %s\n", insntbl_line, msg);
+  return 0;
+}
+
diff --git a/gas/itbl-parse.h b/gas/itbl-parse.h
new file mode 100644
index 0000000..18dfb8c
--- /dev/null
+++ b/gas/itbl-parse.h
@@ -0,0 +1,87 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     DREG = 258,
+     CREG = 259,
+     GREG = 260,
+     IMMED = 261,
+     ADDR = 262,
+     INSN = 263,
+     NUM = 264,
+     ID = 265,
+     NL = 266,
+     PNUM = 267
+   };
+#endif
+/* Tokens.  */
+#define DREG 258
+#define CREG 259
+#define GREG 260
+#define IMMED 261
+#define ADDR 262
+#define INSN 263
+#define NUM 264
+#define ID 265
+#define NL 266
+#define PNUM 267
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 282 "itbl-parse.y"
+{
+    char *str;
+    int num;
+    int processor;
+    unsigned long val;
+  }
+/* Line 1529 of yacc.c.  */
+#line 80 "itbl-parse.h"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE yylval;
+
diff --git a/gas/m68k-parse.c b/gas/m68k-parse.c
new file mode 100644
index 0000000..9be8bf5
--- /dev/null
+++ b/gas/m68k-parse.c
@@ -0,0 +1,2863 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     DR = 258,
+     AR = 259,
+     FPR = 260,
+     FPCR = 261,
+     LPC = 262,
+     ZAR = 263,
+     ZDR = 264,
+     LZPC = 265,
+     CREG = 266,
+     INDEXREG = 267,
+     EXPR = 268
+   };
+#endif
+/* Tokens.  */
+#define DR 258
+#define AR 259
+#define FPR 260
+#define FPCR 261
+#define LPC 262
+#define ZAR 263
+#define ZDR 264
+#define LZPC 265
+#define CREG 266
+#define INDEXREG 267
+#define EXPR 268
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 28 "m68k-parse.y"
+
+
+#include "as.h"
+#include "tc-m68k.h"
+#include "m68k-parse.h"
+#include "safe-ctype.h"
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
+   etc), as well as gratuitously global symbol names If other parser
+   generators (bison, byacc, etc) produce additional global names that
+   conflict at link time, then those parser generators need to be
+   fixed instead of adding those names to this list.  */
+
+#define	yymaxdepth m68k_maxdepth
+#define	yyparse	m68k_parse
+#define	yylex	m68k_lex
+#define	yyerror	m68k_error
+#define	yylval	m68k_lval
+#define	yychar	m68k_char
+#define	yydebug	m68k_debug
+#define	yypact	m68k_pact	
+#define	yyr1	m68k_r1			
+#define	yyr2	m68k_r2			
+#define	yydef	m68k_def		
+#define	yychk	m68k_chk		
+#define	yypgo	m68k_pgo		
+#define	yyact	m68k_act		
+#define	yyexca	m68k_exca
+#define yyerrflag m68k_errflag
+#define yynerrs	m68k_nerrs
+#define	yyps	m68k_ps
+#define	yypv	m68k_pv
+#define	yys	m68k_s
+#define	yy_yys	m68k_yys
+#define	yystate	m68k_state
+#define	yytmp	m68k_tmp
+#define	yyv	m68k_v
+#define	yy_yyv	m68k_yyv
+#define	yyval	m68k_val
+#define	yylloc	m68k_lloc
+#define yyreds	m68k_reds		/* With YYDEBUG defined */
+#define yytoks	m68k_toks		/* With YYDEBUG defined */
+#define yylhs	m68k_yylhs
+#define yylen	m68k_yylen
+#define yydefred m68k_yydefred
+#define yydgoto	m68k_yydgoto
+#define yysindex m68k_yysindex
+#define yyrindex m68k_yyrindex
+#define yygindex m68k_yygindex
+#define yytable	 m68k_yytable
+#define yycheck	 m68k_yycheck
+
+#ifndef YYDEBUG
+#define YYDEBUG 1
+#endif
+
+/* Internal functions.  */
+
+static enum m68k_register m68k_reg_parse (char **);
+static int yylex (void);
+static void yyerror (const char *);
+
+/* The parser sets fields pointed to by this global variable.  */
+static struct m68k_op *op;
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 96 "m68k-parse.y"
+{
+  struct m68k_indexreg indexreg;
+  enum m68k_register reg;
+  struct m68k_exp exp;
+  unsigned long mask;
+  int onereg;
+  int trailing_ampersand;
+}
+/* Line 193 of yacc.c.  */
+#line 198 "m68k-parse.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 211 "m68k-parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  44
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   215
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  27
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  21
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  89
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  180
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   268
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,    17,     2,     2,    14,     2,
+      18,    19,     2,    20,    22,    21,     2,    26,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      15,     2,    16,     2,    25,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    23,     2,    24,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     5,     8,    11,    12,    14,    17,    20,
+      22,    24,    26,    28,    30,    32,    35,    38,    40,    44,
+      49,    54,    60,    66,    71,    75,    79,    83,    91,    99,
+     106,   112,   119,   125,   132,   138,   144,   149,   159,   167,
+     176,   183,   194,   203,   214,   223,   232,   235,   239,   243,
+     249,   256,   267,   277,   288,   290,   292,   294,   296,   298,
+     300,   302,   304,   306,   308,   310,   312,   314,   316,   317,
+     319,   321,   323,   324,   327,   328,   331,   332,   335,   337,
+     341,   345,   347,   349,   353,   357,   361,   363,   365,   367
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      28,     0,    -1,    30,    -1,    31,    29,    -1,    32,    29,
+      -1,    -1,    14,    -1,    15,    15,    -1,    16,    16,    -1,
+       3,    -1,     4,    -1,     5,    -1,     6,    -1,    11,    -1,
+      13,    -1,    17,    13,    -1,    14,    13,    -1,    44,    -1,
+      18,     4,    19,    -1,    18,     4,    19,    20,    -1,    21,
+      18,     4,    19,    -1,    18,    13,    22,    38,    19,    -1,
+      18,    38,    22,    13,    19,    -1,    13,    18,    38,    19,
+      -1,    18,     7,    19,    -1,    18,     8,    19,    -1,    18,
+      10,    19,    -1,    18,    13,    22,    38,    22,    33,    19,
+      -1,    18,    13,    22,    38,    22,    40,    19,    -1,    18,
+      13,    22,    34,    41,    19,    -1,    18,    34,    22,    13,
+      19,    -1,    13,    18,    38,    22,    33,    19,    -1,    18,
+      38,    22,    33,    19,    -1,    13,    18,    38,    22,    40,
+      19,    -1,    18,    38,    22,    40,    19,    -1,    13,    18,
+      34,    41,    19,    -1,    18,    34,    41,    19,    -1,    18,
+      23,    13,    41,    24,    22,    33,    42,    19,    -1,    18,
+      23,    13,    41,    24,    42,    19,    -1,    18,    23,    38,
+      24,    22,    33,    42,    19,    -1,    18,    23,    38,    24,
+      42,    19,    -1,    18,    23,    13,    22,    38,    22,    33,
+      24,    42,    19,    -1,    18,    23,    38,    22,    33,    24,
+      42,    19,    -1,    18,    23,    13,    22,    38,    22,    40,
+      24,    42,    19,    -1,    18,    23,    38,    22,    40,    24,
+      42,    19,    -1,    18,    23,    43,    34,    41,    24,    42,
+      19,    -1,    39,    25,    -1,    39,    25,    20,    -1,    39,
+      25,    21,    -1,    39,    25,    18,    13,    19,    -1,    39,
+      25,    18,    43,    33,    19,    -1,    39,    25,    18,    13,
+      19,    25,    18,    43,    33,    19,    -1,    39,    25,    18,
+      13,    19,    25,    18,    13,    19,    -1,    39,    25,    18,
+      43,    33,    19,    25,    18,    13,    19,    -1,    12,    -1,
+      35,    -1,    12,    -1,    36,    -1,    36,    -1,     4,    -1,
+       8,    -1,     3,    -1,     9,    -1,     4,    -1,     7,    -1,
+      37,    -1,    10,    -1,     8,    -1,    -1,    38,    -1,     7,
+      -1,    10,    -1,    -1,    22,    38,    -1,    -1,    22,    13,
+      -1,    -1,    13,    22,    -1,    46,    -1,    46,    26,    45,
+      -1,    47,    26,    45,    -1,    47,    -1,    46,    -1,    46,
+      26,    45,    -1,    47,    26,    45,    -1,    47,    21,    47,
+      -1,     3,    -1,     4,    -1,     5,    -1,     6,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   121,   121,   122,   126,   135,   136,   143,   148,   153,
+     158,   163,   168,   173,   178,   183,   188,   193,   206,   211,
+     216,   221,   231,   241,   251,   256,   261,   266,   273,   284,
+     291,   297,   304,   310,   321,   331,   338,   344,   352,   359,
+     366,   372,   380,   387,   399,   410,   423,   431,   439,   447,
+     457,   464,   472,   479,   493,   494,   507,   508,   520,   521,
+     522,   528,   529,   535,   536,   543,   544,   545,   552,   555,
+     561,   562,   569,   572,   582,   586,   596,   600,   609,   610,
+     614,   626,   630,   631,   635,   642,   652,   656,   660,   664
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "DR", "AR", "FPR", "FPCR", "LPC", "ZAR",
+  "ZDR", "LZPC", "CREG", "INDEXREG", "EXPR", "'&'", "'<'", "'>'", "'#'",
+  "'('", "')'", "'+'", "'-'", "','", "'['", "']'", "'@'", "'/'", "$accept",
+  "operand", "optional_ampersand", "generic_operand", "motorola_operand",
+  "mit_operand", "zireg", "zdireg", "zadr", "zdr", "apc", "zapc",
+  "optzapc", "zpc", "optczapc", "optcexpr", "optexprc", "reglist",
+  "ireglist", "reglistpair", "reglistreg", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,    38,    60,    62,    35,    40,    41,
+      43,    45,    44,    91,    93,    64,    47
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    27,    28,    28,    28,    29,    29,    30,    30,    30,
+      30,    30,    30,    30,    30,    30,    30,    30,    31,    31,
+      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
+      31,    31,    31,    31,    31,    31,    31,    31,    31,    31,
+      31,    31,    31,    31,    31,    31,    32,    32,    32,    32,
+      32,    32,    32,    32,    33,    33,    34,    34,    35,    35,
+      35,    36,    36,    37,    37,    38,    38,    38,    39,    39,
+      40,    40,    41,    41,    42,    42,    43,    43,    44,    44,
+      44,    45,    45,    45,    45,    46,    47,    47,    47,    47
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     2,     2,     0,     1,     2,     2,     1,
+       1,     1,     1,     1,     1,     2,     2,     1,     3,     4,
+       4,     5,     5,     4,     3,     3,     3,     7,     7,     6,
+       5,     6,     5,     6,     5,     5,     4,     9,     7,     8,
+       6,    10,     8,    10,     8,     8,     2,     3,     3,     5,
+       6,    10,     9,    10,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
+       1,     1,     0,     2,     0,     2,     0,     2,     1,     3,
+       3,     1,     1,     3,     3,     3,     1,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+      68,    86,    87,    88,    89,    64,    67,    66,    13,    14,
+       0,     0,     0,     0,     0,     0,     0,     2,     5,     5,
+      65,    69,     0,    17,    78,     0,     0,    16,     7,     8,
+      15,    61,    63,    64,    67,    62,    66,    56,     0,    76,
+      72,    57,     0,     0,     1,     6,     3,     4,    46,     0,
+       0,     0,    63,    72,     0,    18,    24,    25,    26,     0,
+      72,     0,     0,     0,     0,     0,     0,    76,    47,    48,
+      86,    87,    88,    89,    79,    82,    81,    85,    80,     0,
+       0,    23,     0,    19,    72,     0,    77,     0,     0,    74,
+      72,     0,    73,    36,    59,    70,    60,    71,    54,     0,
+       0,    55,    58,     0,    20,     0,     0,     0,     0,    35,
+       0,     0,     0,    21,     0,    73,    74,     0,     0,     0,
+       0,     0,    30,    22,    32,    34,    49,    77,     0,    83,
+      84,    31,    33,    29,     0,     0,     0,     0,     0,    74,
+      74,    75,    74,    40,    74,     0,    50,    27,    28,     0,
+       0,    74,    38,     0,     0,     0,     0,     0,    76,     0,
+      74,    74,     0,    42,    44,    39,    45,     0,     0,     0,
+       0,     0,    37,    52,     0,     0,    41,    43,    51,    53
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,    16,    46,    17,    18,    19,   100,    40,   101,   102,
+      20,    92,    22,   103,    64,   120,    62,    23,    74,    75,
+      76
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -98
+static const yytype_int16 yypact[] =
+{
+      89,    14,     9,    31,    35,   -98,   -98,   -98,   -98,     0,
+      36,    42,    28,    56,    63,    67,    90,   -98,    75,    75,
+     -98,   -98,    86,   -98,    96,   -15,   123,   -98,   -98,   -98,
+     -98,   -98,    97,   115,   119,   -98,   120,   -98,   122,    16,
+     126,   -98,   127,   157,   -98,   -98,   -98,   -98,    19,   154,
+     154,   154,   -98,   140,    29,   144,   -98,   -98,   -98,   123,
+     141,    99,    18,    70,   147,   105,   148,   152,   -98,   -98,
+     -98,   -98,   -98,   -98,   -98,   142,   -13,   -98,   -98,   146,
+     150,   -98,   133,   -98,   140,    60,   146,   149,   133,   153,
+     140,   151,   -98,   -98,   -98,   -98,   -98,   -98,   -98,   155,
+     158,   -98,   -98,   159,   -98,    62,   143,   154,   154,   -98,
+     160,   161,   162,   -98,   133,   163,   164,   165,   166,   116,
+     168,   167,   -98,   -98,   -98,   -98,   169,   -98,   173,   -98,
+     -98,   -98,   -98,   -98,   174,   176,   133,   116,   177,   175,
+     175,   -98,   175,   -98,   175,   170,   178,   -98,   -98,   180,
+     181,   175,   -98,   171,   179,   182,   183,   187,   186,   189,
+     175,   175,   190,   -98,   -98,   -98,   -98,    79,   143,   195,
+     191,   192,   -98,   -98,   193,   194,   -98,   -98,   -98,   -98
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+     -98,   -98,   196,   -98,   -98,   -98,   -81,     6,   -98,    -9,
+     -98,     2,   -98,   -78,   -38,   -97,   -67,   -98,   -48,   172,
+      12
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -64
+static const yytype_int16 yytable[] =
+{
+     106,   110,    21,    78,   111,    41,    50,   117,    50,   -10,
+     118,    51,    25,   108,    -9,    80,    42,    41,    26,   138,
+      52,    31,    87,     5,     6,   128,     7,    35,    54,    60,
+      37,   -11,    53,   134,   -63,   -12,   135,    67,   142,    68,
+      69,    61,   154,   155,    29,   156,   112,   157,    81,    27,
+      41,    82,   121,    41,   162,   149,   151,    28,   150,   129,
+     130,    85,    77,   170,   171,    84,    31,    32,    90,    30,
+      33,    34,    35,    36,    52,    37,    38,     5,     6,   113,
+       7,   126,   114,    91,   127,    43,    39,   174,   115,    45,
+      44,   168,     1,     2,     3,     4,     5,     6,   173,     7,
+       8,   127,     9,    10,    11,    12,    13,    14,    31,    94,
+      15,    48,    95,    96,    35,    97,    55,    98,    99,    31,
+      94,    88,    49,    89,    96,    35,    31,    52,    98,   141,
+       5,     6,    35,     7,    56,    37,    31,    94,    57,    58,
+      95,    96,    35,    97,    59,    98,    31,    94,    63,    65,
+      52,    96,    35,     5,     6,    98,     7,    70,    71,    72,
+      73,    66,    79,    86,    83,   105,    93,   104,   107,   109,
+     122,     0,    24,   116,   123,   119,     0,   124,   125,   131,
+     132,   133,     0,     0,   141,   136,   137,   143,   158,   139,
+     140,   144,   146,   147,   145,   148,   152,   153,   163,   167,
+       0,   164,   165,   159,   160,   161,   166,   169,   175,   172,
+     176,   177,   178,   179,     0,    47
+};
+
+static const yytype_int16 yycheck[] =
+{
+      67,    82,     0,    51,    82,    14,    21,    88,    21,     0,
+      88,    26,     0,    26,     0,    53,    14,    26,    18,   116,
+       4,     3,    60,     7,     8,   106,    10,     9,    26,    13,
+      12,     0,    26,   114,    25,     0,   114,    18,   119,    20,
+      21,    39,   139,   140,    16,   142,    84,   144,    19,    13,
+      59,    22,    90,    62,   151,   136,   137,    15,   136,   107,
+     108,    59,    50,   160,   161,    59,     3,     4,    62,    13,
+       7,     8,     9,    10,     4,    12,    13,     7,     8,    19,
+      10,    19,    22,    13,    22,    18,    23,   168,    86,    14,
+       0,   158,     3,     4,     5,     6,     7,     8,    19,    10,
+      11,    22,    13,    14,    15,    16,    17,    18,     3,     4,
+      21,    25,     7,     8,     9,    10,    19,    12,    13,     3,
+       4,    22,    26,    24,     8,     9,     3,     4,    12,    13,
+       7,     8,     9,    10,    19,    12,     3,     4,    19,    19,
+       7,     8,     9,    10,    22,    12,     3,     4,    22,    22,
+       4,     8,     9,     7,     8,    12,    10,     3,     4,     5,
+       6,     4,    22,    22,    20,    13,    19,    19,    26,    19,
+      19,    -1,     0,    24,    19,    22,    -1,    19,    19,    19,
+      19,    19,    -1,    -1,    13,    22,    22,    19,    18,    24,
+      24,    24,    19,    19,    25,    19,    19,    22,    19,    13,
+      -1,    19,    19,    25,    24,    24,    19,    18,    13,    19,
+      19,    19,    19,    19,    -1,    19
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     3,     4,     5,     6,     7,     8,    10,    11,    13,
+      14,    15,    16,    17,    18,    21,    28,    30,    31,    32,
+      37,    38,    39,    44,    46,    47,    18,    13,    15,    16,
+      13,     3,     4,     7,     8,     9,    10,    12,    13,    23,
+      34,    36,    38,    18,     0,    14,    29,    29,    25,    26,
+      21,    26,     4,    34,    38,    19,    19,    19,    19,    22,
+      13,    38,    43,    22,    41,    22,     4,    18,    20,    21,
+       3,     4,     5,     6,    45,    46,    47,    47,    45,    22,
+      41,    19,    22,    20,    34,    38,    22,    41,    22,    24,
+      34,    13,    38,    19,     4,     7,     8,    10,    12,    13,
+      33,    35,    36,    40,    19,    13,    43,    26,    26,    19,
+      33,    40,    41,    19,    22,    38,    24,    33,    40,    22,
+      42,    41,    19,    19,    19,    19,    19,    22,    33,    45,
+      45,    19,    19,    19,    33,    40,    22,    22,    42,    24,
+      24,    13,    33,    19,    24,    25,    19,    19,    19,    33,
+      40,    33,    19,    22,    42,    42,    42,    42,    18,    25,
+      24,    24,    42,    19,    19,    19,    19,    13,    43,    18,
+      42,    42,    19,    19,    33,    13,    19,    19,    19,    19
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 3:
+#line 123 "m68k-parse.y"
+    {
+		  op->trailing_ampersand = (yyvsp[(2) - (2)].trailing_ampersand);
+		}
+    break;
+
+  case 4:
+#line 127 "m68k-parse.y"
+    {
+		  op->trailing_ampersand = (yyvsp[(2) - (2)].trailing_ampersand);
+		}
+    break;
+
+  case 5:
+#line 135 "m68k-parse.y"
+    { (yyval.trailing_ampersand) = 0; }
+    break;
+
+  case 6:
+#line 137 "m68k-parse.y"
+    { (yyval.trailing_ampersand) = 1; }
+    break;
+
+  case 7:
+#line 144 "m68k-parse.y"
+    {
+		  op->mode = LSH;
+		}
+    break;
+
+  case 8:
+#line 149 "m68k-parse.y"
+    {
+		  op->mode = RSH;
+		}
+    break;
+
+  case 9:
+#line 154 "m68k-parse.y"
+    {
+		  op->mode = DREG;
+		  op->reg = (yyvsp[(1) - (1)].reg);
+		}
+    break;
+
+  case 10:
+#line 159 "m68k-parse.y"
+    {
+		  op->mode = AREG;
+		  op->reg = (yyvsp[(1) - (1)].reg);
+		}
+    break;
+
+  case 11:
+#line 164 "m68k-parse.y"
+    {
+		  op->mode = FPREG;
+		  op->reg = (yyvsp[(1) - (1)].reg);
+		}
+    break;
+
+  case 12:
+#line 169 "m68k-parse.y"
+    {
+		  op->mode = CONTROL;
+		  op->reg = (yyvsp[(1) - (1)].reg);
+		}
+    break;
+
+  case 13:
+#line 174 "m68k-parse.y"
+    {
+		  op->mode = CONTROL;
+		  op->reg = (yyvsp[(1) - (1)].reg);
+		}
+    break;
+
+  case 14:
+#line 179 "m68k-parse.y"
+    {
+		  op->mode = ABSL;
+		  op->disp = (yyvsp[(1) - (1)].exp);
+		}
+    break;
+
+  case 15:
+#line 184 "m68k-parse.y"
+    {
+		  op->mode = IMMED;
+		  op->disp = (yyvsp[(2) - (2)].exp);
+		}
+    break;
+
+  case 16:
+#line 189 "m68k-parse.y"
+    {
+		  op->mode = IMMED;
+		  op->disp = (yyvsp[(2) - (2)].exp);
+		}
+    break;
+
+  case 17:
+#line 194 "m68k-parse.y"
+    {
+		  op->mode = REGLST;
+		  op->mask = (yyvsp[(1) - (1)].mask);
+		}
+    break;
+
+  case 18:
+#line 207 "m68k-parse.y"
+    {
+		  op->mode = AINDR;
+		  op->reg = (yyvsp[(2) - (3)].reg);
+		}
+    break;
+
+  case 19:
+#line 212 "m68k-parse.y"
+    {
+		  op->mode = AINC;
+		  op->reg = (yyvsp[(2) - (4)].reg);
+		}
+    break;
+
+  case 20:
+#line 217 "m68k-parse.y"
+    {
+		  op->mode = ADEC;
+		  op->reg = (yyvsp[(3) - (4)].reg);
+		}
+    break;
+
+  case 21:
+#line 222 "m68k-parse.y"
+    {
+		  op->reg = (yyvsp[(4) - (5)].reg);
+		  op->disp = (yyvsp[(2) - (5)].exp);
+		  if (((yyvsp[(4) - (5)].reg) >= ZADDR0 && (yyvsp[(4) - (5)].reg) <= ZADDR7)
+		      || (yyvsp[(4) - (5)].reg) == ZPC)
+		    op->mode = BASE;
+		  else
+		    op->mode = DISP;
+		}
+    break;
+
+  case 22:
+#line 232 "m68k-parse.y"
+    {
+		  op->reg = (yyvsp[(2) - (5)].reg);
+		  op->disp = (yyvsp[(4) - (5)].exp);
+		  if (((yyvsp[(2) - (5)].reg) >= ZADDR0 && (yyvsp[(2) - (5)].reg) <= ZADDR7)
+		      || (yyvsp[(2) - (5)].reg) == ZPC)
+		    op->mode = BASE;
+		  else
+		    op->mode = DISP;
+		}
+    break;
+
+  case 23:
+#line 242 "m68k-parse.y"
+    {
+		  op->reg = (yyvsp[(3) - (4)].reg);
+		  op->disp = (yyvsp[(1) - (4)].exp);
+		  if (((yyvsp[(3) - (4)].reg) >= ZADDR0 && (yyvsp[(3) - (4)].reg) <= ZADDR7)
+		      || (yyvsp[(3) - (4)].reg) == ZPC)
+		    op->mode = BASE;
+		  else
+		    op->mode = DISP;
+		}
+    break;
+
+  case 24:
+#line 252 "m68k-parse.y"
+    {
+		  op->mode = DISP;
+		  op->reg = (yyvsp[(2) - (3)].reg);
+		}
+    break;
+
+  case 25:
+#line 257 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(2) - (3)].reg);
+		}
+    break;
+
+  case 26:
+#line 262 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(2) - (3)].reg);
+		}
+    break;
+
+  case 27:
+#line 267 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(4) - (7)].reg);
+		  op->disp = (yyvsp[(2) - (7)].exp);
+		  op->index = (yyvsp[(6) - (7)].indexreg);
+		}
+    break;
+
+  case 28:
+#line 274 "m68k-parse.y"
+    {
+		  if ((yyvsp[(4) - (7)].reg) == PC || (yyvsp[(4) - (7)].reg) == ZPC)
+		    yyerror (_("syntax error"));
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(6) - (7)].reg);
+		  op->disp = (yyvsp[(2) - (7)].exp);
+		  op->index.reg = (yyvsp[(4) - (7)].reg);
+		  op->index.size = SIZE_UNSPEC;
+		  op->index.scale = 1;
+		}
+    break;
+
+  case 29:
+#line 285 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(5) - (6)].reg);
+		  op->disp = (yyvsp[(2) - (6)].exp);
+		  op->index = (yyvsp[(4) - (6)].indexreg);
+		}
+    break;
+
+  case 30:
+#line 292 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->disp = (yyvsp[(4) - (5)].exp);
+		  op->index = (yyvsp[(2) - (5)].indexreg);
+		}
+    break;
+
+  case 31:
+#line 298 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(3) - (6)].reg);
+		  op->disp = (yyvsp[(1) - (6)].exp);
+		  op->index = (yyvsp[(5) - (6)].indexreg);
+		}
+    break;
+
+  case 32:
+#line 305 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(2) - (5)].reg);
+		  op->index = (yyvsp[(4) - (5)].indexreg);
+		}
+    break;
+
+  case 33:
+#line 311 "m68k-parse.y"
+    {
+		  if ((yyvsp[(3) - (6)].reg) == PC || (yyvsp[(3) - (6)].reg) == ZPC)
+		    yyerror (_("syntax error"));
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(5) - (6)].reg);
+		  op->disp = (yyvsp[(1) - (6)].exp);
+		  op->index.reg = (yyvsp[(3) - (6)].reg);
+		  op->index.size = SIZE_UNSPEC;
+		  op->index.scale = 1;
+		}
+    break;
+
+  case 34:
+#line 322 "m68k-parse.y"
+    {
+		  if ((yyvsp[(2) - (5)].reg) == PC || (yyvsp[(2) - (5)].reg) == ZPC)
+		    yyerror (_("syntax error"));
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(4) - (5)].reg);
+		  op->index.reg = (yyvsp[(2) - (5)].reg);
+		  op->index.size = SIZE_UNSPEC;
+		  op->index.scale = 1;
+		}
+    break;
+
+  case 35:
+#line 332 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(4) - (5)].reg);
+		  op->disp = (yyvsp[(1) - (5)].exp);
+		  op->index = (yyvsp[(3) - (5)].indexreg);
+		}
+    break;
+
+  case 36:
+#line 339 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(3) - (4)].reg);
+		  op->index = (yyvsp[(2) - (4)].indexreg);
+		}
+    break;
+
+  case 37:
+#line 345 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(4) - (9)].reg);
+		  op->disp = (yyvsp[(3) - (9)].exp);
+		  op->index = (yyvsp[(7) - (9)].indexreg);
+		  op->odisp = (yyvsp[(8) - (9)].exp);
+		}
+    break;
+
+  case 38:
+#line 353 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(4) - (7)].reg);
+		  op->disp = (yyvsp[(3) - (7)].exp);
+		  op->odisp = (yyvsp[(6) - (7)].exp);
+		}
+    break;
+
+  case 39:
+#line 360 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(3) - (8)].reg);
+		  op->index = (yyvsp[(6) - (8)].indexreg);
+		  op->odisp = (yyvsp[(7) - (8)].exp);
+		}
+    break;
+
+  case 40:
+#line 367 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(3) - (6)].reg);
+		  op->odisp = (yyvsp[(5) - (6)].exp);
+		}
+    break;
+
+  case 41:
+#line 373 "m68k-parse.y"
+    {
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(5) - (10)].reg);
+		  op->disp = (yyvsp[(3) - (10)].exp);
+		  op->index = (yyvsp[(7) - (10)].indexreg);
+		  op->odisp = (yyvsp[(9) - (10)].exp);
+		}
+    break;
+
+  case 42:
+#line 381 "m68k-parse.y"
+    {
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(3) - (8)].reg);
+		  op->index = (yyvsp[(5) - (8)].indexreg);
+		  op->odisp = (yyvsp[(7) - (8)].exp);
+		}
+    break;
+
+  case 43:
+#line 388 "m68k-parse.y"
+    {
+		  if ((yyvsp[(5) - (10)].reg) == PC || (yyvsp[(5) - (10)].reg) == ZPC)
+		    yyerror (_("syntax error"));
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(7) - (10)].reg);
+		  op->disp = (yyvsp[(3) - (10)].exp);
+		  op->index.reg = (yyvsp[(5) - (10)].reg);
+		  op->index.size = SIZE_UNSPEC;
+		  op->index.scale = 1;
+		  op->odisp = (yyvsp[(9) - (10)].exp);
+		}
+    break;
+
+  case 44:
+#line 400 "m68k-parse.y"
+    {
+		  if ((yyvsp[(3) - (8)].reg) == PC || (yyvsp[(3) - (8)].reg) == ZPC)
+		    yyerror (_("syntax error"));
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(5) - (8)].reg);
+		  op->index.reg = (yyvsp[(3) - (8)].reg);
+		  op->index.size = SIZE_UNSPEC;
+		  op->index.scale = 1;
+		  op->odisp = (yyvsp[(7) - (8)].exp);
+		}
+    break;
+
+  case 45:
+#line 411 "m68k-parse.y"
+    {
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(5) - (8)].reg);
+		  op->disp = (yyvsp[(3) - (8)].exp);
+		  op->index = (yyvsp[(4) - (8)].indexreg);
+		  op->odisp = (yyvsp[(7) - (8)].exp);
+		}
+    break;
+
+  case 46:
+#line 424 "m68k-parse.y"
+    {
+		  /* We use optzapc to avoid a shift/reduce conflict.  */
+		  if ((yyvsp[(1) - (2)].reg) < ADDR0 || (yyvsp[(1) - (2)].reg) > ADDR7)
+		    yyerror (_("syntax error"));
+		  op->mode = AINDR;
+		  op->reg = (yyvsp[(1) - (2)].reg);
+		}
+    break;
+
+  case 47:
+#line 432 "m68k-parse.y"
+    {
+		  /* We use optzapc to avoid a shift/reduce conflict.  */
+		  if ((yyvsp[(1) - (3)].reg) < ADDR0 || (yyvsp[(1) - (3)].reg) > ADDR7)
+		    yyerror (_("syntax error"));
+		  op->mode = AINC;
+		  op->reg = (yyvsp[(1) - (3)].reg);
+		}
+    break;
+
+  case 48:
+#line 440 "m68k-parse.y"
+    {
+		  /* We use optzapc to avoid a shift/reduce conflict.  */
+		  if ((yyvsp[(1) - (3)].reg) < ADDR0 || (yyvsp[(1) - (3)].reg) > ADDR7)
+		    yyerror (_("syntax error"));
+		  op->mode = ADEC;
+		  op->reg = (yyvsp[(1) - (3)].reg);
+		}
+    break;
+
+  case 49:
+#line 448 "m68k-parse.y"
+    {
+		  op->reg = (yyvsp[(1) - (5)].reg);
+		  op->disp = (yyvsp[(4) - (5)].exp);
+		  if (((yyvsp[(1) - (5)].reg) >= ZADDR0 && (yyvsp[(1) - (5)].reg) <= ZADDR7)
+		      || (yyvsp[(1) - (5)].reg) == ZPC)
+		    op->mode = BASE;
+		  else
+		    op->mode = DISP;
+		}
+    break;
+
+  case 50:
+#line 458 "m68k-parse.y"
+    {
+		  op->mode = BASE;
+		  op->reg = (yyvsp[(1) - (6)].reg);
+		  op->disp = (yyvsp[(4) - (6)].exp);
+		  op->index = (yyvsp[(5) - (6)].indexreg);
+		}
+    break;
+
+  case 51:
+#line 465 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(1) - (10)].reg);
+		  op->disp = (yyvsp[(4) - (10)].exp);
+		  op->index = (yyvsp[(9) - (10)].indexreg);
+		  op->odisp = (yyvsp[(8) - (10)].exp);
+		}
+    break;
+
+  case 52:
+#line 473 "m68k-parse.y"
+    {
+		  op->mode = POST;
+		  op->reg = (yyvsp[(1) - (9)].reg);
+		  op->disp = (yyvsp[(4) - (9)].exp);
+		  op->odisp = (yyvsp[(8) - (9)].exp);
+		}
+    break;
+
+  case 53:
+#line 480 "m68k-parse.y"
+    {
+		  op->mode = PRE;
+		  op->reg = (yyvsp[(1) - (10)].reg);
+		  op->disp = (yyvsp[(4) - (10)].exp);
+		  op->index = (yyvsp[(5) - (10)].indexreg);
+		  op->odisp = (yyvsp[(9) - (10)].exp);
+		}
+    break;
+
+  case 55:
+#line 495 "m68k-parse.y"
+    {
+		  (yyval.indexreg).reg = (yyvsp[(1) - (1)].reg);
+		  (yyval.indexreg).size = SIZE_UNSPEC;
+		  (yyval.indexreg).scale = 1;
+		}
+    break;
+
+  case 57:
+#line 509 "m68k-parse.y"
+    {
+		  (yyval.indexreg).reg = (yyvsp[(1) - (1)].reg);
+		  (yyval.indexreg).size = SIZE_UNSPEC;
+		  (yyval.indexreg).scale = 1;
+		}
+    break;
+
+  case 68:
+#line 552 "m68k-parse.y"
+    {
+		  (yyval.reg) = ZADDR0;
+		}
+    break;
+
+  case 72:
+#line 569 "m68k-parse.y"
+    {
+		  (yyval.reg) = ZADDR0;
+		}
+    break;
+
+  case 73:
+#line 573 "m68k-parse.y"
+    {
+		  (yyval.reg) = (yyvsp[(2) - (2)].reg);
+		}
+    break;
+
+  case 74:
+#line 582 "m68k-parse.y"
+    {
+		  (yyval.exp).exp.X_op = O_absent;
+		  (yyval.exp).size = SIZE_UNSPEC;
+		}
+    break;
+
+  case 75:
+#line 587 "m68k-parse.y"
+    {
+		  (yyval.exp) = (yyvsp[(2) - (2)].exp);
+		}
+    break;
+
+  case 76:
+#line 596 "m68k-parse.y"
+    {
+		  (yyval.exp).exp.X_op = O_absent;
+		  (yyval.exp).size = SIZE_UNSPEC;
+		}
+    break;
+
+  case 77:
+#line 601 "m68k-parse.y"
+    {
+		  (yyval.exp) = (yyvsp[(1) - (2)].exp);
+		}
+    break;
+
+  case 79:
+#line 611 "m68k-parse.y"
+    {
+		  (yyval.mask) = (yyvsp[(1) - (3)].mask) | (yyvsp[(3) - (3)].mask);
+		}
+    break;
+
+  case 80:
+#line 615 "m68k-parse.y"
+    {
+		  (yyval.mask) = (1 << (yyvsp[(1) - (3)].onereg)) | (yyvsp[(3) - (3)].mask);
+		}
+    break;
+
+  case 81:
+#line 627 "m68k-parse.y"
+    {
+		  (yyval.mask) = 1 << (yyvsp[(1) - (1)].onereg);
+		}
+    break;
+
+  case 83:
+#line 632 "m68k-parse.y"
+    {
+		  (yyval.mask) = (yyvsp[(1) - (3)].mask) | (yyvsp[(3) - (3)].mask);
+		}
+    break;
+
+  case 84:
+#line 636 "m68k-parse.y"
+    {
+		  (yyval.mask) = (1 << (yyvsp[(1) - (3)].onereg)) | (yyvsp[(3) - (3)].mask);
+		}
+    break;
+
+  case 85:
+#line 643 "m68k-parse.y"
+    {
+		  if ((yyvsp[(1) - (3)].onereg) <= (yyvsp[(3) - (3)].onereg))
+		    (yyval.mask) = (1 << ((yyvsp[(3) - (3)].onereg) + 1)) - 1 - ((1 << (yyvsp[(1) - (3)].onereg)) - 1);
+		  else
+		    (yyval.mask) = (1 << ((yyvsp[(1) - (3)].onereg) + 1)) - 1 - ((1 << (yyvsp[(3) - (3)].onereg)) - 1);
+		}
+    break;
+
+  case 86:
+#line 653 "m68k-parse.y"
+    {
+		  (yyval.onereg) = (yyvsp[(1) - (1)].reg) - DATA0;
+		}
+    break;
+
+  case 87:
+#line 657 "m68k-parse.y"
+    {
+		  (yyval.onereg) = (yyvsp[(1) - (1)].reg) - ADDR0 + 8;
+		}
+    break;
+
+  case 88:
+#line 661 "m68k-parse.y"
+    {
+		  (yyval.onereg) = (yyvsp[(1) - (1)].reg) - FP0 + 16;
+		}
+    break;
+
+  case 89:
+#line 665 "m68k-parse.y"
+    {
+		  if ((yyvsp[(1) - (1)].reg) == FPI)
+		    (yyval.onereg) = 24;
+		  else if ((yyvsp[(1) - (1)].reg) == FPS)
+		    (yyval.onereg) = 25;
+		  else
+		    (yyval.onereg) = 26;
+		}
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 2204 "m68k-parse.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 675 "m68k-parse.y"
+
+
+/* The string to parse is stored here, and modified by yylex.  */
+
+static char *str;
+
+/* The original string pointer.  */
+
+static char *strorig;
+
+/* If *CCP could be a register, return the register number and advance
+   *CCP.  Otherwise don't change *CCP, and return 0.  */
+
+static enum m68k_register
+m68k_reg_parse (ccp)
+     register char **ccp;
+{
+  char *start = *ccp;
+  char c;
+  char *p;
+  symbolS *symbolp;
+
+  if (flag_reg_prefix_optional)
+    {
+      if (*start == REGISTER_PREFIX)
+	start++;
+      p = start;
+    }
+  else
+    {
+      if (*start != REGISTER_PREFIX)
+	return 0;
+      p = start + 1;
+    }
+
+  if (! is_name_beginner (*p))
+    return 0;
+
+  p++;
+  while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
+    p++;
+
+  c = *p;
+  *p = 0;
+  symbolp = symbol_find (start);
+  *p = c;
+
+  if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
+    {
+      *ccp = p;
+      return S_GET_VALUE (symbolp);
+    }
+
+  /* In MRI mode, something like foo.bar can be equated to a register
+     name.  */
+  while (flag_mri && c == '.')
+    {
+      ++p;
+      while (is_part_of_name (*p) && *p != '.' && *p != ':' && *p != '*')
+	p++;
+      c = *p;
+      *p = '\0';
+      symbolp = symbol_find (start);
+      *p = c;
+      if (symbolp != NULL && S_GET_SEGMENT (symbolp) == reg_section)
+	{
+	  *ccp = p;
+	  return S_GET_VALUE (symbolp);
+	}
+    }
+
+  return 0;
+}
+
+/* The lexer.  */
+
+static int
+yylex ()
+{
+  enum m68k_register reg;
+  char *s;
+  int parens;
+  int c = 0;
+  int tail = 0;
+  char *hold;
+
+  if (*str == ' ')
+    ++str;
+
+  if (*str == '\0')
+    return 0;
+
+  /* Various special characters are just returned directly.  */
+  switch (*str)
+    {
+    case '@':
+      /* In MRI mode, this can be the start of an octal number.  */
+      if (flag_mri)
+	{
+	  if (ISDIGIT (str[1])
+	      || ((str[1] == '+' || str[1] == '-')
+		  && ISDIGIT (str[2])))
+	    break;
+	}
+      /* Fall through.  */
+    case '#':
+    case '&':
+    case ',':
+    case ')':
+    case '/':
+    case '[':
+    case ']':
+    case '<':
+    case '>':
+      return *str++;
+    case '+':
+      /* It so happens that a '+' can only appear at the end of an
+	 operand, or if it is trailed by an '&'(see mac load insn).
+	 If it appears anywhere else, it must be a unary.  */
+      if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
+	return *str++;
+      break;
+    case '-':
+      /* A '-' can only appear in -(ar), rn-rn, or ar@-.  If it
+         appears anywhere else, it must be a unary minus on an
+         expression, unless it it trailed by a '&'(see mac load insn).  */
+      if (str[1] == '\0' || (str[1] == '&' && str[2] == '\0'))
+	return *str++;
+      s = str + 1;
+      if (*s == '(')
+	++s;
+      if (m68k_reg_parse (&s) != 0)
+	return *str++;
+      break;
+    case '(':
+      /* A '(' can only appear in `(reg)', `(expr,...', `([', `@(', or
+         `)('.  If it appears anywhere else, it must be starting an
+         expression.  */
+      if (str[1] == '['
+	  || (str > strorig
+	      && (str[-1] == '@'
+		  || str[-1] == ')')))
+	return *str++;
+      s = str + 1;
+      if (m68k_reg_parse (&s) != 0)
+	return *str++;
+      /* Check for the case of '(expr,...' by scanning ahead.  If we
+         find a comma outside of balanced parentheses, we return '('.
+         If we find an unbalanced right parenthesis, then presumably
+         the '(' really starts an expression.  */
+      parens = 0;
+      for (s = str + 1; *s != '\0'; s++)
+	{
+	  if (*s == '(')
+	    ++parens;
+	  else if (*s == ')')
+	    {
+	      if (parens == 0)
+		break;
+	      --parens;
+	    }
+	  else if (*s == ',' && parens == 0)
+	    {
+	      /* A comma can not normally appear in an expression, so
+		 this is a case of '(expr,...'.  */
+	      return *str++;
+	    }
+	}
+    }
+
+  /* See if it's a register.  */
+
+  reg = m68k_reg_parse (&str);
+  if (reg != 0)
+    {
+      int ret;
+
+      yylval.reg = reg;
+
+      if (reg >= DATA0 && reg <= DATA7)
+	ret = DR;
+      else if (reg >= ADDR0 && reg <= ADDR7)
+	ret = AR;
+      else if (reg >= FP0 && reg <= FP7)
+	return FPR;
+      else if (reg == FPI
+	       || reg == FPS
+	       || reg == FPC)
+	return FPCR;
+      else if (reg == PC)
+	return LPC;
+      else if (reg >= ZDATA0 && reg <= ZDATA7)
+	ret = ZDR;
+      else if (reg >= ZADDR0 && reg <= ZADDR7)
+	ret = ZAR;
+      else if (reg == ZPC)
+	return LZPC;
+      else
+	return CREG;
+
+      /* If we get here, we have a data or address register.  We
+	 must check for a size or scale; if we find one, we must
+	 return INDEXREG.  */
+
+      s = str;
+
+      if (*s != '.' && *s != ':' && *s != '*')
+	return ret;
+
+      yylval.indexreg.reg = reg;
+
+      if (*s != '.' && *s != ':')
+	yylval.indexreg.size = SIZE_UNSPEC;
+      else
+	{
+	  ++s;
+	  switch (*s)
+	    {
+	    case 'w':
+	    case 'W':
+	      yylval.indexreg.size = SIZE_WORD;
+	      ++s;
+	      break;
+	    case 'l':
+	    case 'L':
+	      yylval.indexreg.size = SIZE_LONG;
+	      ++s;
+	      break;
+	    default:
+	      yyerror (_("illegal size specification"));
+	      yylval.indexreg.size = SIZE_UNSPEC;
+	      break;
+	    }
+	}
+
+      yylval.indexreg.scale = 1;
+
+      if (*s == '*' || *s == ':')
+	{
+	  expressionS scale;
+
+	  ++s;
+
+	  hold = input_line_pointer;
+	  input_line_pointer = s;
+	  expression (&scale);
+	  s = input_line_pointer;
+	  input_line_pointer = hold;
+
+	  if (scale.X_op != O_constant)
+	    yyerror (_("scale specification must resolve to a number"));
+	  else
+	    {
+	      switch (scale.X_add_number)
+		{
+		case 1:
+		case 2:
+		case 4:
+		case 8:
+		  yylval.indexreg.scale = scale.X_add_number;
+		  break;
+		default:
+		  yyerror (_("invalid scale value"));
+		  break;
+		}
+	    }
+	}
+
+      str = s;
+
+      return INDEXREG;
+    }
+
+  /* It must be an expression.  Before we call expression, we need to
+     look ahead to see if there is a size specification.  We must do
+     that first, because otherwise foo.l will be treated as the symbol
+     foo.l, rather than as the symbol foo with a long size
+     specification.  The grammar requires that all expressions end at
+     the end of the operand, or with ',', '(', ']', ')'.  */
+
+  parens = 0;
+  for (s = str; *s != '\0'; s++)
+    {
+      if (*s == '(')
+	{
+	  if (parens == 0
+	      && s > str
+	      && (s[-1] == ')' || ISALNUM (s[-1])))
+	    break;
+	  ++parens;
+	}
+      else if (*s == ')')
+	{
+	  if (parens == 0)
+	    break;
+	  --parens;
+	}
+      else if (parens == 0
+	       && (*s == ',' || *s == ']'))
+	break;
+    }
+
+  yylval.exp.size = SIZE_UNSPEC;
+  if (s <= str + 2
+      || (s[-2] != '.' && s[-2] != ':'))
+    tail = 0;
+  else
+    {
+      switch (s[-1])
+	{
+	case 's':
+	case 'S':
+	case 'b':
+	case 'B':
+	  yylval.exp.size = SIZE_BYTE;
+	  break;
+	case 'w':
+	case 'W':
+	  yylval.exp.size = SIZE_WORD;
+	  break;
+	case 'l':
+	case 'L':
+	  yylval.exp.size = SIZE_LONG;
+	  break;
+	default:
+	  break;
+	}
+      if (yylval.exp.size != SIZE_UNSPEC)
+	tail = 2;
+    }
+
+#ifdef OBJ_ELF
+  {
+    /* Look for @PLTPC, etc.  */
+    char *cp;
+
+    yylval.exp.pic_reloc = pic_none;
+    cp = s - tail;
+    if (cp - 7 > str && cp[-7] == '@')
+      {
+	if (strncmp (cp - 7, "@TLSLDM", 7) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_tls_ldm;
+	    tail += 7;
+	  }
+	else if (strncmp (cp - 7, "@TLSLDO", 7) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_tls_ldo;
+	    tail += 7;
+	  }
+      }
+    else if (cp - 6 > str && cp[-6] == '@')
+      {
+	if (strncmp (cp - 6, "@PLTPC", 6) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_plt_pcrel;
+	    tail += 6;
+	  }
+	else if (strncmp (cp - 6, "@GOTPC", 6) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_got_pcrel;
+	    tail += 6;
+	  }
+	else if (strncmp (cp - 6, "@TLSGD", 6) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_tls_gd;
+	    tail += 6;
+	  }
+	else if (strncmp (cp - 6, "@TLSIE", 6) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_tls_ie;
+	    tail += 6;
+	  }	
+	else if (strncmp (cp - 6, "@TLSLE", 6) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_tls_le;
+	    tail += 6;
+	  }	
+      }
+    else if (cp - 4 > str && cp[-4] == '@')
+      {
+	if (strncmp (cp - 4, "@PLT", 4) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_plt_off;
+	    tail += 4;
+	  }
+	else if (strncmp (cp - 4, "@GOT", 4) == 0)
+	  {
+	    yylval.exp.pic_reloc = pic_got_off;
+	    tail += 4;
+	  }
+      }
+  }
+#endif
+
+  if (tail != 0)
+    {
+      c = s[-tail];
+      s[-tail] = 0;
+    }
+
+  hold = input_line_pointer;
+  input_line_pointer = str;
+  expression (&yylval.exp.exp);
+  str = input_line_pointer;
+  input_line_pointer = hold;
+
+  if (tail != 0)
+    {
+      s[-tail] = c;
+      str = s;
+    }
+
+  return EXPR;
+}
+
+/* Parse an m68k operand.  This is the only function which is called
+   from outside this file.  */
+
+int
+m68k_ip_op (s, oparg)
+     char *s;
+     struct m68k_op *oparg;
+{
+  memset (oparg, 0, sizeof *oparg);
+  oparg->error = NULL;
+  oparg->index.reg = ZDATA0;
+  oparg->index.scale = 1;
+  oparg->disp.exp.X_op = O_absent;
+  oparg->odisp.exp.X_op = O_absent;
+
+  str = strorig = s;
+  op = oparg;
+
+  return yyparse ();
+}
+
+/* The error handler.  */
+
+static void
+yyerror (s)
+     const char *s;
+{
+  op->error = s;
+}
+
diff --git a/gas/po/es.gmo b/gas/po/es.gmo
new file mode 100644
index 0000000..0b17373
--- /dev/null
+++ b/gas/po/es.gmo
Binary files differ
diff --git a/gas/po/fi.gmo b/gas/po/fi.gmo
new file mode 100644
index 0000000..72df64d
--- /dev/null
+++ b/gas/po/fi.gmo
Binary files differ
diff --git a/gas/po/fr.gmo b/gas/po/fr.gmo
new file mode 100644
index 0000000..c47df47
--- /dev/null
+++ b/gas/po/fr.gmo
Binary files differ
diff --git a/gas/po/id.gmo b/gas/po/id.gmo
new file mode 100644
index 0000000..2ecf194
--- /dev/null
+++ b/gas/po/id.gmo
Binary files differ
diff --git a/gas/po/ja.gmo b/gas/po/ja.gmo
new file mode 100644
index 0000000..07f7f92
--- /dev/null
+++ b/gas/po/ja.gmo
Binary files differ
diff --git a/gas/po/ru.gmo b/gas/po/ru.gmo
new file mode 100644
index 0000000..87734f2
--- /dev/null
+++ b/gas/po/ru.gmo
Binary files differ
diff --git a/gas/po/rw.gmo b/gas/po/rw.gmo
new file mode 100644
index 0000000..8879b0e
--- /dev/null
+++ b/gas/po/rw.gmo
Binary files differ
diff --git a/gas/po/tr.gmo b/gas/po/tr.gmo
new file mode 100644
index 0000000..bf7736d
--- /dev/null
+++ b/gas/po/tr.gmo
Binary files differ
diff --git a/gas/rl78-parse.c b/gas/rl78-parse.c
new file mode 100644
index 0000000..97ed2c7
--- /dev/null
+++ b/gas/rl78-parse.c
@@ -0,0 +1,4716 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse rl78_parse
+#define yylex   rl78_lex
+#define yyerror rl78_error
+#define yylval  rl78_lval
+#define yychar  rl78_char
+#define yydebug rl78_debug
+#define yynerrs rl78_nerrs
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     A = 258,
+     X = 259,
+     B = 260,
+     C = 261,
+     D = 262,
+     E = 263,
+     H = 264,
+     L = 265,
+     AX = 266,
+     BC = 267,
+     DE = 268,
+     HL = 269,
+     SPL = 270,
+     SPH = 271,
+     PSW = 272,
+     CS = 273,
+     ES = 274,
+     PMC = 275,
+     MEM = 276,
+     FLAG = 277,
+     SP = 278,
+     CY = 279,
+     RB0 = 280,
+     RB1 = 281,
+     RB2 = 282,
+     RB3 = 283,
+     EXPR = 284,
+     UNKNOWN_OPCODE = 285,
+     IS_OPCODE = 286,
+     DOT_S = 287,
+     DOT_B = 288,
+     DOT_W = 289,
+     DOT_L = 290,
+     DOT_A = 291,
+     DOT_UB = 292,
+     DOT_UW = 293,
+     ADD = 294,
+     ADDC = 295,
+     ADDW = 296,
+     AND_ = 297,
+     AND1 = 298,
+     BF = 299,
+     BH = 300,
+     BNC = 301,
+     BNH = 302,
+     BNZ = 303,
+     BR = 304,
+     BRK = 305,
+     BRK1 = 306,
+     BT = 307,
+     BTCLR = 308,
+     BZ = 309,
+     CALL = 310,
+     CALLT = 311,
+     CLR1 = 312,
+     CLRB = 313,
+     CLRW = 314,
+     CMP = 315,
+     CMP0 = 316,
+     CMPS = 317,
+     CMPW = 318,
+     DEC = 319,
+     DECW = 320,
+     DI = 321,
+     DIVHU = 322,
+     DIVWU = 323,
+     EI = 324,
+     HALT = 325,
+     INC = 326,
+     INCW = 327,
+     MACH = 328,
+     MACHU = 329,
+     MOV = 330,
+     MOV1 = 331,
+     MOVS = 332,
+     MOVW = 333,
+     MULH = 334,
+     MULHU = 335,
+     MULU = 336,
+     NOP = 337,
+     NOT1 = 338,
+     ONEB = 339,
+     ONEW = 340,
+     OR = 341,
+     OR1 = 342,
+     POP = 343,
+     PUSH = 344,
+     RET = 345,
+     RETI = 346,
+     RETB = 347,
+     ROL = 348,
+     ROLC = 349,
+     ROLWC = 350,
+     ROR = 351,
+     RORC = 352,
+     SAR = 353,
+     SARW = 354,
+     SEL = 355,
+     SET1 = 356,
+     SHL = 357,
+     SHLW = 358,
+     SHR = 359,
+     SHRW = 360,
+     SKC = 361,
+     SKH = 362,
+     SKNC = 363,
+     SKNH = 364,
+     SKNZ = 365,
+     SKZ = 366,
+     STOP = 367,
+     SUB = 368,
+     SUBC = 369,
+     SUBW = 370,
+     XCH = 371,
+     XCHW = 372,
+     XOR = 373,
+     XOR1 = 374
+   };
+#endif
+/* Tokens.  */
+#define A 258
+#define X 259
+#define B 260
+#define C 261
+#define D 262
+#define E 263
+#define H 264
+#define L 265
+#define AX 266
+#define BC 267
+#define DE 268
+#define HL 269
+#define SPL 270
+#define SPH 271
+#define PSW 272
+#define CS 273
+#define ES 274
+#define PMC 275
+#define MEM 276
+#define FLAG 277
+#define SP 278
+#define CY 279
+#define RB0 280
+#define RB1 281
+#define RB2 282
+#define RB3 283
+#define EXPR 284
+#define UNKNOWN_OPCODE 285
+#define IS_OPCODE 286
+#define DOT_S 287
+#define DOT_B 288
+#define DOT_W 289
+#define DOT_L 290
+#define DOT_A 291
+#define DOT_UB 292
+#define DOT_UW 293
+#define ADD 294
+#define ADDC 295
+#define ADDW 296
+#define AND_ 297
+#define AND1 298
+#define BF 299
+#define BH 300
+#define BNC 301
+#define BNH 302
+#define BNZ 303
+#define BR 304
+#define BRK 305
+#define BRK1 306
+#define BT 307
+#define BTCLR 308
+#define BZ 309
+#define CALL 310
+#define CALLT 311
+#define CLR1 312
+#define CLRB 313
+#define CLRW 314
+#define CMP 315
+#define CMP0 316
+#define CMPS 317
+#define CMPW 318
+#define DEC 319
+#define DECW 320
+#define DI 321
+#define DIVHU 322
+#define DIVWU 323
+#define EI 324
+#define HALT 325
+#define INC 326
+#define INCW 327
+#define MACH 328
+#define MACHU 329
+#define MOV 330
+#define MOV1 331
+#define MOVS 332
+#define MOVW 333
+#define MULH 334
+#define MULHU 335
+#define MULU 336
+#define NOP 337
+#define NOT1 338
+#define ONEB 339
+#define ONEW 340
+#define OR 341
+#define OR1 342
+#define POP 343
+#define PUSH 344
+#define RET 345
+#define RETI 346
+#define RETB 347
+#define ROL 348
+#define ROLC 349
+#define ROLWC 350
+#define ROR 351
+#define RORC 352
+#define SAR 353
+#define SARW 354
+#define SEL 355
+#define SET1 356
+#define SHL 357
+#define SHLW 358
+#define SHR 359
+#define SHRW 360
+#define SKC 361
+#define SKH 362
+#define SKNC 363
+#define SKNH 364
+#define SKNZ 365
+#define SKZ 366
+#define STOP 367
+#define SUB 368
+#define SUBC 369
+#define SUBW 370
+#define XCH 371
+#define XCHW 372
+#define XOR 373
+#define XOR1 374
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 20 "rl78-parse.y"
+
+
+#include "as.h"
+#include "safe-ctype.h"
+#include "rl78-defs.h"
+
+static int rl78_lex (void);
+
+/* Ok, here are the rules for using these macros...
+
+   B*() is used to specify the base opcode bytes.  Fields to be filled
+        in later, leave zero.  Call this first.
+
+   F() and FE() are used to fill in fields within the base opcode bytes.  You MUST
+        call B*() before any F() or FE().
+
+   [UN]*O*(), PC*() appends operands to the end of the opcode.  You
+        must call P() and B*() before any of these, so that the fixups
+        have the right byte location.
+        O = signed, UO = unsigned, NO = negated, PC = pcrel
+
+   IMM() adds an immediate and fills in the field for it.
+   NIMM() same, but negates the immediate.
+   NBIMM() same, but negates the immediate, for sbb.
+   DSP() adds a displacement, and fills in the field for it.
+
+   Note that order is significant for the O, IMM, and DSP macros, as
+   they append their data to the operand buffer in the order that you
+   call them.
+
+   Use "disp" for displacements whenever possible; this handles the
+   "0" case properly.  */
+
+#define B1(b1)             rl78_base1 (b1)
+#define B2(b1, b2)         rl78_base2 (b1, b2)
+#define B3(b1, b2, b3)     rl78_base3 (b1, b2, b3)
+#define B4(b1, b2, b3, b4) rl78_base4 (b1, b2, b3, b4)
+
+/* POS is bits from the MSB of the first byte to the LSB of the last byte.  */
+#define F(val,pos,sz)      rl78_field (val, pos, sz)
+#define FE(exp,pos,sz)	   rl78_field (exp_val (exp), pos, sz);
+
+#define O1(v)              rl78_op (v, 1, RL78REL_DATA)
+#define O2(v)              rl78_op (v, 2, RL78REL_DATA)
+#define O3(v)              rl78_op (v, 3, RL78REL_DATA)
+#define O4(v)              rl78_op (v, 4, RL78REL_DATA)
+
+#define PC1(v)             rl78_op (v, 1, RL78REL_PCREL)
+#define PC2(v)             rl78_op (v, 2, RL78REL_PCREL)
+#define PC3(v)             rl78_op (v, 3, RL78REL_PCREL)
+
+#define IMM(v,pos)	   F (immediate (v, RL78REL_SIGNED, pos), pos, 2); \
+			   if (v.X_op != O_constant && v.X_op != O_big) rl78_linkrelax_imm (pos)
+#define NIMM(v,pos)	   F (immediate (v, RL78REL_NEGATIVE, pos), pos, 2)
+#define NBIMM(v,pos)	   F (immediate (v, RL78REL_NEGATIVE_BORROW, pos), pos, 2)
+#define DSP(v,pos,msz)	   if (!v.X_md) rl78_relax (RL78_RELAX_DISP, pos); \
+			   else rl78_linkrelax_dsp (pos); \
+			   F (displacement (v, msz), pos, 2)
+
+#define id24(a,b2,b3)	   B3 (0xfb+a, b2, b3)
+
+static int         expr_is_sfr (expressionS);
+static int         expr_is_saddr (expressionS);
+static int         expr_is_word_aligned (expressionS);
+static int         exp_val (expressionS exp);
+
+static int    need_flag = 0;
+static int    rl78_in_brackets = 0;
+static int    rl78_last_token = 0;
+static char * rl78_init_start;
+static char * rl78_last_exp_start = 0;
+static int    rl78_bit_insn = 0;
+
+#define YYDEBUG 1
+#define YYERROR_VERBOSE 1
+
+#define NOT_SADDR  rl78_error ("Expression not 0xFFE20 to 0xFFF1F")
+#define SA(e) if (!expr_is_saddr (e)) NOT_SADDR;
+
+#define NOT_SFR  rl78_error ("Expression not 0xFFF00 to 0xFFFFF")
+#define SFR(e) if (!expr_is_sfr (e)) NOT_SFR;
+
+#define NOT_SFR_OR_SADDR  rl78_error ("Expression not 0xFFE20 to 0xFFFFF")
+
+#define NOT_ES if (rl78_has_prefix()) rl78_error ("ES: prefix not allowed here");
+
+#define WA(x) if (!expr_is_word_aligned (x)) rl78_error ("Expression not word-aligned");
+
+static void check_expr_is_bit_index (expressionS);
+#define Bit(e) check_expr_is_bit_index (e);
+
+/* Returns TRUE (non-zero) if the expression is a constant in the
+   given range.  */
+static int check_expr_is_const (expressionS, int vmin, int vmax);
+
+/* Convert a "regb" value to a "reg_xbc" value.  Error if other
+   registers are passed.  Needed to avoid reduce-reduce conflicts.  */
+static int
+reg_xbc (int reg)
+{
+  switch (reg)
+    {
+      case 0: /* X */
+        return 0x10;
+      case 3: /* B */
+        return 0x20;
+      case 2: /* C */
+        return 0x30;
+      default:
+        rl78_error ("Only X, B, or C allowed here");
+	return 0;
+    }
+}
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 138 "rl78-parse.y"
+{
+  int regno;
+  expressionS exp;
+}
+/* Line 193 of yacc.c.  */
+#line 463 "rl78-parse.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 476 "rl78-parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  174
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   835
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  129
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  50
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  318
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  738
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   374
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   122,     2,   121,   127,     2,     2,     2,
+       2,     2,     2,   125,   120,     2,   126,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   128,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   123,     2,   124,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     5,    11,    12,    19,    24,    29,    34,
+      35,    41,    48,    56,    66,    76,    86,    94,   100,   105,
+     106,   112,   119,   129,   137,   143,   144,   152,   153,   161,
+     162,   170,   171,   182,   186,   190,   194,   198,   202,   206,
+     214,   222,   230,   241,   244,   248,   253,   257,   262,   264,
+     266,   269,   274,   278,   283,   288,   291,   296,   301,   306,
+     313,   321,   324,   327,   330,   333,   334,   338,   343,   346,
+     349,   352,   355,   358,   361,   362,   366,   371,   381,   384,
+     385,   389,   393,   399,   406,   415,   418,   419,   423,   428,
+     436,   438,   440,   442,   444,   447,   449,   451,   453,   455,
+     457,   463,   469,   475,   476,   484,   491,   500,   505,   510,
+     511,   518,   525,   531,   539,   546,   547,   554,   555,   556,
+     564,   569,   574,   575,   576,   584,   592,   600,   611,   621,
+     631,   639,   647,   658,   668,   678,   688,   698,   708,   718,
+     728,   737,   746,   756,   765,   774,   784,   793,   802,   810,
+     819,   827,   828,   840,   841,   851,   852,   863,   864,   873,
+     874,   885,   886,   895,   902,   909,   916,   926,   933,   940,
+     947,   957,   967,   973,   979,   980,   988,   989,   996,   997,
+    1004,  1009,  1014,  1021,  1028,  1036,  1044,  1054,  1064,  1072,
+    1080,  1090,  1100,  1109,  1118,  1127,  1136,  1145,  1153,  1162,
+    1170,  1171,  1182,  1183,  1192,  1193,  1204,  1205,  1214,  1215,
+    1221,  1228,  1234,  1239,  1244,  1249,  1251,  1254,  1257,  1260,
+    1263,  1266,  1268,  1270,  1272,  1277,  1282,  1287,  1292,  1297,
+    1302,  1307,  1312,  1315,  1318,  1321,  1324,  1329,  1334,  1339,
+    1344,  1349,  1354,  1359,  1361,  1363,  1365,  1367,  1369,  1371,
+    1373,  1378,  1385,  1393,  1403,  1411,  1421,  1431,  1441,  1446,
+    1451,  1452,  1455,  1457,  1459,  1461,  1463,  1465,  1467,  1469,
+    1471,  1473,  1475,  1477,  1479,  1481,  1483,  1485,  1487,  1489,
+    1491,  1493,  1495,  1497,  1499,  1501,  1503,  1505,  1507,  1509,
+    1511,  1513,  1515,  1517,  1519,  1521,  1523,  1525,  1527,  1529,
+    1531,  1533,  1535,  1537,  1539,  1541,  1543,  1545,  1547,  1549,
+    1551,  1553,  1555,  1557,  1559,  1561,  1563,  1565,  1567
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     130,     0,    -1,    30,    -1,   169,     3,   120,   121,    29,
+      -1,    -1,   169,    29,   131,   120,   121,    29,    -1,   169,
+       3,   120,     3,    -1,   169,     3,   120,   165,    -1,   169,
+     165,   120,     3,    -1,    -1,   169,     3,   120,    29,   132,
+      -1,   169,     3,   120,   163,   122,    29,    -1,   169,     3,
+     120,   163,   123,    14,   124,    -1,   169,     3,   120,   163,
+     123,    14,   125,    29,   124,    -1,   169,     3,   120,   163,
+     123,    14,   125,     5,   124,    -1,   169,     3,   120,   163,
+     123,    14,   125,     6,   124,    -1,   169,   163,   122,    29,
+     120,   121,    29,    -1,   170,    11,   120,   121,    29,    -1,
+     170,    11,   120,   166,    -1,    -1,   170,    11,   120,    29,
+     133,    -1,   170,    11,   120,   163,   122,    29,    -1,   170,
+      11,   120,   163,   123,    14,   125,    29,   124,    -1,   170,
+      11,   120,   163,   123,    14,   124,    -1,   170,    23,   120,
+     121,    29,    -1,    -1,   171,    24,   120,   168,   126,    29,
+     134,    -1,    -1,   171,    24,   120,    29,   126,    29,   135,
+      -1,    -1,   171,    24,   120,     3,   126,    29,   136,    -1,
+      -1,   171,    24,   120,   163,   123,    14,   124,   126,    29,
+     137,    -1,    12,   127,    29,    -1,    46,   127,    29,    -1,
+      54,   127,    29,    -1,    48,   127,    29,    -1,    45,   127,
+      29,    -1,    47,   127,    29,    -1,   172,   168,   126,    29,
+     120,   127,    29,    -1,   172,    29,   126,    29,   120,   127,
+      29,    -1,   172,     3,   126,    29,   120,   127,    29,    -1,
+     172,   163,   123,    14,   124,   126,    29,   120,   127,    29,
+      -1,    49,    11,    -1,    49,   127,    29,    -1,    49,   127,
+     122,    29,    -1,    49,   122,    29,    -1,    49,   122,   122,
+      29,    -1,    50,    -1,    51,    -1,    55,   166,    -1,    55,
+     127,   122,    29,    -1,    55,   122,    29,    -1,    55,   122,
+     122,    29,    -1,    56,   123,    29,   124,    -1,   173,    24,
+      -1,   173,   168,   126,    29,    -1,   173,    29,   126,    29,
+      -1,   173,     3,   126,    29,    -1,   173,   163,   122,    29,
+     126,    29,    -1,   173,   163,   123,    14,   124,   126,    29,
+      -1,   174,     3,    -1,   174,     4,    -1,   174,     5,    -1,
+     174,     6,    -1,    -1,   174,    29,   138,    -1,   174,   163,
+     122,    29,    -1,   175,    11,    -1,   175,    12,    -1,    61,
+       3,    -1,    61,     4,    -1,    61,     5,    -1,    61,     6,
+      -1,    -1,    61,    29,   139,    -1,    61,   163,   122,    29,
+      -1,    62,     4,   120,   163,   123,    14,   125,    29,   124,
+      -1,   176,   164,    -1,    -1,   176,    29,   140,    -1,   176,
+     122,    29,    -1,   176,    19,   128,   122,    29,    -1,   176,
+     123,    14,   125,    29,   124,    -1,   176,    19,   128,   123,
+      14,   125,    29,   124,    -1,   177,   166,    -1,    -1,   177,
+      29,   141,    -1,   177,   163,   122,    29,    -1,   177,   163,
+     123,    14,   125,    29,   124,    -1,    66,    -1,    69,    -1,
+      80,    -1,    79,    -1,    81,     4,    -1,    67,    -1,    68,
+      -1,    74,    -1,    73,    -1,    70,    -1,    75,     3,   120,
+     121,    29,    -1,    75,   165,   120,   121,    29,    -1,    75,
+     168,   120,   121,    29,    -1,    -1,    75,   163,    29,   120,
+     121,    29,   142,    -1,    75,   122,    29,   120,   121,    29,
+      -1,    75,    19,   128,   122,    29,   120,   121,    29,    -1,
+      75,   165,   120,     3,    -1,    75,     3,   120,   165,    -1,
+      -1,    75,   163,    29,   120,     3,   143,    -1,    75,     3,
+     120,   163,   122,    29,    -1,    75,   122,    29,   120,     3,
+      -1,    75,    19,   128,   122,    29,   120,     3,    -1,    75,
+     165,   120,   163,   122,    29,    -1,    -1,    75,     3,   120,
+     163,    29,   144,    -1,    -1,    -1,    75,   165,   120,   163,
+      29,   145,   146,    -1,    75,     3,   120,   168,    -1,    75,
+     168,   120,   164,    -1,    -1,    -1,    75,   168,   120,   163,
+      29,   147,   148,    -1,    75,     3,   120,   163,   123,    13,
+     124,    -1,    75,   163,   123,    13,   124,   120,     3,    -1,
+      75,   163,   123,    13,   125,    29,   124,   120,   121,    29,
+      -1,    75,     3,   120,   163,   123,    13,   125,    29,   124,
+      -1,    75,   163,   123,    13,   125,    29,   124,   120,     3,
+      -1,    75,     3,   120,   163,   123,    14,   124,    -1,    75,
+     163,   123,    14,   124,   120,     3,    -1,    75,   163,   123,
+      14,   125,    29,   124,   120,   121,    29,    -1,    75,     3,
+     120,   163,   123,    14,   125,    29,   124,    -1,    75,   163,
+     123,    14,   125,    29,   124,   120,     3,    -1,    75,     3,
+     120,   163,   123,    14,   125,     5,   124,    -1,    75,   163,
+     123,    14,   125,     5,   124,   120,     3,    -1,    75,     3,
+     120,   163,   123,    14,   125,     6,   124,    -1,    75,   163,
+     123,    14,   125,     6,   124,   120,     3,    -1,    75,   163,
+      29,   123,     5,   124,   120,   121,    29,    -1,    75,     3,
+     120,   163,    29,   123,     5,   124,    -1,    75,   163,    29,
+     123,     5,   124,   120,     3,    -1,    75,   163,    29,   123,
+       6,   124,   120,   121,    29,    -1,    75,     3,   120,   163,
+      29,   123,     6,   124,    -1,    75,   163,    29,   123,     6,
+     124,   120,     3,    -1,    75,   163,    29,   123,    12,   124,
+     120,   121,    29,    -1,    75,   163,   123,    12,   124,   120,
+     121,    29,    -1,    75,     3,   120,   163,    29,   123,    12,
+     124,    -1,    75,     3,   120,   163,   123,    12,   124,    -1,
+      75,   163,    29,   123,    12,   124,   120,     3,    -1,    75,
+     163,   123,    12,   124,   120,     3,    -1,    -1,    75,   163,
+     123,    23,   125,    29,   124,   120,   121,    29,   149,    -1,
+      -1,    75,   163,   123,    23,   124,   120,   121,    29,   150,
+      -1,    -1,    75,     3,   120,   163,   123,    23,   125,    29,
+     124,   151,    -1,    -1,    75,     3,   120,   163,   123,    23,
+     124,   152,    -1,    -1,    75,   163,   123,    23,   125,    29,
+     124,   120,     3,   153,    -1,    -1,    75,   163,   123,    23,
+     124,   120,     3,   154,    -1,   178,    24,   120,    29,   126,
+      29,    -1,   178,    24,   120,     3,   126,    29,    -1,   178,
+      24,   120,   168,   126,    29,    -1,   178,    24,   120,   163,
+     123,    14,   124,   126,    29,    -1,   178,    29,   126,    29,
+     120,    24,    -1,   178,     3,   126,    29,   120,    24,    -1,
+     178,   168,   126,    29,   120,    24,    -1,   178,   163,   123,
+      14,   124,   126,    29,   120,    24,    -1,    77,   163,   123,
+      14,   125,    29,   124,   120,     4,    -1,    78,    11,   120,
+     121,    29,    -1,    78,   167,   120,   121,    29,    -1,    -1,
+      78,   163,    29,   120,   121,    29,   155,    -1,    -1,    78,
+      11,   120,   163,    29,   156,    -1,    -1,    78,   163,    29,
+     120,    11,   157,    -1,    78,    11,   120,   167,    -1,    78,
+     167,   120,    11,    -1,    78,    11,   120,   163,   122,    29,
+      -1,    78,   163,   122,    29,   120,    11,    -1,    78,    11,
+     120,   163,   123,    13,   124,    -1,    78,   163,   123,    13,
+     124,   120,    11,    -1,    78,    11,   120,   163,   123,    13,
+     125,    29,   124,    -1,    78,   163,   123,    13,   125,    29,
+     124,   120,    11,    -1,    78,    11,   120,   163,   123,    14,
+     124,    -1,    78,   163,   123,    14,   124,   120,    11,    -1,
+      78,    11,   120,   163,   123,    14,   125,    29,   124,    -1,
+      78,   163,   123,    14,   125,    29,   124,   120,    11,    -1,
+      78,    11,   120,   163,    29,   123,     5,   124,    -1,    78,
+     163,    29,   123,     5,   124,   120,    11,    -1,    78,    11,
+     120,   163,    29,   123,     6,   124,    -1,    78,   163,    29,
+     123,     6,   124,   120,    11,    -1,    78,    11,   120,   163,
+      29,   123,    12,   124,    -1,    78,    11,   120,   163,   123,
+      12,   124,    -1,    78,   163,    29,   123,    12,   124,   120,
+      11,    -1,    78,   163,   123,    12,   124,   120,    11,    -1,
+      -1,    78,    11,   120,   163,   123,    23,   125,    29,   124,
+     158,    -1,    -1,    78,    11,   120,   163,   123,    23,   124,
+     159,    -1,    -1,    78,   163,   123,    23,   125,    29,   124,
+     120,    11,   160,    -1,    -1,    78,   163,   123,    23,   124,
+     120,    11,   161,    -1,    -1,    78,   167,   120,    29,   162,
+      -1,    78,   167,   120,   163,   122,    29,    -1,    78,    23,
+     120,   121,    29,    -1,    78,    23,   120,    11,    -1,    78,
+      11,   120,    23,    -1,    78,   167,   120,    23,    -1,    82,
+      -1,    83,    24,    -1,    88,   166,    -1,    88,    17,    -1,
+      89,   166,    -1,    89,    17,    -1,    90,    -1,    91,    -1,
+      92,    -1,    93,     3,   120,    29,    -1,    94,     3,   120,
+      29,    -1,    95,    11,   120,    29,    -1,    95,    12,   120,
+      29,    -1,    96,     3,   120,    29,    -1,    97,     3,   120,
+      29,    -1,    98,     3,   120,    29,    -1,    99,    11,   120,
+      29,    -1,   100,    25,    -1,   100,    26,    -1,   100,    27,
+      -1,   100,    28,    -1,   102,     3,   120,    29,    -1,   102,
+       5,   120,    29,    -1,   102,     6,   120,    29,    -1,   103,
+      11,   120,    29,    -1,   103,    12,   120,    29,    -1,   104,
+       3,   120,    29,    -1,   105,    11,   120,    29,    -1,   106,
+      -1,   107,    -1,   108,    -1,   109,    -1,   110,    -1,   111,
+      -1,   112,    -1,   116,     3,   120,   165,    -1,   116,     3,
+     120,   163,   122,    29,    -1,   116,     3,   120,   163,   123,
+      13,   124,    -1,   116,     3,   120,   163,   123,    13,   125,
+      29,   124,    -1,   116,     3,   120,   163,   123,    14,   124,
+      -1,   116,     3,   120,   163,   123,    14,   125,    29,   124,
+      -1,   116,     3,   120,   163,   123,    14,   125,     5,   124,
+      -1,   116,     3,   120,   163,   123,    14,   125,     6,   124,
+      -1,   116,     3,   120,    29,    -1,   117,    11,   120,   167,
+      -1,    -1,    19,   128,    -1,     4,    -1,     3,    -1,     6,
+      -1,     5,    -1,     8,    -1,     7,    -1,    10,    -1,     9,
+      -1,     4,    -1,     6,    -1,     5,    -1,     8,    -1,     7,
+      -1,    10,    -1,     9,    -1,    11,    -1,    12,    -1,    13,
+      -1,    14,    -1,    12,    -1,    13,    -1,    14,    -1,    15,
+      -1,    16,    -1,    17,    -1,    18,    -1,    19,    -1,    20,
+      -1,    21,    -1,    39,    -1,    40,    -1,   113,    -1,   114,
+      -1,    60,    -1,    42,    -1,    86,    -1,   118,    -1,    41,
+      -1,   115,    -1,    63,    -1,    43,    -1,    87,    -1,   119,
+      -1,    52,    -1,    44,    -1,    53,    -1,   101,    -1,    57,
+      -1,    84,    -1,    58,    -1,    85,    -1,    59,    -1,    71,
+      -1,    64,    -1,    72,    -1,    65,    -1,    76,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   181,   181,   202,   205,   205,   208,   211,   214,   217,
+     217,   220,   223,   226,   229,   232,   237,   246,   249,   252,
+     252,   255,   258,   261,   264,   272,   272,   275,   275,   284,
+     284,   287,   287,   292,   295,   298,   301,   304,   307,   312,
+     315,   324,   327,   332,   335,   338,   341,   344,   349,   352,
+     357,   360,   363,   366,   369,   390,   393,   396,   405,   408,
+     411,   416,   418,   420,   422,   425,   425,   428,   433,   435,
+     440,   443,   446,   449,   452,   452,   455,   460,   465,   468,
+     468,   470,   472,   474,   476,   481,   484,   484,   487,   490,
+     495,   498,   503,   506,   509,   512,   520,   523,   526,   531,
+     539,   541,   544,   551,   551,   560,   563,   566,   569,   572,
+     572,   581,   584,   587,   590,   593,   593,   602,   602,   602,
+     605,   608,   615,   615,   615,   622,   625,   628,   631,   634,
+     637,   640,   643,   646,   649,   652,   655,   658,   661,   664,
+     667,   670,   673,   676,   679,   682,   685,   688,   691,   694,
+     697,   700,   700,   703,   703,   706,   706,   709,   709,   712,
+     712,   715,   715,   720,   729,   732,   735,   738,   747,   750,
+     753,   758,   763,   766,   769,   769,   778,   778,   787,   787,
+     796,   799,   802,   805,   808,   811,   814,   817,   820,   823,
+     826,   829,   832,   835,   838,   841,   844,   847,   850,   853,
+     856,   856,   859,   859,   862,   862,   865,   865,   868,   868,
+     871,   874,   877,   880,   883,   888,   893,   898,   901,   904,
+     907,   912,   915,   918,   923,   928,   933,   938,   943,   948,
+     955,   960,   967,   970,   973,   976,   981,   986,   991,   996,
+    1001,  1008,  1013,  1020,  1023,  1026,  1029,  1032,  1035,  1040,
+    1045,  1052,  1055,  1058,  1061,  1064,  1067,  1070,  1073,  1084,
+    1093,  1094,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,
+    1108,  1109,  1110,  1111,  1112,  1113,  1114,  1117,  1118,  1119,
+    1120,  1123,  1124,  1125,  1128,  1129,  1130,  1131,  1132,  1133,
+    1134,  1140,  1141,  1142,  1143,  1144,  1145,  1146,  1147,  1150,
+    1151,  1152,  1155,  1156,  1157,  1160,  1161,  1162,  1165,  1166,
+    1169,  1170,  1173,  1174,  1177,  1178,  1181,  1182,  1185
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "A", "X", "B", "C", "D", "E", "H", "L",
+  "AX", "BC", "DE", "HL", "SPL", "SPH", "PSW", "CS", "ES", "PMC", "MEM",
+  "FLAG", "SP", "CY", "RB0", "RB1", "RB2", "RB3", "EXPR", "UNKNOWN_OPCODE",
+  "IS_OPCODE", "DOT_S", "DOT_B", "DOT_W", "DOT_L", "DOT_A", "DOT_UB",
+  "DOT_UW", "ADD", "ADDC", "ADDW", "AND_", "AND1", "BF", "BH", "BNC",
+  "BNH", "BNZ", "BR", "BRK", "BRK1", "BT", "BTCLR", "BZ", "CALL", "CALLT",
+  "CLR1", "CLRB", "CLRW", "CMP", "CMP0", "CMPS", "CMPW", "DEC", "DECW",
+  "DI", "DIVHU", "DIVWU", "EI", "HALT", "INC", "INCW", "MACH", "MACHU",
+  "MOV", "MOV1", "MOVS", "MOVW", "MULH", "MULHU", "MULU", "NOP", "NOT1",
+  "ONEB", "ONEW", "OR", "OR1", "POP", "PUSH", "RET", "RETI", "RETB", "ROL",
+  "ROLC", "ROLWC", "ROR", "RORC", "SAR", "SARW", "SEL", "SET1", "SHL",
+  "SHLW", "SHR", "SHRW", "SKC", "SKH", "SKNC", "SKNH", "SKNZ", "SKZ",
+  "STOP", "SUB", "SUBC", "SUBW", "XCH", "XCHW", "XOR", "XOR1", "','",
+  "'#'", "'!'", "'['", "']'", "'+'", "'.'", "'$'", "':'", "$accept",
+  "statement", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "@8", "@9", "@10",
+  "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20",
+  "@21", "@22", "@23", "@24", "@25", "@26", "@27", "@28", "@29", "@30",
+  "@31", "@32", "opt_es", "regb", "regb_na", "regw", "regw_na", "sfr",
+  "addsub", "addsubw", "andor1", "bt_bf", "setclr1", "oneclrb", "oneclrw",
+  "incdec", "incdecw", "mov1", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+      44,    35,    33,    91,    93,    43,    46,    36,    58
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,   129,   130,   130,   131,   130,   130,   130,   130,   132,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   133,
+     130,   130,   130,   130,   130,   134,   130,   135,   130,   136,
+     130,   137,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   138,   130,   130,   130,   130,
+     130,   130,   130,   130,   139,   130,   130,   130,   130,   140,
+     130,   130,   130,   130,   130,   130,   141,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   142,   130,   130,   130,   130,   130,   143,
+     130,   130,   130,   130,   130,   144,   130,   145,   146,   130,
+     130,   130,   147,   148,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   149,   130,   150,   130,   151,   130,   152,   130,   153,
+     130,   154,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   155,   130,   156,   130,   157,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     158,   130,   159,   130,   160,   130,   161,   130,   162,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     163,   163,   164,   164,   164,   164,   164,   164,   164,   164,
+     165,   165,   165,   165,   165,   165,   165,   166,   166,   166,
+     166,   167,   167,   167,   168,   168,   168,   168,   168,   168,
+     168,   169,   169,   169,   169,   169,   169,   169,   169,   170,
+     170,   170,   171,   171,   171,   172,   172,   172,   173,   173,
+     174,   174,   175,   175,   176,   176,   177,   177,   178
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     5,     0,     6,     4,     4,     4,     0,
+       5,     6,     7,     9,     9,     9,     7,     5,     4,     0,
+       5,     6,     9,     7,     5,     0,     7,     0,     7,     0,
+       7,     0,    10,     3,     3,     3,     3,     3,     3,     7,
+       7,     7,    10,     2,     3,     4,     3,     4,     1,     1,
+       2,     4,     3,     4,     4,     2,     4,     4,     4,     6,
+       7,     2,     2,     2,     2,     0,     3,     4,     2,     2,
+       2,     2,     2,     2,     0,     3,     4,     9,     2,     0,
+       3,     3,     5,     6,     8,     2,     0,     3,     4,     7,
+       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
+       5,     5,     5,     0,     7,     6,     8,     4,     4,     0,
+       6,     6,     5,     7,     6,     0,     6,     0,     0,     7,
+       4,     4,     0,     0,     7,     7,     7,    10,     9,     9,
+       7,     7,    10,     9,     9,     9,     9,     9,     9,     9,
+       8,     8,     9,     8,     8,     9,     8,     8,     7,     8,
+       7,     0,    11,     0,     9,     0,    10,     0,     8,     0,
+      10,     0,     8,     6,     6,     6,     9,     6,     6,     6,
+       9,     9,     5,     5,     0,     7,     0,     6,     0,     6,
+       4,     4,     6,     6,     7,     7,     9,     9,     7,     7,
+       9,     9,     8,     8,     8,     8,     8,     7,     8,     7,
+       0,    10,     0,     8,     0,    10,     0,     8,     0,     5,
+       6,     5,     4,     4,     4,     1,     2,     2,     2,     2,
+       2,     1,     1,     1,     4,     4,     4,     4,     4,     4,
+       4,     4,     2,     2,     2,     2,     4,     4,     4,     4,
+       4,     4,     4,     1,     1,     1,     1,     1,     1,     1,
+       4,     6,     7,     9,     7,     9,     9,     9,     4,     4,
+       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint16 yydefact[] =
+{
+       0,     0,     2,   291,   292,   299,   296,   302,   306,     0,
+       0,     0,     0,     0,    48,    49,   305,   307,     0,     0,
+       0,   309,   311,   313,   295,   260,     0,   301,   315,   317,
+      90,    95,    96,    91,    99,   314,   316,    98,    97,   260,
+     318,   260,   260,    93,    92,     0,   215,     0,   310,   312,
+     297,   303,     0,     0,   221,   222,   223,     0,     0,     0,
+       0,     0,     0,     0,     0,   308,     0,     0,     0,     0,
+     243,   244,   245,   246,   247,   248,   249,   293,   294,   300,
+       0,     0,   298,   304,     0,   260,     0,     0,   260,   260,
+     260,     0,     0,   260,   260,     0,     0,     0,     0,     0,
+      43,     0,     0,     0,   277,   278,   279,   280,     0,     0,
+      50,     0,    70,    71,    72,    73,     0,    74,     0,     0,
+       0,   270,   272,   271,   274,   273,   276,   275,   284,   285,
+     286,   287,   288,   289,   290,     0,     0,     0,     0,     0,
+       0,   281,   282,   283,     0,     0,     0,    94,   216,   218,
+     217,   220,   219,     0,     0,     0,     0,     0,     0,     0,
+       0,   232,   233,   234,   235,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     1,     0,     4,     0,     0,     0,
+       0,     0,     0,   288,     0,     0,     0,     0,    55,     0,
+       0,     0,    61,    62,    63,    64,    65,     0,    68,    69,
+     263,   262,   265,   264,   267,   266,   269,   268,     0,    79,
+       0,     0,    78,    86,     0,    85,     0,     0,     0,     0,
+       0,    33,    37,    34,    38,    36,    46,     0,    44,     0,
+      35,    52,     0,     0,     0,   261,    75,     0,   260,   260,
+     261,     0,     0,     0,   260,   260,     0,   260,     0,     0,
+       0,     0,   260,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   260,     0,
+     260,     0,     0,     0,   260,     0,   260,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    66,     0,     0,    80,
+      81,     0,    87,     0,     0,     0,   260,     0,     0,     0,
+      47,    45,    53,    51,    54,    76,     0,     0,     0,   108,
+     120,     0,     0,     0,     0,     0,     0,     0,     0,   107,
+       0,     0,     0,     0,   121,     0,   213,     0,     0,   180,
+     212,     0,     0,     0,     0,     0,     0,     0,     0,   181,
+     214,   208,     0,     0,   224,   225,   226,   227,   228,   229,
+     230,   231,   236,   237,   238,   239,   240,   241,   242,   258,
+       0,   250,   259,     6,     9,     0,     0,     7,     0,     0,
+       8,    19,     0,     0,    18,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    58,    57,     0,     0,    56,    67,
+       0,     0,     0,    88,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   100,   115,     0,     0,     0,   112,
+       0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   101,   117,     0,   102,   122,     0,   172,
+     176,     0,     0,   211,   178,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   209,   173,     0,
+       0,     0,    10,     3,     0,     0,     0,     0,    20,    17,
+       0,     0,    24,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    82,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   116,   111,     0,
+       0,     0,     0,     0,   105,   110,   103,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   118,
+     114,   123,     0,     0,   177,   182,     0,     0,     0,     0,
+     179,   174,     0,     0,     0,   183,     0,     0,     0,     0,
+       0,     0,     0,   210,   251,     0,     0,    11,     0,     5,
+       0,    21,     0,    29,    27,     0,    25,     0,     0,     0,
+       0,    59,     0,     0,    83,     0,   168,   164,   163,     0,
+     165,   167,     0,   169,     0,     0,     0,     0,   148,   125,
+       0,   130,     0,   157,     0,   113,     0,   104,     0,     0,
+       0,   150,     0,   126,     0,   131,     0,     0,     0,   161,
+       0,     0,   119,   124,     0,     0,     0,     0,   197,   184,
+       0,   188,     0,   202,     0,   175,     0,     0,     0,   199,
+     185,     0,   189,     0,   206,     0,   252,     0,   254,     0,
+      12,     0,    16,    23,     0,    30,    28,     0,    26,    41,
+      40,     0,    39,    60,     0,    89,     0,     0,     0,   140,
+     143,   147,     0,     0,     0,     0,   158,     0,   106,   141,
+       0,   144,     0,   149,     0,   146,     0,     0,     0,     0,
+     162,   153,     0,     0,   192,   194,   196,     0,     0,   203,
+       0,   193,   195,   198,     0,     0,   207,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    84,     0,
+       0,    77,   128,   135,   137,   133,   155,   139,   142,   145,
+     129,     0,   136,   138,   134,     0,   154,   159,     0,   171,
+     186,   190,   200,   187,   191,   204,   253,   256,   257,   255,
+      14,    15,    13,    22,    31,     0,   166,   170,   156,   127,
+     132,   160,   151,   201,   205,    32,    42,   152
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,    84,   271,   452,   458,   628,   626,   625,   735,   286,
+     236,   289,   292,   577,   495,   487,   509,   592,   511,   593,
+     737,   706,   728,   646,   731,   660,   605,   514,   520,   733,
+     669,   734,   676,   447,   118,   212,   137,   110,   146,   138,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -206
+static const yytype_int16 yypact[] =
+{
+     220,   -44,  -206,  -206,  -206,  -206,  -206,  -206,  -206,   -34,
+     -24,    17,    62,    41,  -206,  -206,  -206,  -206,    64,    93,
+      75,  -206,  -206,  -206,  -206,   161,   203,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,    53,
+    -206,   183,   228,  -206,  -206,   224,  -206,   206,  -206,  -206,
+    -206,  -206,   403,   422,  -206,  -206,  -206,   235,   251,    97,
+     253,   345,   356,   225,   336,  -206,    38,   150,   382,   247,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+     401,   383,  -206,  -206,   246,   337,   149,   389,   390,   352,
+     346,   167,    10,   198,   371,   394,   408,   413,   429,   445,
+    -206,    24,    63,   466,  -206,  -206,  -206,  -206,    81,   296,
+    -206,   467,  -206,  -206,  -206,  -206,   304,  -206,   354,   379,
+     380,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,   374,  -206,  -206,   472,    11,   384,   385,   386,
+     387,  -206,  -206,  -206,   388,    36,   392,  -206,  -206,  -206,
+    -206,  -206,  -206,   393,   395,   396,   397,   398,   399,   400,
+     402,  -206,  -206,  -206,  -206,   404,   405,   406,   407,   410,
+     411,   412,   414,   415,  -206,   416,  -206,   381,   417,   418,
+     419,   420,   421,   304,   423,   425,   424,   426,  -206,   427,
+       2,   430,  -206,  -206,  -206,  -206,  -206,   432,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,   378,  -206,
+     481,   497,  -206,  -206,   121,  -206,   431,   435,   433,   437,
+     436,  -206,  -206,  -206,  -206,  -206,  -206,   485,  -206,   492,
+    -206,  -206,   494,   499,   434,  -206,  -206,   500,   183,    80,
+     439,   443,    96,   169,    29,    72,   519,   124,    55,    98,
+     512,   211,   112,   513,   514,   515,   516,   517,   522,   535,
+     536,   537,   538,   539,   540,   541,   542,   543,   446,   157,
+      18,   453,   545,   572,   101,   456,   409,   547,   549,   565,
+     551,   552,   553,   554,   570,   556,  -206,   557,   130,  -206,
+    -206,   462,  -206,   559,   575,   561,   428,   562,   578,   564,
+    -206,  -206,  -206,  -206,  -206,  -206,   471,   566,    65,  -206,
+    -206,   567,     5,     6,   243,   473,   233,   255,   258,  -206,
+     569,    82,   571,   573,  -206,   474,  -206,   574,    73,  -206,
+    -206,   576,    56,   348,   484,   477,   274,   277,   297,  -206,
+    -206,  -206,   577,   486,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+     318,  -206,  -206,  -206,  -206,   580,   344,  -206,   489,   487,
+    -206,  -206,   582,   349,  -206,   583,   488,   490,   495,   491,
+     493,   501,   496,   502,  -206,  -206,   498,   503,  -206,  -206,
+     586,   605,   594,  -206,   504,   505,   506,   507,   508,   509,
+     510,   518,   520,   612,  -206,   511,   599,   447,   521,  -206,
+     607,  -206,   608,   523,   524,   525,   526,   530,   609,   531,
+     111,   532,   610,  -206,  -206,   614,  -206,  -206,   615,  -206,
+     533,   616,   450,  -206,  -206,   624,   534,   544,   546,   643,
+     555,   558,   626,   560,   628,   563,   630,  -206,  -206,   631,
+     632,   455,  -206,  -206,   633,   649,   635,   548,  -206,  -206,
+     636,   652,  -206,   638,   642,   658,   644,   550,   568,   579,
+     581,   645,   584,  -206,   587,   585,   647,   655,   653,   656,
+     667,   657,   660,   588,   663,   590,   372,  -206,  -206,   589,
+     353,   355,   357,     7,  -206,  -206,  -206,   591,   596,   597,
+       8,   685,   595,   686,   598,   600,   601,    27,   602,  -206,
+    -206,  -206,   603,   391,  -206,  -206,   604,   359,   361,   363,
+    -206,  -206,   611,   613,   617,  -206,   679,   680,   606,   681,
+     618,   682,   619,  -206,  -206,   365,   367,  -206,   369,  -206,
+     665,  -206,   373,  -206,  -206,   620,  -206,   668,   669,   670,
+     671,  -206,   672,   673,  -206,   621,  -206,  -206,  -206,   622,
+    -206,  -206,   674,  -206,   675,   623,   625,   627,  -206,  -206,
+     677,  -206,   113,  -206,   678,  -206,   689,  -206,    28,    30,
+      31,  -206,   691,  -206,   634,  -206,   637,   639,   640,  -206,
+     692,   641,  -206,  -206,   646,   629,   648,   650,  -206,  -206,
+     694,  -206,   700,  -206,   703,  -206,   723,   724,   725,  -206,
+    -206,   651,  -206,   659,  -206,   661,  -206,   709,  -206,   116,
+    -206,   168,  -206,  -206,   710,  -206,  -206,   654,  -206,  -206,
+    -206,   662,  -206,  -206,   664,  -206,   666,   676,   683,  -206,
+    -206,  -206,   684,   687,   688,   690,  -206,   693,  -206,  -206,
+     711,  -206,   712,  -206,   719,  -206,    32,   747,   749,    33,
+    -206,  -206,    35,   751,  -206,  -206,  -206,   695,   696,  -206,
+     697,  -206,  -206,  -206,   745,   752,  -206,   753,   698,   699,
+     701,   702,   704,   705,   706,   707,   729,   708,  -206,   733,
+     741,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,   738,  -206,  -206,  -206,   739,  -206,  -206,   740,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,   744,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,
+    -206,  -206,  -206,  -206,   -39,   451,   -84,   -48,  -205,   -82,
+    -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206,  -206
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint16 yytable[] =
+{
+     136,   178,   139,   145,   150,   152,   186,   191,   409,   411,
+     575,   581,   220,   200,   201,   202,   203,   204,   205,   206,
+     207,   363,   121,   122,   123,   124,   125,   126,   127,   208,
+     589,   649,   319,   651,   653,   700,   704,   116,   707,   209,
+     242,   165,   329,   166,   167,   215,   177,   364,   116,   185,
+     190,   197,   100,   226,   214,   219,   120,   121,   122,   123,
+     124,   125,   126,   127,   362,   249,   330,   434,   128,   129,
+     130,   131,   132,   133,   134,   200,   201,   202,   203,   204,
+     205,   206,   207,    95,   121,   122,   123,   124,   125,   126,
+     127,   116,   228,    96,   405,   128,   129,   130,   131,   183,
+     133,   134,   430,    97,   104,   105,   106,   107,   155,   156,
+     231,   424,   104,   105,   106,   107,   504,   505,   643,   644,
+     116,   679,   680,   339,   283,   284,   410,   412,   576,   582,
+     371,   116,   210,   211,   243,   340,   141,   142,   143,   365,
+     506,   341,   645,   116,    98,   681,   227,   326,   590,   650,
+     320,   652,   654,   701,   705,   309,   708,   310,   250,   251,
+     179,   168,   169,   101,   112,   113,   114,   115,   102,   141,
+     142,   143,   180,   682,   683,   135,   331,   435,   198,   199,
+     116,   315,   316,   317,   361,   229,   367,   406,   407,    99,
+     117,   103,   318,   322,   379,   431,   432,   684,   111,   306,
+     308,   307,   116,   232,   425,   321,   323,   119,   328,   104,
+     105,   106,   107,   343,   399,   108,   313,   116,   332,   314,
+     109,   333,   372,   335,   336,   337,   374,   213,   147,   360,
+     148,   366,     1,   342,   338,   373,   160,   378,   153,   140,
+     141,   142,   143,   293,   294,   327,   174,   116,   413,   414,
+       2,   144,   390,   391,   154,   415,   157,   398,   171,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+     175,   121,   122,   123,   124,   125,   126,   127,   158,   192,
+     193,   194,   195,   436,   437,   187,   116,   417,   418,   159,
+     438,   161,   162,   163,   164,   116,   176,   128,   129,   130,
+     131,   183,   133,   134,   216,   196,   188,   565,   566,   419,
+     420,   189,   421,   422,   567,   170,   128,   129,   130,   131,
+     183,   133,   134,   182,   173,   217,   595,   596,   441,   442,
+     218,   443,   444,   597,   172,   128,   129,   130,   131,   183,
+     133,   134,   376,   181,   104,   105,   106,   107,   233,   184,
+     149,   445,   446,   221,   128,   129,   130,   131,   183,   133,
+     134,   396,   235,   104,   105,   106,   107,   222,   377,   151,
+     450,   451,   223,   128,   129,   130,   131,   183,   133,   134,
+     121,   122,   123,   124,   125,   126,   127,   397,   224,   489,
+     490,   491,   516,   517,   518,   116,   454,   455,   535,   536,
+     492,   460,   461,   519,   225,   359,   237,   569,   570,   571,
+     572,   573,   574,   599,   600,   601,   602,   603,   604,   616,
+     617,   618,   619,   620,   621,   230,   234,   623,   624,   238,
+     239,   241,   240,   272,   244,   245,   288,   247,   248,   246,
+     290,   291,   252,   253,   300,   254,   255,   256,   257,   258,
+     259,   301,   260,   302,   261,   262,   263,   264,   303,   305,
+     265,   266,   267,   325,   268,   269,   270,   273,   274,   275,
+     276,   334,   344,   345,   346,   347,   348,   277,   279,   278,
+     280,   349,   281,   282,   287,   296,   285,   295,   304,   297,
+     298,   311,   299,   312,   350,   351,   352,   353,   354,   355,
+     356,   357,   358,   368,   369,   370,   380,   375,   381,   382,
+     383,   384,   385,   386,   387,   388,   389,   392,   393,   394,
+     395,   400,   401,   402,   403,   404,   408,   416,   423,   428,
+     426,   440,   427,   429,   439,   433,   448,   457,   449,   453,
+     456,   459,   462,   467,   463,   473,   464,   466,   465,   474,
+     469,   468,   470,   475,   471,   477,   485,   472,   488,   476,
+     482,   480,   478,   479,   486,   481,   494,   496,   502,   508,
+     484,   493,   483,   510,   512,   515,   500,   497,   498,   499,
+     501,   503,   507,   521,   525,   528,   513,   530,   522,   532,
+     533,   534,   537,   538,   539,   541,   542,   543,   523,   540,
+     524,   544,   545,   546,   551,   526,   555,   547,   527,   556,
+     529,   559,   557,   531,   561,   558,   560,   563,   583,   585,
+     609,   610,   612,   614,   622,   548,   324,   629,   630,   631,
+     632,   633,   634,   637,   638,   549,   642,   647,   550,   554,
+     552,   578,   553,   568,   562,   564,   579,   580,   648,   584,
+     655,   661,   586,   667,   587,   588,   591,   594,   598,   668,
+     611,   606,   670,   607,   671,   672,   673,   608,   678,   685,
+     697,   698,   613,   615,   627,   635,   636,   639,   699,   640,
+     702,   641,   703,   664,   656,   709,   713,   657,   724,   658,
+     659,   662,   726,   714,   715,   727,   663,   729,   730,   732,
+       0,   674,   665,   736,   666,     0,     0,     0,     0,   675,
+     686,   677,   687,     0,     0,     0,     0,     0,   688,     0,
+       0,     0,   689,     0,     0,     0,   690,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   691,   692,     0,
+       0,   693,   694,     0,   695,     0,     0,   696,     0,   710,
+     711,   712,   716,   717,     0,   718,   719,     0,   720,   721,
+     722,   723,     0,     0,     0,   725
+};
+
+static const yytype_int16 yycheck[] =
+{
+      39,    85,    41,    42,    52,    53,    88,    89,     3,     3,
+       3,     3,    94,     3,     4,     5,     6,     7,     8,     9,
+      10,     3,     4,     5,     6,     7,     8,     9,    10,    19,
+       3,     3,     3,     3,     3,     3,     3,    19,     3,    29,
+      29,     3,   247,     5,     6,    93,    85,    29,    19,    88,
+      89,    90,    11,    29,    93,    94,     3,     4,     5,     6,
+       7,     8,     9,    10,   269,    29,    11,    11,    15,    16,
+      17,    18,    19,    20,    21,     3,     4,     5,     6,     7,
+       8,     9,    10,   127,     4,     5,     6,     7,     8,     9,
+      10,    19,    29,   127,    29,    15,    16,    17,    18,    19,
+      20,    21,    29,   127,    11,    12,    13,    14,    11,    12,
+      29,    29,    11,    12,    13,    14,     5,     6,     5,     6,
+      19,     5,     6,    11,   122,   123,   121,   121,   121,   121,
+      29,    19,   122,   123,   123,    23,    12,    13,    14,   121,
+      29,    29,    29,    19,   127,    29,   122,    23,   121,   121,
+     121,   121,   121,   121,   121,   239,   121,   239,   122,   123,
+      11,    11,    12,   122,     3,     4,     5,     6,   127,    12,
+      13,    14,    23,     5,     6,   122,   121,   121,    11,    12,
+      19,    12,    13,    14,   268,   122,   270,   122,   123,   127,
+      29,   127,    23,   121,   276,   122,   123,    29,   123,   238,
+     239,   121,    19,   122,   122,   244,   245,     4,   247,    11,
+      12,    13,    14,   252,   296,   122,   120,    19,   120,   123,
+     127,   123,   121,    12,    13,    14,   274,    29,     4,   268,
+      24,   270,    12,   121,    23,   274,    11,   276,     3,    11,
+      12,    13,    14,   122,   123,   121,     0,    19,     5,     6,
+      30,    23,   122,   123,     3,    12,     3,   296,    11,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+       3,     4,     5,     6,     7,     8,     9,    10,     3,     3,
+       4,     5,     6,     5,     6,     3,    19,   124,   125,     3,
+      12,    25,    26,    27,    28,    19,    29,    15,    16,    17,
+      18,    19,    20,    21,     3,    29,    24,     5,     6,   124,
+     125,    29,   124,   125,    12,     3,    15,    16,    17,    18,
+      19,    20,    21,     3,    11,    24,     5,     6,   124,   125,
+      29,   124,   125,    12,     3,    15,    16,    17,    18,    19,
+      20,    21,     3,    24,    11,    12,    13,    14,   122,    29,
+      17,   124,   125,    29,    15,    16,    17,    18,    19,    20,
+      21,     3,   128,    11,    12,    13,    14,    29,    29,    17,
+     122,   123,    29,    15,    16,    17,    18,    19,    20,    21,
+       4,     5,     6,     7,     8,     9,    10,    29,    29,    12,
+      13,    14,    12,    13,    14,    19,   122,   123,    13,    14,
+      23,   122,   123,    23,    29,    29,   122,   124,   125,   124,
+     125,   124,   125,   124,   125,   124,   125,   124,   125,   124,
+     125,   124,   125,   124,   125,    29,    29,   124,   125,   120,
+     120,    29,   128,   122,   120,   120,   128,   120,   120,   123,
+      29,    14,   120,   120,    29,   120,   120,   120,   120,   120,
+     120,    29,   120,    29,   120,   120,   120,   120,    29,    29,
+     120,   120,   120,    14,   120,   120,   120,   120,   120,   120,
+     120,    29,    29,    29,    29,    29,    29,   126,   123,   126,
+     126,    29,   126,   126,   122,   120,   126,   126,   124,   126,
+     123,   122,   126,   120,    29,    29,    29,    29,    29,    29,
+      29,    29,    29,   120,    29,     3,    29,   121,    29,    14,
+      29,    29,    29,    29,    14,    29,    29,   125,    29,    14,
+      29,    29,    14,    29,   123,    29,    29,   124,    29,   125,
+      29,   124,    29,    29,   120,    29,    29,   120,   122,    29,
+     121,    29,    29,   120,   126,    29,   126,   126,   123,    14,
+     124,   120,   120,    29,   126,   120,    14,   124,    29,   125,
+     120,   123,   126,   126,   123,   126,    29,    29,    29,    29,
+     120,   120,   124,    29,    29,    29,   120,   124,   124,   124,
+     120,   120,   120,    29,    11,    29,   123,    29,   124,    29,
+      29,    29,    29,    14,    29,    29,    14,    29,   124,   121,
+     124,    29,    14,    29,    29,   120,    29,   127,   120,    24,
+     120,    14,    29,   120,    24,    29,    29,    24,     3,     3,
+      11,    11,    11,    11,    29,   127,   245,    29,    29,    29,
+      29,    29,    29,    29,    29,   126,    29,    29,   127,   124,
+     126,   120,   125,   124,   126,   125,   120,   120,    29,   124,
+      29,    29,   124,    29,   124,   124,   124,   124,   124,    29,
+     124,   120,    29,   120,    11,    11,    11,   120,    29,    29,
+      29,    29,   124,   124,   124,   124,   124,   124,    29,   124,
+       3,   124,     3,   124,   120,     4,    11,   120,    29,   120,
+     120,   120,    29,    11,    11,    24,   120,    29,    29,    29,
+      -1,   120,   124,    29,   124,    -1,    -1,    -1,    -1,   120,
+     126,   120,   120,    -1,    -1,    -1,    -1,    -1,   124,    -1,
+      -1,    -1,   126,    -1,    -1,    -1,   120,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   124,   124,    -1,
+      -1,   124,   124,    -1,   124,    -1,    -1,   124,    -1,   124,
+     124,   124,   124,   124,    -1,   124,   124,    -1,   124,   124,
+     124,   124,    -1,    -1,    -1,   127
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,    12,    30,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   130,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   127,   127,   127,   127,   127,
+      11,   122,   127,   127,    11,    12,    13,    14,   122,   127,
+     166,   123,     3,     4,     5,     6,    19,    29,   163,     4,
+       3,     4,     5,     6,     7,     8,     9,    10,    15,    16,
+      17,    18,    19,    20,    21,   122,   163,   165,   168,   163,
+      11,    12,    13,    14,    23,   163,   167,     4,    24,    17,
+     166,    17,   166,     3,     3,    11,    12,     3,     3,     3,
+      11,    25,    26,    27,    28,     3,     5,     6,    11,    12,
+       3,    11,     3,    11,     0,     3,    29,   163,   165,    11,
+      23,    24,     3,    19,    29,   163,   168,     3,    24,    29,
+     163,   168,     3,     4,     5,     6,    29,   163,    11,    12,
+       3,     4,     5,     6,     7,     8,     9,    10,    19,    29,
+     122,   123,   164,    29,   163,   166,     3,    24,    29,   163,
+     168,    29,    29,    29,    29,    29,    29,   122,    29,   122,
+      29,    29,   122,   122,    29,   128,   139,   122,   120,   120,
+     128,    29,    29,   123,   120,   120,   123,   120,   120,    29,
+     122,   123,   120,   120,   120,   120,   120,   120,   120,   120,
+     120,   120,   120,   120,   120,   120,   120,   120,   120,   120,
+     120,   131,   122,   120,   120,   120,   120,   126,   126,   123,
+     126,   126,   126,   122,   123,   126,   138,   122,   128,   140,
+      29,    14,   141,   122,   123,   126,   120,   126,   123,   126,
+      29,    29,    29,    29,   124,    29,   163,   121,   163,   165,
+     168,   122,   120,   120,   123,    12,    13,    14,    23,     3,
+     121,   163,   121,   163,   164,    14,    23,   121,   163,   167,
+      11,   121,   120,   123,    29,    12,    13,    14,    23,    11,
+      23,    29,   121,   163,    29,    29,    29,    29,    29,    29,
+      29,    29,    29,    29,    29,    29,    29,    29,    29,    29,
+     163,   165,   167,     3,    29,   121,   163,   165,   120,    29,
+       3,    29,   121,   163,   166,   121,     3,    29,   163,   168,
+      29,    29,    14,    29,    29,    29,    29,    14,    29,    29,
+     122,   123,   125,    29,    14,    29,     3,    29,   163,   168,
+      29,    14,    29,   123,    29,    29,   122,   123,    29,     3,
+     121,     3,   121,     5,     6,    12,   124,   124,   125,   124,
+     125,   124,   125,    29,    29,   122,    29,    29,   125,    29,
+      29,   122,   123,    29,    11,   121,     5,     6,    12,   120,
+     124,   124,   125,   124,   125,   124,   125,   162,    29,   122,
+     122,   123,   132,    29,   122,   123,   121,   120,   133,    29,
+     122,   123,    29,   126,   126,   123,   126,   120,   120,   124,
+     120,   126,   124,    29,    14,    29,   125,   120,   126,   126,
+     123,   126,   120,   124,   120,    14,   123,   144,    29,    12,
+      13,    14,    23,   120,    29,   143,    29,   124,   124,   124,
+     120,   120,    29,   120,     5,     6,    29,   120,    29,   145,
+      29,   147,    29,   123,   156,    29,    12,    13,    14,    23,
+     157,    29,   124,   124,   124,    11,   120,   120,    29,   120,
+      29,   120,    29,    29,    29,    13,    14,    29,    14,    29,
+     121,    29,    14,    29,    29,    14,    29,   127,   127,   126,
+     127,    29,   126,   125,   124,    29,    24,    29,    29,    14,
+      29,    24,   126,    24,   125,     5,     6,    12,   124,   124,
+     125,   124,   125,   124,   125,     3,   121,   142,   120,   120,
+     120,     3,   121,     3,   124,     3,   124,   124,   124,     3,
+     121,   124,   146,   148,   124,     5,     6,    12,   124,   124,
+     125,   124,   125,   124,   125,   155,   120,   120,   120,    11,
+      11,   124,    11,   124,    11,   124,   124,   125,   124,   125,
+     124,   125,    29,   124,   125,   136,   135,   124,   134,    29,
+      29,    29,    29,    29,    29,   124,   124,    29,    29,   124,
+     124,   124,    29,     5,     6,    29,   152,    29,    29,     3,
+     121,     3,   121,     3,   121,    29,   120,   120,   120,   120,
+     154,    29,   120,   120,   124,   124,   124,    29,    29,   159,
+      29,    11,    11,    11,   120,   120,   161,   120,    29,     5,
+       6,    29,     5,     6,    29,    29,   126,   120,   124,   126,
+     120,   124,   124,   124,   124,   124,   124,    29,    29,    29,
+       3,   121,     3,     3,     3,   121,   150,     3,   121,     4,
+     124,   124,   124,    11,    11,    11,   124,   124,   124,   124,
+     124,   124,   124,   124,    29,   127,    29,    24,   151,    29,
+      29,   153,    29,   158,   160,   137,    29,   149
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+#line 182 "rl78-parse.y"
+    { as_bad (_("Unknown opcode: %s"), rl78_init_start); }
+    break;
+
+  case 3:
+#line 203 "rl78-parse.y"
+    { B1 (0x0c|(yyvsp[(1) - (5)].regno)); O1 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 4:
+#line 205 "rl78-parse.y"
+    {SA((yyvsp[(2) - (2)].exp))}
+    break;
+
+  case 5:
+#line 206 "rl78-parse.y"
+    { B1 (0x0a|(yyvsp[(1) - (6)].regno)); O1 ((yyvsp[(2) - (6)].exp)); O1 ((yyvsp[(6) - (6)].exp)); }
+    break;
+
+  case 6:
+#line 209 "rl78-parse.y"
+    { B2 (0x61, 0x01|(yyvsp[(1) - (4)].regno)); }
+    break;
+
+  case 7:
+#line 212 "rl78-parse.y"
+    { B2 (0x61, 0x08|(yyvsp[(1) - (4)].regno)); F ((yyvsp[(4) - (4)].regno), 13, 3); }
+    break;
+
+  case 8:
+#line 215 "rl78-parse.y"
+    { B2 (0x61, 0x00|(yyvsp[(1) - (4)].regno)); F ((yyvsp[(2) - (4)].regno), 13, 3); }
+    break;
+
+  case 9:
+#line 217 "rl78-parse.y"
+    {SA((yyvsp[(4) - (4)].exp))}
+    break;
+
+  case 10:
+#line 218 "rl78-parse.y"
+    { B1 (0x0b|(yyvsp[(1) - (5)].regno)); O1 ((yyvsp[(4) - (5)].exp)); }
+    break;
+
+  case 11:
+#line 221 "rl78-parse.y"
+    { B1 (0x0f|(yyvsp[(1) - (6)].regno)); O2 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 12:
+#line 224 "rl78-parse.y"
+    { B1 (0x0d|(yyvsp[(1) - (7)].regno)); }
+    break;
+
+  case 13:
+#line 227 "rl78-parse.y"
+    { B1 (0x0e|(yyvsp[(1) - (9)].regno)); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 14:
+#line 230 "rl78-parse.y"
+    { B2 (0x61, 0x80|(yyvsp[(1) - (9)].regno)); }
+    break;
+
+  case 15:
+#line 233 "rl78-parse.y"
+    { B2 (0x61, 0x82|(yyvsp[(1) - (9)].regno)); }
+    break;
+
+  case 16:
+#line 238 "rl78-parse.y"
+    { if ((yyvsp[(1) - (7)].regno) != 0x40)
+	      { rl78_error ("Only CMP takes these operands"); }
+	    else
+	      { B1 (0x00|(yyvsp[(1) - (7)].regno)); O2 ((yyvsp[(4) - (7)].exp)); O1 ((yyvsp[(7) - (7)].exp)); rl78_linkrelax_addr16 (); }
+	  }
+    break;
+
+  case 17:
+#line 247 "rl78-parse.y"
+    { B1 (0x04|(yyvsp[(1) - (5)].regno)); O2 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 18:
+#line 250 "rl78-parse.y"
+    { B1 (0x01|(yyvsp[(1) - (4)].regno)); F ((yyvsp[(4) - (4)].regno), 5, 2); }
+    break;
+
+  case 19:
+#line 252 "rl78-parse.y"
+    {SA((yyvsp[(4) - (4)].exp))}
+    break;
+
+  case 20:
+#line 253 "rl78-parse.y"
+    { B1 (0x06|(yyvsp[(1) - (5)].regno)); O1 ((yyvsp[(4) - (5)].exp)); }
+    break;
+
+  case 21:
+#line 256 "rl78-parse.y"
+    { B1 (0x02|(yyvsp[(1) - (6)].regno)); O2 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 22:
+#line 259 "rl78-parse.y"
+    { B2 (0x61, 0x09|(yyvsp[(1) - (9)].regno)); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 23:
+#line 262 "rl78-parse.y"
+    { B4 (0x61, 0x09|(yyvsp[(1) - (7)].regno), 0, 0); }
+    break;
+
+  case 24:
+#line 265 "rl78-parse.y"
+    { B1 ((yyvsp[(1) - (5)].regno) ? 0x20 : 0x10); O1 ((yyvsp[(5) - (5)].exp));
+	    if ((yyvsp[(1) - (5)].regno) == 0x40)
+	      rl78_error ("CMPW SP,#imm not allowed");
+	  }
+    break;
+
+  case 25:
+#line 272 "rl78-parse.y"
+    {Bit((yyvsp[(6) - (6)].exp))}
+    break;
+
+  case 26:
+#line 273 "rl78-parse.y"
+    { B3 (0x71, 0x08|(yyvsp[(1) - (7)].regno), (yyvsp[(4) - (7)].regno)); FE ((yyvsp[(6) - (7)].exp), 9, 3); }
+    break;
+
+  case 27:
+#line 275 "rl78-parse.y"
+    {Bit((yyvsp[(6) - (6)].exp))}
+    break;
+
+  case 28:
+#line 276 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(4) - (7)].exp)))
+	      { B2 (0x71, 0x08|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(6) - (7)].exp), 9, 3); O1 ((yyvsp[(4) - (7)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(4) - (7)].exp)))
+	      { B2 (0x71, 0x00|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(6) - (7)].exp), 9, 3); O1 ((yyvsp[(4) - (7)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 29:
+#line 284 "rl78-parse.y"
+    {Bit((yyvsp[(6) - (6)].exp))}
+    break;
+
+  case 30:
+#line 285 "rl78-parse.y"
+    { B2 (0x71, 0x88|(yyvsp[(1) - (7)].regno));  FE ((yyvsp[(6) - (7)].exp), 9, 3); }
+    break;
+
+  case 31:
+#line 287 "rl78-parse.y"
+    {Bit((yyvsp[(9) - (9)].exp))}
+    break;
+
+  case 32:
+#line 288 "rl78-parse.y"
+    { B2 (0x71, 0x80|(yyvsp[(1) - (10)].regno));  FE ((yyvsp[(9) - (10)].exp), 9, 3); }
+    break;
+
+  case 33:
+#line 293 "rl78-parse.y"
+    { B1 (0xdc); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 34:
+#line 296 "rl78-parse.y"
+    { B1 (0xde); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 35:
+#line 299 "rl78-parse.y"
+    { B1 (0xdd); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 36:
+#line 302 "rl78-parse.y"
+    { B1 (0xdf); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 37:
+#line 305 "rl78-parse.y"
+    { B2 (0x61, 0xc3); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 38:
+#line 308 "rl78-parse.y"
+    { B2 (0x61, 0xd3); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 39:
+#line 313 "rl78-parse.y"
+    { B3 (0x31, 0x80|(yyvsp[(1) - (7)].regno), (yyvsp[(2) - (7)].regno)); FE ((yyvsp[(4) - (7)].exp), 9, 3); PC1 ((yyvsp[(7) - (7)].exp)); }
+    break;
+
+  case 40:
+#line 316 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(2) - (7)].exp)))
+	      { B2 (0x31, 0x80|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(4) - (7)].exp), 9, 3); O1 ((yyvsp[(2) - (7)].exp)); PC1 ((yyvsp[(7) - (7)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(2) - (7)].exp)))
+	      { B2 (0x31, 0x00|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(4) - (7)].exp), 9, 3); O1 ((yyvsp[(2) - (7)].exp)); PC1 ((yyvsp[(7) - (7)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 41:
+#line 325 "rl78-parse.y"
+    { B2 (0x31, 0x01|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(4) - (7)].exp), 9, 3); PC1 ((yyvsp[(7) - (7)].exp)); }
+    break;
+
+  case 42:
+#line 328 "rl78-parse.y"
+    { B2 (0x31, 0x81|(yyvsp[(1) - (10)].regno)); FE ((yyvsp[(7) - (10)].exp), 9, 3); PC1 ((yyvsp[(10) - (10)].exp)); }
+    break;
+
+  case 43:
+#line 333 "rl78-parse.y"
+    { B2 (0x61, 0xcb); }
+    break;
+
+  case 44:
+#line 336 "rl78-parse.y"
+    { B1 (0xef); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 45:
+#line 339 "rl78-parse.y"
+    { B1 (0xee); PC2 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_branch (); }
+    break;
+
+  case 46:
+#line 342 "rl78-parse.y"
+    { B1 (0xed); O2 ((yyvsp[(3) - (3)].exp)); rl78_linkrelax_branch (); }
+    break;
+
+  case 47:
+#line 345 "rl78-parse.y"
+    { B1 (0xec); O3 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_branch (); }
+    break;
+
+  case 48:
+#line 350 "rl78-parse.y"
+    { B2 (0x61, 0xcc); }
+    break;
+
+  case 49:
+#line 353 "rl78-parse.y"
+    { B1 (0xff); }
+    break;
+
+  case 50:
+#line 358 "rl78-parse.y"
+    { B2 (0x61, 0xca); F ((yyvsp[(2) - (2)].regno), 10, 2); }
+    break;
+
+  case 51:
+#line 361 "rl78-parse.y"
+    { B1 (0xfe); PC2 ((yyvsp[(4) - (4)].exp)); }
+    break;
+
+  case 52:
+#line 364 "rl78-parse.y"
+    { B1 (0xfd); O2 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 53:
+#line 367 "rl78-parse.y"
+    { B1 (0xfc); O3 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_branch (); }
+    break;
+
+  case 54:
+#line 370 "rl78-parse.y"
+    { if ((yyvsp[(3) - (4)].exp).X_op != O_constant)
+	      rl78_error ("CALLT requires a numeric address");
+	    else
+	      {
+	        int i = (yyvsp[(3) - (4)].exp).X_add_number;
+		if (i < 0x80 || i > 0xbe)
+		  rl78_error ("CALLT address not 0x80..0xbe");
+		else if (i & 1)
+		  rl78_error ("CALLT address not even");
+		else
+		  {
+		    B2 (0x61, 0x84);
+	    	    F ((i >> 1) & 7, 9, 3);
+	    	    F ((i >> 4) & 7, 14, 2);
+		  }
+	      }
+	  }
+    break;
+
+  case 55:
+#line 391 "rl78-parse.y"
+    { B2 (0x71, (yyvsp[(1) - (2)].regno) ? 0x88 : 0x80); }
+    break;
+
+  case 56:
+#line 394 "rl78-parse.y"
+    { B3 (0x71, 0x0a|(yyvsp[(1) - (4)].regno), (yyvsp[(2) - (4)].regno)); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+    break;
+
+  case 57:
+#line 397 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(2) - (4)].exp)))
+	      { B2 (0x71, 0x0a|(yyvsp[(1) - (4)].regno)); FE ((yyvsp[(4) - (4)].exp), 9, 3); O1 ((yyvsp[(2) - (4)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(2) - (4)].exp)))
+	      { B2 (0x71, 0x02|(yyvsp[(1) - (4)].regno)); FE ((yyvsp[(4) - (4)].exp), 9, 3); O1 ((yyvsp[(2) - (4)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 58:
+#line 406 "rl78-parse.y"
+    { B2 (0x71, 0x8a|(yyvsp[(1) - (4)].regno));  FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+    break;
+
+  case 59:
+#line 409 "rl78-parse.y"
+    { B2 (0x71, 0x00+(yyvsp[(1) - (6)].regno)*0x08); FE ((yyvsp[(6) - (6)].exp), 9, 3); O2 ((yyvsp[(4) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 60:
+#line 412 "rl78-parse.y"
+    { B2 (0x71, 0x82|(yyvsp[(1) - (7)].regno)); FE ((yyvsp[(7) - (7)].exp), 9, 3); }
+    break;
+
+  case 61:
+#line 417 "rl78-parse.y"
+    { B1 (0xe1|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 62:
+#line 419 "rl78-parse.y"
+    { B1 (0xe0|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 63:
+#line 421 "rl78-parse.y"
+    { B1 (0xe3|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 64:
+#line 423 "rl78-parse.y"
+    { B1 (0xe2|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 65:
+#line 425 "rl78-parse.y"
+    {SA((yyvsp[(2) - (2)].exp))}
+    break;
+
+  case 66:
+#line 426 "rl78-parse.y"
+    { B1 (0xe4|(yyvsp[(1) - (3)].regno)); O1 ((yyvsp[(2) - (3)].exp)); }
+    break;
+
+  case 67:
+#line 429 "rl78-parse.y"
+    { B1 (0xe5|(yyvsp[(1) - (4)].regno)); O2 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 68:
+#line 434 "rl78-parse.y"
+    { B1 (0xe6|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 69:
+#line 436 "rl78-parse.y"
+    { B1 (0xe7|(yyvsp[(1) - (2)].regno)); }
+    break;
+
+  case 70:
+#line 441 "rl78-parse.y"
+    { B1 (0xd1); }
+    break;
+
+  case 71:
+#line 444 "rl78-parse.y"
+    { B1 (0xd0); }
+    break;
+
+  case 72:
+#line 447 "rl78-parse.y"
+    { B1 (0xd3); }
+    break;
+
+  case 73:
+#line 450 "rl78-parse.y"
+    { B1 (0xd2); }
+    break;
+
+  case 74:
+#line 452 "rl78-parse.y"
+    {SA((yyvsp[(2) - (2)].exp))}
+    break;
+
+  case 75:
+#line 453 "rl78-parse.y"
+    { B1 (0xd4); O1 ((yyvsp[(2) - (3)].exp)); }
+    break;
+
+  case 76:
+#line 456 "rl78-parse.y"
+    { B1 (0xd5); O2 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 77:
+#line 461 "rl78-parse.y"
+    { B2 (0x61, 0xde); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 78:
+#line 466 "rl78-parse.y"
+    { B1 (0x80|(yyvsp[(1) - (2)].regno)); F ((yyvsp[(2) - (2)].regno), 5, 3); }
+    break;
+
+  case 79:
+#line 468 "rl78-parse.y"
+    {SA((yyvsp[(2) - (2)].exp))}
+    break;
+
+  case 80:
+#line 469 "rl78-parse.y"
+    { B1 (0xa4|(yyvsp[(1) - (3)].regno)); O1 ((yyvsp[(2) - (3)].exp)); }
+    break;
+
+  case 81:
+#line 471 "rl78-parse.y"
+    { B1 (0xa0|(yyvsp[(1) - (3)].regno)); O2 ((yyvsp[(3) - (3)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 82:
+#line 473 "rl78-parse.y"
+    { B2 (0x11, 0xa0|(yyvsp[(1) - (5)].regno)); O2 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 83:
+#line 475 "rl78-parse.y"
+    { B2 (0x61, 0x59+(yyvsp[(1) - (6)].regno)); O1 ((yyvsp[(5) - (6)].exp)); }
+    break;
+
+  case 84:
+#line 477 "rl78-parse.y"
+    { B3 (0x11, 0x61, 0x59+(yyvsp[(1) - (8)].regno)); O1 ((yyvsp[(7) - (8)].exp)); }
+    break;
+
+  case 85:
+#line 482 "rl78-parse.y"
+    { B1 (0xa1|(yyvsp[(1) - (2)].regno)); F ((yyvsp[(2) - (2)].regno), 5, 2); }
+    break;
+
+  case 86:
+#line 484 "rl78-parse.y"
+    {SA((yyvsp[(2) - (2)].exp))}
+    break;
+
+  case 87:
+#line 485 "rl78-parse.y"
+    { B1 (0xa6|(yyvsp[(1) - (3)].regno)); O1 ((yyvsp[(2) - (3)].exp)); }
+    break;
+
+  case 88:
+#line 488 "rl78-parse.y"
+    { B1 (0xa2|(yyvsp[(1) - (4)].regno)); O2 ((yyvsp[(4) - (4)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 89:
+#line 491 "rl78-parse.y"
+    { B2 (0x61, 0x79+(yyvsp[(1) - (7)].regno)); O1 ((yyvsp[(6) - (7)].exp)); }
+    break;
+
+  case 90:
+#line 496 "rl78-parse.y"
+    { B3 (0x71, 0x7b, 0xfa); }
+    break;
+
+  case 91:
+#line 499 "rl78-parse.y"
+    { B3 (0x71, 0x7a, 0xfa); }
+    break;
+
+  case 92:
+#line 504 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x01); }
+    break;
+
+  case 93:
+#line 507 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x02); }
+    break;
+
+  case 94:
+#line 510 "rl78-parse.y"
+    { B1 (0xd6); }
+    break;
+
+  case 95:
+#line 513 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x03); }
+    break;
+
+  case 96:
+#line 521 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x0b); }
+    break;
+
+  case 97:
+#line 524 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x05); }
+    break;
+
+  case 98:
+#line 527 "rl78-parse.y"
+    { B3 (0xce, 0xfb, 0x06); }
+    break;
+
+  case 99:
+#line 532 "rl78-parse.y"
+    { B2 (0x61, 0xed); }
+    break;
+
+  case 100:
+#line 540 "rl78-parse.y"
+    { B1 (0x51); O1 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 101:
+#line 542 "rl78-parse.y"
+    { B1 (0x50); F((yyvsp[(2) - (5)].regno), 5, 3); O1 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 102:
+#line 545 "rl78-parse.y"
+    { if ((yyvsp[(2) - (5)].regno) != 0xfd)
+	      { B2 (0xce, (yyvsp[(2) - (5)].regno)); O1 ((yyvsp[(5) - (5)].exp)); }
+	    else
+	      { B1 (0x41); O1 ((yyvsp[(5) - (5)].exp)); }
+	  }
+    break;
+
+  case 103:
+#line 551 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 104:
+#line 552 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(3) - (7)].exp)))
+	      { B1 (0xce); O1 ((yyvsp[(3) - (7)].exp)); O1 ((yyvsp[(6) - (7)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(3) - (7)].exp)))
+	      { B1 (0xcd); O1 ((yyvsp[(3) - (7)].exp)); O1 ((yyvsp[(6) - (7)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 105:
+#line 561 "rl78-parse.y"
+    { B1 (0xcf); O2 ((yyvsp[(3) - (6)].exp)); O1 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 106:
+#line 564 "rl78-parse.y"
+    { B2 (0x11, 0xcf); O2 ((yyvsp[(5) - (8)].exp)); O1 ((yyvsp[(8) - (8)].exp)); }
+    break;
+
+  case 107:
+#line 567 "rl78-parse.y"
+    { B1 (0x70); F ((yyvsp[(2) - (4)].regno), 5, 3); }
+    break;
+
+  case 108:
+#line 570 "rl78-parse.y"
+    { B1 (0x60); F ((yyvsp[(4) - (4)].regno), 5, 3); }
+    break;
+
+  case 109:
+#line 572 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 110:
+#line 573 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(3) - (6)].exp)))
+	      { B1 (0x9e); O1 ((yyvsp[(3) - (6)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(3) - (6)].exp)))
+	      { B1 (0x9d); O1 ((yyvsp[(3) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 111:
+#line 582 "rl78-parse.y"
+    { B1 (0x8f); O2 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 112:
+#line 585 "rl78-parse.y"
+    { B1 (0x9f); O2 ((yyvsp[(3) - (5)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 113:
+#line 588 "rl78-parse.y"
+    { B2 (0x11, 0x9f); O2 ((yyvsp[(5) - (7)].exp)); }
+    break;
+
+  case 114:
+#line 591 "rl78-parse.y"
+    { B1 (0xc9|reg_xbc((yyvsp[(2) - (6)].regno))); O2 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 115:
+#line 593 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 116:
+#line 594 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(5) - (6)].exp)))
+	      { B1 (0x8d); O1 ((yyvsp[(5) - (6)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(5) - (6)].exp)))
+	      { B1 (0x8e); O1 ((yyvsp[(5) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 117:
+#line 602 "rl78-parse.y"
+    {SA((yyvsp[(5) - (5)].exp))}
+    break;
+
+  case 118:
+#line 602 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 119:
+#line 603 "rl78-parse.y"
+    { B1 (0xc8|reg_xbc((yyvsp[(2) - (7)].regno))); O1 ((yyvsp[(5) - (7)].exp)); }
+    break;
+
+  case 120:
+#line 606 "rl78-parse.y"
+    { B2 (0x8e, (yyvsp[(4) - (4)].regno)); }
+    break;
+
+  case 121:
+#line 609 "rl78-parse.y"
+    { if ((yyvsp[(4) - (4)].regno) != 1)
+	      rl78_error ("Only A allowed here");
+	    else
+	      { B2 (0x9e, (yyvsp[(2) - (4)].regno)); }
+	  }
+    break;
+
+  case 122:
+#line 615 "rl78-parse.y"
+    {SA((yyvsp[(5) - (5)].exp))}
+    break;
+
+  case 123:
+#line 615 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 124:
+#line 616 "rl78-parse.y"
+    { if ((yyvsp[(2) - (7)].regno) != 0xfd)
+	      rl78_error ("Only ES allowed here");
+	    else
+	      { B2 (0x61, 0xb8); O1 ((yyvsp[(5) - (7)].exp)); }
+	  }
+    break;
+
+  case 125:
+#line 623 "rl78-parse.y"
+    { B1 (0x89); }
+    break;
+
+  case 126:
+#line 626 "rl78-parse.y"
+    { B1 (0x99); }
+    break;
+
+  case 127:
+#line 629 "rl78-parse.y"
+    { B1 (0xca); O1 ((yyvsp[(6) - (10)].exp)); O1 ((yyvsp[(10) - (10)].exp)); }
+    break;
+
+  case 128:
+#line 632 "rl78-parse.y"
+    { B1 (0x8a); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 129:
+#line 635 "rl78-parse.y"
+    { B1 (0x9a); O1 ((yyvsp[(6) - (9)].exp)); }
+    break;
+
+  case 130:
+#line 638 "rl78-parse.y"
+    { B1 (0x8b); }
+    break;
+
+  case 131:
+#line 641 "rl78-parse.y"
+    { B1 (0x9b); }
+    break;
+
+  case 132:
+#line 644 "rl78-parse.y"
+    { B1 (0xcc); O1 ((yyvsp[(6) - (10)].exp)); O1 ((yyvsp[(10) - (10)].exp)); }
+    break;
+
+  case 133:
+#line 647 "rl78-parse.y"
+    { B1 (0x8c); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 134:
+#line 650 "rl78-parse.y"
+    { B1 (0x9c); O1 ((yyvsp[(6) - (9)].exp)); }
+    break;
+
+  case 135:
+#line 653 "rl78-parse.y"
+    { B2 (0x61, 0xc9); }
+    break;
+
+  case 136:
+#line 656 "rl78-parse.y"
+    { B2 (0x61, 0xd9); }
+    break;
+
+  case 137:
+#line 659 "rl78-parse.y"
+    { B2 (0x61, 0xe9); }
+    break;
+
+  case 138:
+#line 662 "rl78-parse.y"
+    { B2 (0x61, 0xf9); }
+    break;
+
+  case 139:
+#line 665 "rl78-parse.y"
+    { B1 (0x19); O2 ((yyvsp[(3) - (9)].exp)); O1 ((yyvsp[(9) - (9)].exp)); }
+    break;
+
+  case 140:
+#line 668 "rl78-parse.y"
+    { B1 (0x09); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 141:
+#line 671 "rl78-parse.y"
+    { B1 (0x18); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 142:
+#line 674 "rl78-parse.y"
+    { B1 (0x38); O2 ((yyvsp[(3) - (9)].exp)); O1 ((yyvsp[(9) - (9)].exp)); }
+    break;
+
+  case 143:
+#line 677 "rl78-parse.y"
+    { B1 (0x29); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 144:
+#line 680 "rl78-parse.y"
+    { B1 (0x28); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 145:
+#line 683 "rl78-parse.y"
+    { B1 (0x39); O2 ((yyvsp[(3) - (9)].exp)); O1 ((yyvsp[(9) - (9)].exp)); }
+    break;
+
+  case 146:
+#line 686 "rl78-parse.y"
+    { B3 (0x39, 0, 0); O1 ((yyvsp[(8) - (8)].exp)); }
+    break;
+
+  case 147:
+#line 689 "rl78-parse.y"
+    { B1 (0x49); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 148:
+#line 692 "rl78-parse.y"
+    { B3 (0x49, 0, 0); }
+    break;
+
+  case 149:
+#line 695 "rl78-parse.y"
+    { B1 (0x48); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 150:
+#line 698 "rl78-parse.y"
+    { B3 (0x48, 0, 0); }
+    break;
+
+  case 151:
+#line 700 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 152:
+#line 701 "rl78-parse.y"
+    { B1 (0xc8); O1 ((yyvsp[(6) - (11)].exp)); O1 ((yyvsp[(10) - (11)].exp)); }
+    break;
+
+  case 153:
+#line 703 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 154:
+#line 704 "rl78-parse.y"
+    { B2 (0xc8, 0); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 155:
+#line 706 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 156:
+#line 707 "rl78-parse.y"
+    { B1 (0x88); O1 ((yyvsp[(8) - (10)].exp)); }
+    break;
+
+  case 157:
+#line 709 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 158:
+#line 710 "rl78-parse.y"
+    { B2 (0x88, 0); }
+    break;
+
+  case 159:
+#line 712 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 160:
+#line 713 "rl78-parse.y"
+    { B1 (0x98); O1 ((yyvsp[(6) - (10)].exp)); }
+    break;
+
+  case 161:
+#line 715 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 162:
+#line 716 "rl78-parse.y"
+    { B2 (0x98, 0); }
+    break;
+
+  case 163:
+#line 721 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(4) - (6)].exp)))
+	      { B2 (0x71, 0x04); FE ((yyvsp[(6) - (6)].exp), 9, 3); O1 ((yyvsp[(4) - (6)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(4) - (6)].exp)))
+	      { B2 (0x71, 0x0c); FE ((yyvsp[(6) - (6)].exp), 9, 3); O1 ((yyvsp[(4) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 164:
+#line 730 "rl78-parse.y"
+    { B2 (0x71, 0x8c); FE ((yyvsp[(6) - (6)].exp), 9, 3); }
+    break;
+
+  case 165:
+#line 733 "rl78-parse.y"
+    { B3 (0x71, 0x0c, (yyvsp[(4) - (6)].regno)); FE ((yyvsp[(6) - (6)].exp), 9, 3); }
+    break;
+
+  case 166:
+#line 736 "rl78-parse.y"
+    { B2 (0x71, 0x84); FE ((yyvsp[(9) - (9)].exp), 9, 3); }
+    break;
+
+  case 167:
+#line 739 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(2) - (6)].exp)))
+	      { B2 (0x71, 0x01); FE ((yyvsp[(4) - (6)].exp), 9, 3); O1 ((yyvsp[(2) - (6)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(2) - (6)].exp)))
+	      { B2 (0x71, 0x09); FE ((yyvsp[(4) - (6)].exp), 9, 3); O1 ((yyvsp[(2) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 168:
+#line 748 "rl78-parse.y"
+    { B2 (0x71, 0x89); FE ((yyvsp[(4) - (6)].exp), 9, 3); }
+    break;
+
+  case 169:
+#line 751 "rl78-parse.y"
+    { B3 (0x71, 0x09, (yyvsp[(2) - (6)].regno)); FE ((yyvsp[(4) - (6)].exp), 9, 3); }
+    break;
+
+  case 170:
+#line 754 "rl78-parse.y"
+    { B2 (0x71, 0x81); FE ((yyvsp[(7) - (9)].exp), 9, 3); }
+    break;
+
+  case 171:
+#line 759 "rl78-parse.y"
+    { B2 (0x61, 0xce); O1 ((yyvsp[(6) - (9)].exp)); }
+    break;
+
+  case 172:
+#line 764 "rl78-parse.y"
+    { B1 (0x30); O2 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 173:
+#line 767 "rl78-parse.y"
+    { B1 (0x30); F ((yyvsp[(2) - (5)].regno), 5, 2); O2 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 174:
+#line 769 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 175:
+#line 770 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(3) - (7)].exp)))
+	      { B1 (0xc9); O1 ((yyvsp[(3) - (7)].exp)); O2 ((yyvsp[(6) - (7)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(3) - (7)].exp)))
+	      { B1 (0xcb); O1 ((yyvsp[(3) - (7)].exp)); O2 ((yyvsp[(6) - (7)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 176:
+#line 778 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 177:
+#line 779 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(5) - (6)].exp)))
+	      { B1 (0xad); O1 ((yyvsp[(5) - (6)].exp)); WA((yyvsp[(5) - (6)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(5) - (6)].exp)))
+	      { B1 (0xae); O1 ((yyvsp[(5) - (6)].exp)); WA((yyvsp[(5) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 178:
+#line 787 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 179:
+#line 788 "rl78-parse.y"
+    { if (expr_is_saddr ((yyvsp[(3) - (6)].exp)))
+	      { B1 (0xbd); O1 ((yyvsp[(3) - (6)].exp)); WA((yyvsp[(3) - (6)].exp)); }
+	    else if (expr_is_sfr ((yyvsp[(3) - (6)].exp)))
+	      { B1 (0xbe); O1 ((yyvsp[(3) - (6)].exp)); WA((yyvsp[(3) - (6)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 180:
+#line 797 "rl78-parse.y"
+    { B1 (0x11); F ((yyvsp[(4) - (4)].regno), 5, 2); }
+    break;
+
+  case 181:
+#line 800 "rl78-parse.y"
+    { B1 (0x10); F ((yyvsp[(2) - (4)].regno), 5, 2); }
+    break;
+
+  case 182:
+#line 803 "rl78-parse.y"
+    { B1 (0xaf); O2 ((yyvsp[(6) - (6)].exp)); WA((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 183:
+#line 806 "rl78-parse.y"
+    { B1 (0xbf); O2 ((yyvsp[(4) - (6)].exp)); WA((yyvsp[(4) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 184:
+#line 809 "rl78-parse.y"
+    { B1 (0xa9); }
+    break;
+
+  case 185:
+#line 812 "rl78-parse.y"
+    { B1 (0xb9); }
+    break;
+
+  case 186:
+#line 815 "rl78-parse.y"
+    { B1 (0xaa); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 187:
+#line 818 "rl78-parse.y"
+    { B1 (0xba); O1 ((yyvsp[(6) - (9)].exp)); }
+    break;
+
+  case 188:
+#line 821 "rl78-parse.y"
+    { B1 (0xab); }
+    break;
+
+  case 189:
+#line 824 "rl78-parse.y"
+    { B1 (0xbb); }
+    break;
+
+  case 190:
+#line 827 "rl78-parse.y"
+    { B1 (0xac); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 191:
+#line 830 "rl78-parse.y"
+    { B1 (0xbc); O1 ((yyvsp[(6) - (9)].exp)); }
+    break;
+
+  case 192:
+#line 833 "rl78-parse.y"
+    { B1 (0x59); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 193:
+#line 836 "rl78-parse.y"
+    { B1 (0x58); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 194:
+#line 839 "rl78-parse.y"
+    { B1 (0x69); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 195:
+#line 842 "rl78-parse.y"
+    { B1 (0x68); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 196:
+#line 845 "rl78-parse.y"
+    { B1 (0x79); O2 ((yyvsp[(5) - (8)].exp)); }
+    break;
+
+  case 197:
+#line 848 "rl78-parse.y"
+    { B3 (0x79, 0, 0); }
+    break;
+
+  case 198:
+#line 851 "rl78-parse.y"
+    { B1 (0x78); O2 ((yyvsp[(3) - (8)].exp)); }
+    break;
+
+  case 199:
+#line 854 "rl78-parse.y"
+    { B3 (0x78, 0, 0); }
+    break;
+
+  case 200:
+#line 856 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 201:
+#line 857 "rl78-parse.y"
+    { B1 (0xa8); O1 ((yyvsp[(8) - (10)].exp));  WA((yyvsp[(8) - (10)].exp));}
+    break;
+
+  case 202:
+#line 859 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 203:
+#line 860 "rl78-parse.y"
+    { B2 (0xa8, 0); }
+    break;
+
+  case 204:
+#line 862 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 205:
+#line 863 "rl78-parse.y"
+    { B1 (0xb8); O1 ((yyvsp[(6) - (10)].exp)); WA((yyvsp[(6) - (10)].exp)); }
+    break;
+
+  case 206:
+#line 865 "rl78-parse.y"
+    {NOT_ES}
+    break;
+
+  case 207:
+#line 866 "rl78-parse.y"
+    { B2 (0xb8, 0); }
+    break;
+
+  case 208:
+#line 868 "rl78-parse.y"
+    {SA((yyvsp[(4) - (4)].exp))}
+    break;
+
+  case 209:
+#line 869 "rl78-parse.y"
+    { B1 (0xca); F ((yyvsp[(2) - (5)].regno), 2, 2); O1 ((yyvsp[(4) - (5)].exp)); WA((yyvsp[(4) - (5)].exp)); }
+    break;
+
+  case 210:
+#line 872 "rl78-parse.y"
+    { B1 (0xcb); F ((yyvsp[(2) - (6)].regno), 2, 2); O2 ((yyvsp[(6) - (6)].exp)); WA((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 211:
+#line 875 "rl78-parse.y"
+    { B2 (0xcb, 0xf8); O2 ((yyvsp[(5) - (5)].exp)); }
+    break;
+
+  case 212:
+#line 878 "rl78-parse.y"
+    { B2 (0xbe, 0xf8); }
+    break;
+
+  case 213:
+#line 881 "rl78-parse.y"
+    { B2 (0xae, 0xf8); }
+    break;
+
+  case 214:
+#line 884 "rl78-parse.y"
+    { B3 (0xcb, 0xf8, 0xff); F ((yyvsp[(2) - (4)].regno), 2, 2); }
+    break;
+
+  case 215:
+#line 889 "rl78-parse.y"
+    { B1 (0x00); }
+    break;
+
+  case 216:
+#line 894 "rl78-parse.y"
+    { B2 (0x71, 0xc0); }
+    break;
+
+  case 217:
+#line 899 "rl78-parse.y"
+    { B1 (0xc0); F ((yyvsp[(2) - (2)].regno), 5, 2); }
+    break;
+
+  case 218:
+#line 902 "rl78-parse.y"
+    { B2 (0x61, 0xcd); }
+    break;
+
+  case 219:
+#line 905 "rl78-parse.y"
+    { B1 (0xc1); F ((yyvsp[(2) - (2)].regno), 5, 2); }
+    break;
+
+  case 220:
+#line 908 "rl78-parse.y"
+    { B2 (0x61, 0xdd); }
+    break;
+
+  case 221:
+#line 913 "rl78-parse.y"
+    { B1 (0xd7); }
+    break;
+
+  case 222:
+#line 916 "rl78-parse.y"
+    { B2 (0x61, 0xfc); }
+    break;
+
+  case 223:
+#line 919 "rl78-parse.y"
+    { B2 (0x61, 0xec); }
+    break;
+
+  case 224:
+#line 924 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xeb); }
+	  }
+    break;
+
+  case 225:
+#line 929 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xdc); }
+	  }
+    break;
+
+  case 226:
+#line 934 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xee); }
+	  }
+    break;
+
+  case 227:
+#line 939 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xfe); }
+	  }
+    break;
+
+  case 228:
+#line 944 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xdb); }
+	  }
+    break;
+
+  case 229:
+#line 949 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 1))
+	      { B2 (0x61, 0xfb);}
+	  }
+    break;
+
+  case 230:
+#line 956 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 7))
+	      { B2 (0x31, 0x0b); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+	  }
+    break;
+
+  case 231:
+#line 961 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 15))
+	      { B2 (0x31, 0x0f); FE ((yyvsp[(4) - (4)].exp), 8, 4); }
+	  }
+    break;
+
+  case 232:
+#line 968 "rl78-parse.y"
+    { B2 (0x61, 0xcf); }
+    break;
+
+  case 233:
+#line 971 "rl78-parse.y"
+    { B2 (0x61, 0xdf); }
+    break;
+
+  case 234:
+#line 974 "rl78-parse.y"
+    { B2 (0x61, 0xef); }
+    break;
+
+  case 235:
+#line 977 "rl78-parse.y"
+    { B2 (0x61, 0xff); }
+    break;
+
+  case 236:
+#line 982 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 7))
+	      { B2 (0x31, 0x09); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+	  }
+    break;
+
+  case 237:
+#line 987 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 7))
+	      { B2 (0x31, 0x08); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+	  }
+    break;
+
+  case 238:
+#line 992 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 7))
+	      { B2 (0x31, 0x07); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+	  }
+    break;
+
+  case 239:
+#line 997 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 15))
+	      { B2 (0x31, 0x0d); FE ((yyvsp[(4) - (4)].exp), 8, 4); }
+	  }
+    break;
+
+  case 240:
+#line 1002 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 15))
+	      { B2 (0x31, 0x0c); FE ((yyvsp[(4) - (4)].exp), 8, 4); }
+	  }
+    break;
+
+  case 241:
+#line 1009 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 7))
+	      { B2 (0x31, 0x0a); FE ((yyvsp[(4) - (4)].exp), 9, 3); }
+	  }
+    break;
+
+  case 242:
+#line 1014 "rl78-parse.y"
+    { if (check_expr_is_const ((yyvsp[(4) - (4)].exp), 1, 15))
+	      { B2 (0x31, 0x0e); FE ((yyvsp[(4) - (4)].exp), 8, 4); }
+	  }
+    break;
+
+  case 243:
+#line 1021 "rl78-parse.y"
+    { B2 (0x61, 0xc8); rl78_linkrelax_branch (); }
+    break;
+
+  case 244:
+#line 1024 "rl78-parse.y"
+    { B2 (0x61, 0xe3); rl78_linkrelax_branch (); }
+    break;
+
+  case 245:
+#line 1027 "rl78-parse.y"
+    { B2 (0x61, 0xd8); rl78_linkrelax_branch (); }
+    break;
+
+  case 246:
+#line 1030 "rl78-parse.y"
+    { B2 (0x61, 0xf3); rl78_linkrelax_branch (); }
+    break;
+
+  case 247:
+#line 1033 "rl78-parse.y"
+    { B2 (0x61, 0xf8); rl78_linkrelax_branch (); }
+    break;
+
+  case 248:
+#line 1036 "rl78-parse.y"
+    { B2 (0x61, 0xe8); rl78_linkrelax_branch (); }
+    break;
+
+  case 249:
+#line 1041 "rl78-parse.y"
+    { B2 (0x61, 0xfd); }
+    break;
+
+  case 250:
+#line 1046 "rl78-parse.y"
+    { if ((yyvsp[(4) - (4)].regno) == 0) /* X */
+	      { B1 (0x08); }
+	    else
+	      { B2 (0x61, 0x88); F ((yyvsp[(4) - (4)].regno), 13, 3); }
+	  }
+    break;
+
+  case 251:
+#line 1053 "rl78-parse.y"
+    { B2 (0x61, 0xaa); O2 ((yyvsp[(6) - (6)].exp)); rl78_linkrelax_addr16 (); }
+    break;
+
+  case 252:
+#line 1056 "rl78-parse.y"
+    { B2 (0x61, 0xae); }
+    break;
+
+  case 253:
+#line 1059 "rl78-parse.y"
+    { B2 (0x61, 0xaf); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 254:
+#line 1062 "rl78-parse.y"
+    { B2 (0x61, 0xac); }
+    break;
+
+  case 255:
+#line 1065 "rl78-parse.y"
+    { B2 (0x61, 0xad); O1 ((yyvsp[(8) - (9)].exp)); }
+    break;
+
+  case 256:
+#line 1068 "rl78-parse.y"
+    { B2 (0x61, 0xb9); }
+    break;
+
+  case 257:
+#line 1071 "rl78-parse.y"
+    { B2 (0x61, 0xa9); }
+    break;
+
+  case 258:
+#line 1074 "rl78-parse.y"
+    { if (expr_is_sfr ((yyvsp[(4) - (4)].exp)))
+	      { B2 (0x61, 0xab); O1 ((yyvsp[(4) - (4)].exp)); }
+	    else if (expr_is_saddr ((yyvsp[(4) - (4)].exp)))
+	      { B2 (0x61, 0xa8); O1 ((yyvsp[(4) - (4)].exp)); }
+	    else
+	      NOT_SFR_OR_SADDR;
+	  }
+    break;
+
+  case 259:
+#line 1085 "rl78-parse.y"
+    { B1 (0x31); F ((yyvsp[(4) - (4)].regno), 5, 2); }
+    break;
+
+  case 261:
+#line 1095 "rl78-parse.y"
+    { rl78_prefix (0x11); }
+    break;
+
+  case 262:
+#line 1098 "rl78-parse.y"
+    { (yyval.regno) = 0; }
+    break;
+
+  case 263:
+#line 1099 "rl78-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 264:
+#line 1100 "rl78-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 265:
+#line 1101 "rl78-parse.y"
+    { (yyval.regno) = 3; }
+    break;
+
+  case 266:
+#line 1102 "rl78-parse.y"
+    { (yyval.regno) = 4; }
+    break;
+
+  case 267:
+#line 1103 "rl78-parse.y"
+    { (yyval.regno) = 5; }
+    break;
+
+  case 268:
+#line 1104 "rl78-parse.y"
+    { (yyval.regno) = 6; }
+    break;
+
+  case 269:
+#line 1105 "rl78-parse.y"
+    { (yyval.regno) = 7; }
+    break;
+
+  case 270:
+#line 1108 "rl78-parse.y"
+    { (yyval.regno) = 0; }
+    break;
+
+  case 271:
+#line 1109 "rl78-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 272:
+#line 1110 "rl78-parse.y"
+    { (yyval.regno) = 3; }
+    break;
+
+  case 273:
+#line 1111 "rl78-parse.y"
+    { (yyval.regno) = 4; }
+    break;
+
+  case 274:
+#line 1112 "rl78-parse.y"
+    { (yyval.regno) = 5; }
+    break;
+
+  case 275:
+#line 1113 "rl78-parse.y"
+    { (yyval.regno) = 6; }
+    break;
+
+  case 276:
+#line 1114 "rl78-parse.y"
+    { (yyval.regno) = 7; }
+    break;
+
+  case 277:
+#line 1117 "rl78-parse.y"
+    { (yyval.regno) = 0; }
+    break;
+
+  case 278:
+#line 1118 "rl78-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 279:
+#line 1119 "rl78-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 280:
+#line 1120 "rl78-parse.y"
+    { (yyval.regno) = 3; }
+    break;
+
+  case 281:
+#line 1123 "rl78-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 282:
+#line 1124 "rl78-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 283:
+#line 1125 "rl78-parse.y"
+    { (yyval.regno) = 3; }
+    break;
+
+  case 284:
+#line 1128 "rl78-parse.y"
+    { (yyval.regno) = 0xf8; }
+    break;
+
+  case 285:
+#line 1129 "rl78-parse.y"
+    { (yyval.regno) = 0xf9; }
+    break;
+
+  case 286:
+#line 1130 "rl78-parse.y"
+    { (yyval.regno) = 0xfa; }
+    break;
+
+  case 287:
+#line 1131 "rl78-parse.y"
+    { (yyval.regno) = 0xfc; }
+    break;
+
+  case 288:
+#line 1132 "rl78-parse.y"
+    { (yyval.regno) = 0xfd; }
+    break;
+
+  case 289:
+#line 1133 "rl78-parse.y"
+    { (yyval.regno) = 0xfe; }
+    break;
+
+  case 290:
+#line 1134 "rl78-parse.y"
+    { (yyval.regno) = 0xff; }
+    break;
+
+  case 291:
+#line 1140 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 292:
+#line 1141 "rl78-parse.y"
+    { (yyval.regno) = 0x10; }
+    break;
+
+  case 293:
+#line 1142 "rl78-parse.y"
+    { (yyval.regno) = 0x20; }
+    break;
+
+  case 294:
+#line 1143 "rl78-parse.y"
+    { (yyval.regno) = 0x30; }
+    break;
+
+  case 295:
+#line 1144 "rl78-parse.y"
+    { (yyval.regno) = 0x40; }
+    break;
+
+  case 296:
+#line 1145 "rl78-parse.y"
+    { (yyval.regno) = 0x50; }
+    break;
+
+  case 297:
+#line 1146 "rl78-parse.y"
+    { (yyval.regno) = 0x60; }
+    break;
+
+  case 298:
+#line 1147 "rl78-parse.y"
+    { (yyval.regno) = 0x70; }
+    break;
+
+  case 299:
+#line 1150 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 300:
+#line 1151 "rl78-parse.y"
+    { (yyval.regno) = 0x20; }
+    break;
+
+  case 301:
+#line 1152 "rl78-parse.y"
+    { (yyval.regno) = 0x40; }
+    break;
+
+  case 302:
+#line 1155 "rl78-parse.y"
+    { (yyval.regno) = 0x05; rl78_bit_insn = 1; }
+    break;
+
+  case 303:
+#line 1156 "rl78-parse.y"
+    { (yyval.regno) = 0x06; rl78_bit_insn = 1;}
+    break;
+
+  case 304:
+#line 1157 "rl78-parse.y"
+    { (yyval.regno) = 0x07; rl78_bit_insn = 1; }
+    break;
+
+  case 305:
+#line 1160 "rl78-parse.y"
+    { (yyval.regno) = 0x02;    rl78_bit_insn = 1;}
+    break;
+
+  case 306:
+#line 1161 "rl78-parse.y"
+    { (yyval.regno) = 0x04;    rl78_bit_insn = 1; }
+    break;
+
+  case 307:
+#line 1162 "rl78-parse.y"
+    { (yyval.regno) = 0x00; rl78_bit_insn = 1; }
+    break;
+
+  case 308:
+#line 1165 "rl78-parse.y"
+    { (yyval.regno) = 0; rl78_bit_insn = 1; }
+    break;
+
+  case 309:
+#line 1166 "rl78-parse.y"
+    { (yyval.regno) = 1; rl78_bit_insn = 1; }
+    break;
+
+  case 310:
+#line 1169 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 311:
+#line 1170 "rl78-parse.y"
+    { (yyval.regno) = 0x10; }
+    break;
+
+  case 312:
+#line 1173 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 313:
+#line 1174 "rl78-parse.y"
+    { (yyval.regno) = 0x10; }
+    break;
+
+  case 314:
+#line 1177 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 315:
+#line 1178 "rl78-parse.y"
+    { (yyval.regno) = 0x10; }
+    break;
+
+  case 316:
+#line 1181 "rl78-parse.y"
+    { (yyval.regno) = 0x00; }
+    break;
+
+  case 317:
+#line 1182 "rl78-parse.y"
+    { (yyval.regno) = 0x10; }
+    break;
+
+  case 318:
+#line 1185 "rl78-parse.y"
+    { rl78_bit_insn = 1; }
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 4091 "rl78-parse.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 1188 "rl78-parse.y"
+
+/* ====================================================================== */
+
+static struct
+{
+  const char * string;
+  int          token;
+  int          val;
+}
+token_table[] =
+{
+  { "r0", X, 0 },
+  { "r1", A, 1 },
+  { "r2", C, 2 },
+  { "r3", B, 3 },
+  { "r4", E, 4 },
+  { "r5", D, 5 },
+  { "r6", L, 6 },
+  { "r7", H, 7 },
+  { "x", X, 0 },
+  { "a", A, 1 },
+  { "c", C, 2 },
+  { "b", B, 3 },
+  { "e", E, 4 },
+  { "d", D, 5 },
+  { "l", L, 6 },
+  { "h", H, 7 },
+
+  { "rp0", AX, 0 },
+  { "rp1", BC, 1 },
+  { "rp2", DE, 2 },
+  { "rp3", HL, 3 },
+  { "ax", AX, 0 },
+  { "bc", BC, 1 },
+  { "de", DE, 2 },
+  { "hl", HL, 3 },
+
+  { "RB0", RB0, 0 },
+  { "RB1", RB1, 1 },
+  { "RB2", RB2, 2 },
+  { "RB3", RB3, 3 },
+
+  { "sp", SP, 0 },
+  { "cy", CY, 0 },
+
+  { "spl", SPL, 0xf8 },
+  { "sph", SPH, 0xf9 },
+  { "psw", PSW, 0xfa },
+  { "cs", CS, 0xfc },
+  { "es", ES, 0xfd },
+  { "pmc", PMC, 0xfe },
+  { "mem", MEM, 0xff },
+
+  { ".s", DOT_S, 0 },
+  { ".b", DOT_B, 0 },
+  { ".w", DOT_W, 0 },
+  { ".l", DOT_L, 0 },
+  { ".a", DOT_A , 0},
+  { ".ub", DOT_UB, 0 },
+  { ".uw", DOT_UW , 0},
+
+  { "c", FLAG, 0 },
+  { "z", FLAG, 1 },
+  { "s", FLAG, 2 },
+  { "o", FLAG, 3 },
+  { "i", FLAG, 8 },
+  { "u", FLAG, 9 },
+
+#define OPC(x) { #x, x, IS_OPCODE }
+
+  OPC(ADD),
+  OPC(ADDC),
+  OPC(ADDW),
+  { "and", AND_, IS_OPCODE },
+  OPC(AND1),
+  OPC(BC),
+  OPC(BF),
+  OPC(BH),
+  OPC(BNC),
+  OPC(BNH),
+  OPC(BNZ),
+  OPC(BR),
+  OPC(BRK),
+  OPC(BRK1),
+  OPC(BT),
+  OPC(BTCLR),
+  OPC(BZ),
+  OPC(CALL),
+  OPC(CALLT),
+  OPC(CLR1),
+  OPC(CLRB),
+  OPC(CLRW),
+  OPC(CMP),
+  OPC(CMP0),
+  OPC(CMPS),
+  OPC(CMPW),
+  OPC(DEC),
+  OPC(DECW),
+  OPC(DI),
+  OPC(DIVHU),
+  OPC(DIVWU),
+  OPC(EI),
+  OPC(HALT),
+  OPC(INC),
+  OPC(INCW),
+  OPC(MACH),
+  OPC(MACHU),
+  OPC(MOV),
+  OPC(MOV1),
+  OPC(MOVS),
+  OPC(MOVW),
+  OPC(MULH),
+  OPC(MULHU),
+  OPC(MULU),
+  OPC(NOP),
+  OPC(NOT1),
+  OPC(ONEB),
+  OPC(ONEW),
+  OPC(OR),
+  OPC(OR1),
+  OPC(POP),
+  OPC(PUSH),
+  OPC(RET),
+  OPC(RETI),
+  OPC(RETB),
+  OPC(ROL),
+  OPC(ROLC),
+  OPC(ROLWC),
+  OPC(ROR),
+  OPC(RORC),
+  OPC(SAR),
+  OPC(SARW),
+  OPC(SEL),
+  OPC(SET1),
+  OPC(SHL),
+  OPC(SHLW),
+  OPC(SHR),
+  OPC(SHRW),
+  OPC(SKC),
+  OPC(SKH),
+  OPC(SKNC),
+  OPC(SKNH),
+  OPC(SKNZ),
+  OPC(SKZ),
+  OPC(STOP),
+  OPC(SUB),
+  OPC(SUBC),
+  OPC(SUBW),
+  OPC(XCH),
+  OPC(XCHW),
+  OPC(XOR),
+  OPC(XOR1),
+};
+
+#define NUM_TOKENS (sizeof (token_table) / sizeof (token_table[0]))
+
+void
+rl78_lex_init (char * beginning, char * ending)
+{
+  rl78_init_start = beginning;
+  rl78_lex_start = beginning;
+  rl78_lex_end = ending;
+  rl78_in_brackets = 0;
+  rl78_last_token = 0;
+
+  rl78_bit_insn = 0;
+
+  setbuf (stdout, 0);
+}
+
+/* Return a pointer to the '.' in a bit index expression (like
+   foo.5), or NULL if none is found.  */
+static char *
+find_bit_index (char *tok)
+{
+  char *last_dot = NULL;
+  char *last_digit = NULL;
+  while (*tok && *tok != ',')
+    {
+      if (*tok == '.')
+	{
+	  last_dot = tok;
+	  last_digit = NULL;
+	}
+      else if (*tok >= '0' && *tok <= '7'
+	       && last_dot != NULL
+	       && last_digit == NULL)
+	{
+	  last_digit = tok;
+	}
+      else if (ISSPACE (*tok))
+	{
+	  /* skip */
+	}
+      else
+	{
+	  last_dot = NULL;
+	  last_digit = NULL;
+	}
+      tok ++;
+    }
+  if (last_dot != NULL
+      && last_digit != NULL)
+    return last_dot;
+  return NULL;
+}
+
+static int
+rl78_lex (void)
+{
+  /*unsigned int ci;*/
+  char * save_input_pointer;
+  char * bit = NULL;
+
+  while (ISSPACE (*rl78_lex_start)
+	 && rl78_lex_start != rl78_lex_end)
+    rl78_lex_start ++;
+
+  rl78_last_exp_start = rl78_lex_start;
+
+  if (rl78_lex_start == rl78_lex_end)
+    return 0;
+
+  if (ISALPHA (*rl78_lex_start)
+      || (*rl78_lex_start == '.' && ISALPHA (rl78_lex_start[1])))
+    {
+      unsigned int i;
+      char * e;
+      char save;
+
+      for (e = rl78_lex_start + 1;
+	   e < rl78_lex_end && ISALNUM (*e);
+	   e ++)
+	;
+      save = *e;
+      *e = 0;
+
+      for (i = 0; i < NUM_TOKENS; i++)
+	if (strcasecmp (rl78_lex_start, token_table[i].string) == 0
+	    && !(token_table[i].val == IS_OPCODE && rl78_last_token != 0)
+	    && !(token_table[i].token == FLAG && !need_flag))
+	  {
+	    rl78_lval.regno = token_table[i].val;
+	    *e = save;
+	    rl78_lex_start = e;
+	    rl78_last_token = token_table[i].token;
+	    return token_table[i].token;
+	  }
+      *e = save;
+    }
+
+  if (rl78_last_token == 0)
+    {
+      rl78_last_token = UNKNOWN_OPCODE;
+      return UNKNOWN_OPCODE;
+    }
+
+  if (rl78_last_token == UNKNOWN_OPCODE)
+    return 0;
+
+  if (*rl78_lex_start == '[')
+    rl78_in_brackets = 1;
+  if (*rl78_lex_start == ']')
+    rl78_in_brackets = 0;
+
+  /* '.' is funny - the syntax includes it for bitfields, but only for
+      bitfields.  We check for it specially so we can allow labels
+      with '.' in them.  */
+
+  if (rl78_bit_insn
+      && *rl78_lex_start == '.'
+      && find_bit_index (rl78_lex_start) == rl78_lex_start)
+    {
+      rl78_last_token = *rl78_lex_start;
+      return *rl78_lex_start ++;
+    }
+
+  if ((rl78_in_brackets && *rl78_lex_start == '+')
+      || strchr ("[],#!$:", *rl78_lex_start))
+    {
+      rl78_last_token = *rl78_lex_start;
+      return *rl78_lex_start ++;
+    }
+
+  /* Again, '.' is funny.  Look for '.<digit>' at the end of the line
+     or before a comma, which is a bitfield, not an expression.  */
+
+  if (rl78_bit_insn)
+    {
+      bit = find_bit_index (rl78_lex_start);
+      if (bit)
+	*bit = 0;
+      else
+	bit = NULL;
+    }
+
+  save_input_pointer = input_line_pointer;
+  input_line_pointer = rl78_lex_start;
+  rl78_lval.exp.X_md = 0;
+  expression (&rl78_lval.exp);
+
+  if (bit)
+    *bit = '.';
+
+  rl78_lex_start = input_line_pointer;
+  input_line_pointer = save_input_pointer;
+  rl78_last_token = EXPR;
+  return EXPR;
+}
+
+int
+rl78_error (const char * str)
+{
+  int len;
+
+  len = rl78_last_exp_start - rl78_init_start;
+
+  as_bad ("%s", rl78_init_start);
+  as_bad ("%*s^ %s", len, "", str);
+  return 0;
+}
+
+static int
+expr_is_sfr (expressionS exp)
+{
+  unsigned long v;
+
+  if (exp.X_op != O_constant)
+    return 0;
+
+  v = exp.X_add_number;
+  if (0xFFF00 <= v && v <= 0xFFFFF)
+    return 1;
+  return 0;
+}
+
+static int
+expr_is_saddr (expressionS exp)
+{
+  unsigned long v;
+
+  if (exp.X_op != O_constant)
+    return 0;
+
+  v = exp.X_add_number;
+  if (0xFFE20 <= v && v <= 0xFFF1F)
+    return 1;
+  return 0;
+}
+
+static int
+expr_is_word_aligned (expressionS exp)
+{
+  unsigned long v;
+
+  if (exp.X_op != O_constant)
+    return 1;
+
+  v = exp.X_add_number;
+  if (v & 1)
+    return 0;
+  return 1;
+  
+}
+
+static void
+check_expr_is_bit_index (expressionS exp)
+{
+  int val;
+
+  if (exp.X_op != O_constant)
+    {
+      rl78_error (_("bit index must be a constant"));
+      return;
+    }
+  val = exp.X_add_number;
+
+  if (val < 0 || val > 7)
+    rl78_error (_("rtsd size must be 0..7"));
+}
+
+static int
+exp_val (expressionS exp)
+{
+  if (exp.X_op != O_constant)
+  {
+    rl78_error (_("constant expected"));
+    return 0;
+  }
+  return exp.X_add_number;
+}
+
+static int
+check_expr_is_const (expressionS e, int vmin, int vmax)
+{
+  static char buf[100];
+  if (e.X_op != O_constant
+      || e.X_add_number < vmin
+      || e.X_add_number > vmax)
+    {
+      if (vmin == vmax)
+	sprintf (buf, "%d expected here", vmin);
+      else
+	sprintf (buf, "%d..%d expected here", vmin, vmax);
+      rl78_error(buf);
+      return 0;
+    }
+  return 1;
+}
+
+
+
diff --git a/gas/rl78-parse.h b/gas/rl78-parse.h
new file mode 100644
index 0000000..6fd5ff2
--- /dev/null
+++ b/gas/rl78-parse.h
@@ -0,0 +1,299 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     A = 258,
+     X = 259,
+     B = 260,
+     C = 261,
+     D = 262,
+     E = 263,
+     H = 264,
+     L = 265,
+     AX = 266,
+     BC = 267,
+     DE = 268,
+     HL = 269,
+     SPL = 270,
+     SPH = 271,
+     PSW = 272,
+     CS = 273,
+     ES = 274,
+     PMC = 275,
+     MEM = 276,
+     FLAG = 277,
+     SP = 278,
+     CY = 279,
+     RB0 = 280,
+     RB1 = 281,
+     RB2 = 282,
+     RB3 = 283,
+     EXPR = 284,
+     UNKNOWN_OPCODE = 285,
+     IS_OPCODE = 286,
+     DOT_S = 287,
+     DOT_B = 288,
+     DOT_W = 289,
+     DOT_L = 290,
+     DOT_A = 291,
+     DOT_UB = 292,
+     DOT_UW = 293,
+     ADD = 294,
+     ADDC = 295,
+     ADDW = 296,
+     AND_ = 297,
+     AND1 = 298,
+     BF = 299,
+     BH = 300,
+     BNC = 301,
+     BNH = 302,
+     BNZ = 303,
+     BR = 304,
+     BRK = 305,
+     BRK1 = 306,
+     BT = 307,
+     BTCLR = 308,
+     BZ = 309,
+     CALL = 310,
+     CALLT = 311,
+     CLR1 = 312,
+     CLRB = 313,
+     CLRW = 314,
+     CMP = 315,
+     CMP0 = 316,
+     CMPS = 317,
+     CMPW = 318,
+     DEC = 319,
+     DECW = 320,
+     DI = 321,
+     DIVHU = 322,
+     DIVWU = 323,
+     EI = 324,
+     HALT = 325,
+     INC = 326,
+     INCW = 327,
+     MACH = 328,
+     MACHU = 329,
+     MOV = 330,
+     MOV1 = 331,
+     MOVS = 332,
+     MOVW = 333,
+     MULH = 334,
+     MULHU = 335,
+     MULU = 336,
+     NOP = 337,
+     NOT1 = 338,
+     ONEB = 339,
+     ONEW = 340,
+     OR = 341,
+     OR1 = 342,
+     POP = 343,
+     PUSH = 344,
+     RET = 345,
+     RETI = 346,
+     RETB = 347,
+     ROL = 348,
+     ROLC = 349,
+     ROLWC = 350,
+     ROR = 351,
+     RORC = 352,
+     SAR = 353,
+     SARW = 354,
+     SEL = 355,
+     SET1 = 356,
+     SHL = 357,
+     SHLW = 358,
+     SHR = 359,
+     SHRW = 360,
+     SKC = 361,
+     SKH = 362,
+     SKNC = 363,
+     SKNH = 364,
+     SKNZ = 365,
+     SKZ = 366,
+     STOP = 367,
+     SUB = 368,
+     SUBC = 369,
+     SUBW = 370,
+     XCH = 371,
+     XCHW = 372,
+     XOR = 373,
+     XOR1 = 374
+   };
+#endif
+/* Tokens.  */
+#define A 258
+#define X 259
+#define B 260
+#define C 261
+#define D 262
+#define E 263
+#define H 264
+#define L 265
+#define AX 266
+#define BC 267
+#define DE 268
+#define HL 269
+#define SPL 270
+#define SPH 271
+#define PSW 272
+#define CS 273
+#define ES 274
+#define PMC 275
+#define MEM 276
+#define FLAG 277
+#define SP 278
+#define CY 279
+#define RB0 280
+#define RB1 281
+#define RB2 282
+#define RB3 283
+#define EXPR 284
+#define UNKNOWN_OPCODE 285
+#define IS_OPCODE 286
+#define DOT_S 287
+#define DOT_B 288
+#define DOT_W 289
+#define DOT_L 290
+#define DOT_A 291
+#define DOT_UB 292
+#define DOT_UW 293
+#define ADD 294
+#define ADDC 295
+#define ADDW 296
+#define AND_ 297
+#define AND1 298
+#define BF 299
+#define BH 300
+#define BNC 301
+#define BNH 302
+#define BNZ 303
+#define BR 304
+#define BRK 305
+#define BRK1 306
+#define BT 307
+#define BTCLR 308
+#define BZ 309
+#define CALL 310
+#define CALLT 311
+#define CLR1 312
+#define CLRB 313
+#define CLRW 314
+#define CMP 315
+#define CMP0 316
+#define CMPS 317
+#define CMPW 318
+#define DEC 319
+#define DECW 320
+#define DI 321
+#define DIVHU 322
+#define DIVWU 323
+#define EI 324
+#define HALT 325
+#define INC 326
+#define INCW 327
+#define MACH 328
+#define MACHU 329
+#define MOV 330
+#define MOV1 331
+#define MOVS 332
+#define MOVW 333
+#define MULH 334
+#define MULHU 335
+#define MULU 336
+#define NOP 337
+#define NOT1 338
+#define ONEB 339
+#define ONEW 340
+#define OR 341
+#define OR1 342
+#define POP 343
+#define PUSH 344
+#define RET 345
+#define RETI 346
+#define RETB 347
+#define ROL 348
+#define ROLC 349
+#define ROLWC 350
+#define ROR 351
+#define RORC 352
+#define SAR 353
+#define SARW 354
+#define SEL 355
+#define SET1 356
+#define SHL 357
+#define SHLW 358
+#define SHR 359
+#define SHRW 360
+#define SKC 361
+#define SKH 362
+#define SKNC 363
+#define SKNH 364
+#define SKNZ 365
+#define SKZ 366
+#define STOP 367
+#define SUB 368
+#define SUBC 369
+#define SUBW 370
+#define XCH 371
+#define XCHW 372
+#define XOR 373
+#define XOR1 374
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 138 "rl78-parse.y"
+{
+  int regno;
+  expressionS exp;
+}
+/* Line 1529 of yacc.c.  */
+#line 292 "rl78-parse.h"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE rl78_lval;
+
diff --git a/gas/rx-parse.c b/gas/rx-parse.c
new file mode 100644
index 0000000..4776104
--- /dev/null
+++ b/gas/rx-parse.c
@@ -0,0 +1,4241 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse rx_parse
+#define yylex   rx_lex
+#define yyerror rx_error
+#define yylval  rx_lval
+#define yychar  rx_char
+#define yydebug rx_debug
+#define yynerrs rx_nerrs
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     REG = 258,
+     FLAG = 259,
+     CREG = 260,
+     EXPR = 261,
+     UNKNOWN_OPCODE = 262,
+     IS_OPCODE = 263,
+     DOT_S = 264,
+     DOT_B = 265,
+     DOT_W = 266,
+     DOT_L = 267,
+     DOT_A = 268,
+     DOT_UB = 269,
+     DOT_UW = 270,
+     ABS = 271,
+     ADC = 272,
+     ADD = 273,
+     AND_ = 274,
+     BCLR = 275,
+     BCND = 276,
+     BMCND = 277,
+     BNOT = 278,
+     BRA = 279,
+     BRK = 280,
+     BSET = 281,
+     BSR = 282,
+     BTST = 283,
+     CLRPSW = 284,
+     CMP = 285,
+     DBT = 286,
+     DIV = 287,
+     DIVU = 288,
+     EDIV = 289,
+     EDIVU = 290,
+     EMUL = 291,
+     EMULU = 292,
+     FADD = 293,
+     FCMP = 294,
+     FDIV = 295,
+     FMUL = 296,
+     FREIT = 297,
+     FSUB = 298,
+     FTOI = 299,
+     INT = 300,
+     ITOF = 301,
+     JMP = 302,
+     JSR = 303,
+     MACHI = 304,
+     MACLO = 305,
+     MAX = 306,
+     MIN = 307,
+     MOV = 308,
+     MOVU = 309,
+     MUL = 310,
+     MULHI = 311,
+     MULLO = 312,
+     MULU = 313,
+     MVFACHI = 314,
+     MVFACMI = 315,
+     MVFACLO = 316,
+     MVFC = 317,
+     MVTACHI = 318,
+     MVTACLO = 319,
+     MVTC = 320,
+     MVTIPL = 321,
+     NEG = 322,
+     NOP = 323,
+     NOT = 324,
+     OR = 325,
+     POP = 326,
+     POPC = 327,
+     POPM = 328,
+     PUSH = 329,
+     PUSHA = 330,
+     PUSHC = 331,
+     PUSHM = 332,
+     RACW = 333,
+     REIT = 334,
+     REVL = 335,
+     REVW = 336,
+     RMPA = 337,
+     ROLC = 338,
+     RORC = 339,
+     ROTL = 340,
+     ROTR = 341,
+     ROUND = 342,
+     RTE = 343,
+     RTFI = 344,
+     RTS = 345,
+     RTSD = 346,
+     SAT = 347,
+     SATR = 348,
+     SBB = 349,
+     SCCND = 350,
+     SCMPU = 351,
+     SETPSW = 352,
+     SHAR = 353,
+     SHLL = 354,
+     SHLR = 355,
+     SMOVB = 356,
+     SMOVF = 357,
+     SMOVU = 358,
+     SSTR = 359,
+     STNZ = 360,
+     STOP = 361,
+     STZ = 362,
+     SUB = 363,
+     SUNTIL = 364,
+     SWHILE = 365,
+     TST = 366,
+     WAIT = 367,
+     XCHG = 368,
+     XOR = 369
+   };
+#endif
+/* Tokens.  */
+#define REG 258
+#define FLAG 259
+#define CREG 260
+#define EXPR 261
+#define UNKNOWN_OPCODE 262
+#define IS_OPCODE 263
+#define DOT_S 264
+#define DOT_B 265
+#define DOT_W 266
+#define DOT_L 267
+#define DOT_A 268
+#define DOT_UB 269
+#define DOT_UW 270
+#define ABS 271
+#define ADC 272
+#define ADD 273
+#define AND_ 274
+#define BCLR 275
+#define BCND 276
+#define BMCND 277
+#define BNOT 278
+#define BRA 279
+#define BRK 280
+#define BSET 281
+#define BSR 282
+#define BTST 283
+#define CLRPSW 284
+#define CMP 285
+#define DBT 286
+#define DIV 287
+#define DIVU 288
+#define EDIV 289
+#define EDIVU 290
+#define EMUL 291
+#define EMULU 292
+#define FADD 293
+#define FCMP 294
+#define FDIV 295
+#define FMUL 296
+#define FREIT 297
+#define FSUB 298
+#define FTOI 299
+#define INT 300
+#define ITOF 301
+#define JMP 302
+#define JSR 303
+#define MACHI 304
+#define MACLO 305
+#define MAX 306
+#define MIN 307
+#define MOV 308
+#define MOVU 309
+#define MUL 310
+#define MULHI 311
+#define MULLO 312
+#define MULU 313
+#define MVFACHI 314
+#define MVFACMI 315
+#define MVFACLO 316
+#define MVFC 317
+#define MVTACHI 318
+#define MVTACLO 319
+#define MVTC 320
+#define MVTIPL 321
+#define NEG 322
+#define NOP 323
+#define NOT 324
+#define OR 325
+#define POP 326
+#define POPC 327
+#define POPM 328
+#define PUSH 329
+#define PUSHA 330
+#define PUSHC 331
+#define PUSHM 332
+#define RACW 333
+#define REIT 334
+#define REVL 335
+#define REVW 336
+#define RMPA 337
+#define ROLC 338
+#define RORC 339
+#define ROTL 340
+#define ROTR 341
+#define ROUND 342
+#define RTE 343
+#define RTFI 344
+#define RTS 345
+#define RTSD 346
+#define SAT 347
+#define SATR 348
+#define SBB 349
+#define SCCND 350
+#define SCMPU 351
+#define SETPSW 352
+#define SHAR 353
+#define SHLL 354
+#define SHLR 355
+#define SMOVB 356
+#define SMOVF 357
+#define SMOVU 358
+#define SSTR 359
+#define STNZ 360
+#define STOP 361
+#define STZ 362
+#define SUB 363
+#define SUNTIL 364
+#define SWHILE 365
+#define TST 366
+#define WAIT 367
+#define XCHG 368
+#define XOR 369
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 20 "rx-parse.y"
+
+
+#include "as.h"
+#include "safe-ctype.h"
+#include "rx-defs.h"
+
+static int rx_lex (void);
+
+#define COND_EQ	0
+#define COND_NE	1
+
+#define MEMEX 0x06
+
+#define BSIZE 0
+#define WSIZE 1
+#define LSIZE 2
+
+/*                       .sb    .sw    .l     .uw   */
+static int sizemap[] = { BSIZE, WSIZE, LSIZE, WSIZE };
+
+/* Ok, here are the rules for using these macros...
+
+   B*() is used to specify the base opcode bytes.  Fields to be filled
+        in later, leave zero.  Call this first.
+
+   F() and FE() are used to fill in fields within the base opcode bytes.  You MUST
+        call B*() before any F() or FE().
+
+   [UN]*O*(), PC*() appends operands to the end of the opcode.  You
+        must call P() and B*() before any of these, so that the fixups
+        have the right byte location.
+        O = signed, UO = unsigned, NO = negated, PC = pcrel
+
+   IMM() adds an immediate and fills in the field for it.
+   NIMM() same, but negates the immediate.
+   NBIMM() same, but negates the immediate, for sbb.
+   DSP() adds a displacement, and fills in the field for it.
+
+   Note that order is significant for the O, IMM, and DSP macros, as
+   they append their data to the operand buffer in the order that you
+   call them.
+
+   Use "disp" for displacements whenever possible; this handles the
+   "0" case properly.  */
+
+#define B1(b1)             rx_base1 (b1)
+#define B2(b1, b2)         rx_base2 (b1, b2)
+#define B3(b1, b2, b3)     rx_base3 (b1, b2, b3)
+#define B4(b1, b2, b3, b4) rx_base4 (b1, b2, b3, b4)
+
+/* POS is bits from the MSB of the first byte to the LSB of the last byte.  */
+#define F(val,pos,sz)      rx_field (val, pos, sz)
+#define FE(exp,pos,sz)	   rx_field (exp_val (exp), pos, sz);
+
+#define O1(v)              rx_op (v, 1, RXREL_SIGNED); rx_range (v, -128, 255)
+#define O2(v)              rx_op (v, 2, RXREL_SIGNED); rx_range (v, -32768, 65536)
+#define O3(v)              rx_op (v, 3, RXREL_SIGNED); rx_range (v, -8388608, 16777216)
+#define O4(v)              rx_op (v, 4, RXREL_SIGNED)
+
+#define UO1(v)             rx_op (v, 1, RXREL_UNSIGNED); rx_range (v, 0, 255)
+#define UO2(v)             rx_op (v, 2, RXREL_UNSIGNED); rx_range (v, 0, 65536)
+#define UO3(v)             rx_op (v, 3, RXREL_UNSIGNED); rx_range (v, 0, 16777216)
+#define UO4(v)             rx_op (v, 4, RXREL_UNSIGNED)
+
+#define NO1(v)             rx_op (v, 1, RXREL_NEGATIVE)
+#define NO2(v)             rx_op (v, 2, RXREL_NEGATIVE)
+#define NO3(v)             rx_op (v, 3, RXREL_NEGATIVE)
+#define NO4(v)             rx_op (v, 4, RXREL_NEGATIVE)
+
+#define PC1(v)             rx_op (v, 1, RXREL_PCREL)
+#define PC2(v)             rx_op (v, 2, RXREL_PCREL)
+#define PC3(v)             rx_op (v, 3, RXREL_PCREL)
+
+#define IMM_(v,pos,size)   F (immediate (v, RXREL_SIGNED, pos, size), pos, 2); \
+			   if (v.X_op != O_constant && v.X_op != O_big) rx_linkrelax_imm (pos)
+#define IMM(v,pos)	   IMM_ (v, pos, 32)
+#define IMMW(v,pos)	   IMM_ (v, pos, 16); rx_range (v, -32768, 65536)
+#define IMMB(v,pos)	   IMM_ (v, pos, 8); rx_range (v, -128, 255)
+#define NIMM(v,pos)	   F (immediate (v, RXREL_NEGATIVE, pos, 32), pos, 2)
+#define NBIMM(v,pos)	   F (immediate (v, RXREL_NEGATIVE_BORROW, pos, 32), pos, 2)
+#define DSP(v,pos,msz)	   if (!v.X_md) rx_relax (RX_RELAX_DISP, pos); \
+			   else rx_linkrelax_dsp (pos); \
+			   F (displacement (v, msz), pos, 2)
+
+#define id24(a,b2,b3)	   B3 (0xfb+a, b2, b3)
+
+static void	   rx_check_float_support (void);
+static int         rx_intop (expressionS, int, int);
+static int         rx_uintop (expressionS, int);
+static int         rx_disp3op (expressionS);
+static int         rx_disp5op (expressionS *, int);
+static int         rx_disp5op0 (expressionS *, int);
+static int         exp_val (expressionS exp);
+static expressionS zero_expr (void);
+static int         immediate (expressionS, int, int, int);
+static int         displacement (expressionS, int);
+static void        rtsd_immediate (expressionS);
+static void	   rx_range (expressionS, int, int);
+
+static int    need_flag = 0;
+static int    rx_in_brackets = 0;
+static int    rx_last_token = 0;
+static char * rx_init_start;
+static char * rx_last_exp_start = 0;
+static int    sub_op;
+static int    sub_op2;
+
+#define YYDEBUG 1
+#define YYERROR_VERBOSE 1
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 134 "rx-parse.y"
+{
+  int regno;
+  expressionS exp;
+}
+/* Line 193 of yacc.c.  */
+#line 449 "rx-parse.c"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 462 "rx-parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  216
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   618
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  121
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  62
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  244
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  610
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   369
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,   115,     2,     2,     2,     2,
+       2,     2,     2,   120,   116,   119,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   117,     2,   118,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    11,    13,    16,    20,
+      24,    27,    31,    35,    39,    43,    47,    51,    55,    58,
+      68,    78,    88,    96,   101,   110,   119,   125,   133,   142,
+     148,   154,   160,   166,   172,   178,   185,   191,   195,   196,
+     200,   201,   205,   206,   210,   215,   220,   228,   232,   238,
+     244,   250,   253,   256,   259,   263,   266,   269,   272,   275,
+     278,   281,   284,   288,   292,   294,   296,   298,   300,   303,
+     306,   309,   312,   314,   316,   318,   320,   324,   333,   342,
+     350,   361,   373,   379,   387,   397,   407,   417,   424,   425,
+     429,   430,   434,   435,   439,   440,   444,   445,   449,   450,
+     454,   455,   459,   460,   464,   465,   469,   470,   474,   475,
+     479,   480,   484,   485,   489,   490,   494,   495,   499,   500,
+     504,   505,   509,   510,   514,   515,   519,   524,   529,   534,
+     539,   548,   557,   566,   575,   576,   580,   581,   585,   586,
+     590,   591,   595,   596,   600,   601,   605,   606,   610,   614,
+     621,   631,   641,   646,   651,   656,   661,   664,   667,   670,
+     673,   676,   680,   689,   698,   707,   716,   725,   734,   735,
+     739,   740,   744,   745,   749,   750,   754,   759,   764,   770,
+     776,   782,   788,   794,   804,   814,   824,   825,   829,   830,
+     834,   835,   839,   840,   844,   845,   849,   855,   859,   867,
+     875,   881,   885,   893,   897,   905,   913,   918,   920,   922,
+     924,   926,   930,   932,   936,   944,   952,   956,   961,   968,
+     970,   971,   977,   979,   980,   985,   986,   995,   996,   998,
+     999,  1002,  1004,  1006,  1007,  1009,  1011,  1012,  1014,  1016,
+    1018,  1019,  1021,  1023,  1024
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     122,     0,    -1,     7,    -1,    25,    -1,    31,    -1,    90,
+      -1,    68,    -1,    24,     6,    -1,    24,    13,     6,    -1,
+      24,     9,     6,    -1,    27,     6,    -1,    27,    13,     6,
+      -1,    21,     9,     6,    -1,    21,    10,     6,    -1,    24,
+      10,     6,    -1,    24,    11,     6,    -1,    27,    11,     6,
+      -1,    21,    11,     6,    -1,    21,     6,    -1,    53,    10,
+     115,     6,   116,   176,   117,     3,   118,    -1,    53,    11,
+     115,     6,   116,   176,   117,     3,   118,    -1,    53,    12,
+     115,     6,   116,   176,   117,     3,   118,    -1,    91,   115,
+       6,   116,     3,   119,     3,    -1,    30,     3,   116,     3,
+      -1,    30,   176,   117,     3,   118,    14,   116,     3,    -1,
+      30,   176,   117,     3,   118,   179,   116,     3,    -1,    54,
+     181,     3,   116,     3,    -1,    54,   181,   117,     3,   118,
+     116,     3,    -1,    54,   181,     6,   117,     3,   118,   116,
+       3,    -1,   108,   115,     6,   116,     3,    -1,    30,   115,
+       6,   116,     3,    -1,    18,   115,     6,   116,     3,    -1,
+      55,   115,     6,   116,     3,    -1,    19,   115,     6,   116,
+       3,    -1,    70,   115,     6,   116,     3,    -1,    53,    12,
+     115,     6,   116,     3,    -1,    53,   115,     6,   116,     3,
+      -1,    91,   115,     6,    -1,    -1,   100,   123,   170,    -1,
+      -1,    98,   124,   170,    -1,    -1,    99,   125,   170,    -1,
+      77,     3,   119,     3,    -1,    73,     3,   119,     3,    -1,
+      18,   115,     6,   116,     3,   116,     3,    -1,    45,   115,
+       6,    -1,    26,   115,     6,   116,     3,    -1,    20,   115,
+       6,   116,     3,    -1,    28,   115,     6,   116,     3,    -1,
+      92,     3,    -1,    84,     3,    -1,    83,     3,    -1,    74,
+     180,     3,    -1,    71,     3,    -1,    76,     5,    -1,    72,
+       5,    -1,    97,   177,    -1,    29,   177,    -1,    47,     3,
+      -1,    48,     3,    -1,    24,   182,     3,    -1,    27,   182,
+       3,    -1,    96,    -1,   103,    -1,   101,    -1,   102,    -1,
+     109,   180,    -1,   110,   180,    -1,   104,   180,    -1,    82,
+     180,    -1,    89,    -1,    88,    -1,   112,    -1,    93,    -1,
+      66,   115,     6,    -1,    53,   180,     3,   116,     6,   117,
+       3,   118,    -1,    53,   180,     6,   117,     3,   118,   116,
+       3,    -1,    53,   180,     3,   116,   117,     3,   118,    -1,
+      53,   180,   117,     3,   118,   116,   176,   117,     3,   118,
+      -1,    53,   180,     6,   117,     3,   118,   116,   176,   117,
+       3,   118,    -1,    53,   180,     3,   116,     3,    -1,    53,
+     180,   117,     3,   118,   116,     3,    -1,    26,   115,     6,
+     116,   176,   117,     3,   118,    10,    -1,    20,   115,     6,
+     116,   176,   117,     3,   118,    10,    -1,    28,   115,     6,
+     116,   176,   117,     3,   118,    10,    -1,    74,   180,   176,
+     117,     3,   118,    -1,    -1,    94,   126,   162,    -1,    -1,
+      67,   127,   167,    -1,    -1,    17,   128,   166,    -1,    -1,
+      16,   129,   167,    -1,    -1,    51,   130,   165,    -1,    -1,
+      52,   131,   165,    -1,    -1,    36,   132,   164,    -1,    -1,
+      37,   133,   164,    -1,    -1,    32,   134,   165,    -1,    -1,
+      33,   135,   165,    -1,    -1,   111,   136,   165,    -1,    -1,
+     114,   137,   165,    -1,    -1,    69,   138,   167,    -1,    -1,
+     107,   139,   164,    -1,    -1,   105,   140,   164,    -1,    -1,
+      36,   141,   168,    -1,    -1,    37,   142,   168,    -1,    -1,
+     113,   143,   168,    -1,    -1,    46,   144,   168,    -1,    26,
+       3,   116,     3,    -1,    20,     3,   116,     3,    -1,    28,
+       3,   116,     3,    -1,    23,     3,   116,     3,    -1,    26,
+       3,   116,   176,   117,     3,   118,    10,    -1,    20,     3,
+     116,   176,   117,     3,   118,    10,    -1,    28,     3,   116,
+     176,   117,     3,   118,    10,    -1,    23,     3,   116,   176,
+     117,     3,   118,    10,    -1,    -1,    43,   145,   171,    -1,
+      -1,    39,   146,   171,    -1,    -1,    38,   147,   171,    -1,
+      -1,    41,   148,   171,    -1,    -1,    40,   149,   171,    -1,
+      -1,    44,   150,   173,    -1,    -1,    87,   151,   173,    -1,
+      95,    12,     3,    -1,    95,   180,   176,   117,     3,   118,
+      -1,    22,   115,     6,   116,   176,   117,     3,   118,    10,
+      -1,    23,   115,     6,   116,   176,   117,     3,   118,    10,
+      -1,    56,     3,   116,     3,    -1,    57,     3,   116,     3,
+      -1,    49,     3,   116,     3,    -1,    50,     3,   116,     3,
+      -1,    63,     3,    -1,    64,     3,    -1,    59,     3,    -1,
+      60,     3,    -1,    61,     3,    -1,    78,   115,     6,    -1,
+      53,   180,     3,   116,   117,     3,   120,   118,    -1,    53,
+     180,     3,   116,   117,   119,     3,   118,    -1,    53,   180,
+     117,     3,   120,   118,   116,     3,    -1,    53,   180,   117,
+     119,     3,   118,   116,     3,    -1,    54,   181,   117,     3,
+     120,   118,   116,     3,    -1,    54,   181,   117,   119,     3,
+     118,   116,     3,    -1,    -1,    85,   152,   169,    -1,    -1,
+      86,   153,   169,    -1,    -1,    81,   154,   169,    -1,    -1,
+      80,   155,   169,    -1,    65,     3,   116,     5,    -1,    62,
+       5,   116,     3,    -1,    85,   115,     6,   116,     3,    -1,
+      86,   115,     6,   116,     3,    -1,    65,   115,     6,   116,
+       5,    -1,    22,   115,     6,   116,     3,    -1,    23,   115,
+       6,   116,     3,    -1,    53,   180,     3,   116,   117,     3,
+     116,     3,   118,    -1,    53,   180,   117,     3,   116,     3,
+     118,   116,     3,    -1,    54,   181,   117,     3,   116,     3,
+     118,   116,     3,    -1,    -1,   108,   156,   161,    -1,    -1,
+      18,   157,   161,    -1,    -1,    55,   158,   161,    -1,    -1,
+      19,   159,   161,    -1,    -1,    70,   160,   161,    -1,    94,
+     115,     6,   116,     3,    -1,     3,   116,     3,    -1,   176,
+     117,     3,   118,    14,   116,     3,    -1,   176,   117,     3,
+     118,   179,   116,     3,    -1,     3,   116,     3,   116,     3,
+      -1,     3,   116,     3,    -1,   176,   117,     3,   118,   182,
+     116,     3,    -1,     3,   116,     3,    -1,   176,   117,     3,
+     118,    14,   116,     3,    -1,   176,   117,     3,   118,   179,
+     116,     3,    -1,   115,     6,   116,     3,    -1,   163,    -1,
+     164,    -1,   162,    -1,   164,    -1,     3,   116,     3,    -1,
+       3,    -1,     3,   116,     3,    -1,   176,   117,     3,   118,
+      14,   116,     3,    -1,   176,   117,     3,   118,   179,   116,
+       3,    -1,     3,   116,     3,    -1,   115,     6,   116,     3,
+      -1,   115,     6,   116,     3,   116,     3,    -1,   169,    -1,
+      -1,   172,   115,     6,   116,     3,    -1,   173,    -1,    -1,
+     174,     3,   116,     3,    -1,    -1,   175,   176,   117,     3,
+     118,   182,   116,     3,    -1,    -1,     6,    -1,    -1,   178,
+       4,    -1,    10,    -1,    11,    -1,    -1,    12,    -1,    15,
+      -1,    -1,    10,    -1,    11,    -1,    12,    -1,    -1,    10,
+      -1,    11,    -1,    -1,    12,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   174,   174,   179,   182,   185,   188,   193,   208,   211,
+     216,   225,   230,   238,   241,   246,   248,   250,   255,   273,
+     281,   287,   295,   304,   309,   312,   317,   322,   325,   333,
+     340,   348,   354,   360,   366,   372,   380,   390,   395,   395,
+     396,   396,   397,   397,   401,   414,   427,   432,   437,   439,
+     444,   449,   451,   453,   458,   463,   468,   476,   484,   486,
+     491,   493,   495,   497,   502,   504,   506,   508,   513,   515,
+     517,   522,   527,   529,   531,   533,   538,   544,   552,   566,
+     571,   576,   581,   586,   591,   593,   595,   600,   605,   605,
+     606,   606,   607,   607,   608,   608,   609,   609,   610,   610,
+     611,   611,   612,   612,   613,   613,   614,   614,   615,   615,
+     616,   616,   617,   617,   618,   618,   619,   619,   623,   623,
+     624,   624,   625,   625,   626,   626,   630,   632,   634,   636,
+     639,   641,   643,   645,   650,   650,   651,   651,   652,   652,
+     653,   653,   654,   654,   655,   655,   656,   656,   660,   662,
+     667,   673,   679,   681,   683,   685,   691,   693,   695,   697,
+     699,   702,   713,   715,   720,   722,   727,   729,   734,   734,
+     735,   735,   736,   736,   737,   737,   741,   747,   752,   754,
+     759,   764,   770,   775,   778,   781,   786,   786,   787,   787,
+     788,   788,   789,   789,   790,   790,   795,   805,   807,   809,
+     811,   818,   820,   828,   830,   832,   838,   843,   844,   848,
+     849,   853,   855,   861,   863,   865,   872,   876,   878,   880,
+     885,   885,   888,   892,   892,   895,   895,   902,   903,   906,
+     906,   911,   912,   913,   914,   915,   918,   919,   920,   921,
+     924,   925,   926,   929,   930
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "REG", "FLAG", "CREG", "EXPR",
+  "UNKNOWN_OPCODE", "IS_OPCODE", "DOT_S", "DOT_B", "DOT_W", "DOT_L",
+  "DOT_A", "DOT_UB", "DOT_UW", "ABS", "ADC", "ADD", "AND_", "BCLR", "BCND",
+  "BMCND", "BNOT", "BRA", "BRK", "BSET", "BSR", "BTST", "CLRPSW", "CMP",
+  "DBT", "DIV", "DIVU", "EDIV", "EDIVU", "EMUL", "EMULU", "FADD", "FCMP",
+  "FDIV", "FMUL", "FREIT", "FSUB", "FTOI", "INT", "ITOF", "JMP", "JSR",
+  "MACHI", "MACLO", "MAX", "MIN", "MOV", "MOVU", "MUL", "MULHI", "MULLO",
+  "MULU", "MVFACHI", "MVFACMI", "MVFACLO", "MVFC", "MVTACHI", "MVTACLO",
+  "MVTC", "MVTIPL", "NEG", "NOP", "NOT", "OR", "POP", "POPC", "POPM",
+  "PUSH", "PUSHA", "PUSHC", "PUSHM", "RACW", "REIT", "REVL", "REVW",
+  "RMPA", "ROLC", "RORC", "ROTL", "ROTR", "ROUND", "RTE", "RTFI", "RTS",
+  "RTSD", "SAT", "SATR", "SBB", "SCCND", "SCMPU", "SETPSW", "SHAR", "SHLL",
+  "SHLR", "SMOVB", "SMOVF", "SMOVU", "SSTR", "STNZ", "STOP", "STZ", "SUB",
+  "SUNTIL", "SWHILE", "TST", "WAIT", "XCHG", "XOR", "'#'", "','", "'['",
+  "']'", "'-'", "'+'", "$accept", "statement", "@1", "@2", "@3", "@4",
+  "@5", "@6", "@7", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15",
+  "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25",
+  "@26", "@27", "@28", "@29", "@30", "@31", "@32", "@33", "@34", "@35",
+  "@36", "@37", "@38", "op_subadd", "op_dp20_rm_l", "op_dp20_rm",
+  "op_dp20_i", "op_dp20_rim", "op_dp20_rim_l", "op_dp20_rr", "op_xchg",
+  "op_shift_rot", "op_shift", "float2_op", "@39", "float2_op_ni", "@40",
+  "@41", "disp", "flag", "@42", "memex", "bwl", "bw", "opt_l", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,    35,    44,    91,    93,    45,
+      43
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,   121,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   123,   122,
+     124,   122,   125,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   126,   122,
+     127,   122,   128,   122,   129,   122,   130,   122,   131,   122,
+     132,   122,   133,   122,   134,   122,   135,   122,   136,   122,
+     137,   122,   138,   122,   139,   122,   140,   122,   141,   122,
+     142,   122,   143,   122,   144,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   145,   122,   146,   122,   147,   122,
+     148,   122,   149,   122,   150,   122,   151,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   152,   122,
+     153,   122,   154,   122,   155,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   156,   122,   157,   122,
+     158,   122,   159,   122,   160,   122,   122,   161,   161,   161,
+     161,   162,   162,   163,   163,   163,   164,   165,   165,   166,
+     166,   167,   167,   168,   168,   168,   169,   170,   170,   170,
+     172,   171,   171,   174,   173,   175,   173,   176,   176,   178,
+     177,   179,   179,   179,   179,   179,   180,   180,   180,   180,
+     181,   181,   181,   182,   182
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     1,     1,     2,     3,     3,
+       2,     3,     3,     3,     3,     3,     3,     3,     2,     9,
+       9,     9,     7,     4,     8,     8,     5,     7,     8,     5,
+       5,     5,     5,     5,     5,     6,     5,     3,     0,     3,
+       0,     3,     0,     3,     4,     4,     7,     3,     5,     5,
+       5,     2,     2,     2,     3,     2,     2,     2,     2,     2,
+       2,     2,     3,     3,     1,     1,     1,     1,     2,     2,
+       2,     2,     1,     1,     1,     1,     3,     8,     8,     7,
+      10,    11,     5,     7,     9,     9,     9,     6,     0,     3,
+       0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
+       0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
+       0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
+       0,     3,     0,     3,     0,     3,     4,     4,     4,     4,
+       8,     8,     8,     8,     0,     3,     0,     3,     0,     3,
+       0,     3,     0,     3,     0,     3,     0,     3,     3,     6,
+       9,     9,     4,     4,     4,     4,     2,     2,     2,     2,
+       2,     3,     8,     8,     8,     8,     8,     8,     0,     3,
+       0,     3,     0,     3,     0,     3,     4,     4,     5,     5,
+       5,     5,     5,     9,     9,     9,     0,     3,     0,     3,
+       0,     3,     0,     3,     0,     3,     5,     3,     7,     7,
+       5,     3,     7,     3,     7,     7,     4,     1,     1,     1,
+       1,     3,     1,     3,     7,     7,     3,     4,     6,     1,
+       0,     5,     1,     0,     4,     0,     8,     0,     1,     0,
+       2,     1,     1,     0,     1,     1,     0,     1,     1,     1,
+       0,     1,     1,     0,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     2,    94,    92,   188,   192,     0,     0,     0,     0,
+     243,     3,     0,   243,     0,   229,   227,     4,   104,   106,
+     118,   120,   138,   136,   142,   140,   134,   144,     0,   124,
+       0,     0,     0,     0,    96,    98,   236,   240,   190,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    90,
+       6,   112,   194,     0,     0,     0,   236,     0,     0,     0,
+     174,   172,   236,     0,     0,   168,   170,   146,    73,    72,
+       5,     0,     0,    75,    88,   236,    64,   229,    40,    42,
+      38,    66,    67,    65,   236,   116,   114,   186,   236,   236,
+     108,    74,   122,   110,     0,     0,   227,     0,   227,     0,
+     227,     0,     0,    18,     0,     0,     0,     0,     0,     0,
+       7,     0,     0,     0,   244,     0,     0,     0,     0,    10,
+       0,     0,     0,     0,     0,    59,     0,     0,   228,     0,
+       0,   227,   227,     0,   227,     0,   227,   225,   225,   225,
+     225,   225,   225,     0,   227,    60,    61,     0,     0,   227,
+     227,   237,   238,   239,     0,     0,   241,   242,     0,     0,
+     227,     0,     0,   158,   159,   160,     0,   156,   157,     0,
+       0,     0,     0,     0,     0,   227,    55,    57,     0,   237,
+     238,   239,   227,    56,     0,     0,     0,     0,    71,    53,
+      52,     0,     0,     0,     0,   225,     0,    51,     0,   227,
+     239,   227,    58,     0,     0,     0,    70,     0,     0,     0,
+     227,    68,    69,   227,   227,   227,     1,   212,    95,     0,
+       0,   209,   210,    93,     0,     0,     0,   189,     0,     0,
+     193,   227,     0,    12,    13,    17,     0,   227,     0,     9,
+      14,    15,     8,    62,   227,     0,    16,    11,    63,   227,
+       0,   230,     0,     0,     0,     0,   207,   208,   105,     0,
+     107,   101,     0,   119,     0,   103,   121,   139,     0,   222,
+       0,   227,   137,   143,   141,   135,   145,    47,   125,     0,
+       0,    97,    99,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   191,     0,     0,     0,     0,     0,
+      76,    91,   113,     0,   195,     0,    54,     0,     0,   161,
+       0,   175,   173,     0,   169,     0,   171,   147,    37,     0,
+      89,   148,     0,     0,   219,    41,    43,    39,   117,   115,
+       0,   187,   109,   123,   111,     0,     0,     0,     0,     0,
+       0,     0,     0,   127,     0,   227,   227,   129,     0,   227,
+     126,     0,   227,   128,     0,   227,    23,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   154,   155,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   152,   153,   177,   176,     0,     0,    45,     0,    44,
+       0,     0,     0,     0,     0,     0,     0,     0,   211,   201,
+       0,     0,    31,   197,     0,    33,     0,    49,     0,   181,
+       0,     0,   182,     0,     0,    48,     0,     0,    50,     0,
+      30,   233,   203,     0,   213,     0,     0,     0,     0,   227,
+     227,   227,    36,    82,     0,     0,     0,     0,     0,     0,
+       0,    26,     0,     0,     0,     0,     0,    32,   180,    34,
+       0,   216,   178,   179,     0,   196,     0,     0,    29,   206,
+     243,     0,     0,   233,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   231,   232,   234,     0,   235,     0,   233,
+     233,     0,   224,     0,     0,     0,    35,     0,     0,     0,
+       0,     0,     0,   227,     0,     0,     0,     0,     0,     0,
+       0,    87,     0,   149,   217,     0,    46,   200,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   221,   243,     0,     0,     0,
+       0,     0,    79,     0,     0,   227,     0,    83,     0,     0,
+       0,     0,     0,    27,     0,     0,    22,     0,     0,     0,
+       0,   131,     0,     0,   133,     0,   130,     0,   132,     0,
+      24,    25,     0,     0,     0,     0,     0,     0,     0,     0,
+      77,     0,   162,   163,    78,     0,     0,     0,   164,   165,
+      28,     0,   166,   167,   218,   202,   198,   199,    85,   150,
+     151,    84,    86,   204,   205,   214,   215,     0,    19,    20,
+      21,   183,     0,   184,     0,   185,   226,     0,    80,    81
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,    94,   205,   203,   204,   199,   172,    96,    95,   149,
+     150,   133,   135,   131,   132,   213,   215,   173,   208,   207,
+     134,   136,   214,   144,   141,   138,   137,   140,   139,   142,
+     195,   192,   194,   187,   186,   210,    98,   160,   100,   175,
+     227,   221,   256,   257,   258,   223,   218,   263,   324,   325,
+     267,   268,   269,   270,   271,   259,   125,   126,   478,   155,
+     158,   116
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -432
+static const yytype_int16 yypact[] =
+{
+     504,  -432,  -432,  -432,   -80,   -73,    16,    47,   -27,    18,
+      34,  -432,    19,    59,    20,  -432,     1,  -432,  -432,  -432,
+     -20,    -9,  -432,  -432,  -432,  -432,  -432,  -432,    15,  -432,
+     137,   174,   177,   181,  -432,  -432,    17,   168,    73,   186,
+     187,   188,   189,   190,   191,   192,   194,    21,    84,  -432,
+    -432,  -432,    85,   198,   197,   200,   100,   199,   202,    91,
+    -432,  -432,   100,   204,   205,    94,    95,  -432,  -432,  -432,
+    -432,    96,   209,  -432,    99,   164,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,   100,  -432,  -432,   101,   100,   100,
+    -432,  -432,  -432,  -432,   213,   214,    12,   212,    30,   216,
+      30,   103,   217,  -432,   218,   219,   220,   221,   104,   223,
+    -432,   224,   225,   226,  -432,   228,   232,   120,   231,  -432,
+     233,   234,   235,   125,   236,  -432,   239,   128,  -432,   240,
+     130,    14,    14,   133,    98,   133,    98,    22,    22,    22,
+      22,    22,   242,   243,    98,  -432,  -432,   134,   135,    14,
+      14,   138,   139,   141,   246,     6,  -432,  -432,     7,   251,
+      30,   142,   146,  -432,  -432,  -432,   147,  -432,  -432,   148,
+     253,   254,   214,   214,   255,    30,  -432,  -432,   152,  -432,
+    -432,  -432,   136,  -432,   153,   259,   263,   263,  -432,  -432,
+    -432,   261,   263,   262,   263,   242,   264,  -432,   267,   143,
+     266,   268,  -432,    23,    23,    23,  -432,   133,   133,   269,
+      30,  -432,  -432,    14,    98,    14,  -432,   160,  -432,   162,
+     271,  -432,  -432,  -432,   163,   169,   170,  -432,   171,   173,
+    -432,   144,   175,  -432,  -432,  -432,   176,   145,   178,  -432,
+    -432,  -432,  -432,  -432,   149,   179,  -432,  -432,  -432,   150,
+     180,  -432,   276,   182,   278,   183,  -432,  -432,  -432,   184,
+    -432,  -432,   193,  -432,   185,  -432,  -432,  -432,   172,  -432,
+     279,   268,  -432,  -432,  -432,  -432,  -432,  -432,  -432,   280,
+     281,  -432,  -432,   284,   287,   291,   195,   196,   201,     0,
+     203,   206,     2,   208,  -432,   297,   300,   301,   302,   210,
+    -432,  -432,  -432,   211,  -432,   303,  -432,   215,   305,  -432,
+     222,  -432,  -432,   227,  -432,   229,  -432,  -432,   230,   237,
+    -432,  -432,   238,   299,  -432,  -432,  -432,  -432,  -432,  -432,
+     241,  -432,  -432,  -432,  -432,   307,   310,   244,   311,   312,
+     313,   314,   317,  -432,   245,   151,   155,  -432,   247,   157,
+    -432,   248,   159,  -432,   249,   161,  -432,   318,   207,   319,
+     325,   328,   331,   329,   252,   250,  -432,  -432,   256,   257,
+     258,   334,     8,   337,   -37,   338,   339,   341,   -11,   344,
+     345,  -432,  -432,  -432,  -432,   346,   347,  -432,   349,  -432,
+     351,   353,   355,   356,   358,   360,   260,   366,  -432,  -432,
+     367,   265,   270,   272,   273,  -432,   368,  -432,   275,  -432,
+     277,   372,  -432,   282,   374,  -432,   283,   375,  -432,   285,
+    -432,    63,  -432,   286,  -432,   288,   274,   376,   377,   268,
+     268,   165,  -432,  -432,   290,     3,   292,   378,   289,   293,
+     294,  -432,   298,   379,   304,   306,   308,  -432,  -432,  -432,
+     309,  -432,  -432,  -432,   315,  -432,   320,   381,  -432,  -432,
+     373,   384,   386,    75,   321,   390,   392,   322,   393,   323,
+     394,   324,   395,  -432,  -432,  -432,   316,  -432,   327,    82,
+      88,   398,  -432,   326,   330,   332,  -432,   333,   400,    25,
+     405,   335,   336,   166,   340,   342,   343,   348,   406,   352,
+     354,  -432,   414,  -432,   357,   359,  -432,  -432,   362,   363,
+     408,   364,   365,   409,   369,   411,   370,   412,   371,   420,
+     422,   380,   382,   383,   385,  -432,   373,   425,   426,   427,
+     387,   428,  -432,   388,   389,   167,   396,  -432,   350,   430,
+     432,   433,   397,  -432,   434,   442,  -432,   443,   449,   450,
+     452,  -432,   447,   451,  -432,   453,  -432,   454,  -432,   455,
+    -432,  -432,   457,   459,   466,   468,   399,   391,   421,   444,
+    -432,   461,  -432,  -432,  -432,   401,   469,   471,  -432,  -432,
+    -432,   473,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,   477,  -432,  -432,
+    -432,  -432,   478,  -432,   465,  -432,  -432,   492,  -432,  -432
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+     -84,   295,  -432,   -94,   -98,  -432,     9,  -106,  -132,   -18,
+     -72,  -432,  -134,  -432,  -432,   -16,   407,  -432,  -431,   -25,
+    -432,   -12
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -224
+static const yytype_int16 yytable[] =
+{
+     130,   122,   222,   374,   127,   378,   489,   128,   276,   287,
+     290,   433,   288,   291,   434,   219,   230,   255,   128,   101,
+     128,   108,   117,   123,   169,  -223,   310,   151,   152,   153,
+     266,   182,   509,   226,   260,    97,   128,   188,   278,   261,
+     110,   265,    99,   111,   112,   113,   114,   115,   522,   524,
+     201,   281,   282,   103,   311,   312,   104,   105,   106,   206,
+     314,   317,   316,   211,   212,   119,   272,   273,   274,   275,
+     120,   114,   121,   473,   474,   475,   294,   476,   477,   437,
+     224,   438,   228,   439,   228,   473,   474,   475,   107,   508,
+     477,   304,   473,   474,   475,  -100,   521,   477,   473,   474,
+     475,   262,   523,   477,   128,   443,  -102,   444,   333,   445,
+     179,   180,   181,   328,   329,   332,   129,   334,   264,   375,
+     264,   379,   490,   289,   292,   435,   331,   220,   264,   220,
+     143,   102,   154,   109,   118,   124,   170,  -220,   323,   306,
+     145,   531,   128,   532,   228,   533,   219,   343,   347,   128,
+     128,   128,   350,   353,   407,   128,   128,   128,   409,   228,
+     412,   128,   415,   128,   418,   128,   307,   128,   486,   537,
+     574,   128,   128,   128,   179,   180,   200,   146,   156,   157,
+     147,   301,   302,   224,   148,   322,   326,   327,   159,   161,
+     162,   163,   164,   165,   228,   167,   166,   168,   264,   171,
+     174,   176,   177,   178,   183,   184,   185,   189,   190,   191,
+     193,   196,   197,   216,   198,   344,   209,   217,   225,   231,
+     237,   348,   229,   232,   233,   234,   235,   236,   351,   238,
+     239,   240,   241,   354,   242,   243,   244,   245,   248,   246,
+     247,   249,   250,   251,   252,  -223,   253,   254,   220,   277,
+     279,   280,   286,   283,   284,   365,   285,   293,   295,   299,
+     300,   303,   296,   297,   298,   309,   310,   313,   315,   321,
+     318,   305,   308,   319,   128,   330,   335,   337,   336,   356,
+     338,   358,   364,   366,   367,   339,   340,   363,   341,   342,
+     368,   345,   346,   369,   349,   352,   355,   370,   357,   359,
+     381,   360,   362,   382,   383,   396,   387,   384,   389,   361,
+     398,   371,   372,   399,   401,   402,   403,   404,   373,   376,
+     405,   420,   422,   377,   380,   421,   385,   386,   423,   408,
+     410,   424,   388,   413,   425,   426,   416,   432,   390,   419,
+     436,   440,   441,   391,   442,   392,   393,   446,   447,     0,
+     449,   448,   450,   394,   451,   395,   452,   397,   453,   454,
+     400,   455,   406,   456,   411,   414,   417,   428,   427,   458,
+     459,   464,   429,   430,   431,   467,   457,   469,   471,   482,
+     483,   492,   497,   460,   504,   114,   461,   506,   462,   507,
+     481,   463,   465,   511,   466,   512,   514,   516,   518,   468,
+     470,   525,   472,   530,   479,   493,   480,   488,   534,   543,
+     491,   494,   495,   484,   485,   487,   496,   546,   551,   554,
+     498,   556,   558,   560,   499,   561,   500,   501,   567,   568,
+     569,   571,   519,   578,   502,   579,   580,   582,   503,   510,
+     513,   515,   517,   520,   526,   583,   584,   527,   505,   528,
+     529,   535,   585,   586,   536,   587,   539,   588,   540,   541,
+     593,   589,   594,   590,   591,   592,   542,   577,   544,   595,
+     545,   596,   603,   547,   604,   548,   605,   538,   549,   550,
+     606,   607,   552,   553,   202,     0,     0,   555,   557,   559,
+       0,     0,     0,     0,   320,     0,   562,     0,   563,   564,
+       0,   565,     0,     0,     0,   570,   572,   573,     0,   598,
+       0,     1,   576,   581,   566,   597,     0,     0,   602,   575,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,   599,
+      20,    21,    22,    23,    24,    25,     0,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,   600,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,   601,
+      57,    58,    59,   608,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+     609,    86,    87,    88,    89,    90,    91,    92,    93
+};
+
+static const yytype_int16 yycheck[] =
+{
+      16,    13,    96,     3,     3,     3,     3,     6,   142,     3,
+       3,     3,     6,     6,     6,     3,   100,     3,     6,     3,
+       6,     3,     3,     3,     3,     3,     3,    10,    11,    12,
+     136,    56,   463,     3,   132,   115,     6,    62,   144,   133,
+       6,   135,   115,     9,    10,    11,    12,    13,   479,   480,
+      75,   149,   150,     6,   186,   187,     9,    10,    11,    84,
+     192,   195,   194,    88,    89,     6,   138,   139,   140,   141,
+      11,    12,    13,    10,    11,    12,   160,    14,    15,   116,
+      96,   118,    98,   120,   100,    10,    11,    12,   115,    14,
+      15,   175,    10,    11,    12,   115,    14,    15,    10,    11,
+      12,     3,    14,    15,     6,   116,   115,   118,   214,   120,
+      10,    11,    12,   207,   208,   213,   115,   215,   134,   119,
+     136,   119,   119,   117,   117,   117,   210,   115,   144,   115,
+     115,   115,   115,   115,   115,   115,   115,   115,   115,     3,
+       3,   116,     6,   118,   160,   120,     3,     3,     3,     6,
+       6,     6,     3,     3,     3,     6,     6,     6,     3,   175,
+       3,     6,     3,     6,     3,     6,   182,     6,     3,     3,
+       3,     6,     6,     6,    10,    11,    12,     3,    10,    11,
+       3,   172,   173,   199,     3,   201,   204,   205,   115,     3,
+       3,     3,     3,     3,   210,     3,     5,     3,   214,   115,
+     115,     3,     5,     3,     5,     3,   115,     3,     3,   115,
+     115,   115,     3,     0,   115,   231,   115,     3,     6,   116,
+     116,   237,     6,     6,     6,     6,     6,     6,   244,     6,
+       6,     6,     6,   249,     6,     3,   116,     6,     3,     6,
+       6,   116,     6,     4,   116,     3,     6,   117,   115,     6,
+     116,   116,     6,   115,   115,   271,   115,     6,   116,     6,
+       6,     6,   116,   116,   116,     6,     3,     6,     6,     3,
+       6,   119,   119,     6,     6,     6,   116,     6,   116,     3,
+     117,     3,     3,     3,     3,   116,   116,   115,   117,   116,
+       6,   116,   116,     6,   116,   116,   116,     6,   116,   116,
+       3,   117,   117,     3,     3,     6,     3,     5,     3,   116,
+       3,   116,   116,     3,     3,     3,     3,     3,   117,   116,
+       3,     3,     3,   117,   116,   118,   116,   116,     3,   345,
+     346,     3,   117,   349,     3,     6,   352,     3,   116,   355,
+       3,     3,     3,   116,     3,   116,   116,     3,     3,    -1,
+       3,     5,     3,   116,     3,   117,     3,   116,     3,     3,
+     116,     3,   117,     3,   117,   117,   117,   117,   116,     3,
+       3,     3,   116,   116,   116,     3,   116,     3,     3,     3,
+       3,     3,     3,   118,     3,    12,   116,     3,   116,     3,
+     116,   118,   117,     3,   117,     3,     3,     3,     3,   117,
+     117,     3,   117,     3,   118,   116,   118,   117,     3,     3,
+     118,   118,   118,   429,   430,   431,   118,     3,    10,    10,
+     116,    10,    10,     3,   118,     3,   118,   118,     3,     3,
+       3,     3,   116,     3,   119,     3,     3,     3,   118,   118,
+     118,   118,   118,   116,   118,     3,     3,   117,   460,   117,
+     117,   116,     3,     3,   118,     3,   116,    10,   116,   116,
+       3,    10,     3,    10,    10,    10,   118,   117,   116,     3,
+     116,     3,     3,   116,     3,   116,     3,   493,   116,   116,
+       3,     3,   118,   118,    77,    -1,    -1,   118,   118,   118,
+      -1,    -1,    -1,    -1,   199,    -1,   116,    -1,   116,   116,
+      -1,   116,    -1,    -1,    -1,   118,   118,   118,    -1,   118,
+      -1,     7,   116,   116,   526,   116,    -1,    -1,   117,   535,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    -1,   118,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,   118,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,   118,
+      76,    77,    78,   118,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     118,   107,   108,   109,   110,   111,   112,   113,   114
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     7,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      36,    37,    38,    39,    40,    41,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    76,    77,    78,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   107,   108,   109,   110,
+     111,   112,   113,   114,   122,   129,   128,   115,   157,   115,
+     159,     3,   115,     6,     9,    10,    11,   115,     3,   115,
+       6,     9,    10,    11,    12,    13,   182,     3,   115,     6,
+      11,    13,   182,     3,   115,   177,   178,     3,     6,   115,
+     176,   134,   135,   132,   141,   133,   142,   147,   146,   149,
+     148,   145,   150,   115,   144,     3,     3,     3,     3,   130,
+     131,    10,    11,    12,   115,   180,    10,    11,   181,   115,
+     158,     3,     3,     3,     3,     3,     5,     3,     3,     3,
+     115,   115,   127,   138,   115,   160,     3,     5,     3,    10,
+      11,    12,   180,     5,     3,   115,   155,   154,   180,     3,
+       3,   115,   152,   115,   153,   151,   115,     3,   115,   126,
+      12,   180,   177,   124,   125,   123,   180,   140,   139,   115,
+     156,   180,   180,   136,   143,   137,     0,     3,   167,     3,
+     115,   162,   164,   166,   176,     6,     3,   161,   176,     6,
+     161,   116,     6,     6,     6,     6,     6,   116,     6,     6,
+       6,     6,     6,     3,   116,     6,     6,     6,     3,   116,
+       6,     4,   116,     6,   117,     3,   163,   164,   165,   176,
+     165,   164,     3,   168,   176,   164,   168,   171,   172,   173,
+     174,   175,   171,   171,   171,   171,   173,     6,   168,   116,
+     116,   165,   165,   115,   115,   115,     6,     3,     6,   117,
+       3,     6,   117,     6,   161,   116,   116,   116,   116,     6,
+       6,   167,   167,     6,   161,   119,     3,   176,   119,     6,
+       3,   169,   169,     6,   169,     6,   169,   173,     6,     6,
+     162,     3,   176,   115,   169,   170,   170,   170,   164,   164,
+       6,   161,   165,   168,   165,   116,   116,     6,   117,   116,
+     116,   117,   116,     3,   176,   116,   116,     3,   176,   116,
+       3,   176,   116,     3,   176,   116,     3,   116,     3,   116,
+     117,   116,   117,   115,     3,   176,     3,     3,     6,     6,
+       6,   116,   116,   117,     3,   119,   116,   117,     3,   119,
+     116,     3,     3,     3,     5,   116,   116,     3,   117,     3,
+     116,   116,   116,   116,   116,   117,     6,   116,     3,     3,
+     116,     3,     3,     3,     3,     3,   117,     3,   176,     3,
+     176,   117,     3,   176,   117,     3,   176,   117,     3,   176,
+       3,   118,     3,     3,     3,     3,     6,   116,   117,   116,
+     116,   116,     3,     3,     6,   117,     3,   116,   118,   120,
+       3,     3,     3,   116,   118,   120,     3,     3,     5,     3,
+       3,     3,     3,     3,     3,     3,     3,   116,     3,     3,
+     118,   116,   116,   118,     3,   117,   117,     3,   117,     3,
+     117,     3,   117,    10,    11,    12,    14,    15,   179,   118,
+     118,   116,     3,     3,   176,   176,     3,   176,   117,     3,
+     119,   118,     3,   116,   118,   118,   118,     3,   116,   118,
+     118,   118,   119,   118,     3,   182,     3,     3,    14,   179,
+     118,     3,     3,   118,     3,   118,     3,   118,     3,   116,
+     116,    14,   179,    14,   179,     3,   118,   117,   117,   117,
+       3,   116,   118,   120,     3,   116,   118,     3,   176,   116,
+     116,   116,   118,     3,   116,   116,     3,   116,   116,   116,
+     116,    10,   118,   118,    10,   118,    10,   118,    10,   118,
+       3,     3,   116,   116,   116,   116,   182,     3,     3,     3,
+     118,     3,   118,   118,     3,   176,   116,   117,     3,     3,
+       3,   116,     3,     3,     3,     3,     3,     3,    10,    10,
+      10,    10,    10,     3,     3,     3,     3,   116,   118,   118,
+     118,   118,   117,     3,     3,     3,     3,     3,   118,   118
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+#line 175 "rx-parse.y"
+    { as_bad (_("Unknown opcode: %s"), rx_init_start); }
+    break;
+
+  case 3:
+#line 180 "rx-parse.y"
+    { B1 (0x00); }
+    break;
+
+  case 4:
+#line 183 "rx-parse.y"
+    { B1 (0x01); }
+    break;
+
+  case 5:
+#line 186 "rx-parse.y"
+    { B1 (0x02); }
+    break;
+
+  case 6:
+#line 189 "rx-parse.y"
+    { B1 (0x03); }
+    break;
+
+  case 7:
+#line 194 "rx-parse.y"
+    { if (rx_disp3op ((yyvsp[(2) - (2)].exp)))
+	      { B1 (0x08); rx_disp3 ((yyvsp[(2) - (2)].exp), 5); }
+	    else if (rx_intop ((yyvsp[(2) - (2)].exp), 8, 8))
+	      { B1 (0x2e); PC1 ((yyvsp[(2) - (2)].exp)); }
+	    else if (rx_intop ((yyvsp[(2) - (2)].exp), 16, 16))
+	      { B1 (0x38); PC2 ((yyvsp[(2) - (2)].exp)); }
+	    else if (rx_intop ((yyvsp[(2) - (2)].exp), 24, 24))
+	      { B1 (0x04); PC3 ((yyvsp[(2) - (2)].exp)); }
+	    else
+	      { rx_relax (RX_RELAX_BRANCH, 0);
+		rx_linkrelax_branch ();
+		/* We'll convert this to a longer one later if needed.  */
+		B1 (0x08); rx_disp3 ((yyvsp[(2) - (2)].exp), 5); } }
+    break;
+
+  case 8:
+#line 209 "rx-parse.y"
+    { B1 (0x04); PC3 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 9:
+#line 212 "rx-parse.y"
+    { B1 (0x08); rx_disp3 ((yyvsp[(3) - (3)].exp), 5); }
+    break;
+
+  case 10:
+#line 217 "rx-parse.y"
+    { if (rx_intop ((yyvsp[(2) - (2)].exp), 16, 16))
+	      { B1 (0x39); PC2 ((yyvsp[(2) - (2)].exp)); }
+	    else if (rx_intop ((yyvsp[(2) - (2)].exp), 24, 24))
+	      { B1 (0x05); PC3 ((yyvsp[(2) - (2)].exp)); }
+	    else
+	      { rx_relax (RX_RELAX_BRANCH, 0);
+		rx_linkrelax_branch ();
+		B1 (0x39); PC2 ((yyvsp[(2) - (2)].exp)); } }
+    break;
+
+  case 11:
+#line 226 "rx-parse.y"
+    { B1 (0x05), PC3 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 12:
+#line 231 "rx-parse.y"
+    { if ((yyvsp[(1) - (3)].regno) == COND_EQ || (yyvsp[(1) - (3)].regno) == COND_NE)
+	      { B1 ((yyvsp[(1) - (3)].regno) == COND_EQ ? 0x10 : 0x18); rx_disp3 ((yyvsp[(3) - (3)].exp), 5); }
+	    else
+	      as_bad (_("Only BEQ and BNE may have .S")); }
+    break;
+
+  case 13:
+#line 239 "rx-parse.y"
+    { B1 (0x20); F ((yyvsp[(1) - (3)].regno), 4, 4); PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 14:
+#line 242 "rx-parse.y"
+    { B1 (0x2e), PC1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 15:
+#line 247 "rx-parse.y"
+    { B1 (0x38), PC2 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 16:
+#line 249 "rx-parse.y"
+    { B1 (0x39), PC2 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 17:
+#line 251 "rx-parse.y"
+    { if ((yyvsp[(1) - (3)].regno) == COND_EQ || (yyvsp[(1) - (3)].regno) == COND_NE)
+	      { B1 ((yyvsp[(1) - (3)].regno) == COND_EQ ? 0x3a : 0x3b); PC2 ((yyvsp[(3) - (3)].exp)); }
+	    else
+	      as_bad (_("Only BEQ and BNE may have .W")); }
+    break;
+
+  case 18:
+#line 256 "rx-parse.y"
+    { if ((yyvsp[(1) - (2)].regno) == COND_EQ || (yyvsp[(1) - (2)].regno) == COND_NE)
+	      {
+		rx_relax (RX_RELAX_BRANCH, 0);
+		rx_linkrelax_branch ();
+		B1 ((yyvsp[(1) - (2)].regno) == COND_EQ ? 0x10 : 0x18); rx_disp3 ((yyvsp[(2) - (2)].exp), 5);
+	      }
+	    else
+	      {
+		rx_relax (RX_RELAX_BRANCH, 0);
+		/* This is because we might turn it into a
+		   jump-over-jump long branch.  */
+		rx_linkrelax_branch ();
+	        B1 (0x20); F ((yyvsp[(1) - (2)].regno), 4, 4); PC1 ((yyvsp[(2) - (2)].exp));
+	      } }
+    break;
+
+  case 19:
+#line 275 "rx-parse.y"
+    { if ((yyvsp[(8) - (9)].regno) <= 7 && rx_uintop ((yyvsp[(4) - (9)].exp), 8) && rx_disp5op0 (&(yyvsp[(6) - (9)].exp), BSIZE))
+	      { B2 (0x3c, 0); rx_field5s2 ((yyvsp[(6) - (9)].exp)); F ((yyvsp[(8) - (9)].regno), 9, 3); O1 ((yyvsp[(4) - (9)].exp)); }
+	    else
+	      { B2 (0xf8, 0x04); F ((yyvsp[(8) - (9)].regno), 8, 4); DSP ((yyvsp[(6) - (9)].exp), 6, BSIZE); O1 ((yyvsp[(4) - (9)].exp));
+	      if ((yyvsp[(4) - (9)].exp).X_op != O_constant && (yyvsp[(4) - (9)].exp).X_op != O_big) rx_linkrelax_imm (12); } }
+    break;
+
+  case 20:
+#line 282 "rx-parse.y"
+    { if ((yyvsp[(8) - (9)].regno) <= 7 && rx_uintop ((yyvsp[(4) - (9)].exp), 8) && rx_disp5op0 (&(yyvsp[(6) - (9)].exp), WSIZE))
+	      { B2 (0x3d, 0); rx_field5s2 ((yyvsp[(6) - (9)].exp)); F ((yyvsp[(8) - (9)].regno), 9, 3); O1 ((yyvsp[(4) - (9)].exp)); }
+	    else
+	      { B2 (0xf8, 0x01); F ((yyvsp[(8) - (9)].regno), 8, 4); DSP ((yyvsp[(6) - (9)].exp), 6, WSIZE); IMMW ((yyvsp[(4) - (9)].exp), 12); } }
+    break;
+
+  case 21:
+#line 288 "rx-parse.y"
+    { if ((yyvsp[(8) - (9)].regno) <= 7 && rx_uintop ((yyvsp[(4) - (9)].exp), 8) && rx_disp5op0 (&(yyvsp[(6) - (9)].exp), LSIZE))
+	      { B2 (0x3e, 0); rx_field5s2 ((yyvsp[(6) - (9)].exp)); F ((yyvsp[(8) - (9)].regno), 9, 3); O1 ((yyvsp[(4) - (9)].exp)); }
+	    else
+	      { B2 (0xf8, 0x02); F ((yyvsp[(8) - (9)].regno), 8, 4); DSP ((yyvsp[(6) - (9)].exp), 6, LSIZE); IMM ((yyvsp[(4) - (9)].exp), 12); } }
+    break;
+
+  case 22:
+#line 296 "rx-parse.y"
+    { B2 (0x3f, 0); F ((yyvsp[(5) - (7)].regno), 8, 4); F ((yyvsp[(7) - (7)].regno), 12, 4); rtsd_immediate ((yyvsp[(3) - (7)].exp));
+	    if ((yyvsp[(5) - (7)].regno) == 0)
+	      rx_error (_("RTSD cannot pop R0"));
+	    if ((yyvsp[(5) - (7)].regno) > (yyvsp[(7) - (7)].regno))
+	      rx_error (_("RTSD first reg must be <= second reg")); }
+    break;
+
+  case 23:
+#line 305 "rx-parse.y"
+    { B2 (0x47, 0); F ((yyvsp[(2) - (4)].regno), 8, 4); F ((yyvsp[(4) - (4)].regno), 12, 4); }
+    break;
+
+  case 24:
+#line 310 "rx-parse.y"
+    { B2 (0x44, 0); F ((yyvsp[(4) - (8)].regno), 8, 4); F ((yyvsp[(8) - (8)].regno), 12, 4); DSP ((yyvsp[(2) - (8)].exp), 6, BSIZE); }
+    break;
+
+  case 25:
+#line 313 "rx-parse.y"
+    { B3 (MEMEX, 0x04, 0); F ((yyvsp[(6) - (8)].regno), 8, 2);  F ((yyvsp[(4) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); DSP ((yyvsp[(2) - (8)].exp), 14, sizemap[(yyvsp[(6) - (8)].regno)]); }
+    break;
+
+  case 26:
+#line 318 "rx-parse.y"
+    { B2 (0x5b, 0x00); F ((yyvsp[(2) - (5)].regno), 5, 1); F ((yyvsp[(3) - (5)].regno), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+    break;
+
+  case 27:
+#line 323 "rx-parse.y"
+    { B2 (0x58, 0x00); F ((yyvsp[(2) - (7)].regno), 5, 1); F ((yyvsp[(4) - (7)].regno), 8, 4); F ((yyvsp[(7) - (7)].regno), 12, 4); }
+    break;
+
+  case 28:
+#line 326 "rx-parse.y"
+    { if ((yyvsp[(5) - (8)].regno) <= 7 && (yyvsp[(8) - (8)].regno) <= 7 && rx_disp5op (&(yyvsp[(3) - (8)].exp), (yyvsp[(2) - (8)].regno)))
+	      { B2 (0xb0, 0); F ((yyvsp[(2) - (8)].regno), 4, 1); F ((yyvsp[(5) - (8)].regno), 9, 3); F ((yyvsp[(8) - (8)].regno), 13, 3); rx_field5s ((yyvsp[(3) - (8)].exp)); }
+	    else
+	      { B2 (0x58, 0x00); F ((yyvsp[(2) - (8)].regno), 5, 1); F ((yyvsp[(5) - (8)].regno), 8, 4); F ((yyvsp[(8) - (8)].regno), 12, 4); DSP ((yyvsp[(3) - (8)].exp), 6, (yyvsp[(2) - (8)].regno)); } }
+    break;
+
+  case 29:
+#line 334 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x60, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else
+	      /* This is really an add, but we negate the immediate.  */
+	      { B2 (0x70, 0); F ((yyvsp[(5) - (5)].regno), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); NIMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 30:
+#line 341 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x61, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else if (rx_uintop ((yyvsp[(3) - (5)].exp), 8))
+	      { B2 (0x75, 0x50); F ((yyvsp[(5) - (5)].regno), 12, 4); UO1 ((yyvsp[(3) - (5)].exp)); }
+	    else
+	      { B2 (0x74, 0x00); F ((yyvsp[(5) - (5)].regno), 12, 4); IMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 31:
+#line 349 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x62, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else
+	      { B2 (0x70, 0); F ((yyvsp[(5) - (5)].regno), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); IMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 32:
+#line 355 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x63, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else
+	      { B2 (0x74, 0x10); F ((yyvsp[(5) - (5)].regno), 12, 4); IMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 33:
+#line 361 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x64, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else
+	      { B2 (0x74, 0x20); F ((yyvsp[(5) - (5)].regno), 12, 4); IMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 34:
+#line 367 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x65, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else
+	      { B2 (0x74, 0x30); F ((yyvsp[(5) - (5)].regno), 12, 4); IMM ((yyvsp[(3) - (5)].exp), 6); } }
+    break;
+
+  case 35:
+#line 373 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(4) - (6)].exp), 4))
+	      { B2 (0x66, 0); FE ((yyvsp[(4) - (6)].exp), 8, 4); F ((yyvsp[(6) - (6)].regno), 12, 4); }
+	    else if (rx_uintop ((yyvsp[(4) - (6)].exp), 8))
+	      { B2 (0x75, 0x40); F ((yyvsp[(6) - (6)].regno), 12, 4); UO1 ((yyvsp[(4) - (6)].exp)); }
+	    else
+	      { B2 (0xfb, 0x02); F ((yyvsp[(6) - (6)].regno), 8, 4); IMM ((yyvsp[(4) - (6)].exp), 12); } }
+    break;
+
+  case 36:
+#line 381 "rx-parse.y"
+    { if (rx_uintop ((yyvsp[(3) - (5)].exp), 4))
+	      { B2 (0x66, 0); FE ((yyvsp[(3) - (5)].exp), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+	    else if (rx_uintop ((yyvsp[(3) - (5)].exp), 8))
+	      { B2 (0x75, 0x40); F ((yyvsp[(5) - (5)].regno), 12, 4); UO1 ((yyvsp[(3) - (5)].exp)); }
+	    else
+	      { B2 (0xfb, 0x02); F ((yyvsp[(5) - (5)].regno), 8, 4); IMM ((yyvsp[(3) - (5)].exp), 12); } }
+    break;
+
+  case 37:
+#line 391 "rx-parse.y"
+    { B1 (0x67); rtsd_immediate ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 38:
+#line 395 "rx-parse.y"
+    { sub_op = 0; }
+    break;
+
+  case 40:
+#line 396 "rx-parse.y"
+    { sub_op = 1; }
+    break;
+
+  case 42:
+#line 397 "rx-parse.y"
+    { sub_op = 2; }
+    break;
+
+  case 44:
+#line 402 "rx-parse.y"
+    {
+	    if ((yyvsp[(2) - (4)].regno) == (yyvsp[(4) - (4)].regno))
+	      { B2 (0x7e, 0x80); F (LSIZE, 10, 2); F ((yyvsp[(2) - (4)].regno), 12, 4); }
+	    else
+	     { B2 (0x6e, 0); F ((yyvsp[(2) - (4)].regno), 8, 4); F ((yyvsp[(4) - (4)].regno), 12, 4); }
+	    if ((yyvsp[(2) - (4)].regno) == 0)
+	      rx_error (_("PUSHM cannot push R0"));
+	    if ((yyvsp[(2) - (4)].regno) > (yyvsp[(4) - (4)].regno))
+	      rx_error (_("PUSHM first reg must be <= second reg")); }
+    break;
+
+  case 45:
+#line 415 "rx-parse.y"
+    {
+	    if ((yyvsp[(2) - (4)].regno) == (yyvsp[(4) - (4)].regno))
+	      { B2 (0x7e, 0xb0); F ((yyvsp[(2) - (4)].regno), 12, 4); }
+	    else
+	      { B2 (0x6f, 0); F ((yyvsp[(2) - (4)].regno), 8, 4); F ((yyvsp[(4) - (4)].regno), 12, 4); }
+	    if ((yyvsp[(2) - (4)].regno) == 0)
+	      rx_error (_("POPM cannot pop R0"));
+	    if ((yyvsp[(2) - (4)].regno) > (yyvsp[(4) - (4)].regno))
+	      rx_error (_("POPM first reg must be <= second reg")); }
+    break;
+
+  case 46:
+#line 428 "rx-parse.y"
+    { B2 (0x70, 0x00); F ((yyvsp[(5) - (7)].regno), 8, 4); F ((yyvsp[(7) - (7)].regno), 12, 4); IMM ((yyvsp[(3) - (7)].exp), 6); }
+    break;
+
+  case 47:
+#line 433 "rx-parse.y"
+    { B2(0x75, 0x60), UO1 ((yyvsp[(3) - (3)].exp)); }
+    break;
+
+  case 48:
+#line 438 "rx-parse.y"
+    { B2 (0x78, 0); FE ((yyvsp[(3) - (5)].exp), 7, 5); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+    break;
+
+  case 49:
+#line 440 "rx-parse.y"
+    { B2 (0x7a, 0); FE ((yyvsp[(3) - (5)].exp), 7, 5); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+    break;
+
+  case 50:
+#line 445 "rx-parse.y"
+    { B2 (0x7c, 0x00); FE ((yyvsp[(3) - (5)].exp), 7, 5); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+    break;
+
+  case 51:
+#line 450 "rx-parse.y"
+    { B2 (0x7e, 0x30); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 52:
+#line 452 "rx-parse.y"
+    { B2 (0x7e, 0x40); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 53:
+#line 454 "rx-parse.y"
+    { B2 (0x7e, 0x50); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 54:
+#line 459 "rx-parse.y"
+    { B2 (0x7e, 0x80); F ((yyvsp[(2) - (3)].regno), 10, 2); F ((yyvsp[(3) - (3)].regno), 12, 4); }
+    break;
+
+  case 55:
+#line 464 "rx-parse.y"
+    { B2 (0x7e, 0xb0); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 56:
+#line 469 "rx-parse.y"
+    { if ((yyvsp[(2) - (2)].regno) < 16)
+	      { B2 (0x7e, 0xc0); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+	    else
+	      as_bad (_("PUSHC can only push the first 16 control registers")); }
+    break;
+
+  case 57:
+#line 477 "rx-parse.y"
+    { if ((yyvsp[(2) - (2)].regno) < 16)
+	      { B2 (0x7e, 0xe0); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+	    else
+	      as_bad (_("POPC can only pop the first 16 control registers")); }
+    break;
+
+  case 58:
+#line 485 "rx-parse.y"
+    { B2 (0x7f, 0xa0); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 59:
+#line 487 "rx-parse.y"
+    { B2 (0x7f, 0xb0); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 60:
+#line 492 "rx-parse.y"
+    { B2 (0x7f, 0x00); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 61:
+#line 494 "rx-parse.y"
+    { B2 (0x7f, 0x10); F ((yyvsp[(2) - (2)].regno), 12, 4); }
+    break;
+
+  case 62:
+#line 496 "rx-parse.y"
+    { B2 (0x7f, 0x40); F ((yyvsp[(3) - (3)].regno), 12, 4); }
+    break;
+
+  case 63:
+#line 498 "rx-parse.y"
+    { B2 (0x7f, 0x50); F ((yyvsp[(3) - (3)].regno), 12, 4); }
+    break;
+
+  case 64:
+#line 503 "rx-parse.y"
+    { B2 (0x7f, 0x83); }
+    break;
+
+  case 65:
+#line 505 "rx-parse.y"
+    { B2 (0x7f, 0x87); }
+    break;
+
+  case 66:
+#line 507 "rx-parse.y"
+    { B2 (0x7f, 0x8b); }
+    break;
+
+  case 67:
+#line 509 "rx-parse.y"
+    { B2 (0x7f, 0x8f); }
+    break;
+
+  case 68:
+#line 514 "rx-parse.y"
+    { B2 (0x7f, 0x80); F ((yyvsp[(2) - (2)].regno), 14, 2); }
+    break;
+
+  case 69:
+#line 516 "rx-parse.y"
+    { B2 (0x7f, 0x84); F ((yyvsp[(2) - (2)].regno), 14, 2); }
+    break;
+
+  case 70:
+#line 518 "rx-parse.y"
+    { B2 (0x7f, 0x88); F ((yyvsp[(2) - (2)].regno), 14, 2); }
+    break;
+
+  case 71:
+#line 523 "rx-parse.y"
+    { B2 (0x7f, 0x8c); F ((yyvsp[(2) - (2)].regno), 14, 2); }
+    break;
+
+  case 72:
+#line 528 "rx-parse.y"
+    { B2 (0x7f, 0x94); }
+    break;
+
+  case 73:
+#line 530 "rx-parse.y"
+    { B2 (0x7f, 0x95); }
+    break;
+
+  case 74:
+#line 532 "rx-parse.y"
+    { B2 (0x7f, 0x96); }
+    break;
+
+  case 75:
+#line 534 "rx-parse.y"
+    { B2 (0x7f, 0x93); }
+    break;
+
+  case 76:
+#line 539 "rx-parse.y"
+    { B3 (0x75, 0x70, 0x00); FE ((yyvsp[(3) - (3)].exp), 20, 4); }
+    break;
+
+  case 77:
+#line 545 "rx-parse.y"
+    { if ((yyvsp[(3) - (8)].regno) <= 7 && (yyvsp[(7) - (8)].regno) <= 7 && rx_disp5op (&(yyvsp[(5) - (8)].exp), (yyvsp[(2) - (8)].regno)))
+	      { B2 (0x80, 0); F ((yyvsp[(2) - (8)].regno), 2, 2); F ((yyvsp[(7) - (8)].regno), 9, 3); F ((yyvsp[(3) - (8)].regno), 13, 3); rx_field5s ((yyvsp[(5) - (8)].exp)); }
+	    else
+	      { B2 (0xc3, 0x00); F ((yyvsp[(2) - (8)].regno), 2, 2); F ((yyvsp[(7) - (8)].regno), 8, 4); F ((yyvsp[(3) - (8)].regno), 12, 4); DSP ((yyvsp[(5) - (8)].exp), 4, (yyvsp[(2) - (8)].regno)); }}
+    break;
+
+  case 78:
+#line 553 "rx-parse.y"
+    { if ((yyvsp[(5) - (8)].regno) <= 7 && (yyvsp[(8) - (8)].regno) <= 7 && rx_disp5op (&(yyvsp[(3) - (8)].exp), (yyvsp[(2) - (8)].regno)))
+	      { B2 (0x88, 0); F ((yyvsp[(2) - (8)].regno), 2, 2); F ((yyvsp[(5) - (8)].regno), 9, 3); F ((yyvsp[(8) - (8)].regno), 13, 3); rx_field5s ((yyvsp[(3) - (8)].exp)); }
+	    else
+	      { B2 (0xcc, 0x00); F ((yyvsp[(2) - (8)].regno), 2, 2); F ((yyvsp[(5) - (8)].regno), 8, 4); F ((yyvsp[(8) - (8)].regno), 12, 4); DSP ((yyvsp[(3) - (8)].exp), 6, (yyvsp[(2) - (8)].regno)); } }
+    break;
+
+  case 79:
+#line 567 "rx-parse.y"
+    { B2 (0xc3, 0x00); F ((yyvsp[(2) - (7)].regno), 2, 2); F ((yyvsp[(6) - (7)].regno), 8, 4); F ((yyvsp[(3) - (7)].regno), 12, 4); }
+    break;
+
+  case 80:
+#line 572 "rx-parse.y"
+    { B2 (0xc0, 0); F ((yyvsp[(2) - (10)].regno), 2, 2); F ((yyvsp[(4) - (10)].regno), 8, 4); F ((yyvsp[(9) - (10)].regno), 12, 4); DSP ((yyvsp[(7) - (10)].exp), 4, (yyvsp[(2) - (10)].regno)); }
+    break;
+
+  case 81:
+#line 577 "rx-parse.y"
+    { B2 (0xc0, 0x00); F ((yyvsp[(2) - (11)].regno), 2, 2); F ((yyvsp[(5) - (11)].regno), 8, 4); F ((yyvsp[(10) - (11)].regno), 12, 4); DSP ((yyvsp[(3) - (11)].exp), 6, (yyvsp[(2) - (11)].regno)); DSP ((yyvsp[(8) - (11)].exp), 4, (yyvsp[(2) - (11)].regno)); }
+    break;
+
+  case 82:
+#line 582 "rx-parse.y"
+    { B2 (0xcf, 0x00); F ((yyvsp[(2) - (5)].regno), 2, 2); F ((yyvsp[(3) - (5)].regno), 8, 4); F ((yyvsp[(5) - (5)].regno), 12, 4); }
+    break;
+
+  case 83:
+#line 587 "rx-parse.y"
+    { B2 (0xcc, 0x00); F ((yyvsp[(2) - (7)].regno), 2, 2); F ((yyvsp[(4) - (7)].regno), 8, 4); F ((yyvsp[(7) - (7)].regno), 12, 4); }
+    break;
+
+  case 84:
+#line 592 "rx-parse.y"
+    { B2 (0xf0, 0x00); F ((yyvsp[(7) - (9)].regno), 8, 4); FE ((yyvsp[(3) - (9)].exp), 13, 3); DSP ((yyvsp[(5) - (9)].exp), 6, BSIZE); }
+    break;
+
+  case 85:
+#line 594 "rx-parse.y"
+    { B2 (0xf0, 0x08); F ((yyvsp[(7) - (9)].regno), 8, 4); FE ((yyvsp[(3) - (9)].exp), 13, 3); DSP ((yyvsp[(5) - (9)].exp), 6, BSIZE); }
+    break;
+
+  case 86:
+#line 596 "rx-parse.y"
+    { B2 (0xf4, 0x00); F ((yyvsp[(7) - (9)].regno), 8, 4); FE ((yyvsp[(3) - (9)].exp), 13, 3); DSP ((yyvsp[(5) - (9)].exp), 6, BSIZE); }
+    break;
+
+  case 87:
+#line 601 "rx-parse.y"
+    { B2 (0xf4, 0x08); F ((yyvsp[(2) - (6)].regno), 14, 2); F ((yyvsp[(5) - (6)].regno), 8, 4); DSP ((yyvsp[(3) - (6)].exp), 6, (yyvsp[(2) - (6)].regno)); }
+    break;
+
+  case 88:
+#line 605 "rx-parse.y"
+    { sub_op = 0; }
+    break;
+
+  case 90:
+#line 606 "rx-parse.y"
+    { sub_op = 1; sub_op2 = 1; }
+    break;
+
+  case 92:
+#line 607 "rx-parse.y"
+    { sub_op = 2; }
+    break;
+
+  case 94:
+#line 608 "rx-parse.y"
+    { sub_op = 3; sub_op2 = 2; }
+    break;
+
+  case 96:
+#line 609 "rx-parse.y"
+    { sub_op = 4; }
+    break;
+
+  case 98:
+#line 610 "rx-parse.y"
+    { sub_op = 5; }
+    break;
+
+  case 100:
+#line 611 "rx-parse.y"
+    { sub_op = 6; }
+    break;
+
+  case 102:
+#line 612 "rx-parse.y"
+    { sub_op = 7; }
+    break;
+
+  case 104:
+#line 613 "rx-parse.y"
+    { sub_op = 8; }
+    break;
+
+  case 106:
+#line 614 "rx-parse.y"
+    { sub_op = 9; }
+    break;
+
+  case 108:
+#line 615 "rx-parse.y"
+    { sub_op = 12; }
+    break;
+
+  case 110:
+#line 616 "rx-parse.y"
+    { sub_op = 13; }
+    break;
+
+  case 112:
+#line 617 "rx-parse.y"
+    { sub_op = 14; sub_op2 = 0; }
+    break;
+
+  case 114:
+#line 618 "rx-parse.y"
+    { sub_op = 14; }
+    break;
+
+  case 116:
+#line 619 "rx-parse.y"
+    { sub_op = 15; }
+    break;
+
+  case 118:
+#line 623 "rx-parse.y"
+    { sub_op = 6; }
+    break;
+
+  case 120:
+#line 624 "rx-parse.y"
+    { sub_op = 7; }
+    break;
+
+  case 122:
+#line 625 "rx-parse.y"
+    { sub_op = 16; }
+    break;
+
+  case 124:
+#line 626 "rx-parse.y"
+    { sub_op = 17; }
+    break;
+
+  case 126:
+#line 631 "rx-parse.y"
+    { id24 (1, 0x63, 0x00); F ((yyvsp[(4) - (4)].regno), 16, 4); F ((yyvsp[(2) - (4)].regno), 20, 4); }
+    break;
+
+  case 127:
+#line 633 "rx-parse.y"
+    { id24 (1, 0x67, 0x00); F ((yyvsp[(4) - (4)].regno), 16, 4); F ((yyvsp[(2) - (4)].regno), 20, 4); }
+    break;
+
+  case 128:
+#line 635 "rx-parse.y"
+    { id24 (1, 0x6b, 0x00); F ((yyvsp[(4) - (4)].regno), 16, 4); F ((yyvsp[(2) - (4)].regno), 20, 4); }
+    break;
+
+  case 129:
+#line 637 "rx-parse.y"
+    { id24 (1, 0x6f, 0x00); F ((yyvsp[(4) - (4)].regno), 16, 4); F ((yyvsp[(2) - (4)].regno), 20, 4); }
+    break;
+
+  case 130:
+#line 640 "rx-parse.y"
+    { id24 (1, 0x60, 0x00); F ((yyvsp[(6) - (8)].regno), 16, 4); F ((yyvsp[(2) - (8)].regno), 20, 4); DSP ((yyvsp[(4) - (8)].exp), 14, BSIZE); }
+    break;
+
+  case 131:
+#line 642 "rx-parse.y"
+    { id24 (1, 0x64, 0x00); F ((yyvsp[(6) - (8)].regno), 16, 4); F ((yyvsp[(2) - (8)].regno), 20, 4); DSP ((yyvsp[(4) - (8)].exp), 14, BSIZE); }
+    break;
+
+  case 132:
+#line 644 "rx-parse.y"
+    { id24 (1, 0x68, 0x00); F ((yyvsp[(6) - (8)].regno), 16, 4); F ((yyvsp[(2) - (8)].regno), 20, 4); DSP ((yyvsp[(4) - (8)].exp), 14, BSIZE); }
+    break;
+
+  case 133:
+#line 646 "rx-parse.y"
+    { id24 (1, 0x6c, 0x00); F ((yyvsp[(6) - (8)].regno), 16, 4); F ((yyvsp[(2) - (8)].regno), 20, 4); DSP ((yyvsp[(4) - (8)].exp), 14, BSIZE); }
+    break;
+
+  case 134:
+#line 650 "rx-parse.y"
+    { sub_op = 0; }
+    break;
+
+  case 136:
+#line 651 "rx-parse.y"
+    { sub_op = 1; }
+    break;
+
+  case 138:
+#line 652 "rx-parse.y"
+    { sub_op = 2; }
+    break;
+
+  case 140:
+#line 653 "rx-parse.y"
+    { sub_op = 3; }
+    break;
+
+  case 142:
+#line 654 "rx-parse.y"
+    { sub_op = 4; }
+    break;
+
+  case 144:
+#line 655 "rx-parse.y"
+    { sub_op = 5; }
+    break;
+
+  case 146:
+#line 656 "rx-parse.y"
+    { sub_op = 6; }
+    break;
+
+  case 148:
+#line 661 "rx-parse.y"
+    { id24 (1, 0xdb, 0x00); F ((yyvsp[(1) - (3)].regno), 20, 4); F ((yyvsp[(3) - (3)].regno), 16, 4); }
+    break;
+
+  case 149:
+#line 663 "rx-parse.y"
+    { id24 (1, 0xd0, 0x00); F ((yyvsp[(1) - (6)].regno), 20, 4); F ((yyvsp[(2) - (6)].regno), 12, 2); F ((yyvsp[(5) - (6)].regno), 16, 4); DSP ((yyvsp[(3) - (6)].exp), 14, (yyvsp[(2) - (6)].regno)); }
+    break;
+
+  case 150:
+#line 668 "rx-parse.y"
+    { id24 (1, 0xe0, 0x00); F ((yyvsp[(1) - (9)].regno), 20, 4); FE ((yyvsp[(3) - (9)].exp), 11, 3);
+	      F ((yyvsp[(7) - (9)].regno), 16, 4); DSP ((yyvsp[(5) - (9)].exp), 14, BSIZE); }
+    break;
+
+  case 151:
+#line 674 "rx-parse.y"
+    { id24 (1, 0xe0, 0x0f); FE ((yyvsp[(3) - (9)].exp), 11, 3); F ((yyvsp[(7) - (9)].regno), 16, 4);
+	      DSP ((yyvsp[(5) - (9)].exp), 14, BSIZE); }
+    break;
+
+  case 152:
+#line 680 "rx-parse.y"
+    { id24 (2, 0x00, 0x00); F ((yyvsp[(2) - (4)].regno), 16, 4); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 153:
+#line 682 "rx-parse.y"
+    { id24 (2, 0x01, 0x00); F ((yyvsp[(2) - (4)].regno), 16, 4); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 154:
+#line 684 "rx-parse.y"
+    { id24 (2, 0x04, 0x00); F ((yyvsp[(2) - (4)].regno), 16, 4); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 155:
+#line 686 "rx-parse.y"
+    { id24 (2, 0x05, 0x00); F ((yyvsp[(2) - (4)].regno), 16, 4); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 156:
+#line 692 "rx-parse.y"
+    { id24 (2, 0x17, 0x00); F ((yyvsp[(2) - (2)].regno), 20, 4); }
+    break;
+
+  case 157:
+#line 694 "rx-parse.y"
+    { id24 (2, 0x17, 0x10); F ((yyvsp[(2) - (2)].regno), 20, 4); }
+    break;
+
+  case 158:
+#line 696 "rx-parse.y"
+    { id24 (2, 0x1f, 0x00); F ((yyvsp[(2) - (2)].regno), 20, 4); }
+    break;
+
+  case 159:
+#line 698 "rx-parse.y"
+    { id24 (2, 0x1f, 0x20); F ((yyvsp[(2) - (2)].regno), 20, 4); }
+    break;
+
+  case 160:
+#line 700 "rx-parse.y"
+    { id24 (2, 0x1f, 0x10); F ((yyvsp[(2) - (2)].regno), 20, 4); }
+    break;
+
+  case 161:
+#line 703 "rx-parse.y"
+    { id24 (2, 0x18, 0x00);
+	    if (rx_uintop ((yyvsp[(3) - (3)].exp), 4) && (yyvsp[(3) - (3)].exp).X_add_number == 1)
+	      ;
+	    else if (rx_uintop ((yyvsp[(3) - (3)].exp), 4) && (yyvsp[(3) - (3)].exp).X_add_number == 2)
+	      F (1, 19, 1);
+	    else
+	      as_bad (_("RACW expects #1 or #2"));}
+    break;
+
+  case 162:
+#line 714 "rx-parse.y"
+    { id24 (2, 0x20, 0); F ((yyvsp[(2) - (8)].regno), 14, 2); F ((yyvsp[(6) - (8)].regno), 16, 4); F ((yyvsp[(3) - (8)].regno), 20, 4); }
+    break;
+
+  case 163:
+#line 716 "rx-parse.y"
+    { id24 (2, 0x24, 0); F ((yyvsp[(2) - (8)].regno), 14, 2); F ((yyvsp[(7) - (8)].regno), 16, 4); F ((yyvsp[(3) - (8)].regno), 20, 4); }
+    break;
+
+  case 164:
+#line 721 "rx-parse.y"
+    { id24 (2, 0x28, 0); F ((yyvsp[(2) - (8)].regno), 14, 2); F ((yyvsp[(4) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); }
+    break;
+
+  case 165:
+#line 723 "rx-parse.y"
+    { id24 (2, 0x2c, 0); F ((yyvsp[(2) - (8)].regno), 14, 2); F ((yyvsp[(5) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); }
+    break;
+
+  case 166:
+#line 728 "rx-parse.y"
+    { id24 (2, 0x38, 0); F ((yyvsp[(2) - (8)].regno), 15, 1); F ((yyvsp[(4) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); }
+    break;
+
+  case 167:
+#line 730 "rx-parse.y"
+    { id24 (2, 0x3c, 0); F ((yyvsp[(2) - (8)].regno), 15, 1); F ((yyvsp[(5) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); }
+    break;
+
+  case 168:
+#line 734 "rx-parse.y"
+    { sub_op = 6; }
+    break;
+
+  case 170:
+#line 735 "rx-parse.y"
+    { sub_op = 4; }
+    break;
+
+  case 172:
+#line 736 "rx-parse.y"
+    { sub_op = 5; }
+    break;
+
+  case 174:
+#line 737 "rx-parse.y"
+    { sub_op = 7; }
+    break;
+
+  case 176:
+#line 742 "rx-parse.y"
+    { id24 (2, 0x68, 0x00); F ((yyvsp[(4) - (4)].regno) % 16, 20, 4); F ((yyvsp[(4) - (4)].regno) / 16, 15, 1);
+	    F ((yyvsp[(2) - (4)].regno), 16, 4); }
+    break;
+
+  case 177:
+#line 748 "rx-parse.y"
+    { id24 (2, 0x6a, 0); F ((yyvsp[(2) - (4)].regno), 15, 5); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 178:
+#line 753 "rx-parse.y"
+    { id24 (2, 0x6e, 0); FE ((yyvsp[(3) - (5)].exp), 15, 5); F ((yyvsp[(5) - (5)].regno), 20, 4); }
+    break;
+
+  case 179:
+#line 755 "rx-parse.y"
+    { id24 (2, 0x6c, 0); FE ((yyvsp[(3) - (5)].exp), 15, 5); F ((yyvsp[(5) - (5)].regno), 20, 4); }
+    break;
+
+  case 180:
+#line 760 "rx-parse.y"
+    { id24 (2, 0x73, 0x00); F ((yyvsp[(5) - (5)].regno), 19, 5); IMM ((yyvsp[(3) - (5)].exp), 12); }
+    break;
+
+  case 181:
+#line 765 "rx-parse.y"
+    { id24 (2, 0xe0, 0x00); F ((yyvsp[(1) - (5)].regno), 16, 4); FE ((yyvsp[(3) - (5)].exp), 11, 5);
+	      F ((yyvsp[(5) - (5)].regno), 20, 4); }
+    break;
+
+  case 182:
+#line 771 "rx-parse.y"
+    { id24 (2, 0xe0, 0xf0); FE ((yyvsp[(3) - (5)].exp), 11, 5); F ((yyvsp[(5) - (5)].regno), 20, 4); }
+    break;
+
+  case 183:
+#line 776 "rx-parse.y"
+    { id24 (3, 0x00, 0); F ((yyvsp[(2) - (9)].regno), 10, 2); F ((yyvsp[(6) - (9)].regno), 12, 4); F ((yyvsp[(8) - (9)].regno), 16, 4); F ((yyvsp[(3) - (9)].regno), 20, 4); }
+    break;
+
+  case 184:
+#line 779 "rx-parse.y"
+    { id24 (3, 0x40, 0); F ((yyvsp[(2) - (9)].regno), 10, 2); F ((yyvsp[(4) - (9)].regno), 12, 4); F ((yyvsp[(6) - (9)].regno), 16, 4); F ((yyvsp[(9) - (9)].regno), 20, 4); }
+    break;
+
+  case 185:
+#line 782 "rx-parse.y"
+    { id24 (3, 0xc0, 0); F ((yyvsp[(2) - (9)].regno), 10, 2); F ((yyvsp[(4) - (9)].regno), 12, 4); F ((yyvsp[(6) - (9)].regno), 16, 4); F ((yyvsp[(9) - (9)].regno), 20, 4); }
+    break;
+
+  case 186:
+#line 786 "rx-parse.y"
+    { sub_op = 0; }
+    break;
+
+  case 188:
+#line 787 "rx-parse.y"
+    { sub_op = 2; }
+    break;
+
+  case 190:
+#line 788 "rx-parse.y"
+    { sub_op = 3; }
+    break;
+
+  case 192:
+#line 789 "rx-parse.y"
+    { sub_op = 4; }
+    break;
+
+  case 194:
+#line 790 "rx-parse.y"
+    { sub_op = 5; }
+    break;
+
+  case 196:
+#line 796 "rx-parse.y"
+    { id24 (2, 0x70, 0x20); F ((yyvsp[(5) - (5)].regno), 20, 4); NBIMM ((yyvsp[(3) - (5)].exp), 12); }
+    break;
+
+  case 197:
+#line 806 "rx-parse.y"
+    { B2 (0x43 + (sub_op<<2), 0); F ((yyvsp[(1) - (3)].regno), 8, 4); F ((yyvsp[(3) - (3)].regno), 12, 4); }
+    break;
+
+  case 198:
+#line 808 "rx-parse.y"
+    { B2 (0x40 + (sub_op<<2), 0); F ((yyvsp[(3) - (7)].regno), 8, 4); F ((yyvsp[(7) - (7)].regno), 12, 4); DSP ((yyvsp[(1) - (7)].exp), 6, BSIZE); }
+    break;
+
+  case 199:
+#line 810 "rx-parse.y"
+    { B3 (MEMEX, sub_op<<2, 0); F ((yyvsp[(5) - (7)].regno), 8, 2); F ((yyvsp[(3) - (7)].regno), 16, 4); F ((yyvsp[(7) - (7)].regno), 20, 4); DSP ((yyvsp[(1) - (7)].exp), 14, sizemap[(yyvsp[(5) - (7)].regno)]); }
+    break;
+
+  case 200:
+#line 812 "rx-parse.y"
+    { id24 (4, sub_op<<4, 0), F ((yyvsp[(5) - (5)].regno), 12, 4), F ((yyvsp[(1) - (5)].regno), 16, 4), F ((yyvsp[(3) - (5)].regno), 20, 4); }
+    break;
+
+  case 201:
+#line 819 "rx-parse.y"
+    { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[(1) - (3)].regno), 16, 4); F ((yyvsp[(3) - (3)].regno), 20, 4); }
+    break;
+
+  case 202:
+#line 821 "rx-parse.y"
+    { B4 (MEMEX, 0xa0, 0x00 + sub_op, 0x00);
+	  F ((yyvsp[(3) - (7)].regno), 24, 4); F ((yyvsp[(7) - (7)].regno), 28, 4); DSP ((yyvsp[(1) - (7)].exp), 14, LSIZE); }
+    break;
+
+  case 203:
+#line 829 "rx-parse.y"
+    { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[(1) - (3)].regno), 16, 4); F ((yyvsp[(3) - (3)].regno), 20, 4); }
+    break;
+
+  case 204:
+#line 831 "rx-parse.y"
+    { id24 (1, 0x00 + (sub_op<<2), 0x00); F ((yyvsp[(3) - (7)].regno), 16, 4); F ((yyvsp[(7) - (7)].regno), 20, 4); DSP ((yyvsp[(1) - (7)].exp), 14, BSIZE); }
+    break;
+
+  case 205:
+#line 833 "rx-parse.y"
+    { B4 (MEMEX, 0x20 + ((yyvsp[(5) - (7)].regno) << 6), 0x00 + sub_op, 0x00);
+	  F ((yyvsp[(3) - (7)].regno), 24, 4); F ((yyvsp[(7) - (7)].regno), 28, 4); DSP ((yyvsp[(1) - (7)].exp), 14, sizemap[(yyvsp[(5) - (7)].regno)]); }
+    break;
+
+  case 206:
+#line 839 "rx-parse.y"
+    { id24 (2, 0x70, sub_op<<4); F ((yyvsp[(4) - (4)].regno), 20, 4); IMM ((yyvsp[(2) - (4)].exp), 12); }
+    break;
+
+  case 211:
+#line 854 "rx-parse.y"
+    { id24 (1, 0x03 + (sub_op<<2), 0x00); F ((yyvsp[(1) - (3)].regno), 16, 4); F ((yyvsp[(3) - (3)].regno), 20, 4); }
+    break;
+
+  case 212:
+#line 856 "rx-parse.y"
+    { B2 (0x7e, sub_op2 << 4); F ((yyvsp[(1) - (1)].regno), 12, 4); }
+    break;
+
+  case 213:
+#line 862 "rx-parse.y"
+    { id24 (1, 0x03 + (sub_op<<2), 0); F ((yyvsp[(1) - (3)].regno), 16, 4); F ((yyvsp[(3) - (3)].regno), 20, 4); }
+    break;
+
+  case 214:
+#line 864 "rx-parse.y"
+    { id24 (1, 0x00 + (sub_op<<2), 0); F ((yyvsp[(3) - (7)].regno), 16, 4); F ((yyvsp[(7) - (7)].regno), 20, 4); DSP ((yyvsp[(1) - (7)].exp), 14, BSIZE); }
+    break;
+
+  case 215:
+#line 866 "rx-parse.y"
+    { B4 (MEMEX, 0x20, 0x00 + sub_op, 0); F ((yyvsp[(5) - (7)].regno), 8, 2); F ((yyvsp[(3) - (7)].regno), 24, 4); F ((yyvsp[(7) - (7)].regno), 28, 4);
+	    DSP ((yyvsp[(1) - (7)].exp), 14, sizemap[(yyvsp[(5) - (7)].regno)]); }
+    break;
+
+  case 216:
+#line 873 "rx-parse.y"
+    { id24 (2, 0x60 + sub_op, 0); F ((yyvsp[(1) - (3)].regno), 16, 4); F ((yyvsp[(3) - (3)].regno), 20, 4); }
+    break;
+
+  case 217:
+#line 877 "rx-parse.y"
+    { B2 (0x68 + (sub_op<<1), 0); FE ((yyvsp[(2) - (4)].exp), 7, 5); F ((yyvsp[(4) - (4)].regno), 12, 4); }
+    break;
+
+  case 218:
+#line 879 "rx-parse.y"
+    { id24 (2, 0x80 + (sub_op << 5), 0); FE ((yyvsp[(2) - (6)].exp), 11, 5); F ((yyvsp[(4) - (6)].regno), 16, 4); F ((yyvsp[(6) - (6)].regno), 20, 4); }
+    break;
+
+  case 220:
+#line 885 "rx-parse.y"
+    { rx_check_float_support (); }
+    break;
+
+  case 221:
+#line 887 "rx-parse.y"
+    { id24 (2, 0x72, sub_op << 4); F ((yyvsp[(5) - (5)].regno), 20, 4); O4 ((yyvsp[(3) - (5)].exp)); }
+    break;
+
+  case 223:
+#line 892 "rx-parse.y"
+    { rx_check_float_support (); }
+    break;
+
+  case 224:
+#line 894 "rx-parse.y"
+    { id24 (1, 0x83 + (sub_op << 2), 0); F ((yyvsp[(2) - (4)].regno), 16, 4); F ((yyvsp[(4) - (4)].regno), 20, 4); }
+    break;
+
+  case 225:
+#line 895 "rx-parse.y"
+    { rx_check_float_support (); }
+    break;
+
+  case 226:
+#line 897 "rx-parse.y"
+    { id24 (1, 0x80 + (sub_op << 2), 0); F ((yyvsp[(4) - (8)].regno), 16, 4); F ((yyvsp[(8) - (8)].regno), 20, 4); DSP ((yyvsp[(2) - (8)].exp), 14, LSIZE); }
+    break;
+
+  case 227:
+#line 902 "rx-parse.y"
+    { (yyval.exp) = zero_expr (); }
+    break;
+
+  case 228:
+#line 903 "rx-parse.y"
+    { (yyval.exp) = (yyvsp[(1) - (1)].exp); }
+    break;
+
+  case 229:
+#line 906 "rx-parse.y"
+    { need_flag = 1; }
+    break;
+
+  case 230:
+#line 906 "rx-parse.y"
+    { need_flag = 0; (yyval.regno) = (yyvsp[(2) - (2)].regno); }
+    break;
+
+  case 231:
+#line 911 "rx-parse.y"
+    { (yyval.regno) = 0; }
+    break;
+
+  case 232:
+#line 912 "rx-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 233:
+#line 913 "rx-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 234:
+#line 914 "rx-parse.y"
+    { (yyval.regno) = 2; }
+    break;
+
+  case 235:
+#line 915 "rx-parse.y"
+    { (yyval.regno) = 3; }
+    break;
+
+  case 236:
+#line 918 "rx-parse.y"
+    { (yyval.regno) = LSIZE; }
+    break;
+
+  case 237:
+#line 919 "rx-parse.y"
+    { (yyval.regno) = BSIZE; }
+    break;
+
+  case 238:
+#line 920 "rx-parse.y"
+    { (yyval.regno) = WSIZE; }
+    break;
+
+  case 239:
+#line 921 "rx-parse.y"
+    { (yyval.regno) = LSIZE; }
+    break;
+
+  case 240:
+#line 924 "rx-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 241:
+#line 925 "rx-parse.y"
+    { (yyval.regno) = 0; }
+    break;
+
+  case 242:
+#line 926 "rx-parse.y"
+    { (yyval.regno) = 1; }
+    break;
+
+  case 243:
+#line 929 "rx-parse.y"
+    {}
+    break;
+
+  case 244:
+#line 930 "rx-parse.y"
+    {}
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 3318 "rx-parse.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 933 "rx-parse.y"
+
+/* ====================================================================== */
+
+static struct
+{
+  const char * string;
+  int          token;
+  int          val;
+}
+token_table[] =
+{
+  { "r0", REG, 0 },
+  { "r1", REG, 1 },
+  { "r2", REG, 2 },
+  { "r3", REG, 3 },
+  { "r4", REG, 4 },
+  { "r5", REG, 5 },
+  { "r6", REG, 6 },
+  { "r7", REG, 7 },
+  { "r8", REG, 8 },
+  { "r9", REG, 9 },
+  { "r10", REG, 10 },
+  { "r11", REG, 11 },
+  { "r12", REG, 12 },
+  { "r13", REG, 13 },
+  { "r14", REG, 14 },
+  { "r15", REG, 15 },
+
+  { "psw", CREG, 0 },
+  { "pc", CREG, 1 },
+  { "usp", CREG, 2 },
+  { "fpsw", CREG, 3 },
+  /* reserved */
+  /* reserved */
+  /* reserved */
+  { "wr", CREG, 7 },
+
+  { "bpsw", CREG, 8 },
+  { "bpc", CREG, 9 },
+  { "isp", CREG, 10 },
+  { "fintv", CREG, 11 },
+  { "intb", CREG, 12 },
+
+  { "pbp", CREG, 16 },
+  { "pben", CREG, 17 },
+
+  { "bbpsw", CREG, 24 },
+  { "bbpc", CREG, 25 },
+
+  { ".s", DOT_S, 0 },
+  { ".b", DOT_B, 0 },
+  { ".w", DOT_W, 0 },
+  { ".l", DOT_L, 0 },
+  { ".a", DOT_A , 0},
+  { ".ub", DOT_UB, 0 },
+  { ".uw", DOT_UW , 0},
+
+  { "c", FLAG, 0 },
+  { "z", FLAG, 1 },
+  { "s", FLAG, 2 },
+  { "o", FLAG, 3 },
+  { "i", FLAG, 8 },
+  { "u", FLAG, 9 },
+
+#define OPC(x) { #x, x, IS_OPCODE }
+  OPC(ABS),
+  OPC(ADC),
+  OPC(ADD),
+  { "and", AND_, IS_OPCODE },
+  OPC(BCLR),
+  OPC(BCND),
+  OPC(BMCND),
+  OPC(BNOT),
+  OPC(BRA),
+  OPC(BRK),
+  OPC(BSET),
+  OPC(BSR),
+  OPC(BTST),
+  OPC(CLRPSW),
+  OPC(CMP),
+  OPC(DBT),
+  OPC(DIV),
+  OPC(DIVU),
+  OPC(EDIV),
+  OPC(EDIVU),
+  OPC(EMUL),
+  OPC(EMULU),
+  OPC(FADD),
+  OPC(FCMP),
+  OPC(FDIV),
+  OPC(FMUL),
+  OPC(FREIT),
+  OPC(FSUB),
+  OPC(FTOI),
+  OPC(INT),
+  OPC(ITOF),
+  OPC(JMP),
+  OPC(JSR),
+  OPC(MVFACHI),
+  OPC(MVFACMI),
+  OPC(MVFACLO),
+  OPC(MVFC),
+  OPC(MVTACHI),
+  OPC(MVTACLO),
+  OPC(MVTC),
+  OPC(MVTIPL),
+  OPC(MACHI),
+  OPC(MACLO),
+  OPC(MAX),
+  OPC(MIN),
+  OPC(MOV),
+  OPC(MOVU),
+  OPC(MUL),
+  OPC(MULHI),
+  OPC(MULLO),
+  OPC(MULU),
+  OPC(NEG),
+  OPC(NOP),
+  OPC(NOT),
+  OPC(OR),
+  OPC(POP),
+  OPC(POPC),
+  OPC(POPM),
+  OPC(PUSH),
+  OPC(PUSHA),
+  OPC(PUSHC),
+  OPC(PUSHM),
+  OPC(RACW),
+  OPC(REIT),
+  OPC(REVL),
+  OPC(REVW),
+  OPC(RMPA),
+  OPC(ROLC),
+  OPC(RORC),
+  OPC(ROTL),
+  OPC(ROTR),
+  OPC(ROUND),
+  OPC(RTE),
+  OPC(RTFI),
+  OPC(RTS),
+  OPC(RTSD),
+  OPC(SAT),
+  OPC(SATR),
+  OPC(SBB),
+  OPC(SCCND),
+  OPC(SCMPU),
+  OPC(SETPSW),
+  OPC(SHAR),
+  OPC(SHLL),
+  OPC(SHLR),
+  OPC(SMOVB),
+  OPC(SMOVF),
+  OPC(SMOVU),
+  OPC(SSTR),
+  OPC(STNZ),
+  OPC(STOP),
+  OPC(STZ),
+  OPC(SUB),
+  OPC(SUNTIL),
+  OPC(SWHILE),
+  OPC(TST),
+  OPC(WAIT),
+  OPC(XCHG),
+  OPC(XOR),
+};
+
+#define NUM_TOKENS (sizeof (token_table) / sizeof (token_table[0]))
+
+static struct
+{
+  char * string;
+  int    token;
+}
+condition_opcode_table[] =
+{
+  { "b", BCND },
+  { "bm", BMCND },
+  { "sc", SCCND },
+};
+
+#define NUM_CONDITION_OPCODES (sizeof (condition_opcode_table) / sizeof (condition_opcode_table[0]))
+
+static struct
+{
+  char * string;
+  int    val;
+}
+condition_table[] =
+{
+  { "z", 0 },
+  { "eq", 0 },
+  { "geu",  2 },
+  { "c",  2 },
+  { "gtu", 4 },
+  { "pz", 6 },
+  { "ge", 8 },
+  { "gt", 10 },
+  { "o",  12},
+  /* always = 14 */
+  { "nz", 1 },
+  { "ne", 1 },
+  { "ltu", 3 },
+  { "nc", 3 },
+  { "leu", 5 },
+  { "n", 7 },
+  { "lt", 9 },
+  { "le", 11 },
+  { "no", 13 }
+  /* never = 15 */
+};
+
+#define NUM_CONDITIONS (sizeof (condition_table) / sizeof (condition_table[0]))
+
+void
+rx_lex_init (char * beginning, char * ending)
+{
+  rx_init_start = beginning;
+  rx_lex_start = beginning;
+  rx_lex_end = ending;
+  rx_in_brackets = 0;
+  rx_last_token = 0;
+
+  setbuf (stdout, 0);
+}
+
+static int
+check_condition (char * base)
+{
+  char * cp;
+  unsigned int i;
+
+  if ((unsigned) (rx_lex_end - rx_lex_start) < strlen (base) + 1)
+    return 0;
+  if (memcmp (rx_lex_start, base, strlen (base)))
+    return 0;
+  cp = rx_lex_start + strlen (base);
+  for (i = 0; i < NUM_CONDITIONS; i ++)
+    {
+      if (strcasecmp (cp, condition_table[i].string) == 0)
+	{
+	  rx_lval.regno = condition_table[i].val;
+	  return 1;
+	}
+    }
+  return 0;
+}
+
+static int
+rx_lex (void)
+{
+  unsigned int ci;
+  char * save_input_pointer;
+
+  while (ISSPACE (*rx_lex_start)
+	 && rx_lex_start != rx_lex_end)
+    rx_lex_start ++;
+
+  rx_last_exp_start = rx_lex_start;
+
+  if (rx_lex_start == rx_lex_end)
+    return 0;
+
+  if (ISALPHA (*rx_lex_start)
+      || (rx_pid_register != -1 && memcmp (rx_lex_start, "%pidreg", 7) == 0)
+      || (rx_gp_register != -1 && memcmp (rx_lex_start, "%gpreg", 6) == 0)
+      || (*rx_lex_start == '.' && ISALPHA (rx_lex_start[1])))
+    {
+      unsigned int i;
+      char * e;
+      char save;
+
+      for (e = rx_lex_start + 1;
+	   e < rx_lex_end && ISALNUM (*e);
+	   e ++)
+	;
+      save = *e;
+      *e = 0;
+
+      if (strcmp (rx_lex_start, "%pidreg") == 0)
+	{
+	  {
+	    rx_lval.regno = rx_pid_register;
+	    *e = save;
+	    rx_lex_start = e;
+	    rx_last_token = REG;
+	    return REG;
+	  }
+	}
+
+      if (strcmp (rx_lex_start, "%gpreg") == 0)
+	{
+	  {
+	    rx_lval.regno = rx_gp_register;
+	    *e = save;
+	    rx_lex_start = e;
+	    rx_last_token = REG;
+	    return REG;
+	  }
+	}
+
+      if (rx_last_token == 0)
+	for (ci = 0; ci < NUM_CONDITION_OPCODES; ci ++)
+	  if (check_condition (condition_opcode_table[ci].string))
+	    {
+	      *e = save;
+	      rx_lex_start = e;
+	      rx_last_token = condition_opcode_table[ci].token;
+	      return condition_opcode_table[ci].token;
+	    }
+
+      for (i = 0; i < NUM_TOKENS; i++)
+	if (strcasecmp (rx_lex_start, token_table[i].string) == 0
+	    && !(token_table[i].val == IS_OPCODE && rx_last_token != 0)
+	    && !(token_table[i].token == FLAG && !need_flag))
+	  {
+	    rx_lval.regno = token_table[i].val;
+	    *e = save;
+	    rx_lex_start = e;
+	    rx_last_token = token_table[i].token;
+	    return token_table[i].token;
+	  }
+      *e = save;
+    }
+
+  if (rx_last_token == 0)
+    {
+      rx_last_token = UNKNOWN_OPCODE;
+      return UNKNOWN_OPCODE;
+    }
+
+  if (rx_last_token == UNKNOWN_OPCODE)
+    return 0;
+
+  if (*rx_lex_start == '[')
+    rx_in_brackets = 1;
+  if (*rx_lex_start == ']')
+    rx_in_brackets = 0;
+
+  if (rx_in_brackets
+      || rx_last_token == REG
+      || strchr ("[],#", *rx_lex_start))
+    {
+      rx_last_token = *rx_lex_start;
+      return *rx_lex_start ++;
+    }
+
+  save_input_pointer = input_line_pointer;
+  input_line_pointer = rx_lex_start;
+  rx_lval.exp.X_md = 0;
+  expression (&rx_lval.exp);
+
+  /* We parse but ignore any :<size> modifier on expressions.  */
+  if (*input_line_pointer == ':')
+    {
+      char *cp;
+
+      for (cp  = input_line_pointer + 1; *cp && cp < rx_lex_end; cp++)
+	if (!ISDIGIT (*cp))
+	  break;
+      if (cp > input_line_pointer+1)
+	input_line_pointer = cp;
+    }
+
+  rx_lex_start = input_line_pointer;
+  input_line_pointer = save_input_pointer;
+  rx_last_token = EXPR;
+  return EXPR;
+}
+
+int
+rx_error (const char * str)
+{
+  int len;
+
+  len = rx_last_exp_start - rx_init_start;
+
+  as_bad ("%s", rx_init_start);
+  as_bad ("%*s^ %s", len, "", str);
+  return 0;
+}
+
+static int
+rx_intop (expressionS exp, int nbits, int opbits)
+{
+  long v;
+  long mask, msb;
+
+  if (exp.X_op == O_big && nbits == 32)
+      return 1;
+  if (exp.X_op != O_constant)
+    return 0;
+  v = exp.X_add_number;
+
+  msb = 1UL << (opbits - 1);
+  mask = (1UL << opbits) - 1;
+
+  if ((v & msb) && ! (v & ~mask))
+    v -= 1UL << opbits;
+
+  switch (nbits)
+    {
+    case 4:
+      return -0x8 <= v && v <= 0x7;
+    case 5:
+      return -0x10 <= v && v <= 0x17;
+    case 8:
+      return -0x80 <= v && v <= 0x7f;
+    case 16:
+      return -0x8000 <= v && v <= 0x7fff;
+    case 24:
+      return -0x800000 <= v && v <= 0x7fffff;
+    case 32:
+      return 1;
+    default:
+      printf ("rx_intop passed %d\n", nbits);
+      abort ();
+    }
+  return 1;
+}
+
+static int
+rx_uintop (expressionS exp, int nbits)
+{
+  unsigned long v;
+
+  if (exp.X_op != O_constant)
+    return 0;
+  v = exp.X_add_number;
+
+  switch (nbits)
+    {
+    case 4:
+      return v <= 0xf;
+    case 8:
+      return v <= 0xff;
+    case 16:
+      return v <= 0xffff;
+    case 24:
+      return v <= 0xffffff;
+    default:
+      printf ("rx_uintop passed %d\n", nbits);
+      abort ();
+    }
+  return 1;
+}
+
+static int
+rx_disp3op (expressionS exp)
+{
+  unsigned long v;
+
+  if (exp.X_op != O_constant)
+    return 0;
+  v = exp.X_add_number;
+  if (v < 3 || v > 10)
+    return 0;
+  return 1;
+}
+
+static int
+rx_disp5op (expressionS * exp, int msize)
+{
+  long v;
+
+  if (exp->X_op != O_constant)
+    return 0;
+  v = exp->X_add_number;
+
+  switch (msize)
+    {
+    case BSIZE:
+      if (0 < v && v <= 31)
+	return 1;
+      break;
+    case WSIZE:
+      if (v & 1)
+	return 0;
+      if (0 < v && v <= 63)
+	{
+	  exp->X_add_number >>= 1;
+	  return 1;
+	}
+      break;
+    case LSIZE:
+      if (v & 3)
+	return 0;
+      if (0 < v && v <= 127)
+	{
+	  exp->X_add_number >>= 2;
+	  return 1;
+	}
+      break;
+    }
+  return 0;
+}
+
+/* Just like the above, but allows a zero displacement.  */
+
+static int
+rx_disp5op0 (expressionS * exp, int msize)
+{
+  if (exp->X_op != O_constant)
+    return 0;
+  if (exp->X_add_number == 0)
+    return 1;
+  return rx_disp5op (exp, msize);
+}
+
+static int
+exp_val (expressionS exp)
+{
+  if (exp.X_op != O_constant)
+  {
+    rx_error (_("constant expected"));
+    return 0;
+  }
+  return exp.X_add_number;
+}
+
+static expressionS
+zero_expr (void)
+{
+  /* Static, so program load sets it to all zeros, which is what we want.  */
+  static expressionS zero;
+  zero.X_op = O_constant;
+  return zero;
+}
+
+static int
+immediate (expressionS exp, int type, int pos, int bits)
+{
+  /* We will emit constants ourself here, so negate them.  */
+  if (type == RXREL_NEGATIVE && exp.X_op == O_constant)
+    exp.X_add_number = - exp.X_add_number;
+  if (type == RXREL_NEGATIVE_BORROW)
+    {
+      if (exp.X_op == O_constant)
+	exp.X_add_number = - exp.X_add_number - 1;
+      else
+	rx_error (_("sbb cannot use symbolic immediates"));
+    }
+
+  if (rx_intop (exp, 8, bits))
+    {
+      rx_op (exp, 1, type);
+      return 1;
+    }
+  else if (rx_intop (exp, 16, bits))
+    {
+      rx_op (exp, 2, type);
+      return 2;
+    }
+  else if (rx_uintop (exp, 16) && bits == 16)
+    {
+      rx_op (exp, 2, type);
+      return 2;
+    }
+  else if (rx_intop (exp, 24, bits))
+    {
+      rx_op (exp, 3, type);
+      return 3;
+    }
+  else if (rx_intop (exp, 32, bits))
+    {
+      rx_op (exp, 4, type);
+      return 0;
+    }
+  else if (type == RXREL_SIGNED)
+    {
+      /* This is a symbolic immediate, we will relax it later.  */
+      rx_relax (RX_RELAX_IMM, pos);
+      rx_op (exp, linkrelax ? 4 : 1, type);
+      return 1;
+    }
+  else
+    {
+      /* Let the linker deal with it.  */
+      rx_op (exp, 4, type);
+      return 0;
+    }
+}
+
+static int
+displacement (expressionS exp, int msize)
+{
+  int val;
+  int vshift = 0;
+
+  if (exp.X_op == O_symbol
+      && exp.X_md)
+    {
+      switch (exp.X_md)
+	{
+	case BFD_RELOC_GPREL16:
+	  switch (msize)
+	    {
+	    case BSIZE:
+	      exp.X_md = BFD_RELOC_RX_GPRELB;
+	      break;
+	    case WSIZE:
+	      exp.X_md = BFD_RELOC_RX_GPRELW;
+	      break;
+	    case LSIZE:
+	      exp.X_md = BFD_RELOC_RX_GPRELL;
+	      break;
+	    }
+	  O2 (exp);
+	  return 2;
+	}
+    }
+
+  if (exp.X_op == O_subtract)
+    {
+      exp.X_md = BFD_RELOC_RX_DIFF;
+      O2 (exp);
+      return 2;
+    }
+
+  if (exp.X_op != O_constant)
+    {
+      rx_error (_("displacements must be constants"));
+      return -1;
+    }
+  val = exp.X_add_number;
+
+  if (val == 0)
+    return 0;
+
+  switch (msize)
+    {
+    case BSIZE:
+      break;
+    case WSIZE:
+      if (val & 1)
+	rx_error (_("word displacement not word-aligned"));
+      vshift = 1;
+      break;
+    case LSIZE:
+      if (val & 3)
+	rx_error (_("long displacement not long-aligned"));
+      vshift = 2;
+      break;
+    default:
+      as_bad (_("displacement with unknown size (internal bug?)\n"));
+      break;
+    }
+
+  val >>= vshift;
+  exp.X_add_number = val;
+
+  if (0 <= val && val <= 255 )
+    {
+      O1 (exp);
+      return 1;
+    }
+
+  if (0 <= val && val <= 65535)
+    {
+      O2 (exp);
+      return 2;
+    }
+  if (val < 0)
+    rx_error (_("negative displacements not allowed"));
+  else
+    rx_error (_("displacement too large"));
+  return -1;
+}
+
+static void
+rtsd_immediate (expressionS exp)
+{
+  int val;
+
+  if (exp.X_op != O_constant)
+    {
+      rx_error (_("rtsd size must be constant"));
+      return;
+    }
+  val = exp.X_add_number;
+  if (val & 3)
+    rx_error (_("rtsd size must be multiple of 4"));
+
+  if (val < 0 || val > 1020)
+    rx_error (_("rtsd size must be 0..1020"));
+
+  val >>= 2;
+  exp.X_add_number = val;
+  O1 (exp);
+}
+
+static void
+rx_range (expressionS exp, int minv, int maxv)
+{
+  int val;
+
+  if (exp.X_op != O_constant)
+    return;
+
+  val = exp.X_add_number;
+  if (val < minv || val > maxv)
+    as_warn (_("Value %d out of range %d..%d"), val, minv, maxv);
+}
+
+static void
+rx_check_float_support (void)
+{
+  if (rx_cpu == RX100 || rx_cpu == RX200)
+    rx_error (_("target CPU type does not support floating point instructions"));
+}
+
diff --git a/gas/rx-parse.h b/gas/rx-parse.h
new file mode 100644
index 0000000..0057b42
--- /dev/null
+++ b/gas/rx-parse.h
@@ -0,0 +1,289 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     REG = 258,
+     FLAG = 259,
+     CREG = 260,
+     EXPR = 261,
+     UNKNOWN_OPCODE = 262,
+     IS_OPCODE = 263,
+     DOT_S = 264,
+     DOT_B = 265,
+     DOT_W = 266,
+     DOT_L = 267,
+     DOT_A = 268,
+     DOT_UB = 269,
+     DOT_UW = 270,
+     ABS = 271,
+     ADC = 272,
+     ADD = 273,
+     AND_ = 274,
+     BCLR = 275,
+     BCND = 276,
+     BMCND = 277,
+     BNOT = 278,
+     BRA = 279,
+     BRK = 280,
+     BSET = 281,
+     BSR = 282,
+     BTST = 283,
+     CLRPSW = 284,
+     CMP = 285,
+     DBT = 286,
+     DIV = 287,
+     DIVU = 288,
+     EDIV = 289,
+     EDIVU = 290,
+     EMUL = 291,
+     EMULU = 292,
+     FADD = 293,
+     FCMP = 294,
+     FDIV = 295,
+     FMUL = 296,
+     FREIT = 297,
+     FSUB = 298,
+     FTOI = 299,
+     INT = 300,
+     ITOF = 301,
+     JMP = 302,
+     JSR = 303,
+     MACHI = 304,
+     MACLO = 305,
+     MAX = 306,
+     MIN = 307,
+     MOV = 308,
+     MOVU = 309,
+     MUL = 310,
+     MULHI = 311,
+     MULLO = 312,
+     MULU = 313,
+     MVFACHI = 314,
+     MVFACMI = 315,
+     MVFACLO = 316,
+     MVFC = 317,
+     MVTACHI = 318,
+     MVTACLO = 319,
+     MVTC = 320,
+     MVTIPL = 321,
+     NEG = 322,
+     NOP = 323,
+     NOT = 324,
+     OR = 325,
+     POP = 326,
+     POPC = 327,
+     POPM = 328,
+     PUSH = 329,
+     PUSHA = 330,
+     PUSHC = 331,
+     PUSHM = 332,
+     RACW = 333,
+     REIT = 334,
+     REVL = 335,
+     REVW = 336,
+     RMPA = 337,
+     ROLC = 338,
+     RORC = 339,
+     ROTL = 340,
+     ROTR = 341,
+     ROUND = 342,
+     RTE = 343,
+     RTFI = 344,
+     RTS = 345,
+     RTSD = 346,
+     SAT = 347,
+     SATR = 348,
+     SBB = 349,
+     SCCND = 350,
+     SCMPU = 351,
+     SETPSW = 352,
+     SHAR = 353,
+     SHLL = 354,
+     SHLR = 355,
+     SMOVB = 356,
+     SMOVF = 357,
+     SMOVU = 358,
+     SSTR = 359,
+     STNZ = 360,
+     STOP = 361,
+     STZ = 362,
+     SUB = 363,
+     SUNTIL = 364,
+     SWHILE = 365,
+     TST = 366,
+     WAIT = 367,
+     XCHG = 368,
+     XOR = 369
+   };
+#endif
+/* Tokens.  */
+#define REG 258
+#define FLAG 259
+#define CREG 260
+#define EXPR 261
+#define UNKNOWN_OPCODE 262
+#define IS_OPCODE 263
+#define DOT_S 264
+#define DOT_B 265
+#define DOT_W 266
+#define DOT_L 267
+#define DOT_A 268
+#define DOT_UB 269
+#define DOT_UW 270
+#define ABS 271
+#define ADC 272
+#define ADD 273
+#define AND_ 274
+#define BCLR 275
+#define BCND 276
+#define BMCND 277
+#define BNOT 278
+#define BRA 279
+#define BRK 280
+#define BSET 281
+#define BSR 282
+#define BTST 283
+#define CLRPSW 284
+#define CMP 285
+#define DBT 286
+#define DIV 287
+#define DIVU 288
+#define EDIV 289
+#define EDIVU 290
+#define EMUL 291
+#define EMULU 292
+#define FADD 293
+#define FCMP 294
+#define FDIV 295
+#define FMUL 296
+#define FREIT 297
+#define FSUB 298
+#define FTOI 299
+#define INT 300
+#define ITOF 301
+#define JMP 302
+#define JSR 303
+#define MACHI 304
+#define MACLO 305
+#define MAX 306
+#define MIN 307
+#define MOV 308
+#define MOVU 309
+#define MUL 310
+#define MULHI 311
+#define MULLO 312
+#define MULU 313
+#define MVFACHI 314
+#define MVFACMI 315
+#define MVFACLO 316
+#define MVFC 317
+#define MVTACHI 318
+#define MVTACLO 319
+#define MVTC 320
+#define MVTIPL 321
+#define NEG 322
+#define NOP 323
+#define NOT 324
+#define OR 325
+#define POP 326
+#define POPC 327
+#define POPM 328
+#define PUSH 329
+#define PUSHA 330
+#define PUSHC 331
+#define PUSHM 332
+#define RACW 333
+#define REIT 334
+#define REVL 335
+#define REVW 336
+#define RMPA 337
+#define ROLC 338
+#define RORC 339
+#define ROTL 340
+#define ROTR 341
+#define ROUND 342
+#define RTE 343
+#define RTFI 344
+#define RTS 345
+#define RTSD 346
+#define SAT 347
+#define SATR 348
+#define SBB 349
+#define SCCND 350
+#define SCMPU 351
+#define SETPSW 352
+#define SHAR 353
+#define SHLL 354
+#define SHLR 355
+#define SMOVB 356
+#define SMOVF 357
+#define SMOVU 358
+#define SSTR 359
+#define STNZ 360
+#define STOP 361
+#define STZ 362
+#define SUB 363
+#define SUNTIL 364
+#define SWHILE 365
+#define TST 366
+#define WAIT 367
+#define XCHG 368
+#define XOR 369
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 134 "rx-parse.y"
+{
+  int regno;
+  expressionS exp;
+}
+/* Line 1529 of yacc.c.  */
+#line 282 "rx-parse.h"
+	YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE rx_lval;
+
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 2eb0336..be67b6e 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-20  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	* gas/aarch64/msr.s: Add tests.
+	* gas/aarch64/msr.d: Update.
+
 2013-11-18  Renlin Li  <Renlin.Li@arm.com>
 
 	* gas/arm/attr-march-armv7ve.d: New test case for armv7ve.
diff --git a/gas/testsuite/gas/aarch64/msr.d b/gas/testsuite/gas/aarch64/msr.d
index c6c3220..750cae1 100644
--- a/gas/testsuite/gas/aarch64/msr.d
+++ b/gas/testsuite/gas/aarch64/msr.d
@@ -13,3 +13,5 @@
   14:	d5034fff 	msr	daifclr, #0xf
   18:	d51b4220 	msr	daif, x0
   1c:	d53b4220 	mrs	x0, daif
+  20:	d50040bf 	msr	spsel, #0x0
+  24:	d50041bf 	msr	spsel, #0x1
diff --git a/gas/testsuite/gas/aarch64/msr.s b/gas/testsuite/gas/aarch64/msr.s
index 9f67d98..01018c2 100644
--- a/gas/testsuite/gas/aarch64/msr.s
+++ b/gas/testsuite/gas/aarch64/msr.s
@@ -1,5 +1,5 @@
 /*
-   Copyright 2011, 2012 Free Software Foundation, Inc.
+   Copyright 2011-2013 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of GAS.
@@ -31,3 +31,6 @@
 
 	msr daif, x0
 	mrs x0, daif
+
+	msr spsel, #0
+	msr spsel, #1
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 68f6a5c..dcf7ed4 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-22  Cary Coutant  <ccoutant@google.com>
+
+	* testsuite/Makefile.am (exception_x86_64_bnd_test): Use in-tree
+	assembler.
+	* testsuite/Makefile.in: Regenerate.
+
 2013-11-17  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* x86_64.cc (Target_x86_64<size>::Scan::get_reference_flags):
diff --git a/gold/po/es.gmo b/gold/po/es.gmo
new file mode 100644
index 0000000..8c231b2
--- /dev/null
+++ b/gold/po/es.gmo
Binary files differ
diff --git a/gold/po/fi.gmo b/gold/po/fi.gmo
new file mode 100644
index 0000000..8e5149d
--- /dev/null
+++ b/gold/po/fi.gmo
Binary files differ
diff --git a/gold/po/id.gmo b/gold/po/id.gmo
new file mode 100644
index 0000000..bd5a800
--- /dev/null
+++ b/gold/po/id.gmo
Binary files differ
diff --git a/gold/po/it.gmo b/gold/po/it.gmo
new file mode 100644
index 0000000..b79d83a
--- /dev/null
+++ b/gold/po/it.gmo
Binary files differ
diff --git a/gold/po/vi.gmo b/gold/po/vi.gmo
new file mode 100644
index 0000000..c2d3d96
--- /dev/null
+++ b/gold/po/vi.gmo
Binary files differ
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 1e64c1e..e518240 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2256,9 +2256,9 @@
 					 exception_x86_64_bnd_2.o
 exception_x86_64_bnd_test_LDFLAGS = $(exception_test_LDFLAGS)
 exception_x86_64_bnd_test_LDADD = $(exception_x86_64_bnd_test_DEPENDENCIES)
-exception_x86_64_bnd_1.o: exception_test_1.cc
+exception_x86_64_bnd_1.o: exception_test_1.cc gcctestdir/as
 	$(CXXCOMPILE) -c -fpic -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
-exception_x86_64_bnd_2.o: exception_test_2.cc
+exception_x86_64_bnd_2.o: exception_test_2.cc gcctestdir/as
 	$(CXXCOMPILE) -c -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
 endif DEFAULT_TARGET_X86_64
 
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 526072e..44d5acc 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -5411,9 +5411,9 @@
 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@	@sleep 1
 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@	cp -f incr_comdat_test_2_v3.o incr_comdat_test_1_tmp.o
 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXLINK) -Wl,--incremental-update -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_1.o: exception_test_1.cc
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_1.o: exception_test_1.cc gcctestdir/as
 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXCOMPILE) -c -fpic -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_2.o: exception_test_2.cc
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@exception_x86_64_bnd_2.o: exception_test_2.cc gcctestdir/as
 @DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(CXXCOMPILE) -c -Bgcctestdir/ -Wa,-madd-bnd-prefix -o $@ $<
 @NATIVE_OR_CROSS_LINKER_TRUE@script_test_10.o: script_test_10.s
 @NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ $<
diff --git a/gprof/gprof.info b/gprof/gprof.info
new file mode 100644
index 0000000..b2f1961
--- /dev/null
+++ b/gprof/gprof.info
@@ -0,0 +1,2474 @@
+This is gprof.info, produced by makeinfo version 4.8 from gprof.texi.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* gprof: (gprof).                Profiling your program's execution
+END-INFO-DIR-ENTRY
+
+   This file documents the gprof profiler of the GNU system.
+
+   Copyright (C) 1988, 1992, 1997, 1998, 1999, 2000, 2001, 2003, 2007,
+2008, 2009 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: gprof.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Profiling a Program: Where Does It Spend Its Time?
+**************************************************
+
+This manual describes the GNU profiler, `gprof', and how you can use it
+to determine which parts of a program are taking most of the execution
+time.  We assume that you know how to write, compile, and execute
+programs.  GNU `gprof' was written by Jay Fenlason.
+
+   This manual is for `gprof' (GNU Binutils) version 2.23.91.
+
+   This document is distributed under the terms of the GNU Free
+Documentation License version 1.3.  A copy of the license is included
+in the section entitled "GNU Free Documentation License".
+
+* Menu:
+
+* Introduction::        What profiling means, and why it is useful.
+
+* Compiling::           How to compile your program for profiling.
+* Executing::           Executing your program to generate profile data
+* Invoking::            How to run `gprof', and its options
+
+* Output::              Interpreting `gprof''s output
+
+* Inaccuracy::          Potential problems you should be aware of
+* How do I?::           Answers to common questions
+* Incompatibilities::   (between GNU `gprof' and Unix `gprof'.)
+* Details::             Details of how profiling is done
+* GNU Free Documentation License::  GNU Free Documentation License
+
+
+File: gprof.info,  Node: Introduction,  Next: Compiling,  Prev: Top,  Up: Top
+
+1 Introduction to Profiling
+***************************
+
+Profiling allows you to learn where your program spent its time and
+which functions called which other functions while it was executing.
+This information can show you which pieces of your program are slower
+than you expected, and might be candidates for rewriting to make your
+program execute faster.  It can also tell you which functions are being
+called more or less often than you expected.  This may help you spot
+bugs that had otherwise been unnoticed.
+
+   Since the profiler uses information collected during the actual
+execution of your program, it can be used on programs that are too
+large or too complex to analyze by reading the source.  However, how
+your program is run will affect the information that shows up in the
+profile data.  If you don't use some feature of your program while it
+is being profiled, no profile information will be generated for that
+feature.
+
+   Profiling has several steps:
+
+   * You must compile and link your program with profiling enabled.
+     *Note Compiling a Program for Profiling: Compiling.
+
+   * You must execute your program to generate a profile data file.
+     *Note Executing the Program: Executing.
+
+   * You must run `gprof' to analyze the profile data.  *Note `gprof'
+     Command Summary: Invoking.
+
+   The next three chapters explain these steps in greater detail.
+
+   Several forms of output are available from the analysis.
+
+   The "flat profile" shows how much time your program spent in each
+function, and how many times that function was called.  If you simply
+want to know which functions burn most of the cycles, it is stated
+concisely here.  *Note The Flat Profile: Flat Profile.
+
+   The "call graph" shows, for each function, which functions called
+it, which other functions it called, and how many times.  There is also
+an estimate of how much time was spent in the subroutines of each
+function.  This can suggest places where you might try to eliminate
+function calls that use a lot of time.  *Note The Call Graph: Call
+Graph.
+
+   The "annotated source" listing is a copy of the program's source
+code, labeled with the number of times each line of the program was
+executed.  *Note The Annotated Source Listing: Annotated Source.
+
+   To better understand how profiling works, you may wish to read a
+description of its implementation.  *Note Implementation of Profiling:
+Implementation.
+
+
+File: gprof.info,  Node: Compiling,  Next: Executing,  Prev: Introduction,  Up: Top
+
+2 Compiling a Program for Profiling
+***********************************
+
+The first step in generating profile information for your program is to
+compile and link it with profiling enabled.
+
+   To compile a source file for profiling, specify the `-pg' option when
+you run the compiler.  (This is in addition to the options you normally
+use.)
+
+   To link the program for profiling, if you use a compiler such as `cc'
+to do the linking, simply specify `-pg' in addition to your usual
+options.  The same option, `-pg', alters either compilation or linking
+to do what is necessary for profiling.  Here are examples:
+
+     cc -g -c myprog.c utils.c -pg
+     cc -o myprog myprog.o utils.o -pg
+
+   The `-pg' option also works with a command that both compiles and
+links:
+
+     cc -o myprog myprog.c utils.c -g -pg
+
+   Note: The `-pg' option must be part of your compilation options as
+well as your link options.  If it is not then no call-graph data will
+be gathered and when you run `gprof' you will get an error message like
+this:
+
+     gprof: gmon.out file is missing call-graph data
+
+   If you add the `-Q' switch to suppress the printing of the call
+graph data you will still be able to see the time samples:
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  Ts/call  Ts/call  name
+      44.12      0.07     0.07                             zazLoop
+      35.29      0.14     0.06                             main
+      20.59      0.17     0.04                             bazMillion
+
+   If you run the linker `ld' directly instead of through a compiler
+such as `cc', you may have to specify a profiling startup file
+`gcrt0.o' as the first input file instead of the usual startup file
+`crt0.o'.  In addition, you would probably want to specify the
+profiling C library, `libc_p.a', by writing `-lc_p' instead of the
+usual `-lc'.  This is not absolutely necessary, but doing this gives
+you number-of-calls information for standard library functions such as
+`read' and `open'.  For example:
+
+     ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
+
+   If you are running the program on a system which supports shared
+libraries you may run into problems with the profiling support code in
+a shared library being called before that library has been fully
+initialised.  This is usually detected by the program encountering a
+segmentation fault as soon as it is run.  The solution is to link
+against a static version of the library containing the profiling
+support code, which for `gcc' users can be done via the `-static' or
+`-static-libgcc' command line option.  For example:
+
+     gcc -g -pg -static-libgcc myprog.c utils.c -o myprog
+
+   If you compile only some of the modules of the program with `-pg',
+you can still profile the program, but you won't get complete
+information about the modules that were compiled without `-pg'.  The
+only information you get for the functions in those modules is the
+total time spent in them; there is no record of how many times they
+were called, or from where.  This will not affect the flat profile
+(except that the `calls' field for the functions will be blank), but
+will greatly reduce the usefulness of the call graph.
+
+   If you wish to perform line-by-line profiling you should use the
+`gcov' tool instead of `gprof'.  See that tool's manual or info pages
+for more details of how to do this.
+
+   Note, older versions of `gcc' produce line-by-line profiling
+information that works with `gprof' rather than `gcov' so there is
+still support for displaying this kind of information in `gprof'. *Note
+Line-by-line Profiling: Line-by-line.
+
+   It also worth noting that `gcc' implements a
+`-finstrument-functions' command line option which will insert calls to
+special user supplied instrumentation routines at the entry and exit of
+every function in their program.  This can be used to implement an
+alternative profiling scheme.
+
+
+File: gprof.info,  Node: Executing,  Next: Invoking,  Prev: Compiling,  Up: Top
+
+3 Executing the Program
+***********************
+
+Once the program is compiled for profiling, you must run it in order to
+generate the information that `gprof' needs.  Simply run the program as
+usual, using the normal arguments, file names, etc.  The program should
+run normally, producing the same output as usual.  It will, however, run
+somewhat slower than normal because of the time spent collecting and
+writing the profile data.
+
+   The way you run the program--the arguments and input that you give
+it--may have a dramatic effect on what the profile information shows.
+The profile data will describe the parts of the program that were
+activated for the particular input you use.  For example, if the first
+command you give to your program is to quit, the profile data will show
+the time used in initialization and in cleanup, but not much else.
+
+   Your program will write the profile data into a file called
+`gmon.out' just before exiting.  If there is already a file called
+`gmon.out', its contents are overwritten.  There is currently no way to
+tell the program to write the profile data under a different name, but
+you can rename the file afterwards if you are concerned that it may be
+overwritten.
+
+   In order to write the `gmon.out' file properly, your program must
+exit normally: by returning from `main' or by calling `exit'.  Calling
+the low-level function `_exit' does not write the profile data, and
+neither does abnormal termination due to an unhandled signal.
+
+   The `gmon.out' file is written in the program's _current working
+directory_ at the time it exits.  This means that if your program calls
+`chdir', the `gmon.out' file will be left in the last directory your
+program `chdir''d to.  If you don't have permission to write in this
+directory, the file is not written, and you will get an error message.
+
+   Older versions of the GNU profiling library may also write a file
+called `bb.out'.  This file, if present, contains an human-readable
+listing of the basic-block execution counts.  Unfortunately, the
+appearance of a human-readable `bb.out' means the basic-block counts
+didn't get written into `gmon.out'.  The Perl script `bbconv.pl',
+included with the `gprof' source distribution, will convert a `bb.out'
+file into a format readable by `gprof'.  Invoke it like this:
+
+     bbconv.pl < bb.out > BH-DATA
+
+   This translates the information in `bb.out' into a form that `gprof'
+can understand.  But you still need to tell `gprof' about the existence
+of this translated information.  To do that, include BB-DATA on the
+`gprof' command line, _along with `gmon.out'_, like this:
+
+     gprof OPTIONS EXECUTABLE-FILE gmon.out BB-DATA [YET-MORE-PROFILE-DATA-FILES...] [> OUTFILE]
+
+
+File: gprof.info,  Node: Invoking,  Next: Output,  Prev: Executing,  Up: Top
+
+4 `gprof' Command Summary
+*************************
+
+After you have a profile data file `gmon.out', you can run `gprof' to
+interpret the information in it.  The `gprof' program prints a flat
+profile and a call graph on standard output.  Typically you would
+redirect the output of `gprof' into a file with `>'.
+
+   You run `gprof' like this:
+
+     gprof OPTIONS [EXECUTABLE-FILE [PROFILE-DATA-FILES...]] [> OUTFILE]
+
+Here square-brackets indicate optional arguments.
+
+   If you omit the executable file name, the file `a.out' is used.  If
+you give no profile data file name, the file `gmon.out' is used.  If
+any file is not in the proper format, or if the profile data file does
+not appear to belong to the executable file, an error message is
+printed.
+
+   You can give more than one profile data file by entering all their
+names after the executable file name; then the statistics in all the
+data files are summed together.
+
+   The order of these options does not matter.
+
+* Menu:
+
+* Output Options::      Controlling `gprof''s output style
+* Analysis Options::    Controlling how `gprof' analyzes its data
+* Miscellaneous Options::
+* Deprecated Options::  Options you no longer need to use, but which
+                            have been retained for compatibility
+* Symspecs::            Specifying functions to include or exclude
+
+
+File: gprof.info,  Node: Output Options,  Next: Analysis Options,  Up: Invoking
+
+4.1 Output Options
+==================
+
+These options specify which of several output formats `gprof' should
+produce.
+
+   Many of these options take an optional "symspec" to specify
+functions to be included or excluded.  These options can be specified
+multiple times, with different symspecs, to include or exclude sets of
+symbols.  *Note Symspecs: Symspecs.
+
+   Specifying any of these options overrides the default (`-p -q'),
+which prints a flat profile and call graph analysis for all functions.
+
+`-A[SYMSPEC]'
+`--annotated-source[=SYMSPEC]'
+     The `-A' option causes `gprof' to print annotated source code.  If
+     SYMSPEC is specified, print output only for matching symbols.
+     *Note The Annotated Source Listing: Annotated Source.
+
+`-b'
+`--brief'
+     If the `-b' option is given, `gprof' doesn't print the verbose
+     blurbs that try to explain the meaning of all of the fields in the
+     tables.  This is useful if you intend to print out the output, or
+     are tired of seeing the blurbs.
+
+`-C[SYMSPEC]'
+`--exec-counts[=SYMSPEC]'
+     The `-C' option causes `gprof' to print a tally of functions and
+     the number of times each was called.  If SYMSPEC is specified,
+     print tally only for matching symbols.
+
+     If the profile data file contains basic-block count records,
+     specifying the `-l' option, along with `-C', will cause basic-block
+     execution counts to be tallied and displayed.
+
+`-i'
+`--file-info'
+     The `-i' option causes `gprof' to display summary information
+     about the profile data file(s) and then exit.  The number of
+     histogram, call graph, and basic-block count records is displayed.
+
+`-I DIRS'
+`--directory-path=DIRS'
+     The `-I' option specifies a list of search directories in which to
+     find source files.  Environment variable GPROF_PATH can also be
+     used to convey this information.  Used mostly for annotated source
+     output.
+
+`-J[SYMSPEC]'
+`--no-annotated-source[=SYMSPEC]'
+     The `-J' option causes `gprof' not to print annotated source code.
+     If SYMSPEC is specified, `gprof' prints annotated source, but
+     excludes matching symbols.
+
+`-L'
+`--print-path'
+     Normally, source filenames are printed with the path component
+     suppressed.  The `-L' option causes `gprof' to print the full
+     pathname of source filenames, which is determined from symbolic
+     debugging information in the image file and is relative to the
+     directory in which the compiler was invoked.
+
+`-p[SYMSPEC]'
+`--flat-profile[=SYMSPEC]'
+     The `-p' option causes `gprof' to print a flat profile.  If
+     SYMSPEC is specified, print flat profile only for matching symbols.
+     *Note The Flat Profile: Flat Profile.
+
+`-P[SYMSPEC]'
+`--no-flat-profile[=SYMSPEC]'
+     The `-P' option causes `gprof' to suppress printing a flat profile.
+     If SYMSPEC is specified, `gprof' prints a flat profile, but
+     excludes matching symbols.
+
+`-q[SYMSPEC]'
+`--graph[=SYMSPEC]'
+     The `-q' option causes `gprof' to print the call graph analysis.
+     If SYMSPEC is specified, print call graph only for matching symbols
+     and their children.  *Note The Call Graph: Call Graph.
+
+`-Q[SYMSPEC]'
+`--no-graph[=SYMSPEC]'
+     The `-Q' option causes `gprof' to suppress printing the call graph.
+     If SYMSPEC is specified, `gprof' prints a call graph, but excludes
+     matching symbols.
+
+`-t'
+`--table-length=NUM'
+     The `-t' option causes the NUM most active source lines in each
+     source file to be listed when source annotation is enabled.  The
+     default is 10.
+
+`-y'
+`--separate-files'
+     This option affects annotated source output only.  Normally,
+     `gprof' prints annotated source files to standard-output.  If this
+     option is specified, annotated source for a file named
+     `path/FILENAME' is generated in the file `FILENAME-ann'.  If the
+     underlying file system would truncate `FILENAME-ann' so that it
+     overwrites the original `FILENAME', `gprof' generates annotated
+     source in the file `FILENAME.ann' instead (if the original file
+     name has an extension, that extension is _replaced_ with `.ann').
+
+`-Z[SYMSPEC]'
+`--no-exec-counts[=SYMSPEC]'
+     The `-Z' option causes `gprof' not to print a tally of functions
+     and the number of times each was called.  If SYMSPEC is specified,
+     print tally, but exclude matching symbols.
+
+`-r'
+`--function-ordering'
+     The `--function-ordering' option causes `gprof' to print a
+     suggested function ordering for the program based on profiling
+     data.  This option suggests an ordering which may improve paging,
+     tlb and cache behavior for the program on systems which support
+     arbitrary ordering of functions in an executable.
+
+     The exact details of how to force the linker to place functions in
+     a particular order is system dependent and out of the scope of this
+     manual.
+
+`-R MAP_FILE'
+`--file-ordering MAP_FILE'
+     The `--file-ordering' option causes `gprof' to print a suggested
+     .o link line ordering for the program based on profiling data.
+     This option suggests an ordering which may improve paging, tlb and
+     cache behavior for the program on systems which do not support
+     arbitrary ordering of functions in an executable.
+
+     Use of the `-a' argument is highly recommended with this option.
+
+     The MAP_FILE argument is a pathname to a file which provides
+     function name to object file mappings.  The format of the file is
+     similar to the output of the program `nm'.
+
+          c-parse.o:00000000 T yyparse
+          c-parse.o:00000004 C yyerrflag
+          c-lang.o:00000000 T maybe_objc_method_name
+          c-lang.o:00000000 T print_lang_statistics
+          c-lang.o:00000000 T recognize_objc_keyword
+          c-decl.o:00000000 T print_lang_identifier
+          c-decl.o:00000000 T print_lang_type
+          ...
+
+     To create a MAP_FILE with GNU `nm', type a command like `nm
+     --extern-only --defined-only -v --print-file-name program-name'.
+
+`-T'
+`--traditional'
+     The `-T' option causes `gprof' to print its output in
+     "traditional" BSD style.
+
+`-w WIDTH'
+`--width=WIDTH'
+     Sets width of output lines to WIDTH.  Currently only used when
+     printing the function index at the bottom of the call graph.
+
+`-x'
+`--all-lines'
+     This option affects annotated source output only.  By default,
+     only the lines at the beginning of a basic-block are annotated.
+     If this option is specified, every line in a basic-block is
+     annotated by repeating the annotation for the first line.  This
+     behavior is similar to `tcov''s `-a'.
+
+`--demangle[=STYLE]'
+`--no-demangle'
+     These options control whether C++ symbol names should be demangled
+     when printing output.  The default is to demangle symbols.  The
+     `--no-demangle' option may be used to turn off demangling.
+     Different compilers have different mangling styles.  The optional
+     demangling style argument can be used to choose an appropriate
+     demangling style for your compiler.
+
+
+File: gprof.info,  Node: Analysis Options,  Next: Miscellaneous Options,  Prev: Output Options,  Up: Invoking
+
+4.2 Analysis Options
+====================
+
+`-a'
+`--no-static'
+     The `-a' option causes `gprof' to suppress the printing of
+     statically declared (private) functions.  (These are functions
+     whose names are not listed as global, and which are not visible
+     outside the file/function/block where they were defined.)  Time
+     spent in these functions, calls to/from them, etc., will all be
+     attributed to the function that was loaded directly before it in
+     the executable file.  This option affects both the flat profile
+     and the call graph.
+
+`-c'
+`--static-call-graph'
+     The `-c' option causes the call graph of the program to be
+     augmented by a heuristic which examines the text space of the
+     object file and identifies function calls in the binary machine
+     code.  Since normal call graph records are only generated when
+     functions are entered, this option identifies children that could
+     have been called, but never were.  Calls to functions that were
+     not compiled with profiling enabled are also identified, but only
+     if symbol table entries are present for them.  Calls to dynamic
+     library routines are typically _not_ found by this option.
+     Parents or children identified via this heuristic are indicated in
+     the call graph with call counts of `0'.
+
+`-D'
+`--ignore-non-functions'
+     The `-D' option causes `gprof' to ignore symbols which are not
+     known to be functions.  This option will give more accurate
+     profile data on systems where it is supported (Solaris and HPUX for
+     example).
+
+`-k FROM/TO'
+     The `-k' option allows you to delete from the call graph any arcs
+     from symbols matching symspec FROM to those matching symspec TO.
+
+`-l'
+`--line'
+     The `-l' option enables line-by-line profiling, which causes
+     histogram hits to be charged to individual source code lines,
+     instead of functions.  This feature only works with programs
+     compiled by older versions of the `gcc' compiler.  Newer versions
+     of `gcc' are designed to work with the `gcov' tool instead.
+
+     If the program was compiled with basic-block counting enabled,
+     this option will also identify how many times each line of code
+     was executed.  While line-by-line profiling can help isolate where
+     in a large function a program is spending its time, it also
+     significantly increases the running time of `gprof', and magnifies
+     statistical inaccuracies.  *Note Statistical Sampling Error:
+     Sampling Error.
+
+`-m NUM'
+`--min-count=NUM'
+     This option affects execution count output only.  Symbols that are
+     executed less than NUM times are suppressed.
+
+`-nSYMSPEC'
+`--time=SYMSPEC'
+     The `-n' option causes `gprof', in its call graph analysis, to
+     only propagate times for symbols matching SYMSPEC.
+
+`-NSYMSPEC'
+`--no-time=SYMSPEC'
+     The `-n' option causes `gprof', in its call graph analysis, not to
+     propagate times for symbols matching SYMSPEC.
+
+`-SFILENAME'
+`--external-symbol-table=FILENAME'
+     The `-S' option causes `gprof' to read an external symbol table
+     file, such as `/proc/kallsyms', rather than read the symbol table
+     from the given object file (the default is `a.out'). This is useful
+     for profiling kernel modules.
+
+`-z'
+`--display-unused-functions'
+     If you give the `-z' option, `gprof' will mention all functions in
+     the flat profile, even those that were never called, and that had
+     no time spent in them.  This is useful in conjunction with the
+     `-c' option for discovering which routines were never called.
+
+
+
+File: gprof.info,  Node: Miscellaneous Options,  Next: Deprecated Options,  Prev: Analysis Options,  Up: Invoking
+
+4.3 Miscellaneous Options
+=========================
+
+`-d[NUM]'
+`--debug[=NUM]'
+     The `-d NUM' option specifies debugging options.  If NUM is not
+     specified, enable all debugging.  *Note Debugging `gprof':
+     Debugging.
+
+`-h'
+`--help'
+     The `-h' option prints command line usage.
+
+`-ONAME'
+`--file-format=NAME'
+     Selects the format of the profile data files.  Recognized formats
+     are `auto' (the default), `bsd', `4.4bsd', `magic', and `prof'
+     (not yet supported).
+
+`-s'
+`--sum'
+     The `-s' option causes `gprof' to summarize the information in the
+     profile data files it read in, and write out a profile data file
+     called `gmon.sum', which contains all the information from the
+     profile data files that `gprof' read in.  The file `gmon.sum' may
+     be one of the specified input files; the effect of this is to
+     merge the data in the other input files into `gmon.sum'.
+
+     Eventually you can run `gprof' again without `-s' to analyze the
+     cumulative data in the file `gmon.sum'.
+
+`-v'
+`--version'
+     The `-v' flag causes `gprof' to print the current version number,
+     and then exit.
+
+
+
+File: gprof.info,  Node: Deprecated Options,  Next: Symspecs,  Prev: Miscellaneous Options,  Up: Invoking
+
+4.4 Deprecated Options
+======================
+
+These options have been replaced with newer versions that use symspecs.
+
+`-e FUNCTION_NAME'
+     The `-e FUNCTION' option tells `gprof' to not print information
+     about the function FUNCTION_NAME (and its children...) in the call
+     graph.  The function will still be listed as a child of any
+     functions that call it, but its index number will be shown as
+     `[not printed]'.  More than one `-e' option may be given; only one
+     FUNCTION_NAME may be indicated with each `-e' option.
+
+`-E FUNCTION_NAME'
+     The `-E FUNCTION' option works like the `-e' option, but time
+     spent in the function (and children who were not called from
+     anywhere else), will not be used to compute the
+     percentages-of-time for the call graph.  More than one `-E' option
+     may be given; only one FUNCTION_NAME may be indicated with each
+     `-E' option.
+
+`-f FUNCTION_NAME'
+     The `-f FUNCTION' option causes `gprof' to limit the call graph to
+     the function FUNCTION_NAME and its children (and their
+     children...).  More than one `-f' option may be given; only one
+     FUNCTION_NAME may be indicated with each `-f' option.
+
+`-F FUNCTION_NAME'
+     The `-F FUNCTION' option works like the `-f' option, but only time
+     spent in the function and its children (and their children...)
+     will be used to determine total-time and percentages-of-time for
+     the call graph.  More than one `-F' option may be given; only one
+     FUNCTION_NAME may be indicated with each `-F' option.  The `-F'
+     option overrides the `-E' option.
+
+
+   Note that only one function can be specified with each `-e', `-E',
+`-f' or `-F' option.  To specify more than one function, use multiple
+options.  For example, this command:
+
+     gprof -e boring -f foo -f bar myprogram > gprof.output
+
+lists in the call graph all functions that were reached from either
+`foo' or `bar' and were not reachable from `boring'.
+
+
+File: gprof.info,  Node: Symspecs,  Prev: Deprecated Options,  Up: Invoking
+
+4.5 Symspecs
+============
+
+Many of the output options allow functions to be included or excluded
+using "symspecs" (symbol specifications), which observe the following
+syntax:
+
+       filename_containing_a_dot
+     | funcname_not_containing_a_dot
+     | linenumber
+     | ( [ any_filename ] `:' ( any_funcname | linenumber ) )
+
+   Here are some sample symspecs:
+
+`main.c'
+     Selects everything in file `main.c'--the dot in the string tells
+     `gprof' to interpret the string as a filename, rather than as a
+     function name.  To select a file whose name does not contain a
+     dot, a trailing colon should be specified.  For example, `odd:' is
+     interpreted as the file named `odd'.
+
+`main'
+     Selects all functions named `main'.
+
+     Note that there may be multiple instances of the same function name
+     because some of the definitions may be local (i.e., static).
+     Unless a function name is unique in a program, you must use the
+     colon notation explained below to specify a function from a
+     specific source file.
+
+     Sometimes, function names contain dots.  In such cases, it is
+     necessary to add a leading colon to the name.  For example,
+     `:.mul' selects function `.mul'.
+
+     In some object file formats, symbols have a leading underscore.
+     `gprof' will normally not print these underscores.  When you name a
+     symbol in a symspec, you should type it exactly as `gprof' prints
+     it in its output.  For example, if the compiler produces a symbol
+     `_main' from your `main' function, `gprof' still prints it as
+     `main' in its output, so you should use `main' in symspecs.
+
+`main.c:main'
+     Selects function `main' in file `main.c'.
+
+`main.c:134'
+     Selects line 134 in file `main.c'.
+
+
+File: gprof.info,  Node: Output,  Next: Inaccuracy,  Prev: Invoking,  Up: Top
+
+5 Interpreting `gprof''s Output
+*******************************
+
+`gprof' can produce several different output styles, the most important
+of which are described below.  The simplest output styles (file
+information, execution count, and function and file ordering) are not
+described here, but are documented with the respective options that
+trigger them.  *Note Output Options: Output Options.
+
+* Menu:
+
+* Flat Profile::        The flat profile shows how much time was spent
+                            executing directly in each function.
+* Call Graph::          The call graph shows which functions called which
+                            others, and how much time each function used
+                            when its subroutine calls are included.
+* Line-by-line::        `gprof' can analyze individual source code lines
+* Annotated Source::    The annotated source listing displays source code
+                            labeled with execution counts
+
+
+File: gprof.info,  Node: Flat Profile,  Next: Call Graph,  Up: Output
+
+5.1 The Flat Profile
+====================
+
+The "flat profile" shows the total amount of time your program spent
+executing each function.  Unless the `-z' option is given, functions
+with no apparent time spent in them, and no apparent calls to them, are
+not mentioned.  Note that if a function was not compiled for profiling,
+and didn't run long enough to show up on the program counter histogram,
+it will be indistinguishable from a function that was never called.
+
+   This is part of a flat profile for a small program:
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  ms/call  ms/call  name
+      33.34      0.02     0.02     7208     0.00     0.00  open
+      16.67      0.03     0.01      244     0.04     0.12  offtime
+      16.67      0.04     0.01        8     1.25     1.25  memccpy
+      16.67      0.05     0.01        7     1.43     1.43  write
+      16.67      0.06     0.01                             mcount
+       0.00      0.06     0.00      236     0.00     0.00  tzset
+       0.00      0.06     0.00      192     0.00     0.00  tolower
+       0.00      0.06     0.00       47     0.00     0.00  strlen
+       0.00      0.06     0.00       45     0.00     0.00  strchr
+       0.00      0.06     0.00        1     0.00    50.00  main
+       0.00      0.06     0.00        1     0.00     0.00  memcpy
+       0.00      0.06     0.00        1     0.00    10.11  print
+       0.00      0.06     0.00        1     0.00     0.00  profil
+       0.00      0.06     0.00        1     0.00    50.00  report
+     ...
+
+The functions are sorted first by decreasing run-time spent in them,
+then by decreasing number of calls, then alphabetically by name.  The
+functions `mcount' and `profil' are part of the profiling apparatus and
+appear in every flat profile; their time gives a measure of the amount
+of overhead due to profiling.
+
+   Just before the column headers, a statement appears indicating how
+much time each sample counted as.  This "sampling period" estimates the
+margin of error in each of the time figures.  A time figure that is not
+much larger than this is not reliable.  In this example, each sample
+counted as 0.01 seconds, suggesting a 100 Hz sampling rate.  The
+program's total execution time was 0.06 seconds, as indicated by the
+`cumulative seconds' field.  Since each sample counted for 0.01
+seconds, this means only six samples were taken during the run.  Two of
+the samples occurred while the program was in the `open' function, as
+indicated by the `self seconds' field.  Each of the other four samples
+occurred one each in `offtime', `memccpy', `write', and `mcount'.
+Since only six samples were taken, none of these values can be regarded
+as particularly reliable.  In another run, the `self seconds' field for
+`mcount' might well be `0.00' or `0.02'.  *Note Statistical Sampling
+Error: Sampling Error, for a complete discussion.
+
+   The remaining functions in the listing (those whose `self seconds'
+field is `0.00') didn't appear in the histogram samples at all.
+However, the call graph indicated that they were called, so therefore
+they are listed, sorted in decreasing order by the `calls' field.
+Clearly some time was spent executing these functions, but the paucity
+of histogram samples prevents any determination of how much time each
+took.
+
+   Here is what the fields in each line mean:
+
+`% time'
+     This is the percentage of the total execution time your program
+     spent in this function.  These should all add up to 100%.
+
+`cumulative seconds'
+     This is the cumulative total number of seconds the computer spent
+     executing this functions, plus the time spent in all the functions
+     above this one in this table.
+
+`self seconds'
+     This is the number of seconds accounted for by this function alone.
+     The flat profile listing is sorted first by this number.
+
+`calls'
+     This is the total number of times the function was called.  If the
+     function was never called, or the number of times it was called
+     cannot be determined (probably because the function was not
+     compiled with profiling enabled), the "calls" field is blank.
+
+`self ms/call'
+     This represents the average number of milliseconds spent in this
+     function per call, if this function is profiled.  Otherwise, this
+     field is blank for this function.
+
+`total ms/call'
+     This represents the average number of milliseconds spent in this
+     function and its descendants per call, if this function is
+     profiled.  Otherwise, this field is blank for this function.  This
+     is the only field in the flat profile that uses call graph
+     analysis.
+
+`name'
+     This is the name of the function.   The flat profile is sorted by
+     this field alphabetically after the "self seconds" and "calls"
+     fields are sorted.
+
+
+File: gprof.info,  Node: Call Graph,  Next: Line-by-line,  Prev: Flat Profile,  Up: Output
+
+5.2 The Call Graph
+==================
+
+The "call graph" shows how much time was spent in each function and its
+children.  From this information, you can find functions that, while
+they themselves may not have used much time, called other functions
+that did use unusual amounts of time.
+
+   Here is a sample call from a small program.  This call came from the
+same `gprof' run as the flat profile example in the previous section.
+
+     granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds
+
+     index % time    self  children    called     name
+                                                      <spontaneous>
+     [1]    100.0    0.00    0.05                 start [1]
+                     0.00    0.05       1/1           main [2]
+                     0.00    0.00       1/2           on_exit [28]
+                     0.00    0.00       1/1           exit [59]
+     -----------------------------------------------
+                     0.00    0.05       1/1           start [1]
+     [2]    100.0    0.00    0.05       1         main [2]
+                     0.00    0.05       1/1           report [3]
+     -----------------------------------------------
+                     0.00    0.05       1/1           main [2]
+     [3]    100.0    0.00    0.05       1         report [3]
+                     0.00    0.03       8/8           timelocal [6]
+                     0.00    0.01       1/1           print [9]
+                     0.00    0.01       9/9           fgets [12]
+                     0.00    0.00      12/34          strncmp <cycle 1> [40]
+                     0.00    0.00       8/8           lookup [20]
+                     0.00    0.00       1/1           fopen [21]
+                     0.00    0.00       8/8           chewtime [24]
+                     0.00    0.00       8/16          skipspace [44]
+     -----------------------------------------------
+     [4]     59.8    0.01        0.02       8+472     <cycle 2 as a whole> [4]
+                     0.01        0.02     244+260         offtime <cycle 2> [7]
+                     0.00        0.00     236+1           tzset <cycle 2> [26]
+     -----------------------------------------------
+
+   The lines full of dashes divide this table into "entries", one for
+each function.  Each entry has one or more lines.
+
+   In each entry, the primary line is the one that starts with an index
+number in square brackets.  The end of this line says which function
+the entry is for.  The preceding lines in the entry describe the
+callers of this function and the following lines describe its
+subroutines (also called "children" when we speak of the call graph).
+
+   The entries are sorted by time spent in the function and its
+subroutines.
+
+   The internal profiling function `mcount' (*note The Flat Profile:
+Flat Profile.) is never mentioned in the call graph.
+
+* Menu:
+
+* Primary::       Details of the primary line's contents.
+* Callers::       Details of caller-lines' contents.
+* Subroutines::   Details of subroutine-lines' contents.
+* Cycles::        When there are cycles of recursion,
+                   such as `a' calls `b' calls `a'...
+
+
+File: gprof.info,  Node: Primary,  Next: Callers,  Up: Call Graph
+
+5.2.1 The Primary Line
+----------------------
+
+The "primary line" in a call graph entry is the line that describes the
+function which the entry is about and gives the overall statistics for
+this function.
+
+   For reference, we repeat the primary line from the entry for function
+`report' in our main example, together with the heading line that shows
+the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+     [3]    100.0    0.00    0.05       1         report [3]
+
+   Here is what the fields in the primary line mean:
+
+`index'
+     Entries are numbered with consecutive integers.  Each function
+     therefore has an index number, which appears at the beginning of
+     its primary line.
+
+     Each cross-reference to a function, as a caller or subroutine of
+     another, gives its index number as well as its name.  The index
+     number guides you if you wish to look for the entry for that
+     function.
+
+`% time'
+     This is the percentage of the total time that was spent in this
+     function, including time spent in subroutines called from this
+     function.
+
+     The time spent in this function is counted again for the callers of
+     this function.  Therefore, adding up these percentages is
+     meaningless.
+
+`self'
+     This is the total amount of time spent in this function.  This
+     should be identical to the number printed in the `seconds' field
+     for this function in the flat profile.
+
+`children'
+     This is the total amount of time spent in the subroutine calls
+     made by this function.  This should be equal to the sum of all the
+     `self' and `children' entries of the children listed directly
+     below this function.
+
+`called'
+     This is the number of times the function was called.
+
+     If the function called itself recursively, there are two numbers,
+     separated by a `+'.  The first number counts non-recursive calls,
+     and the second counts recursive calls.
+
+     In the example above, the function `report' was called once from
+     `main'.
+
+`name'
+     This is the name of the current function.  The index number is
+     repeated after it.
+
+     If the function is part of a cycle of recursion, the cycle number
+     is printed between the function's name and the index number (*note
+     How Mutually Recursive Functions Are Described: Cycles.).  For
+     example, if function `gnurr' is part of cycle number one, and has
+     index number twelve, its primary line would be end like this:
+
+          gnurr <cycle 1> [12]
+
+
+File: gprof.info,  Node: Callers,  Next: Subroutines,  Prev: Primary,  Up: Call Graph
+
+5.2.2 Lines for a Function's Callers
+------------------------------------
+
+A function's entry has a line for each function it was called by.
+These lines' fields correspond to the fields of the primary line, but
+their meanings are different because of the difference in context.
+
+   For reference, we repeat two lines from the entry for the function
+`report', the primary line and one caller-line preceding it, together
+with the heading line that shows the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+                     0.00    0.05       1/1           main [2]
+     [3]    100.0    0.00    0.05       1         report [3]
+
+   Here are the meanings of the fields in the caller-line for `report'
+called from `main':
+
+`self'
+     An estimate of the amount of time spent in `report' itself when it
+     was called from `main'.
+
+`children'
+     An estimate of the amount of time spent in subroutines of `report'
+     when `report' was called from `main'.
+
+     The sum of the `self' and `children' fields is an estimate of the
+     amount of time spent within calls to `report' from `main'.
+
+`called'
+     Two numbers: the number of times `report' was called from `main',
+     followed by the total number of non-recursive calls to `report'
+     from all its callers.
+
+`name and index number'
+     The name of the caller of `report' to which this line applies,
+     followed by the caller's index number.
+
+     Not all functions have entries in the call graph; some options to
+     `gprof' request the omission of certain functions.  When a caller
+     has no entry of its own, it still has caller-lines in the entries
+     of the functions it calls.
+
+     If the caller is part of a recursion cycle, the cycle number is
+     printed between the name and the index number.
+
+   If the identity of the callers of a function cannot be determined, a
+dummy caller-line is printed which has `<spontaneous>' as the "caller's
+name" and all other fields blank.  This can happen for signal handlers.
+
+
+File: gprof.info,  Node: Subroutines,  Next: Cycles,  Prev: Callers,  Up: Call Graph
+
+5.2.3 Lines for a Function's Subroutines
+----------------------------------------
+
+A function's entry has a line for each of its subroutines--in other
+words, a line for each other function that it called.  These lines'
+fields correspond to the fields of the primary line, but their meanings
+are different because of the difference in context.
+
+   For reference, we repeat two lines from the entry for the function
+`main', the primary line and a line for a subroutine, together with the
+heading line that shows the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+     [2]    100.0    0.00    0.05       1         main [2]
+                     0.00    0.05       1/1           report [3]
+
+   Here are the meanings of the fields in the subroutine-line for `main'
+calling `report':
+
+`self'
+     An estimate of the amount of time spent directly within `report'
+     when `report' was called from `main'.
+
+`children'
+     An estimate of the amount of time spent in subroutines of `report'
+     when `report' was called from `main'.
+
+     The sum of the `self' and `children' fields is an estimate of the
+     total time spent in calls to `report' from `main'.
+
+`called'
+     Two numbers, the number of calls to `report' from `main' followed
+     by the total number of non-recursive calls to `report'.  This
+     ratio is used to determine how much of `report''s `self' and
+     `children' time gets credited to `main'.  *Note Estimating
+     `children' Times: Assumptions.
+
+`name'
+     The name of the subroutine of `main' to which this line applies,
+     followed by the subroutine's index number.
+
+     If the caller is part of a recursion cycle, the cycle number is
+     printed between the name and the index number.
+
+
+File: gprof.info,  Node: Cycles,  Prev: Subroutines,  Up: Call Graph
+
+5.2.4 How Mutually Recursive Functions Are Described
+----------------------------------------------------
+
+The graph may be complicated by the presence of "cycles of recursion"
+in the call graph.  A cycle exists if a function calls another function
+that (directly or indirectly) calls (or appears to call) the original
+function.  For example: if `a' calls `b', and `b' calls `a', then `a'
+and `b' form a cycle.
+
+   Whenever there are call paths both ways between a pair of functions,
+they belong to the same cycle.  If `a' and `b' call each other and `b'
+and `c' call each other, all three make one cycle.  Note that even if
+`b' only calls `a' if it was not called from `a', `gprof' cannot
+determine this, so `a' and `b' are still considered a cycle.
+
+   The cycles are numbered with consecutive integers.  When a function
+belongs to a cycle, each time the function name appears in the call
+graph it is followed by `<cycle NUMBER>'.
+
+   The reason cycles matter is that they make the time values in the
+call graph paradoxical.  The "time spent in children" of `a' should
+include the time spent in its subroutine `b' and in `b''s
+subroutines--but one of `b''s subroutines is `a'!  How much of `a''s
+time should be included in the children of `a', when `a' is indirectly
+recursive?
+
+   The way `gprof' resolves this paradox is by creating a single entry
+for the cycle as a whole.  The primary line of this entry describes the
+total time spent directly in the functions of the cycle.  The
+"subroutines" of the cycle are the individual functions of the cycle,
+and all other functions that were called directly by them.  The
+"callers" of the cycle are the functions, outside the cycle, that
+called functions in the cycle.
+
+   Here is an example portion of a call graph which shows a cycle
+containing functions `a' and `b'.  The cycle was entered by a call to
+`a' from `main'; both `a' and `b' called `c'.
+
+     index  % time    self  children called     name
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+     [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
+                      1.02        0    3          b <cycle 1> [4]
+                      0.75        0    2          a <cycle 1> [5]
+     ----------------------------------------
+                                       3          a <cycle 1> [5]
+     [4]     52.85    1.02        0    0      b <cycle 1> [4]
+                                       2          a <cycle 1> [5]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+                                       2          b <cycle 1> [4]
+     [5]     38.86    0.75        0    1      a <cycle 1> [5]
+                                       3          b <cycle 1> [4]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+
+(The entire call graph for this program contains in addition an entry
+for `main', which calls `a', and an entry for `c', with callers `a' and
+`b'.)
+
+     index  % time    self  children called     name
+                                                  <spontaneous>
+     [1]    100.00       0     1.93    0      start [1]
+                      0.16     1.77    1/1        main [2]
+     ----------------------------------------
+                      0.16     1.77    1/1        start [1]
+     [2]    100.00    0.16     1.77    1      main [2]
+                      1.77        0    1/1        a <cycle 1> [5]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+     [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
+                      1.02        0    3          b <cycle 1> [4]
+                      0.75        0    2          a <cycle 1> [5]
+                         0        0    6/6        c [6]
+     ----------------------------------------
+                                       3          a <cycle 1> [5]
+     [4]     52.85    1.02        0    0      b <cycle 1> [4]
+                                       2          a <cycle 1> [5]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+                                       2          b <cycle 1> [4]
+     [5]     38.86    0.75        0    1      a <cycle 1> [5]
+                                       3          b <cycle 1> [4]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                         0        0    3/6        b <cycle 1> [4]
+                         0        0    3/6        a <cycle 1> [5]
+     [6]      0.00       0        0    6      c [6]
+     ----------------------------------------
+
+   The `self' field of the cycle's primary line is the total time spent
+in all the functions of the cycle.  It equals the sum of the `self'
+fields for the individual functions in the cycle, found in the entry in
+the subroutine lines for these functions.
+
+   The `children' fields of the cycle's primary line and subroutine
+lines count only subroutines outside the cycle.  Even though `a' calls
+`b', the time spent in those calls to `b' is not counted in `a''s
+`children' time.  Thus, we do not encounter the problem of what to do
+when the time in those calls to `b' includes indirect recursive calls
+back to `a'.
+
+   The `children' field of a caller-line in the cycle's entry estimates
+the amount of time spent _in the whole cycle_, and its other
+subroutines, on the times when that caller called a function in the
+cycle.
+
+   The `called' field in the primary line for the cycle has two numbers:
+first, the number of times functions in the cycle were called by
+functions outside the cycle; second, the number of times they were
+called by functions in the cycle (including times when a function in
+the cycle calls itself).  This is a generalization of the usual split
+into non-recursive and recursive calls.
+
+   The `called' field of a subroutine-line for a cycle member in the
+cycle's entry says how many time that function was called from
+functions in the cycle.  The total of all these is the second number in
+the primary line's `called' field.
+
+   In the individual entry for a function in a cycle, the other
+functions in the same cycle can appear as subroutines and as callers.
+These lines show how many times each function in the cycle called or
+was called from each other function in the cycle.  The `self' and
+`children' fields in these lines are blank because of the difficulty of
+defining meanings for them when recursion is going on.
+
+
+File: gprof.info,  Node: Line-by-line,  Next: Annotated Source,  Prev: Call Graph,  Up: Output
+
+5.3 Line-by-line Profiling
+==========================
+
+`gprof''s `-l' option causes the program to perform "line-by-line"
+profiling.  In this mode, histogram samples are assigned not to
+functions, but to individual lines of source code.  This only works
+with programs compiled with older versions of the `gcc' compiler.
+Newer versions of `gcc' use a different program - `gcov' - to display
+line-by-line profiling information.
+
+   With the older versions of `gcc' the program usually has to be
+compiled with a `-g' option, in addition to `-pg', in order to generate
+debugging symbols for tracking source code lines.  Note, in much older
+versions of `gcc' the program had to be compiled with the `-a' command
+line option as well.
+
+   The flat profile is the most useful output table in line-by-line
+mode.  The call graph isn't as useful as normal, since the current
+version of `gprof' does not propagate call graph arcs from source code
+lines to the enclosing function.  The call graph does, however, show
+each line of code that called each function, along with a count.
+
+   Here is a section of `gprof''s output, without line-by-line
+profiling.  Note that `ct_init' accounted for four histogram hits, and
+13327 calls to `init_block'.
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  us/call  us/call  name
+      30.77      0.13     0.04     6335     6.31     6.31  ct_init
+
+
+     		     Call graph (explanation follows)
+
+
+     granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
+
+     index % time    self  children    called     name
+
+                     0.00    0.00       1/13496       name_too_long
+                     0.00    0.00      40/13496       deflate
+                     0.00    0.00     128/13496       deflate_fast
+                     0.00    0.00   13327/13496       ct_init
+     [7]      0.0    0.00    0.00   13496         init_block
+
+   Now let's look at some of `gprof''s output from the same program run,
+this time with line-by-line profiling enabled.  Note that `ct_init''s
+four histogram hits are broken down into four lines of source code--one
+hit occurred on each of lines 349, 351, 382 and 385.  In the call graph,
+note how `ct_init''s 13327 calls to `init_block' are broken down into
+one call from line 396, 3071 calls from line 384, 3730 calls from line
+385, and 6525 calls from 387.
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self
+      time   seconds   seconds    calls  name
+       7.69      0.10     0.01           ct_init (trees.c:349)
+       7.69      0.11     0.01           ct_init (trees.c:351)
+       7.69      0.12     0.01           ct_init (trees.c:382)
+       7.69      0.13     0.01           ct_init (trees.c:385)
+
+
+     		     Call graph (explanation follows)
+
+
+     granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
+
+       % time    self  children    called     name
+
+                 0.00    0.00       1/13496       name_too_long (gzip.c:1440)
+                 0.00    0.00       1/13496       deflate (deflate.c:763)
+                 0.00    0.00       1/13496       ct_init (trees.c:396)
+                 0.00    0.00       2/13496       deflate (deflate.c:727)
+                 0.00    0.00       4/13496       deflate (deflate.c:686)
+                 0.00    0.00       5/13496       deflate (deflate.c:675)
+                 0.00    0.00      12/13496       deflate (deflate.c:679)
+                 0.00    0.00      16/13496       deflate (deflate.c:730)
+                 0.00    0.00     128/13496       deflate_fast (deflate.c:654)
+                 0.00    0.00    3071/13496       ct_init (trees.c:384)
+                 0.00    0.00    3730/13496       ct_init (trees.c:385)
+                 0.00    0.00    6525/13496       ct_init (trees.c:387)
+     [6]  0.0    0.00    0.00   13496         init_block (trees.c:408)
+
+
+File: gprof.info,  Node: Annotated Source,  Prev: Line-by-line,  Up: Output
+
+5.4 The Annotated Source Listing
+================================
+
+`gprof''s `-A' option triggers an annotated source listing, which lists
+the program's source code, each function labeled with the number of
+times it was called.  You may also need to specify the `-I' option, if
+`gprof' can't find the source code files.
+
+   With older versions of `gcc' compiling with `gcc ... -g -pg -a'
+augments your program with basic-block counting code, in addition to
+function counting code.  This enables `gprof' to determine how many
+times each line of code was executed.  With newer versions of `gcc'
+support for displaying basic-block counts is provided by the `gcov'
+program.
+
+   For example, consider the following function, taken from gzip, with
+line numbers added:
+
+      1 ulg updcrc(s, n)
+      2     uch *s;
+      3     unsigned n;
+      4 {
+      5     register ulg c;
+      6
+      7     static ulg crc = (ulg)0xffffffffL;
+      8
+      9     if (s == NULL) {
+     10         c = 0xffffffffL;
+     11     } else {
+     12         c = crc;
+     13         if (n) do {
+     14             c = crc_32_tab[...];
+     15         } while (--n);
+     16     }
+     17     crc = c;
+     18     return c ^ 0xffffffffL;
+     19 }
+
+   `updcrc' has at least five basic-blocks.  One is the function
+itself.  The `if' statement on line 9 generates two more basic-blocks,
+one for each branch of the `if'.  A fourth basic-block results from the
+`if' on line 13, and the contents of the `do' loop form the fifth
+basic-block.  The compiler may also generate additional basic-blocks to
+handle various special cases.
+
+   A program augmented for basic-block counting can be analyzed with
+`gprof -l -A'.  The `-x' option is also helpful, to ensure that each
+line of code is labeled at least once.  Here is `updcrc''s annotated
+source listing for a sample `gzip' run:
+
+                     ulg updcrc(s, n)
+                         uch *s;
+                         unsigned n;
+                 2 ->{
+                         register ulg c;
+
+                         static ulg crc = (ulg)0xffffffffL;
+
+                 2 ->    if (s == NULL) {
+                 1 ->        c = 0xffffffffL;
+                 1 ->    } else {
+                 1 ->        c = crc;
+                 1 ->        if (n) do {
+             26312 ->            c = crc_32_tab[...];
+     26312,1,26311 ->        } while (--n);
+                         }
+                 2 ->    crc = c;
+                 2 ->    return c ^ 0xffffffffL;
+                 2 ->}
+
+   In this example, the function was called twice, passing once through
+each branch of the `if' statement.  The body of the `do' loop was
+executed a total of 26312 times.  Note how the `while' statement is
+annotated.  It began execution 26312 times, once for each iteration
+through the loop.  One of those times (the last time) it exited, while
+it branched back to the beginning of the loop 26311 times.
+
+
+File: gprof.info,  Node: Inaccuracy,  Next: How do I?,  Prev: Output,  Up: Top
+
+6 Inaccuracy of `gprof' Output
+******************************
+
+* Menu:
+
+* Sampling Error::      Statistical margins of error
+* Assumptions::         Estimating children times
+
+
+File: gprof.info,  Node: Sampling Error,  Next: Assumptions,  Up: Inaccuracy
+
+6.1 Statistical Sampling Error
+==============================
+
+The run-time figures that `gprof' gives you are based on a sampling
+process, so they are subject to statistical inaccuracy.  If a function
+runs only a small amount of time, so that on the average the sampling
+process ought to catch that function in the act only once, there is a
+pretty good chance it will actually find that function zero times, or
+twice.
+
+   By contrast, the number-of-calls and basic-block figures are derived
+by counting, not sampling.  They are completely accurate and will not
+vary from run to run if your program is deterministic and single
+threaded.  In multi-threaded applications, or single threaded
+applications that link with multi-threaded libraries, the counts are
+only deterministic if the counting function is thread-safe.  (Note:
+beware that the mcount counting function in glibc is _not_
+thread-safe).  *Note Implementation of Profiling: Implementation.
+
+   The "sampling period" that is printed at the beginning of the flat
+profile says how often samples are taken.  The rule of thumb is that a
+run-time figure is accurate if it is considerably bigger than the
+sampling period.
+
+   The actual amount of error can be predicted.  For N samples, the
+_expected_ error is the square-root of N.  For example, if the sampling
+period is 0.01 seconds and `foo''s run-time is 1 second, N is 100
+samples (1 second/0.01 seconds), sqrt(N) is 10 samples, so the expected
+error in `foo''s run-time is 0.1 seconds (10*0.01 seconds), or ten
+percent of the observed value.  Again, if the sampling period is 0.01
+seconds and `bar''s run-time is 100 seconds, N is 10000 samples,
+sqrt(N) is 100 samples, so the expected error in `bar''s run-time is 1
+second, or one percent of the observed value.  It is likely to vary
+this much _on the average_ from one profiling run to the next.
+(_Sometimes_ it will vary more.)
+
+   This does not mean that a small run-time figure is devoid of
+information.  If the program's _total_ run-time is large, a small
+run-time for one function does tell you that that function used an
+insignificant fraction of the whole program's time.  Usually this means
+it is not worth optimizing.
+
+   One way to get more accuracy is to give your program more (but
+similar) input data so it will take longer.  Another way is to combine
+the data from several runs, using the `-s' option of `gprof'.  Here is
+how:
+
+  1. Run your program once.
+
+  2. Issue the command `mv gmon.out gmon.sum'.
+
+  3. Run your program again, the same as before.
+
+  4. Merge the new data in `gmon.out' into `gmon.sum' with this command:
+
+          gprof -s EXECUTABLE-FILE gmon.out gmon.sum
+
+  5. Repeat the last two steps as often as you wish.
+
+  6. Analyze the cumulative data using this command:
+
+          gprof EXECUTABLE-FILE gmon.sum > OUTPUT-FILE
+
+
+File: gprof.info,  Node: Assumptions,  Prev: Sampling Error,  Up: Inaccuracy
+
+6.2 Estimating `children' Times
+===============================
+
+Some of the figures in the call graph are estimates--for example, the
+`children' time values and all the time figures in caller and
+subroutine lines.
+
+   There is no direct information about these measurements in the
+profile data itself.  Instead, `gprof' estimates them by making an
+assumption about your program that might or might not be true.
+
+   The assumption made is that the average time spent in each call to
+any function `foo' is not correlated with who called `foo'.  If `foo'
+used 5 seconds in all, and 2/5 of the calls to `foo' came from `a',
+then `foo' contributes 2 seconds to `a''s `children' time, by
+assumption.
+
+   This assumption is usually true enough, but for some programs it is
+far from true.  Suppose that `foo' returns very quickly when its
+argument is zero; suppose that `a' always passes zero as an argument,
+while other callers of `foo' pass other arguments.  In this program,
+all the time spent in `foo' is in the calls from callers other than `a'.
+But `gprof' has no way of knowing this; it will blindly and incorrectly
+charge 2 seconds of time in `foo' to the children of `a'.
+
+   We hope some day to put more complete data into `gmon.out', so that
+this assumption is no longer needed, if we can figure out how.  For the
+novice, the estimated figures are usually more useful than misleading.
+
+
+File: gprof.info,  Node: How do I?,  Next: Incompatibilities,  Prev: Inaccuracy,  Up: Top
+
+7 Answers to Common Questions
+*****************************
+
+How can I get more exact information about hot spots in my program?
+     Looking at the per-line call counts only tells part of the story.
+     Because `gprof' can only report call times and counts by function,
+     the best way to get finer-grained information on where the program
+     is spending its time is to re-factor large functions into sequences
+     of calls to smaller ones.  Beware however that this can introduce
+     artificial hot spots since compiling with `-pg' adds a significant
+     overhead to function calls.  An alternative solution is to use a
+     non-intrusive profiler, e.g. oprofile.
+
+How do I find which lines in my program were executed the most times?
+     Use the `gcov' program.
+
+How do I find which lines in my program called a particular function?
+     Use `gprof -l' and lookup the function in the call graph.  The
+     callers will be broken down by function and line number.
+
+How do I analyze a program that runs for less than a second?
+     Try using a shell script like this one:
+
+          for i in `seq 1 100`; do
+            fastprog
+            mv gmon.out gmon.out.$i
+          done
+
+          gprof -s fastprog gmon.out.*
+
+          gprof fastprog gmon.sum
+
+     If your program is completely deterministic, all the call counts
+     will be simple multiples of 100 (i.e., a function called once in
+     each run will appear with a call count of 100).
+
+
+
+File: gprof.info,  Node: Incompatibilities,  Next: Details,  Prev: How do I?,  Up: Top
+
+8 Incompatibilities with Unix `gprof'
+*************************************
+
+GNU `gprof' and Berkeley Unix `gprof' use the same data file
+`gmon.out', and provide essentially the same information.  But there
+are a few differences.
+
+   * GNU `gprof' uses a new, generalized file format with support for
+     basic-block execution counts and non-realtime histograms.  A magic
+     cookie and version number allows `gprof' to easily identify new
+     style files.  Old BSD-style files can still be read.  *Note
+     Profiling Data File Format: File Format.
+
+   * For a recursive function, Unix `gprof' lists the function as a
+     parent and as a child, with a `calls' field that lists the number
+     of recursive calls.  GNU `gprof' omits these lines and puts the
+     number of recursive calls in the primary line.
+
+   * When a function is suppressed from the call graph with `-e', GNU
+     `gprof' still lists it as a subroutine of functions that call it.
+
+   * GNU `gprof' accepts the `-k' with its argument in the form
+     `from/to', instead of `from to'.
+
+   * In the annotated source listing, if there are multiple basic
+     blocks on the same line, GNU `gprof' prints all of their counts,
+     separated by commas.
+
+   * The blurbs, field widths, and output formats are different.  GNU
+     `gprof' prints blurbs after the tables, so that you can see the
+     tables without skipping the blurbs.
+
+
+File: gprof.info,  Node: Details,  Next: GNU Free Documentation License,  Prev: Incompatibilities,  Up: Top
+
+9 Details of Profiling
+**********************
+
+* Menu:
+
+* Implementation::      How a program collects profiling information
+* File Format::         Format of `gmon.out' files
+* Internals::           `gprof''s internal operation
+* Debugging::           Using `gprof''s `-d' option
+
+
+File: gprof.info,  Node: Implementation,  Next: File Format,  Up: Details
+
+9.1 Implementation of Profiling
+===============================
+
+Profiling works by changing how every function in your program is
+compiled so that when it is called, it will stash away some information
+about where it was called from.  From this, the profiler can figure out
+what function called it, and can count how many times it was called.
+This change is made by the compiler when your program is compiled with
+the `-pg' option, which causes every function to call `mcount' (or
+`_mcount', or `__mcount', depending on the OS and compiler) as one of
+its first operations.
+
+   The `mcount' routine, included in the profiling library, is
+responsible for recording in an in-memory call graph table both its
+parent routine (the child) and its parent's parent.  This is typically
+done by examining the stack frame to find both the address of the
+child, and the return address in the original parent.  Since this is a
+very machine-dependent operation, `mcount' itself is typically a short
+assembly-language stub routine that extracts the required information,
+and then calls `__mcount_internal' (a normal C function) with two
+arguments--`frompc' and `selfpc'.  `__mcount_internal' is responsible
+for maintaining the in-memory call graph, which records `frompc',
+`selfpc', and the number of times each of these call arcs was traversed.
+
+   GCC Version 2 provides a magical function
+(`__builtin_return_address'), which allows a generic `mcount' function
+to extract the required information from the stack frame.  However, on
+some architectures, most notably the SPARC, using this builtin can be
+very computationally expensive, and an assembly language version of
+`mcount' is used for performance reasons.
+
+   Number-of-calls information for library routines is collected by
+using a special version of the C library.  The programs in it are the
+same as in the usual C library, but they were compiled with `-pg'.  If
+you link your program with `gcc ... -pg', it automatically uses the
+profiling version of the library.
+
+   Profiling also involves watching your program as it runs, and
+keeping a histogram of where the program counter happens to be every
+now and then.  Typically the program counter is looked at around 100
+times per second of run time, but the exact frequency may vary from
+system to system.
+
+   This is done is one of two ways.  Most UNIX-like operating systems
+provide a `profil()' system call, which registers a memory array with
+the kernel, along with a scale factor that determines how the program's
+address space maps into the array.  Typical scaling values cause every
+2 to 8 bytes of address space to map into a single array slot.  On
+every tick of the system clock (assuming the profiled program is
+running), the value of the program counter is examined and the
+corresponding slot in the memory array is incremented.  Since this is
+done in the kernel, which had to interrupt the process anyway to handle
+the clock interrupt, very little additional system overhead is required.
+
+   However, some operating systems, most notably Linux 2.0 (and
+earlier), do not provide a `profil()' system call.  On such a system,
+arrangements are made for the kernel to periodically deliver a signal
+to the process (typically via `setitimer()'), which then performs the
+same operation of examining the program counter and incrementing a slot
+in the memory array.  Since this method requires a signal to be
+delivered to user space every time a sample is taken, it uses
+considerably more overhead than kernel-based profiling.  Also, due to
+the added delay required to deliver the signal, this method is less
+accurate as well.
+
+   A special startup routine allocates memory for the histogram and
+either calls `profil()' or sets up a clock signal handler.  This
+routine (`monstartup') can be invoked in several ways.  On Linux
+systems, a special profiling startup file `gcrt0.o', which invokes
+`monstartup' before `main', is used instead of the default `crt0.o'.
+Use of this special startup file is one of the effects of using `gcc
+... -pg' to link.  On SPARC systems, no special startup files are used.
+Rather, the `mcount' routine, when it is invoked for the first time
+(typically when `main' is called), calls `monstartup'.
+
+   If the compiler's `-a' option was used, basic-block counting is also
+enabled.  Each object file is then compiled with a static array of
+counts, initially zero.  In the executable code, every time a new
+basic-block begins (i.e., when an `if' statement appears), an extra
+instruction is inserted to increment the corresponding count in the
+array.  At compile time, a paired array was constructed that recorded
+the starting address of each basic-block.  Taken together, the two
+arrays record the starting address of every basic-block, along with the
+number of times it was executed.
+
+   The profiling library also includes a function (`mcleanup') which is
+typically registered using `atexit()' to be called as the program
+exits, and is responsible for writing the file `gmon.out'.  Profiling
+is turned off, various headers are output, and the histogram is
+written, followed by the call-graph arcs and the basic-block counts.
+
+   The output from `gprof' gives no indication of parts of your program
+that are limited by I/O or swapping bandwidth.  This is because samples
+of the program counter are taken at fixed intervals of the program's
+run time.  Therefore, the time measurements in `gprof' output say
+nothing about time that your program was not running.  For example, a
+part of the program that creates so much data that it cannot all fit in
+physical memory at once may run very slowly due to thrashing, but
+`gprof' will say it uses little time.  On the other hand, sampling by
+run time has the advantage that the amount of load due to other users
+won't directly affect the output you get.
+
+
+File: gprof.info,  Node: File Format,  Next: Internals,  Prev: Implementation,  Up: Details
+
+9.2 Profiling Data File Format
+==============================
+
+The old BSD-derived file format used for profile data does not contain a
+magic cookie that allows to check whether a data file really is a
+`gprof' file.  Furthermore, it does not provide a version number, thus
+rendering changes to the file format almost impossible.  GNU `gprof'
+uses a new file format that provides these features.  For backward
+compatibility, GNU `gprof' continues to support the old BSD-derived
+format, but not all features are supported with it.  For example,
+basic-block execution counts cannot be accommodated by the old file
+format.
+
+   The new file format is defined in header file `gmon_out.h'.  It
+consists of a header containing the magic cookie and a version number,
+as well as some spare bytes available for future extensions.  All data
+in a profile data file is in the native format of the target for which
+the profile was collected.  GNU `gprof' adapts automatically to the
+byte-order in use.
+
+   In the new file format, the header is followed by a sequence of
+records.  Currently, there are three different record types: histogram
+records, call-graph arc records, and basic-block execution count
+records.  Each file can contain any number of each record type.  When
+reading a file, GNU `gprof' will ensure records of the same type are
+compatible with each other and compute the union of all records.  For
+example, for basic-block execution counts, the union is simply the sum
+of all execution counts for each basic-block.
+
+9.2.1 Histogram Records
+-----------------------
+
+Histogram records consist of a header that is followed by an array of
+bins.  The header contains the text-segment range that the histogram
+spans, the size of the histogram in bytes (unlike in the old BSD
+format, this does not include the size of the header), the rate of the
+profiling clock, and the physical dimension that the bin counts
+represent after being scaled by the profiling clock rate.  The physical
+dimension is specified in two parts: a long name of up to 15 characters
+and a single character abbreviation.  For example, a histogram
+representing real-time would specify the long name as "seconds" and the
+abbreviation as "s".  This feature is useful for architectures that
+support performance monitor hardware (which, fortunately, is becoming
+increasingly common).  For example, under DEC OSF/1, the "uprofile"
+command can be used to produce a histogram of, say, instruction cache
+misses.  In this case, the dimension in the histogram header could be
+set to "i-cache misses" and the abbreviation could be set to "1"
+(because it is simply a count, not a physical dimension).  Also, the
+profiling rate would have to be set to 1 in this case.
+
+   Histogram bins are 16-bit numbers and each bin represent an equal
+amount of text-space.  For example, if the text-segment is one thousand
+bytes long and if there are ten bins in the histogram, each bin
+represents one hundred bytes.
+
+9.2.2 Call-Graph Records
+------------------------
+
+Call-graph records have a format that is identical to the one used in
+the BSD-derived file format.  It consists of an arc in the call graph
+and a count indicating the number of times the arc was traversed during
+program execution.  Arcs are specified by a pair of addresses: the
+first must be within caller's function and the second must be within
+the callee's function.  When performing profiling at the function
+level, these addresses can point anywhere within the respective
+function.  However, when profiling at the line-level, it is better if
+the addresses are as close to the call-site/entry-point as possible.
+This will ensure that the line-level call-graph is able to identify
+exactly which line of source code performed calls to a function.
+
+9.2.3 Basic-Block Execution Count Records
+-----------------------------------------
+
+Basic-block execution count records consist of a header followed by a
+sequence of address/count pairs.  The header simply specifies the
+length of the sequence.  In an address/count pair, the address
+identifies a basic-block and the count specifies the number of times
+that basic-block was executed.  Any address within the basic-address can
+be used.
+
+
+File: gprof.info,  Node: Internals,  Next: Debugging,  Prev: File Format,  Up: Details
+
+9.3 `gprof''s Internal Operation
+================================
+
+Like most programs, `gprof' begins by processing its options.  During
+this stage, it may building its symspec list (`sym_ids.c:sym_id_add'),
+if options are specified which use symspecs.  `gprof' maintains a
+single linked list of symspecs, which will eventually get turned into
+12 symbol tables, organized into six include/exclude pairs--one pair
+each for the flat profile (INCL_FLAT/EXCL_FLAT), the call graph arcs
+(INCL_ARCS/EXCL_ARCS), printing in the call graph
+(INCL_GRAPH/EXCL_GRAPH), timing propagation in the call graph
+(INCL_TIME/EXCL_TIME), the annotated source listing
+(INCL_ANNO/EXCL_ANNO), and the execution count listing
+(INCL_EXEC/EXCL_EXEC).
+
+   After option processing, `gprof' finishes building the symspec list
+by adding all the symspecs in `default_excluded_list' to the exclude
+lists EXCL_TIME and EXCL_GRAPH, and if line-by-line profiling is
+specified, EXCL_FLAT as well.  These default excludes are not added to
+EXCL_ANNO, EXCL_ARCS, and EXCL_EXEC.
+
+   Next, the BFD library is called to open the object file, verify that
+it is an object file, and read its symbol table (`core.c:core_init'),
+using `bfd_canonicalize_symtab' after mallocing an appropriately sized
+array of symbols.  At this point, function mappings are read (if the
+`--file-ordering' option has been specified), and the core text space
+is read into memory (if the `-c' option was given).
+
+   `gprof''s own symbol table, an array of Sym structures, is now built.
+This is done in one of two ways, by one of two routines, depending on
+whether line-by-line profiling (`-l' option) has been enabled.  For
+normal profiling, the BFD canonical symbol table is scanned.  For
+line-by-line profiling, every text space address is examined, and a new
+symbol table entry gets created every time the line number changes.  In
+either case, two passes are made through the symbol table--one to count
+the size of the symbol table required, and the other to actually read
+the symbols.  In between the two passes, a single array of type `Sym'
+is created of the appropriate length.  Finally,
+`symtab.c:symtab_finalize' is called to sort the symbol table and
+remove duplicate entries (entries with the same memory address).
+
+   The symbol table must be a contiguous array for two reasons.  First,
+the `qsort' library function (which sorts an array) will be used to
+sort the symbol table.  Also, the symbol lookup routine
+(`symtab.c:sym_lookup'), which finds symbols based on memory address,
+uses a binary search algorithm which requires the symbol table to be a
+sorted array.  Function symbols are indicated with an `is_func' flag.
+Line number symbols have no special flags set.  Additionally, a symbol
+can have an `is_static' flag to indicate that it is a local symbol.
+
+   With the symbol table read, the symspecs can now be translated into
+Syms (`sym_ids.c:sym_id_parse').  Remember that a single symspec can
+match multiple symbols.  An array of symbol tables (`syms') is created,
+each entry of which is a symbol table of Syms to be included or
+excluded from a particular listing.  The master symbol table and the
+symspecs are examined by nested loops, and every symbol that matches a
+symspec is inserted into the appropriate syms table.  This is done
+twice, once to count the size of each required symbol table, and again
+to build the tables, which have been malloced between passes.  From now
+on, to determine whether a symbol is on an include or exclude symspec
+list, `gprof' simply uses its standard symbol lookup routine on the
+appropriate table in the `syms' array.
+
+   Now the profile data file(s) themselves are read
+(`gmon_io.c:gmon_out_read'), first by checking for a new-style
+`gmon.out' header, then assuming this is an old-style BSD `gmon.out' if
+the magic number test failed.
+
+   New-style histogram records are read by `hist.c:hist_read_rec'.  For
+the first histogram record, allocate a memory array to hold all the
+bins, and read them in.  When multiple profile data files (or files
+with multiple histogram records) are read, the memory ranges of each
+pair of histogram records must be either equal, or non-overlapping.
+For each pair of histogram records, the resolution (memory region size
+divided by the number of bins) must be the same.  The time unit must be
+the same for all histogram records. If the above containts are met, all
+histograms for the same memory range are merged.
+
+   As each call graph record is read (`call_graph.c:cg_read_rec'), the
+parent and child addresses are matched to symbol table entries, and a
+call graph arc is created by `cg_arcs.c:arc_add', unless the arc fails
+a symspec check against INCL_ARCS/EXCL_ARCS.  As each arc is added, a
+linked list is maintained of the parent's child arcs, and of the child's
+parent arcs.  Both the child's call count and the arc's call count are
+incremented by the record's call count.
+
+   Basic-block records are read (`basic_blocks.c:bb_read_rec'), but
+only if line-by-line profiling has been selected.  Each basic-block
+address is matched to a corresponding line symbol in the symbol table,
+and an entry made in the symbol's bb_addr and bb_calls arrays.  Again,
+if multiple basic-block records are present for the same address, the
+call counts are cumulative.
+
+   A gmon.sum file is dumped, if requested (`gmon_io.c:gmon_out_write').
+
+   If histograms were present in the data files, assign them to symbols
+(`hist.c:hist_assign_samples') by iterating over all the sample bins
+and assigning them to symbols.  Since the symbol table is sorted in
+order of ascending memory addresses, we can simple follow along in the
+symbol table as we make our pass over the sample bins.  This step
+includes a symspec check against INCL_FLAT/EXCL_FLAT.  Depending on the
+histogram scale factor, a sample bin may span multiple symbols, in
+which case a fraction of the sample count is allocated to each symbol,
+proportional to the degree of overlap.  This effect is rare for normal
+profiling, but overlaps are more common during line-by-line profiling,
+and can cause each of two adjacent lines to be credited with half a
+hit, for example.
+
+   If call graph data is present, `cg_arcs.c:cg_assemble' is called.
+First, if `-c' was specified, a machine-dependent routine (`find_call')
+scans through each symbol's machine code, looking for subroutine call
+instructions, and adding them to the call graph with a zero call count.
+A topological sort is performed by depth-first numbering all the
+symbols (`cg_dfn.c:cg_dfn'), so that children are always numbered less
+than their parents, then making a array of pointers into the symbol
+table and sorting it into numerical order, which is reverse topological
+order (children appear before parents).  Cycles are also detected at
+this point, all members of which are assigned the same topological
+number.  Two passes are now made through this sorted array of symbol
+pointers.  The first pass, from end to beginning (parents to children),
+computes the fraction of child time to propagate to each parent and a
+print flag.  The print flag reflects symspec handling of
+INCL_GRAPH/EXCL_GRAPH, with a parent's include or exclude (print or no
+print) property being propagated to its children, unless they
+themselves explicitly appear in INCL_GRAPH or EXCL_GRAPH.  A second
+pass, from beginning to end (children to parents) actually propagates
+the timings along the call graph, subject to a check against
+INCL_TIME/EXCL_TIME.  With the print flag, fractions, and timings now
+stored in the symbol structures, the topological sort array is now
+discarded, and a new array of pointers is assembled, this time sorted
+by propagated time.
+
+   Finally, print the various outputs the user requested, which is now
+fairly straightforward.  The call graph (`cg_print.c:cg_print') and
+flat profile (`hist.c:hist_print') are regurgitations of values already
+computed.  The annotated source listing
+(`basic_blocks.c:print_annotated_source') uses basic-block information,
+if present, to label each line of code with call counts, otherwise only
+the function call counts are presented.
+
+   The function ordering code is marginally well documented in the
+source code itself (`cg_print.c').  Basically, the functions with the
+most use and the most parents are placed first, followed by other
+functions with the most use, followed by lower use functions, followed
+by unused functions at the end.
+
+
+File: gprof.info,  Node: Debugging,  Prev: Internals,  Up: Details
+
+9.4 Debugging `gprof'
+=====================
+
+If `gprof' was compiled with debugging enabled, the `-d' option
+triggers debugging output (to stdout) which can be helpful in
+understanding its operation.  The debugging number specified is
+interpreted as a sum of the following options:
+
+2 - Topological sort
+     Monitor depth-first numbering of symbols during call graph analysis
+
+4 - Cycles
+     Shows symbols as they are identified as cycle heads
+
+16 - Tallying
+     As the call graph arcs are read, show each arc and how the total
+     calls to each function are tallied
+
+32 - Call graph arc sorting
+     Details sorting individual parents/children within each call graph
+     entry
+
+64 - Reading histogram and call graph records
+     Shows address ranges of histograms as they are read, and each call
+     graph arc
+
+128 - Symbol table
+     Reading, classifying, and sorting the symbol table from the object
+     file.  For line-by-line profiling (`-l' option), also shows line
+     numbers being assigned to memory addresses.
+
+256 - Static call graph
+     Trace operation of `-c' option
+
+512 - Symbol table and arc table lookups
+     Detail operation of lookup routines
+
+1024 - Call graph propagation
+     Shows how function times are propagated along the call graph
+
+2048 - Basic-blocks
+     Shows basic-block records as they are read from profile data (only
+     meaningful with `-l' option)
+
+4096 - Symspecs
+     Shows symspec-to-symbol pattern matching operation
+
+8192 - Annotate source
+     Tracks operation of `-A' option
+
+
+File: gprof.info,  Node: GNU Free Documentation License,  Prev: Details,  Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     `http://fsf.org/'
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.  If a section does not fit the above definition of
+     Secondary then it is not allowed to be designated as Invariant.
+     The Document may contain zero Invariant Sections.  If the Document
+     does not identify any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup, or absence of
+     markup, has been arranged to thwart or discourage subsequent
+     modification by readers is not Transparent.  An image format is
+     not Transparent if used for any substantial amount of text.  A
+     copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML, PostScript or PDF designed for
+     human modification.  Examples of transparent image formats include
+     PNG, XCF and JPG.  Opaque formats include proprietary formats that
+     can be read and edited only by proprietary word processors, SGML or
+     XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML, PostScript or PDF
+     produced by some word processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a computer-network location from
+     which the general network-using public has access to download
+     using public-standard network protocols a complete Transparent
+     copy of the Document, free of added material.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section Entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the
+          section all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly
+     and finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from
+     you under this License.  If your rights have been terminated and
+     not permanently reinstated, receipt of a copy of some or all of
+     the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.  If the Document specifies that a proxy
+     can decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+
+Tag Table:
+Node: Top777
+Node: Introduction2103
+Node: Compiling4595
+Node: Executing8651
+Node: Invoking11439
+Node: Output Options12854
+Node: Analysis Options19943
+Node: Miscellaneous Options23641
+Node: Deprecated Options24896
+Node: Symspecs26965
+Node: Output28791
+Node: Flat Profile29831
+Node: Call Graph34784
+Node: Primary38016
+Node: Callers40604
+Node: Subroutines42721
+Node: Cycles44562
+Node: Line-by-line51339
+Node: Annotated Source55412
+Node: Inaccuracy58411
+Node: Sampling Error58669
+Node: Assumptions61573
+Node: How do I?63043
+Node: Incompatibilities64597
+Node: Details66091
+Node: Implementation66484
+Node: File Format72381
+Node: Internals76671
+Node: Debugging85166
+Node: GNU Free Documentation License86767
+
+End Tag Table
diff --git a/gprof/po/bg.gmo b/gprof/po/bg.gmo
new file mode 100644
index 0000000..0248e20
--- /dev/null
+++ b/gprof/po/bg.gmo
Binary files differ
diff --git a/gprof/po/da.gmo b/gprof/po/da.gmo
new file mode 100644
index 0000000..b432d99
--- /dev/null
+++ b/gprof/po/da.gmo
Binary files differ
diff --git a/gprof/po/de.gmo b/gprof/po/de.gmo
new file mode 100644
index 0000000..2f4dd2c
--- /dev/null
+++ b/gprof/po/de.gmo
Binary files differ
diff --git a/gprof/po/eo.gmo b/gprof/po/eo.gmo
new file mode 100644
index 0000000..13891b2
--- /dev/null
+++ b/gprof/po/eo.gmo
Binary files differ
diff --git a/gprof/po/es.gmo b/gprof/po/es.gmo
new file mode 100644
index 0000000..175ae7d
--- /dev/null
+++ b/gprof/po/es.gmo
Binary files differ
diff --git a/gprof/po/fi.gmo b/gprof/po/fi.gmo
new file mode 100644
index 0000000..1606d24
--- /dev/null
+++ b/gprof/po/fi.gmo
Binary files differ
diff --git a/gprof/po/fr.gmo b/gprof/po/fr.gmo
new file mode 100644
index 0000000..2a6e7dc
--- /dev/null
+++ b/gprof/po/fr.gmo
Binary files differ
diff --git a/gprof/po/ga.gmo b/gprof/po/ga.gmo
new file mode 100644
index 0000000..5942da3
--- /dev/null
+++ b/gprof/po/ga.gmo
Binary files differ
diff --git a/gprof/po/id.gmo b/gprof/po/id.gmo
new file mode 100644
index 0000000..e9c4293
--- /dev/null
+++ b/gprof/po/id.gmo
Binary files differ
diff --git a/gprof/po/it.gmo b/gprof/po/it.gmo
new file mode 100644
index 0000000..832ddde
--- /dev/null
+++ b/gprof/po/it.gmo
Binary files differ
diff --git a/gprof/po/ja.gmo b/gprof/po/ja.gmo
new file mode 100644
index 0000000..f563e64
--- /dev/null
+++ b/gprof/po/ja.gmo
Binary files differ
diff --git a/gprof/po/ms.gmo b/gprof/po/ms.gmo
new file mode 100644
index 0000000..7677687
--- /dev/null
+++ b/gprof/po/ms.gmo
Binary files differ
diff --git a/gprof/po/nl.gmo b/gprof/po/nl.gmo
new file mode 100644
index 0000000..32cf7de
--- /dev/null
+++ b/gprof/po/nl.gmo
Binary files differ
diff --git a/gprof/po/pt_BR.gmo b/gprof/po/pt_BR.gmo
new file mode 100644
index 0000000..32876f7
--- /dev/null
+++ b/gprof/po/pt_BR.gmo
Binary files differ
diff --git a/gprof/po/ro.gmo b/gprof/po/ro.gmo
new file mode 100644
index 0000000..2b3e606
--- /dev/null
+++ b/gprof/po/ro.gmo
Binary files differ
diff --git a/gprof/po/ru.gmo b/gprof/po/ru.gmo
new file mode 100644
index 0000000..b4ee126
--- /dev/null
+++ b/gprof/po/ru.gmo
Binary files differ
diff --git a/gprof/po/rw.gmo b/gprof/po/rw.gmo
new file mode 100644
index 0000000..a7a1d90
--- /dev/null
+++ b/gprof/po/rw.gmo
Binary files differ
diff --git a/gprof/po/sr.gmo b/gprof/po/sr.gmo
new file mode 100644
index 0000000..df02ffc
--- /dev/null
+++ b/gprof/po/sr.gmo
Binary files differ
diff --git a/gprof/po/sv.gmo b/gprof/po/sv.gmo
new file mode 100644
index 0000000..6af90c7
--- /dev/null
+++ b/gprof/po/sv.gmo
Binary files differ
diff --git a/gprof/po/tr.gmo b/gprof/po/tr.gmo
new file mode 100644
index 0000000..82735ab
--- /dev/null
+++ b/gprof/po/tr.gmo
Binary files differ
diff --git a/gprof/po/uk.gmo b/gprof/po/uk.gmo
new file mode 100644
index 0000000..b11462d
--- /dev/null
+++ b/gprof/po/uk.gmo
Binary files differ
diff --git a/gprof/po/vi.gmo b/gprof/po/vi.gmo
new file mode 100644
index 0000000..902b3cd
--- /dev/null
+++ b/gprof/po/vi.gmo
Binary files differ
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 02f3372..b8a99f8 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-20  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	* aarch64.h (aarch64_pstatefields): Change element type to
+	aarch64_sys_reg.
+
 2013-11-18  Renlin Li  <Renlin.Li@arm.com>
 
 	* arm.h (ARM_AEXT_V7VE): New define.
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 4a3a312..053294e 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -611,7 +611,6 @@
 };
 
 extern const struct aarch64_name_value_pair aarch64_operand_modifiers [];
-extern const struct aarch64_name_value_pair aarch64_pstatefields [];
 extern const struct aarch64_name_value_pair aarch64_barrier_options [16];
 extern const struct aarch64_name_value_pair aarch64_prfops [32];
 
@@ -623,6 +622,7 @@
 } aarch64_sys_reg;
 
 extern const aarch64_sys_reg aarch64_sys_regs [];
+extern const aarch64_sys_reg aarch64_pstatefields [];
 extern bfd_boolean aarch64_sys_reg_deprecated_p (const aarch64_sys_reg *);
 
 typedef struct
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 02e85af..1687785 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,38 @@
+2013-11-25  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	Backport from master
+
+	2013-11-21  Andrew Pinski  <apinski@cavium.com>
+
+	* Makefile.am (ALL_64_EMULATION_SOURCES): Add eaarch64linux32.c
+	and eaarch64linux32b.c
+	(eaarch64linux32.c): New target.
+	(eaarch64linux32b.c): Likewise.
+	* Makefile.in: Regenerate.
+	* configure.tgt (aarch64_be-*-linux*): Add
+	aarch64linux32 and aarch64linux32b to targ_extra_libpath.
+	(aarch64-*-linux*): Likewise.
+	* emulparams/aarch64elf32.sh (SEPARATE_GOTPLT): Change to 12 (3 words).
+	* emulparams/aarch64linux32.sh: New file.
+	* emulparams/aarch64linux32b.sh: New file.
+
+2013-11-25  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	Backport from master
+
+	2013-11-21  Andrew Pinski  <apinski@cavium.com>
+
+	* configure.tgt (aarch64_be-*-linux*): Split out the linux targets
+	into targ_extra_libpath.
+	(aarch64-*-linux*): Likewise.
+
+2013-11-22  Cory Fields  <cory@coryfields.com>
+
+	* libcoff-in.h: Add insert_timestamp flag to the pe_data struct.
+	* libcoff.h: Regenerate.
+	* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Only use a real
+	timestamp if --insert-timestamp was used.
+
 2013-11-19  Roland McGrath  <mcgrathr@google.com>
 	    Alan Modra  <amodra@gmail.com>
 
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 6790f45..b2b2a6e 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -468,6 +468,8 @@
 	eaarch64elf32b.c \
 	eaarch64linux.c \
 	eaarch64linuxb.c \
+	eaarch64linux32.c \
+	eaarch64linux32b.c \
 	eelf32_x86_64.c \
 	eelf32_x86_64_nacl.c \
 	eelf32b4300.c \
@@ -1787,6 +1789,14 @@
   $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} aarch64linuxb "$(tdir_aarch64linuxb)"
+eaarch64linux32.c: $(srcdir)/emulparams/aarch64linux32.sh \
+  $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} aarch64linux32 "$(tdir_aarch64linux32)"
+eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams/aarch64linux32.sh \
+  $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
 eor32.c: $(srcdir)/emulparams/or32.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} or32 "$(tdir_or32)"
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 7385ef4..b95a3d1 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -775,6 +775,8 @@
 	eaarch64elf32b.c \
 	eaarch64linux.c \
 	eaarch64linuxb.c \
+	eaarch64linux32.c \
+	eaarch64linux32b.c \
 	eelf32_x86_64.c \
 	eelf32_x86_64_nacl.c \
 	eelf32b4300.c \
@@ -1084,6 +1086,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64elf32b.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64elfb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linux32b.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaarch64linuxb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaix5ppc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaix5rs6.Po@am__quote@
@@ -3269,6 +3273,14 @@
   $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} aarch64linuxb "$(tdir_aarch64linuxb)"
+eaarch64linux32.c: $(srcdir)/emulparams/aarch64linux32.sh \
+  $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} aarch64linux32 "$(tdir_aarch64linux32)"
+eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams/aarch64linux32.sh \
+  $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
+  $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
 eor32.c: $(srcdir)/emulparams/or32.sh \
   $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} or32 "$(tdir_or32)"
diff --git a/ld/configure.tgt b/ld/configure.tgt
index eefb772..c50730b 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -50,9 +50,11 @@
 aarch64-*-elf)		targ_emul=aarch64elf
 			targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;;
 aarch64_be-*-linux*)	targ_emul=aarch64linuxb
-			targ_extra_emuls="aarch64linux aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb_linux_eabi armelf_linux_eabi armelfb armelf" ;;
+			targ_extra_libpath="aarch64linux aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
+			targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;;
 aarch64-*-linux*)	targ_emul=aarch64linux
-			targ_extra_emuls="aarch64linuxb aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf_linux_eabi armelfb_linux_eabi armelf armelfb" ;;
+			targ_extra_libpath="aarch64linuxb aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
+			targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb $targ_extra_libpath" ;;
 alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
 		        targ_emul=elf64alpha_fbsd
 			targ_extra_emuls="elf64alpha alpha"
diff --git a/ld/emulparams/aarch64elf32.sh b/ld/emulparams/aarch64elf32.sh
index 68a4d80..f85c9ff 100644
--- a/ld/emulparams/aarch64elf32.sh
+++ b/ld/emulparams/aarch64elf32.sh
@@ -17,7 +17,7 @@
 
 ENTRY=_start
 EMBEDDED=yes
-SEPARATE_GOTPLT=24
+SEPARATE_GOTPLT=12
 IREL_IN_PLT=
 TEXT_START_ADDR=0x00400000
 
diff --git a/ld/emulparams/aarch64linux32.sh b/ld/emulparams/aarch64linux32.sh
new file mode 100644
index 0000000..573b432
--- /dev/null
+++ b/ld/emulparams/aarch64linux32.sh
@@ -0,0 +1,47 @@
+ARCH="aarch64:ilp32"
+MACHINE=
+NOP=0
+
+SCRIPT_NAME=elf
+ELFSIZE=32
+OUTPUT_FORMAT="elf32-littleaarch64"
+BIG_OUTPUT_FORMAT="elf32-bigaarch64"
+LITTLE_OUTPUT_FORMAT="elf32-littleaarch64"
+NO_REL_RELOCS=yes
+
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=aarch64elf
+
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+SEPARATE_GOTPLT=12
+IREL_IN_PLT=
+
+TEXT_START_ADDR=0x400000
+
+DATA_START_SYMBOLS='PROVIDE (__data_start = .);';
+
+# AArch64 does not support .s* sections.
+NO_SMALL_DATA=yes
+
+OTHER_BSS_SYMBOLS='__bss_start__ = .;'
+OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;'
+OTHER_END_SYMBOLS='__end__ = . ;'
+
+OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }'
+ATTRS_SECTIONS='.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }'
+# Ensure each PLT entry is aligned to a cache line.
+PLT=".plt          ${RELOCATING-0} : ALIGN(16) { *(.plt)${IREL_IN_PLT+ *(.iplt)} }"
+
+# Linux modifies the default library search path to first include
+# a 32-bit specific directory.
+case "$target" in
+  aarch64*-linux*)
+    case "$EMULATION_NAME" in
+      aarch64linux*) LIBPATH_SUFFIX=32 ;;
+    esac
+    ;;
+esac
diff --git a/ld/emulparams/aarch64linux32b.sh b/ld/emulparams/aarch64linux32b.sh
new file mode 100644
index 0000000..f878b18
--- /dev/null
+++ b/ld/emulparams/aarch64linux32b.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/aarch64linux32.sh
+OUTPUT_FORMAT="elf32-bigaarch64"
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 4df7753..5d6da9e 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -130,6 +130,7 @@
 static char * thumb_entry_symbol = NULL;
 static lang_assignment_statement_type *image_base_statement = 0;
 static unsigned short pe_dll_characteristics = 0;
+static bfd_boolean insert_timestamp = FALSE;
 
 #ifdef DLL_SUPPORT
 static int pe_enable_stdcall_fixup = -1; /* 0=disable 1=enable.  */
@@ -239,8 +240,7 @@
 					(OPTION_EXCLUDE_LIBS + 1)
 #define OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC	\
 					(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC + 1)
-#define OPTION_LARGE_ADDRESS_AWARE \
-					(OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
+#define OPTION_LARGE_ADDRESS_AWARE 	(OPTION_DLL_DISABLE_RUNTIME_PSEUDO_RELOC + 1)
 #define OPTION_DISABLE_LARGE_ADDRESS_AWARE \
  					(OPTION_LARGE_ADDRESS_AWARE + 1)
 #define OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V1	\
@@ -251,15 +251,13 @@
 					(OPTION_DLL_ENABLE_RUNTIME_PSEUDO_RELOC_V2 + 1)
 #define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \
 					(OPTION_EXCLUDE_MODULES_FOR_IMPLIB + 1)
-#define OPTION_NO_LEADING_UNDERSCORE \
-					(OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
-#define OPTION_LEADING_UNDERSCORE \
-					(OPTION_NO_LEADING_UNDERSCORE + 1)
+#define OPTION_NO_LEADING_UNDERSCORE 	(OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1)
+#define OPTION_LEADING_UNDERSCORE 	(OPTION_NO_LEADING_UNDERSCORE + 1)
 #define OPTION_ENABLE_LONG_SECTION_NAMES \
 					(OPTION_LEADING_UNDERSCORE + 1)
 #define OPTION_DISABLE_LONG_SECTION_NAMES \
 					(OPTION_ENABLE_LONG_SECTION_NAMES + 1)
-/* DLLCharacteristics flags */
+/* DLLCharacteristics flags.  */
 #define OPTION_DYNAMIC_BASE		(OPTION_DISABLE_LONG_SECTION_NAMES + 1)
 #define OPTION_FORCE_INTEGRITY		(OPTION_DYNAMIC_BASE + 1)
 #define OPTION_NX_COMPAT		(OPTION_FORCE_INTEGRITY + 1)
@@ -268,6 +266,8 @@
 #define OPTION_NO_BIND			(OPTION_NO_SEH + 1)
 #define OPTION_WDM_DRIVER		(OPTION_NO_BIND + 1)
 #define OPTION_TERMINAL_SERVER_AWARE	(OPTION_WDM_DRIVER + 1)
+/* Determinism.  */
+#define OPTION_INSERT_TIMESTAMP		(OPTION_TERMINAL_SERVER_AWARE + 1)
 
 static void
 gld${EMULATION_NAME}_add_options
@@ -301,6 +301,7 @@
      OPTION_USE_NUL_PREFIXED_IMPORT_TABLES},
     {"no-leading-underscore", no_argument, NULL, OPTION_NO_LEADING_UNDERSCORE},
     {"leading-underscore", no_argument, NULL, OPTION_LEADING_UNDERSCORE},
+    {"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
 #ifdef DLL_SUPPORT
     /* getopt allows abbreviations, so we do this to stop it
        from treating -o as an abbreviation for this option.  */
@@ -438,6 +439,8 @@
   fprintf (file, _("  --support-old-code                 Support interworking with old code\n"));
   fprintf (file, _("  --[no-]leading-underscore          Set explicit symbol underscore prefix mode\n"));
   fprintf (file, _("  --thumb-entry=<symbol>             Set the entry point to be Thumb <symbol>\n"));
+  fprintf (file, _("  --insert-timestamp                 Use a real timestamp rather than zero.\n"));
+  fprintf (file, _("                                     This makes binaries non-deterministic\n"));
 #ifdef DLL_SUPPORT
   fprintf (file, _("  --add-stdcall-alias                Export symbols with and without @nn\n"));
   fprintf (file, _("  --disable-stdcall-fixup            Don't link _sym to _sym@nn\n"));
@@ -754,6 +757,9 @@
     case OPTION_LEADING_UNDERSCORE:
       pe_leading_underscore = 1;
       break;
+    case OPTION_INSERT_TIMESTAMP:
+      insert_timestamp = TRUE;
+      break;
 #ifdef DLL_SUPPORT
     case OPTION_OUT_DEF:
       pe_out_def_filename = xstrdup (optarg);
@@ -1255,6 +1261,7 @@
   pe_data (link_info.output_bfd)->pe_opthdr = pe;
   pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
   pe_data (link_info.output_bfd)->real_flags |= real_flags;
+  pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
 
   /* At this point we must decide whether to use long section names
      in the output or not.  If the user hasn't explicitly specified
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index 3e8b65e..b738800 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -18,8 +18,7 @@
 rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
-/* Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
-   Free Software Foundation, Inc.
+/* Copyright 2006-2013 Free Software Foundation, Inc.
    Written by Kai Tietz, OneVision Software GmbH&CoKg.
 
    This file is part of the GNU Binutils.
@@ -146,6 +145,7 @@
 static int support_old_code = 0;
 static lang_assignment_statement_type *image_base_statement = 0;
 static unsigned short pe_dll_characteristics = 0;
+static bfd_boolean insert_timestamp = FALSE;
 
 #ifdef DLL_SUPPORT
 static int    pep_enable_stdcall_fixup = 1; /* 0=disable 1=enable (default).  */
@@ -241,6 +241,7 @@
   OPTION_NO_SEH,
   OPTION_NO_BIND,
   OPTION_WDM_DRIVER,
+  OPTION_INSERT_TIMESTAMP,
   OPTION_TERMINAL_SERVER_AWARE
 };
 
@@ -316,6 +317,7 @@
     {"no-bind", no_argument, NULL, OPTION_NO_BIND},
     {"wdmdriver", no_argument, NULL, OPTION_WDM_DRIVER},
     {"tsaware", no_argument, NULL, OPTION_TERMINAL_SERVER_AWARE},
+    {"insert-timestamp", no_argument, NULL, OPTION_INSERT_TIMESTAMP},
     {NULL, no_argument, NULL, 0}
   };
 
@@ -402,6 +404,8 @@
   fprintf (file, _("  --subsystem <name>[:<version>]     Set required OS subsystem [& version]\n"));
   fprintf (file, _("  --support-old-code                 Support interworking with old code\n"));
   fprintf (file, _("  --[no-]leading-underscore          Set explicit symbol underscore prefix mode\n"));
+  fprintf (file, _("  --insert-timestamp                 Use a real timestamp rather than zero.\n"));
+  fprintf (file, _("                                     This makes binaries non-deterministic\n"));
 #ifdef DLL_SUPPORT
   fprintf (file, _("  --add-stdcall-alias                Export symbols with and without @nn\n"));
   fprintf (file, _("  --disable-stdcall-fixup            Don't link _sym to _sym@nn\n"));
@@ -707,6 +711,9 @@
     case OPTION_LEADING_UNDERSCORE:
       pep_leading_underscore = 1;
       break;
+    case OPTION_INSERT_TIMESTAMP:
+      insert_timestamp = TRUE;
+      break;
 #ifdef DLL_SUPPORT
     case OPTION_OUT_DEF:
       pep_out_def_filename = xstrdup (optarg);
@@ -1219,6 +1226,7 @@
   pe_data (link_info.output_bfd)->pe_opthdr = pep;
   pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
   pe_data (link_info.output_bfd)->real_flags |= real_flags;
+  pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
 
   /* At this point we must decide whether to use long section names
      in the output or not.  If the user hasn't explicitly specified
diff --git a/ld/ld.info b/ld/ld.info
new file mode 100644
index 0000000..31a316b
--- /dev/null
+++ b/ld/ld.info
Binary files differ
diff --git a/ld/ld.texinfo b/ld/ld.texinfo
index e4788f6..c925ecb 100644
--- a/ld/ld.texinfo
+++ b/ld/ld.texinfo
@@ -2657,6 +2657,11 @@
 @item --tsaware
 The image is Terminal Server aware.
 
+@kindex --insert-timestamp
+@item --insert-timestamp
+Insert a real timestamp into the image, rather than the default value
+of zero.  This will result in a slightly different results with each
+invocation, which could be helpful for distributing unique images.
 @end table
 
 @c man end
diff --git a/ld/pe-dll.c b/ld/pe-dll.c
index bd3195f..e9e133b 100644
--- a/ld/pe-dll.c
+++ b/ld/pe-dll.c
@@ -1170,9 +1170,6 @@
   unsigned char *enameptrs;
   unsigned char *eordinals;
   char *enamestr;
-  time_t now;
-
-  time (&now);
 
   edata_d = xmalloc (edata_sz);
 
@@ -1187,7 +1184,10 @@
 		   + edata_s->output_section->vma - image_base)
 
   memset (edata_d, 0, edata_sz);
-  bfd_put_32 (abfd, now, edata_d + 4);
+
+  if (pe_data (abfd)->insert_timestamp)
+    H_PUT_32 (abfd, time (0), edata_d + 4);
+
   if (pe_def_file->version_major != -1)
     {
       bfd_put_16 (abfd, pe_def_file->version_major, edata_d + 8);
diff --git a/ld/po/bg.gmo b/ld/po/bg.gmo
new file mode 100644
index 0000000..67f23ae
--- /dev/null
+++ b/ld/po/bg.gmo
Binary files differ
diff --git a/ld/po/da.gmo b/ld/po/da.gmo
new file mode 100644
index 0000000..f54a23f
--- /dev/null
+++ b/ld/po/da.gmo
Binary files differ
diff --git a/ld/po/es.gmo b/ld/po/es.gmo
new file mode 100644
index 0000000..feea374
--- /dev/null
+++ b/ld/po/es.gmo
Binary files differ
diff --git a/ld/po/fi.gmo b/ld/po/fi.gmo
new file mode 100644
index 0000000..d1b25bb
--- /dev/null
+++ b/ld/po/fi.gmo
Binary files differ
diff --git a/ld/po/fr.gmo b/ld/po/fr.gmo
new file mode 100644
index 0000000..10682ea
--- /dev/null
+++ b/ld/po/fr.gmo
Binary files differ
diff --git a/ld/po/ga.gmo b/ld/po/ga.gmo
new file mode 100644
index 0000000..b308044
--- /dev/null
+++ b/ld/po/ga.gmo
Binary files differ
diff --git a/ld/po/id.gmo b/ld/po/id.gmo
new file mode 100644
index 0000000..155f607
--- /dev/null
+++ b/ld/po/id.gmo
Binary files differ
diff --git a/ld/po/it.gmo b/ld/po/it.gmo
new file mode 100644
index 0000000..e6cb2dd
--- /dev/null
+++ b/ld/po/it.gmo
Binary files differ
diff --git a/ld/po/ja.gmo b/ld/po/ja.gmo
new file mode 100644
index 0000000..703df64
--- /dev/null
+++ b/ld/po/ja.gmo
Binary files differ
diff --git a/ld/po/sv.gmo b/ld/po/sv.gmo
new file mode 100644
index 0000000..f7038a8
--- /dev/null
+++ b/ld/po/sv.gmo
Binary files differ
diff --git a/ld/po/tr.gmo b/ld/po/tr.gmo
new file mode 100644
index 0000000..96d567b
--- /dev/null
+++ b/ld/po/tr.gmo
Binary files differ
diff --git a/ld/po/uk.gmo b/ld/po/uk.gmo
new file mode 100644
index 0000000..231915b
--- /dev/null
+++ b/ld/po/uk.gmo
Binary files differ
diff --git a/ld/po/vi.gmo b/ld/po/vi.gmo
new file mode 100644
index 0000000..fce15ce
--- /dev/null
+++ b/ld/po/vi.gmo
Binary files differ
diff --git a/ld/po/zh_CN.gmo b/ld/po/zh_CN.gmo
new file mode 100644
index 0000000..39d1794
--- /dev/null
+++ b/ld/po/zh_CN.gmo
Binary files differ
diff --git a/ld/po/zh_TW.gmo b/ld/po/zh_TW.gmo
new file mode 100644
index 0000000..23277b1
--- /dev/null
+++ b/ld/po/zh_TW.gmo
Binary files differ
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 7553211..0b72d5b 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-20  Yufeng Zhang  <yufeng.zhang@arm.com>
+
+	* aarch64-opc.c (aarch64_pstatefields): Update.
+
 2013-11-18  Yufeng Zhang  <yufeng.zhang@arm.com>
 
 	Revert
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index af1472a..4313327 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -3019,12 +3019,12 @@
   return (reg->flags & F_DEPRECATED) != 0;
 }
 
-const struct aarch64_name_value_pair aarch64_pstatefields [] =
+const aarch64_sys_reg aarch64_pstatefields [] =
 {
-  { "spsel",            0x05  },
-  { "daifset",          0x1e  },
-  { "daifclr",          0x1f  },
-  { 0,          CPENC(0,0,0,0,0)  },
+  { "spsel",            0x05,	0 },
+  { "daifset",          0x1e,	0 },
+  { "daifclr",          0x1f,	0 },
+  { 0,          CPENC(0,0,0,0,0), 0 },
 };
 
 const aarch64_sys_ins_reg aarch64_sys_regs_ic[] =
diff --git a/opcodes/po/da.gmo b/opcodes/po/da.gmo
new file mode 100644
index 0000000..2f18a00
--- /dev/null
+++ b/opcodes/po/da.gmo
Binary files differ
diff --git a/opcodes/po/de.gmo b/opcodes/po/de.gmo
new file mode 100644
index 0000000..acd983f
--- /dev/null
+++ b/opcodes/po/de.gmo
Binary files differ
diff --git a/opcodes/po/es.gmo b/opcodes/po/es.gmo
new file mode 100644
index 0000000..4aba3de
--- /dev/null
+++ b/opcodes/po/es.gmo
Binary files differ
diff --git a/opcodes/po/fi.gmo b/opcodes/po/fi.gmo
new file mode 100644
index 0000000..5c10172
--- /dev/null
+++ b/opcodes/po/fi.gmo
Binary files differ
diff --git a/opcodes/po/fr.gmo b/opcodes/po/fr.gmo
new file mode 100644
index 0000000..8d61223
--- /dev/null
+++ b/opcodes/po/fr.gmo
Binary files differ
diff --git a/opcodes/po/ga.gmo b/opcodes/po/ga.gmo
new file mode 100644
index 0000000..fef6710
--- /dev/null
+++ b/opcodes/po/ga.gmo
Binary files differ
diff --git a/opcodes/po/id.gmo b/opcodes/po/id.gmo
new file mode 100644
index 0000000..4ad3764
--- /dev/null
+++ b/opcodes/po/id.gmo
Binary files differ
diff --git a/opcodes/po/it.gmo b/opcodes/po/it.gmo
new file mode 100644
index 0000000..7e18e7a
--- /dev/null
+++ b/opcodes/po/it.gmo
Binary files differ
diff --git a/opcodes/po/nl.gmo b/opcodes/po/nl.gmo
new file mode 100644
index 0000000..8e26600
--- /dev/null
+++ b/opcodes/po/nl.gmo
Binary files differ
diff --git a/opcodes/po/pt_BR.gmo b/opcodes/po/pt_BR.gmo
new file mode 100644
index 0000000..083e8f4
--- /dev/null
+++ b/opcodes/po/pt_BR.gmo
Binary files differ
diff --git a/opcodes/po/ro.gmo b/opcodes/po/ro.gmo
new file mode 100644
index 0000000..6125448
--- /dev/null
+++ b/opcodes/po/ro.gmo
Binary files differ
diff --git a/opcodes/po/sv.gmo b/opcodes/po/sv.gmo
new file mode 100644
index 0000000..2347bdc
--- /dev/null
+++ b/opcodes/po/sv.gmo
Binary files differ
diff --git a/opcodes/po/tr.gmo b/opcodes/po/tr.gmo
new file mode 100644
index 0000000..98b9df1
--- /dev/null
+++ b/opcodes/po/tr.gmo
Binary files differ
diff --git a/opcodes/po/uk.gmo b/opcodes/po/uk.gmo
new file mode 100644
index 0000000..c9cbf5b
--- /dev/null
+++ b/opcodes/po/uk.gmo
Binary files differ
diff --git a/opcodes/po/vi.gmo b/opcodes/po/vi.gmo
new file mode 100644
index 0000000..38a5f5a
--- /dev/null
+++ b/opcodes/po/vi.gmo
Binary files differ
diff --git a/opcodes/po/zh_CN.gmo b/opcodes/po/zh_CN.gmo
new file mode 100644
index 0000000..2bf6751
--- /dev/null
+++ b/opcodes/po/zh_CN.gmo
Binary files differ