]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
This commit was manufactured by cvs2svn to create tag misc/first-egcs-checkin
authorNo Author <no-author@gcc.gnu.org>
Thu, 17 Dec 1998 06:43:56 +0000 (06:43 +0000)
committerNo Author <no-author@gcc.gnu.org>
Thu, 17 Dec 1998 06:43:56 +0000 (06:43 +0000)
'first-egcs-checkin'.

From-SVN: r24354

142 files changed:
gcc/.gdbinit [deleted file]
gcc/ABOUT-GCC-NLS [new file with mode: 0644]
gcc/ABOUT-NLS [new file with mode: 0644]
gcc/ChangeLog.11 [new file with mode: 0644]
gcc/INSTALL [deleted file]
gcc/ORDERS [deleted file]
gcc/README-bugs [deleted file]
gcc/SERVICE [deleted file]
gcc/bi-parser.c [deleted file]
gcc/bi-parser.h [deleted file]
gcc/c-parse.c [deleted file]
gcc/c-parse.h [deleted file]
gcc/c-parse.y [deleted file]
gcc/cexp.c [deleted file]
gcc/config.in [deleted file]
gcc/config/alpha/crtbegin.asm [new file with mode: 0644]
gcc/config/alpha/crtend.asm [new file with mode: 0644]
gcc/config/alpha/t-crtbe [new file with mode: 0644]
gcc/config/alpha/vxworks.h [new file with mode: 0644]
gcc/config/alpha/xm-linux.h [deleted file]
gcc/config/arc/arc.c [new file with mode: 0644]
gcc/config/arc/arc.h [new file with mode: 0644]
gcc/config/arc/arc.md [new file with mode: 0644]
gcc/config/arc/initfini.c [new file with mode: 0644]
gcc/config/arc/lib1funcs.asm [new file with mode: 0644]
gcc/config/arc/t-arc [new file with mode: 0644]
gcc/config/arc/xm-arc.h [new file with mode: 0644]
gcc/config/arm/xm-netbsd.h [deleted file]
gcc/config/i386/crtdll.h [new file with mode: 0644]
gcc/config/i386/osf1-ci.asm [new file with mode: 0644]
gcc/config/i386/osf1-cn.asm [new file with mode: 0644]
gcc/config/i386/osf1elf.h [new file with mode: 0644]
gcc/config/i386/osf1elfgdb.h [new file with mode: 0644]
gcc/config/i386/rtemself.h [new file with mode: 0644]
gcc/config/i386/t-osf1elf [new file with mode: 0644]
gcc/config/i386/x-osf1elf [new file with mode: 0644]
gcc/config/i386/xm-bsd386.h [deleted file]
gcc/config/i386/xm-dgux.h [deleted file]
gcc/config/i386/xm-freebsd.h [deleted file]
gcc/config/i386/xm-gnu.h [deleted file]
gcc/config/i386/xm-netbsd.h [deleted file]
gcc/config/i386/xm-osf1elf.h [new file with mode: 0644]
gcc/config/i386/xm-sysv3.h [deleted file]
gcc/config/i386/xm-winnt.h [deleted file]
gcc/config/i860/xm-fx2800.h [deleted file]
gcc/config/m68k/xm-altos3068.h [deleted file]
gcc/config/m68k/xm-amix.h [deleted file]
gcc/config/m68k/xm-aux.h [deleted file]
gcc/config/m68k/xm-hp320.h [deleted file]
gcc/config/m68k/xm-linux.h [deleted file]
gcc/config/m68k/xm-m68kv.h [deleted file]
gcc/config/m68k/xm-netbsd.h [deleted file]
gcc/config/m68k/xm-sun3.h [deleted file]
gcc/config/m68k/xm-tower.h [deleted file]
gcc/config/mips/elflorion.h [deleted file]
gcc/config/mips/nws3250v4.h [deleted file]
gcc/config/mips/r3900.h [new file with mode: 0644]
gcc/config/mips/xm-iris3.h [deleted file]
gcc/config/mips/xm-iris4.h [deleted file]
gcc/config/mips/xm-netbsd.h [deleted file]
gcc/config/mips/xm-news.h [deleted file]
gcc/config/mips/xm-nws3250v4.h [deleted file]
gcc/config/mips/xm-sysv4.h [deleted file]
gcc/config/ns32k/xm-genix.h [deleted file]
gcc/config/ns32k/xm-netbsd.h [deleted file]
gcc/config/sh/rtems.h [moved from gcc/config/xm-svr3.h with 60% similarity]
gcc/config/sparc/elf.h [moved from gcc/config/mips/xm-sysv.h with 51% similarity]
gcc/config/sparc/hal.h [moved from gcc/config/i386/xm-sun.h with 58% similarity]
gcc/config/sparc/linux64.h [new file with mode: 0644]
gcc/config/sparc/sol2-sld.h [new file with mode: 0644]
gcc/config/sparc/sun4gas.h [moved from gcc/config/arm/xm-linux.h with 65% similarity]
gcc/config/sparc/t-elf [new file with mode: 0644]
gcc/config/sparc/t-halos [new file with mode: 0644]
gcc/config/sparc/xm-netbsd.h [deleted file]
gcc/config/sparc/xm-pbd.h [deleted file]
gcc/config/sparc/xm-sp64.h [moved from gcc/config/i386/xm-linux.h with 72% similarity]
gcc/config/v850/lib1funcs.asm [new file with mode: 0644]
gcc/config/v850/t-v850 [new file with mode: 0644]
gcc/config/v850/v850.c [new file with mode: 0644]
gcc/config/v850/v850.h [new file with mode: 0644]
gcc/config/v850/v850.md [new file with mode: 0644]
gcc/config/v850/xm-v850.h [moved from gcc/config/a29k/xm-unix.h with 77% similarity]
gcc/config/vax/x-vax [deleted file]
gcc/config/vax/xm-vaxv.h [deleted file]
gcc/config/xm-alloca.h [new file with mode: 0644]
gcc/config/xm-freebsd.h [deleted file]
gcc/config/xm-linux.h [deleted file]
gcc/config/xm-netbsd.h [deleted file]
gcc/config/xm-siglist.h [new file with mode: 0644]
gcc/config/xm-std32.h [new file with mode: 0644]
gcc/config/xm-svr4.h [deleted file]
gcc/configure [deleted file]
gcc/cp/ChangeLog.1 [new file with mode: 0644]
gcc/cp/NEWS [new file with mode: 0644]
gcc/cp/g++FAQ.texi [new file with mode: 0644]
gcc/cp/parse.c [deleted file]
gcc/cp/parse.h [deleted file]
gcc/cstamp-h.in [deleted file]
gcc/dyn-string.c [new file with mode: 0644]
gcc/dyn-string.h [new file with mode: 0644]
gcc/exgettext [new file with mode: 0755]
gcc/fixinc.wrap [new file with mode: 0755]
gcc/frame.c [new file with mode: 0644]
gcc/frame.h [new file with mode: 0644]
gcc/gencheck.c [new file with mode: 0644]
gcc/gengenrtl.c [new file with mode: 0644]
gcc/ginclude/va-arc.h [new file with mode: 0644]
gcc/ginclude/va-v850.h [new file with mode: 0644]
gcc/intl.c [new file with mode: 0644]
gcc/intl.h [new file with mode: 0644]
gcc/intl/ChangeLog [new file with mode: 0644]
gcc/intl/Makefile.in [new file with mode: 0644]
gcc/intl/VERSION [new file with mode: 0644]
gcc/intl/bindtextdom.c [new file with mode: 0644]
gcc/intl/dcgettext.c [new file with mode: 0644]
gcc/intl/dgettext.c [new file with mode: 0644]
gcc/intl/explodename.c [new file with mode: 0644]
gcc/intl/finddomain.c [new file with mode: 0644]
gcc/intl/gettext.c [new file with mode: 0644]
gcc/intl/gettext.h [new file with mode: 0644]
gcc/intl/gettextP.h [new file with mode: 0644]
gcc/intl/hash-string.h [new file with mode: 0644]
gcc/intl/l10nflist.c [new file with mode: 0644]
gcc/intl/libgettext.h [new file with mode: 0644]
gcc/intl/loadinfo.h [new file with mode: 0644]
gcc/intl/loadmsgcat.c [new file with mode: 0644]
gcc/intl/localealias.c [new file with mode: 0644]
gcc/intl/textdomain.c [new file with mode: 0644]
gcc/mbchar.c [new file with mode: 0644]
gcc/mbchar.h [new file with mode: 0644]
gcc/mkinstalldirs [new file with mode: 0644]
gcc/objc/objc-parse.c [deleted file]
gcc/objc/objc-parse.y [deleted file]
gcc/patch-apollo-includes [new file with mode: 0755]
gcc/po/ChangeLog [new file with mode: 0644]
gcc/po/Makefile.in.in [new file with mode: 0644]
gcc/po/POTFILES.in [new file with mode: 0644]
gcc/po/en_UK.po [new file with mode: 0644]
gcc/prefix.c [new file with mode: 0644]
gcc/regmove.c [new file with mode: 0644]
gcc/system.h [new file with mode: 0644]
gcc/version.c [deleted file]

diff --git a/gcc/.gdbinit b/gcc/.gdbinit
deleted file mode 100644 (file)
index dea758b..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-define pr
-set debug_rtx ($)
-end
-
-document pr
-Print the full structure of the rtx that is $.
-Works only when an inferior is executing.
-end
-
-define prl
-set debug_rtx_list ($, debug_rtx_count)
-end
-
-document prl
-Print the full structure of all rtx insns beginning at $.
-Works only when an inferior is executing.
-Uses variable debug_rtx_count to control number of insns printed:
-  debug_rtx_count > 0: print from $ on.
-  debug_rtx_count < 0: print a window around $.
-
-There is also debug_rtx_find (rtx, uid) that will scan a list for UID and print
-it using debug_rtx_list. Usage example: set $foo=debug_rtx_find(first, 42)
-end
-
-define pt
-set debug_tree ($)
-end
-
-document pt
-Print the full structure of the tree that is $.
-Works only when an inferior is executing.
-end
-
-define ptc
-output (enum tree_code) $.common.code
-echo \n
-end
-
-document ptc
-Print the tree-code of the tree node that is $.
-end
-
-define pdn
-output $.decl.name->identifier.pointer
-echo \n
-end
-
-document pdn
-Print the name of the decl-node that is $.
-end
-
-define ptn
-output $.type.name->decl.name->identifier.pointer
-echo \n
-end
-
-document ptn
-Print the name of the type-node that is $.
-end
-
-define prc
-output (enum rtx_code) $.code
-echo \ (
-output $.mode
-echo )\n
-end
-
-document prc
-Print the rtx-code and machine mode of the rtx that is $.
-end
-
-define pi
-print $.fld[0].rtx@7
-end
-
-document pi
-Print the fields of an instruction that is $.
-end
-
-define pbs
-set print_binding_stack ()
-end
-
-document pbs
-In cc1plus, print the current binding stack, frame by frame, up to and
-including the global binding level.
-end
-
-# Don't let abort actually run, as it will make
-# stdio stop working and therefore the `pr' command below as well.
-b abort
-
-# Make gdb complain about symbol reading errors.  This is so that gcc
-# developers can see and fix bugs in gcc debug output.
-set complaints 20
diff --git a/gcc/ABOUT-GCC-NLS b/gcc/ABOUT-GCC-NLS
new file mode 100644 (file)
index 0000000..b70a7c8
--- /dev/null
@@ -0,0 +1,542 @@
+Notes on GCC's Native Language Support
+
+GCC's Native Language Support (NLS) is relatively new and
+experimental, so NLS is currently disabled by default.  Use
+configure's --enable-nls option to enable it.  Eventually, NLS will be
+enabled by default, and you'll need --disable-nls to disable it.  You
+must enable NLS in order to make a GCC distribution.
+
+By and large, only diagnostic messages have been internationalized.
+Some work remains in other areas; for example, GCC does not yet allow
+non-ASCII letters in identifiers.
+
+Not all of GCC's diagnostic messages have been internationalized.
+Programs like `enquire' and `genattr' are not internationalized, as
+their users are GCC maintainers who typically need to be able to read
+English anyway; internationalizing them would thus entail needless
+work for the human translators.  And no one has yet gotten around to
+internationalizing the messages in the C++ compiler, or in the
+specialized MIPS-specific programs mips-tdump and mips-tfile.
+
+The GCC library should not contain any messages that need
+internationalization, because it operates below the
+internationalization library.
+
+Currently, the only language translation supplied is en_UK (British English).
+
+Unlike some other GNU programs, the GCC sources contain few instances
+of explicit translation calls like _("string").  Instead, the
+diagnostic printing routines automatically translate their arguments.
+For example, GCC source code should not contain calls like `error
+(_("unterminated comment"))'; it should contain calls like `error
+("unterminated comment")' instead, as it is the `error' function's
+responsibility to translate the message before the user sees it.
+
+By convention, any function parameter in the GCC sources whose name
+ends in `msgid' is expected to be a message requiring translation.
+For example, the `error' function's first parameter is named `msgid'.
+GCC's exgettext script uses this convention to determine which
+function parameter strings need to be translated.  The exgettext
+script also assumes that any occurrence of `%eMSGID}' on a source
+line, where MSGID does not contain `%' or `}', corresponds to a
+message MSGID that requires translation; this is needed to identify
+diagnostics in GCC spec strings.
+
+If you enable NLS and modify source files, you'll need to use a
+special version of the GNU gettext package to propagate the
+modifications to the translation tables.  Apply the following patch
+(use `patch -p0') to GNU gettext 0.10.35, which you can retrieve from:
+
+ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz
+
+This patch has been submitted to the GNU gettext maintainer, so
+eventually we shouldn't need this special gettext version.
+
+This patch 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 patch 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 patch; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+
+1998-07-26  Paul Eggert  <eggert@twinsun.com>
+
+       * po/Makefile.in.in (maintainer-clean): Remove cat-id-tbl.c and
+       stamp-cat-id.
+
+1998-07-24  Paul Eggert  <eggert@twinsun.com>
+
+       * po/Makefile.in.in (cat-id-tbl.o): Depend on
+       $(top_srcdir)/intl/libgettext.h, not ../intl/libgettext.h.
+
+1998-07-20  Paul Eggert  <eggert@twinsun.com>
+
+       * po/Makefile.in.in (.po.pox, all-yes, $(srcdir)/cat-id-tbl.c,
+       $(srcdir)/stamp-cat-id, update-po): Prepend `$(srcdir)/' to
+       files built in the source directory; this is needed for
+       VPATH-based make in Solaris 2.6.
+
+1998-07-17  Paul Eggert  <eggert@twinsun.com>
+
+       Add support for user-specified argument numbers for keywords.
+       Extract all strings from a keyword arg, not just the first one.
+       Handle parenthesized commas inside keyword args correctly.
+       Warn about nested keywords.
+
+       * doc/gettext.texi: Document --keyword=id:argnum.
+
+       * src/xgettext.c (scan_c_file):
+       Warn about nested keywords, e.g. _(_("xxx")).
+       Warn also about not-yet-implemented but allowed nesting, e.g.
+       dcgettext(..._("xxx")..., "yyy").
+       Get all strings in a keyword arg, not just the first one.
+       Handle parenthesized commas inside keyword args correctly.
+
+       * src/xget-lex.h (enum xgettext_token_type_ty):
+       Replace xgettext_token_type_keyword1 and
+       xgettext_token_type_keyword2 with just plain
+       xgettext_token_type_keyword; it now has argnum value.
+       Add xgettext_token_type_rp.
+       (struct xgettext_token_ty): Add argnum member.
+       line_number and file_name are now also set for
+       xgettext_token_type_keyword.
+       (xgettext_lex_keyword): Arg is const char *.
+
+       * src/xget-lex.c: Include "hash.h".
+       (enum token_type_ty): Add token_type_rp.
+       (keywords): Now a hash table.
+       (phase5_get): Return token_type_rp for ')'.
+       (xgettext_lex, xgettext_lex_keyword): Add support for keyword argnums.
+       (xgettext_lex): Return xgettext_token_type_rp for ')'.
+       Report keyword argnum, line number, and file name back to caller.
+
+1998-07-09  Paul Eggert  <eggert@twinsun.com>
+
+        * intl/Makefile.in (uninstall):
+       Do nothing unless $(PACKAGE) is gettext.
+
+===================================================================
+RCS file: doc/gettext.texi,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.1
+diff -pu -r0.10.35.0 -r0.10.35.1
+--- doc/gettext.texi   1998/05/01 05:53:32     0.10.35.0
++++ doc/gettext.texi   1998/07/18 00:25:15     0.10.35.1
+@@ -1854,13 +1854,19 @@ List of directories searched for input f
+ Join messages with existing file.
+ @item -k @var{word}
+-@itemx --keyword[=@var{word}]
+-Additonal keyword to be looked for (without @var{word} means not to
++@itemx --keyword[=@var{keywordspec}]
++Additonal keyword to be looked for (without @var{keywordspec} means not to
+ use default keywords).
+-The default keywords, which are always looked for if not explicitly
+-disabled, are @code{gettext}, @code{dgettext}, @code{dcgettext} and
+-@code{gettext_noop}.
++If @var{keywordspec} is a C identifer @var{id}, @code{xgettext} looks
++for strings in the first argument of each call to the function or macro
++@var{id}.  If @var{keywordspec} is of the form
++@samp{@var{id}:@var{argnum}}, @code{xgettext} looks for strings in the
++@var{argnum}th argument of the call.
++
++The default keyword specifications, which are always looked for if not
++explicitly disabled, are @code{gettext}, @code{dgettext:2},
++@code{dcgettext:2} and @code{gettext_noop}.
+ @item -m [@var{string}]
+ @itemx --msgstr-prefix[=@var{string}]
+===================================================================
+RCS file: intl/Makefile.in,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.1
+diff -pu -r0.10.35.0 -r0.10.35.1
+--- intl/Makefile.in   1998/04/27 21:53:18     0.10.35.0
++++ intl/Makefile.in   1998/07/09 21:39:18     0.10.35.1
+@@ -143,10 +143,14 @@ install-data: all
+ installcheck:
+ uninstall:
+-      dists="$(DISTFILES.common)"; \
+-      for file in $$dists; do \
+-        rm -f $(gettextsrcdir)/$$file; \
+-      done
++      if test "$(PACKAGE)" = "gettext"; then \
++        dists="$(DISTFILES.common)"; \
++        for file in $$dists; do \
++          rm -f $(gettextsrcdir)/$$file; \
++        done
++      else \
++        : ; \
++      fi
+ info dvi:
+===================================================================
+RCS file: src/xget-lex.c,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.1
+diff -pu -r0.10.35.0 -r0.10.35.1
+--- src/xget-lex.c     1998/07/09 22:49:48     0.10.35.0
++++ src/xget-lex.c     1998/07/18 00:25:15     0.10.35.1
+@@ -33,6 +33,7 @@
+ #include "error.h"
+ #include "system.h"
+ #include "libgettext.h"
++#include "hash.h"
+ #include "str-list.h"
+ #include "xget-lex.h"
+@@ -83,6 +84,7 @@ enum token_type_ty
+   token_type_eoln,
+   token_type_hash,
+   token_type_lp,
++  token_type_rp,
+   token_type_comma,
+   token_type_name,
+   token_type_number,
+@@ -109,7 +111,7 @@ static FILE *fp;
+ static int trigraphs;
+ static int cplusplus_comments;
+ static string_list_ty *comment;
+-static string_list_ty *keywords;
++static hash_table keywords;
+ static int default_keywords = 1;
+ /* These are for tracking whether comments count as immediately before
+@@ -941,6 +943,10 @@ phase5_get (tp)
+       tp->type = token_type_lp;
+       return;
++    case ')':
++      tp->type = token_type_rp;
++      return;
++
+     case ',':
+       tp->type = token_type_comma;
+       return;
+@@ -1179,6 +1185,7 @@ xgettext_lex (tp)
+   while (1)
+     {
+       token_ty token;
++      void *keyword_value;
+       phase8_get (&token);
+       switch (token.type)
+@@ -1213,17 +1220,20 @@ xgettext_lex (tp)
+         if (default_keywords)
+           {
+             xgettext_lex_keyword ("gettext");
+-            xgettext_lex_keyword ("dgettext");
+-            xgettext_lex_keyword ("dcgettext");
++            xgettext_lex_keyword ("dgettext:2");
++            xgettext_lex_keyword ("dcgettext:2");
+             xgettext_lex_keyword ("gettext_noop");
+             default_keywords = 0;
+           }
+-        if (string_list_member (keywords, token.string))
+-          {
+-            tp->type = (strcmp (token.string, "dgettext") == 0
+-                        || strcmp (token.string, "dcgettext") == 0)
+-              ? xgettext_token_type_keyword2 : xgettext_token_type_keyword1;
++        if (find_entry (&keywords, token.string, strlen (token.string),
++                        &keyword_value)
++            == 0)
++          {
++            tp->type = xgettext_token_type_keyword;
++            tp->argnum = (int) keyword_value;
++            tp->line_number = token.line_number;
++            tp->file_name = logical_file_name;
+           }
+         else
+           tp->type = xgettext_token_type_symbol;
+@@ -1236,6 +1246,12 @@ xgettext_lex (tp)
+         tp->type = xgettext_token_type_lp;
+         return;
++      case token_type_rp:
++        last_non_comment_line = newline_count;
++
++        tp->type = xgettext_token_type_rp;
++        return;
++
+       case token_type_comma:
+         last_non_comment_line = newline_count;
+@@ -1263,16 +1279,32 @@ xgettext_lex (tp)
+ void
+ xgettext_lex_keyword (name)
+-     char *name;
++     const char *name;
+ {
+   if (name == NULL)
+     default_keywords = 0;
+   else
+     {
+-      if (keywords == NULL)
+-      keywords = string_list_alloc ();
++      int argnum;
++      size_t len;
++      const char *sp;
++
++      if (keywords.table == NULL)
++      init_hash (&keywords, 100);
++
++      sp = strchr (name, ':');
++      if (sp)
++      {
++        len = sp - name;
++        argnum = atoi (sp + 1);
++      }
++      else
++      {
++        len = strlen (name);
++        argnum = 1;
++      }
+-      string_list_append_unique (keywords, name);
++      insert_entry (&keywords, name, len, (void *) argnum);
+     }
+ }
+===================================================================
+RCS file: src/xget-lex.h,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.1
+diff -pu -r0.10.35.0 -r0.10.35.1
+--- src/xget-lex.h     1998/07/09 22:49:48     0.10.35.0
++++ src/xget-lex.h     1998/07/18 00:25:15     0.10.35.1
+@@ -23,9 +23,9 @@ Foundation, Inc., 59 Temple Place - Suit
+ enum xgettext_token_type_ty
+ {
+   xgettext_token_type_eof,
+-  xgettext_token_type_keyword1,
+-  xgettext_token_type_keyword2,
++  xgettext_token_type_keyword,
+   xgettext_token_type_lp,
++  xgettext_token_type_rp,
+   xgettext_token_type_comma,
+   xgettext_token_type_string_literal,
+   xgettext_token_type_symbol
+@@ -37,8 +37,14 @@ struct xgettext_token_ty
+ {
+   xgettext_token_type_ty type;
+-  /* These 3 are only set for xgettext_token_type_string_literal.  */
++  /* This 1 is set only for xgettext_token_type_keyword.  */
++  int argnum;
++
++  /* This 1 is set only for xgettext_token_type_string_literal.  */
+   char *string;
++
++  /* These 2 are set only for xgettext_token_type_keyword and
++     xgettext_token_type_string_literal.  */
+   int line_number;
+   char *file_name;
+ };
+@@ -50,7 +56,7 @@ void xgettext_lex PARAMS ((xgettext_toke
+ const char *xgettext_lex_comment PARAMS ((size_t __n));
+ void xgettext_lex_comment_reset PARAMS ((void));
+ /* void xgettext_lex_filepos PARAMS ((char **, int *)); FIXME needed?  */
+-void xgettext_lex_keyword PARAMS ((char *__name));
++void xgettext_lex_keyword PARAMS ((const char *__name));
+ void xgettext_lex_cplusplus PARAMS ((void));
+ void xgettext_lex_trigraphs PARAMS ((void));
+===================================================================
+RCS file: src/xgettext.c,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.1
+diff -pu -r0.10.35.0 -r0.10.35.1
+--- src/xgettext.c     1998/07/09 22:49:48     0.10.35.0
++++ src/xgettext.c     1998/07/18 00:25:15     0.10.35.1
+@@ -835,6 +835,8 @@ scan_c_file(filename, mlp, is_cpp_file)
+      int is_cpp_file;
+ {
+   int state;
++  int commas_to_skip; /* defined only when in states 1 and 2 */
++  int paren_nesting;  /* defined only when in state 2 */
+   /* Inform scanner whether we have C++ files or not.  */
+   if (is_cpp_file)
+@@ -854,63 +856,79 @@ scan_c_file(filename, mlp, is_cpp_file)
+    {
+      xgettext_token_ty token;
+-     /* A simple state machine is used to do the recognising:
++     /* A state machine is used to do the recognising:
+         State 0 = waiting for something to happen
+-        State 1 = seen one of our keywords with string in first parameter
+-        State 2 = was in state 1 and now saw a left paren
+-      State 3 = seen one of our keywords with string in second parameter
+-      State 4 = was in state 3 and now saw a left paren
+-      State 5 = waiting for comma after being in state 4
+-      State 6 = saw comma after being in state 5  */
++        State 1 = seen one of our keywords
++        State 2 = waiting for part of an argument */
+      xgettext_lex (&token);
+      switch (token.type)
+        {
+-       case xgettext_token_type_keyword1:
++       case xgettext_token_type_keyword:
++       if (!extract_all && state == 2)
++         {
++           if (commas_to_skip == 0)
++             {
++               error (0, 0,
++                      _("%s:%d: warning: keyword nested in keyword arg"),
++                      token.file_name, token.line_number);
++               continue;
++             }
++
++           /* Here we should nest properly, but this would require a
++              potentially unbounded stack.  We haven't run across an
++              example that needs this functionality yet.  For now,
++              we punt and forget the outer keyword.  */
++           error (0, 0,
++                  _("%s:%d: warning: keyword between outer keyword and its arg"),
++                  token.file_name, token.line_number);
++         }
++       commas_to_skip = token.argnum - 1;
+        state = 1;
+        continue;
+-       case xgettext_token_type_keyword2:
+-       state = 3;
+-       continue;
+-
+        case xgettext_token_type_lp:
+        switch (state)
+          {
+          case 1:
++           paren_nesting = 0;
+            state = 2;
+            break;
+-         case 3:
+-           state = 4;
++         case 2:
++           paren_nesting++;
+            break;
+-         default:
+-           state = 0;
+          }
+        continue;
++       case xgettext_token_type_rp:
++       if (state == 2 && paren_nesting != 0)
++         paren_nesting--;
++       else
++         state = 0;
++       continue;
++
+        case xgettext_token_type_comma:
+-       state = state == 5 ? 6 : 0;
++       if (state == 2 && commas_to_skip != 0)
++         commas_to_skip -= paren_nesting == 0;
++       else
++         state = 0;
+        continue;
+        case xgettext_token_type_string_literal:
+-       if (extract_all || state == 2 || state == 6)
+-         {
+-           remember_a_message (mlp, &token);
+-           state = 0;
+-         }
++       if (extract_all || (state == 2 && commas_to_skip == 0))
++         remember_a_message (mlp, &token);
+        else
+          {
+            free (token.string);
+-           state = (state == 4 || state == 5) ? 5 : 0;
++           state = state == 2 ? 2 : 0;
+          }
+        continue;
+        case xgettext_token_type_symbol:
+-       state = (state == 4 || state == 5) ? 5 : 0;
++       state = state == 2 ? 2 : 0;
+        continue;
+        default:
+-       state = 0;
+-       continue;
++       abort ();
+        case xgettext_token_type_eof:
+        break;
+===================================================================
+RCS file: po/Makefile.in.in,v
+retrieving revision 0.10.35.0
+retrieving revision 0.10.35.5
+diff -u -r0.10.35.0 -r0.10.35.5
+--- po/Makefile.in.in  1998/07/20 20:20:38     0.10.35.0
++++ po/Makefile.in.in  1998/07/26 09:07:52     0.10.35.5
+@@ -62,7 +62,7 @@
+       $(COMPILE) $<
+ .po.pox:
+-      $(MAKE) $(PACKAGE).pot
++      $(MAKE) $(srcdir)/$(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+ .po.mo:
+@@ -79,7 +79,7 @@
+ all: all-@USE_NLS@
+-all-yes: cat-id-tbl.c $(CATALOGS)
++all-yes: $(srcdir)/cat-id-tbl.c $(CATALOGS)
+ all-no:
+ $(srcdir)/$(PACKAGE).pot: $(POTFILES)
+@@ -90,8 +90,8 @@
+          || ( rm -f $(srcdir)/$(PACKAGE).pot \
+               && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+-$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
+-$(srcdir)/stamp-cat-id: $(PACKAGE).pot
++$(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @:
++$(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot
+       rm -f cat-id-tbl.tmp
+       sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+               | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+@@ -180,7 +180,8 @@
+ check: all
+-cat-id-tbl.o: ../intl/libgettext.h
++cat-id-tbl.o: $(srcdir)/cat-id-tbl.c $(top_srcdir)/intl/libgettext.h
++      $(COMPILE) $(srcdir)/cat-id-tbl.c
+ dvi info tags TAGS ID:
+@@ -196,7 +197,7 @@
+ maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+-      rm -f $(GMOFILES)
++      rm -f $(GMOFILES) cat-id-tbl.c stamp-cat-id
+ distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+ dist distdir: update-po $(DISTFILES)
+@@ -207,7 +208,7 @@
+       done
+ update-po: Makefile
+-      $(MAKE) $(PACKAGE).pot
++      $(MAKE) $(srcdir)/$(PACKAGE).pot
+       PATH=`pwd`/../src:$$PATH; \
+       cd $(srcdir); \
+       catalogs='$(CATALOGS)'; \
diff --git a/gcc/ABOUT-NLS b/gcc/ABOUT-NLS
new file mode 100644 (file)
index 0000000..28d38c7
--- /dev/null
@@ -0,0 +1,226 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do *not*
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+One advise in advance
+=====================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias or message inheritance) as the
+implementation here.  It is also not possible to offer this additional
+functionality on top of a `catgets' implementation.  Future versions of
+GNU `gettext' will very likely convey even more functionality.  So it
+might be a good idea to change to GNU `gettext' as soon as possible.
+
+   So you need not provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system provides
+usable `catgets' (if using this is selected by the installer) or
+`gettext' functions.  If neither is available, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is *not* required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --with-catgets
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `catgets' or `gettext' to use
+the internationalizing routines provided within this package, enable
+the use of the `catgets' functions (if found on the locale system), or
+else, *totally* disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   By default the configuration process will not test for the `catgets'
+function and therefore they will not be used.  The reasons are already
+given above: the emulation on top of `catgets' cannot provide all the
+extensions provided by the GNU `gettext' library.  If you nevertheless
+want to use the `catgets' functions use
+
+     ./configure --with-catgets
+
+to enable the test for `catgets' (this causes no harm if `catgets' is
+not available on your system).  If you really select this option we
+would like to hear about the reasons because we cannot think of any
+good one ourself.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+ISO 639 `LL' two-letter code prior to using the programs in the
+package.  For example, let's suppose that you speak German.  At the
+shell prompt, merely execute `setenv LANG de' (in `csh'),
+`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
+can be done from your `.login' or `.profile' file, once and for all.
+
+   An operating system might already offer message localization for
+many of its programs, while other programs have been installed locally
+with the full capabilities of GNU `gettext'.  Just using `gettext'
+extended syntax for `LANG' would break proper localization of already
+available operating system programs.  In this case, users should set
+both `LANGUAGE' and `LANG' variables in their environment, as programs
+using GNU `gettext' give preference to `LANGUAGE'.  For example, some
+Swedish users would rather read translations in German than English for
+when Swedish is not available.  This is easily accomplished by setting
+`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list, courtesy of Linux
+International.  You may reach your translation team at the address
+`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+language.  Language codes are *not* the same as the country codes given
+in ISO 3166.  The following translation teams exist, as of December
+1997:
+
+     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+     Swedish `sv', and Turkish `tr'.
+
+For example, you may reach the Chinese translation team by writing to
+`zh@li.org'.
+
+   If you'd like to volunteer to *work* at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is *not* the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+*actively* in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of December
+1997.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination.
+
+     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+                     .----------------------------------------------------.
+     bash            |       []          []          []                   |  3
+     bison           |       []          []          []                   |  3
+     clisp           |       [] [] []    []                               |  4
+     cpio            |       []    []    []       [] []    []             |  6
+     diffutils       |       []    []    []                []          [] |  5
+     enscript        |       []    [] [] []          []             []    |  6
+     fileutils       | []    []    []    []       [] []    [] []    [] [] | 10
+     findutils       |       []    []    [] []    [] []    []    []    [] |  9
+     flex            |             []    []       []                   [] |  4
+     gcal            |       []          []          []    []          [] |  5
+     gettext         |    [] []    []    []       [] [] [] [] []    [] [] | 12
+     grep            |       []    []    []       [] [] [] []    [] [] [] | 10
+     hello           |    [] []    []    []       [] [] [] [] []    [] [] | 11
+     id-utils        |       []          []                []             |  3
+     indent          |    [] []                   []       []    []       |  5
+     libc            |       []    []    []       [] []    []          [] |  7
+     m4              |       []          []    []    []          []    [] |  6
+     make            |       []    []    []       [] []    []             |  6
+     music           |                   []                []             |  2
+     ptx             |       []    []    []          [] [] [] []       [] |  8
+     recode          |    [] []    []    []          []    [] []    [] [] |  9
+     sh-utils        |       []    []    []          [] [] [] []       [] |  8
+     sharutils       | []    []    []    []          []                [] |  6
+     tar             | []    []          [] []    [] [] [] [] []    [] [] | 11
+     texinfo         | []    []          []                               |  3
+     textutils       | []    []    []    []       [] [] [] []          [] |  9
+     wdiff           | []    []    []    []          [] [] []          [] |  8
+                     `----------------------------------------------------'
+       17 languages    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+       27 packages      6  4 25  1 18  1 26  2  1 12 20  9 19  7  4  7 17  179
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If December 1997 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.
+
diff --git a/gcc/ChangeLog.11 b/gcc/ChangeLog.11
new file mode 100644 (file)
index 0000000..29483ba
--- /dev/null
@@ -0,0 +1,10652 @@
+Sat Aug  2 18:50:43 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * tree.c (int_fits_type_p): Negative ints never fit unsigned
+       types, and unsigned ints with top-bit-set never fit signed types.
+
+Sat Aug  2 16:25:43 1997  Per Bothner  <bothner@frobnitz.gnu.ai.mit.edu>
+
+       * Makefile.in (EXTRA_C_OBJS): Removed.
+       (C_AND_OBJC_OBJS):  New.  Subsumes EXTRA_C_OBJS and OBJC_CCOMMON.
+       * objc/Make-lang.in (OBJC_CCOMMON):  Removed.
+
+Sat Aug  2 16:11:57 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure.in: Build .gdbinit for top level build dir here.
+       (AC_OUTPUT): Pass oldstyle_subdirs to configure.lang.
+       * configure.lang: Fix building of .gdbinit for oldstyle lang subdirs.
+
+Sat Aug  2 13:48:15 1997  Ken Raeburn  <raeburn@cygnus.com>
+
+       * cse.c (cse_insn): Ignore paradoxical SUBREGs unless we are
+       looking for such.
+
+Sat Aug  2 13:25:33 1997  Tristan Gingold  (gingold@email.enst.fr)
+
+       * calls.c (expand_call): If -fcheck-memory-usage, use pseudo-register,
+       check indirectly called function is executable, and set rights of
+       memory for aggregate as write only.
+       (store_one_arg): If -fcheck-memory-usage, set rights for pushed
+       stack argument.
+       * c-decl.c (init_decl_processing): Add
+       __builtin_aggregate_incoming_address.
+       * explow.c (expr_size): Call expand_expr with appropriate flag.
+       * expr.c (expand_builtin, case BUILT_IN_AGGREGATE_INCOMING_ADDRESS):
+       New case.
+       (expand_assignment, expand_expr, emit_push_insn, store_expr):
+       Insert calls to chkr_check_addr, chkr_set_right, and chkr_copy_bitmap
+       when -fcheck-memory-usage.
+       (get_push_address, get_memory_usage_from_modifier): New functions.
+       * expr.h: Add expand_modifier flags.
+       (chkr_*_libfunc): New decls.
+       (memory_use_mode): New declaration.
+       * flags.h (flag_check_memory_usage, flag_prefix_function_name): New
+       declaration.
+       * function.c (put_var_into_stack, assign_parms): If
+       -fcheck-memory-usage, set the rights of pushed variable.
+       * optabs.c (chkr_{check_addr,set_right}_libfunc): New definitions.
+       (chkr_{copy_bitmap,check_exec}_libfunc): Likewise.
+       (init_optabs): Initialize these chkr_*_libfunc.
+       * stmt.c (expand_computed_goto): If -fcheck-memory-usage, check that
+       computed address of a goto is executable.
+       (expand_asm, expand_asm_operands): If -fcheck-memory-usage,
+       disallow asm statments.
+       * toplev.c (flag_check_memory_usage, flag_prefix_function_name): New
+       variable.
+       (f_options): Add `check-memory-usage' and `prefix_function_name'.
+       (main): Disable `-fomit-frame-pointer' if `-fcheck-memory-usage' is set
+       and the machine can't debug without the frame pointer.
+       * tree.h (built_in_function): Add BUILT_IN_AGGREGATE_INCOMING_ADDRESS.
+       * varasm.c (make_function_rtl, make_decl_rtl): Add a prefix when
+       flag_prefix_function_name_usage is set.
+       (assemble_name): Strip the CHKR_PREFIX.
+       * alpha.c (alpha_builtin_saveregs): If -fcheck-memory-usage,
+       set rights of saved registers.
+       * clipper.c (clipper_builtin_saveregs): Likewise.
+       * m88k.c (m88k_builtin_saveregs): Likewise.
+       * pa.c (hppa_builtin_saveregs): Likewise.
+       * sparc.c (sparc_builtin_saveregs): Likewise.
+
+Sat Aug  2 08:01:12 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-decl.c (grokdeclarator): Give error for `long double' and
+       refine text of some error messages.
+
+       * alpha.h (FLOAT_VALUE_TYPE, INTIFY, FLOATIFY, FLOAT_ARG_TYPE): Define.
+       * i860.h (FLOAT_VALUE_TYPE): Fix typo; was FLOAT_TYPE_VALLUE.
+
+       * calls.c (store_one_arg): Allow stack_slot to be SP in
+       ARGS_GROW_DOWNWARD case.
+
+       * c-decl.c (parmlist_tags_warning): Only suppress warning on
+       union if anonymous.
+
+       * libgcc2.c (_trampoline): Rework last change; both getpagesize
+       and mprotect are in cygwin32.
+
+       * reload1.c (reload): Add IN_ADDR to IN_ADDR_ADDR when computing
+       needs since they conflict.
+
+       * print-rtl.c (indent): Move to file level; was static in print_rtx.
+       (print_inline_rtx): New function.
+       * reload.c (debug_reload): Rework to make output more compact.
+
+       * dwarfout.c (output_compile_unit_die): Add support for Pascal.
+       * dwarf2out.c (gen_compile_unit_die): Likewise.
+
+       * c-typeck.c (lvalue_p, case BIND_EXPR, RTL_EXPR): Return 1 if array.
+
+       * Makefile.in (OBJC_OBJC): Delete from here.
+
+       * varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
+       (record_constant_1, case STRING_CST): Record TYPE_MODE.
+
+       * tree.c (contains_this_placeholder_p): Delete.
+       (contains_placeholder_p): Now contains code from above function.
+       (contains_placeholder_p, case 'r'): Don't look at offset info.
+       * expr.c (expand_expr, case PLACEHOLDER_EXPR): Find innermost
+       matching and don't check contains_placeholder_p.
+
+Fri Aug  1 17:15:07 1997  Per Bothner  <bothner@cygnus.com>
+
+       * objc/objc-act.c (lang_init):  Don't check_newline #if USE_CPPLIB.
+       * c-lex.c (lang_init):  Remove (recently moved here).
+       * c-lang.c (lang_init):  Restore, but add #if !USE_CPPLIB.
+
+Fri Aug  1 11:26:45 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (pa_reorg): Explode ADDR_DIFF_VEC insns too.
+
+Thu Jul 31 19:37:22 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * libgcc2.c (getpagesize): Don't compile if __CYGWIN32__.
+
+Thu Jul 31 16:04:42 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (output_to_reg, output_fix_trunc): Use scratch memory,
+       if available, instead of dynamically extending the stack.
+       (put_condition_code, print_operand): Added reverse_cc to reverse the
+       comparison when $ah is accessed directly instead of using eflags
+
+       * i386.md (*trunc*): Use scratch memory for output_fix_trunc.
+       (movsicc_1, movhicc_1) Change alternative 3 to: 
+       jCC L1; mov; jmp L2; L1:mov; L2:
+       (movsfcc, movdfcc, movxfcc): Force constant operands to memory.
+       (movsfcc_1, movdfcc_1, movxfcc_1): Change alternative 3 as above.
+
+Thu Jul 31 16:04:42 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386.h (MAX_FIXED_MODE_SIZE): Define.
+
+Thu Jul 31 16:04:42 1997   Robert Lipe <robertl@dgii.com>
+       
+       * i386/sco5.h (SWITCHES_NEED_SPACES) Define.
+       Required by the COFF (but not ELF) linker.
+
+Wed Jul 30 15:03:52 1997  Per Bothner  <bothner@cygnus.com>
+
+       * demangle.h (DMGL_JAVA):  New option to request Java demangling.
+       * cplus-dem.c:  Various changes to produce Java output when passed
+       DMGL_JAVA.  Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
+       (main):  Support --java and -j flags to set DMGL_JAVA.
+
+Wed Jul 30 08:56:08 1997  Philip Blundell  <Philip.Blundell@pobox.com>
+
+       * configure.in (arm-*-*): Replace with arm-*-aout.
+       * arm/aout.h (SET_ASM_OP): Define by default.
+       * arm/riscix.h (SET_ASM_OP: Undefine.
+       * arm.h (CPP_SPEC): Add %(subtarget_cpp_spec).
+       (SUBTARGET_CPP_SPEC): New macro.
+       * arm/linux.h: Include aout.h rather than arm.h directly.
+       (TARGET_CPU_DEFAULT): Define.
+       ({ASM,CPP}_SPEC): Remove.
+       * arm/t-linux (MULTILIB_OPTIONS): Use -mapcs-NN instead of -mN.
+       (LIB1ASMSRC): Use generic ARM version.
+       (CROSS_LIBGCC1): Define.
+       * arm/lib1funcs-linux.asm: Remove.
+
+Tue Jul 29 17:57:47 1997  Per Bothner  <bothner@cygnus.com>
+
+       * Add hooks for using autconf-style Makefile.in in language subdirs.
+       * configure.in (all_outputs, oldstyle_subdirs):  New variables.
+       Pass all_outputs to AC_OUTPUT.
+       * configure.lang:  Only iterate over oldstyle_subdirs.
+
+       * Patches to use cpplib with cc1 #if USE_CPPLIB.
+       * configure.in (--enable-c-cpplib):  New option.
+       (extra_c_flags, extra_c_objs):  New variables.
+       * Makefile.in (EXTRA_C_OBJS):  New variable.
+       (INTERNAL_CFLAGS):  Add @extra_c_flags@.
+       (C_OBJS):  Add $(EXTRA_C_OBJS).
+       * c-lex.c (generally):  Replace getc and ungetc by macros GETC and
+       UNGETC.  Avoid explicit references to finput.
+       (yy_get_token):  New function, that calls cpp_get_token.
+       (init_parse):  New function - calls init_lex.
+       (finish_parse):  New function (called by compile_file).
+       (GET_DIRECTIVE_LINE):  New macro wrapper replaces get_directive_line.
+       (lang_init):  Don't check_newline - already know main_input_filename.
+       (handle_sysv_pragma):  Remove FILE* parameter.
+       * toplev.c (finput):  Remove #if USE_CPPLIB.
+       (compile_file):  #if USE_CPPLIB don't open input file here,
+       do it in cpp_start_read.  Call init_parse instead of init_lex.
+       At end, call finish_parse instead of fclose(finput).
+
+Mon Jul 28 15:48:29 1997  Brendan Kehoe  <brendan@cygnus.com>
+
+       * integrate.c (expand_inline_function): Use xmalloc instead of
+       alloca for the LABEL_MAP.
+       (save_for_inline_copying): Likewise.
+
+Mon Jul 28 11:22:16 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (compile_file): Also emit any deferred TREE_PUBLIC inlines.
+       (rest_of_compilation): Use decl_printable_name instead of DECL_NAME
+       to identify functions in the RTL dump files.
+
+       * dwarf2out.c (add_location_or_const_value_attribute): 
+       leaf_renumber_regs_insn.  Also eliminate_regs here.
+       (add_AT_location_description): Not here.  Don't emit anything 
+       for a variable that has been optimized away.
+       (add_const_value_attribute): Likewise.
+
+       * dwarfout.c (location_or_const_value_attribute):
+       leaf_renumber_regs_insn.  Also eliminate_regs here.
+       (location_attribute): Not here.
+
+       * stor-layout.c (layout_type): Fix ancient code to match ancient
+       comment.  Use mode of field for one-field structs.
+
+Sun Jul 27 12:09:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * function.c (put_var_into_stack, trampoline_address): Treat
+       inline_function_decl like current_function_decl.
+       * expr.c (expand_expr, case LABEL_DECL): Likewise.
+       (expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
+       moving into current function; abort if in incorrect context.
+       * fold-const.c (fold_range_test, fold): Avoid making SAVE_EXPR
+       if at top level.
+
+       * dwarfout.c (ASM_OUTPUT_SOURCE_FILENAME): Delete default value.
+
+       * alpha.h (TARGET_SWITCHES): Add -mno-byte.
+
+       * expr.c (get_inner_unaligned_p): Deleted.
+       (expand_assignment): Remove special-case of constant array.
+       (expand_expr, case ARRAY_REF): Likewise, and clean up remaining code.
+
+       * explow.c (probe_stack_range): Do probing with loop if more
+       than a small number.
+
+Fri Jul 25 15:42:34 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * configure.in: Finish fixing calculation if default thread
+       support is enabled.
+
+Fri Jul 25 15:30:09 1997  Doug Evans  <dje@cygnus.com>
+
+       * Makefile.in (native): Depend on config.h.
+       (gcc.o): Depend on Makefile, not config.status.
+
+Fri Jul 25 10:56:50 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (pa_reorg): If TARGET_BIG_SWITCH, then do not explode
+       ADDR_VEC insns.  Slightly rework code which explodes ADDR_VEC
+       insns.
+       * pa.h (TARGET_BIG_SWITCH): Define.
+       (TARGET_SWITCHES): Add "big-switch" and "no-big-switch".
+       (CASE_VECTOR_MODE): Use TI or DI depending on TARGET_BIG_SWITCH.
+       (CASE_DROPS_THROUGH): Remove definition.
+       (ASM_OUTPUT_ADDR_VEC_ELT): Rewrite to handle TARGET_BIG_SWITCH.
+       (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+       * pa.md (casesi): Rework to avoid some potential long branch
+       problems (also makes generated code faster!).  Handle
+       TARGET_BIG_SWITCH.
+       (casesi0): Corresponding changes.
+
+Fri Jul 25 08:36:47 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * calls.c: (expand_call): If -fstack-check and temp needed
+       for arg is too large, use alloca.
+       * expr.c (expand_expr, case MODIFY_EXPR): Don't preexpand calls
+       if LHS is an indirect via a constant pointer.
+
+Thu Jul 24 21:49:11 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * bitmap.c (bitmap_operation): Reset CURRENT on deferred deletion.
+
+Wed Jul 23 23:52:14 1997  Chris Smith  <csmith@convex.hp.com>
+
+       * convex.h (CHECK_FLOAT_VALUE): Fix OVERFLOW capitalization.
+
+Wed Jul 23 13:00:47 1997  Richard Earnshaw <rearnsha@cambridge.arm.com>
+
+       * configure.in (arm-*-netbsd*): Fix typo setting tmake_file.
+
+Wed Jul 23 06:39:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure.in (alpha*): Put quotes around MASK_GAS.
+
+Tue Jul 22 15:24:45 1997  Brendan Kehoe  <brendan@cygnus.com>
+
+       * tree.c (array_type_nelts): Make sure the domain of TYPE is set
+       before we try to use it.
+
+Tue Jul 22 12:26:13 1997  Doug Evans  <dje@cygnus.com>
+
+       * sparc.c (gen_v9_scc): Handle early clobber of result.
+       * sparc.md (seqdi_special): Don't clobber %xcc.
+       (snedi_special, seqdi_special_trunc, snedi_special_trunc): Likewise.
+       (snedi_zero, neg_snedi_zero, seqdi_zero, neg_seqdi_zero): Likewise.
+       (snedi_zero_trunc, seqdi_zero_trunc): Likewise. Renamed from ..._sp64.
+       (snedi_zero_trunc_sp32, seqdi_zero_trunc_sp32): Delete.
+
+       * Makefile.in (Makefile): Pass xmake_file, tmake_file to
+       configure.frag
+       (distclean): Delete Make-host, Make-target.
+       * configure.in (host_overrides): Set to Make-host.
+       (dep_host_xmakefile): Loop over all elements in host_make_file.
+       (target_overrides): Set to Make-target.
+       (dep_tmake_file):  Loop over all elements in tmake_file.
+       (configure.frag): Pass dep_host_xmake_file, dep_tmake_file.
+       * configure.frag: New arguments xmake_files, tmake_files.
+       Build Make-host, Make-target.
+
+Mon Jul 21 23:17:44 1997  Paul Eggert  <eggert@twinsun.com>    
+
+       * objc/Make-lang.in, objc/Makefile.in: Comment out lines containing
+       just formfeeds.
+
+Mon Jul 21 14:05:46 1997  Doug Evans  <dje@cygnus.com>
+
+       * Makefile.in (Makefile): Depend on config.status instead
+       of configure.
+       (config.status): Depend on configure.  Run config.status --recheck
+       if out of date.
+       (cstamp-h.in): Use echo instead of touch.
+
+       * reload1.c (reload_cse_mem_conflict_p): Restore handling of
+       (mem:BLK const0_rtx) meaning all memory is clobbered.
+
+Mon Jul 21 06:20:10 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md (iorsi_zexthi_ashl16): Mark output operand as earlyclobber.
+
+Sun Jul 20 06:11:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure.in (alpha*-*-*): Set cpu_type to alpha.
+       Change "alpha-" to "alpha*-" in all entries.
+       Set target_cpu_default for ev5 and ev56 systems.
+       Use symbolic names for target_cpu_default.
+       * alpha.c (override_options): Set default for alpha_cpu
+       from TARGET_CPU_DEFAULT.
+       * alpha.h (MASK_CPU_EV5): New macro.
+
+       * tree.c (contains_placeholder_p): Call contains_this_placeholder_p.
+       (contains_this_placeholder_p): Renamed from contains_placeholder_p.
+       Added new arg, PL.
+       Rework to make more consistent, check more codes, and avoid
+       undefined fields.
+       * expr.c (expand_expr, case PLACEHOLDER_EXPR): Pick outermost
+       object in placeholder_list of right type without a PLACEHOLDER_EXPR.
+
+Sat Jul 19 18:00:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * alpha.c (override_options): Allow processor of ev56 or 21164a.
+       (input_operand, case MEM): Correct test involving TARGET_BYTE_OPS.
+       * alpha.h (SECONDARY_{IN,OUT}PUT_RELOAD_CLASS): Don't need for
+       QImode or HImode if TARGET_BYTE_OPS.
+       (ASM_FILE_START): Write a .arch directive.
+       (STACK_CHECK_BUILTIN): New macro.
+       * alpha.md ({zero_,}extend[qh]i[dsh]i2): Rework TARGET_BYTE_OPS cases.
+       (mov[hq]i): Likewise.
+       (extend[qh]i[hsd]i2x): Add missing cases and fix typo in constraint.
+       (reload_{in,out}[qh]i): Disable for TARGET_BYTE_OPS.
+
+Fri Jul 18 23:24:57 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (make_decl_rtl): Don't use ASM_FORMAT_PRIVATE_NAME for
+       local decls with TREE_PUBLIC set.
+       (bc_make_decl_rtl): Likewise.
+
+Fri Jul 18 22:16:28 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure.in: Invoke AC_CONFIG_HEADER.
+       Check for string.h, strings.h, stdlib.h, time.h, unistd.h.
+       Check for whether malloc/realloc/free need to be declared.
+       (links): Rename config.h to config2.h.
+       (AC_OUTPUT): Create cstamp-h.
+       * Makefile.in (config.in,cstamp-h.in): Add rules for.
+       (config.h,cstamp-h): Add rules for.
+       (distclean): Delete config2.h, cstamp-h.
+       (ALL_CFLAGS): Add @DEFS@.
+       * aclocal.m4, acconfig.h: New files.
+
+       * Makefile.in (distclean): Delete Make-host, Make-target.
+       * configure.in (host_overrides): Set to host_xmake_file, don't create
+       Make-host.
+       (target_overrides): Set to tmake_file, don't create Make-target.
+       (language subdir support): Keep together.
+
+       * c-decl.c (duplicate_decls): Set DECL_ABSTRACT_ORIGIN to olddecl
+       if inline function and not new definition.
+
+       * configure.in: Don't loop trying to configure language subdirs.
+       Don't pass to configure.lang variables it doesn't use.
+       * configure.lang: Delete top level directory from loop.
+       Delete code not useful for language subdirs.
+
+Fri Jul 18 08:12:53 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * toplev.c (rest_of_compilation): Call reload_cse_regs here.
+       * reload1.c (reload): Don't call it here.
+       (reload_cse_mem_conflict_p): Remove MEM_OFFSET and MEM_MODE args.
+       (reload_cse_mem_conflict_p, case MEM): Call anti_dependence.
+       (reload_cse_invalidate_mem): Update call to reload_cse_mem_conflict_p.
+       (reload_cse_regs): No longer static.
+       Call init_alias_analysis.
+       Ignore CLOBBER in a PARALLEL.
+
+Fri Jul 18 06:44:22 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * objc/Make-lang.in (objc-headers): Fix command for the new build
+       directory layout, don't pass srcdir variable.
+       * objc/Makefile.in (copy-headers): Use $(srcdir) from this
+       makefile, not the parent's.
+
+Thu Jul 17 16:03:03 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure.lang (EXTRA_HEADERS,EXTRA_PASSES,EXTRA_PARTS): Delete.
+       (EXTRA_PROGRAMS,EXTRA_OBJS,EXTRA_GCC_OBJS,MD_DEPS): Delete.
+       (version) Delete duplicate entry.
+       * configure.in (merged_frags): Delete unused variable.
+       (extra_headers_list): Move setting outside of subdir loop.
+       (extra_headers,extra_passes): Don't pass to configure.lang.
+       (extra_programs,extra_parts,extra_objs): Likewise.
+       (host_extra_gcc_objs,gxx_include_dir,md_cppflags): Likewise.
+
+Thu Jul 17 07:00:43 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.h (STACK_CHECK_*): Provide default values.
+       (probe_stack_range): New declaration.
+       * flags.h (flag_stack_check): Likewise.
+       * explow.c (allocate_dynamic_stack_space): Call probe_stack_range.
+       (emit_stack_probe, probe_stack_range): New functions.
+       * function.c (expand_function_end): If function is non-leaf and stack 
+       checking is requested, emit needed probes.
+       * reload1.c (reload): If checking stack, verify frame small enough.
+       * stmt.c (expand_decl): If stack checking, use alloca for large vars.
+       * toplev.c (flag_stack_check): New variable.
+       (f_options): Add "stack-check".
+
+       * reorg.c (mark_target_live_regs): Pass FIRST_PSEUDO_REGISTER to
+       call to EXECUTE_IF_SET_IN_REG_SET.
+
+Wed Jul 16 14:51:00 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i960.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Use standard method to convert ALIGN
+       to power-of-two of bytes.
+
+       * sparc.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+       * sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Undef before definition.
+
+Wed Jul 16 14:34:09 1997  Klaus Espenlaub  (kespenla@hydra.informatik.uni-ulm.de)
+
+       * calls.c (emit_library_call_value): Initialize all argvec elements.
+
+Wed Jul 16 14:31:39 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * global.c (global_conflicts): Pass FIRST_PSEUDO_REGISTER to
+       call to EXECUTE_IF_SET_IN_REG_SET.
+
+Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+       * From Rob Black (r.black@ic.ac.uk) and Mark Brinicombe
+       (amb@physig.ph.kcl.ac.uk):
+       * configure.in (arm-*-netbsd*): New configuration.
+       * arm/netbsd.h, arm/t-netbsd, arm/xm-netbsd.h: New files.
+       
+Wed Jul 16 10:57:03 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+       * arm.c (tune_flags): New variable.
+       (target_{cpu,fpe}_name): Delete.
+       (arm_fpu_arch): New variable.
+       (arm_select): Also allow -march=... to configure just the 
+       architecture.
+       (all_procs): Allow armv{2,2a,3,3m,4,4t} for use with -march=.
+       (arm_override_options): Handle -march=, but don't let -mcpu=
+       and -mtune= match the architecture names, since we can only
+       tune for an implementation.  Rework selection of tuning options
+       for floating point.
+       (use_return_insn): Support interworking with Thumb code.
+       (arm_rtx_costs): Rework multiply costs so that cost is based on
+       the tune, not the architecture.
+       (f_register_operand): New function.
+       (output_return_instruction): Support interworking with Thumb code.
+       (output_func_epilogue): Support interworking with Thumb code.
+       Remove redundant calculation of code_size. Use floating-point
+       load-multiples if permitted.
+       (emit_sfm): New function.
+       (arm_expand_prologue): Use floating-point store-multiples if 
+       permitted.
+
+       * arm.h (CPP_CPU_ARCH_SPEC): Handle -march=...
+       (TARGET_OPTIONS): Add arch= and fp=.  Delete fpe=.
+       (enum processor_type): Add PROCESSOR_NONE, for use in all_procs table.
+       (FP_DEFAULT): Default floating point architecture for generic 
+       back-end.
+       (PREDICATE_CODES): Add f_register_operand.
+
+       * arm.md (*push_fp_multi): New pattern.
+
+
+Tue Jul 15 22:08:47 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (exeext): Set to build_exeext not exeext.
+       * configure.in (exeext): Delete redundant set and AC_SUBST call.
+       Change remaining AC_SUBST to use build_exeext instead of exeext.
+
+Tue Jul 15 15:48:25 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * configure.in: Fix calculation if default thread support is enabled.
+
+Tue Jul 15 13:38:46 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * rtl.h (replace_regs): Declare.
+
+Mon Jul 14 16:18:19 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i960.h (ASM_OUTPUT_MI_THUNK): Define.
+
+       * dwarf2out.c (gen_subprogram_die): Remove unreachable and redundant
+       code.
+
+Mon Jul 14 14:22:45 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * calls.c (emit_library_call): Use right index into argvec array
+       when iterating over arguments which need to be pushed on the stack.
+       (emit_library_call_value): Likewise.
+
+Mon Jul 14 08:17:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * gcc.c (convert_filename): Fix typo.
+
+Mon Jul 14 08:10:12 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * configure.in: Clear headers and lib2funcs before re-reading
+       config-lang.in.
+
+       * m68k/linux.h (LINK_SPEC): Fix last change.
+
+Mon Jul 14 08:03:38 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * configure.in (sparc-*-linux-gnu{*,libc1*}): Add sparc/t-linux.
+       * sparc/t-linux: New file.
+
+       * alpha/elf.h (LINK_SPEC): Fix typo.
+       * configure.in (alpha-*-linux-gnu*): Set tmake_file.
+       * alpha/t-linux: New file.
+
+Mon Jul 14 07:41:37 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.c (output_{and,ior,xor}si3): New functions from patterns bodies.
+       * m68k.h (output_{and,ior,xor}si3): New extern declarations.
+       * m68k.md (adddi3, subdi3): Allow constant operand.
+       (anddi3, iordi3, xordi3): New patterns.
+       ({and,ior,xor}si3_internal): Use corresponding output_???si3 function.
+
+Mon Jul 14 07:33:11 1997  Fila Kolodny  <fila@ibi.com>
+
+       * configure.in (*-*-gnu*): Add crt{begin,end}S.o to extra_parts.
+
+Mon Jul 14 07:26:36 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * varasm.c (assemble_variable): If low part of size
+       doesn't fit in an int, variable is too large.
+
+Mon Jul 14 06:51:37 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * bitmap.{h,c}: New files.
+       * Makefile.in (OBJS): Add bitmap.o.
+       (BASIC_BLOCK_H): New make variable for basic-block.h, bitmap.h.
+       ({flow,combine,regclass,local-alloc,reload1,reorg,sched}.o): Use
+       BASIC_BLOCK_H variable instead of basic-block.h.
+       * basic-block.h (*REG_SET): Delete old implementation; use bitmap.h.
+       (regset_{size,bytes}): Delete.
+       (regs_live_at_setjmp): Declare.
+       (EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Delete.
+       * flow.c (init_regset_vector): Make global; don't take basic block
+       times # of pseduos as argument.
+       (life_analysis): Change all init_regset_vector calls.
+       Use free_regset_vector to release arrays only flow uses at end.
+       (allocate_for_life_analysis): Change init_regset_vector call.
+       Don't set regset_{size,bytes}.
+       (free_regset_vector): Call FREE_REG_SET to release any
+       memory allocated by each vector.
+       (propagate_block): Call FREE_REG_SET on dead/live.
+       (mark_used_regs): Don't use REGSET_ELT_TYPE anymore.
+       * output.h (allocate_for_life_analysis): Add declaration.
+       (regno_uninitialized, regno_clobbered_at_setjmp): Likewise.
+       (dump_flow_info, flow_analysis): Likewise.
+       * regclass.c (init_reg_sets): Invoke INIT_ONCE_REG_SET.
+       (allocate_reg_info): Invoke MAX_REGNO_REG_SET.
+       (regset_release_memory): Free basic_block_live_at_start storage.
+       * reorg.c (mark_target_live_regs): Delete unused variables.
+       * sched.c (schedule_block): Free space associated with
+       reg_pending_sets and old_live_regs.
+       (schedule_insns): Free bb_{dead,live}_regs on first pass.
+       (sched_analyze_insn): Use EXECUTE_IF_SET_IN_REG_SET and then clear.
+       * toplev.c (rest_of_compilation): Call regset_release_memory.
+
+Mon Jul 14 00:14:13 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (main): Prefer DWARF 2 or stabs with -ggdb.
+       * ns32k/tek6000.h (PREFERRED_DEBUGGING_TYPE): DBX_DEBUG.
+       * alpha.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
+       * mips.h (PREFERRED_DEBUGGING_TYPE): SDB_DEBUG.
+
+Sun Jul 13 15:11:08 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * stupid.c (stupid_mark_refs): If setting reg set only in this
+       insn and not referenced, make REG_UNUSED note.
+
+Sun Jul 13 14:03:19 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * gcc.c (process_command): If -save-temps and -pipe were specified
+       together, don't do -pipe.
+
+Sun Jul 13 12:27:03 1997  Doug Evans  <dje@cygnus.com>
+
+       * gcc.c (main): Handle blank in version_string when comparing
+       with compiler_version.
+
+Sat Jul 12 01:53:55 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * sparc.c (output_function_prologue): Fix offset from CFA.
+       (sparc_flat_output_function_prologue): Likewise.
+
+Fri Jul 11 09:49:15 1997  Jeffrey A Law  (law@cygnus.com)
+       
+       * mips.c (epilogue_reg_mentioned_p): Delete unused function.
+       (mips_epilogue_delay_slots): Likewise.
+       (function_epilogue): Greatly simplify.
+       (mips_expand_epilogue): If we have a null prologue/epilogue,
+       then use a normal return insn.  Emit blockage insns before
+       stack pointer adjustments.
+       (mips_can_use_return_insn): Renamed from simple_epilogue_p.  All
+       callers changed.  Do not use return insns if $31 is live in the
+       function or if generating profiling information.
+       * mips.h (DELAY_SLOTS_FOR_EPILOGUE): Delete.
+       (ELIGIBLE_FOR_EPILOGUE_DELAY): Likewise.
+       * mips.md (return): Remove expander and change the pattern to
+       look like a standard "return" insn.
+       (return_internal): Show use of $31 explictly.
+       (epilogue expander): Enable.
+
+Thu Jul 10 13:04:53 1997  Doug Evans  <dje@cygnus.com>
+
+       * cccp.c (INO_T_EQ): Return 0 for MSDOS.
+
+       * Makefile.in (CC): Use autoconf value.
+
+Tue Jul  8 18:08:00 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (gen_subprogram_die): When handling declarations, test
+       DECL_CONTEXT not decl_class_context before equate_decl_number_to_die.
+
+Tue Jul  8 16:47:13 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.md (movsi define_split): Use unsigned HOST_WIDE_INT,
+       not unsigned.
+
+Sat Jul  7 00:01:41 1997  Jim Meyering <meyering@eng.ascend.com>
+
+       * i386/t-sol2 (crt[1in].o): Also depend on $(GCC_PASSES).
+
+Fri Jul  4 11:45:39 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (DWARF_CIE_HEADER_SIZE, DWARF_FDE_HEADER_SIZE,
+       size_of_cfi, size_of_fde, calc_fde_sizes, next_fde_offset,
+       cie_size): Lose.
+       (ASM_OUTPUT_DWARF_STRING): Move earlier.
+       (INCOMING_FRAME_SP_OFFSET): Provide default.
+       (initial_return_save): Adjust for CFA offset.
+       (dwarf2out_frame_debug): Lookup initial CFA offset when setting up.
+       (output_call_frame_info): Use label subtraction for length fields.
+       Add pointer to exception region information in for_eh case.
+       (dwarf2out_do_frame): New fn.
+       (dwarf2out_frame_init): Use INCOMING_FRAME_SP_OFFSET.
+       (dwarf2out_frame_finish): Don't bother emitting .debug_frame for
+       non-Irix targets.  Just emit .eh_frame.
+       (output_die): Refer to an FDE with label subtraction.
+       * i386.h (INCOMING_FRAME_SP_OFFSET): Define.
+       * defaults.h (DWARF2_UNWIND_INFO): Define if
+       INCOMING_RETURN_ADDR_RTX is provided.
+       * final.c (final): Don't call dwarf2out_frame_debug unless we are
+       doing dwarf 2.
+
+Thu Jul  3 17:37:52 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * fp-bit.c (unpack_d): Check fraction not sign to distinquish QNaN.
+
+Wed Jul  2 09:48:03 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * loop.c (strength_reduce): Make sure register does not exceed the
+       table size when looking up the last UID.
+
+Wed Jul  2 07:47:44 1997  Nick Burrett  <n.a.burrett@btinternet.com>
+
+       * genoutput.c (process_template): Place increment expression
+       outside of putchar function call.
+
+Wed Jul  2 06:56:52 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * sparc/linux.h (LIBGCC_SPEC): Removed.
+       (CC1_SPEC): Add %{profile:-p}.
+       ({CPP,LIB,LINK}_SPEC): Choose glibc 1 or 2 depending on USE_GNULIBC_1.
+       * configure.in (sparc-*-linux-gnulibc1*): New configuration.
+
+       * configure.in (powerpc-*-linuxgnu*): Default thread_file is posix.
+       Set xmake_file to x-linux.  Add extra_parts.
+       * rs6000/linux.h (LINK_SPEC): Defined.
+
+       * m68k/linux.h (LINK_SPEC): Pass -shared for -shared.
+       ({CPP,LINK}_SPEC): Choose for glibc 1 or 2 depending on USE_GNULIBC_1.
+       * configure.in (m68k-*-linux-gnu*): Default thread_file is `posix'.
+       (m68k-*-linux-gnulibc1): New configuration.
+
+       * alpha/elf.h (LINK_SPEC): Change ld-gnu.so.1 to ld-linux.so.2.
+       * configure.in (alpha-*-linux-gnu*): Default thread_file is `posix'.
+
+Wed Jul  2 06:12:37 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * alpha.md (divsi3, modsi3, udivsi3): Comment out.
+       (extendsfsd2_no_tp): Add alternative with output in MEM, input in REG.
+
+       * configure.in (*-linux*): Add "-gnu" to names to match.
+
+       * libgcc2.c (_trampoline): Add stdcall attribute to VirtualProtect
+       on i386.
+
+       * objc/objc.gperf: Renamed from gperf.
+
+Wed Jul  2 05:42:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * objc/Make-lang.in ($(srcdir)/objc/objc-parse.c): Fix command
+       to use the right file names.
+
+Tue Jul  1 23:25:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * reorg.c (redundant_insn): If INSN or possible match has REG_UNUSED
+       note, don't have match.
+
+Tue Jul  1 18:36:24 1997  Doug Evans  <dje@cygnus.com>
+
+       * mips.c (mips_output_external): Don't output .extern's for
+       variables in user specified sections unless they're .sbss/.sdata.
+
+Tue Jul  1 18:30:26 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * cse.c (find_best_addr): Add missing rtx_cost arguments.
+
+       * fp-bit.c (float_to_usi): Move code for negative numbers before code
+       for infinity.  Modify infinty code to only handle positive infinities.
+
+Tue Jul  1 11:16:41 1997  Robert Lipe  <robertl@dgii.com>
+
+       * fixinc.sco: Restore pwd aftercopy.
+       Convert declaration of abs in math.h to prototype.
+       Fix static functions in sys/stat.h for C++.
+
+Tue Jul  1 10:55:47 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.md ({add,ior,xor}si3): Change to use define_expand wrapper
+       and split add/ior/xor of large constants early.
+       (andsi3): Remove 6/29 code to do and of large constants.
+       (nor, nand, eqv, maskir): Add names to all logical define_insns.
+
+Tue Jul  1 09:03:35 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300.h (BIGGEST_FIELD_ALIGNMENT): Remove definition.
+       * mips.h (BIGGEST_FIELD_ALIGNMENT): Likewise.
+
+Mon Jun 30 14:58:00 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * sh.c (sh_expand_epilogue): Emit blockage insn before cutting
+       back stack.
+
+Sun Jun 29 11:27:07 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.h (TARGET_FLAGS): Add -m{,no-}update to suppress
+       creating load/store with update instructions, and also
+       -m{,no-}fused-madd to suppress the generation of fused add and
+       multiply instructions.  Move debug flags to TARGET_OPTIONS.
+       (GO_IF_LEGITIMATE_ADDRESS): Don't allow PRE_{INC,DEC} if -mno-update.
+       (GO_IF_MODE_DEPENDENT_ADDRESS): Ditto.
+       (rs6000_debug_{name,stack,arg}): Add declarations.
+       (toc_initialized): Likewise.
+       (got_no_const_operand): Likewise.
+       (PREDICATE_CODES): Add got_no_const_operand.
+       (toc_section): Make toc_initialized a global.
+       (RTX_COSTS): Set appropriate costs for add, logical operators that
+       are really two instructions.
+       
+       * rs6000.c (rs6000_debug_{name,stack,arg}): Add definitions.
+       (rs6000_override_options): Process debug flags.
+       (toc_initialized): Global to say toc initialized.
+       (small_data_operand): Use #if TARGET_ELF, not #ifdef TARGET_SDATA.
+       (rs6000_init_expanders): Likewise.
+       (SMALL_DATA_RELOC): Likewise.
+       (got_no_const_operand): Recognize SYMBOL_REF and LABEL_REF.
+       (rs6000_makes_calls): System V profiling doesn't count as a call.
+       (rs6000_stack_info): Likewise.
+       (rs6000_output_load_toc_table): Take register number argument to
+       determine register to load.  Generate correct code if more than
+       one toc table is done in System V due to profiling or non-local
+       gotos.  If System V toc is not initialized, initialize it now.
+       (rs6000_allocate_stack_space): Move code from output_prolog to
+       allocate stack space.  Take -mno-update into account.
+       (output_prolog): Call rs6000_allocate_stack_space.  Only set
+       rs6000_pic_func_labelno if not profiling.
+       (output_function_profiler): Implement System V profiling.
+       (and_operand): Don't call reg_or_short_operand.
+       (rs6000_finalize_pic): If not optimizing, insert a USE of the GOT
+       register as the last insn.
+       
+       * rs6000.md (load/store update): Take -mno-update into account.
+       If -msoft-float, support SF load/store with update to GPR regs.
+       (allocate_stack): Take -mno-update into account.
+       (add/subtract + multiply instructions): Take -mno-fused-madd into
+       account.
+       (nonlocal_goto_receiver): Specify register # to load.
+       ({add,and,ior,xor}si3): Recognize operation done with full 32 bit
+       constant, splitting latter if need be.
+       (andsi3 define_split): Fix up splitting andsi3 of large constant.
+       ({ior,xor}si3 define_split): Use GEN_INT to create integer rtx
+       values.
+       (movsi_got{,_internal}): Split the load of a CONST into load of
+       the SYMBOL_REF/LABEL_REF and an add.
+       (movsi): Know that addsi3 can handle large values now for NT.
+
+       * sysv4.h (TARGET_SDATA): Remove explicit bit for -msdata.
+       (SUBTARGET_OVERRIDE_OPTIONS): Likewise.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Likewise.
+       (SUBTARGET_SWITCHES): Indicate -m{,no-}sdata doesn't set any flags.
+       (ASM_SPEC): Only pass -m{,no-}reg-names if assembling .s/.S files.
+       (CC1_SPEC): If -msdata, invoke compiler with -msdata=default.
+       (PROFILE_BEFORE_PROLOGUE): Likewise.
+       (RS6000_MCOUNT): Define as "_mcount".
+       (toc_section): Make toc_initialized a global.
+
+Fri Jun 27 19:01:11 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * config/t-linux-gnulibc1: New file.
+       * configure.in (i[3456]86-*-linux*): Default thread_file is `posix'.
+       (i[3456]86-*-linux*gnulibc1): New case.
+       * config/linux.h (LIB_SPEC): Choose for glibc 1 or 2 depending
+       on USE_GNULIBC_1.
+       * i386/linux.h (CPP_SPEC, LINK_SPEC): Likewise.
+
+Fri Jun 27 19:00:52 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>
+
+       * config/linux.h (PREFERRED_DEBUGGING_TYPE): Undefine before define.
+
+Fri Jun 27 18:35:04 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>
+       
+       * configure.in: Clean up Make-{host,target,hooks} in all
+       subdirs, not just '.'.
+       * Makefile.in (distclean): Delete */Make-{host,target,lang,hooks}.
+
+Fri Jun 27 18:27:11 1997  Fila Kolodny  <fila@ibi.com>
+
+       * config/xm-gnu.h (fcntl.h): Only include if not building libgcc.a.
+
+Fri Jun 27 18:17:44 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure.frag: Rewrite.
+
+       * objc/Make-lang.in (OBJC_CCOMMON): Object files don't go in srcdir.
+       (OBJC_OBJS): Likewise.
+       (OBJC_O): Likewise.
+       (objc-parse.o, objc-act.o): Fix rules.
+       (objc/libobjc files): Fix rules.
+
+Fri Jun 27 13:23:38 1997  Andrew Cagney  <cagney@tpgi.com.au>
+
+       * fp-bit.c (float_to_si): Correct return value when Inf.
+
+Fri Jun 27 10:47:09 1997  Scott Christley <scottc@net-community.com>
+
+       * Makefile.in (DLLTOOL): Define.e
+       * objc/Make-lang.in (libobjc_entry.o, libobjc_s.a, libobjc.dll):
+       New targets.
+       (objc.install-normal): Install Objective-C runtime as a DLL.
+       (objc.mostlyclean): Clean up files used to build DLL.
+       * objc/libobjc.def: New file.
+       * objc/libobjc_entry.c: New file.
+
+       * objc/sendmsg.c (search_for_method_in_list): No longer static.
+
+       * Makefile.in (GCC_THREAD_FILE): Renamed from OBJC_THREAD_FILE.
+       * configure.lang (GCC_THREAD_FILE): Likewise.
+       * configure.in (--enable-threads): New parameter.
+       * objc/Make-lang.in (OBJC_THREAD_FILE): New definition.e
+       * objc/config-lang.in: Print message about ObjC thread file.
+
+       * cccp.c (INO_T_EQ): Define for Win32 but not Cygwin32.
+       * i386/mingw32.h: New file.
+       * i386/xm-mingw32.h: New file.
+       * configure.in (i[3456]86-*-mingw32): New target.
+       * protoize.c (link): Eliminate definition on Win32.
+
+       * objc/thr-posix.c (__objc_thread_yield): Use sched_yield instead.
+
+Fri Jun 27 10:36:41 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+       Round up when calculating possible end address.
+
+Wed Jun 25 19:54:29 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (final_giv_value): Verify that bl->initial_value is
+       invariant before trying to use it.
+
+Wed Jun 25 18:13:05 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/sysv4.h (WCHAR_TYPE{,_SIZE}): Make wchar_t long as per
+       ABI spec.
+
+Wed Jun 25 16:56:16 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * sparc.h (INCOMING_RETURN_ADDR_RTX): Define.
+       (DBX_REGISTER_NUMBER): Fix frame pointer regno for -mflat.
+       * sol2.h (DBX_REGISTER_NUMBER): Likewise.
+       * sparc.c (save_regs): Emit dwarf2 frame debug info.
+       (output_function_prologue, sparc_flat_save_restore,
+       sparc_flat_output_function_prologue): Likewise.
+
+       * dwarf2.h (enum dwarf_call_frame_info): Add DW_CFA_GNU_window_save.
+       * dwarf2out.c (dwarf_cfi_name, output_cfi): Support it.
+       (dwarf2out_cfi_label): Make non-static.
+       (initial_return_save): Support PLUS.
+       (dwarf2out_window_save, dwarf2out_return_save, 
+       dwarf2out_return_reg): New fns.
+
+       * dwarf2out.c (SECTION_FORMAT): Use PUSHSECTION_FORMAT, if defined.
+       (DEBUG_INFO_SECTION): Rename from DEBUG_SECTION.
+       (DEBUG_LINE_SECTION): Rename from LINE_SECTION.
+       * mips/iris6.h: Likewise.
+
+Wed Jun 25 16:25:41 1997  Scott Christley <scottc@net-community.com>
+
+       * Makefile.in (GCC_PASSES): Don't define with $(exeext).
+       * configure.in ({cc,stage_prefix}_set_by_configure): Eliminate extra
+       comma and don't pass value to configure.lang.
+       * objc/Make-lang.in (objc-runtime): Add objc-headers.
+
+       * configure.in: Execute configure.frag in a shell.
+
+       * configure.in (cross_overrides, build_overrides): Default to
+       /dev/null to help platforms where sed cannot handle empty filenames.
+
+       * Reorganize thread implementation to make a clearly defined
+       front-end/back-end interface.
+       * objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Completely
+       rework according to new interface.
+       * objc/thr-{solaris,win32}.c: Likewise.
+       * objc/thr.c: Likewise.
+       * objc/thr.h: Define front-end/back-end interface functions and
+       structures.
+
+Wed Jun 25 16:14:10 1997  Ovidiu Predescu <ovidiu@net-community.com>
+
+       * Complete implementation of +load.
+       * objc/init.c (objc_send_load): New function.
+       (objc_class_tree): New structure.
+       (create_tree_of_subclasses_inherited_from): New function.
+       (__objc_tree_insert_class): New function.
+       (objc_tree_insert_class): New function.
+       (objc_preorder_traverse): New function.
+       (objc_postorder_traverse): New function.
+       (__objc_tree_print): New function.
+       (__objc_destroy_class_tree_node): New function.
+       (class_is_subclass_of_class): New function.
+       (__objc_exec_class): Allocate class tree list and load hash table.
+       (__objc_send_message_in_list): Rewrite using hash table.
+       (__objc_send_load): Remove calls to _objc_load_callback.
+       (objc_send_load): Make static.  Create Tree of classes resembling
+       class hierarchy for all modules.  Call __objc_send_load on all of 
+       the modules in __objc_module_list.
+       (__objc_create_classes_tree): New function.
+
+       * objc/encoding.h (method_get_sizeof_arguments): Fix typo.
+       * objc/objc-api.h (OBJC_ERR_BAD_STATE): New error code.
+       On NeXT redefine object_copy and object_dispose to avoid
+       a conflict with those defined in system library.
+       * objc/selector.c (__objc_register_instance_methods_to_class): New 
+       function.
+       * objc/runtime.h: Likewise.  Add missing function prototypes.
+
+Wed Jun 25 15:09:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (Makefile): Execute configure.frag from srcdir.
+
+       * Makefile.in (configure): Target is $(srcdir)/configure.
+
+Tue Jun 24 15:18:14 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.h (LIMIT_RELOAD_CLASS): Define.
+
+       * recog.c (constrain_operands): When checking earlyclobbers, use
+       operands_match_p instead of rtx_equal_p.
+
+       * dwarfout.c (field_byte_offset): Check for object_offset_in_bits
+       greater than bitpos_int and recompute object_offset_in_bytes if true.
+
+       * mips.md (movdi_internal): Add x/J alternative.
+       (movdi_internal2): Add x/J alternative; change a/I to a/J.
+       (movsi_internal1, movsi_internal2): Change x/I alternative to x/J.
+
+Tue Jun 24 08:49:56 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (ASM_OUTPUT_SECTION_NAME): Fix typo.
+
+Mon Jun 23 22:48:00 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (find_splittable_givs): Set splittable_regs_updates to
+       biv_count for reduced givs.
+
+Mon Jun 23 10:51:53 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10200.c, mn10200.h, mn10200.md: New files for mn10200 port.
+       * lib1funcs.asm, divmod.c, udivmod.c, udivmodsi4.c: Likewise.
+       * t-mn10200, xm-mn10200.h, va-mn10200.h: Likewise.
+       * Makefile.in (USER_H): Add va-mn10200.h.
+       * varargs.h, stdarg.h: Include va-mn10200.h.
+       * configure.in (mn10200-*-*): New target.
+       
+Sun Jun 22 06:47:19 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * combine.c (force_to_mode): Don't do anything for ASM_OPERANDS insn.
+
+Sun Jun 22 06:29:28 1997  J. Kean Johnston  <jkj@sco.com>
+
+       * ginclude/stdarg.h: Protect va_list definition from SCO headers.
+       * ginclude/varargs.h: Likewise.
+
+Sat Jun 21 20:56:23 1997  Scott Christley <scottc@net-community.com>
+
+       * Make ObjC a front-end language.
+       * Makefile.in (LANGUAGES, COMPILERS, .PHONY, stmp-int-hdrs): Remove
+       specific references to ObjC compiler and source files.
+       ({mostly,dist,maintainer,}clean, install-normal): Likewise
+       (OBJC_OBJS, OBJC, OBJECTIVE-C, cc1obj, objc-runtime): Rules deleted.
+       (libobjc.a, sublibobjc.a, objc-parse.{o, c, y}): Rules deleted.
+       (objc-headers, install-libobjc): Rules deleted.
+       * objc/Make-lang.in: New file; from rules deleted above.
+       * objc/config-lang.in: New file.
+       * objc/Makefile.in: Changes to support ObjC as a front-end language;
+       renamed from Makefile.in.
+       * objc-act.{c,h}, objc-parse.{c,y}, objc-tree.def: Moved to objc dir.
+
+Sat Jun 21 07:54:36 1997  Robert Lipe <robertl@dgii.com>
+
+       * fixinc.sco (math.h): Correct the collision of "exception".
+
+Sat Jun 21 06:51:40 1997  Peter Gerwinski  <peter@agnes.dida.physik.uni-essen.de>
+
+       * rs6000.c (output_epilog): Name is "GNU Pascal", not all caps.
+
+Sat Jun 21 06:29:19 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * gcc.c (main): Check for and read ${libdir}/gcc-lib/specs to
+       override the default specs.
+
+Fri Jun 20 17:20:15 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.c (output_block_move): When loading addresses into registers,
+       add checks for ABI_N32 and ABI_64.
+       (mips_expand_prologue): Add check for SImode in code splitting
+       tsize_rtx when it is large_int.
+
+Fri Jun 20 09:07:31 1997  Russell King  <rmk92@ecs.soton.ac.uk>
+
+       * configure.in (arm-*-linuxaout): New target.
+       * arm/lib1funcs-linux.asm, arm/linux-gas.h: New files.
+       * arm/linux.h, arm/t-linux, arm/xm-linux.h: New file.
+       * xm-linux.h: Undef some macros before defining them.
+
+Thu Jun 19 21:18:20 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (output_line_info): Always use DW_LNE_set_address instead
+       of DW_LNS_fixed_advance_pc for line number addresses.
+       (size_of_line_info): Adjust size calculation as per above change.
+       (text_end_label): Make it static.
+
+Thu Jun 19 14:55:49 1997  Brendan Kehoe  <brendan@cygnus.com>
+
+       * toplev.c (xmalloc): Only give the fatal msg if SIZE is non-zero.
+
+Sun Apr 27 23:19:13 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgcc2.c (__eh_type):  Remove `extern' to make this a definition.
+
+Wed Jun 18 18:10:16 1997  Per Bothner  <bothner@cygnus.com>
+
+       * dbxout.c (dbxout_type_fields):  Skip field if DECL_IGNORED_P.
+
+Wed Jun 18 18:04:33 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (end_eh_unwinder): If we have a return instruction, we
+       have to make sure we use it and don't fall off the end of the
+       function in the unwinder.
+
+Wed Jun 18 14:27:58 1997  Mike Stump  <mrs@cygnus.com>
+       * flow.c (find_basic_blocks): Fix end case bug.
+Tue Jun 17 18:35:57 1997  Mike Stump  <mrs@cygnus.com>
+
+       * libgcc2.c (__eh_pcnthrow): Add support -fno-sjlj-exceptions
+       -fPIC exception handling on the SPARC.
+       * sparc.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+       * libgcc2.c (__eh_ffetmnpc): Remove.
+
+Mon Jun 16 20:28:51 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * collect2.c (extract_string): Null-terminate.
+
+Mon Jun 16 14:38:44 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * combine.c (set_nonzero_bits_and_sign_copies): Use REG_SET macros
+       instead of doing bit operations directly.
+       (try_combine,reg_dead_at_p): Ditto.
+       * caller-save.c (save_call_clobbered_regs): Ditto.
+       * reload1.c (reload): Ditto.
+       * local-alloc.c (update_equiv_regs,block_alloc): Ditto.
+       * sched.c (schedule_block): Dito.
+
+Sun Jun 15 20:46:12 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (dwarf2out_frame_debug): Handle IOR.
+       (struct limbo_die_struct): Define.
+       (TYPE_DECL_IS_STUB): Call decl_ultimate_origin if DECL_ABTRACT_ORIGIN
+       is set.
+       (limbo_die_count): Delete.
+       (libmo_die_list): Define.
+       (new_die): Add die to limbo_die_list instead of incrementing
+       limbo_die_count.
+       (add_AT_location_description): Renamed from add_location_attribute.
+       New parameter attr_kind.
+       (add_location_or_const_value_attribute, gen_subprogram_die,
+       add_bound_info): Change call to add_AT_location_description.
+       (add_bound_info): Add call to contains_placeholder_p.  Ignore
+       MAX_EXPR and VAR_DECL.
+       (add_subscript_info): Ignore the index type if it is an unnamed
+       integral type.
+       (scope_die_for): Move check for function-local tags after code setting
+       containing_scope, and add check for non-NULL containing_scope
+       (add_type_attribute): If unnamed type, use TREE_TYPE instead.
+       (gen_enumeration_type_die, gen_struct_or_union_type_die): Call
+       add_child_die if die_parent is NULL.
+       (gen_subprogram_die): Ifdef out DW_AT_static_link code.
+       (decls_for_scope): Delete decrement of limbo_die_count.
+       (dwarf2out_finish): Add code to traverse the limbo_die_list, and
+       call add_child_die if die_parent is NULL.  Delete limbo_die_count code.
+       * mips.c (mips_expand_prologue): If tsize_rtx is large_int, emit two
+       insns instead of one splitable insn, setting RTX_FRAME_RELATED_P.
+
+Fri Jun 13 19:33:35 1997  Brendan Kehoe  <brendan@cygnus.com>
+
+       * fixincludes: Also fix AIX NULL macro in sys/{dir,param,types}.h.
+
+Thu Jun 12 22:53:12 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.md (mov[qhs]i): Remove pair of constraints which allow
+       offsetable memory addresses to be moved to the same for TARGET_5200.
+
+Thu Jun 12 15:33:01 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (SELECT_RTX_SECTION): Place symbolic operands into the
+       data section.
+
+       * pa.c (emit_move_sequence): Rewrite code to handle arithmetic
+       involving plabels.
+
+Wed Jun 11 08:57:14 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * tree.c (unsave_expr_now): Avoid recursing into the parts of
+       the tree that are RTL.
+
+Thu Jun 12 09:43:55 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * reorg.c (emit_delay_sequence): Call set_new_first_and_last_insn
+       after the new sequence insn has been spliced into the insn chain.
+
+Wed Jun 11 23:10:49 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (call, call_value): Use "call" instead of "calls"
+       for calls to named functions.
+
+Wed Jun 11 00:22:34 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * configure, configure.in: Restore changes from Feb 15 to Apr 13
+       lost during conversion to autoconf.
+
+Tue Jun 10 18:23:35 1997  Mike Stump  <mrs@cygnus.com>
+
+       * stmt.c (expand_decl_cleanup): Avoid core dumping when exceptions
+       aren't on.
+       
+Tue Jun 10 18:22:30 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * collect2.c (extract_string): New fn.
+       (main): Use it.
+
+Tue Jun 10 17:40:15 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * expr.c (emit_group_load): Add case using gen_lowpart. 
+
+Tue Jun 10 17:14:58 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/rs6000.c (rs6000_override_options): If -mcpu=403, set
+       -mstrict-align as well.
+
+       * rs6000/t-ppc{,gas} (MULTILIB_EXTRA_OPTS): Build libraries with
+       -mstrict-align.
+
+       * configure.in ({powerpc,rs6000}*-*-*): Add embedded targets to
+       --with-cpu=n support.
+
+Tue Jun 10 07:06:12 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * flow.c (mark_used_regs): Fix typo in Jun 4 change.
+
+Mon Jun  9 20:26:26 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (MAYBE_USE_COLLECT2): Renamed from MAYBE_USE_COLLECT.
+
+Mon Jun  9 19:42:21 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * fold-const.c (fold): Don't do COND_EXPR -> MIN_EXPR folding if it
+       loses information that might be needed by a later use as an lvalue.
+
+Mon Jun  9 19:10:50 1997  Alexandre Oliva <oliva@dcc.unicamp.br>
+
+       * configure.in: Don't override a user's setting for prefix
+       on platforms that use the native prefix.
+
+Mon Jun  9 19:00:49 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>
+
+       * integrate.c (expand_inline_function): Use the mode of FNDECL's
+       result rtl, not the result type itself, in setting ARRIVING_MODE.
+
+       * reload1.c (reload): Use xmalloc instead of alloca for the label
+       offsets in OFFSETS_AT and OFFSETS_KNOWN_AT.
+
+Mon Jun  9 15:16:52 1997  Mike Stump  <mrs@cygnus.com>
+
+       * flow.c (find_basic_blocks): Eliminate more dead code, enables
+       dead throws to be eliminated.
+
+Mon Jun  9 17:15:50 1997  Stephen L Moshier  <moshier@world.std.com>
+
+       * alpha.c (check_float_value):  Underflow and overflow constants
+       are different for FLOAT_VAX and default targets.
+
+Mon Jun  9 16:48:21 1997  Scott Christley <scottc@net-community.com>
+
+       * Makefile.in (Makefile): Process language fragments.
+       * configure.frag: New file.
+       * configure.in: Move language fragment processing to configure.lang.e
+
+       * Makefile.in (GCC_PASSES): Prevent all compilers from being
+       built when only the C compiler is needed.
+
+       * configure.in (cross_overrides, build_overrides): Use absolute
+       path to GCC top-level source directory.
+
+       * configure.in: Save target alias for language directories.
+
+       * configure.in (with-gxx-include-dir): New parameter for
+       setting the g++ header file directory.
+       * Makefile.in (gxx_include_dir): Use autoconf variable.
+
+       * configure.in: Add parameter for setting local prefix.
+
+       * configure.lang: New file.
+       * configure.in: Move language subdirectory Makefile processing
+       into configure.lang.
+
+Mon Jun  9 16:44:47 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * sched.c (attach_deaths): Fix typo in Jun 4 change.
+
+Mon Jun  9 15:13:00 1997  Marc Lehmann  (pcg@goof.com)
+
+       * varasm.c (assemble_end_function): Switch back to function
+       section after outputting constant pool.
+
+Mon Jun  9 14:47:22 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * tree.c (change_main_variant): Remove unused function.
+       (build_array_type): Remove obsolete references to
+       change_main_variant.
+       * c-decl.c (complete_array_type): Likewise.
+
+       * c-common.c (c_build_type_variant): Don't futz with main type
+       variant of array since C Standard requires main type variant of
+       array-of-const also be array-of-const.
+
+       * Makefile.in: Comment out lines containing just formfeeds.
+
+       * Makefile.in (distclean): Remove config.bak.
+       (maintainer-clean): Output warning.
+       Do not remove `configure'.
+
+Mon Jun  9 14:44:17 1997  J.T. Conklin  <jtc@netbsd.org>
+
+       * configure.in (*-*-netbsd): Restore changes of Apr 13th lost in
+       autoconf conversion: tmake_file now t-netbsd; delete xmake_file.
+
+Mon Jun  9 14:39:29 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (expand_builtin, case BUILT_IN_FRAME_ADDRESS):
+       Use correct function name in error message.
+
+       * Makefile.in (diff): Exclude bi-parser.h.
+
+       * i386.h (CC1_CPU_SPEC): Renamed, was CC1_SPEC.
+       (CC1_SPEC): New macro.
+       (EXTRA_SPECS): Add "cc1_cpu".
+       * i386/linux.h (CC1_SPEC): New macro.
+
+Mon Jun  9 13:23:06 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k/next.h (TARGET_DEFAULT): Use MASK_68040,
+       not MASK_68040_ALSO.
+       * m68k/mot3300.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
+
+       * m68k.h (MACHINE_STATE_{SAVE,RESTORE}): Test #ifdef __mcf52000__,
+       not if (TARGET_52000); fixed for mc68000 case.
+
+       * m68k/mot3300.h (CPP_SPEC): Define __mc68020__ if no -m[c]68000
+       command-line option given.
+
+Mon Jun  9 09:19:17 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * Makefile.in (target_alias): Substitute with target_alias.
+
+       * final.c (final_scan_insn): Use single_set to check cc_status.flags.
+
+Mon Jun  9 09:09:07 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-common.c (check_format_info): Correct handling of the 'a' flag
+       which adds another pointer level.
+
+Sun Jun  8 00:34:25 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (conditional branch insns): Get length right for branches
+       to targets which can not be reached with a "bl" instruction.
+       * pa.c (output_cbranch): Handle branches to targets which can not
+       be reached with a "bl" instruction.
+
+        * pa.md (alternate dbra pattern): Remove incorrect pattern.
+
+Sat Jun  7 23:30:25 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (struct defer_plab): Renamed to struct deferred_plabel.
+       Remove "symbol" field and replace with "name" field.
+       (output_function_epilogue): Don't output deferred plabels here.
+       (output_deferred_labels): New function.  Output them here instead.
+       (output_call): Rewrite long call support.
+       * pa.h (ASM_FILE_END): Define.
+       (LEGITIMATE_CONSTANT_P): Never accept a function_label_operand.
+       * pa.md (HIGH and LO_SUM of function address): Remove patterns.
+
+Fri Jun  6 16:09:04 1997  Mike Stump  <mrs@cygnus.com>
+
+       * libgcc2.c (__eh_ffetmnpc): Add support for machines that cannot
+       access globals after throw's epilogue when -fno-sjlj-exceptions is
+       used.
+       * rs6000.c (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+       * mips.h (DONT_ACCESS_GBLS_AFTER_EPILOGUE): Likewise.
+       (INITIAL_ELIMINATION_OFFSET): Fix RETURN_ADDRESS_POINTER_REGNUM
+       for 64 bit words, with 32 bit pointers and variable endianness.
+
+Fri Jun  6 17:27:58 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * regclass.c (allocate_reg_info): Fix off by one error.
+
+Fri Jun  6 17:17:41 1997  Doug Evans  <dje@cygnus.com>
+
+       * basic-block.h (EXECUTE_IF_SET_IN_REG_SET): Fix setting of scan_rs_.
+       (EXECUTE_IF_SET_AND_RESET_IN_REG_SET): Likewise.
+       (EXECUTE_IF_AND_IN_REG_SET): Likewise.
+       (EXECUTE_IF_AND_COMPL_IN_REG_SET): Likewise.
+
+Fri Jun  6 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (notice_cc_update): Set CC_FCOMI is this is a float compare.
+
+Fri Jun  6 15:12:38 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * basic-block.h (REG_SET_TO_HARD_REG_SET): Fix typo.
+
+       * sched.c (update_flow_info): When add extra REG_DEAD note for original
+       dest, handle case where last insn both uses and sets dest.
+
+Thu Jun  5 22:19:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * fixinc.irix: Add declaration of __vfork to unistd.h.
+
+       * i960/vx960-coff.h (CPP_SPEC): Always define CPU, even if they
+       use -ansi; the VxWorks headers assume it's always present.
+       * sparc/vxsparc.h (CPP_SPEC): Define, adding the CPU definition to
+       what came from sparc.h.
+       (CPP_PREDEFINES): Don't define it here.
+
+Thu Jun  5 13:40:33 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * basic-block.c (OBSTACK_ALLOC_REG_SET): Rename from
+       OBALLOC_REG_SET.  Add obstack pointer parameter.
+
+       * flow.c (function_obstack): Add declaration.
+       (life_analysis): Don't allocate the space to hold to vector of
+       regsets here.
+       (init_regset_vector): Add pointer parameter and delete space
+       paramter.  Use OBSTACK_ALLOC_REG_SET to allocate.  Change callers.
+       (propagate_block): Use ALLOCA_REG_SET instead of bare alloca.
+
+       * sched.c (schedule_block): Fix typo in yesterday's changes.
+       * reorg.c (mark_target_live_regs): Ditto.
+
+Thu Jun  5 09:44:49 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * sh.c (trap_exit, sp_switch): New variables.
+       (print_operand, case '@'): If trap_exit is nonzero, then use
+       a trapa instead of an rte/rts to exit the current function.
+       (sh_expand_prologue): Switch stacks at function entry as needed.
+       (sh_expand_epilogue): Similarly at function exit.
+       (function_epilogue): Clear trap_exit and sp_switch too.
+       (sh_valid_machine_decl_attribute): New function.
+       * sh.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
+       (sp_switch): Declare.
+       * sh.md (sp_switch_1, sp_switch_2): New named patterns.
+
+Wed Jun  4 18:11:14 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * basic-block.h (REGSET_ELT_BITS): Make this explicitly unsigned, so
+       that division and modulus of REGSET_ELT_BITS uses a pure shift.
+       (*_REG_SET): New macros to abstract the register set interface.
+
+       * caller-save.c (save_call_clobbered_regs): Use new *_REG_SET
+       macros.
+       * flow.c (life_analysis,propagate_block,insn_dead_p): Ditto.
+       (regno_uninitialized,regno_clobbered_at_setjmp,mark_set_1): Ditto.
+       (mark_used_regs,dump_flow_info,global_conflicts): Ditto.
+       global.c (mark_elimination): Ditto.
+       * reorg.c (mark_target_live_regs): Ditto.
+       * sched.c (sched_{analyze_{1,insn},note_set}): Ditto.
+       (birthing_insn_p,attach_deaths,unlink_notes,schedule_block): Ditto.
+
+       * sched.c (sometimes structure): Delete offset, bit fields, replace
+       with regno.
+       (new_sometimes_live): Take regno argument, not offset and bit.
+       Change all callers.
+
+Tue Jun  3 19:18:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * fixincludes: Fix AIX NULL macro use of void*.
+
+Tue Jun  3 15:21:04 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * sparc.h (ASM_OUTPUT_MI_THUNK): Handle -fpic.
+
+Mon Jun  2 16:53:53 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * loop.c (n_times_{set,used}): Make type int, not short.
+       (scan_loop): n_times{set,used} are now int pointers.
+
+       * sched.c (sched_reg_n_deaths): Remove unused variable.
+       (struct sometimes): Make fields int sized, not short.
+       (schedule_insns): Don't set sched_reg_n_deaths, nobody uses it.
+
+       * regclass.c (allocate_reg_info): Allocate the space for
+       reg_renumber, but don't set reg_renumber unless new argument
+       RENUMBER_P is set.  If this is the first call for the function and
+       we need to grow space, use free/xmalloc instead of realloc since we
+       will be initializing the whole array.  If number of registers is <
+       0, just free up the space.
+       (reg_scan): Update allocate_reg_info call.
+
+       * regs.h (allocate_reg_info): Change prototype.
+
+       * flow.c (allocate_for_life_analysis): Update allocate_reg_info
+       call.
+
+       * local-alloc.c (local_alloc): Call allocate_reg_info to allocate
+       and initialize the reg_renumber array.
+       * stupid.c (stupid_life_analysis): Ditto.
+
+Mon Jun  2 14:50:06 1997  Dave Miller  <davem@jenolan.rutgers.edu>
+
+       * sparc/sparc.md (v9 eq/ne cond move patterns): Add early clobber
+       constraint to destination.
+
+Fri May 30 11:00:44 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * regs.h (reg_info): New structure to group the arrays indexed by
+       register number created by reg_scan and flow_analysis that are
+       globally visiable.
+       (reg_n_info): Pointer to the register information array.
+       (reg_n_{refs,sets,deaths,calls_crossed}): Delete variables.
+       (reg_changes_size): Ditto.
+       (REG_N_{REFS,SETS,DEATHS,CALLS_CROSSED}): New macros to reference
+       reg_n_info.
+       (REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Ditto.
+       (allocate_reg_info): Add declaration.
+
+       * basic-block.h (reg_basic_block): Delete.
+       (REG_BASIC_BLOCK): Use reg_n_info structure.
+
+       * caller-save.c: Change all references to the above arrays to use
+       the corresponding macro to access the reg_n_info array.
+       * combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Ditto.
+       * loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Ditto.
+
+       * regclass.c (allocate_reg_info): New function to allocate the
+       reg_info array and initialize the appropriate fields.
+       (reg_scan): Call it.
+
+       * flow.c (allocate_for_life_analysis): Call allocate_reg_info to do
+       the actual allocation.
+
+Thu May 29 15:42:59 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md (movsfcc_1, movdfcc_1, movxfcc_1): Use singlemove_string
+       for float conditional move when destination and operands all differ.
+       
+       * i386.h (ASM_OUTPUT_REG_{PUSH,POP}): add %% before register name.
+
+       * go32.h (ASM_OUTPUT_ALIGN): Use .p2align, not byte alignments. 
+
+Wed May 28 20:44:00 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (push_eh_entry): Eliminate start of exception region
+       label, as it isn't used.  Rename end_label to outer_context.
+       (expand_eh_region_start_for_decl): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_start_all_catch): Likewise.
+       * except.h (eh_entry): Likewise.
+       * except.c (expand_eh_region_end): Likewise.  Jump around the nop
+       that we insert, so that we can optimize it away, if it is unused,
+       also so that flow analysis can tell if we fall through to the end
+       of a function or not so that it can know if a function that returns
+       a value, in fact does or not.
+
+Wed May 28 10:50:09 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (jump): Handle out of range unconditional jump
+       when not optimizing.
+
+Thu May 22 00:57:07 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * reload1.c (reload_cse_record_set): Ignore values for SREG if
+       their mode is narrower than DEST_MODE.
+
+       * pa.h (DFMODE_RETURN_STRING): Define.
+       (SFMODE_RETURN_STRING): Likewise.
+       (ASM_DECLARE_FUNCTION_NAME): Use them.
+
+Wed May 21 23:32:02 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (reload_insi): Handle SUBREG properly.
+
+Tue May 20 22:32:13 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (dwarf2out_def_cfa): Set cfa_reg at the top.
+
+Tue May 20 16:57:50 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cplus-dem.c (do_type): Handle `J'.
+       (demangle_fund_type): Print "complex" for it.
+
+Mon May 19 21:01:53 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.c (output_move_qimode): Add coldfire support.
+       * m68k.h (PUSH_ROUNDING): Add coldfire support.
+       * m68k.md (scc0_di, scc_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu,
+       sle, sleu): Add coldfire support.
+
+Mon May 19 17:53:34 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * rs6000/rs6000.c: (rs6000_pic_func_labelno): New variable to hold
+       the pic label number for the function's LCL label.
+       (rs6000_output_load_toc_table): Use it.
+       (output_prolog): Store current value.
+
+Sun May 18 16:32:08 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * config/dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use the macros
+       ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output the line
+       number label.
+
+Sun May 18 13:55:12 1997  John Vickers (john@rhizik.demon.co.uk)
+
+        * m68k.h (TARGET_SWITCHES): Add new target name, cpu32.
+
+Sun May 18 13:50:10 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * cccp.c (VMS_write, VMS_read): Delete.
+       (safe_write): If MAX_WRITE_LEN is defined, limit
+       incremental write attempts to that amount.
+       (safe_read): Analogous situation for MAX_READ_LEN.
+       * cpplib.c (safe_read): Likewise.
+       * vax/xm-vms.h (MAX_WRITE_LEN, MAX_READ_LEN): Define.
+
+       * vax/xm-vms.h (get_dynamic_handler_chain_libfunc): New macro.
+       (protect_cleanup_actions_with_terminate): New macro.
+
+Sun May 18 08:50:25 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k/linux.h (ASM_COMMENT_START): Define.
+       * m68k/linux-aout.h (ASM_COMMENT_START): Define.
+
+       * reload1.c (reload_cse_regno_equal_p): Check for value using more
+       than one register on a big endian machine.
+
+Sun May 18 08:39:59 1997  Vince Del Vecchio  <vdelvecc@spd.analog.com>
+
+       * loop.c (maybe_eliminate_biv_1): In (set (cc0) <biv>) case,
+       swap compare operands when mult_val < 0 in one additional place.
+
+Sun May 18 08:33:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * dwarf2out.c (ASM_COMMENT_START): Add default definition.
+
+       * Makefile.in (maintainer-claean): Delete configure.
+
+Sun May 18 08:31:59 1997  Scott Christley <scottc@net-community.com>
+
+       * configure.in: New file.
+       * Makefile.in: Change to utilize autoconf variables.
+       * configure: Now an output file.
+
+Sun May 18 07:48:31 1997  J.T. Conklin  <jtc@netbsd.org>
+
+       * m68k.md (mov[qhs]i,movstrict[qs]i, mulsi3): Use 'Q' constraint
+       for TARGET_5200.
+       * m68k.h (EXTRA_CONSTRAINT): New macro. 
+
+       * m68k.h (TARGET_SWITCHES): Add 68020-60.
+       Mask out bits which indicate a particular processor when a different
+       processor is selected.
+       (MASK_68040_ALSO): Remove.
+       (MASK_68040): Change to be a single bit.
+
+       * m68k.h (TARGET_ALIGN_INT, MASK_ALIGN_INT): New macros.
+       (BIGGEST_ALIGNMENT): Determine according to TARGET_ALIGN_INT.
+       (TARGET_SWITCHES): Add align-int and no-align-int.
+
+       * m68k.md (mov[qhs]i}): Add pair of constraints which allow
+       offsetable memory addresses to be moved to the same for TARGET_5200.
+
+       * m68k.c (output_move_strict{hi,qi}): New functions.
+       * m68k.h (output_move_strict{hi,qi}): Declare.
+       * m68k.md (movstrict*): Changed into define_expands.
+       Split insns into m68k and coldfire specific versions with appropriate
+       constraints.
+
+Sun May 18 07:26:40 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * libgcc2.c (atexit): Cast malloc and realloc calls.
+
+Sat May 17 16:26:51 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * final.c (profile_function): Call function_section, not
+       text_section.
+
+Sat May 17 16:01:00 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * cse.c (notreg_cost): New function, extracted from COST macro.
+       (COST): Use notreg_cost.
+
+Sat May 17 15:13:23 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * cse.c (cse_insn): Don't record a SRC that's a MEM and the same
+       as a REG_EQUIV note if DEST is set more than once.
+
+Fri May 16 14:50:57 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (output_move_double): Handle loading a general register
+       from a scaled indexed memory address.
+       * pa.md (movdf, movdi): Allow scaled loads into general registers.
+
+Fri May 16 13:31:08 1997  Mike Stump  <mrs@cygnus.com>
+
+       * rs6000.c (rs6000_stack_info): Only do eabi setup for "main",
+       when main is the global main, not some nested routine that
+       happens to be called main.
+
+Thu May 15 17:19:50 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_all_catch): If the machine needs to
+       perform any actions at the start of an expcetion handler that
+       hasn't already been done, use gen_exception_receiver to emit it.
+       (expand_leftover_cleanups): Likewise.
+       * alpha/alpha.md (exception_receiver): Use it.
+       * pa/pa.h (exception_receiver): Use it.
+
+Thu May 15 08:36:59 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * dbxout.c (dbxout_function_end): Don't subtract one from
+       the end of function scoping stab.
+
+Wed May 14 23:27:09 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (adddi3, subdi3): Remove expanders and patterns.
+
+Wed May 14 18:51:35 1997  Mike Stump  <mrs@cygnus.com>
+
+       * function.c (expand_function_end): Make sure we finish off any
+       leftover exception handlers.
+
+Tue May 13 14:07:01 1997  Mike Stump  <mrs@cygnus.com>
+
+       * expr.c (expand_builtin_setjmp): Remove setting of
+       current_function_has_nonlocal_goto, as this isn't a goto.
+
+Tue May 13 14:47:40 1997  Richard Earnshaw (rearnsha@cambridge.arm.com)
+
+       * arm.h (CPP_SPEC): Fix typo invoking cpp_endian.
+       * arm/t-semi (LIB2FUNCS_EXTRA): Build fp-bit.c when compiling
+       with -msoft-float.
+       * arm.c: Add prototypes for all static functions.
+       (output_multi_immediate, int_log2): Make static.
+
+       * arm.h (*_SPEC): Remove all references to mle/mbe.
+       * arm/coff.h (MULTILIB_DEFAULTS): Likewise.
+       * arm/t-bare (MULTILIB_OPTIONS): Change options mbe/mle to mbig-endian
+       and mlittle-endian.
+       (MULTILIB_MATCHES): Nothing matches that matters.
+
+Mon May 12 20:42:20 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_all_catch): If the machine needs a
+       nonlocal_goto_receiver, add one at the start of the exception
+       handler.
+       (expand_leftover_cleanups): Likewise.
+
+Mon May 12 17:36:28 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mips.c (move_operand): Accept any general operand after reload
+       has started.
+
+Fri May  9 14:29:33 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (udivmodhi4, divmodhi4): Remove expander, give
+       corresponding pattern [u]divmodhir4 name.  Clear MDR register
+       in the udivmodhi4 pattern itself.
+       (clear_mdr): Delete pattern.
+
+Thu May  8 18:20:30 1997 Richard Earnshaw (rearnshaw@cambridge.arm.com)
+
+       * arm/aout.h (ASM_OUTPUT_LONG_DOUBLE): Delete call to 
+       arm_increase_location.
+       (ASM_OUTPUT_{DOUBLE,FLOAT,INT,SHORT,CHAR,BYTE,ASCII,SKIP}): Likewise.
+       (ASM_OUTPUT_ALIGN): Delete all code refering to arm_text_location.
+
+       * arm.c (arm_increase_location, get_prologue_size): Delete.
+       (arm_naked_function_p): Add declaration.
+       (arm_pic_register): Define.
+       (all_procs): Delete entries for arm{60,620,70,7d,7di,700i,710c}; add
+       entries for arm{7m,7500fe,8}, strongarm and strongarm110.
+       (arm_override_options): Rework so that configure can properly set
+       the default processor type. Add a warning that PIC code is not yet 
+       supported.
+       (legitimate_pic_operand_p, legitimize_pic_address): New functions.
+       (is_pic, arm_finalize_pic): New functions.
+       (arm_adjust_cost): New function.
+       (const_pool_offset, arm_backwards_branch, short_branch): Delete.
+       (arm_insn_not_targeted): Delete.
+       (add_constant): If generating AOF syntax, then handle pic specially.
+       (output_ascii_pseudo_op): Delete calls to arm_increase_location.
+       (function_really_clobbers_lr): Calls followed by a barrier don't
+       clobber the link register.
+       (output_func_prologue): Handle AOF syntax pic code.
+       (output_func_epilogue): Handle cases where lr_save_eliminated is set.
+       Delete call to arm_increase_location.
+       (arm_asm_output_label): Simplify, since we no-longer need to cache the
+       label's address.
+       (aof_pic_entry): New function to keep track of pic symbols.
+       (aof_dump_pic_table): New function.
+
+       * arm.h (TARGET_CPU_arm*, TARGET_CPU_strongarm*, TARGET_CPU_generic):
+       define.
+       (CPP_ARCH_DEFAULT_SPEC): Set up based on setting of TARGET_CPU_DEFAULT.
+       (CPP_SPEC): Split up into sub-rule calls.
+       (CPP_CPU_SPEC): Add default definition.
+       (CPP_APCS_PC_SPEC, CPP_APCS_PC_DEFAULT_SPEC): Add definitions.
+       (CPP_FLOAT_SPEC, CPP_FLOAT_DEFAULT_SPEC): Add definitions.
+       (CPP_ENDIAN_SPEC, CPP_ENDIAN_DEFAULT_SPEC): Add definitions.
+       (CC1_SPEC): Map legacy -m[236] onto -mcpu=.. and -mapcs-{26,32} as
+       appropriate. Similarly for -mbe and -mle to -m{big,little}-endian.
+       (EXTRA_SPECS): Define.
+       (enum processor_type): New types for arm8 and strongarm.
+       (CONDITIONAL_REGISTER_USAGE): Handle flag_pic.
+       (LEGITIMIZE_ADDRESS): Likewise.
+       (ADJUST_COST): Define.
+       (PIC_OFFSET_TABLE_REGNUM): Define.
+       (FINALIZE_PIC): Define.
+       (LEGITIMATE_PIC_OPERAND_P): Define.
+       (OUTPUT_INT_ADDR_CONST): Define.
+       (ASM_OUTPUT_MI_THUNK): Delete calls to arm_increase_location.
+       (MASK_RETURN_ADDR): Use TARGET_APCS_32 not TARGET_6.
+
+       * arm.md (attr cpu): Add new cpu types for arm8 and strongarm.
+       (attr ldsched): New attribute, set if processor has a load_delay slot.
+       (function_unit core): Rework to handle load delay slots.
+       (function_unit loader): New function unit.
+       (movsi): Handle pic.
+       (pic_load_addr): New expand.
+       (*pic_load_addr_based_insn, pic_add_dot_plus_eight): New patterns.
+       (peepholes to cause flow to return to a label after a function call):
+       Delete, these have been disabled for a while now.
+
+       * arm/riscix.h (CPP_SPEC): Rewrite using new sub-components.
+       (SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
+       * arm/riscix1-1.h (CPP_SPEC): Rewrite using new sub-components.
+       (SUBTARGET_CPU_DEFAULT): Set to TARGET_CPU_arm2.
+       * arm/semi.h: (CPP_SPEC): Delete.
+       (PROCESSOR_DEFAULT): Delete.
+       (CPP_APCS_PC_DEFAULT_SPEC): Define.
+       * arm/semiaof.h (CPP_SPEC): Delete.
+       (CPP_APCS_PC_DEFAULT_SPEC): Define.
+       * arm/t-semi (LIBGCC1_TEST): Don't build it.
+       (MULTILIB_{OPTIONS,DIRNAMES,EXCEPTIONS}): Build a suitable set of
+       cross libraries.
+       (LIBGCC): Set to stmp-multilib.
+       (INSTALL_LIBGCC): Set to install-multilib.
+
+Thu May  8 15:20:46 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (output_float_compare): For pentiumpro use fcomip
+       followed by a float stack pop for "compare;pop;pop" cases.
+
+Thu May  8 13:20:20 1997  Chris Torek  <torek@elf.bsdi.com>
+
+       * fold-const.c (fold, truth_andor): Disable optimization for 
+       side effects on RHS.
+
+Wed May  7 15:43:57 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (start_dynamic_handler): Fix so that we can use
+       __builtin_setjmp, and default to using __builtin_setjmp instead of
+       setjmp.
+       * expr.c (expand_builtin_setjmp): New routine, split out from
+       existing inline code from expand_builtin.
+       (expand_builtin): Split out code into expand_builtin_setjmp.
+       * expr.h (expand_builtin_setjmp): Add declaration.
+       * libgcc2.c (__sjthrow): Default to using __builtin_setjmp instead
+       of setjmp.
+       (__sjpopnthrow): Likewise.
+       * optabs.c (init_optabs): Likewise.
+
+Wed May  7 18:01:24 1997  Samuel Figueroa  <Samuel_Figueroa@next.com>
+
+       * rs6000.md (insv): Only combine insert with shift if
+       remaining source bits >= destination field size.
+
+Tue May  6 15:48:52 1997  Jason Merrill  <jason@gerbil.cygnus.com>
+
+       * dwarf2out.c (dwarf2out_begin_prologue): Increment
+       current_funcdef_number here.
+       (dwarf2out_end_epilogue): Not here.
+
+Mon May  5 18:52:32 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
+       (shift_one, shift_two): Set CC_NO_CARRY as needed.  Remove
+       references to CC_OVERFLOW_0.
+       (emit_a_shift): Similarly.
+       * h8300.h (CC_OVERFLOW_0): Remove.
+       * h8300.md: Use set_zn and set_znv for cc0 tracking.
+       (bCC): Restore the comparison is CC_OVERFLOW_UNUSABLE is set and
+       the comparison needs the overflow bits.
+
+       * mn10300.c (notice_update_cc): Use CC_SET_ZN and CC_SET_ZNV.
+       * mn10300.h (CC_NO_CARRY): Define.
+       * mn10300.md: Use "set_zn" and "set_znv" to more accurately
+       describe cc0 status.
+
+Fri May  2 17:00:33 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c: Reorganize, moving .debug_frame support to the top
+       of the file, and compile it if INCOMING_RETURN_ADDR_RTX is defined
+       even if DWARF2_DEBUGGING_INFO isn't.
+       (EH_FRAME_SECTION): New macro.
+       (output_call_frame_info): Handle .eh_frame variant.
+       (dwarf2out_def_cfa): Update cfa_*{reg,offset}.
+       (dwarf2out_frame_debug): Move cfa_*{reg,offset} to file scope.
+       (dwarf2out_end_epilogue): Increment current_funcdef_number here.
+       (dwarf2out_decl): Not here.
+       (dwarf2out_frame_init, dwarf2out_frame_finish): New fns.
+       (dwarf2out_init, dwarf2out_finish): Call them.
+       (output_die): Add missing 'case 8:'
+       (dwarf2out_decl): Revert other context_die = NULL change.
+       (add_bound_info): Restore default case.
+
+Fri May  2 15:30:16 1997  Doug Evans  <dje@seba.cygnus.com>
+
+       * m32r/m32r.h (LIT_NAME_P): New macro.
+       (SMALL_NAME_P): Use it.
+       (ASM_OUTPUT_ALIGNED_COMMON): Don't output to scommon if -msdata=none.
+       * m32r/m32r.c (addr24_operand): Handle literals.
+       (m32r_output_function_prologue): Use IMMEDIATE_PREFIX.
+       (m32r_output_function_epilogue): Likewise.  Use shorter add insn if
+       able.
+
+Fri May  2 14:40:44 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.h (RS6000_ALIGN): Macro renamed from ALIGN.
+       * rs6000.c (rs6000_stack_info): Use it.
+
+Fri May  2 14:15:54 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (reload_cse_noop_set_p): When checking the values
+       equivalent to sreg, make sure the mode is right.
+
+Fri May  2 12:53:03 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * reload1.c (reload_cse_invalidate_regno): Properly set
+       the mode for invalidate_regno_rtx.
+
+Thu May  1 14:57:35 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (call_internal_symref): Fix typo.
+
+Thu May  1 14:44:17 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.c (mips_asm_file_start): Use new macro TARGET_FILE_SWITCHING.
+       (mips_asm_file_end): Likewise.
+       * mips.h (TARGET_FILE_SWITCHING): Define.
+       (NO_DBX_FUNCTION_END): Define.
+
+Thu May  1 09:08:40 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (output_addsi3): Replace "\\;" by "\n\t" in
+       assembler templates.
+
+Thu May  1 09:00:42 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * integrate.c (subst_constants, case SUBREG): Cancel changes once
+       done with result.
+
+Wed Apr 30 19:45:56 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.c (override_options): Set mips_split_addresses only if
+       TARGET_SPLIT_ADDRESSES is set.
+       * mips.h (MASK_SPLIT_ADDR, TARGET_SPLIT_ADDRESSES): New macros.
+       (TARGET_SWITCHES): Add -msplit-addresses, -mno-split-addresses.
+       * configure (mips*-*-ecoff*, mips*-*-elf*): Set MASK_SPLIT_ADDR
+       bit in target_cpu_default2.
+
+       * flags.h (current_function_is_thunk): Add extern to declaration.
+
+       * dbxout.c (dbxout_function): Test NO_DBX_FUNCTION_END at run time
+       instead of compile time.
+
+       * unroll.c (set_dominates_use): In second loop, add check for copy_end.
+
+       * mips.md (paradoxical_extendhidi2, paradoxical_extendqidi2): New
+       patterns.
+
+Wed Apr 30 02:23:24 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * output.h (named_section): Add reloc argument.
+       (DECL_READONLY_SECTION): New macro.
+       * varasm.c (named_section): Add reloc argument, pass it to
+       ASM_OUTPUT_SECTION_NAME.
+       (UNIQUE_SECTION, UNIQUE_SECTION_P): Provide defaults.
+       (function_section): Pass reloc argument to named_section.
+       (variable_section, exception_section): Likewise.
+       (output_constant_def_contents): Likewise.
+       (assemble_start_function): Use UNIQUE_SECTION_P.  UNIQUE_SECTION is
+       now a statement.
+       (assemble_variable): Likewise.
+       * mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Add reloc arg,
+       use DECL_READONLY_SECTION.
+       * psos.h, ptx4.h, a29k.h, alpha/elf.h, arm/coff.h, h8300.h: Likewise.
+       * i386/go32.h, i386/sco5.h, m68k/coff.h, mips/elf64.h: Likewise.
+       * mips/netbsd.h, pa.h, rs6000/sysv4.h, sh.h, sparc/sysv4.h: Likewise.
+       * config/svr4.h (SELECT_SECTION): Use DECL_READONLY_SECTION.
+       (ASM_OUTPUT_SECTION_NAME): Likewise, add reloc argument.
+       (MAKE_DECL_ONE_ONLY): Just set DECL_WEAK.
+       (UNIQUE_SECTION, UNIQUE_SECTION_P): Define.
+       * i386/cygwin32.h (UNIQUE_SECTION_P): Define.
+       (SUPPORTS_ONE_ONLY): Define.
+       (MAKE_DECL_ONE_ONLY): Lose.
+       (ASM_OUTPUT_SECTION_NAME): Add reloc arg, use DECL_READONLY_SECTION.
+       * i386/winnt.c (i386_pe_unique_section): Add reloc arg, 
+       use DECL_READONLY_SECTION.
+
+       * mips/iris6.h (CTORS_SECTION_ASM_OP): Change aligment based on ABI.
+       (DTORS_SECTION_ASM_OP): Likewise.
+
+Tue Apr 29 16:08:07 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa/lib1funcs.asm (divnorm, modnorm, exitdiv): Fix code to
+       negate SImode values.
+
+Tue Apr 29 12:54:14 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_eh_region_start_tree): Add DECL argument so we
+       can better track why the region was made for error reporting.
+       * except.h (expand_eh_region_start_tree): Likewise.
+       * tree.h (expand_dhc_cleanup): Likewise.
+       (expand_dcc_cleanup): Likewise.
+       * except.c (expand_eh_region_start_for_decl): New routine.
+       * except.h (expand_eh_region_start_for_decl): Likewise.
+       * stmt.c (expand_decl_cleanup): Add DECL to call of
+       expand_eh_region_start_tree.
+       (expand_dcc_cleanup): Likewise.
+       (expand_dhc_cleanup): Likewise.
+       
+       (expand_start_case): Switches introduce conditional contexts.
+       (expand_start_case_dummy): Likewise.
+       (expand_start_case_dummy): Likewise.
+       (expand_end_case): Likewise.
+
+Tue Apr 29 11:45:09 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (dwarf2out_decl): Undo earlier change.
+       (constant_size): Likewise.
+       (gen_subprogram_die): Handle NULL context_die.
+
+       * mips/iris6.h (ASM_OUTPUT_CONSTRUCTOR): Fix for -mabi=64.
+       (ASM_OUTPUT_DESTRUCTOR): Likewise.
+
+Mon Apr 28 09:10:19 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300.c (push_order, pop_order): Add missing initializer
+       entries.
+
+Fri Apr 25 19:39:43 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * h8300.c (output_adds_subs): check for adding 0.
+
+Fri Apr 25 14:52:31 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (i[3456]86-*-freebsdelf*, i[3456]86-*-freebsd*): Use
+       t-freebsd instead of x-freebsd.
+       * i386/t-freebsd: Renamed from x-freebsd.
+
+Fri Apr 25 12:16:20 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * go32.h (DBX_*): Use definitions from config/dbxcoff.h instead.
+
+Fri Apr 25 11:55:54 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386/cygwin32.h (MULTIPLE_SYMBOL_SPACES): Define.
+
+Thu Apr 24 18:32:56 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386/winnt.c (i386_pe_unique_section): New fn.
+       * i386/cygwin32.h (UNIQUE_SECTION): Define.
+       (MAKE_DECL_ONE_ONLY): Define.
+       (ASM_OUTPUT_SECTION_NAME): Support DECL_ONE_ONLY.
+
+       * c-decl.c (implicitly_declare): Don't set DECL_ARTIFICIAL.
+
+Thu Apr 24 17:11:23 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
+       TARGET_5200 support.
+
+Thu Apr 24 16:39:25 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * stmt.c (pushcase_range): Check for null range first.
+
+Wed Apr 23 23:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (reload_cse_record_set): Use push_operand to check for
+       changes to the stack pointer.
+
+Wed Apr 23 19:56:01 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * calls.c (expand_call): If we're in a thunk, pass through invisible
+       references instead of making a copy.
+       * flags.h: Add current_function_is_thunk.
+       * function.c: Likewise.
+       (init_function_start): Initialize it.
+       (push_function_context_to): Save it.
+       (pop_function_context_from): Restore it.
+       * function.h (struct function): Add is_thunk.
+
+Wed Apr 23 17:47:25 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (secondary_reload_class): Handle more cases where we
+       need secondary reloads.
+       (impossible_plus_operand): Accept anything that involves addition
+       of the stack pointer.
+       * mn10300.md (reload_insi): Always load the stack pointer into
+       the destination (which is always an address register).
+       * mn10300.h (STORE_FLAG_VALUE): Remove definition.
+       * xm-mn10300.h: Declare malloc, realloc, calloc and free.
+
+Wed Apr 23 14:28:30 1997  Mike Stump  <mrs@cygnus.com>
+
+       * expr.h (sjthrow_libfunc): Add support for setjmp/longjmp based
+       exception handling.
+       (sjpopnthrow_libfunc): Likewise.
+       (terminate_libfunc): Likewise.
+       (setjmp_libfunc): Likewise.
+       (longjmp_libfunc): Likewise.
+       (get_dynamic_handler_chain_libfunc): Likewise.
+       * expr.c (expand_expr, case TRY_CATCH_EXPR): Likewise.
+       (expand_expr, case POPDCC_EXPR): Likewise.
+       (expand_expr, case POPDHC_EXPR): Likewise.
+       * stmt.c (mark_block_as_eh_region): Likewise.
+       (mark_block_as_not_eh_region): Likewise.
+       (is_eh_region): Likewise.
+       (conditional_context): Likewise.
+       (expand_start_bindings): Likewise.
+       (expand_end_bindings): Likewise.
+       (expand_decl_cleanup): Likewise.
+       (expand_dcc_cleanup): Likewise.
+       (expand_dhc_cleanup): Likewise.
+       (expand_cleanups): Likewise.
+       * tree.h (mark_block_as_eh_region): Likewise.
+       (mark_block_as_not_eh_region): Likewise.
+       (is_eh_region): Likewise.
+       (conditional_context): Likewise.
+       (expand_dhc_cleanup): Likewise.
+       * except.c (exception_via_longjmp): Likewise.
+       (protect_cleanup_actions_with_terminate): Likewise.
+       (current_function_dhc): Likewise.
+       (current_function_dcc): Likewise.
+       (add_partial_entry): Likewise.
+       (get_dynamic_handler_chain): Likewise.
+       (get_dynamic_cleanup_chain): Likewise.
+       (start_dynamic_cleanup): Likewise.
+       (start_dynamic_handler): Likewise.
+       (expand_eh_region_start_tree): Likewise.
+       (expand_eh_region_start): Likewise.
+       (expand_eh_region_end): Likewise.
+       (emit_throw): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_start_all_catch): Likewise.
+       (expand_end_all_catch): Likewise.
+       (protect_with_terminate): Likewise.
+       (start_eh_unwinder): Likewise.
+       (end_eh_unwinder): Likewise.
+       (init_eh_for_function): Likewise.
+       (save_eh_status): Likewise.
+       (restore_eh_status): Likewise.
+       (exception_optimize): Likewise.
+       * optabs.c (sjthrow_libfunc): Likewise.
+       (sjpopnthrow_libfunc): Likewise.
+       (terminate_libfunc): Likewise.
+       (setjmp_libfunc): Likewise.
+       (longjmp_libfunc): Likewise.
+       (get_dynamic_handler_chain_libfunc): Likewise.
+       (init_optabs): Likewise.
+       * except.h: Likewise.
+       * libgcc2.c (__default_terminate): Likewise.
+       (__terminate): Likewise.
+       (__get_dynamic_handler_chain): Likewise.
+       (__sjthrow): Likewise.
+       (__sjpopnthrow): Likewise.
+       * toplev.c (f_options): Likewise.
+       * tree.def (TRY_CATCH_EXPR): Likewise.
+       (POPDHC_EXPR): Likewise.
+       (POPDCC_EXPR): Likewise.
+       * config/pa/pa.h: JMP_BUF_SIZE define.
+       * config/sparc/sparc.h: JMP_BUF_SIZE define.
+
+       * expr.h (cleanups_this_call): Transform uses of cleanups_this_call
+       into uses of the cleanups managed by the block code
+       (expand_start_bindings and friends).  Remove defer_cleanups_to and
+       expand_cleanups_to, and use start_cleanup_deferal and
+       end_cleanup_deferal instead.  Add exception_region,
+       target_temp_slot_level, conditional_code,
+       last_unconditional_cleanup and cleanup_ptr to struct nesting to
+       facilitate conditional cleanups.
+       * expr.c (cleanups_this_call): Likewise.
+       (init_expr): Likewise.
+       (save_expr_status): Likewise.
+       (restore_expr_status): Likewise.
+       (store_expr): Likewise.
+       (expand_expr): Likewise.
+       (defer_cleanups_to): Likewise.
+       (expand_cleanups_to): Likewise.
+       (do_jump, case TRUTH_ANDIF_EXPR): Likewise.
+       (do_jump, case TRUTH_ORIF_EXPR): Likewise.
+       (do_jump, case COND_EXPR): Likewise.
+       * stmt.c (struct nesting): Likewise.
+       (expand_return): Likewise.
+       (expand_start_bindings): Likewise.
+       (expand_end_bindings): Likewise.
+       (expand_cleanups): Likewise.
+       (start_cleanup_deferal): Likewise.      
+       (end_cleanup_deferal): Likewise.        
+       * tree.h (start_cleanup_deferal): Likewise.
+       (end_cleanup_deferal): Likewise.
+       * calls.c (expand_call): Likewise.
+       * function.h (struct function): Likewise.
+
+       * except.c (asynchronous_exceptions): Support
+       -fasynchronous_exceptions.
+       (can_throw): Likewise.
+       * toplev.c (f_options): Likewise.
+
+       * flags.h (flag_short_temps): Remove support for short temps.
+       * calls.c (expand_call): Likewise.
+       * toplev.c (flag_short_temps): Likewise.
+
+       * stmt.c (expand_start_target_temps): Add for convenience.
+       (expand_end_target_temps): Likewise.
+       * except.c (jumpif_rtx): Likewise.
+       * except.c (jumpifnot_rtx): Likewise.
+
+       * stmt.c: Remove all traces of empty_cleanup_list.
+
+Wed Apr 23 17:26:40 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (reload_cse_mem_conflict_p): Don't assume that a
+       SUBREG can not conflict with a MEM.
+
+Wed Apr 23 09:48:58 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * 1750a.md (cmphi): Fixed when next CC user is unsigned.
+       (mov[hq]i-[23]): New patterns for mem-indirect moves.
+       (movhf,movtqf): Corrected.
+       * 1750a.c (memop_valid): Memory indirection now valid.
+       (nonindirect_operand): Remove.
+       (print_operand): Fix the 'J' output modifier.
+       * 1750a.h (FRAME_POINTER_REQUIRED): Not required.
+       (INITIAL_FRAME_POINTER_OFFSET,FIX_FRAME_POINTER_ADDRESS): Undefine.
+       (FUNCTION_PROLOGUE,FUNCTION_EPILOGUE): Honor -fomit-frame-pointer.
+       (ELIMINABLE_REGS,CAN_ELIMINATE,INITIAL_ELIMINATION_OFFSET): Defined.
+       (PREFERRED_RELOAD_CLASS): Corrected.
+       (CONST_COSTS,ADDRESS_COST,REGISTER_MOVE_COST,MEMORY_MOVE_COST):
+       Slight adjustments.
+       (ASM_APP_ON,ASM_APP_OFF): Corrected.
+       * ms1750.inc (DUCR.M,DUC.M): Defined.
+
+Wed Apr 23 09:41:35 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * reload.c (push_reload): Fix last argument of the call to
+       find_dummy_reload.
+
+Wed Apr 23 09:29:14 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure (i[3456]86-next-*, m68k-next-nextstep{2,3}*):
+       Remove out_file and add extra_objs.
+       * config/nextstep.c: Add includes for config.h, stdio.h, and flags.h.
+       * {i386,m68k}/t-next (nextstep.o): New rule.
+       * m68k/next.h: Remove include of machmode.h.
+       * {i386,m68k}/next.c: Files deleted.
+
+Tue Apr 22 20:45:29 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * sparc.h (DBX_CONTIN_LENGTH): Shrink to 1000.
+
+Tue Apr 22 18:21:20 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (gen_variable_dir):  Add test for DW_AT_declaration to
+       the old_die if statement, and delete assertion for it.
+       (decl_ultimate_origin): Remove last change.
+
+Tue Apr 22 10:22:27 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (expand_prologue): End the current sequence before
+       counting the tst insns in the current function.  Start a new
+       one before emitting any prologue instructions.
+
+       * mn10300.h (REGISTER_MOVE_COST): Bump up cost of moves in the
+       same class.
+
+       * mn10300.md (untyped_call): New expander.
+
+Mon Apr 21 16:30:21 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * cse.c (fold_rtx, case PLUS): When seeing if negative of constant
+       is around, make sure not dealing with largest negative.
+
+Mon Apr 21 13:57:53 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/t-ecoff: Set TARGET_LIBGCC2_CFLAGS instead of LIBGCC2_CFLAGS.
+
+       * m68k.c (output_addsi3): New function.  From addsi3 pattern.
+       * m68k.h (output_addsi3): Add declaration.
+       * m68k.md (movqi+2): Add address registers.
+       (movxf+1): Disable for TARGET_5200.
+       (movxf+2): New pattern for TARGET_5200.
+       (addsi3): Add define_expand.  Move code to output_addsi3.
+       (addsi3_internal): Renamed from addsi3.  Disable for TARGET_5200.
+       (addsi3_5200): New pattern for TARGET_5200.
+
+Sun Apr 20 10:45:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (operand_equal_p): Constants are not equal if there
+       has been an overflow.
+
+       * toplev.c (compile_file): Shorten "branch-probabilities" in
+       output of times.
+
+       * alpha/vms.h (MOD[SD]I3_LIBCALL): Call ots$rem, not ots$mod.
+       (DWARF2_DEBUGGING_INFO): Define.
+
+       * alpha.c (alpha_need_linkage): Call get_identifier.
+
+       * rs6000.c (rs6000_output_load_toc_table): New function.
+       (output_prolog): Call it instead of doing it directly.
+       * rs6000.md (nonlocal_goto_receiver): New pattern.
+
+       * dwarf2out.c: Major cleanup; mostly reformatting.
+       Include expr.h.
+       Undefine inline ifndef __GNUC__; never define to include static.
+       Add "static" to header of all inlined functions.
+       Add declarations for all static functions, with prototypes.
+       (addr_const_to_string): Use HOST_WIDE_INT_PRINT_* macros.
+       (add_AT_*, new_{die,loc_descr,cfi): Don't check for xmalloc
+       returning zero.
+       (modified_type_die): Add missing parm on recursive call.
+       ({reg,based}_loc_descriptor): Add missing arg to call to new_loc_descr.
+       (add_const_value_attribute): Use REAL_VALUE_TYPE for fp calculations.
+       (output_call_frame_info): Add missing arg to output_cfi call.
+       (dwarf2out_def_cfa): Local variable OLD_REG must be unsigned long.
+       * Makefile.in (dwarf2out.o): Includes expr.h.
+       
+       * dwarf2out.c: Cast first arg in all calls to bzero to char *.
+       (decl_ultimate_origin): Return NULL if equal to decl.
+       (constant_size): Never return more than 4.
+       (value_format, case 8): New case.
+       (dwarf2out_frame_debug): Use HARD_FRAME_POINTER_REGNUM.
+       (based_loc_descr): Likewise.
+       (add_bound_info): Delete default case.
+       Add cases for CONVERT_EXPR and NON_LVALUE_EXPR; treat like NOP_EXPR.
+       Change NOP_EXPR to to recursive call.
+       (add_type_attribute): Ignore unnamed subtype of integral or FP.
+       (gen_subprogram_die): Use reg_loc_descriptor.
+       (dwarf2out_decl): Ignore nested functions.
+
+       * fix-header.c, protoize.c, gcov.c: Use symbolic codes for exit.
+
+       * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
+       if defined.
+
+       * expr.c ({move,clear}_by_pieces_1, expand_assignment): Ensure
+       we have unshared rtx before changing flags.
+       (store_{constructor,field}): Likewise.
+       (expand_expr, case COMPONENT_REF): Likewise.
+       (store_expr): Check if TEMP and TARGET are same with rtx_equal_p.
+
+       * emit-rtl.c (change_address, init_emit): Delete forward references.
+       (rtl_obstack, stack_depth, max_stack_depth): Delete extern decls.
+
+Fri Apr 18 18:25:52 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * function.c (instantiate_decls): For DECL_INCOMING_RTL, use max
+       of type size and mode size in instantiate_decl call.
+
+       * fixincludes (sys/lc_core.h): Fix OSF1/4.x namespace pollution.
+
+Wed Apr 16 19:36:53 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (add_bound_info): Use a DIE instead of a location
+       expression for variable bounds.  Trust a MEM rtx even when
+       optimizing.
+       (DWARF_FRAME_RETURN_COLUMN): Default to FIRST_PSEUDO_REGISTER.
+
+       * expr.c (expand_expr, case RTL_EXPR): If there is no sequence,
+       don't set it to const0_rtx.
+       * tree.c (array_type_nelts): Don't return any SAVE_EXPRs.
+
+Mon Apr 14 18:12:57 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.h (RS6000_ITRUNC, RS6000_UITRUNC): Prepend underscores.
+       (RS6000_MCOUNT): New macro.
+       (ASM_FILE_START): Use RS6000_MCOUNT.
+       * rs6000.c (output_function_profiler): Use RS6000_MCOUNT.
+       * rs6000/aix31.h (RS6000_{ITRUNC,UITRUNC,MCOUNT}): New macros.
+
+Mon Apr 14 14:37:27 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (can_use_return_insn): Include outgoing argument
+       area in size computation.
+       (expand_prologue): Likewise.  No longer diddle with sequences.
+       Put register saves just before outgoing argument area.
+       (expand_epilogue): Similarly.
+       (impossible_plus_operand): New function.
+       * mn10300.h (FRAME_POINTER_REQUIRED): Never require a frame pointer.
+       (ACCUMULATE_OUTGOING_ARGS, OUTGOING_REG_PARM_STACK_SPACE): Define.
+       (impossible_plus_operand): Declare.
+       * mn10300.md (reload_insi): New expander to handle pathological
+       reload cases.
+       (addsi3): Fix CC status.
+
+       * mn10300.h (FUNCTION_VALUE): Return addresses in $a0.
+       (FUNCTION_VALUE_REGNO_P): Corresponding changes.
+       * mn10300.md (call_value_internal): Allow output to be in an
+       address register.
+
+       * calls.c (emit_library_call): Handle saving of stack slots when
+       ACCUMULATE_OUTGOING_ARGS is defined.
+       (emit_library_call_value): Likewise.
+
+Mon Apr 14 14:48:15 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.md (xtrct_left, xtrct_right): New patterns.
+
+       * combine.c (get_last_value_validate): New argument insn.
+       Add check for memory reference clobbered by later store.
+       (record_value_for_reg, get_last_values): Pass in new argument.
+
+Mon Apr 14 14:03:18 1997  Mike Meissner  <meissner@cygnus.com>
+
+       * configure (powerpc --with-cpu=x): Add embedded powerpcs and 604e.
+
+       * rs6000.c (rs6000_override_options): Recognize -mcpu=801, -mcpu=823,
+       and -mcpu=604e.
+
+Sun Apr 13 18:43:16 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (invalidate_regno_rtx): New static variable.
+       (reload_cse_invalidate_regno): Check whether any earlier registers
+       have a multi-register value which includes the register we are
+       invalidating.
+       (reload_cse_regs): Initialize invalidate_regno_rtx.
+
+       * reload1.c (reload_cse_record_set): When setting reg_values for a
+       copy from one register to another, use gen_lowpart_common to
+       adjust the value correctly if the mode changes.
+
+Sun Apr 13 17:24:48 1997  Doug Evans  <dje@cygnus.com>
+
+       * expr.c (move_block_from_reg): Try using an integral mov operation
+       first.
+
+       * calls.c (expand_call): When copying unaligned values into a register,
+       zero out the register first rather than emitting a clobber.
+
+       * integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD
+       and regno == VIRTUAL_STACK_VARS_REGNUM, round size of stack slot up
+       before calling assign_stack_temp.
+
+Sun Apr 13 15:29:38 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * enquire.c (fake_f_rep): Add missing element name in cast.
+
+Sun Apr 13 15:20:05 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+       Fix sign bug in last change.
+
+Sun Apr 13 15:03:38 1997  J.T. Conklin  <jtc@netbsd.org>
+       
+       * m68k.md (movstricthi): Remove extraneous comparisons.
+
+       * configure (*-*-netbsd): tmake_file now t-netbsd; delete xmake_file.
+       * config/t-netbsd: New file.
+       * config/x-netbsd: Removed.
+
+Sun Apr 13 14:51:25 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * cse.c (canon_reg, cse_insn): Don't examine insn_n_dups if
+       recog_memoized fails to find a match.
+
+Sun Apr 13 14:17:26 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (reload_cse_noop_set_p): Add insn parameter.  Change
+       all callers.  If deleting the instruction, remove any earlier
+       REG_DEAD note for DREG.
+       (reload_cse_simplify_set): If simplifying, remove any earlier
+       REG_DEAD note for the new source register.
+
+Sun Apr 13 14:12:08 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * libgcc2 (L_bb, L_exit): Use 0 rather than NULL for null pointers.
+
+Sun Apr 13 12:53:03 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k/linux.h (ASM_SPEC): Define.
+       (STRUCT_VALUE_REGNUM, STATIC_CHAIN_REGNUM, INITIALIZE_TRAMPOLINE):
+       Remove definitions, undoing the change of Mar 20 1996. 
+
+       * m68k.c (output_move_qimode): Optimize pushing one byte if source
+       operand does not use stack pointer.
+
+       * m68k.md (rotl[shq]i3, rotl[hq]i3+1): Don't directly modify operand.
+
+       * m68k.md (tstdi): Add missing parallel around the pattern.
+
+Sun Apr 13 12:51:00 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c, cpplib.c (do_include): Diagnose #import and
+       #include_next if pedantic and if not in a system header.
+       (do_warning): #warning now causes an error if -pedantic-errors
+       is given; this is needed since #warning isn't ANSI.
+
+       * toplev.c (lang_options): Add -Wundef, -Wno-undef.
+       * c-decl.c (c_decode_option): Ignore -Wundef, -Wno-undef.
+
+       * cccp.c, cexp.y (warn_undef): New variable.
+       * cpplib.h (struct cpp_options): New member warn_undef.
+       (CPP_WARN_UNDEF): New macro.
+
+       * cccp.c (main), cpplib.c (cpp_handle_options): Set warn_undef
+       from -Wundef and -Wno-undef.
+
+       * cppexp.c (cpp_lex) New arg skip_evaluation.
+       (cpp_parse_expr): Pass skip_evaluation to cpp_lex.
+       Abort if cpp_lex returns NAME.
+
+       * cexp.y (exp), cppexp.c (cpp_lex): Optionally warn about undefined
+       identifiers that evaluate to 0.
+
+Sun Apr 13 11:43:16 1997  Joel Sherrill  <joel@OARcorp.com>
+
+        * configure (hppa1.1-*-rtems*): New target.
+        * mips/rtems.h: New file.
+
+Sun Apr 13 09:48:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * gcov.c (print_usage, open_files): Use FATAL_EXIT_CODE.
+       * collect2.c (fatal_perror, fatal, collect_wait): Likewise.
+
+       * sparc.c (eligible_for_delay_slot): Clean up and make to agree
+       precisely with patterns in MD file.
+       * sparc.md (*return_addsi): Change condition to exclude both ints.
+       (*return_adddi): Likewise.
+       (*return_subsi): New pattern.
+
+       * recog.c (validate_replace_rtx_1, case MINUS): New case.
+       
+Sun Apr 13 08:20:24 1997  Thomas Bushnell  <thomas@gnu.ai.mit.edu>
+
+       * i386/gnu.h (TARGET_VERSION): Redefine.
+
+Sun Apr 13 08:15:31 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * c-typeck.c (lookup_field): Don't recurse unless FIELD is
+       a RECORD_TYPE or UNION_TYPE.
+
+       * final.c (profile_function): Save the static chain register
+       around the call to the profiler function.
+
+       * loop.c (invariant_p, case REG): Pointers into frame are not
+       invariants if function has nonlocal gotos.
+       * reload1.c (reload): If function has nonlocal label, mark all
+       caller-saved regs as used.
+
+Fri Apr 11 16:49:06 1997  Doug Evans  <dje@seba.cygnus.com>
+
+       * m32r.h (REG_ALLOC_ORDER): Restore to original setting.
+
+       * m32r.h (UPPER16_P): Fix calculation.
+       * m32r.c (two_insn_const_operand): New function.
+       (m32r_print_operand): Handle 'X'.
+       * m32r.md (movsi): Tweak.
+       (*movsi_insn): Output hex value of constants too.
+       (movsi define_split): Add.
+       (andsi3,orsi3,xorsi3): Output hex value of constants too.
+
+Thu Apr 10 18:39:33 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.md (sne): Modified to use negc instead of xor.
+       (sne+1): New define_split for new sne pattern.
+       * sh.c (output_stack_adjust): Reorganize code for readability.
+       If size is negative, negate and subtract it instead of adding it.
+
+Wed Apr  9 13:51:07 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (output_stack_adjust): When splitting an adjustment into two
+       parts, make sure the stack is aligned at all times.
+
+Tue Apr  8 12:34:38 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.h (RETURN_ADDR_RTX): Define.
+
+Mon Apr  7 19:19:57 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (count_tst_insns): New function.
+       (expand_prologue): Load zero into data and/or address registers
+       if any are free and the function has optimizable tst insns.
+       (output_tst): If a suitable register is known to have the
+       value zero, use it instead of searching for a suitable register.
+       * mn10300.h (zero_dreg, zero_areg): Declare.
+       (FRAME_POINTER_NEEDED): Frame pointers are not needed if the
+       outgoing argument size is zero.
+       * mn10300.md (movXX): Optimize loading zero into an address
+       register if possible.  Optimize loading a DF/DI mode value
+       into an address register from a constant memory address.
+       (addsi3): Provide alternative which doesn't require a matching
+       inout operand.
+       (return): Optimize consecutive return instructions.
+
+Mon Apr  7 17:30:35 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * mips/iris5.h (SUBTARGET_CC1_SPEC): Define.
+       (LINK_SPEC, STARTFILE_SPEC): Support -static.
+       * mips/iris6.h (SUBTARGET_CC1_SPEC): Define.
+       (STARTFILE_SPEC, LINK_SPEC): Support -static.
+       * mips.h: (SUBTARGET_CC1_SPEC): Define.
+       (CC1_SPEC): Add subtarget_cc1_spec.
+       (EXTRA_SPECS): Add subtarget_cc1_spec.
+
+Sun Apr  6 12:24:53 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * arm.md (incscc): Use a match_operand with cc_register to match
+       the condition code register.
+       (decscc, *condbranch, *condbranch_reversed, *mov_scc): Likewise.
+       (*mov_negscc, *mov_notscc, *cond_return): Likewise.
+       (*cond_return_inverted, *ior_scc, *cond_move): Likewise.
+       (insv): New expand.
+       (andsi_notsi_si): Renamed from *andsi_notsi_si.
+       (andsi_not_shiftsi_si): New insn.
+       (*minmax_arithsi): Don't match this insn if operand1 is an
+       eliminable register.
+       ({sin,cos}*): Delete, since the ARM always emulates these its
+       faster to call a library function.
+       (movsicc, *movsicc_insn): Make operand0 an s_register_operand,
+       and operand3 an arm_not_operand.  Use cc_register to match the
+       condition code register.
+       (mov[sd]fcc*): Make operand[0,2] s_register_operands, and operand3
+       the nonmemory_operand.  Use cc_register to match the condition
+       code register.
+       (*ifcompare_plus_move): Move before *ifcompare_arith_move.  Just do
+       a split for the output.
+       (*ifcompare_move_plus): Similarly, but relative
+       to *ifcompare_move_arith.
+       (*if_plus_move, *if_move_plus): New patterns.
+       (*ifcompare_arith_arith): Simplify the alternatives down to just one,
+       and split the insn before output.
+       (*if_arith_arith, *if_arith_move, *if_move_arith): New patterns.
+       (*ifcompare_move_not, *ifcompare_not_move): Simplify and split the
+       insn before output.
+       (*if_move_not, *if_not_move): New patterns.
+       (*ifcompare_shift_move, *ifcompare_move_shift): Simplify and split the
+       insn before output.
+       (*if_shift_move, *if_move_shift): New patterns.
+       (*ifcompare_shift_shift): Simplify and split the insn before output.
+       (*if_shift_shift): New pattern.
+       (*ifcompare_not_arith, *ifcompare_arith_not): Simplify and split the
+       insn before output.
+       (*if_not_arith, *if_arith_not): New patterns.
+       (*ifcompare_neg_move, *ifcompare_move_neg): Simplify and split the
+       insn before output.
+       (*if_neg_move, *if_move_neg): New patterns.
+
+Sat Apr  5 20:17:43 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/sol-ci.asm (_environ): Don't make _envrion a common
+       variable, the lastest assembler doesn't let common variables also
+       be a weak symbol.
+
+Fri Apr  4 18:30:12 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * rs6000/rs6000.md (adddi3): Use non_short_cint_operand instead of
+       non_add_cint_operand.
+
+Thu Apr  3 15:08:39 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (can_use_return_insn): Add size of fixed stack space
+       for function calls into the size of the frame.  */
+       (expand_prologue, expand_epilogue): Likewise.
+       (initial_offset): Corresponding changes..
+       * mn10300.h (OUTGOING_REG_PARM_STACK_SPACE): No longer define.
+       (STACK_POINTER_OFFSET): Define.
+       * mn10300.md (call, call_value expanders): Don't adjust the stack
+       pointer here anymore.
+
+       * mn10300.md (ashlsi3): Remove some alternatives which are no longer
+       needed or desired.
+
+Thu Apr  3 15:06:53 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * local-alloc.c (no_conflict_p): Reject sequences with foreign insns.
+
+       * combine.c (move_deaths): Handle partial REG_DEAD note for
+       multi-reg hard register.
+
+       * function.c (expand_function_start): Emit queue after expanding
+       each dynamic parameter type.
+
+       * mips.c (mips_move_2words): Add SIGN_EXTEND support for SYMBOL_REF,
+       LABEL_REF, and CONST operands.
+
+       * dwarf2out.c: Delete comment referring to README.DWARF.
+
+Wed Apr  2 17:21:23 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * rs6000.md (ashrdi3_power): Mark alternative 0 as early_clobber
+       output.
+
+       * rs6000.md (abssi3_nopower define_split): Switch operands of MINUS.
+       (nabssi3_nopower define_split): Likewise.
+
+Tue Apr  1 19:30:01 1997  Mike Stump  <mrs@cygnus.com>
+       
+       * libgcc2.c (find_exception_table): Fix to logic to deal with
+       functions that are in their own section, such as template
+       instantiations, that cause overlapping EH tables.
+
+Tue Apr  1 17:16:22 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * Makefile.in (USER_H): Add va-mn10300.h
+
+       * ginclude/stdarg.h: Include va-mn10300.h.
+       * ginclude/varargs.h: Likewise.
+       * ginclude/va-mn10300.h: New file.
+       * mn10300.c (expand_prologue): If current_function_varargs is nonzero,
+       flush d0/d1 back into stack.
+       (mn10300_builtin_saveregs): New function.
+       (function_arg, function_arg_partial_nregs): New functions.
+       (initial_offset): Tweak now that the RP save area is allocated
+       and deallocated around each call again.
+       * mn10300.h (FIRST_PARM_OFFSET): Now 4.
+       (FRAME_POINTER_REQUIRED): Require frame pointer for all non-leaf fcns.
+       (REG_PARM_STACK_SPACE): Now 8 bytes.
+       (FUNCTION_ARG_REGNO_P): Update for new parameter passing conventions.
+       (CUMULATIVE_ARGS, INIT_CUMULATIVE_ARGS): Likewise.
+       (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Likewise.
+       (FUNCTION_ARG_PARTIAL_NREGS): Likewise.
+       (TRAMPOLINE_TEMPLATE): Don't clobber d0 anymore.
+       (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Corresponding changes.
+       (EXPAND_BUILTIN_SAVEREGS): Define.
+       * mn10300.md (call, call_value patterns): Allocate and deallocate
+       stack slot for return pointer around each call.
+
+       * mn10300.h (RTX_COSTS): Refine.
+       (CASE_VALUES_THRESHHOLD, NO_FUNCTION_CSE): Likewise.
+       * mn10300.c (output_tst): New function.
+       * mn10300.md (movdi, movdf): Improve code to load constants into regs.
+       (tst insns): Use output_tst to optimize some cases.  Add versions to
+       encourage more zero extensions instead of sign extensions of HImode
+       and QImode values.
+       (divsi3, udivsi3): Remove patterns.  Replaced by...
+       (divmodsi4, udivmodsi4): New expanders/patterns.
+       (andsi3): Optimize "and" operations with certain constants.
+
+Tue Apr  1 09:14:29 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.h: (ADJUST_COSTS): Define.
+
+Fri Mar 28 17:46:13 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (LANGUAGES): Add gcov.
+       (OBJS): Add profile.o.
+       (STAGESTUFF): Add gcov.
+       (profile.o, gcov.o, gcov): Add rules to build them.
+       (cpp.info, gcc.info, gcc.dvi): Add gcov.texi.
+       (install-common): Install gcov.
+       * combine.c (distribute_notes): Handle REG_BR_PROB and REG_EXEC_COUNT
+       REG_NOTES.
+       * sparc.h (OVERRIDE_OPTIONS): Check profile_arc_flag.
+       * final.c (LONG_TYPE_SIZE): Define.
+       (count_instrumented_arcs): New variable.
+       (end_final, profile_after_prologue, leaf_function_p): Add support
+       for profile_arc_flag.
+       (add_bb): Only call CC_STATUS_INIT if HAVE_cc0.
+       * flags.h (profile_arc_flag, flag_test_coverage,
+       flag_branch_probabilities): Declare.
+       * function.c (expand_function_end): Output NOTE_REPEATED_LINE_NUMBER
+       for last line of function.
+       * integrate.c (expand_inline_function): Output
+       NOTE_REPEATED_LINE_NUMBER after inlined call.
+       * jump.c (jump_optimize, follow_jumps, mark_jump_label): Disable some
+       optimizations when flag_test_coverage and there is a line number note
+       in the way.
+       (invert_jump): Add REG_BR_PROB when flag_branch_probabililties.
+       * libgcc2.c (__bb_exit_func): Support gcov style output.
+       * reorg.c (mostly_true_jump): Use REG_BR_PROB notes when
+       flag_branch_probabilities.
+       * rtl.c (note_insn_name): Add NOTE_REPEATED_LINE_NUMBER.
+       (reg_note_name): Add REG_BR_PROB and REG_EXEC_COUNT.
+       * rtl.h (enum reg_note): Add REG_BR_PROB and REG_EXEC_COUNT.
+       (REG_BR_PROB_BASE): Define.
+       (NOTE_REPEATED_LINE_NUMBER): Define.
+       * sched.c (update_flow_info): Handle REG_EXEC_COUNT and REG_BR_PROB
+       notes.
+       * toplev.c (branch_prob_dump, profile_arc_flag, flag_test_coverage,
+       flag_branch_probabilities, branch_prob_dump_file, branch_prob_time):
+       New variables.
+       (f_options): Add profile-arcs, test-coverage, and
+       branch-probabilities.
+       (compile_file): Set branch_prob_time.  Pass flag_test_coverage to
+       init_emit_once.  Handle branch_prob_dump.  Call init_branch_prob.
+       Call end_branch_prob. Call output_func_start_profiler.
+       (rest_of_compilation): Handle branch_prob_dump.  Call new
+       branch_prob pass.
+       (main): Set branch_prob_dump.
+       * gcov.c, profile.c, gcov-io.h, gcov.texi: New files.
+
+Thu Mar 27 16:52:52 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.h (CPP_CPU_DEFAULT): Define if TARGET_CPU_DEFAULT is not set.
+       * i386.h (STACK_BOUNDARY): Define to always be 32.
+
+       From J"orn Rennecke <amylaar@cygnus.co.uk>
+       * i386.md: (zero_extendhisi2+[12]): use true_regnum instead of REGNO for
+       operand 0.  
+       (zero_extendqisi2+3: use reg_overlap_mentioned_p instead of REGNO
+       comparison; use true_regnum instead of REGNO for rtx generation.
+
+Wed Mar 26 12:34:21 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (reload): Call reload_cse_regs.
+       (reg_values): New static variable.
+       (reload_cse_invalidate_regno): New static function.
+       (reload_cse_mem_conflict_p): New static function.
+       (reload_cse_invalidate_mem): New static function.
+       (reload_cse_invalidate_rtx): New static function.
+       (reload_cse_regs): New static function.
+       (reload_cse_regno_equal_p): New static function.
+       (reload_cse_noop_set_p): New static function.
+       (reload_cse_simplify_set): New static function.
+       (reload_cse_check_clobbered): New static variable.
+       (reload_cse_check_src): New static variable.
+       (reload_cse_check_clobber): New static function.
+       (reload_cse_record_set): New static function.
+
+Wed Mar 26 07:34:06 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * ginclude/stdarg.h (__va_copy): New definition.
+
+Tue Mar 25 13:43:36 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * gcc.c (init_spec): If -v, print out that the default spec values
+       were being used.  Fix prototype to reflect no arguments.
+       (set_spec): If specs has not been set, set it up with the default
+       specs.
+       (read_specs): Move to later in the file so that startfile_prefixes
+       has been declared.  Process "%include <file>" to include another
+       specs file, aborting if the file can't be found.  Process
+       "%include_noerr <file>: to include another specs file, giving no
+       error if the file can't be found.  Process "%rename var1 var2" to
+       rename a specs variable.  Take new argument that indicates whether
+       we are processing the main file.  Only process % commands if this
+       is not the main specs file.  Change callers.
+       (main): Do not call init_spec if a specs file was found.
+       (set_spec,read_specs,do_spec_1): If DEBUG_SPECS is defined, print
+       debug information.
+       
+Tue Mar 25 14:43:58 1997  Doug Evans  <dje@cygnus.com>
+
+       * expr.c (emit_push_insn): Delete emission of CLOBBER
+       when doing partial push, no longer necessary.
+
+       * c-decl.c (grokdeclarator): Pedwarn qualified void function return
+       type.
+
+Tue Mar 25 14:28:15 1997  Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * reload.c (find_dummy_reload): New parameter earlyclobber.  If set
+       then don't use IN for the reload if it also appears elsewhere in
+       the insn.  All callers changed.
+
+Tue Mar 25 13:20:18 1997  J.T. Conklin <jtc@cygnus.com>
+
+       * m68k/lb1sf68.asm (udivsi3): Fix hunk from previous patch that
+       did not apply correctly.
+
+       * m68k.md (tablejump): Use extl to explicitly sign extend
+       index registeron TARGET_5200.
+       * m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h} 
+       (ASM_RETURN_CASE_JUMP): Likewise.
+
+       * m68k.md (mulsi3): Changed into define_expand.  Split insn into
+       m68k and coldfire specific versions with appropriate constraints.
+
+       * m68k.md (movqi): Disable use of address registers for 
+       TARGET_5200.
+
+       * m68k/lb1sf68.asm (__modsi3, __umodsi3): Use mulsl instruction
+       instead of __mulsi3 function call on the coldfire.
+
+       * m68k.md (bne0_di): Fix typo in last change.
+
+       * m68k.md (xorsi3_5200): Correct constraints.
+
+       * m68k.c (output_move_{si,hi,qi}mode): New functions.
+       * m68k.h (output_move_{si,hi,qi}mode): Declare.
+
+       * m68k.md (move{si,hi,qi,di}): Changed into define_expands.  Split
+       insns into m68k and coldfire specific versions with appropriate
+       constraints.
+
+Tue Mar 25 12:18:41 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (GCC_PASSES): Revert previous change; use
+       cc1$(exeext).
+
+Mon Mar 24 16:12:20 1997  Doug Evans  <dje@cygnus.com>
+
+       * m32r/*: New files.
+       * config.sub: Add m32r.
+       * configure: Add m32r.
+       * longlong.h: Add m32r support.
+       * ginclude/{stdarg.h,varargs.h}: Add m32r support.
+       * ginclude/va-m32r.h: New file.
+
+Mon Mar 24 15:53:15 1997  Joel Sherrill <joel@OARcorp.com>
+
+       * rs6000/rtems.h: Change to a near clone of the powerpc-eabi target.
+       * configure (powerpc*-*-rtems): Move before Linux configuration.
+
+Mon Mar 24 14:26:37 1997  Gavin Koch  <gavin@cygnus.com>
+
+       * ginclude/va-mips.h:  For little endian, eabi, objects
+       less than __va_reg_size are passed in registers.
+
+Fri Mar 21 00:48:02 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (print_operand): Handle 'N'.
+
+       * mn10300.c (expand_epilogue): Correctly handle functions
+       with large frames, but no callee register saves.
+
+       * mn1300.md (movdf, movdi): Handle overlapping moves.
+
+       * pa.c (compute_movstrsi_length): Handle residuals correctly.
+
+Thu Mar 20 13:53:30 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.c (easy_fp_constant): If -mrelocatable, consider all fp
+       constants to be hard.
+
+Mon Mar 20 13:53:30 1997  Jim Wilson  <wilson@cygnus.com>
+       * rs6000.md (movdf/movsf define_splits): Add SUBREG support.
+       * rs6000.c (fp_reg_or_mem_operand): Delete.
+       * rs6000.h (PREDICATE_CODES): Remove fp_reg_or_mem_operand.
+       (fp_reg_or_mem_operand): Delete declaration.
+       * rs6000.md (movsf_hardfloat): Use nonimmediate_operand instead
+       of fp_reg_or_mem_operand.
+
+Thu Mar 20 08:52:27 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (cmpsi): Handle comparing a register with
+       itself by adding zero to the reg.  Z bit for such an insn is
+       inverted.
+       * mn10300.c (notice_update_cc): Handle CC_INVERT.
+
+       * pa.c (emit_move_sequence): Don't lose for a secondary reload
+       to the SAR register if the input is a MEM with an offset that won't
+       fit in 14bits.
+
+Wed Mar 19 17:10:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k/linux.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Wed Mar 19 16:59:34 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c, cpplib.c (do_error, do_warning): Fix memory leak.
+
+       * cccp.c (output_line_directive): Do not output negative line
+       numbers when analyzing directives like `#line 0'.
+
+       * cexp.y (parse_number, yylex), cccp.c (rescan), cpplib.c
+       (cpp_get_token): Unless -lang-c89 is specified, allow C9X-style
+       hexadecimal floating-point numbers as preprocessor numbers.
+       * cccp.c (c89): New decl.
+       (main): Set it to 1 if -lang-c89.
+       * cpplib.h (struct cpp_options): New member c89.
+       (CPP_C89): New macro.
+       * cpplib.c (unsafe_chars): `p' is unsafe before `-' or `+', since it
+       might generate a C9X-style hexadecimal floating-point number.
+       (cpp_handle_options): Set c89 option to 1 if -lang-c89.
+
+Tue Mar 18 17:05:57 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+        * i386.h (STACK_BOUNDARY): Determine according to TARGET_ALIGN_DOUBLE.
+       
+       * i386.c (override_options) Make the default alignment 4 for 486,
+       otherwise 2.
+       
+       * i386/freebsd-elf.h (CPP_SPEC): Remove TARGET_CPU_DEFAULT reference.
+       * i386/linux{,-aout,-oldld}.h (CPP_SPEC): Likewise.
+       
+       * i386/go32.h (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE,
+       NO_STAB_H, ASM_FILE_START, DBX_BLOCKS_FUNCTION_RELATIVE,
+       DBX_FUNCTION_FIRST, DBX_OUTPUT_MAIN_SOURCE_FILE_END,
+       ASM_OUTPUT_SOURCE_LINE): Added to support stabs.
+       (ASM_OUTPUT_SECTION_NAME): Support section attribute.
+
+Tue Mar 18 16:12:28 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * final.c (shorten_branches): Split all insns before computing insn
+       lengths.
+       (final_scan_insn, case default): If HAVE_ATTR_length defined, call
+       abort for any insn that has a '#' output template.
+
+       * expr.c (emit_group_load): Call operand_subword instead of creating
+       an explicit SUBREG.
+
+       * reload1.c (reload_reg_free_before_p, case
+       RELOAD_FOR_OPERAND_ADDRESS): Conflicts with RELOAD_FOR_OPADDR_ADDR
+       reloads.
+
+       * configure (alpha-dec-osf[23456789]*): Use install-headers-cpio
+       for osf4.
+
+       * gcc.c (init_spec): Delete parameter.  Always initialize extra_specs.
+       (process_command, main): Change all callers.
+
+       * combine.c (if_then_else_cond): Call copy_rtx to prevent sharing.
+
+Tue Mar 18 14:59:12 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * function.c (assign_parms): Add a REG_EQUIV note to the
+       instruction which copies a parameter into a pseudo-register
+       whenever there is an associated stack slot, even if the parameter
+       actually arrived in a register.
+
+Tue Mar 18 14:24:48 1997  Doug Evans  <dje@cygnus.com>
+
+       * configure (alpha-dec-osf[23]): Separate osf[23] case.
+       * alpha.h (LIB_SPEC): -lprof1 requires -lpdf for OSF 4.
+       * alpha/osf2or3.h: New file.
+
+Tue Mar 18 11:32:10 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * m68k.c (m68k_last_compare_had_fp_operands): New variable.
+       * m68k.h (m68k_last_compare_had_fp_operands): Declare it.
+       * m68k.md (tst*, cmp*): Turn into define_expand/define_insn pairs.
+       Keep track of whether test/compare has fp operands.
+       (seq, sne, sgt, slt, sge, sle): Turn into define_expand/define_insn
+       pairs.  Make expanders FAIL if TARGET_68060 and last comparison/test
+       had fp operands.
+
+Tue Mar 18 04:29:29 1997  Richard Earnshaw <rearnsha@armltd.co.uk>
+
+       * arm.md (movhi): Handle generation of large constants during
+       and after reload.
+
+Mon Mar 17 17:30:24 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * gmicro.h (RETURN_POPS_ARGS): Make sure FUNDECL is non-nil
+       before we try to use it.
+       * m68k.h (RETURN_POPS_ARGS): Likewise.
+       * ns32k.h (RETURN_POPS_ARGS): Likewise.
+       * pyr.h (RETURN_POPS_ARGS): Likewise.
+
+Mon Mar 17 17:13:44 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * stor-layout.c (layout_record, PCC_BITFIELD_TYPE_MATTERS):
+       Only add padding if a bit field would otherwise span more units
+       of alignment than its base type.
+
+Mon Mar 17 17:03:55 1997  J.T. Conklin  <jtc@cygnus.com>
+
+       * m68k.md (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0
+       instead of tstl when testing address registers on the 68000.
+       
+       * m68k/lb1sf68.asm: Fix prologues/epilogues to deal with the lack
+       of predecrement/postincrement addressing modes in the coldfire
+       moveml instruction.
+
+Mon Mar 17 17:00:14 1997  Scott Christley <scottc@net-community.com>
+
+       * Fix long standing bug where first method call for a class could
+       result in a garbled stack or produce an incorrect return value.
+       * objc/sendmsg.c (__objc_block_return): Remove function.
+       (__objc_word_return, __objc_double_return): Remove functions.
+       (__objc_get_forward_imp): New function.
+       (__objc_init_dispatch_tables): Install zero instead of
+       __objc_init_install_dtable.
+       (__objc_init_install_dtable): No longer call the method but
+       allow objc_msg_lookup return it for normal execution.
+       (obj_msg_lookup): Differentiate between when a method isn't
+       implemented and when the dispatch table needs to be installed.
+       Return the IMP when the dispatch table is installed versus
+       having __objc_init_install_dtable call it.
+       (get_imp): Install dispatch table if needed and return IMP
+       from the newly installed dispatch table.
+       (__objc_responds_to): Install dispatch table if needed before
+       checking if method is implemented.
+
+Mon Mar 17 16:29:38 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * tree.c (build_{index,range}_type): Ensure expressions for min
+       and max value are in same obstack as type.
+
+Mon Mar 17 15:44:18 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * cccp.c [#if VMS] (O_RDONLY, O_WRONLY): Delete (redundant).
+       (BSTRING): Delete (obsolete; usage occurs prior to definition).
+       (do_include): Handle old VAX C style includes better.
+
+Mon Mar 17 13:46:47 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cexp.y, cppexp.c (parse_number): Invalid integer constants are
+       errors if pedantic.
+       * cexp.y (yylex): Invalid multibyte characters are errors if pedantic.
+       * cppexp.c (cpp_lex): Likewise.
+       * cppexp.c (cpp_parse_escape): Character constants that do not fit are
+       errors if pedantic.
+
+       * c-parse.in (expr_no_commas): Do not store temporary
+       skip_evaluation increments on yacc value stack.
+
+Sun Mar 16 19:54:49 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
+       object is picked.
+
+Sun Mar 16 15:45:45 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * loop.c (strength_reduce): Adjust BENEFIT appropriately if an
+       autoincrement memory reference will eliminate add insns.
+
+Sun Mar 16 08:41:40 1997  Scott Christley <scottc@net-community.com>
+
+       * i386.md (untyped_call): Re-enable code.
+       * objc/sendmsg.c (__objc_block_return): New function.
+       (__objc_word_return, __objc_double_return): New functions.
+       (__objc_init_install_dtable): Call appropriate return function
+       based upon method type.
+       * objc/thr-pthreads.c: Correct include path.
+
+Sat Mar 15 07:58:33 1997  Scott Christley <scottc@net-community.com>
+
+       * objc-act.c (OBJC_VERSION): Increment version.
+       * objc/init.c (OBJC_VERSION): Likewise.
+
+Sat Mar 15 07:58:00 1997  Ovidiu Predescu <ovidiu@net-community.com>
+
+       * Implement +load.
+       * objc/init.c (objc_send_load, __objc_send_load): New functions.
+       (__objc_send_message_in_list): New function.
+       (__objc_force_linking): New function.
+       (__objc_exec_class): Don't call _objc_load_callback here.
+       * objc/linking.m: New file.
+       * objc/sendmsg.c (class_add_method_list): Check for the +load method
+       when adding a methods list to a class.
+       * objc/Makefile (OBJC_O): Add linking.m.
+
+       * Allow methods defined in categories to override methods that are
+       defined in the class implementation.
+       * objc/sendmsg.c (__objc_install_methods_in_dtable): New function.
+       (class_add_method_list): Don't check anymore for duplicate methods.
+
+       * config/nextstep.h (INCLUDE_DEFAULTS): Define to something useful
+       when cross-compiling.
+
+       * The static instances list moved from the objc_module struct to 
+       objc_symtab struct, at the end of defs array. This now allows the NeXT
+       gdb to work with binaries generated for the GNU ObjC runtime.
+       * objc-act.c (build_objc_symtab_template): Make sure
+       defs in objc_symtab is a NULL terminated array.
+       (init_def_list): Attach statics to end of def list.
+       (init_objc_symtab): Take statics list into account.
+       (init_module_descriptor, build_module_descriptor): Don't add statics.
+       (generate_static_references): Indicate that statics are used.
+       (finish_objc): Process statics in the beginning.
+       * objc/objc-api.h (objc_module): Eliminate statics variable.
+       * objc/init.c (__objc_exec_class): Access statics from their
+       new place in the defs variable.
+
+Sat Mar 15 07:29:15 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload.c: Include expr.h.
+       (find_reloads_address, find_reloads_address_1): New argument INSN.
+       (find_reloads_address_1): Reload inside of p{re,ost}_{in,de}c
+       instead of entire p{re,ost}_{in,de}c where appropriate.
+       * Makefile.in (reload.o): Added expr.h to dependencies list.
+
+Sat Mar 15 07:17:12 1997  Richard Henderson  <rth@tamu.edu>
+
+       * reload.h (eliminate_regs): Add STORING arg.
+       * reload1.c (eliminate_regs): Likewise.
+       (eliminate_regs, case SET): Pass that we are storing to recursive call.
+       (eliminate_regs, case SUBREG): If storing and same number of words,
+       use larger mode.
+       * caller-save.c, dbxout.c, dwarfout.c, dwarf2out.c, reload.c, sdbout.c:
+       Change all calls to eliminate_regs.
+
+Fri Mar 14 14:18:49 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cplus-dem.c: Add prototypes for all static functions.
+       (mystrstr): Make static.  Make arguments and result const.
+       (cplus_match): Remove; not used.
+
+Fri Mar 14 10:15:35 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (const_costs): Remove unused function.
+       * mn10300.h (CONST_COSTS): Rework to generate better code.
+
+       * mn10300.c (print_operand): Handle 'H' and 'L' output
+       modifers for high/low part of a 64bit value.
+       * mn10300.h (CONST_DOUBLE_OK_FOR_LETTER_P): Handle 'G'
+       (LEGITIMATE_CONSTANT_P): Allow any constant.
+       * mn10300.md (movdi, movdf): Implement.
+       (adddi3, subdi3): New expanders and patterns.
+
+       * mn10300.c (print_operand): Handle 'A' modifier for an
+       address which can't be simple register indirect.
+       * mn10300.h (EXTRA_CONSTRAINT): Handle 'R' for bit ops.
+       * mn10300.md: Add patterns to test, set and clear bitfields.
+
+       * mn10300.c (can_use_return_insn): New function.
+       (expand_epilogue): Emit a RETURN insn if possible.
+       * mn10300.md (return): New pattern.
+
+       * mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'N'.
+       * mn10300.md (andsi3): Catch "and 255,dn" and "and 65535,dn"
+       which were not turned into zero_extend patterns.
+
+       * mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Handle symbolic
+       constant as an index/base too.
+
+       * mn10300.md (movsi): Allow SP to be loaded/saved with
+       reg+d8 addresses.
+
+       * mn10300.md (cmpsi): Allow second operand to be a constant.
+       (subsi3): Likewise.
+
+       * mn10300.md (sign extension patterns): Fix thinko when
+       extending from memory.
+
+       * mn10300.md (tst peepholes): Add peepholes for test/branch
+       based on N bit being set/clear and the data value being tested dies.
+
+Tue Mar 11 17:07:51 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (expand_prologue): Rework so that eliminating
+       the frame pointer produces faster/smaller code.
+       (expand_epilogue): Likewise.
+       (initial_offset): New function for argument pointer and frame pointer
+       elimination.
+       * mn10300.h (FIRST_PSEUDO_REGISTER): Bump to 10.
+       (FIXED_REGISTERS): Add argument pointer register, it's a fake fixed
+       register.
+       (CALL_USED_REGISTERS, REG_ALLOC_ORDER): Corresponding changes.
+       (REGNO_REG_CLASS, REG_CLASS_CONTENTS): Likewise.
+       (REG_OK_FOR_BASE_P, REGISTER_NAMES): Likewise.
+       (reg_class, REG_CLASS_NAMES): Delete unwanted DATA_OR_SP_REGS class.
+       (PREFERRED_OUTPUT_RELOAD_CLASS): Define.
+       (FIRST_PARM_OFFSET): No longer include register save area in
+       computation.
+       (STACK_POINTER_REGNUM): Is now register 9.
+       (ARG_POINTER_REGNUM): Is now register 8.
+       (FRAME_POINTER_REQUIRED): Refine.
+       (ELIMINABLE_REGS, INITIAL_ELIMINATION_OFFSET): Define.
+       (CAN_DEUG_WITHOUT_FP): Define.
+       * mn10300.md (return_internal): Break into two patterns.
+       
+       * mn10300.h (CONST_OK_FOR_LETTER_P): Handle 'M' too.
+       (REGISTER_MOVE_COST): Fix errors and refine.
+
+       * mn10300.c (notice_update_cc): SET_ZN_C0 insns leave the
+       overflow bit in an unuseable state.  Rename CC_SET to CC_TST.
+       * mn10300.md (cc attributes): "set" is gone, replaced by
+       "tst".  Update attributes on various insns.
+
+       * mn10300.md: Improve sign and zero extension instructions.
+       (ashlsi3): Improve.  Handle address registers too.
+       (add peephole): Combine two consecutive adjustments of a register
+       into a single adjustment.
+
+Tue Mar 11 17:18:40 1997  Brendan Kehoe  <brendan@melange.gnu.ai.mit.edu>
+
+       * cplus-dem.c (gnu_special): Call demangled_fund_type for other
+       __t* symbols.
+
+Mon Mar 10 16:10:34 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * emit-rtl.c (subreg_lowpart_p): Return 0 if SUBREG_REG is VOIDmode.
+       * combine.c (simplify_rtx, case SUBREG): Fix direction of test when
+       calling operand_subword; use inline code intead of subreg_lowpart_p.
+
+Fri Mar  7 09:22:28 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (expand_{pro,epi}logue): Rework to avoid
+       unnecessary "add" operations.
+       (expand_epilogue): Likewise.
+       * mn10300.h (STARTING_FRAME_OFFSET): Is zero after the last
+       round of prologue/epilogue changes.
+       (FIRST_PARM_OFFSET): Is now 16 (-4 for REG_PARM_STACK_SPACE + 20 for
+       register save area).
+       (REG_PARM_STACK_SPACE): Define as 4 bytes.
+       (OUTGOING_REG_PARM_STACK_SPACE): Define so caller allocates it.
+       * mn10300.md (call{,_value} expander): Don't emit insns to adjust the
+       stack here anymore.
+
+       * mn10300.md (bCC patterns): Just use "bCC target".
+
+Tue Mar  4 13:21:41 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * rs6000.md (movsi): Don't emit a USE insn for LABEL_REFs.
+
+Thu Mar  6 16:29:13 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (modified_type_die): Initialize item_type to NULL.
+       Move equate_type_number_to_die call before use of sub_die, and move
+       recursive modified_type_die calls on item_type after it.
+
+       * dwarfout.c (root_type_1, write_modifier_bytes_1): New functions.
+       (root_type): Call root_type_1.
+       (write_modifier_bytes): Call write_modifier_bytes_1.
+       (output_type, case POINTER_TYPE): Set TREE_ASM_WRITTEN before
+       recursive call.
+
+Wed Mar  5 14:30:49 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>
+
+       Partially undo Jan 11 changes (nor takes only register ops):
+       * mips.md (*norsi3_const, *nordi3_const): Delete bogus patterns.
+       * mips.c (complemented_arith_operand): Delete function.
+       (print_operand): Don't handle `e' for CONST_INT.
+       * mips.h (PREDICATE_CODES): Delete complemented_arith_operand.
+
+Tue Mar  4 16:38:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * i386.c (i386_return_pops_args): Make sure FUNDECL is non-nil
+       before we try to use it.
+       * i386/isc.h (RETURN_POPS_ARGS): Likewise.
+       * i386/next.h (RETURN_POPS_ARGS): Likewise.
+       * i386/sco.h (RETURN_POPS_ARGS): Likewise.
+       * i386/sco5.h (RETURN_POPS_ARGS): Likewise.
+       * i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
+
+Mon Mar  3 20:17:54 1997  Gavin Koch  <gavin@cygnus.com>
+
+       * ginclude/va-mips.h: __mips_single_float should have
+       the same effect on vararg lists as __mips_soft_float.
+
+Mon Mar  3 18:12:01 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.h (DBX_CONTIN_LENGTH): Undo 2/26 change.
+
+Mon Mar  3 13:08:20 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * combine.c (simplify_rtx): Do nothing with (truncate:mode) if
+       mode is a partial integer mode.
+
+Sun Mar  2 17:41:18 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * ginclude/varargs.h: Add definition of __va_copy.
+       * va-alpha.h, va-clipper.h, va-h8300.h, va-i860.h: Likewise.
+       * va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-ppc.h: Likewise.
+       * va-sh.h, va-sparc.h, va-spur.h: Likewise.
+
+Sun Mar  2 13:25:49 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-typeck.c (process_init_element): Warn and truncate if upper
+       bound of index is out of range.
+
+Fri Feb 28 16:08:47 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/sol-c0.c (_start): Disable loading up r13 and r2 with the
+       SDA base registers for now.
+
+       * rs6000.md (movsi): Emit a USE insn when putting the
+       label of constants into the TOC, so that the constant is still
+       emitted when expensive optimizations are used.
+
+Thu Feb 27 17:54:42 1997  Karl Heuer  <kwzh@gnu.ai.mit.edu>
+
+       * fixinc.ptx: Fix sed expression looking for <sys/types.h> in
+       pwd.h.
+
+Thu Feb 27 12:11:16 1997  Dennis Glatting  <dennis.glatting@plaintalk.bellevue.wa.us>
+
+       * fixincludes: Remove more cases of __const__ from math.h on
+       NeXT.
+
+Wed Feb 26 14:52:27 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * reload.c (debug_reload): Remove extra argument to fprintf.
+
+       * rs6000.c (output_toc): Make fprintf calls type correct.
+
+       * rs6000.h (DBX_CONTIN_LENGTH): Define as 4000 to avoid AIX
+       assembler line limit.
+
+Mon Feb 24 17:56:17 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * fixincludes: Fix need of prototypes for C++ in rpc/xdr.h on SunOS4.
+
+Mon Feb 24 17:33:57 1997  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000/xm-sysv4.h (HAVE_STRERROR): Define.
+
+Sun Feb 23 17:18:28 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * rs6000.md (floatsidf2_loadaddr): Correct syntax for cau instruction.
+       (load_multiple, store_multiple): Call change_address instead of
+       creating MEM from scratch.
+
+Thu Feb 20 16:39:15 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (unroll_loop): Add check for naive loop that ends with
+       conditional branch that does not branch back to loop start.
+
+       * reload1.c (reload): Move assign_stack_local call into main loop.
+
+Thu Feb 20 11:40:46 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (zero extension patterns): Turn into define_expand and
+       define_insn pair.
+
+Wed Feb 19 17:05:38 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
+       directly to memory, go through a reg if reload hasn't started.
+       * pa.md (main movdf pattern): Don't allow 0.0 (double precision)
+       to be copied directly to memory.
+
+       * pa/pa-hpux10.h (MD_EXEC_PREFIX): Define appropriately for hpux10.
+       (MD_STARTFILE_PREFIX): Similarly.
+
+       * pa.h (ASM_OUTPUT_SECTION_NAME): Surround the section name
+       with '$' if not using GAS.
+
+Wed Feb 19 16:43:47 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sched.c (schedule_insns): If there was no first scheduling pass,
+       split instructions after reload.
+       (update_flow_info): Tolerate some idiosyncrasies after reload.
+
+Wed Feb 19 11:13:51 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * combine.c (find_split_point): Don't turn a SIGN_EXTEND into
+       a series of shifts if either mode is a partial integer mode.
+
+Mon Feb 17 08:06:02 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * rs6000.c ({,non_}short_cint_operand): Use (unsigned HOST_WIDE_INT).
+       (non_add_cint_operand, includes_rshift_p): Likewise.
+       * rs6000.h (CONST_OK_FOR_LETTER_P): Likewise.
+       (LEGITIMATE_ADDRESS_INTEGER_P, LEGITIMIZE_ADDRESS): Likewise.
+
+Sun Feb 16 07:55:19 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)
+
+       * libgcc2.c (__negdi2, __lshrdi3, __ashldi3, __ashrdi3, __ffsdi2):
+       Use ANSI style definition with full prototype.
+       (__muldi3, __udiv_w_sdiv, __udivmoddi4, __divdi3, __moddi3) : Likewise.
+       (__udivmoddi4, __udivdi3, __cmpdi2, __ucmpdi2) : Likewise.
+       (__fixunstfdi, __fixtfdi, __fixunsxfdi, __fixxfdi) : Likewise.
+       (__fixunsdfdi, __fixdfdi, __floatdixf, __floatditf) : Likewise.
+       (__floatdidf, __floatdisf, __fixunsxfsi, __fixunsdfsi) : Likewise.
+       (__gcc_bcmp, __eprintf, gopen, gclose, __bb_init_file) : Likewise.
+       (__bb_init_trace_func, __clear_cache, mprotect) : Likewise.
+       (__enable_execute_stack, cacheflush, exit) : Likewise.
+       (find_exception_table, __find_first_exception_table_match) : Likewise.
+
+Sun Feb 16 07:52:02 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * 1750a.md (mulqihi3): Corrected.
+       (tst{hf,tqf}): Simplified.
+       (movqi): Removed redundant alternative.
+       (addqi-3,addqi-2,addqi-1): Set/Reset Bit patterns by C. Nettleton.
+       (many patterns): Introduced operand output modifiers d,t,b,B,w.
+       * 1750a.c (print_operand): New operand output modifiers d,t,b,B,w.
+       (simple_memory_operand): Removed.
+       (one_bit_set_p, which_bit): Added from C. Nettleton's m1750 config.
+
+Sun Feb 16 07:43:37 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c (special_symbol): Don't treat "L" in "L'...'" as identifier.
+       (check_macro_name, collect_expansion, rescan): Likewise.
+       * cpplib.c (special_symbol, check_macro_name, collect_expansion):
+       Likewise.
+
+       * cexp.y (parse_c_expression): Don't check for null lexptr
+       or *lexptr == 0.  If yyparse returns nonzero value, abort.
+
+       * cexp.y (yylex): Use is_space, not is_hor_space, to find keyword end.
+       (is_space): New decl.
+       (is_hor_space): Removed.
+       * cccp.c (is_space): Now external.
+       (is_hor_space): Now static.
+
+Sun Feb 16 04:55:11 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c, tree.h (decl_printable_name): Change arguments.
+       * c-common.c (declare_function_name): Reflect above change.
+       * final.c (final_start_function): Likewise.
+       * function.c (init_function_start): Likewise.
+       * toplev.c (decl_name): Likewise.
+       (announce_function): Likewise.
+       (v_message_with_decl): Likewise.
+       * dwarf2out.c (dwarf2_name): New fn, uses decl_printable_name.
+       (add_pubname): Use it.
+       (add_name_and_src_coords_attributes): Use it, add 
+       DW_AT_MIPS_linkage_name if appropriate.
+       (output_aranges): Use DW_AT_MIPS_linkage_name if present.
+
+Sat Feb 15 18:45:30 1997  J.T. Conklin  <jtc@cygnus.com>
+
+       * m68k.md (cmpsi): Added insn with appropriate constraints for
+       TARGET_5200; changed condition of existing insn to !TARGET_5200.
+
+Sat Feb 15 18:26:50 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k/hp320.h (PRINT_OPERAND_FLOAT): Removed.
+       (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
+       (PRINT_OPERAND): Turned off: use default.
+       * m68k/news.h (PRINT_OPERAND): Turned off: use default.
+       (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.
+       * m68k/tower-as.h (PRINT_OPERAND): Turned off: use default.
+       (ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
+       * m68k/crds.h (PRINT_OPERAND): Turned off: use default.
+       (ASM_OUTPUT_{FLOAT,DOUBLE}_OPERAND): Defined.
+       (SGS_NO_LI,STRUCTURE_SIZE_BOUNDARY,IMMEDIATE_PREFIX): Defined.
+       (NEED_PROBE): Defined instead of HAVE_probe and gen_probe.
+       (FUNCTION_{PRO,EPI}LOGUE): Do not access FPA registers.
+       * m68k.c (output_function_prologue): Add CRDS and MOTOROLA probe code.
+       (print_operand): Do not output '.' if CRDS.
+
+       * gcc.c (set_spec): Fix comment-in-comment typo.
+       
+Sat Feb 15 17:54:23 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * Makefile.in (COMPILERS): Moved before GCC_PASSES.
+       (GCC_PASSES): Use $(COMPILERS) instead of cc1$(exeext).
+
+Sat Feb 15 17:25:44 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * gcc.c (process_command): Allocate space for terminating null.
+
+Sat Feb 15 17:21:34 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vax/vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET.
+       * vax/vms.h (FUNCTION_PROLOGUE): Delete.
+
+Sat Feb 15 08:48:14 1997  Douglas B. Rupp  (rupp@gnat.com)
+
+       * configure: Fix setting of CC in no-symlink case.
+
+Sat Feb 15 08:42:17 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * expmed.c (expand_divmod): Prefer divmod in same mode over div
+       in wider mode.
+
+Sat Feb 15 08:27:50 1997  J"orn Rennecke  (amylaar@cygnus.co.uk)
+
+       * fold-const.c (fold): Don't assume a nonexplicit constant cannot
+       equal an explicit one.
+
+       * i386.md (zero_extendqi[hs]i2+3): Ensure operating on REG.
+
+Sat Feb 15 08:11:04 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure (i[3456]86-*-solaris2*): Correct tm.h filename in
+       stabs case.
+
+       * a29k.h (STORE_FLAG_VALUE): Write so works on both 32 and 64-bit host.
+
+Fri Feb 14 16:03:37 1997  Robert Lipe  <robertl@dgii.com>
+
+       * i386/t-sco5 (libgcc{1,2}-elf.a): correct target dependencies.
+
+Fri Feb 14 16:00:23 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+       * config/svr4.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Set 
+       current-section variable to text.
+
+Wed Feb 12 16:07:34 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * fixinc.irix: New file.
+       * configure (mips-sgi-irix[56]): Set fixincludes to fixinc.irix.
+
+Wed Feb 12 15:40:20 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (LIBGCC2_DEBUG_CFLAGS): New macro.
+       (LIBGCC2_CFLAGS): Use it.
+
+       * dwarfout.c (output_type): Do early exit only if TYPE_CONTEXT is NULL
+       or if TYPE_CONTEXT is another type (e.g. a nested type).
+
+Tue Feb 11 15:53:51 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (calc_live_regs): Exclude RETURN_ADDRESS_POINTER_REGNUM.
+
+       * sh.c (calc_live_regs): Need not save MACL/MACH when not live
+       or in leaf function.
+
+Mon Feb 10 14:46:32 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * stmt.c (group_case_nodes): Recognize more opportunities to
+       group case nodes.
+
+Sun Feb  9 14:05:48 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (assign_stack_temp): Clear MEM flags from reuse.
+
+Sat Feb  8 17:37:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * local-alloc.c (update_equiv_regs): Fix error in last change.
+
+Fri Feb  7 12:42:34 1997  Mike Stump  <mrs@cygnus.com>
+
+       * pa.h (RETURN_ADDR_RTX): Fix to ignore export stubs.
+       * pa.c (return_addr_rtx): Define.
+
+Fri Feb  7 13:56:56 1997  Doug Evans  <dje@cygnus.com>
+
+       * cse.c (invalidate_from_clobbers): Delete unnecessary test for
+       (clobber nil).
+
+       * toplev.c (main): Delete redundant settings of flag_no_inline
+       and warn_inline if not optimizating.
+
+Fri Feb  7 10:45:02 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * Makefile.in (stmp-multilib-sub): Add missing "else true"
+       clauses to work around make bug on some systems.
+
+Fri Feb  7 08:19:43 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * fold-const.c (const_binop): Don't call size_int if low < 0.
+
+       * function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
+       Fix error in last change.
+
+Thu Feb  6 17:09:17 1997  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (find_exception_handler_labels): Initialize label array
+       with zeroes.
+
+Wed Feb  5 22:11:55 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (post_ldwm): Fix typos.
+
+Wed Feb  5 15:57:42 1997  Doug Evans  <dje@cygnus.com>
+
+       * m68k/vxm68k.h (WCHAR_TYPE,WCHAR_TYPE_SIZE,SIZE_TYPE): Fix.
+       (PTRDIFF_TYPE): Define.
+
+Wed Feb  5 11:19:13 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload1.c (alter_reg): Don't ask assign_stack_local to round up
+       to a multiple of BIGGEST_ALIGNMENT, unless a register appears in a
+       paradoxical subreg.
+
+Tue Feb  4 19:29:40 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * reload.c (find_reloads_address_1, case POST_INC): Don't use
+       ADDR_TYPE here.
+
+Tue Feb  4 12:33:45 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * flow.c (life_analysis): Delete obvious no-op moves
+       which use SUBREGs.
+
+Mon Feb  3 20:00:35 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * jump.c (find_cross_jump): Don't allow old-style and volatile asms
+       to match.
+
+Mon Feb  3 15:51:31 1997  Doug Evans  <dje@cygnus.com>
+
+       * sparc/sol2.h (ASM_SHORT,ASM_LONG): Set to .uahalf/.uaword.
+       * sparc/sysv4.h (ASM_LONG): Define.
+       (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Use ASM_LONG.
+
+Mon Feb  3 13:01:46 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload.h (enum reload_type): Add RELOAD_FOR_INPADDR_ADDRESS and
+       RELOAD_FOR_OUTADDR_ADDRESS.
+       * reload.c (ADDR_TYPE): New macro.
+       (push_secondary_reload): Check for new reload types.
+       (combine_reloads): Likewise.
+       (find_reloads): Likewise.  Convert INPADDR_ADDRESS and
+       OUTADDR_ADDRESS to OPADDR_ADDR.  Check OPADDR_ADDR when looking
+       for merges.
+       (find_reloads_address): When reloading an address, use the
+       ADDR_TYPE macro to get the type of the new reload.
+       (find_reloads_address_1): Likewise.
+       (reload_when_needed_name): Add new reload types.
+       * reload1.c (reload): Add in_addr_addr and out_addr_addr fields to
+       insn_needs struct.  Use them for new reload types, and when
+       computing in_max and out_max.
+       (reg_used_in_inpaddr_addr): New static array.
+       (reg_used_in_outaddr_addr): New static array.
+       (mark_reload_reg_in_use): Handle new reload types.
+       (clear_reload_reg_in_use, reload_reg_free_p): Likewise.
+       (reload_reg_free_before_p, reload_reg_reaches_end_p): Likewise.
+       (reloads_conflict, merge_assigned_reloads): Likewise.
+       (emit_reload_insns): Likewise.
+       (choose_reload_regs): Save arrays for new reload types.
+
+Sun Feb  2 19:43:17 1997  Scott Christley <scottc@net-community.com>
+
+       * objc/selector.c (__sel_register_typed_name): Eliminate compiler
+       warnings with explicit cast.
+
+       * Add condition mutex support to the objc runtime.
+       * objc/thr-mach.c (objc_condition_{,de}allocate): New functions.
+       (objc_condition_{wait,broadcast,signal}): New functions.
+       * objc/thr-pthreads.c (objc_condition_{,de}allocate): New functions.
+       (objc_condition_{wait,broadcast,signal}): New functions.
+       * objc/thr-solaris.c (objc_condition_{,de}allocate): New functions.
+       (objc_condition_{wait,broadcast,signal}): New functions.
+       * objc/thr.h: Prototypes for new functions.
+
+       * objc/init.c (__objc_runtime_mutex): Eliminate leading underscore
+       from name of objc mutex and thread structures.
+       * objc/runtime.h: Likewise.
+       * objc/thr-{decosf1,irix,mach,os2,posix,pthreads,single}.c: Likewise.
+       * objc/thr-{solaris,win32}.c: Likewise.
+       * objc/thr.{c,h}: Likewise.
+
+       * Major reorganization of objc error handling.
+       * objc/Object.m (-error:): Call objc_error function instead of
+       using function pointer.
+       * objc/archive.c: Replace call to abort or __objc_fatal functions
+       with call to objc_error function throughout the complete file.
+       * objc/class.c (objc_get_class): Replace call to abort function
+       with call to objc_error function.
+       * objc/encoding.c (objc_sizeof_type, objc_alignof_type): Replace
+       call to abort function with call to objc_error function.
+       (objc_skip_typespec): Likewise.
+       * objc/init.c (init_check_module_version): Replace call to
+       abort function with call to objc_error function.
+       * objc/misc.c (objc_verror): New function.
+       (objc_fatal): Remove function.
+       (objc_set_error_handler): New function.
+       (_objc_error_handler): New global variable.
+       (__alpha__): Remove unneeded code.
+       (objc_error): Allow user specified error handler function to
+       trap and handle the objc error.  Added an error code parameter
+       which indicates the specific error that occured.
+       (objc_malloc, objc_atomic_malloc): Replace call to objc_fatal
+       function with call to objc_error function.
+       (objc_valloc, objc_realloc, objc_calloc): Likewise.
+       * objc/objc-api.h: Declare error handling functions and typedef
+       for user specified error handler function.  Define error codes
+       used by the runtime library.
+       * objc/runtime.h: Remove error handling declarations.
+       * objc/sendmsg.c (__objc_forward): Replace call to abort function
+       with call to objc_error function.
+       
+Sun Feb  2 19:42:52 1997  Thomas Baier <baier@ci.tuwien.ac.at>
+
+       * objc/hash.c (hash_delete): Step through the hash nodes
+       versus using hash_next to increase efficiency.
+       * objc/archive.c (__objc_finish_read_root_object): Use hash
+       table instead of list.
+
+Sun Feb  2 08:25:05 1997  Ovidiu Predescu  <ovidiu@net-community.com>
+
+       * objc-act.c (encode_aggregate_within): New function.
+       (encode_aggregate): Generates encodings for unions similar 
+       to those for structs except surrounded by parenthesis instead
+       of braces.
+
+Sun Feb  2 07:15:54 1997  Mat Hostetter  (mat@lcs.mit.edu)
+
+       * c-decl.c (start_function): Fix improper installation of last change.
+
+Sun Feb  2 06:50:55 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (output_scc_di): Add missing CC_STATUS_INIT.
+
+Sun Feb  2 06:39:55 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-typeck.c (process_init_element): When popping levels, don't
+       blow up if constructor_max_index not set due to previous error.
+
+       * combine.c (find_split_point, case SET): Fix error in last change.
+
+Sun Feb  2 06:28:56 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c (rescan): Insert a space after `.' as well,
+       to prevent accidental token-pasting (e.g. `.x' -> `.10').
+
+Sun Feb  2 06:08:14 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * 1750a.c (modregno_adjust): Fixed case when reg_renumber invalid.
+
+Sat Feb  1 19:11:08 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * m68k.md (movqi): Enable use of clr and st insns on TARGET_5200.
+       * m68k.c (output_move_simode_const): Likewise.
+
+Sat Feb  1 18:54:00 1997  Douglas B. Rupp  (rupp@gnat.com)
+
+       * gcc.c (process_command): Fix improper use of strncpy.
+
+Fri Jan 31 15:35:08 1997  Mike Stump  <mrs@cygnus.com>
+
+       * libgcc2.c: Remove extern for malloc and realloc.
+
+Fri Jan 31 17:08:11 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * local-alloc.c (update_equiv_regs): If a register which is
+       equivalent to some value is only used in one place, and we can't
+       substitute the value for the use, then move the register assignment
+       to just before the use.
+
+Fri Jan 31 15:57:25 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md (idiv,imul,fpmul): Added new functional units for pentiumpro.
+
+       * i386.c (pentiumpro_cost): Added new cost structure for pentiumpro.
+       (override_options): Set ix86_cost to appropriate cost structure.
+
+Thu Jan 30 09:34:26 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * m68k.md (stack adjust peepholes): Use lea instead of
+       add.w when adding 16 bit constants on all but TARGET_68040.
+
+Thu Jan 30 08:58:08 1997  Ralf Baechle  <ralf@waldorf-gmbh.de>
+
+       * function.c (TRAMPOLINE_ALIGNMENT): Provide default.
+       (expand_function_end): Use TRAMPOLINE_ALIGNMENT instead
+       of FUNCTION_BOUNDARY.
+       * varasm.c (TRAMPOLINE_ALIGNMENT): Provide default.
+       (assemble_trampoline_template): Use TRAMPOLINE_ALIGNMENT instead
+       of FUNCTION_BOUNDARY.
+
+Wed Jan 29 18:16:02 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.h (REG_CLASS_CONTENTS): Add rap to GENERAL_REGS and its
+       superclasses.
+
+       * sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for
+       immediate operands where appropriate.
+       (movsf_ie+1): Fail when loading anything but a MEM into
+       a floating point reguister.
+
+Wed Jan 29 16:00:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * varasm.c (force_const_mem): Set MARK instead of clearing it.
+       (output_constant_pool): Only mark constant pool if -O.
+       Check mark flag unconditionally.
+       (mark_constant_pool): Start by clearing all mark flags.
+
+       * tree.c (copy_node): Clear TREE_ASM_WRITTEN.
+
+       * flow.c (regno_uninitialized): Return 0 if reg is used for args.
+
+Wed Jan 29 15:23:59 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * combine.c (try_combine): Clear reg_n_refs if i2dest is not
+       mentioned in newi2pat.
+
+Tue Jan 28 16:00:23 1997  Stan Cox       (coxs@dg-rtp.dg.com)
+
+       From Robert Lipe <robertl@dgii.com> 
+       * i386/sco5.h (SCO_DEFAULT_ASM_COFF): Remove bytecode stuff.
+       (ASM_OUTPUT_ASCII): Use .ascii in both ELF and COFF modes.
+       (ASM_OUTPUT_SECTION_NAME): Handle alternate sections for COFF.
+       The OpenServer 5.0.0 assembler gives an error for section
+       names over 6 characters long, so we catch the "obvious" case
+       and shorten it.
+
+       * m88k.h (ASM_OUTPUT_SECTION_NAME): Undefine; fails
+       for exception sections.  The 88k ABI specifies 'section'
+       instead of '.section'.
+
+Mon Jan 27 13:32:46 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (shl_and_kind): Fix typo.
+       * sh.md (and_shl_scratch): Fix typo for length 8.
+
+Mon Jan 27 08:56:03 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * fixincludes: Fix incorrect forward structure declaration in
+       sys/time.h on hpux10.20.
+
+Mon Jan 27 09:05:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * combine.c (simplify_rtx): Don't do anything with if_then_else_cond
+       result if both one arm and the input are a comparison.
+       (simplify_{rtx,if_then_else,logical,shift_const}): Don't
+       test STORE_FLAG_VALUE with #if; properly test for just sign bit.
+       (num_sign_bit_copies, if_then_else_cond): Likewise.
+       * expmed.c (emit_store_flag): Properly test for STORE_FLAG_VALUE
+       of just sign bit.
+       * fold-const.c (fold): Don't make COND_EXPR when both expr and
+       one part are comparisons.
+       * a29k.h (STORE_FLAG_VALUE): Make negative.
+
+Fri Jan 24 16:42:26 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * varasm.c (struct pool_constant): Add mark field.
+       (force_const_mem): Clear mark field in new constant pool entry.
+       (output_constant_pool): Call mark_constant_pool.
+       (mark_constant_pool, mark_constants): New static functions.
+
+Thu Jan 23 15:04:17 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * cse.c (COST): Get the right cost for a SUBREG of a register when
+       truncation is free.
+
+Thu Jan 23 11:19:40 1997  Mike Stump  <mrs@cygnus.com>
+
+       * Makefile.in (objc-headers): Don't try and install the headers if
+       the objc directory has been removed.
+
+Wed Jan 22 13:26:25 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * i960.c (process_pragma): Call ungetc on the last character
+       that was read by the while loop, to make sure the parser sees it.
+
+Tue Jan 21 17:20:30 1997  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (output_toc): Move STRIP_NAME_ENCODING to common
+       code, so the test for vt's works with -mminimal-toc.
+
+Tue Jan 21 16:03:35 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (mark_all_temps_used): Set KEEP as well.
+
+Tue Jan 21 12:16:15 1997  Doug Evans  <dje@seba.cygnus.com>
+
+       * stor-layout.c (layout_record): Correct test for whether
+       field spans its unit of alignment in case where
+       field_size == type_align.
+
+Mon Jan 20 20:27:54 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.md (probe): Comment out.
+
+Sun Jan 19 20:54:45 1997  John F. Carr  <jfc@mit.edu>
+
+       * integrate.c (expand_inline_function): Handle a PARALLEL containing
+       a RETURN the same as a RETURN.
+
+Sun Jan 19 20:35:28 1997  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vmsconfig.com: Change all hardcoded references of "vax" to
+       use variable expansion instead.
+       (arch_indx, arch): New variables.
+
+       * vax.c (not_qsort):  Don't declare alloca.
+       * vax/xm-vms.h: Declare alloca here.
+       Do most of the VAX C-specific set up for DEC C.
+       #if DEC C, undefine QSORT_WORKAROUND and qsort.
+       * make-gcc.com, make-cccp.com, make-cc1.com:  Support building
+       with GNU C vs VAX C vs DEC C from the DCL command line.
+
+Sun Jan 19 17:20:50 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * 1750a.md (movh[if]-1): Corrected.
+       (movtqf-1): Deleted.
+       * 1750a.c (add_1_to_mem): Deleted.
+       (output_operand_address): Added output modifier 'A'.
+
+Sun Jan 19 17:17:54 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.md (ashrdi_const, ashrdi3): Allow 31 as shift count.
+
+       * m68k.h (CONST_OK_FOR_LETTER_P): Recognize 'N', 'O' and 'P'.
+       * m68k.md (rotl[shq]i3, strict_low_part rotl): Allow 'N', 'O'
+       or 'P' operands.
+
+Sun Jan 19 17:09:17 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md (addsi3): Fix previous change: {add,sub}qw should
+       be {add,sub}ql. For other uses of {add,sub}q don't check for address
+       register and always use {add,sub}ql.
+
+Sun Jan 19 15:05:42 1997  Peter Seebach  <seebs@solon.com>
+
+       * c-decl.c (start_decl): Add code for -Wmain.
+       (c_decode_option): Add -fhosted, -ffreestanding, and -Wmain.
+       * toplev.c (lang_options): Likewise.
+       * c-tree.h (warn_main, flag_hosted): New variables.
+
+Sun Jan 19 14:35:41 1997  Alex Garthwaite  (alex@samwise.cis.upenn.edu)
+
+       * fixinc.svr4: Fix problems with symlinks to ".".
+
+Sun Jan 19 14:21:46 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * loop.c (check_final_value): Handle insns with no luid's.
+
+Sun Jan 19 08:57:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.md (arg_home): Add CLOBBER of MEM and USE of arg regs.
+       * vms.h (SETUP_INCOMING_VARARGS): Delete duplicate definition.
+
+       * toplev.c (set_float_handler): Set up signal catcher on first call
+       in case a front end has disabled it.
+
+       * cccp.c, cexp.y: #define __attribute__ to be null if 
+       compiling with GCC older than 2.7, not 2.6.
+
+       * toplev.c (main): If PREFERRED_DEBUGGING_TYPE used and set
+       to NO_DEBUG, say debugging not supported.
+       * mips/sni-svr4.h (PREFERRED_DEBUGGING_TYPE): Undefine.
+
+       * i386/xm-cygwin32.h (DIR_SEPARATOR): Define.
+
+       * explow.c (convert_memory_address, case SYMBOL_REF):
+       Copy CONSTANT_POOL_ADDRESS_P.
+       * integrate.c (save_constants): Make (address (const ..)) to record
+       both modes.
+       (copy_for_inline, copy_rtx_and_substitute, restore_constants): Use
+       both modes when restoring constant pool entry for ADDRESS.
+
+       * alpha.h (MINIMUM_ATOMIC_ALIGNMENT): New macro.
+
+       * function.c (instantiate_virtual_regs_1, case USE, case CLOBBER):
+       Properly handle case of shared MEM whose replacement is not valid.
+
+Sat Jan 18 14:08:31 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.c (get_unwidened): Don't crash if FIELD_DECL not layed out.
+
+       * varasm.c (const_hash): Treat NON_LVALUE_EXPR like CONVERT_EXPR.
+       (compare_constant_1, copy_constant, bc_assemble_integer): Likewise.
+       (const_hash, compare_constant_1): Use switch, not if-then-else.
+
+Fri Jan 17 17:10:20 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.h (STACK_POINTER_OFFSET): Don't define.
+
+Thu Jan 16 14:51:03 1997  Bob Manson  <manson@charmed.cygnus.com>
+
+       * cplus-dem.c: Fix indenting; note that this file also lives in
+       libiberty.
+       (do_type, case 'M'): Check for a template as well as a class.
+
+Thu Jan 16 15:08:26 1997  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * gcc.c (cross_compile): Change to be a char * like all of the
+       other specs.
+       (process_command): Change how cross_compile is tested.
+       (main): Likewise.
+       (struct spec_list): Merge with the format used by EXTRA_SPECS.
+       Add name length field to speed up repeated calls to strcmp.  Add
+       flag to say spec was allocated.  Add pointer to char * so that
+       static spec fields can be updated.
+       (extra_specs): Use struct spec_list as type.
+       (static_specs): Static list of predefined specs.
+       (init_specs): New function, initialize the specs list.  Link in
+       the default specs and any specs defined via EXTRA_SPECS.
+       (set_spec): No longer special case predefined specs.
+       (process_command,validate_all_switches): Ditto.
+       (process_command): Call init_specs for -dumpspecs.
+       (do_spec_1): Use name length field to avoid calling strncmp when
+       it is going to fail.
+       (main): Call init_spec.  Don't handle EXTRA_SPECS here.
+
+Thu Jan 16 17:07:54 1997  Eddie C. Dost  <ecd@skynet.be>
+
+       * configure: Add sparc-linux{,aout} support.
+       * ginclude/va-sparc.h: Likewise.
+       * sparc/linux.h: New file.
+       * sparc/linux-aout.h: New file.
+       * sparc/xm-linux.h: New file.
+
+Thu Jan 16 16:19:13 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (sparc-*-aout*): Add libgloss.h to tm_file.
+       (sparclite-*-coff*): Change "= to =".
+
+Thu Jan 16 12:53:15 CST 1997  Joel Sherrill <joel@OARcorp.com>
+
+       * rs6000/rtems.h: Change from being sysv4 based to being eabi based.
+
+Thu Jan 16 13:40:51 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.h (LINKER_ENDIAN_SPEC): Define.
+       (LINK_SPEC): Add linker_endian_spec.
+       (EXTRA_SPECS): Add linker_endian_spec.
+
+Thu Jan 16 08:02:13 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.md (bCC, inverted bCC): Use bCC .+X instead of bCC 0f.
+
+Wed Jan 15 14:06:28 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload.h (reload_address_base_reg_class): Declare.
+       (reload_address_index_reg_class): Declare.
+       * reload1.c (reload_address_base_reg_class): Define.
+       (reload_address_index_reg_class): Define.
+       (init_reload): Initialize reload_address_{base,index}_reg_class.
+       * reload.c (find_reloads_address): Use
+       reload_address_base_reg_class rather than BASE_REG_CLASS.  Use
+       reload_address_index_reg_class rather than INDEX_REG_CLASS.
+       (find_reloads_address_1): Likewise.
+
+Tue Jan 14 15:26:33 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload.c (REGNO_MODE_OK_FOR_BASE_P): Define if not defined.
+       (REG_MODE_OK_FOR_BASE_P): Define if not defined.
+       (find_reloads_address): Use REG[NO]_MODE_OK_FOR_BASE_P rather than
+       REG[NO]_OK_FOR_BASE_P.
+       (find_reloads_address_1): Likewise.
+       Add mode parameter; change all callers.
+
+       * reload1.c (eliminate_regs_in_insn): Handle more cases when
+       eliminating the frame pointer to the hard frame pointer.
+
+       * varasm.c (force_const_mem): Copy a CONST_INT rtx like a CONST rtx.
+
+       * varasm.c (assemble_end_function): Call
+       output_after_function_constants.
+       (after_function_constants): New static variable.
+       (output_after_function_constants): New static function.
+       (output_constant_def): Check CONSTANT_AFTER_FUNCTION_P.
+
+Mon Jan 13 16:44:40 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000/aix41.h (CPP_PREDEFINES): Add -D_AIX41.
+
+Sun Jan 12 20:54:01 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * libgloss.h (LINK_SPEC): Delete.
+       (STARTFILE_SPEC): Delete spurious newline.
+
+Sat Jan 11 00:13:03 1997  Torbjorn Granlund  <tege@quiet.matematik.su.se>
+
+       * mips.md (norsi3, nordi3): Use canonical RTL.  Prepend `*' to pattern
+       name.  Don't match immediates.
+       (norsi3_const, nordi3_const): New patterns.
+       (anddi3, iordi3, xordi3): Test TARGET_64BIT, not mips_isa
+       in length attribute calculation.
+       * mips.c (complemented_arith_operand): New function.
+       (print_operand): Handle `e' for CONST_INT.
+       * mips.h (PREDICATE_CODES): Add complemented_arith_operand.
+       
+Fri Jan 10 14:11:53 1997  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000/aix41.h (SUBTARGET_SWITCHES): Add threads and pe.
+       (CPP_SPEC): Add mpe and mthreads cases.
+       (LIB_SPEC): Add mpe and mthreads cases to variant from rs6000.h.
+       (STARTFILE_SPEC): Add mpe and mthreads support.
+
+Fri Jan 10 07:12:26 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * i386/cygwin32.h (LINK_SPEC): New definition.
+
+       * Makefile.in (FLAGS_TO_PASS): Add STAGE_PREFIX, set by configure.
+       * configure: Initialize exeext.
+       Update STAGE_PREFIX in Makefile.
+
+       * dwarfout.c (dwarfout_line): Push to LINE_SECTION after calling
+       lookup_filename.
+
+Thu Jan 9 12:06:04 1997  Jim Wilson  <wilson@cygnus.com>
+
+        * i386.md (addsidi3_2): Add & to operand 0 of alternative 5.
+
+Thu Jan 9 12:06:04 1997  Stan Cox  <coxs@dg-rtp.dg.com>
+
+        From Linus Torvalds and Mat Hostetter:
+       * i386.c (i386_sext16_if_const): Added to sign extend an HImode constant.
+       (i386_aligned_reg_p): Added to tell if an rtx is aligned.
+       (i386_cc_probably_useless_p): Don't trust cc bits.
+       * i386.h (TARGET_ZERO_EXTEND_WITH_AND): Don't do this for p6.
+       * i386.md (cmpsf_ccfpeq+2): Use SImode test instruction.
+       (movhi+1): Use movz instead of mov on p6.
+       (addsi3): Add 128 by subtracting -128.
+       (zero_extendhisi2): Use SImode move if aligned.
+       (addhi3): Likewise.
+       (subhi3): Likewise.
+       (andhi3): Likewise.
+       (iorhi3): Likewise.
+       (xorhi3): Likewise.
+
+Tue Jan  7 16:58:27 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * c-parse.in (extension): New rule for __extension__.
+       (extdef, unary_expr, decl, component_decl): Use it.
+
+Mon Jan  6 15:44:37 1997  Oliver Kellogg  (oliver.kellogg@space.otn.dasa.de)
+
+       * 1750a.c: Now includes regs.h.
+       ({movcnt,mod}_regno_adjust): Corrected typos.
+       * 1750a.md (movhi): Corrected case of moving constant to memory.
+
+Mon Jan  6 08:00:57 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * mips.h: Delete redundant definitions of compiler and library fns.
+
+       * dwarfout.c (type_attribute): Ignore any subtype for now.
+
+       * fold-const.c (operand_equal_p): Rework to consider two
+       expressions that have embedded identical SAVE_EXPRs as
+       equivalent; also handle some more cases.
+
+Sun Jan  5 23:54:34 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (pic_load_label): Fix test for using just an
+       ldo rather than an addil;ldo sequence to load the label's
+       address.
+
+Sun Jan  5 07:26:47 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (expand_expr, case COMPONENT_REF): Fix error in last
+       change: don't suppress conversion if just EXPAND_SUM.
+
+Sat Jan  4 18:44:01 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.h (struct tree_decl): saved_insns.i is HOST_WIDE_INT.
+
+       * fold-const.c (const_binop): Rework to only make constants in
+       one place; always use size_int if small enough and of sizetype.
+       (size_int): Call force_fit_type.
+       (fold): Avoid ever changing type of input tree.
+
+       * expr.c (get_inner_reference): Fix type error.
+       (expand_expr, case COMPONENT_REF): Don't convert if modifier
+       is EXPAND_CONST_ADDRESS, EXPAND_SUM, or EXPAND_INITIALIZER.
+       * tree.c (staticp, case COMPONENT_REF, BIT_FIELD_REF): Not
+       static if bitfield.
+
+       * expr.c (expand_expr, case COMPONENT_REF):  If taking value
+       from a CONSTRUCTOR, must mask/sign-extend if bitfield.
+       (expand_builtin, case BUILT_IN_LONGJMP): Pass type, not IDENTIFIER,
+       to second arg of RETURN_POPS_ARGS.
+
+       * expr.c (expand_expr, case COND_EXPR): Add additional cases
+       to "singleton" cases.
+       * tree.c (integer_pow2): Mask value to width of type.
+       (tree_log2): New function.
+
+       * expmed.c (store_fixed_bit_field): If not SLOW_UNALIGNED_ACCESS,
+       treat everything as maximally aligned.
+
+       * combine.c (find_split_point, case SET): If SET_SRC is NE and
+       STORE_FLAG_VALUE is -1, see if we can convert into NEG of shift.
+       (force_to_mode, case NE): Make condition stricter.
+
+       * calls.c (emit_library_call_value): Remove redundant check for
+       outmode != VOIDmode.
+
+Sat Jan  4 08:12:16 1997  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * Optimizations from John Vickers (john@rhizik.demon.co.uk):
+       * m68k.c (output_function_{pro,epi}logue): Use addq/subq when
+       adjusting stack pointer by small displacements.
+       * m68k.md (addsi3, addhi3): Use two addqw (or subqw) insns when
+       adding (or subtracting) small integer constants (8 < N <= 16) to
+       both address and data registers.
+
+Sat Jan  4 07:06:07 1997  Kamil Iskra  <iskra@student.uci.agh.edu.pl>
+
+       * loop.c (basic_induction_var): Return 0 if SUBREG is not a
+       promoted variable.
+
+Sat Jan  4 06:22:36 1997  Doug Rupp  (rupp@gnat.com)
+
+       * alpha.c (vmskrunch): Try to not chop trailing uppercase letters.
+       * alpha/vms.h (ENDFILE_SPEC): Use "gnu", not "gnu_cc".
+
+       * cccp.c (PRINTF_PROTO): Use __printf__ in __attribute__, not printf.
+       * cexp.y (PRINTF_PROTO): Likewise.
+
+Fri Jan  3 09:01:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
+
+       * alpha.md (cmov): Fix operand numbers in case involving DF target,
+       DF comparison, and SF source.
+
+Fri Jan  3 08:19:46 1997  Paul Eggert  <eggert@twinsun.com>
+
+       * cpplib.c (macroexpand): Delete any no-reexpansion marker following
+       identifier at beginning of an argu concatenated with what precedes it.
+
+Fri Jan  3 07:59:21 1997  Ken Rose  (rose@netcom.com)
+
+       * reorg.c (fill_slots_from_thread): Skip moved insn in all three cases.
+
+Fri Jan  3 07:51:44 1997  Bob Manson  <manson@cygnus.com>
+
+       * function.c ({push,pop}_function_context_to): Save and restore
+       current_function_args_info.
+       * function.h (struct function): New field args_info.
+
+Fri Jan  3 06:55:09 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * jump.c (rtx_equal_for_thread_p): Return 0 for floating-point.
+
+       * reload.c (find_reloads): If replaced a PLUS or MULT with a
+       simple operand, start over again.
+
+       * va-alpha.h: Check for __VMS__, not VMS.
+
+Thu Jan  2 08:52:51 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure: Finish restoring change of default of objc threads to
+       "single" for Linux.
+
+Mon Dec 30 17:03:46 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (fmpy_operands): Remove.  No longer needed.
+       (combinable_add, combinable_copy, combinable_fmpy): Likewise.
+       (combinable_fadd, combineable_fsub): Likewise.
+       (pa_reorg): Call pa_combine_instructions.
+       (pa_combine_instructions): Combine instructions to make things
+       like fmpyadd and fmpysub.
+       (pa_can_combine_p): Helper function for pa_combine_instructions.
+       * pa.md (pa_combine_type): New attribute.  Set it appropriately
+       for various insns.
+       (define_delays): Use a separate define_delay for unconditional
+       branches.
+       (fmpyadd, fmpysub peepholes): Remove, no longer needed.
+       (fmpyadd, fmpysub insns): Add variant with fadd/fsub first,
+       then the fmpy.
+
+Mon Dec 30 14:43:51 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * reg-stack.c (subst_stack_regs_pat): Set src_note explicitly, instead
+       of using invalid aggregate initialization.
+
+       * print-tree.c (print_node): Don't try to print nonexistent
+       TYPE_ATTRIBUTES field of a decl node.
+
+1996-12-30  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>
+
+       * config.sub: Handle hiuxmpp as system type.
+
+Thu Dec 26 13:33:27 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (init_v4_pic): Explicitly set the length.
+
+Mon Dec 23 19:39:38 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.h (FUNCTION_ARG_REGNO_P): Correct for TARGET_SOFT_FLOAT and
+       TARGET_FLOAT64 cases.
+
+       * integrate.c (function_cannot_inline_p): Reject function with
+       PARALLEL result.
+       (expand_inline_function): Abort if function result not handled.
+
+Sat Dec 21 04:02:46 1996  Jason Merrill  <jason@gerbil.cygnus.com>
+
+       * mips.c (save_restore_insns): Mark large frame setup insns
+       as frame-related.
+       (mips_expand_prologue): Likewise.
+
+       * dwarf2out.c (dwarf2out_frame_debug): Support MIPS large frames.
+       (add_bound_info): Use default lower bounds.
+       Handle simple variable bounds with a DIE ref.
+       Don't generate a NULL loc descr.
+       (add_subscript_info): Always add lower bound.
+       (gen_formal_parameter_die): Always equate_decl_number_to_die.
+       (gen_variable_die): Likewise.  Don't use the old die for automatic
+       variables.
+
+Wed Dec 18 10:23:46 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (notice_update_cc): Enable this code.
+       * mn10300.h (CC_OVERFLOW_UNUSABLE): Define.
+       * mn10300.md (tstsi): Use "set_zn_c0" instead of "set" for cc status.
+       (addsi3 pattern): Break "inc" into two different alternatives
+       since "inc dn" sets cc0, but "inc an" does not.
+       (multiply and divide patterns): Fix cc status.
+       (bCC, inverted bCC): Restore any comparison which needs the
+       overflow bits when CC_OVERFLOW_UNUSABLE is set.
+       (zero and sign extensions): Fix cc status.
+       (movm_store): Likewise.
+
+Tue Dec 17 15:02:44 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sched.c (update_flow_info): When add REG_DEAD notes for dest of
+       last insn, add check for global_regs.
+
+Tue Dec 17 11:07:26 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/win-nt.h (HAS_INIT_SECTION): Delete, so that __main is
+       called from main.
+
+Mon Dec 16 15:28:44 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * combine.c (nonzero_bits): Ifdef out calls to num_sign_bit_copies.
+       Add dummy define/undef for num_sign_bit_copies.
+
+       * dwarfout.c (location_or_const_value_attribute, case CONCAT): Add.
+
+       * combine.c (simplify_comparison): Use mode_width as shift count
+       only if it is less than or equal to HOST_BITS_PER_WIDE_INT.
+
+Mon Dec 16 10:10:11 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c (expand_epilogue): Restore registers in the
+       "ret" instruction instead of a separate movm instruction.
+       Support possible stack deallocation in "ret" instruction too.
+       * mn10300.md (return_internal): Use "ret" instead of "rets";
+       restore registers and deallocate stack as needed.
+       (load_movm): Delete unused pattern.
+
+       * mn10300.h (SMALL_REGISTER_CLASSES): Define.
+
+Fri Dec 13 14:46:54 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (dect): Rewrite pattern so that it can be combined.
+
+Fri Dec 13 13:14:51 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * varasm.c (output_constant_pool): If ASM_OUTPUT_POOL_EPILOGUE is
+       defined, call it.
+
+Thu Dec 12 20:04:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * rtl.h (RTX_FRAME_RELATED_P): New macro.
+       (struct rtx_def): Add frame_related bitfield.
+       * final.c (final_scan_insn): Call dwarf2out_frame_debug.  
+       Don't call dwarf2out_begin_function.
+       (final): Initialize dwarf2out_frame_debug.
+       * dwarf2out.c (dwarf2out_begin_function): Remove.
+       (dwarf2out_init): Use INCOMING_RETURN_ADDR_RTX.
+       (DWARF_CIE_DATA_ALIGNMENT): Generalize.
+       (DWARF_FRAME_REGNUM): Don't add 1.
+       (decode_cfi_rtl): Lose.
+       (dwarf2out_def_cfa): Now takes reg and offset directly.
+       (reg_save): Likewise.
+       (dwarf2out_reg_save): Now takes offset.
+       (initial_return_save): Grok INCOMING_RETURN_ADDR_RTX.
+       Replaces dwarf2out_return_save.
+       (dwarf2out_cfi_label): New fn.
+       (add_fde_cfi): Use it.
+       (dwarf2out_frame_debug): New fn.
+       * mips.h (DWARF_FRAME_REGNUM): Tweak r31.
+       (INCOMING_RETURN_ADDR_RTX): Define.
+       * mips.c (mips_expand_prologue): Set RTX_FRAME_RELATED_P as needed.
+       (save_restore_insns): Likewise.
+       * i386.c (ix86_expand_prologue): Likewise.
+       * i386.h (INCOMING_RETURN_ADDR_RTX): Define.
+       (DWARF_FRAME_RETURN_COLUMN): Define.
+
+       * dwarf2out.c (add_AT_long_long): Renamed from add_AT_double for
+       clarity.
+       (print_die): Adjust.
+       (add_AT_float): New fn.
+       (add_const_value_attribute): Support fp values.
+       (size_of_die): Use blocks for long_long and fp values.
+       (value_format): Likewise.
+       (output_die): Likewise.
+       (output_loc_operands): Don't support DW_OP_const8?.
+
+Thu Dec 12 19:49:09 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * varasm.c (CONSTANT_POOL_BEFORE_FUNCTION): Define if not
+       defined.
+       (assemble_start_function): Check CONSTANT_POOL_BEFORE_FUNCTION
+       to decide whether to call output_constant_pool.
+       (assemble_end_function): Likewise.
+
+       * calls.c: Check SMALL_REGISTER_CLASSES at run time as well as at
+       compile time.
+       * combine.c, cse.c, function.c, jump.c, local-alloc.c: Likewise.
+       * loop.c, reload.c, reload1.c: Likewise.
+       * dsp16xx.h (SMALL_REGISTER_CLASSES): Define with value.
+       * h8300.h (SMALL_REGISTER_CLASSES): Likewise.
+       * i386.h (SMALL_REGISTER_CLASSES): Likewise.
+       * pdp11.h (SMALL_REGISTER_CLASSES): Likewise.
+       * sh.h (SMALL_REGISTER_CLASSES): Likewise.
+
+Thu Dec 12 15:25:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (sysv call insns): If flag_pic add @plt suffix.
+
+       * rs6000.md (fix_truncdfsi2_store): Fix offsets > 32k.
+
+       * rs6000/t-ppccomm: New file for common parts of embedded and
+       System V target Makefile support.
+
+       * rs6000/t-ppcos: New file for System V OS target Makefile
+       support.
+
+       * rs6000/t-solaris: Delete, merge into rs6000/t-ppcos.
+
+       * rs6000/t-{ppc,ppcgas}: Only keep the multilib specific parts,
+       moving the rest to rs6000/t-ppccomm.
+
+       * configure (powerpc*-*-*): For embedded and System V
+       configurations, add rs6000/t-ppccomm.  For Linux and Solaris, use
+       t-ppcos.
+
+       * ginclude/ppc-asm.h (cr*, f*): Add new macros for register names.
+
+       * rs6000/sol-c0.c (_start): Fix uninitialized data bug.
+
+       * rs6000.md (init_v4_pic): Add @local to call.
+       (icbi,dcbst,sync,isync): Delete PowerPC cache control insns.
+
+       * rs6000/sysv4.h (ASM_SPEC): On explicit -mcall-solaris, pass
+       -msolaris to the assembler.
+
+       * rs6000.c (rs6000_sync_trampoline): Delete.
+       (rs6000_trampoline_template): Aix & System V don't need template now.
+       (rs6000_initialize_trampoline): For System V, call the function
+       __trampoline_setup to set up the trampoline.
+
+       * rs6000.h (TRAMPOLINE_TEMPLATE): Delete here.
+       * rs6000/win-nt.h (TRAMPOLINE_TEMPLATE): Add it here.
+
+       * rs6000/tramp.asm: New file, setup trampolines properly on System
+       V systems, properly flushing the caches.
+
+Thu Dec 12 10:53:10 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * reorg.c (fill_slots_from_thread): Don't call eligible_for_delay
+       with an insn with asm operands.
+
+       * expmed.c (emit_store_flag_force): Fix typos/thinkos.
+
+Thu Dec 12 08:09:20 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * i386.c (i386_return_pops_args): Libcalls ignore TARGET_RTD.
+
+Thu Dec 12 07:56:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.h (maybe_get_identifier): New declaration.
+
+       * calls.c (emit_library_call): Don't pass VOIDmode to type_for_mode.
+
+       * va-alpha.h: Add definitions for VMS; they differ from Unix.
+
+       * Makefile.in (stamp-objlist): Handle first character of object 
+       file being a digit.
+
+       * 1750a.h (function_arg, {movcnt,mod}_regno_adjust): Add decls.
+       (branch_or_jump): Likewise.
+       (FUNCTION_ARG): Remove cast of function_arg result to rtx.
+       * 1750a.md: Remove unneeded casts to char *.
+
+Thu Dec 12 05:55:27 1996  Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * arm.c (arm_gen_constant, case [IX]OR): Don't invert constant if
+       loading into temporary.
+
+Wed Dec 11 18:57:21 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * toplev.c (rest_of_compilation): Make sure unwinder RTL is saved.
+
+       * collect2.c (write_c_file): Wrap the ctor/dtor lists and fns
+       with `extern "C" { ... }'.
+
+Wed Dec 11 17:46:48 1996  John F. Carr  <jfc@mit.edu>
+
+       * tree.h (tree_decl): Reorder field declarations to reduce size
+       on 64 bit machines.
+
+       * combine.c (try_combine): When splitting an insn, check for the
+       new I2 setting a SUBREG.
+
+Wed Dec 11 17:00:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.c (print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of
+       using "%ld".
+       (output_prolog): Don't print useless comment for VMS.
+
+       * alpha.c (output_prolog): SIZE is now HOST_WIDE_INT.
+       * alpha.md (mov[hq]i unnamed): Split up for TARGET_BYTE_OPS and not.
+
+       * function.c (fixup_var_refs_1, case ZERO_EXTRACT): Don't call
+       fixup_memory_subreg if no longer SUBREG of MEM.
+
+Wed Dec 11 14:10:48 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * mn10300.c: New file for Matsushita MN10300 port.
+       * mn10300.h, mn10300.md, t-mn10300, xm-mn10300.h: Likewise.
+       * config.sub: Recognize mn10300 as a basic machine type.
+       * configure: Similarly.
+       * ginclude/stdarg.h: mn10300 is little endian.
+       * ginclude/varargs.h: Likewise.
+
+Wed Dec 11 09:09:10 1996  Nagai Takayuki <nagai@ics.es.osaka-u.ac.jp>
+
+       * libgcc2.c (cacheflush): Add SONY NEWS-OS 4.2 version.
+
+Wed Dec 11 09:01:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * calls.c (emit_library_call, emit_library_call_value):
+       Don't pass an identifier node as function type for
+       library functions, but rather build a function type that
+       has a return type with the correct mode.
+       * i386.c (i386_return_pops_args): Don't test for IDENTIFIER_NODE.
+       * i386/isc.h (obsolete RETURN_POPS_ARGS): Test first argument
+       for IDENTIFIER_NODE.
+       * i386/next.h (RETURN_POPS_ARGS): Likewise.
+       * i386/sco.h (RETURN_POPS_ARGS): Likewise.
+       * i386/sco5.h (RETURN_POPS_ARGS): Likewise.
+       * i386/scodbx.h (RETURN_POPS_ARGS): Likewise.
+       * m68k.h (RETURN_POPS_ARGS): Likewise.
+       * ns32k.h (RETURN_POPS_ARGS): Likewise.
+       * pyr.h (RETURN_POPS_ARGS): Likewise.
+       * gmicro.h (RETURN_POPS_ARGS): Likewise; fix typo.
+
+Tue Dec 10 17:36:47 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * Add optimizations from John Vickers (john@rhizik.demon.co.uk)
+       * m68k.h (TARGET_CPU32): New macro.
+       * m68k.md (add[hs]i3): Only use two addq.w or subq.w instructions
+       when adding or subtracting constants 8 < N < 16 on TARGET_CPU32.
+       Use lea instead of add.w when adding 16 bit constants to address
+       registers on all but TARGET_68040.
+       * m68k.c (output_function_{pro,epi}logue): Use lea instead of add.w
+       when adjusting stack pointer on all but TARGET_68040.
+       
+Tue Dec 10 15:55:23 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * optabs.c (emit_unop_insn): Treat ZERO_EXTEND like SIGN_EXTEND.
+
+Tue Dec 10 13:47:24 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+       * combine.c (combinable_i3pat): Bring back to sync with can_combine_p.
+
+       * sh.h (ADJUST_INSN_LENGTH): Don't break from loop when LOOP_BEG found.
+       Calculate padding in new variable pad.
+
+Mon Dec  9 18:00:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (output_uleb128): Output the value in a human-readable
+       comment.
+       (output_sleb128): Likewise.
+       (various): Adjust.
+       (output_call_frame_info): Only output info if it's interesting.
+       (add_src_coords_attributes): New fn.
+       (add_name_and_src_coords_attributes): Split out from here.
+       (gen_enumeration_type_die): Add src coordinates.
+       (gen_struct_or_union_type_die): Likewise.
+       (dwarf2out_finish): Call output_call_frame_info for all targets.
+
+Thu Dec  5 11:25:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (add_pure_or_virtual_attribute): Only add 
+       AT_containing_type if -g2 or higher.
+
+       * dwarf2out.c (gen_struct_or_union_type_die): Make sure that
+       the type for AT_containing_type has been generated.
+       (gen_decl_die): Likewise.
+
+       * dwarf2out.c (type_tag): Check DECL_IGNORED_P.
+       (add_pure_or_virtual_attribute): Check DECL_VINDEX instead.
+       (scope_die_for): Likewise.
+       * dwarfout.c (type_tag): Likewise.
+
+Wed Dec  4 22:51:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (decode_cfi_rtl): Support getting a CONST_INT.
+       (dwarf2out_begin_function): Adjust.
+       (reg_save): Divide offset by the alignment.
+       (output_cfi): Support having more than one advance_loc.
+       (output_call_frame_info): Re-initialize current_label.
+       (dwarf2out_begin_prologue): Initialize current_label to NULL.
+       (lookup_cfa, lookup_cfa_1): New fns.
+       (dwarf2out_def_cfa): Call lookup_cfa.
+       (dwarf2out_finish): Don't generate CIE CFIs.
+       (dwarf2out_init): Generate them here.
+       (DWARF_FRAME_RETURN_COLUMN): Use PC_REGNUM.
+
+       (add_pure_or_virtual_attribute): Note virtual context.
+       (gen_formal_parameter_die): Return the die.
+       (gen_formal_types_die): Set AT_artificial on `this'.
+       (gen_subprogram_die): Add AT_accessibility.
+       (gen_variable_die): Likewise.
+       (gen_field_die): Likewise.  Don't generate location attribute for
+       union members.
+       (gen_struct_or_union_type_die): Note where our vtable lives.
+       (gen_decl_die): Handle anonymous union fields.
+       (dwarf2out_decl): Always output `bool'.
+
+Mon Dec  2 03:55:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * final.c (final_end_function): Don't call dwarf2out_end_function.
+
+       * dwarf2out.c (output_line_info): Emit special opcodes for each line
+       entry, even if the line number doesn't change.
+       (pend_type, output_pending_types_for_scope): New fns.
+       (gen_struct_or_union_type_die): Use them to defer generating member
+       dies if we're in the middle of some other context.
+       (gen_type_die): Still put nested types in the right place.
+       (dwarf2out_decl): Call output_pending_types_for_scope.
+
+       * dwarf2out.c (dw_fde_struct): Replace end_prologue, begin_epilogue
+       with current_label.
+       (DWARF_CIE_INSN_SIZE, DWARF_CIE_SIZE): Remove.
+       (DWARF_CIE_HEADER_SIZE): The size without the initial insns.
+       (size_of_cfi): Revert.
+       (decode_cfi_rtl, add_fde_cfi, dwarf2out_def_cfa, reg_save,
+       dwarf2out_reg_save, dwarf2out_return_save): New fns.
+       (dwarf2out_begin_function): Use them to generate CFIs.
+       (dwarf2out_finish): Use them to generate E CFIs.  
+       Don't set next_fde_offset.
+       (calc_fde_sizes): Initialize cie_size.
+       (output_call_frame_info): Don't generate CIE CFIs.
+       (dwarf2out_end_function): Remove.
+
+       * tree.c (maybe_get_identifier): New fn.
+       * varasm.c (assemble_name): Use it instead of get_identifier.
+
+Fri Nov 29 15:13:39 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * jump.c (jump_optimize): Don't move initialization if there is a
+       label between it and the jump for if (foo) bar++ to bar += (foo !=0)
+       
+Wed Nov 27 16:21:14 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+       
+       * Remove change of Oct 4.
+       * i386.h (outer_function_chain): Remove.
+       (current_function_calls_alloca): Remove.
+       (rtx_equal_function_value_matters): Remove.
+       (N_REGS_USED, N_ALLOCATABLE_REGISTERS): Remove.
+       * i386.md (adddi3_1, subdi3_1): Remove.
+       (adddi3, subdi3): Revert.
+       (movsf, movsf_mem, movsf_normal, movdf, movdf_mem, movdf_mem+1):
+       Likewise. 
+       (movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
+       (adddi3_1, subsidi3, subdi3_1): Likewise.
+       (addsidi3_1, addsidi3_2, subsidi3): Likewise.
+       (addsidi3_1, addsidi3_2, adddi3, subsidi3): Disable the problem
+       reload alternatives. 
+       
+Wed Nov 27 16:21:14 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * i386.md (ashldi3_non_const_int, ashrdi3_non_const_int):
+       Use a hidden branch to handle shifts > 32 bit.
+       (lshrdi3_non_const_int): Likewise.
+       (floatdixf2): Don't use unnecessary XFmode operation.
+
+Wed Nov 27 15:23:41 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (assemble_variable): Don't emit DWARF.
+
+       * toplev.c (rest_of_type_compilation): Don't emit DWARF.
+       (main): Just let -gdwarf mean DWARF v1; remove -gdwarf-1.
+
+       * dwarfout.c (decl_class_context): New fn.
+       (output_global_subroutine_die): Fix declaration case.
+       (output_global_variable_die): Likewise.
+       (output_type): Note when we are in a class defn.  If we're a nested
+       type and our context hasn't been written, do that.  Do early exit
+       for nested types.
+       (output_decl): Output the class context for fns and vars.
+       Don't emit detailed parm info for a fn declaration.
+       Use TYPE_DECL_IS_STUB, is_redundant_typedef.
+       (type_ok_for_scope): Support emitting nested types later.
+       (is_redundant_typedef): New fn.
+       (TYPE_DECL_IS_STUB): New macro.
+       (output_compile_unit_die): Check use_gnu_debug_info_extensions.
+       (output_local_subroutine_die, output_global_subroutine_die,
+       dwarfout_begin_function, dwarfout_end_function, dwarfout_line,
+       generate_macinfo_entry, dwarfout_init, dwarfout_finish): Likewise.
+
+       * dwarf2out.c (decl_class_context): Static.
+       (lookup_type_die): Use TYPE_SYMTAB_POINTER.
+       (equate_type_number_to_die): Likewise.
+       (gen_subprogram_die): If we're in class context, it's a decl.
+       (gen_variable_die): Likewise.
+       (gen_decl_die): Output the containing type.
+       (dwarf2out_init): Lose type_die_table code.
+
+Wed Nov 27 08:30:54 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+        * Makefile.in (DRIVER_DEFINES): New macro, with the macro
+        definitions for the driver.
+        (gcc.o): Make rule use $(DRIVER_DEFINES).
+        * gcc.c (process_command) [LANG_SPECIFIC_DRIVER]: Call
+        lang_specific_driver, passing along the addr of FATAL for errors
+        along with our ARGC and ARGV.
+
+Wed Nov 27 08:21:13 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.md (iorsi_zexthi_ashl16): New pattern.
+       (ashrsi_16): New name for old unnamed pattern.
+
+       * objc/misc.c (stdlib.h): Define __USE_FIXED_PROTOTYPES__ before
+       including stdlib.h.
+
+Wed Nov 27 08:17:34 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+        * i386.md (decrement_and_branch_until_zero+[3-8]): Add missing
+       CC_STATUS_INIT.
+       (decrement_and_branch_until_zero+[5-8]): Delete redundant assignment.
+
+Wed Nov 27 07:56:27 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * m68k.md ({and,ior,xor}si3_internal): Removed !TARGET_5200 from
+       conditionals now that entire insn is disabled when !TARGET_5200.
+       
+Wed Nov 27 07:52:32 1996  Oliver Kellogg  <kellogg@space.otn.dasa.de>
+
+       * 1750a.md (movhi pattern):  Fixed MEM to MEM move problem.
+
+Tue Nov 26 14:50:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (move_by_pieces): Abort only if length positive at end.
+       * function.c (frame_offset, get_frame_size): Make HOST_WIDE_INT.
+       * function.h (struct function): Make frame_offset be HOST_WIDE_INT.
+       (get_frame_size): Add definition.
+       * reload1.c (reload): Make starting_frame_size be HOST_WIDE_INT.
+
+Mon Nov 25 16:55:14 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (dwarf2out_finish): Don't emit call frame info
+       for non-MIPS targets.
+       (is_redundant_typedef): New fn.
+       (modified_type_die): Refer to typedef DIEs where appropriate.
+       (gen_typedef_die): Support DECL_ORIGINAL_TYPE.
+       (gen_type_die): Likewise.  Use is_redundant_typedef.
+       (gen_subprogram_die): Don't force a spec DIE for local class methods.
+
+Mon Nov 25 15:09:12 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * gcc.c (handle_braces): Rework last change.
+
+Mon Nov 25 13:49:51 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (build_exeext, exeext): New variables.  Use sed to insert
+       build_exeext value into Makefile exeext rule.
+       (*-*-cygwin32): Set exeext.
+       * i386/x-cygwin32 (exeext): Delete.
+       * rs6000/x-cygwin32 (exeext): Delete.
+
+       * dwarf.h (enum dwarf_location_atom): Add OP_MULT.
+       * dwarfout.c (output_mem_loc_descriptor, case MULT): Add.
+       * dwarfout2.c (mem_loc_descriptor, case MULT): Add.
+
+       * dwarfout.c (dwarf_fund_type_name, case FT_unsigned_int64): Fix typo.
+
+Sun Nov 24 21:42:01 1996  J.T. Conklin  <jtc@rhino.cygnus.com>
+
+       * m68k.md (andsi3): Changed into define_expand.
+       (andsi3_internal): Rename from old andsi3, changed condition
+       to !TARGET_5200.
+       (andsi2_5200): New insn.
+       (iorsi3): Change into define_expand.
+       (iorsi2_internal): Rename from old iorsi3, changed condition 
+       to !TARGET_5200.
+       (iorsi2_5200): New insn.
+       (xorsi3): Change into define_expand.
+       (xorsi2_internal): Rename from old xorsi3, changed condition 
+       to !TARGET_5200.
+       (xorsi2_5200): New insn.
+
+Sun Nov 24 21:31:32 1996  John F. Carr  <jfc@mit.edu>
+
+       * i386.h (N_ALLOCATABLE_REGISTERS): Remove extra backslash at
+       end of macro definition.
+
+       * cpplib.c (LOCAL_INCLUDE_DIR): Remove default definition.
+       (include_defaults_array): Do not use LOCAL_INCLUDE_DIR or
+       TOOL_INCLUDE_DIR if they are not defined.
+       * cccp.c: Likewise.
+
+       * Makefile.in (cppmain.o): New rule.
+
+Sun Nov 24 19:14:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * fold-const.c (merge_ranges): In (+,-) case, if lower bounds are
+       the same the result is always false.
+
+Sun Nov 24 18:48:31 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-typeck.c (build_indirect_ref): Don't give warning for
+       dereferencing void * if evaluation is being skipped.
+
+       * c-decl.c (poplevel): Don't call output_inline_function if
+       DECL_SAVED_INSNS is not set.
+
+       * gcc.c (give_switch): Add new arg, INCLUDE_BLANKS.
+       (handle_braces): All callers changed.
+       Add support for new construct: %{S*^}.
+
+Sun Nov 24 18:44:48 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * c-parse.in (unary_expr, expr_no_commas): Increment skip_evaluation
+       when analyzing an expression that is known not to be evaluated.
+       (sizeof, alignof): New rules.
+       * c-tree.h (skip_evaluation): New variable.
+       * c-common.c (skip_evaluation): Likewise.
+       (overflow_warning, unsigned_conversion_warning): Don't warn about
+       potential runtime errors when skipping evaluation.
+       * c-typeck.c (build_binary_op): Likewise.
+       (build_conditional_expr): op1 now always nonnull.
+
+Sun Nov 24 17:06:58 1996  Bernd Schmidt  (crux@Pool.Informatik.RWTH-Aachen.DE)
+
+       * toplev.c (rest_of_compilation): Call regscan before each
+       jump threading pass.
+
+Sun Nov 24 16:37:18 1996  Dave Love  <d.love@dl.ac.uk>
+
+       * configure (objc_thread_file): Set conditionally in each case so
+       may be overidden with `--enable-objcthreads=posix'.
+       Change Linux default to `single'.
+
+Fri Nov 22 17:53:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (assemble_variable): Output DWARF in the third case, too.
+
+       * dwarf2out.c (decls_for_scope): Only add DIEs with no parents to
+       our scope.
+       (gen_subroutine_type_die): Parm types go under the fn type DIE.
+
+       * Makefile.in ($(T)crt{begin,end}.o): Move CRTSTUFF_T_CFLAGS after 
+       general flags.
+
+       * mips/t-iris6 (CRTSTUFF_T_CFLAGS): Define.
+       * mips.c (compute_frame_size): Fix fp_save_offset.
+
+       * dwarf2out.c (new_die): If we get a NULL parent, inc limbo_die_count.
+       (decls_for_scope): Decrement limbo_die_count as appropriate.
+       (dwarf2out_finish): Check for good limbo_die_count.
+       (size_of_cfi): If regno too big for DW_CFA_offset, use offset_extended
+       instead.
+       (output_call_frame_info): Add disabled code for specifying ABI.
+       (dwarf2out_begin_function): Note all saved regs.
+
+       * dwarf2out.c (gen_subprogram_die): Have a DIE for each fn at
+       toplevel.
+       (scope_die_for): Only use the NULL for fns and tags.
+
+Tue Nov 21 15:53:51 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (output_stack_adjust): New argument TEMP.  Changed all callers. 
+       If the adjust cannot be done with one, but can be done with two 
+       CONST_OK_FOR_I constants, do it that way.
+
+Thu Nov 21 14:25:55 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixincludes: Include <stdio.h> in <assert.h> even if not C++ if
+       stderr needs to be defined.
+
+Wed Nov 20 15:38:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (rest_of_type_compilation): Do output function-scope tags
+       for DWARF 2.
+       * c-decl.c (pushtag): Set TYPE_CONTEXT on the tag.
+       * toplev.c, varasm.c: s/dwarf2out_file_scope_decl/dwarf2out_decl/g.
+       * dwarf2out.c (add_prototyped_attribute): Use a value of 1.
+       (gen_subprogram_die): Support AT_static_link.
+       (dwarf2out_decl): Rename from dwarf2out_file_scope_decl.
+       Give nested fns and tags a die_parent of NULL.
+       (decls_for_scope): Fix the die_parent for nested fns and tags.
+       (scope_die_for): If we get a context of NULL, just return it.
+
+Tue Nov 19 18:21:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (gen_subprogram_die): Support block extern decls.
+       (gen_variable_die): Likewise.
+       (gen_decl_die): Emit block extern function decls.
+
+       * c-decl.c (implicitly_declare): Set DECL_ARTIFICIAL.
+
+Tue Nov 19 16:50:32 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * configure (powerpc*-{sysv,elf,eabi{,aix,sim}}): Set
+       extra_headers to ppc-asm.h.
+       (powerpc*-{linux,solaris,rtems,vxworks}): Ditto.
+       (powerpc*-{winnt,pe,cygwin32}): Ditto.
+
+       * rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set
+       it here.
+
+Mon Nov 18 14:51:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (DWARF_CIE_INSN_SIZE): New macro.
+       (DWARF_CIE_HEADER_SIZE): Use it.
+       (DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM): New macros.
+       (output_call_frame_info, dwarf2out_begin_function): Use them.  
+       For the MIPS, output the first CFA insn in the CIE.
+       * dwarf2.h (enum dwarf_call_reg_usage): Lose.
+       (dwarf_macinfo_record_type): Fix spelling.
+       * mips/mips.h (DWARF_FRAME_REGNUM, DWARF_FRAME_RETURN_COLUMN): Define.
+
+       * dwarf2out.c (base_type_die): Just generate the DIEs as needed,
+       rather than building up some table.
+       (init_base_type_table): Lose.
+       (add_subscript_info): Use add_type_attribute.  Don't give an upper
+       bound for an array of unknown size.
+       (gen_unspecified_parameters_die): Remove DWARF-1 kludge.
+       (dwarf2out_init): Lose call to init_base_type_table.
+       (is_c_family, is_fortran): New fns.
+       (gen_compile_unit_die): Recognize GNU F77.
+       (gen_array_type_die): Use AT_declaration for an array of unknown size.
+       (modified_type_die): Take TYPE_MAIN_VARIANT before passing it
+       to build_type_variant, so we ignore named variants.
+       (dwarf2out_file_scope_decl): Don't generate DIEs for built-in structs,
+       either; they will be emitted if they are used.
+       From wilson:
+       (gen_array_type_die): Force the element type out first on IRIX 6.
+
+Sun Nov 17 20:23:11 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (get_inner_reference): Fix error in previous change.
+
+Sat Nov 16 06:08:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * emit-rtl.c (operand_subword): Avoid confusion if sizeof (float)
+       is less than a full word.
+
+       * alpha.h (MASK_BYTE_OPS): Now define as 1024.
+       * alpha/vms.h (TARGET_DEFAULT): Use symbolic values.
+
+       * expr.c (get_inner_reference): Add new arg PALIGNMENT and compute it.
+       (expand_assignment, do_jump): Pass new arg to get_inner_reference.
+       (expand_expr, case COMPONENT_REF): Likewise.
+       * fold-const.c (optimize_bit_field_compare, decode_field_reference):
+       Likewise.
+       * tree.h (get_inner_reference): Add new arg.
+
+       * Add support for Alpha/VMS, mostly from
+       Klaus Kaempf (kkaempf@progis.de)
+       * configure (alpha-dec-vms*): New target.
+       * alpha.c (override_options): Handle VAX format floating-point.
+       (print_operand, case ',', '-'): New cases.
+       (alpha_builtin_saveregs): Handle VMS convention.
+       (alpha_sa_{mask,size}, alpha_pv_save_size, alpha_using_fp):
+       New versions for VMS.
+       (output_{pro,epi}logue, function_arg): Likewise.
+       (direct_return): Never true on VMS.
+       (check_float_value): Return 0 for VMS.
+       (vmskrunch, alpha_{need,write}_linkage): New function.
+       * alpha.h ({MASK,TARGET}_{OPEN_VMS,FLOAT_VAX}): New macros.
+       (TARGET_SWITCHES): Add float-vax and float-ieee.
+       ({FUNCTION,LIBCALL}_VALUE, FUNCTION_VALUE_REGNO_P): R1 and R33
+       are also return registers.
+       (ASM_OUTPUT_DOUBLE): Support both floating-point formats.
+       (PRINT_OPERAND_FUNCT_VALID_P): Add ',' and '-'.
+       * alpha.md ({div,mod}[sd]i3): Only for VMS.
+       (fp operations): Add modifiers for multiple floating-point formats.
+       (call patterns): Handle new calling sequence for VMS.
+       (tablejump): Make new pattern for VMS.
+       (nonlocal_goto_receiver, arg_home): New patterns.
+       * alpha/t-vms, alpha/vms.h, alpha/xm-vms.h: New files.
+
+Fri Nov 15 17:38:20 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * sdbout.c (current_file): New global.
+       (PUT_SDB_SRC_FILE): New PUT_SDB_FOO macro.
+       (sdbout_init): Initialize current_file ifdef MIPS_DEBUGGING_INFO.
+       (sdbout_{start_new,resume_previous}_source_file): New functions.
+       * toplev.c (debug_{start,end}_source_file): Call them if SDB_DEBUG.
+       * mips.h (PUT_SDB_SRC_FILE): Define.
+
+Fri Nov 15 16:11:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarfout.c (dwarfout_line): Don't emit line number info for
+       functions outside of .text.
+
+Fri Nov 15 15:52:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386/386bsd.h (COMMENT_BEGIN): Delete.
+       * i386/freebsd.h (COMMENT_BEGIN): Likewise.
+       * i386/netbsd.h (COMMENT_BEGIN): Likewise.
+       * i386/unix.h (COMMENT_BEGIN): Likewise.
+
+Fri Nov 15 13:22:42 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * fold-const.c (unextend): Rewrite type conversions to avoid overflow.
+
+Fri Nov 15 12:11:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * combine.c (try_combine): Properly copy an rtvec.
+       * emit-rtl.c (gen_rtvec_vv): New function.
+       (copy_rtx_if_shared): Call it.
+       * integrate.c (copy_for_inline): Likewise.
+       * reload1.c (eliminate_regs): Likewise.
+       * rtl.h (gen_rtvec_vv): Declare.
+       * genattrtab.c (simplify_cond): Make TESTS an array of rtunions.
+       * genextract.c (main): Use loop, not bcopy, to set recog_operands
+       from an rtvec.
+       * rtl.c (rtvec_alloc): Clear rtwint instead of rtvec.
+
+       * machmode.h (HOST_PTR_PRINTF): Handle char * wider than long.
+       (HOST_WIDE_INT_PRINT_{DEC,UNSIGNED,HEX,DOUBLE_HEX}): New macros.
+       * final.c (asm_fprintf): Use "ll" prefix for a long long HOST_WIDE_INT.
+       (output_{asm_insn,addr_const}): Use HOST_WIDE_INT_PRINT_*.
+       * print-tree.c (print_node{,_brief}, case INTEGER_CST): Likewise.
+       * print-rtl.c (print_rtx, case 'w'): Use HOST_WIDE_INT_PRINT_DEC.
+
+       * unroll.c (iteration_info): Fix code so that it knows iteration_var
+       is a HOST_WIDE_INT, not a long.
+
+       * fold-const.c (operand_equal_p): Do real comparison with
+       REAL_VALUES_EQUAL.
+       (make_range): Properly decide when to get TREE_TYPE of arg0.
+       Handle EXP being an INTEGER_CST at end.
+       (fold_range_test): Handle return of 0 from make_range.
+       (fold, case TRUTH_AND_EXPR): Handle first arg of 0.
+       (fold, case TRUTH_OR_EXPR): Handle first arg of 1.
+
+       * c-common.c (decl_attributes, case A_ALIAS): Add missing parens.
+
+Fri Nov 15 06:37:54 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * fold-const.c (range_binop): Set SNG1 to zero if ARG1 is a
+       not a lower or upper bound.
+
+Thu Nov 14 23:08:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * flags.h (debug_info_type): Add DWARF2_DEBUG.
+       * toplev.c (main): Support DWARF2_DEBUG.  Add -gdwarf-1, -gdwarf-2
+       options.  Check debug level after choosing type.
+       (debug_{start,end}_source_file, debug_{define,undef}): New functions.
+       (compile_file): Support dwarf2 separately from dwarf1. 
+       (rest_of_type_compilation, rest_of_compilation): Likewise.
+       * final.c (final_start_function): Likewise.
+       (final_end_function, final_scan_insn, output_source_line): Likewise.
+       * varasm.c (assemble_variable): Likewise.
+       * dwarfout.c: Don't check DWARF_VERSION.
+       * dwarf2out.c: s/dwarfout/dwarf2out/g.  Check DWARF2_DEBUGGING_INFO.
+       * c-lex.c (check_newline): Use debug_* instead of calling *out
+       functions directly.
+       * svr4.h (DWARF2_DEBUGGING_INFO): Define.
+       * mips/iris6.h (PREFERRED_DEBUGGING_TYPE): DWARF2_DEBUG.
+       (DWARF2_DEBUGGING_INFO): Define instead of DWARF_DEBUGGING_INFO.
+       (LINK_SPEC): Pass -w through.
+       * mips.h (PREFERRED_DEBUGGING_TYPE): Don't check `len'.
+
+Thu Nov 14 17:25:47 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300.c (dosize): Don't clobber static chain reg if needed by
+       current function.
+
+Wed Nov 13 17:05:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (stage?-start): Keep a copy of EXTRA_MULTILIB_PARTS
+       in the build directory.
+
+Tue Nov 12 23:17:17 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (print_operand, case 'Y'): Fix comparisons to handle
+       NaNs properly in all cases.
+
+Tue Nov 12 18:47:24 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * expr.c (emit_group_store): For REG case, call gen_lowpart if
+       modes are different.
+
+Tue Nov 12 18:24:40 1996  Doug Rupp  (rupp@gnat.com)
+
+       * gcc.c (exit): If VMS, define as __posix_exit.
+       (option_map): Add define-macro and undefine-macro.
+
+Tue Nov 12 17:55:10 1996  Torbjorn Granlund  <tege@tege.pdc.kth.se>
+
+       * alpha.c (input_operand): If TARGET_BYTE_OPS accept HImode and QImode.
+       * alpha.h (MASK_BYTE_OPS): New define.
+       (TARGET_BYTE_OPS): New define.
+       (TARGET_SWITCHES): Handle -mbyte.
+       (LOAD_EXTEND_OP): When MODE is not SImode, return ZERO_EXTEND.
+       * alpha.md (zero_extendqidi2): Handle TARGET_BYTE_OPS.
+       (zero_extendhidi2): Likewise.
+       (zero_extendqisi2): Likewise.
+       (zero_extendhisi2): Likewise.
+       (extendqisi2): Use extendqidi2x if TARGET_BYTE_OPS.
+       (extendqidi2): Likewise.
+       (extendqidi2x): New pattern.
+       (extendhisi2): Use extendhidi2x if TARGET_BYTE_OPS.
+       (extendhidi2): Likewise.
+       (extendhidi2x): New pattern.
+       (movhi): Handle TARGET_BYTE_OPS.
+       (movhi matcher): Output ldwu and stw.
+       (movqi): Handle TARGET_BYTE_OPS.
+       (movqi matcher): Output ldbu and stb.
+
+Tue Nov 12 16:53:37 1996  Rob Savoye  <rob@chinadoll.cygnus.com>
+
+       * configure (hppa1.1-pro*, i960-*-coff*,m68k-*-aout*): Add libgloss.h.
+       (m68k-*-coff*, mips*-*-elf*, sparc*-*-aout*, sparc*-*-coff*): Likewise.
+       * config/libgloss.h: New file.
+
+Tue Nov 12 16:21:45 1996  Joern Rennecke <amylaar@cygnus.com>
+
+       * jump.c (jump_optimize): Fix bug in Sep 23 change.
+
+Tue Nov 12 16:15:31 1996  Andrew Cagney  (cagney@tpgi.com.au)
+
+       * global.c (prune_references): Add missing symmetic CONFLICTP call.
+
+Tue Nov 12 14:34:40 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.c (output_function_{pro,epi}logue): Save and restore
+       fp-registers only if TARGET_68881.
+
+       * m68k/mot3300.h (ASM_OUTPUT_INTERNAL_LABEL): Prefix labels with "L%".
+       (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_CASE_LABEL): Likewise.
+       (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
+
+       * m68k/mot3300.h (TARGET_DEFAULT): Use MASK_68040_ALSO, not MASK_68040.
+       * m68k/next.h, m68k/ccur-GAS.h (TARGET_DEFAULT): Likewise.
+
+       * fixproto (std_files): Add sys/socket.h.
+
+       * m68k.md (movqi): Emit 'st' for INTVAL & 255 == 255, not INTVAL == -1.
+       (seq,sne,sgt,sgtu,slt,sltu,sge,sgeu,sle,sleu): Allow "m" as operand 0.
+
+Tue Nov 12 14:17:45 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * c-decl.c (grokdeclarator): Generate a warning if -Wimplicit,
+       unless a warning was already generated by -Wreturn-type.
+
+Tue Nov 12 14:11:02 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * Make qsort callback routines conform to the ANSI/ISO standard.
+       * c-decl.c (field_decl_cmp): Use `const void *' arguments.
+       * global.c (allocno_compare): Likewise.
+       * reload1.c (hard_reg_use_compare, compare_spill_regs): Likewise.
+       (reload_reg_class_lower): Likewise.
+       * stupid.c (stupid_reg_compare): Likewise.
+       * local-alloc.c (qty_compare_1, qty_sugg_compare_1): Likewise.
+       (QTY_CMP_PRI, QTY_CMP_SUGG): New macros.
+       (qty_compare_1, qty_sugg_compare_1): Use them.
+
+Tue Nov 12 13:20:25 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * fold-const.c (merge_ranges): In (+,-) case, treat subset specially
+       if lower bounds are the same.
+
+Tue Nov 12 13:10:01 1996  J.T. Conklin  <jtc@cygnus.com>
+
+       * m68k.md (addsi3): If TARGET_5200, use the lea insn to add small
+       constants to address registers.
+       (negsi2): Change into define_expand.
+       (negsi2_internal): Rename from old negsi2, changed condition
+       to !TARGET_5200.
+       (negsi2_5200): New insn.
+       (one_cmplsi2): Change into define_expand.
+       (one_cmplsi2_internal): Rename from old one_cmplsi2, changed
+       condition to !TARGET_5200.
+       (one_cmplsi2_5200): New insn.
+       (negdi2_5200): Corrected constraints.
+       (one_cmpldi2): Changed condition to !TARGET_5200.
+
+       * m68k.c (m68k_align_loops_string, m68k_align_jumps_string): New vars.
+       (m68k_align_funcs_string, m68k_align_loops): Likewise.
+       (m68k_align_jumps, m68k_align_funcs): Likewise.
+       (override_options): New function.
+       * m68k.h (TARGET_OPTIONS): Added alignment options.
+       (MAX_CODE_ALIGN, ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
+       New macros.
+       (FUNCTION_BOUNDARY): Use value derrived from  m68k_align_funcs
+       instead of constant.
+       * m68k.c (output_function_{pro,epi}logue): Fix typo in last change.
+
+Tue Nov 12 09:26:51 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>
+
+       * i386.md (parallel inc/dec and branch-if-zero/nonzero): Use `+' in
+       constraint.
+
+Mon Nov 11 15:12:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+        * libgcc2.c: Also define WEAK_ALIAS if ASM_OUTPUT_WEAK_ALIAS.
+       * mips/iris6.h (ASM_OUTPUT_WEAK_ALIAS): Define.
+       * varasm.c (assemble_alias): Use ASM_OUTPUT_WEAK_ALIAS.
+
+       * dwarf2out.c (TYPE_USED_FOR_FUNCTION): Lose.
+       (gen_compile_unit_die): Only append -g with -g2 or better.
+       (scope_die_for): Don't emit any type info with -g1.
+       (gen_subprogram_die): Likewise.
+       (gen_decl_die): Likewise.
+       (dwarfout_file_scope_decl): Likewise.
+       (dwarfout_init): Likewise.
+
+       * mips/iris6.h (TYPE_ASM_OP): Define.
+       (SIZE_ASM_OP): Define.
+       (ASM_WEAKEN_LABEL): Define.
+       (BSS_SECTION_ASM_OP): Define.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Don't use ASM_DECLARE_OBJECT_NAME.
+       (ASM_OUTPUT_ALIGNED_BSS): Define.
+       (ASM_DECLARE_OBJECT_NAME): Redefine to emit .size directive.
+       (ASM_FINISH_DECLARE_OBJECT): Define.
+       (ASM_OUTPUT_DEF): Don't define.
+
+Fri Nov  8 20:38:51 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * function.c (expand_function_end): Handle BLKmode structures returned
+       in registers.
+
+Fri Nov  8 20:27:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * stor-layout.c (layout_record): Check for VAR_DECL instead 
+       of TREE_STATIC.
+
+       * varasm.c (assemble_variable): Do write out DWARF for 
+       record-scope variables.
+       * toplev.c (rest_of_type_compilation): Do write out DWARF for
+       record-scope types.
+
+       * dwarf2out.c (gen_enumeration_type_die): Set TREE_ASM_WRITTEN on a
+       complete enum type.
+       (gen_struct_or_union_type_die): Don't recurse between nested classes.
+       (gen_type_die): Write out nested classes by writing out their context.
+
+Fri Nov  8 17:40:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * emit-rtl.c (change_address): If MEMREF isn't changing,
+       return the old one.
+
+       * expr.c (expand_assignment): Remove bogus resetting of alignment
+       to inner alignment.
+       (expand_expr, case COMPONENT_REF): Likewise.
+
+Fri Nov  8 16:31:31 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * reg-stack.c (compare_for_stack_reg, subst_stack_regs_pat): 
+       Add support for float conditional move.
+
+Thu Nov  7 07:46:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * stor-layout.c (layout_record): Treat constant size as variable if
+       it overflows.
+       * fold-const.c (const_binop, case *_DIV_EXPR): Don't do special
+       sizetype case if a constant overflows.
+       (size_binop): Use integer_{zero,one}p instead of explicit test.
+       * tree.c (integer_{zero,one,all_ones,pow2}p, real_{zero,one,two}p):
+       Return 0 if TREE_CONSTANT_OVERFLOW.
+
+Wed Nov  6 17:53:33 1996  Torbjorn Granlund  <tege@wombat.gnu.ai.mit.edu>
+
+       * i386.md (parallel inc and branch-if-zero/nonzero): Add two
+       new pattern variants.  Change incrementing pattern to use incl/jnz.
+
+Wed Nov  6 09:46:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (override_options): Set defaults for -march and -mcpu.
+       (output_float_compare): Use cc_status.flags to mark if this
+       comparison can be done with fcomi.
+       (output_fp_cc0_set): A conditional move may be in a PARALLEL.
+
+       * i386.h (CC_FCOMI): Define
+
+       * i386.md (sgt,sgtu,sge,sle,bgt,blt,bge,ble): Use CC_FCOMI
+       (movsicc_1,movhicc_1): Use correct size suffix.
+       (movsfcc_1,movdfcc_1): Cleanup default move case.
+
+Wed Nov  6 09:46:10 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * i386.h (HARD_REGNO_MODE_OK): If long double isn't XFmode, can't
+       allow XFmode.
+
+Tue Nov  5 22:49:56 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (define_split for and_shl_scratch):
+       Use rtx_equal_p on the operands to find out which alternative is used.
+       * sh.c (gen_shl_and): Try to generate shorter constant for and.
+
+Mon Nov  4 19:13:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c: Clean up unused variables.
+       Use ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL, shorten label names.
+       (loc_descriptor): Use reg_loc_descriptor.
+       (TYPE_DECL_IS_STUB): New macro.
+       (gen_decl_die): Use it.
+       (dwarfout_file_scope_decl): Use it.
+
+Mon Nov  4 10:23:46 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * ginclude/va-ppc.h (__va_regsave_t,va_start,va_end): Wrap macro
+       and structures inside #ifndef __VA_PPC_H__ to allow reinclusion.
+
+       * rs6000/rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or
+       TARGET_TOC.
+       (LEGITIMATE_LO_SUM_ADDRESS_P): Ditto.
+       (LEGITIMIZE_ADDRESS): Ditto.
+
+       * rs6000/rs6000.md (movsi): Don't call elf_{high,low} if -fpic.
+
+       * rs6000/cygwin32.h (STARTFILE_SPEC): Eliminate empty %{}.
+
+Sun Nov  3 15:56:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (TARGET_TOC): Plain -fpic does not require a TOC.
+       ({MINIMAL_TOC,CONST}_SECTION_ASM_OP): -fpic should be treated like
+       -mrelocatable in these cases.
+       (ASM_OUTPUT_INT): Ditto.
+       (ASM_OUTPUT_SECTION_NAME): Ditto.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Use sdata_section, not sbss_section.
+
+Fri Nov  1 19:57:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (based_loc_descr): Use DBX_REGISTER_NUMBER.  The 
+       "frame base" is just the frame or stack reg without an offset.
+       (gen_subprogram_die): Likewise.
+       (dwarfout_begin_function): Use DBX_REGISTER_NUMBER.
+
+Fri Nov  1 09:50:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * fold-const.c (make_range): Don't merge unsigned case with range
+       containing upper bound; instead merge just with zero and convert
+       a range with no upper bound to opposite one with no lower bound.
+       (merge_ranges): In (+,-) case, don't treat subset specially if
+       the upper bounds are the same; fix typo in others case here.
+
+Thu Oct 31 20:12:13 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * fold-const.c (make_range, case PLUS_EXPR): Correct
+       normalization of an unsigned range that wraps around zero.
+
+Thu Oct 31 21:06:37 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * mips/t-iris6 (EXTRA_MULTILIB_PARTS): Define.
+       (EXTRA_PARTS): Don't define.
+
+       * dwarf2out.c (gen_struct_or_union_type_die): Use AT_specification
+       for nested types defined outside their containing class.  Lose 
+       is_complete.
+       (gen_enumeration_type_die): Lose is_complete.
+       (gen_type_die): Lose is_complete.
+       (add_name_and_src_coords_attributes): Tweak.
+       (gen_subroutine_type_die): Use scope_die_for.
+       (gen_ptr_to_mbr_type_die): Likewise.
+       (gen_subprogram_die): Support AT_artificial.
+       (gen_variable_die): Likewise.
+       (dwarfout_file_scope_decl): Lose finalizing.
+
+Thu Oct 31 18:43:18 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * pa.c (emit_move_sequence): Refine previous change.
+
+Thu Oct 31 13:25:32 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * crtstuff.c: Put HAS_INIT_SECTION ifdefs around Irix6 support.
+
+       * tree.c (decl_function_context): Handle QUAL_UNION_TYPE.
+
+       * calls.c (expand_call): Disable special handling for const calls
+       that return a PARALLEL rtx.
+       * expr.c (expand_expr, case CONSTRUCTOR): Don't use a PARALLEL
+       target.
+
+Thu Oct 31 11:45:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/t-{ppcgas,ppc,solaris} (EXTRA_MULTILIB_PARTS): Add
+       {e,s}crt{i,n,0}.o.
+       ({stmp,install}-crt): Delete, no longer used.
+       ({,INSTALL_}LIBGCC): Remove {stmp,install}-crt rule.
+
+Thu Oct 31 02:49:58 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * i386.md (parallel inc and branch-if-zero/nonzero):
+       Check for -1, not zero.
+
+Wed Oct 30 15:50:49 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * fold-const.c (range_binop): Strip NOPs from result and
+       verify it's an INTEGER_CST.
+       (make_range, case BIT_NOT_EXPR): Fix typo in constant for PLUS_EXPR.
+
+       * stor-layout.c (layout_record): Use HOST_WIDE_INT for size.
+
+       * stmt.c (expand_asm_operands): Disallow matching constraints
+       on output and validate the numbers on inputs.
+
+Tue Oct 29 16:21:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * gcc.c (process_command,main): Process -specs=file and -specs
+       file after reading the main specs file to allow the user to
+       override the default.
+       (DEFAULT_WORD_SWITCH_TAKES_ARG): Add specs to list.
+       (option_map): Ditto.
+
+Tue Oct 29 15:49:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (stmp-multilib): Pass $flags to s-m-sub in 
+       MULTILIB_CFLAGS.
+       (stmp-multilib-sub): Build EXTRA_MULTILIB_PARTS.
+       ($(T)crt*.o): Add $(T), lose stamp-crt rule, use MULTILIB_CFLAGS.
+       (install-multilib): Install EXTRA_MULTILIB_PARTS.
+
+Mon Oct 28 20:09:39 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md (shl_sext_ext): Don't accept simple left/right shift
+       variant.
+       * sh.c (EXT_SHIFT_SIGNED): New macro.
+       (shl_sext_kind, gen_shl_sext): try left shift - sign extend -
+       left shift - arithmetic right shift in case 2.
+
+Mon Oct 28 14:55:42 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (sh-*-*): Set float_format to sh.
+       * config/float-sh.h: New file.
+
+Mon Oct 28 14:26:08 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and
+       ZERO_EXTEND.
+
+       * m68k/lb1sf68.asm: Change # to IMM in udivsi3 __mcf5200__.
+
+       * combine.c (simplify_rtx): Add some optimizations for TRUNCATE.
+       (expand_compound_operation): Add some optimizations for
+       ZERO_EXTEND.
+
+Mon Oct 28 14:11:20 1996  Gavin Koch  <gavin@cygnus.com>
+        
+       * varasm.c (make_decl_rtl,assemble_variable):
+       Allow named sections for uninitialized variables.
+
+Mon Oct 28 13:08:51 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * pa.c (emit_move_sequence): If reload in progress, replace
+       reference to pseudo with reference to corresponding MEM.
+
+       * c-typeck.c ({un,}signed_type): If can't do anything, call
+       signed_or_unsigned_type.
+       (signed_or_unsigned_type): If already right signedness, return.
+
+Mon Oct 28 13:05:26 1996  Stephen Williams (steve@icarus.com)
+
+       * i960.h: Add specification for -Jx types.
+       * i960/t-960bare: Include multilib support for Jx types.
+
+Mon Oct 28 10:06:00 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/t-{ppc{,gas},solaris} (install-crt): Depend on
+       installdirs, not install-dir.
+
+       * rs6000/sysv4.h (TARGET_TOC): -fpic does not use a TOC area.
+
+Mon Oct 28 09:07:42 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload1.c (delete_output_reload): Don't use delete_insn
+       when deleting all stores into a replaced pseudo.
+
+       * sh.md (movsf_ieq, movsf_ie): Merged the former into the latter.
+       Changed matching define_split appropriately.
+       (movsf): Changed appropriately.
+       (reload_insf) Define.
+       * sh.h (SECONDARY_INPUT_RELOAD_CLASS): Define.
+
+Mon Oct 28 08:38:23 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * dsp16xx.h (ASM_OUTPUT_BYTE): adjust definition to actual type of
+       VALUE, which is HOST_WIDE_INT.
+
+Mon Oct 28 07:36:07 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * ginclude/stddef.h: Make sure file is processed if some of the
+       known __need_* macros is defined.
+
+Sun Oct 27 21:37:59 1996  J.T. Conklin  <jtc@cygnus.com>
+
+       * m68k.c (output_function_prologue): Adjust SP then use movmel with
+       plain address indirect mode for TARGET_5200.
+       (output_function_epilogue): Disable moveml and use several movel's
+       instead for TARGET_5200.
+       (output_function_{pro,epi}logue): Use lea instruction to adjust
+       stack pointer for short displacements for TARGET_5200.
+
+Sun Oct 27 15:27:45 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * fold-const.c (merge_ranges): Fix thinko/typo.
+
+Sat Oct 26 22:07:04 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * expr.c (convert_modes): Before returning a const_double for a
+       large unsigned value, zero extend an integer value if necessary.
+
+Sat Oct 26 15:24:55 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k/x-mot3300 (XCFLAGS): Disable native assembler's jump
+       optimization for expr.o and cp/decl.o.
+
+Sat Oct 26 14:04:09 1996  Ben Harris  <bjh21@cam.ac.uk>
+
+       * m68k.c (output_function_prologue): Add REGISTER_PREFIX to stack
+       probe instruction.
+
+Sat Oct 26 13:59:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * explow.c (allocate_dynamic_stack_space): Delete reference to
+       nonexistant macro ALLOCATE_OUTGOING_ARGS.
+
+       * next.h (CPP_PREDEFINES): Add -D_NEXT_SOURCE.
+
+Sat Oct 26 13:50:49 1996  Mark Mitchell  (mitchell@centerline.com)
+
+       * configure (i486-ncr-sysv4*): Use i386/sysv4gdb if stabs and gas.
+
+Sat Oct 26 12:20:35 1996  John F. Carr  <jfc@mit.edu>
+
+       * configure: Support --with-cpu=* for SPARC.  Or target default
+       values instead of adding them.
+       * sparc.c (cpu_default): Add entries for v8 and supersparc.
+       * sparc.h: Define TARGET_CPU values for v8 and supersparc.
+
+Sat Oct 26 11:38:01 1996  Kamil Iskra  <iskra@student.uci.agh.edu.pl>
+
+       * collect2.c (dump_file): Call fclose() for opened files.
+
+Sat Oct 26 11:29:29 1996  J"orn Rennecke  (amylaar@cygnus.co.uk)
+
+       * jump.c (jump_optimize): Fix second error in last change.
+
+       * svr3.h: Fix typo which makes comment text be non-comment.
+
+Fri Oct 25 16:18:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/t-winnt (LIBGCC1): Don't build libgcc1.
+       (EXTRA_PARTS): Build crti.o, crtn.o.
+       (stmp-crt): Remove old multilib support.
+
+Thu Oct 24 15:09:14 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * fold-const.c (make_range, case PLUS_EXPR): Normalize an unsigned
+       range that wraps around 0.
+
+Thu Oct 24 14:37:17 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.md: Change predicates for 64 bit arithmetic operations
+       so that they accept sign extended registers as operands.
+       (extendsidi2): Accept hi or lo as input.
+       * mips.c (movdi_operand, se_register_operand,
+       se_reg_or_0_operand, se_uns_arith_operand, se_arith_operand,
+       se_nonmemory_operand, se_nonimmediate_operand): New functions.
+       (mips_move_2words): Handle a SIGN_EXTEND source.
+       (print_operand): Handle a SIGN_EXTEND operand.
+       (mips_secondary_reload_class): Handle a SIGN_EXTEND rtx.
+       * mips.h: Declare new mips.c functions.
+       (PREDICATE_CODES): Add new functions.
+
+Thu Oct 24 07:41:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * fold-const.c (make_range, comparison cases): When making range
+       for unsigned to merge in, use full range.
+
+       * stor-layout.c (GET_MODE_ALIGNMENT): Delete definition; duplicate.
+
+Thu Oct 24 07:28:53 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload1.c (emit_reload_insns): Check for second_reloadreg
+       in SECONDARY_OUTPUT_RELOAD_CLASS / PRESERVE_DEATH_INFO_REGNO_P case.
+
+Wed Oct 23 14:27:43 1996  Mike Stump  <mrs@cygnus.com>
+
+       * crtstuff.c (__do_global_dtors_aux): Allow finalization code to
+       be run more than once.
+       * libgcc2.c (__do_global_dtors): Ditto.
+       
+Wed Oct 23 20:42:23 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (dump_table): handle SFmode and DFmode.
+       (broken_move): handle simple PARALLEL.
+       (machine_dependent_reorg, pc-relative move generation): Likewise.
+       * sh.h (CONST_DOUBLE_OK_FOR_LETTER_P): always true for 'F' .
+       (LEGITIMATE_CONSTANT_P): accept SFmode and DFmode.
+       * sh.md (movdf_k, movsf_i, movsf_ie): new alternative for
+       pc-relative load.
+       (movsf_ieq): new define_insn with matching define_split.
+       (movsf): use it where appropriate.
+       (consttable_sf, consttable_df): new define_insns.
+
+Wed Oct 23 17:48:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * svr4.h (MAKE_DECL_ONE_ONLY): Fix typo in use of macro parameter.
+
+Wed Oct 23 17:46:13 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * cexp.y (yylex): Cast string literal to U_CHAR* for lookup() call.
+
+Wed Oct 23 14:50:04 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * stmt.c (expand_return): Expand cleanups.  Make sure we get a
+       pseudo-reg and provide a target in the non-BLKmode case.  Get return
+       type of fn properly.
+
+Wed Oct 23 14:16:06 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * reload.c (find_reloads): Handle any unary operator.
+       * recog.c (constrain_operands): Likewise.
+
+       * mips.md: Remove extendsidi2 define_expand. 
+       Rename extendsidi2_internal define_insn to extendsidi2, and add a
+       register to register case.
+
+Wed Oct 23 14:08:31 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * a29k.c (a29k_makes_calls): New global variable.
+       (compute_regstack_size, a29k_compute_reg_names): New functions.
+       (output_prolog): Much code moved to two new functions.  Use
+       a29k_makes_calls instead of makes_calls.
+       * a29k.h (ASM_DECLARE_FUNCTION_NAME): Call a29k_compute_reg_names.
+
+       * calls.c (expand_call): In target code, move PARALLEL case above
+       target != case.
+
+       * mips.c (block_move_load_store, block_move_sequence): Delete.
+       (block_move_loop): New parameter orig_dest.  Call change_address to
+       create new MEM instead of gen_rtx.
+       (expand_block_move): New local orig_dest.  Pass it to block_move_loop.
+       Call change_address to create new MEM instead of gen_rtx.
+
+Wed Oct 23 10:30:32 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * loop.c (combine_givs): When combining a DEST_REG giv with its
+       only use, always set the benefit of the combined giv to that of
+       the DEST_REG giv.
+
+       * emit-rtl (gen_lowpart_common): When converting a floating
+       point value into an integer, use WORD as (first) word.
+
+       * combine.c (can_combine_p): When SMALL_REGISTER_CLASSES is defined,
+       avoid substituting a return register into I3.
+
+       * optabs.c (emit_libcall_block): Before adding an REG_EQUAL note,
+       check that it will really apply to a single instruction.
+       (expand_binop, expand_fix): Likewise.
+
+Wed Oct 23 10:20:52 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * real.c (exact_real_inverse): New function, if REAL_ARITHMETIC.
+       * fold-const.c (exact_real_inverse): Likewise, if no REAL_ARITHMETIC.
+       (fold, case RDIV_EXPR): Turn divide by constant into multiplication
+       by the reciprocal, if optimizing and result is exact.
+       * real.h (exact_real_inverse): Declare.
+
+Wed Oct 23 00:12:52 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * expr.h (emit_store_flag_force): Declare.
+
+Tue Oct 22 18:32:20 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
+
+Tue Oct 22 18:27:06 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/fp-bit.c (float_to_usi): Correct thinko: avoid a negative
+       shift.
+       (df_to_sf): Remember any discarded nonzero bits in the low order
+       guard bit.
+
+       * ginclude/va-mips.h: Add support for -mips1 and -msoft-float when
+       using -mabi=eabi.
+       * mips/abi64.h (SETUP_INCOMING_VARARGS): When MIPS EABI, handle
+       TARGET_SINGLE_FLOAT or ! TARGET_FLOAT64 correctly when saving
+       floating point registers to the stack.
+       * mips/mips.c (mips_function_value): If TARGET_SINGLE_FLOAT, use
+       GP_RETURN for floating point types larger than 4 bytes.
+
+Tue Oct 22 09:43:49 1996  Geoffrey Noer  <noer@cygnus.com>
+
+       * rs6000/cygwin32.h (LIB_SPEC): Add -lkernel32 all of the time,
+       and {user,gdi,comdlg}32 if -mwindows.
+
+Tue Oct 22 05:24:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (scope_die_for): Don't skip lexical blocks.
+       (gen_lexical_block_die): Call push_decl_scope.
+       (gen_subprogram_die): Never refer to the function symbol.
+       (dwarfout_begin_prologue): Likewise.
+
+Mon Oct 21 20:22:49 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * expmed.c (emit_store_flag_force): New function.
+       * optabs.c (expand_binop): Use it.
+       
+       * expr.c (do_store_flag): Don't check if target is 0 in code
+       emitting store flag as compare-branch.
+
+Mon Oct 21 17:58:33 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.c (override_options): Correct typo (MASK_64BIT should
+       have been TARGET_64BIT).
+
+Mon Oct 21 13:58:54 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (loop_comparison_code): New static variable.
+       (unroll_loop): Add check for loop_comparison_code
+       (loop_iterations): Set loop_comparison_code.
+
+       * sh.c (gen_shl_sext): Add missing parameter to shl_sext_kind call.
+
+       * mips.h (INITIAL_FRAME_POINTER_OFFSET): Delete.
+
+       * loop.c (strength_reduce): Add check for ! bl->reversed to
+       auto_inc_opt code.
+
+Mon Oct 21 12:28:15 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
+
+       jump.c (jump_optimize): Fix bug in Oct. 14 change.
+
+Mon Oct 21 07:59:16 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (store_expr): Disable optimization of using convert
+       if exp's type is a subtype.
+
+       * c-typeck.c (build_array_ref): If -Wchar-subscripts, also warn
+       in case when pointer is being indexed.
+
+Mon Oct 21 07:39:31 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
+
+       * jump.c (jump_optimize): Use emit_store_flag even if branches
+       are cheap, if the store is even cheaper.
+
+Sun Oct 20 20:01:09 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * reload1.c (reload_reg_free_p, reloads_conflict): RELOAD_OTHER
+       and RELOAD_FOR_OTHER_ADDRESS conflict.
+
+       * i386.md (ffs[sh]i2): Add missing CC_STATUS_INIT.
+
+Fri Oct 18 13:32:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (float conversion insns): Generate correct code
+       if the bit 15 of rs6000_fpmem_offset is non-zero.
+
+Thu Oct 17 23:22:03 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarfout.c (data_member_location_attribute): Support binfos.
+       (output_inheritance_die): New fn.
+       (output_type): Use it.
+
+       * dwarf2out.c (value_format): Split out from...
+       (output_value_format): Here.
+       (build_abbrev_table): Use value_format.
+       (size_of_locs): New fn.
+       (size_of_die): Don't assume a loc needs a 2-byte length.
+       (value_format): Likewise.
+       (output_die): Likewise.
+
+Thu Oct 17 14:46:14 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.c (override_options): In 64 bit EABI mode, set TARGET_LONG64.
+
+Thu Oct 17 11:34:51 1996  Bob Manson  <manson@cygnus.com>
+
+       * expr.c (do_jump): Conditionalize cleanups for the COND_EXPR case,
+       similarly to the way TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR are
+       handled.
+
+Thu Oct 17 01:20:16 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.h (MASK_68040_ALSO): New macro.
+       (TARGET_SWITCHES): Option -m68020-40 includes MASK_68040_ALSO.
+
+Wed Oct 16 16:25:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (scope_die_for): Also support decls, add asserts.
+       (modified_type_die): Modified types all go under comp_unit_die.
+       (add_type_attribute): Just pass context_die through.
+       (various): Revert useless lookup_type_die change.
+       (gen_subprogram_die): Use scope_die_for.  Call push_decl_scope.
+       (gen_inlined_subroutine_die): Call push_decl_scope.
+       (gen_struct_or_union_type_die): Likewise.
+       (gen_decl_die): Don't call push_decl_scope.
+
+       * mips/iris6.h (*_SPEC): Replace enumeration of !mabi= with !mabi*.
+       (ASM_OUTPUT_{CON,DE}STRUCTOR): Enable.
+       (STARTFILE_SPEC): Support -mips4, -shared.
+       (ENDFILE_SPEC): Likewise.
+       (LIB_SPEC): Support -shared, avoid warning 84.
+       (LIBGCC_SPEC): Define.
+       (LINK_SPEC): Support -shared, remove -woff 84.
+       * mips/t-iris6 (EXTRA_PARTS): Add crtstuff.
+       * crtstuff.c: Support Irix 6.
+       * configure: Don't use collect2 for Irix 6.
+       * libgcc2.c (__main): Don't use any of this stuff if HAS_INIT_SECTION.
+
+Wed Oct 16 11:46:37 1996  Mike Stump  <mrs@cygnus.com>
+
+       * elxsi.h (CHECK_FLOAT_VALUE): Removed.
+
+Wed Oct 16 14:19:38 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * iris6.h (CPP_PREDEFINES): Add -D_LONGLONG.
+       (CPP_SPECS): Remove -D_LONGLONG.
+
+Wed Oct 16 03:34:42 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * i386.md (parallel inc/dec and branch-if-zero/nonzero): New patterns.
+
+Tue Oct 15 22:28:11 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.h (enum mips_abi_type): Add ABI_EABI.
+       (CPP_SPEC): Define __mips_soft_float if -msoft-float, and
+       __mips_eabi if -mabi=eabi.
+       (INITIAL_ELIMINATION_OFFSET, CUMULATIVE_ARGS,
+       GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT,
+       LEGITIMIZE_ADDRESS): Add support for MIPS EABI.
+       * mips/abi64.h (STACK_BOUNDARY, MIPS_STACK_ALIGN,
+       FUNCTION_ARG_PADDING, RETURN_IN_MEMORY, SETUP_INCOMING_VARARGS):
+       Add support for MIPS EABI.
+       (FUNCTION_ARG_PASS_BY_REFERENCE): Define.
+       (FUNCTION_ARG_CALLEE_COPIES): Define.
+       * mips.c (mips_const_double_ok, function_arg_advance,
+       function_arg, function_arg_partial_nregs, override_options,
+       compute_frame_size): Add support for MIPS EABI.
+       (function_arg_pass_by_reference): New function.
+       * ginclude/va-mips.h: Add support for MIPS EABI.
+
+Tue Oct 15 19:10:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (rest_of_type_compilation): Don't write out
+       DWARF for function-scope types yet.
+       (compile_file): Do send vars with no RTL to the DWARF code.
+
+Tue Oct 15 17:54:43 1996  Doug Evans  <dje@cygnus.com>
+
+       * loop.c (strength_reduce): Avoid taking PATTERN of a label.
+
+Tue Oct 15 16:52:33 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips/iris6.h: (SUBTARGET_CPP_SIZE_SPEC): Define.
+       (SUBTARGET_CPP_SPEC): Remove definitions of __SIZE_TYPE__ and
+       __PTRDIFF_TYPE__, now in SUBTARGET_CPP_SIZE_SPEC.
+
+Tue Oct 15 11:19:17 1996  Lee Iverson  <leei@Canada.AI.SRI.COM>
+
+       * mips.h (CPP_SPEC): Restore -D_LANGUAGE_C for Objective C.
+
+Mon Oct 14 18:03:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (gen_decl_die): Do generate dies for classes with -g1.
+       (dwarfout_file_scope_decl): Likewise.
+
+Mon Oct 14 16:31:44 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+       * jump.c (jump_optimize): Check for if (...) { x = a; goto l; } x = b;
+
+Mon Oct 14 14:19:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (modified_type_die): Don't bother with AT_address_class.
+       (add_data_member_location_attribute): Handle getting a binfo.
+       (add_location_or_const_value_attribute): Handle a decl with no RTL.
+       (add_pure_or_virtual_attribute): Add AT_vtable_elem_location.
+       (add_name_and_src_coords_attributes): Only use DECL_ASSEMBLER_NAME 
+       for staticp things.
+       (gen_subprogram_die): Set up AT_inline for abstract decls.
+       (gen_inheritance_die): New fn.
+       (gen_member_die): Also emit info for base classes.
+
+Sat Oct 12 00:07:00 1996  Doug Evans  <dje@cygnus.com>
+
+       * fold-const.c (make_range): Handle NULL operand 0
+       (like in BIND_EXPRs).
+
+Fri Oct 11 15:42:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (rest_of_compilation): If we did a
+       save_for_inline_copying, reset DECL_ABSTRACT_ORIGIN for the
+       function when we're done.
+
+       * toplev.c (main): DWARF works with C++ now.
+
+       * dwarf2out.c (gen_subprogram_die): Disable MIPS_AT_has_inline
+       support for now.
+
+Fri Oct 11 14:31:10 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * dwarfout.c: (output_bound_representation): Fix typo in prototype.
+
+Fri Oct 11 12:19:21 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.h (MIPS_AS_ASM_SPEC): Define.
+       (SUBARGET_MIPS_AS_ASM_SPEC): Define.
+       (GAS_ASM_SPEC): Define.
+       (TARGET_ASM_SPEC): Define.
+       (SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
+       (SUBTARGET_ASM_DEBUGGING_SPEC): Define.
+       (SUBTARGET_ASM_SPEC): Define.
+       (ASM_SPEC): Rewrite to use above specs.
+       (SUBTARGET_CPP_SIZE_SPEC): Define.
+       (SUBTARGET_CPP_SPEC): Define.
+       (CPP_SPEC): Use above specs.  Don't define _LANGUAGE_C if C++ or
+       Objective C.
+       (EXTRA_SPECS): Define.
+       (SUBTARGET_EXTRA_SPECS): Define.
+       * mips/dec-bsd.h (ASM_SPEC): Don't define.
+       (CPP_SPEC): Don't define.
+       * mips/dec-osf1.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SIZE_SPEC): Define.
+       * mips/elf64.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SPEC): Define.
+       * mips/gnu.h (TARGET_DEFAULT): Define.
+       (ASM_SPEC): Don't define.
+       * mips/iris3.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SPEC): Define.
+       * mips/iris4loser.h (ASM_SPEC): Don't define.
+       (SUBTARGET_MIPS_AS_ASM_SPEC): Define.
+       (SUBTARGET_ASM_OPTIMIZING_SPEC): Define.
+       * mips/iris5.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SPEC): Define.
+       * mips/iris6.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SPEC): Define.
+       (ASM_SPEC): Don't define.
+       (SUBTARGET_ASM_SPEC): Define.
+       (SUBARGET_MIPS_AS_ASM_SPEC): Define.
+       (SUBTARGET_ASM_DEBUGGING_SPEC): Define.
+       * mips/netbsd.h (ASM_SPEC): Don't define.
+       (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SPEC): Define.
+       * mips/osfrose.h (ASM_SPEC, ASM_FINAL_SPEC): Don't define.
+       (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SIZE_SPEC): Define.
+       (SUBTARGET_CPP_SPEC): Define.
+       * mips/sni-svr4.h (CPP_SPEC): Don't define.
+       (SUBTARGET_CPP_SIZE_SPEC): Define.
+
+Thu Oct 10 17:58:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * mips/iris6.h (ASM_OUTPUT_SECTION_NAME): Define.
+       (DWARF_OFFSET_SIZE): Define.
+
+       * dwarf2out.c (most everywhere): Support SGI/MIPS -mabi=64 by fixing
+       code which assumed that pointers are 4 bytes long, parameterizing
+       many sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4,
+       DATA instead of DATA4, FORM_ref instead of FORM_ref4. (DWARF_ROUND,
+       UNALIGNED_DOUBLE_INT_ASM_OP, UNALIGNED_WORD_ASM_OP,
+       ASM_OUTPUT_DWARF_DELTA, ASM_OUTPUT_DWARF_DATA, DW_FORM_data,
+       DW_FORM_ref): New macros.
+       (gen_variable_die): Only equate_decl_number_to_die if
+       decl is TREE_STATIC.
+       (get_AT): Fix thinko.
+
+       * dwarf2out.c (constant_size): New fn.
+       (size_of_die): Use it instead of assuming 4 bytes;
+       usually we only need one.
+       (output_value_format, output_die): Likewise.
+       (build_abbrev_table): We need a new abbrev if the size
+       of the constant differs.
+       (dwarf_attr_name): Add new SGI/MIPS extensions.
+       (gen_subprogram_die): Support DW_AT_MIPS_has_inlines.
+       (gen_inlined_subroutine_die): Likewise.
+
+Thu Oct 10 16:38:58 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.md (mov[sd]fcc): Use register_operand, not reg_or_0_operand,
+       for source predicates.
+
+Thu Oct 10 15:19:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (floatsidf2_load): For large stack frames, do not
+       generate an illegal memory reference.
+       (movdi, movdf define_splits): Fix code so that it works for either
+       big or little endian hosts generating code for either big or
+       little endian targets.
+
+       (from Jim Wilson)
+       * rs6000.c (rs6000_save_toc_p): Delete global variable.
+       (rs6000_{save,restore}_machine_status): Do not save/restore it.
+       (rs6000_init_expanders): Do not initialize it.
+       (rs6000_stack_info): Always create TOC save space.
+
+       * rs6000.md (NT indirect call insns): Do not set
+       rs6000_save_toc_p.
+
+       * rs6000.h (rs6000_save_toc_p): Delete declaration.
+
+Wed Oct  9 18:06:54 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips.h (EMPTY_FIELD_BOUNDARY): Define as 32.
+       * mips/abi64.h (EMPTY_FIELD_BOUNDARY): Don't define.
+
+       * mips/abi64.h (TARGET_DEFAULT, TARGET_LONG64, CPP_PREDEFINES,
+       CPP_SPEC): Move from here...
+       * mips/iris6.h: ...to here.
+
+Wed Oct  9 16:43:51 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (i[3456]86-dg-dgux): Use install-headers-cpio.
+
+       * expr.c (store_constructor): Delete unnecessary increment.
+
+Wed Oct  9 16:29:22 1996  Gavin Koch <gavin@cetus.cygnus.com>
+
+       * cccp.c (do_include): Treat ENOTDIR like ENOENT when an open fails.
+
+Wed Oct  9 16:26:57 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * gcc.c (default_compilers): -ansi no longer implies -$ to cpp.
+       * c-lex.c (yylex): Treat `$' just like `_', except issue a
+       diagnostic if !dollars_in_ident or if pedantic.
+       * c-decl.c (dollars_in_ident): DOLLARS_IN_IDENTIFIERS is now Boolean.
+       (c_decode_option): -fdollars-in-identifiers is now independent
+       of -ansi, of -traditional, and of DOLLARS_IN_IDENTIFIERS.
+       * cexp.y (initialize_random_junk): Ignore DOLLARS_IN_IDENTIFIERS.
+       * cccp.c (dollars_in_ident): Remove; replaced by is_idchar['$'].
+       (main): Initialize is_idchar and is_idstart directly when given -$.
+       Ignore DOLLARS_IN_IDENTIFIERS.
+       (rescan): Diagnose $ in identifier if pedantic.
+       (initialize_char_syntax): Assume $ is allowed in identifier;
+       `main' will change this if -$ is given.
+       * cpplib.h (DOLLARS_IN_IDENTIFIERS): Remove.
+       * cpplib.c (cpp_options_init): Ignore DOLLARS_IN_IDENTIFIERS.
+       (parse_name): Diagnose $ in identifier if pedantic.
+       (cpp_handle_options): -traditional no longer messes with
+       dollars_in_ident.
+       * i386/dgux.h, m68k/apollo68.h (DOLLARS_IN_IDENTIFIERS): Remove.
+       * m88k.h, mips.h, nextstep.h, pa.h (DOLLARS_IN_IDENTIFIERS): Remove.
+       * vax/ultrix.h, vax/vms.h (DOLLARS_IN_IDENTIFIERS): Remove.
+       * convex.h (OVERRIDE_OPTIONS): Don't need to set
+       dollars_in_ident any more, since -ansi doesn't change it.
+
+Wed Oct  9 07:35:47 1996  Doug Evans  <dje@cygnus.com>
+
+       * Allow prefix attributes in more places.
+       * c-parse.in: Update number of shift/reduce conflicts.
+       ({typed_declspecs,reserved_declspecs,declmods}_no_prefix_attr): New.
+       (current_declspecs): Initialize to NULL_TREE.
+       (fndef): Pass current_declspecs, not $1, to start_function.
+       (old_style_parm_decls): Renamed from xdecls.
+       (datadecl, declmods): Add references to new rules.
+       (setspecs): Call split_specs_attrs.
+       (absdcl1): Remove case with setattrs.
+       * c-common.c (split_specs_attrs): New function.
+
+Wed Oct  9 05:48:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * sdbout.c: Include defaults.h.
+       * Makefile.in (sdbout.o): Make dependency list match included files.
+
+       * fold-const.c (range_test): Function deleted.
+       (range_binop, make_range, build_range_check): New functions.
+       (merge_ranges, fold_range_test): Likewise.
+       (fold_truthop): No longer call range_test.
+       (fold, case TRUTH_{AND,OR}{,IF}_EXPR): Call fold_range_test.
+
+Tue Oct  8 22:03:32 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * configure: Set cpu_type for pyramid.
+
+Tue Oct  8 21:54:04 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * final.c (final_start_function): Call dwarfout_begin_prologue.
+
+       * dwarf2out.c (pubname_*, arange_*): New data for .debug_pubnames
+       and .debug_aranges sections.
+       (add_pubname): New fn.
+       (size_of_pubnames): Reimplement.
+       (output_pubnames): Likewise.
+       (add_arange): New fn.
+       (size_of_aranges): Include function sections.
+       (output_aranges): Likewise.
+       (gen_variable_die): Call add_pubname.
+       (add_name_and_src_coords_attributes): Use DECL_ASSEMBLER_NAME for now.
+       (decl_start_label): Renamed from function_start_label.
+       (gen_subprogram_die): If weak or one_only, use a local label for 
+       AT_low_pc.  Call add_pubname and add_arange.
+       (dwarfout_begin_prologue): New fn.  Start up FDE here. 
+       (dwarfout_begin_function): Not here.
+       (get_AT): Split out.  Look in specification and abstract_origin DIEs.
+       (get_AT_low_pc, get_AT_string, get_AT_flag, get_AT_unsigned, 
+       get_AT_hi_pc): Use it.
+       (dwarfout_finish): Variables can produce pubnames, too.
+
+Tue Oct  8 19:35:40 1996  Torbjorn Granlund  <tege@nada.kth.se>
+
+       * m88k/dgux.h (CPP_SPEC): Avoid newline in the string.
+
+       * final.c (final): Update insn_current_address before calling
+       final_scan_insn.
+
+Tue Oct  8 17:52:02 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (unroll_loops): Set local_regno only if set_dominates_use
+       returns true.
+       (set_dominates_use): New function.
+
+Tue Oct  8 16:01:37 1996  Doug Evans  <dje@cygnus.com>
+
+       * c-typeck.c (decl_constant_value): Delete test for ! TREE_PUBLIC.
+
+Tue Oct  8 10:36:44 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (hppa_legitimize_address): Remove test code accidentally left
+       in during last change.
+
+Mon Oct  7 19:55:02 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sched.c (schedule_block): Before scheduling, add code to make all
+       call used regs that are not fixed or global live when we see a
+       CALL_INSN.  During scheduling, change existing code to use same test.
+
+       * varasm.c (bss_section): Delete unused parameters.
+
+Mon Oct  7 16:24:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2.h: Add new SGI/MIPS attributes.
+
+       * dwarf2out.c (*_separate_line_info_*): Parallel line number
+       information for functions defined in sections other than .text.
+       (size_of_line_info): Support it.
+       (output_line_info): Likewise.
+       (dwarfout_line): Likewise.
+       (gen_compile_unit_die): Don't add high/low_pc or stmt_list
+       attributes here.
+       (dwarfout_finish): Add them here if appropriate.
+       (remove_AT): free removed attribute properly.
+       (gen_type_die): Don't assume a nested type is complete.
+       (dwarfout_finish): Don't emit line info if it would be empty.
+
+       * dwarfout.c (output_block): Don't emit a DIE for a body block.
+       (output_decls_for_scope): Don't increment next_block_number for the
+       outer block.
+       (output_decl): Start from the outer block, not
+       the first inner block since there can be more than one in C++.
+       (type_tag): Handle C++ TYPE_NAME.
+       (output_type): Fix handling of TYPE_METHODS.
+       (output_decl): Don't output a DIE for artificial typedefs.
+
+Mon Oct  7 15:47:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (movdi define_splits): Fix previous change to work
+       on both little and big endian hosts.
+
+Sun Oct  6 16:52:34 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (combinable_fsub): Don't return without a value.
+
+Sun Oct  6 14:05:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (mov{df,di} define_splits): Use split_double to
+       properly split CONST_DOUBLEs.
+       (movdi): Likewise.
+
+Sat Oct  5 08:43:14 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * i386/cygwin32.h (LIB_SPEC): Add support for -mwindows.
+       Always pass -lkernel32.
+       (LIBGCC_SPEC): Don't delete.
+       (STARTFILE_SPEC): Remove always-true conditionalization.
+       (LONG_DOUBLE_TYPE_SIZE): Use default.
+
+Fri Oct  4 17:22:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (rest_of_type_compilation): Don't emit DWARF for member
+       types of a type we haven't emitted yet.
+       (compile_file): Still emit DWARF for pending tagged types.
+
+       * final.c (final_scan_insn): Do emit DWARF labels for level 1 blocks.
+
+       * dwarf2out.c (gen_subprogram_die): Start from the outer block, not
+       the first inner block since there can be more than one in C++.
+       (gen_lexical_block_die): Keep track of the block depth.
+       (gen_block_die): Don't emit a DIE for a body block.
+       (gen_inlined_subroutine_die): Don't emit anything for an
+       abstract instance.
+       (decls_for_scope): Don't increment next_block_number for the
+       outer block.
+
+Fri Oct  4 15:27:55 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.h (PRESERVE_DEATH_INFO_REGNO_P): Define.
+
+       * sh.c (sfunc_uses_reg): New function.
+       (noncall_uses_reg, machine_dependent_reorg, final_prescan_insn):
+       Handle special functions like function calls for purposes of relaxing.
+       (noncall_uses_reg): Added some missing cases of registers
+       being used in non-call instructions.
+
+Fri Oct  4 10:51:40 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c: Tear out backchaining brain damage.
+       (remove_AT, remove_children): New functions.
+       (modified_type_die): Call gen_type_die instead of backchaining.
+       (gen_subprogram_die): Don't generate a new specification DIE for 
+       member functions defined in the class; use the declaration DIE instead.
+       (gen_struct_or_union_type_die): Support DW_AT_declaration.
+       (gen_type_die): Don't set TREE_ASM_WRITTEN on incomplete structs.
+       (gen_decl_die): Revert previous change; it's much simpler to emit 
+       the class from rest_of_type_compilation.
+
+Fri Oct  4 09:54:21 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * Make sure we have enough registers for the insns we recognize.
+       * i386.h (flag_omit_frame_pointer, outer_function_chain): Declare.
+       (current_function_calls_alloca): Likewise
+       (rtx_equal_function_value_matters): Likewise
+       (N_REGS_USED, N_ALLOCATABLE_REGISTERS): Define.
+
+       * i386.md (adddi3_1, subdi3_1): Insns renamed from adddi3 and subdi3;
+       added missing earlyclobbers.
+       (adddi3_1): Removed duplicates from commutativity.
+       (adddi3, subdi3): New define_expands.
+       (movsf, movsf_mem, movsf_normal, movdf, movdf_mem , movdf_mem+1): Take
+       number of used vs. available registers into account.
+       (movxf, movxf_mem, movxf_mem+1, addsidi3_1, addsidi3_2): Likewise.
+       (adddi3_1, subsidi3, subdi3_1): Likewise.
+       (addsidi3_1, addsidi3_2, subsidi3): Need no generate function.
+
+       * i386.c (asm_output_function_prefix): Don't use
+       ASM_DECLARE_FUNCTION_NAME if it is not defined.
+
+Fri Oct  4 07:01:55 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * stor-layout.c (layout_decl): Don't turn off DECL_BIT_FIELD
+       if DECL's alignment is less than its type.
+
+Thu Oct  3 19:42:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (rest_of_type_compilation): Also do this for DWARF.
+       (compile_file): Don't try to write out DWARF for vars with no RTL.
+
+Thu Oct  3 18:31:28 1996  Doug Evans  <dje@cygnus.com>
+
+       * ginclude/{stdarg.h,varargs.h}: Use #include "", not #include <>.
+
+Wed Oct  2 17:29:53 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixincludes: Add a hack to the big sed script to work around a
+       bug in the sed implementation on HP/UX 10.20.
+
+Wed Oct  2 16:53:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (modified_type_die): Don't generate redundant DIEs.
+       (gen_{array,pointer,reference,ptr_to_mbr}_type_die): Likewise.
+       (gen_{subroutine,string,set}_type_die): Likewise.
+
+       * dwarf2out.c: Undo text_end_label, add_src_coords changes.
+       (addr_const_to_string): Fix typos.
+       (decl_class_context): New fn.
+       (get_AT_unsigned): New fn.
+       (gen_subprogram_die): Only emit src coords info for a specification
+       if they changed.
+       (gen_variable_die): Support DW_AT_declaration and DW_AT_specification.
+       (gen_decl_die): Avoid generating redundant DIEs for member functions
+       and variables.
+
+Wed Oct  2 11:22:50 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (EXTRA_CONSTRAINT): Loosen conditions for match of
+       'Q' and 'T' while reload is running.
+       * pa.c (hppa_legitimize_address): Rework to generate more
+       indexed and scaled indexed addressing.
+       * pa.md (scaled indexed store): Add define_splits to undo
+       pessimizations created by hppa_legitimize_address for integer
+       stores.
+
+       * pa.c (remove_useless_addtr_insns): New function.
+       (pa_reorg): Delete code to remove useless add,tr insns.
+       Instead call remove_useless_addtr_insns.
+       (output_function_prologue): Call remove_useless_addtr_insns
+       to catch any add,tr insns created by reorg.
+
+       * pa.c (secondary_reload_class): Remove duplicate/useless code.
+
+       * pa.h (PARSE_LDD_OUTPUT): Handle output from hpux10.20 "chatr".
+
+Tue Oct  1 17:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dwarf2out.c (text_end_label): New static.
+       (size_of_line_info): The final entry is smaller.
+       (output_aranges): Use TEXT_SECTION instead of TEXT_BEGIN_LABEL and
+       text_end_label instead of TEXT_END_LABEL.
+       (gen_compile_unit_die): Likewise.
+       (output_line_info): Likewise.  Use a fixed advance for the last entry.
+       (dwarfout_init): Don't output starting labels.
+       (dwarfout_finish): Set up text_end_label.  Don't output ending labels.
+
+       (add_pure_or_virtual_attribute): Don't say pure virtual for now.
+       (type_tag): Handle C++ TYPE_NAME.
+       (gen_formal_parameter_die): Support DW_AT_artificial.
+       (gen_formal_types_die): Do emit the type for 'this'.
+       (gen_member_die): Fix handling of TYPE_METHODS.
+       (gen_decl_die): Do output a DIE for member function declarations.
+       Don't output a DIE for artificial typedefs.
+
+       (add_member_attribute): Remove, not in DWARF-II.
+       (gen_array_type_die): Remove ref to add_member_attribute.
+       (gen_set_type_die, gen_entry_point_die, gen_enumeration_type_die,
+       gen_subprogram_die, gen_variable_die, gen_field_die,
+       gen_pointer_type_die, gen_reference_type_die, gen_ptr_to_mbr_type_die,
+       gen_string_type_die, gen_struct_or_union_type_die,
+       gen_subroutine_type_die, gen_typedef_die): Likewise.
+
+       (get_AT_flag): New fn.
+       (add_src_coords_attributes): Split out...
+       (add_name_and_src_coords_attributes): From here.
+       (gen_subprogram_die): Support DW_AT_declaration and 
+       DW_AT_specification. 
+
+       (gen_compile_unit_die): Don't emit full pathname for source file; 
+       comment claimed that SGI required it, but they don't emit it either.
+       Append -g to producer rather than replacing it.
+
+Tue Oct  1 14:19:23 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * gcc.c (used_arg): When call xmalloc for mswitches, pass 1 if
+       n_switches is zero.
+
+Mon Sep 30 17:46:26 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (gen_shl_and, gen_shl_sext): Use gen_lowpart to
+       generate rtx in the appropriate mode for zero/sign-extension.
+       Don't generate a zero bit shift.
+       (gen_shl_sext) Directly use gen_ashift instead of gen_ashrsi3.
+
+Mon Sep 30 17:17:56 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixinc.svr4: In math.h, redefine exception to __math_exception
+       for C++, to avoid conflict with <exception>.
+       * fixincludes: Likewise.
+       Fix check for class in math.h to not match fp_class.
+
+Mon Sep 30 17:15:19 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * iris6.h (ASM_SPEC): Add -w.
+       (STARTFILE_SPEC): Add mips3 to n32 pathnames.
+       Add -L/usr/lib32/mips for n32 cases.
+       (ENDFILE_SPEC): Add mips3 to n32 pathnames.
+
+Mon Sep 30 13:20:31 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * genopinit.c (gen_insn): Look through the modes in reverse order,
+       to avoid stopping early on CC when EXTRA_CC_MODES is used.
+
+       * fixincludes: Add extern "C" to <sys/mman.h> on HP/UX.
+
+Sun Sep 29 12:39:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * c-typeck.c (pointer_diff): Do not do default conversions when
+       doing the minus expression, in case restype is a short type.
+
+Sun Sep 29 11:22:10 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.c (build_complex): Add new argument, TYPE.
+       * tree.h (build_complex): Likewise.
+       * c-lex.c (yylex): Add new arg, TYPE, to call to build_complex.
+       * fold-const.c (const_binop): Likewise.
+       (fold, case CONJ_EXPR, COMPLEX_EXPR): Likewise.
+       * varasm.c (copy_constant, case COMPLEX_CST): Likewise.
+       * expr.c (expand_expr, case COMPONENT_REF): Don't try to directly
+       load a complex.
+       * recog.c (register_operand): Don't reject subreg of complex mode.
+       * emit-rtl.c (mark_user_reg): New function.
+       * function.c (assign_parms): Use it.
+       * stmt.c (expand_decl): Likewise, and simplify code.
+
+       * tree.c (contains_placeholder): Return 1 for PLACEHOLDER_EXPR.
+
+       * expr.c (store_expr): memset/bzero gets ptr_mode, not Pmode.
+
+       * stmt.c (expand_asm_operands): Fix errors in previous patches.
+
+       * x-linux: Simplify, but ensure headers aren't changed.
+
+       * getpwd.c: No longer include direct.h for _WIN32.
+
+       * configure (i[3456]86-*-isc*): Remove bogus echo.
+       (m68k-apple-aux*): a-ux.h renamed from aux.h.
+       (CC): Escape "$" char in "no-symlink" case for bash/cygwin32 bug.
+
+       * Makefile.in (installdirs): Renamed from install-dir.
+       Create $(prefix) and $(exec_prefix) if doesn't exist.
+       (install-float): Reflect new name for installdirs.
+       (install-{common,info,man,libgcc,multilib,libobjc}): Likewise.
+       (install-{include-dir,assert-h,collect2}): Likewise.
+
+       * reload1.c (gen_reload): Handle SUBREG in PLUS specially too.
+       Change calls to emit_move_insn to recursive calls.
+
+       * stmt.c (fixup_gotos): When running undefined labels, if no cleanup
+       actions for this block, don't clear BEFORE_JUMP.
+
+Fri Sep 27 13:48:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * c-decl.c (init_decl_processing): Create short int types before
+       creating size_t in case a machine description needs to use
+       unsigned short for size_t.
+
+Fri Sep 27 12:28:54 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+        * gcc.c (do_spec_1): Allow -A in %[Spec].
+       
+       * i386.h (CPP_CPU_SPEC): New. Added for defining the submodel.
+
+       * i386.c (asm_output_function_prefix, function_prologue,
+       ix86_expand_prologue): Make the routine that sets the GOT (when pic
+       is enabled) a function, to assist debugging.
+
+       * i386.md (gen_prologue_get_pc): Call the function created above.
+       (divdf3): Added. 
+       
+       * i386/dgux.h (CPP_PREDEFINES, CPP_SPEC): Reference CPP_CPU_SPEC.
+       Use svr4 assembler directive .backalign instead of .align.  
+       (align to x bytes if it takes no more than y bytes to do so.)
+
+       * i386/{aix386ng.h,dgux.h} (CPP_SPEC): Use %[cpp_cpu].
+       * i386/{freebsd-elf,gas,isc,linux-aout}.h: Likewise.
+       * i386/{linux-oldld,linux,osfelf,osfrose,sco,sco4}.h: Likewise.
+       * i386/{sco4dbx,sco5,sol2,sysv3}.h: Likewise.
+
+Thu Sep 26 17:58:34 1996  Torbjorn Granlund  <tege@matematik.su.se>
+
+       * m68k.md (mulsidi3 matcher): Change predicate const_int_operand
+       to const_sint32_operand.  Get rid of bogus range condition.
+
+Thu Sep 26 17:12:00 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (stmp-int-hdrs): Don't cd to srcdir before copying
+       header files to objdir.
+
+Wed Sep 25 21:22:57 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300.h (FIRST_PSEUDO_REGISTER): Bump up by one.
+       (ARG_POINTER_REGNUM): Likewise.
+       (FIXED_REGISTERS): Add entry for MAC register.
+       (CALL_USED_REGISTERS< REG_ALLOC_ORDER): Likewise.
+       (HARD_REGNO_NREGS): Handle MAC register.
+       (HARD_REGNO_MODE_OK< REGNO_OK_FOR_BASE_P): LIkewise.
+       (REGISTER_NAMES): Likewise.
+       (enum reg_class): New MAC_REGS register class.
+       (REG_CLASS_CONTENTS, REGNO_REG_CLASS): Corresponding changes.
+       (REG_CLASS_FROM_LETTER): LIkewise.
+       (REGISTER_MOVE_COST): Make copies to/from the MAC register
+       expenseive.
+       (CONDITIONAL_REGISTER_USAGE): Define.
+       * h8300.md (movsi_h8300hs): Renamed from movsi_h8300h.
+       Handle moves to/from the MAC register.
+       (mac): Two new patterns to use the mac instruction.
+
+       * h8300.c (notice_update_cc): Fix CC_SET case.
+       (restore_compare_p): Remove unused function.
+       * h8300.md: Handle "set" vs "set_zn_c0" correctly.
+       (bCC patterns): No longer need to call restore_compare_p.
+
+       * h8300.c (get_shift_alg): Fix HImode ASHIFTRT by 13 or 14 bits.
+
+Wed Sep 25 18:52:19 1996  Joern Rennecke <amylaar@cygnus.co.uk>        
+
+       * sh.md (insv): New pattern.
+
+Wed Sep 25 16:47:26 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * sparc/t-sunos41 (MULTILIB_{OPTIONS,DIRNAMES,MATCHES}): Create
+       multilib versions of -fpic and -fPIC.
+       (TARGET_LIBGCC2_CFLAGS): Comment out.
+
+       * sparc.c (print_operand): Handle new codes H/L.
+       * sparc.md (lo_sum_di_sp32): Add little endian support.
+       (adddi3_sp32,subdi3_sp32,mulsidi3_sp32,const_mulsidi3): Likewise.
+       (umulsidi3_sp32,const_umulsidi3,smacdi,umacdi,anddi3_sp32): Likewise.
+       (iordi3_sp32,xordi3_sp32,negdi2_sp32): Likewise.
+
+Wed Sep 25 15:32:35 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * expmed.c (store_bit_field): Don't make flag_force_mem disable insv
+       for memory operands.
+       
+       * function.c (instantiate_decl): Always store addr back into x.
+
+Tue Sep 24 19:37:00 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * reload.c (push_secondary_reload): Do strip paradoxical SUBREG
+       even if reload_class is CLASS_CANNOT_CHANGE_SIZE.  Change reload_mode
+       to mode in SECONDARY_MEMORY_NEEDED and get_secondary_mem calls.
+
+       * reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
+       emit after RELOAD_FOR_OUTPUT, in reverse order of reload number,
+       but not separately.
+
+Tue Sep 24 18:13:07 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * expr.c (emit_group_load): Allow target to be smaller than source.
+
+Tue Sep 24 17:40:39 1996  Doug Evans  <dje@cygnus.com>
+
+       * m68k/a-ux.h: Renamed from aux.h because of MSDOS.
+
+Tue Sep 24 08:33:53 1996  David S. Miller  (davem@caip.rutgers.edu)
+
+       * tree.c (copy_node): Fix error in last change.
+
+Tue Sep 24 08:29:03 1996  James G. Smith  <jsmith@cygnus.co.uk>
+
+       * gcc.c (used_arg): Fix multilib_matches parsing to not corrupt
+       entry parameter.
+
+Tue Sep 24 08:22:18 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * loop.c (get_condition): Use rtx_equal_p to compare rtx.
+
+Tue Sep 24 08:14:01 1996  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>
+
+       * integrate.c (expand_inline_function): Avoid creating paradoxical
+       subreg wider than BITS_PER_WORD as inlined function result.
+
+Tue Sep 24 08:00:15 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c (struct directive, directive_table, handle_directive):
+       pass_thru now 1 for #define and 2 for #pragma.
+       (handle_directive): When deciding whether to suppress comment at end
+       of directive, ignore tabs and spaces after comment.  Remove redundant
+       limit test.  With -dD -C, copy comment when isolating definition.
+       (skip_to_end_of_comment): With -C, don't copy newline at end
+       of C++ comment.
+
+       * fixinc.ptx, fixinc.svr4, fixincludes: Insert newlines just before
+       end of 'sed' command strings if last 'sed' command is 'a' or 'i'.
+
+Tue Sep 24 07:28:58 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * toplev.c (PREFERRED_DEBUGGING_TYPE): If no debugging formats are
+       supported, set to NO_DEBUG.
+       (main): Don't do setting of PREFERRED_DEBUGGING_TYPE here.
+
+Mon Sep 23 22:45:15 1996  Sean McNeil  <sean@mcneil.com>
+
+       * rs6000/vxppc.h, sparc/vxsim.h: New files.
+       * configure (powerpc-*-vxworks*, sparc-*-vxsim*): New targets.
+       * objc/objc.h (BOOL): Define BOOL as int for VxWorks.
+
+Mon Sep 23 21:23:27 1996  Klaus K"ampf  (kkaempf@progis.de)
+
+       * explow.c (promote_mode, case REFERENCE_TYPE): New case.
+
+Mon Sep 23 21:15:43 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-decl.c (finish_struct): Check PCC_BITFIELD_TYPE_MATTERS value.
+
+       * dbxout.c (dbxout_symbol): Fix forgotten case in last change:
+       check DECL_ARTIFICIAL also when using the short cut way.
+
+Mon Sep 23 15:55:24 1996  David S. Miller  (davem@caip.rutgers.edu)
+
+       * tree.c (copy_node): Abort if don't know size of node.
+
+       * tree.c (build1): Clean up initialization of OBSTACK.
+
+Mon Sep 23 15:35:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * Makefile.in (stmp-multilib): Depend on $(LANG_LIB2FUNCS).
+
+       * dbxout.c (dbxout_function): Don't check DECL_SECTION_NAME before
+       calling dbxout_function_end.
+
+Mon Sep 23 14:41:12 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * combine.c (can_combine_p): Even if SMALL_REGISTER_CLASSES,
+       know lifetime not extended if all_adjacent set.
+
+       * stmt.c (expand_asm_operands): Handle '+' constraint.
+       * cse.c (fold_rtx): Fold inside ASM_OPERANDS.
+
+       * expr.c (expand_increment): If postincrement for MEM can't use add
+       directly, load address in reg and enqueue increment and store of reg.
+
+       * loop.c (check_dbra_loop): Don't assume label must be second part of
+       if_then_else in condjump.
+
+        * jump.c (jump_optimize): In no-nop move deletion, don't
+       test PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is
+       performed.
+       Check for REG_UNUSED note on to-be deleted insn before searching for
+       preceding instruction to delete note from.
+       If PRESERVE_DEATH_INFO_REGNO_P is true for SREG, replace INSN with USE.
+
+       * reload1.c (reload): Initialize the previous_offset fields
+       in reg_eliminate before calling setup_save_areas.
+
+       * reload1.c (emit_reload_insns): Declare and set this_reload_insn.
+
+       * expr.c (var_rtx): New function.
+       (expand_expr, case COND_EXPR): Also use target if same as singleton.
+
+Mon Sep 23 14:22:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * recog.c (constrain_operands): Don't test clobbered constraints.
+
+       * reload1.c (emit_reload_insns): For output part of RELOAD_OTHER,
+       put in front of anything previous for that output, but not separately.
+
+Sun Sep 22 21:06:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-common.c (decl_attribtes, case A_SECTION): Allow for static
+       local variable.
+
+Sun Sep 22 11:30:27 1996  Christian Iseli  (christian.iseli@di.epfl.ch)
+
+       * expr.c (convert_move): Replace explicit checks for FP extend ops
+       with use of can_extend_p.
+       Add missing tests for FP trunc operations.
+
+Sun Sep 22 11:20:02 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * dwarfout.c (DWARF_VERSION): Define as 1 if not already defined.
+       * dwarf2out.c (DWARF_VERSION): Likewise.
+
+Sun Sep 22 11:12:20 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+        * c-decl.c (pushdecl): Check new declaration actually conflicts before
+       warning about implicit external vs. static declarations.
+
+       * loop.c (combine_givs): Improve combining DEST_REG giv with
+       its only use.
+
+Sun Sep 22 10:50:03 1996  Scott Christley <scottc@net-community.com>
+
+       * Create consistent mechanism for memory allocation and release
+       so that garbage collection routines can be easily subsititued
+       for the ANSI standard malloc, realloc, free, etc.
+       * objc/archive.c: Replace use of __objc_xmalloc and free 
+       with objc_malloc and objc_free.
+       * objc/hash.c: Replace use of __objc_xcalloc and free
+       with objc_calloc and objc_free.
+       * objc/init.c: Replace use of free with objc_free.
+       * objc/misc.c (objc_malloc): Renamed from __objc_xmalloc.
+       (objc_realloc): Renamed from __objc_realloc.
+       (objc_atomic_malloc): New function.
+       (objc_valloc): New function.
+       (objc_calloc): Renamed from __objc_calloc.
+       (objc_free): New function.
+       * objc/objc-api.h (_objc_malloc): New function pointer.
+       (_objc_atomic_malloc, _objc_valloc): Likewise.
+       (_objc_realloc, _objc_calloc, _objc_free): Likewise
+       * objc/objc-list.h: Replace use of __obj_xmalloc and free
+       with objc_malloc and objc_free.
+       * objc/objects.c: Likewise.
+       * objc/sarray.c: Replace use of __objc_xmalloc and free
+       with objc_malloc and objc_free.
+       * objc/sarray.h (__objc_xmalloc, __objc_xrealloc): Delete.
+       * objc/selector.c: Replace use of __objc_xcalloc, __objc_xrealloc,
+       and __objc_xmalloc with objc_calloc, objc_realloc, and objc_malloc.
+       * objc/thr-decosf1.c: Replace use of __objc_xmalloc and free
+       with objc_malloc and objc_free.
+       * objc/thr-irix.c, objc/thr-mach.c, objc/thr-os2.c: Likewise.
+       * objc/thr-posix.c, objc/thr-pthreads, objc/thr-single: Likewise.
+       * objc/thr-solaris.c, objc/thr-win32.c, objc/thr.c: Likewise.
+
+Sun Sep 22 05:26:01 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * configure: Set up LANG_LIB2FUNCS and LANG_EXTRA_HEADERS.
+       * Makefile.in (libgcc2.a): Include LANG_LIB2FUNCS.
+       (USER_H): Add LANG_EXTRA_HEADERS.
+       (LANG_LIB2FUNCS): New macro.
+       (LANG_EXTRA_HEADERS): New macro.
+       (stmp-int-hdrs): Don't hardwire ginclude.
+       (stamp-objlist): Don't depend on Makefile.
+
+Sat Sep 21 18:00:10 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * alpha.md (alpha_swapped_comparison_operator pattern): Fix asm
+       operand typo in last change.
+
+Sat Sep 21 07:11:51 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * defaults.h (ASM_OUTPUT_LABELREF): Provide default definition
+       if not already defined.
+       * 1750a.h (USER_LABEL_PREFIX): Define instead of ASM_OUTPUT_LABELREF.
+       * a29k.h, alpha.h, convex.h, dsp16xx.h, elxsi.h, fx80.h: Likewise.
+       * gmicro.h, h8300.h, i386/sun386.h, i860.h, i960.h, ns32k.h: Likewise.
+       * pdp11.h, pyr.h, romp.h, sh.h, sparc.h, spur.h, tahoe.h: Likewise.
+       * vax.h, we32k.h: Likewise.
+       * i386/att.h (USER_LABEL_PREFIX): Redefine, not ASM_OUTPUT_LABELREF.
+       * i386/bsd.h, i386/lynx.h, i386/sco5.h, i860/fx2800.h: Likewise.
+       * m68k/3b1.h, m68k/mot3300.h, m68k/tower-as.h, m68k/tower.h: Likewise.
+       * ptx4.h, sparc/pbd.h, svr3.h, svr4.h: Likewise.
+       * i386/osfrose.h, m88k.h (USER_LABEL_PREFIX): Redefine.
+       * nextstep.h (USER_LABEL_PREFIX): Redefine.
+       (ASM_OUTPUT_LABELREF) Use USER_LABEL_PREFIX.
+       * arm/aout.h, mips.h (ASM_OUTPUT_LABELREF): Delete.
+       * rs6000/lynx.h (USER_LABEL_PREFIX): Undefine.
+       * rs6000.h, rs6000/win-nt.h (USER_LABEL_PREFIX): Define.
+
+Thu Sep 19 00:05:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * configure: Move i[3456]86-*-gnu* case after linux and don't
+       treat linux-gnu like other gnu systems.
+
+Wed Sep 18 20:51:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cplus-dem.c (demangle_template): Fix handling of address args.
+       (gnu_special): Handle type_info stuff.
+
+Wed Sep 18 17:57:55 1996  Patrik Lantto (patrik@opq.se)
+
+       * jump.c (jump_optimize): Insert conditional move after jump
+       insn instead of before. 
+
+Wed Sep 18 17:33:36 1996  Richard Henderson  <rth@tamu.edu>
+
+       * alpha.h (PREDICATE_CODES): Add alpha_swapped_comparison_operator.
+       * alpha.c (alpha_swapped_comparison_operator): New function.
+       (print_operand): Support unsigned codes for %D, %c, and %d.
+       * alpha.md: Add pattern for b%c with swapped comparisons with 0.
+       Delete three unnamed cmp patterns that are strict subsets of it.
+
+       * alpha.c (alpha_emit_set_long_const): Save one instruction
+       when -O2 and high word == low word.
+
+Tue Sep 17 22:46:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386/unix.h (ASM_OUTPUT_MI_THUNK): Handle functions
+       returning an aggregate.
+
+       * varasm.c (supports_one_only): New function.
+       (make_decl_one_only): Likewise.
+       * svr4.h (MAKE_DECL_ONE_ONLY): Define.
+       * tree.h (DECL_ONE_ONLY): New macro.
+
+       * varasm.c (assemble_variable): Fix setting of
+       first_global_object_name.
+       (assemble_start_function): Likewise.
+
+Tue Sep 17 19:42:39 1996  Doug Evans  <dje@wabamun.cygnus.com>
+
+       * i386/t-cygwin32 (winnt.o): Compile properly.
+
+Tue Sep 17 15:47:20 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * Add support for VR5000, and finish MIPS4 support.
+       * mips.h (enum processor_type): Add PROCESSOR_R5000.
+       (gen_conditional_move): Declare.
+       (CONDITIONAL_REGISTER_USAGE): Mark ST_REGS as fixed if not
+       HARD_FLOAT, or if mips_isa < 4.
+       (FIRST_PSEUDO_REGISTER): Change to 76.
+       (FIXED_REGISTERS): Add condition code registers.
+       (CALL_USED_REGISTERS): Likewise.
+       (ST_REG_LAST): Change to 74.
+       (RAP_REG_NUM): Change to 75.
+       (ST_REG_P): Look for any condition code register.
+       (REG_CLASS_CONTENTS): Update for new condition code registers.
+       (RTX_COSTS): Add cases for R5000.
+       (REGISTER_MOVE_COST): Add cases for condition code registers.
+       (PREDICATE_CODES): Add "const_float_1_operand".
+       (EXTRA_CC_MODES): Remove.
+       (EXTRA_CC_NAMES): Remove.
+       (SELECT_CC_MODE): Remove.
+       (REGISTER_NAMES): Add entries for new condition code registers.
+       (DEBUG_REGISTER_NAMES): Likewise.
+       (ADDITIONAL_REGISTER_NAMES): Remove FPSW_REGNUM.
+       * mips.md (cpu attribute): Add R5000.
+       (function units): Add cases for the R5000.
+       (madd.d): Only available if TARGET_DOUBLE_FLOAT.
+       (msub.d, nmadd.d, nmsub.d): Likewise.
+       (recip.d, recip.s, rsqrt.d, rsqrt.s): New define_insn patterns.
+       (movcc): New pattern to move condition code values.
+       (reload_incc, reload_out_cc): New define_expand patterns.
+       (lwxc1, ldxc1, swxc1, sdxc1): Several new define_insn patterns.
+       (various): Replace CC_FP with CC.
+       (branch_fp_ne, branch_fp_eq): Match any condition code register.
+       (branch_fp_ne_rev, branch_fp_eq_rev): Remove.
+       (seq_df, slt_df, sle_df): Match any condition code register.
+       (sgt_df, sge_df, seq_sf, slt_sf, sle_sf): Likewise.
+       (sgt_sf, sge_sf): Likewise.
+       (sne_df, sne_sf): Remove.
+       (FP conditional moves): Match any condition code register.
+       Require TARGET_HARD_FLOAT and, if appropriate,
+       TARGET_DOUBLE_FLOAT.
+       (movsicc): Just call gen_conditional_move.
+       (movdicc, movsfcc, movdfcc): New define_expand patterns.
+       * mips.c (mips_reg_names): Add condition code registers.
+       (mips_sw_reg_names): Likewise.
+       (mips_regno_to_class): Likewise.
+       (const_float_1_operand): New function.
+       (mips_move_1word): Treat CCmode as SImode.  Handle move from
+       ST_REG to GR_REG if mips_isa >= 4.  Only permit move from GR_REG
+       to ST_REG is mips_isa < 4.
+       (gen_conditional_branch): Rewrite.  Just use CCmode, not extra
+       condition modes.
+       (gen_conditional_move): New function.
+       (override_options): Recognize vr5000.  Look for just CCmode, not
+       extra condition modes.  If mips_isa >= 4, permit CCmode in GR_REGS
+       and FP_REGS.
+       (print_operand): Handle %Z.
+       (mips_secondary_reload_class): Require a data register to copy a
+       value out of a condition code register.  Require a floating point
+       register to copy a value into a condition code register.
+
+Tue Sep 17 15:10:29 1996  Joern Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.md: New define_splits to recombine output from LEGITIMIZE_ADDRESS.
+       * sh.h (LEGITIMIZE_ADDRESS): Typo fixes (x -> X).
+
+Mon Sep 16 23:00:35 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * configure (build_broken_install): Renamed from host_broken_install.
+       Set from build not host.
+       (build_install_headers): Renamed from host_install_headers.  Set from
+       build not host.
+
+Mon Sep 16 22:38:55 1996  Stu Grossman  (grossman@critters.cygnus.com)
+
+       * configure (m68k-*-coff*): Use dbx debug format by default.
+       * gcc.c (link_command_spec): Move -T to end of link command line.
+       * m68k/m68kemb.h (LINK_SPEC, SUBTARTGET_SWITCHES): Delete.
+       (LIB_SPEC): Define to just -lc.
+       (STARTFILE_SPEC): Define to empty.
+
+Mon Sep 16 13:12:27 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.c (ext_shift_insns, ext_shift_amounts): new arrays.
+       (gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): new functions.
+       rtx_equal_function_value_matters: declare.
+       (shl_and_length, shl_and_src_length, gen_shl_and): new functions.
+       (shl_sext_kind, shl_sext_length, gen_shl_sext): new functions.
+       * sh.md (ashlhi3_k, lshrhi3_m): new insn pattern.
+       (lshrhi3, shl_sext_ext, shl_sext_sub):
+       new insn pattern with matching define_split.
+       (and_shl_scratch): Likewise, but also with unnamed variants.
+
+Sat Sep 14 17:05:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * gcc.c (convert_filename): Don't start looking for '.' until
+       after last directory separator.
+
+       * i386.md (clrstrsi): Correct check for constant size.
+
+       * Based on code by sac@cygnus.com.
+       * i386/cygwin32.h (CHECK_STACK_LIMIT): Make consistent with MD file.
+       * i386.c ({function,ix86_expand}_prologue): Use __alloca to allocate
+       stack if desired and beyond CHECK_STACK_LIMIT in size.
+       * i386.h ({MASK,TARGET}_STACK_PROBE): New macros.
+       (TARGET_SWITCHES): Add -mstack-arg-probe.
+       * i386.md (allocate_stack{,_worker}): New patterns.
+
+Fri Sep 13 18:23:18 1996  Joel Sherrill <joel@OARcorp.com>
+
+       * sparc/lb1spc.asm (.div, .rem): Fixed typo so sign is returned
+       correctly.  TOPBITS was 2 and should have been 4.
+
+Thu Sep 12 21:51:56 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.md (call_value_multiple_internal0): Change from define_insn to
+       define_expand.
+
+Thu Sep 12 19:22:14 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * sparc.md (move_pic_label_si): Operand one is label_ref now.
+       * sparc.c (emit_move_sequence): Pass label_ref to
+       gen_move_pic_label_si to not lose flags.
+
+Wed Sep 11 12:10:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * Makefile.in (GCC_PASSES): Add $(exeext) to names.
+       (FLAGS_TO_PASS): Add CLIB.
+       (c-pragma.o): Add dependencies on except.h, function.h, defaults.h.
+
+Tue Sep 10 22:25:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure (i[3456]86-*-cygwin32): Use xm-cygwin32.h and xm-i386.h.
+       Set fixincludes to Makefile.in and objc_thread_file to win32.
+       * i386/xm-cywin32.h: Don't include xm-i386.h.
+       * i386/x-cygwin32, rs6000/x-cygwin32 (STMP_FIXPROTO, exeext): New defs.
+
+       * gcc.c (HAVE_EXECUTABLE_SUFFIX): New macro.
+       (convert_filename): New function.
+       (process_command, case 'o'): Call it.
+       (process_command, default case): Likewise; delete old code.
+
+Tue Sep 10 21:08:43 1996  Torbjorn Granlund  <tege@albert.gnu.ai.mit.edu>
+
+       * i386.md (decrement_and_branch_until_zero matcher): Fix typo.
+
+Tue Sep 10 19:04:19 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.c (mips_move_2words): Rewrite 32 bit shifts as 16 bit shifts.
+
+Tue Sep 10 10:39:07 1996  Jeffrey A Law  (law@cygnus.com)
+       
+       * pa/pa-gas.h (DBX_DEBUGGING_INFO): Remove all #define
+       and #undef statements related to debugging information.
+       * pa/pa-hpux.h, pa-hpux7.h: Likewise
+       * pa.c (override_options): Disable "-g" and issue a warning
+       if it's used when !TARGET_GAS.
+
+Mon Sep  9 17:57:49 1996  Doug Evans  <dje@wabamun.cygnus.com>
+
+       * sparc.h ({MASK,TARGET}_FPU_SET): Define.
+       (TARGET_SWITCHES): Record if -m{,no-}fpu passed.
+       * sparc.c (sparc_override_options): Don't clobber explicit
+       -m{,no-}fpu setting with cpu default.
+
+Mon Sep  9 15:57:57 1996  Joel Sherrill  <joel@OARcorp.com>
+
+        * configure (mips64orion-*-rtems*): New target.
+        * mips/rtems64.h: New file.
+
+Sat Sep  7 22:07:53 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (store_field): If storing a record on big endian targets,
+       set up so we store the high-order bits.
+       (expand_expr, case COMPONENT_REF): Likewise for loads.
+
+Thu Sep  5 14:59:47 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * sh.h (LEGITIMIZE_ADDRESS): Define nonempty.
+
+Thu Sep  5 10:43:36 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (movsi, movdi, movsf patterns): Handle
+       'R' constraints as needed.
+
+Wed Sep  4 17:13:28 1996  Bob Manson  <manson@charmed.cygnus.com>
+
+       * except.c: (add_partial_entry): New routine.
+       (expand_start_try_stmts): Moved from cp/except.c.
+       (expand_start_all_catch): Move functionality of expand_end_try_stmts
+       here.
+
+Wed Sep  4 12:30:02 1996  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (emit_unwinder): Ensure that CLOBBER and USE insns come
+       last, if present.
+
+Tue Sep  3 12:01:43 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure (sh-*-elf*): New target.
+       * sh/elf.h: New file.
+
+Fri Aug 30 17:52:26 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (gen_formal_types_die): Delete extra argument from
+       gen_type_die call.
+
+Fri Aug 30 15:40:40 1996  James G. Smith  <jsmith@cygnus.co.uk>
+
+       * mips/elf64.h: Allow MULTILIB_DEFAULTS to be defined
+       before this file is included.
+
+Fri Aug 30 15:00:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md: (movsicc,movhicc): Allow reload from memory.
+       
+       * i386.c (override_options): Don't thread the prologue if profiling.
+
+Fri Aug 30 15:00:06 1996  James Hawtin  <cgjwh@sunrise.co.uk>
+       
+       * i386/t-sol2 (gcrt1.o): Added for profiling Solaris 2
+       * i386/sol2.h (STARTFILE_SPEC): New.
+       * i386/gmon-sol2.c, i386/sol2-gc1.asm: New files.
+       
+Thu Aug 29 22:08:03 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * except.c (add_eh_table_entry): Multiply realloc size by sizeof int.
+
+Thu Aug 29 15:15:31 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.md (fcmp patterns): Don't try to eliminate useless add,tr
+       insns here.
+       * pa.c (pa_reorg): Do elimination of useless add,tr insns here instead.
+       (print_operand, case 'y'): Remove this code.
+
+Wed Aug 28 16:19:34 1996  Doug Evans  <dje@cygnus.com>
+
+       * toplev.c (print_single_switch): Ultrix fprintf returns 0 for success.
+
+       * toplev.c (main): Rewrite -g parsing.
+
+Mon Aug 26 16:15:49 1996  Fred Fish  <fnf@cygnus.com>
+
+       * Makefile.in (objc-parse.y): Fix typo in name of temp file.
+
+Mon Aug 26 14:08:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (mark_all_temps_used): Fix error in last change.
+
+Sun Aug 25 22:27:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (mark_all_temps_used): New function.
+
+Fri Aug 23 11:34:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Fixes to make -fPIC
+       really the same as -mrelocatable.
+       (ASM_SPEC): Pass -K PIC to the assembler if -fpic/-fPIC.
+
+       * rs6000/sol2.h (ASM_CPU_SPEC): Remove passing -K PIC to the
+       assembler if -fpic/-fPIC.
+
+       * bi-{arity,opcode,opname}.c (fancy_abort): Define, so that
+       -Dabort=fancy_abort works again.
+
+Thu Aug 22 11:39:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/t-ppcgas ({stmp,install}-crt): Only build and install the
+       eabi ecrt[in].o object files in eabi multilib directories, only
+       build and install the solaris scrt[in0].o object files in solaris
+       directories.
+       (MULTILIB_MATCHES): Remove matches for solaris, linux to other
+       switches.
+
+Tue Aug 20 18:49:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): If -mrelocatable or
+       -mrelocatable-lib, don't make read-only sections, since if there
+       are pointers to be fixed up, the assembler complains.
+
+Mon Aug 19 18:42:13 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc.h ({MASK,TARGET}_LITTLE_ENDIAN): Define.
+       (LIBGCC2_WORDS_BIG_ENDIAN): Add little endian support.
+       * sparc/sp64-elf.h ({CPP,ASM,LINK}_SPEC): Add little endian support.
+       (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
+       ({BYTES,WORDS}_BIG_ENDIAN): Likewise.
+       * sparc/splet.h (SUBTARGET_SWITCHES): Recognize -m{big,little}-endian.
+       ({CPP,ASM,LINK}_SPEC): Add little endian support.
+       ({BYTES,WORDS}_BIG_ENDIAN): Likewise.
+       * sparc/t-splet (MULTILIB_{OPTIONS,DIRNAMES}): Likewise.
+
+       * sparc/lynx-ng.h (CPP_SPEC): Use %(cpp_cpu).
+
+Sat Aug 17 15:23:39 1996  Geoffrey Noer  <noer@cygnus.com>
+
+       * i386/cygwin32.h (CPP_PREDEFINES): Define _WIN32, not WIN32.
+       Define only __CYGWIN32__, not CYGWIN32 or __CYGWIN32.
+       * rs6000/cygwin32.h (CPP_PREDEFINES): Likewise.
+       * cccp.c (absolute_filename): Drive specifiers make the pathname
+       absolute in cygwin32.
+       * choose-temp.c: Delete !defined(_WIN32) condition when including
+       sys/file.h (NO_SYS_FILE_H is still used).
+       * gcc.c: Change ifndef _WIN32 to ifndef NO_SYS_FILE_H when deciding
+       whether to include sys/file.h.
+       (execute): -pipe is supported for cygwin32.
+       * getopt.c: Change win32 test from WIN32 to _WIN32.
+       * pexecute.c: Update test for win32 (&& ! cygwin32).
+       * protoize.c: Likewise.
+       (kill): Delete decl.
+       * toplev.c: Update test for win32 (&& ! cygwin32).
+       * ginclude/stdarg.h: Change __WIN32__ to _WIN32.
+       * ginclude/varargs.h: Likewise.
+       * ginclude/va-ppc.h: Likewise.
+
+Fri Aug 16 16:02:09 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (rs6000_got_register): Make sure pic_offset_table_rtx
+       allocated, even if current_function_uses_pic_offset_table set.
+
+Fri Aug 16 15:56:04 1996  J. Kean Johnston  <hug@netcom.com>
+
+       * i386/sco5.h (CLASS_LIKELY_SPILLED_P): Deleted.
+       (STARTFILE_SPEC): Insert crtbegin.o in correct place, and correct
+       versions of values-X?.o.
+       (SWITCH_TAKES_ARG): Extend DEFAULT_SWITCH_TAKES_ARG, not replace.
+       (CPP_SPEC): Add -Di386, and correctly include extra directories.
+       Define HAVE_ATEXIT in ELF mode for global destructors.
+
+Thu Aug 15 16:42:44 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc.c (label_ref_operand): New function.
+       (emit_move_sequence): Pass label_ref to gen_move_label_di to not
+       lose flags.
+       * sparc.md (move_label_di): Operand one is label_ref now.
+       * genattrtab.c (write_test_expr): Allow label_ref in match_dup.
+
+       * sys-protos.h (gethostid): Make return type `int' ifdef __alpha__.
+       * gen-protos.c: Delete support for SYS_PROTO_OVERRIDES.
+       * alpha.h (SYS_PROTO_OVERRIDES): Delete.
+
+Thu Aug 15 17:36:09 1996  Mike Stump  <mrs@cygnus.com>
+
+       * libgcc2.c (__throw): New routine.
+       (__eh_pc): New data object for exception handling.
+
+       * except.c (eh_saved_pc): New object so we can call
+       assemble_external.
+       (expand_internal_throw_indirect): Call assemble_external for __eh_pc.
+       (end_eh_unwinder): Likewise.
+       (init_eh): Initialize eh_saved_pc.
+
+Thu Aug 15 13:02:42 1996  Mike Stump  <mrs@cygnus.com>
+
+       * arm.h (RETURN_ADDR_RTX): Define.
+
+       * expr.c (expand_builtin_return_addr): Fix order of parameters.
+
+Wed Aug 14 19:48:00 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
+
+       * stmt.c (expand_return): In code for doing scc with jumps,
+       stick to default handling if we have corresponding scc pattern.
+
+Wed Aug 14 10:31:28 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (override_options): Treat TARGET_FAST_INDIRECT_CALLS
+       just like TARGET_NO_SPACE_REGS.
+       (output_millicode_call): Likewise.
+       * pa.h (TARGET_FAST_INDIRECT_CALLS): Define.
+       (TARGET_SWITCHES): Add "fast-indirect-calls".
+       * pa.md: Treat TARGET_FAST_INDIRECT_CALLS just like
+       TARGET_NO_SPACE_REGS in various call/millicode call patterns.
+
+       * pa.c (print_operand): Use the right comparison operator
+       for reversed EQ and NE comparisons.
+
+       * pa.h (OUTPUT_MI_THUNK): Define.
+
+Wed Aug 14 11:40:49 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * ginclude/va-ppc.h: Add Windows NT support.
+       * ginclude/{varargs,stdarg}.h: For PowerPC Windows NT, include
+       va-ppc.h, instead of using the default handling.
+
+Tue Aug 13 18:30:10 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixincludes: Remove duplicate volatile from sig_atomic_t in AIX
+       sys/signal.h
+
+Tue Aug 13 16:51:37 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * i960-coff.h (LIB_SPEC): Undef.
+
+       * sh.h (PROFILE_BEFORE_PROLOGUE): Define.
+
+Tue Aug 13 11:36:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * gcc.c (set_spec,process_command): Dump and load the compiler
+       version number in the specs file.
+
+       * rs6000.c (output_toc): Fix last change, so that it doesn't use
+       an uninitialized variable if -mminimal-toc.
+       (output_prolog): Increment probe_labelno after last use.
+
+       * rs6000/t-ppcgas (MULTILIB_*): Build far fewer multilib
+       libraries.  Build all libraries with -mrelocatable-lib and
+       -mno-eabi.  Build special Linux and Solaris libraries.
+       * rs6000/eabi{,aix,le}.h (MULTILIB_DEFAULTS): Adapt to changes in
+       t-ppcgas.
+       * rs6000/(linux,sol2).h (MULTILIB_DEFAULTS): Ditto.
+       * rs6000/{sysv4,sysv4le} (MULTILIB_DEFAULTS): Ditto.
+
+Tue Aug 13 11:36:02 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * rs6000.c (handle_mac_pragma): Initialize "psize".
+
+Mon Aug 12 18:14:35 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * gcc.c (used_arg): Initialize cnt to zero.
+
+Mon Aug 12 14:03:16 1996  Jim Wilson  <wilson@cygnus.com>
+
+       From Mike Stump:
+       * sh.c (regno_reg_class): Change entry 23 from NO_REGS to GENERAL_REGS.
+       (initial_elimination_offset): New variable live_regs_mask.  Add
+       code to handle RETURN_ADDRESS_POINTER_REGNUM.
+       * sh.h (RAP_REG, RETURN_ADDRESS_POINTER_REGNUM): Define.
+       (ELIMINABLE_REGS): Add RETURN_ADDRESS_POINTER_REGNUM support.
+       (RETURN_ADDR_RTX): Define.
+       (REGISTER_NAMES): Add rap.
+
+       * iris5.h (DOLLARS_IN_IDENTIFIERS): Undefine.
+
+       * m68kemb.h (LIB_SPEC): Always emit -lc.
+
+Mon Aug 12 12:30:25 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (rs6000_got_register): Test variable
+       current_function_uses_pic_offset_table to see whether or not a GOT
+       register has been created already.
+
+       * Makefile.in (multilib.h): Move to stamp-mlib.
+       (stamp-mlib): Use move-if-change to conditionally update
+       multilib.h.  Pass MULTILIB_EXTRA_OPTS to genmultilib.
+       (STAGESTUFF): Add stamp-mlib.
+       (mostlyclean): Delete tmp-mlib.h.
+
+       * genmultilib: Take a fifth argument to add options to pass on to
+       all multilib builds.  Restructure output so that we pass the
+       synonym switches and extra arguments separately, and not
+       exponentially slow down genmultilib.
+
+       * gcc.c (toplevel): Rearrange multilib support so that we support
+       passing the synonyms separately from the normal switches.  Add
+       support for passing additional switches to be used on all multilib
+       builds.  Dump and restore the value of MULTILIB_DEFAULTS so that
+       gcc cover programs for other targets will correctly chose the
+       appropriate multilib directory.
+       (setspec,process_command,main): Ditto
+       (used_arg,default_arg,print_multilib_info): Ditto.
+
+Mon Aug 12 07:46:47 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (expand_builtin, case BUILT_IN_SETJMP): Add test
+       and call for nonlocal_goto_receiver pattern.
+       * stmt.c (expand_end_bindings): Likewise.
+
+       * stmt.c (expand_asm_operands): Fix off-by-one error when
+       scanning constraints.
+
+Sun Aug 11 22:48:02 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * expr.c (store_expr): Handle COND_EXPR cleanups like expand_expr.
+
+Sun Aug 11 22:42:36 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>
+
+       * optabs.c (expand_abs): When OP0 and TARGET are the same
+       pseudo register, it is safe to use TARGET.
+
+       * local-alloc.c (reg_equiv_replace): New variable.
+       (update_equiv_regs): Set reg_equiv_replacement for all REG_EQUIV
+       notes encountered or generated.
+
+Sun Aug 11 22:27:14 1996  Scott Christley <scottc@net-community.com>
+
+       * objc/hash.c (hash_is_key_in_hash): Function somehow got lost.
+
+Sun Aug 11 21:43:15 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * ginclude/stddef.h (__need_wint_t): Move #undef to right place.
+
+Sun Aug 11 17:46:22 1996  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * c-decl.c (finish_struct): If pedantic, also warn if struct/union
+       has no named members.
+
+Sun Aug 11 17:32:52 1996  Joel Sherrill <joel@OARcorp.com>
+
+       * i386/rtems.h: Renamed from i386/i386-rtems.h
+       * i960/rtems.h: Renamed from i960/i960-rtems.h
+       * m68k/rtems.h: Renamed from m68k/m68k-rtems.h
+       * rs6000/rtems.h: Renamed from rs6000/powerpc-rtems.h
+       * sparc/rtems.h: Renamed from sparc/sparc-rtems.h
+       * config/t-rtems: New file.
+       * configure (i386-*-rtems*): Added t-rtems to tmake_file.
+       Renamed i386/i386-rtems.h to i386/rtems.h.
+       (i960-*-rtems*): Added t-rtems to tmake_file.
+       Renamed i960/i960-rtems.h to i960/rtems.h.
+       Added original tm.h file and dbxcoff.h.
+       (m68k-*-rtems*): Added t-rtems to tmake_file.
+       Renamed m68k/m68k-rtems.h to m68k/rtems.h.
+       (powerpc-*-rtems*): Added t-rtems to tmake_file.
+       Renamed rs6000/powerpc-rtems.h to rs6000/rtems.h.
+       (sparc-*-rtems*): Added t-rtems to tmake_file.
+       Renamed sparc/sparc-rtems.h to sparc/rtems.h.
+
+Fri Aug  9 16:05:13 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md: (untyped_call) Avoid SIGFPE.
+
+       * i386.c (output_float_compare): Don't try to initialize
+       aggregate local variable; use assignment statements instead.
+
+       * i386.h (RTX_COSTS): rtx_cost should pass two parameters.
+       
+       * i386/go32.h (ASM_OUTPUT_SECTION_NAME): New.
+
+Fri Aug  9 16:00:11 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * winnt.c (gen_stdcall_suffix): Round parameter size to PARM_BOUNDARY.
+
+Thu Aug  8 17:42:35 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (output_toc): If we are emitting a reference to a
+       vtable, don't put in the section name, just use the symbol.
+
+Wed Aug  7 19:03:36 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.md (casesi_jump): New pattern.
+       (casesi): Generate RTL to match it.
+
+Wed Aug  7 14:10:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * ginclude/stddef.h (NULL): Use __null for G++.
+
+Tue Aug  6 17:37:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (STACK_BOUNDARY): Always define as 64.
+       (ABI_STACK_BOUNDARY): Define as 64/128 based on the -mno-eabi
+       switch.
+
+       * rs6000.c (rs6000_stack_info): Use ABI_STACK_BOUNDARY, not
+       STACK_BOUNDARY.  Define ABI_STACK_BOUNDARY as STACK_BOUNDARY #ifndef.
+
+Tue Aug  6 14:29:43 1996  Doug Evans  <dje@fallis.cygnus.com>
+
+       * gen-protos.c (overrides): New static local.
+       (add_hash,parse_fn_proto): New static functions.
+       (main): Add prototypes from SYS_PROTO_OVERRIDES to hash table before
+       parsing sys-protos.h.  Reserve entry 0 in std_protos.
+       * alpha.h (SYS_PROTO_OVERRIDES): Define.
+
+Mon Aug  5 16:53:36 1996  Doug Evans  <dje@fallis.cygnus.com>
+
+       * sparc/t-splet (MULTILIB_OPTIONS): Add mbroken-saverestore.
+       (MULTILIB_DIRNAMES): Add brknsave.
+
+       * stor-layout.c (layout_record): Correct overflow test for 0 sized
+       fields.
+
+Mon Aug  5 16:12:19 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * alpha.c (alpha_output_filename): When emitting stabs, don't
+       disable them if using GNU as.
+       (alpha_output_lineno): Likewise, when not using GNU as.
+
+       * sh.c (arith_reg_operand): Reject SUBREG of an invalid hard reg.
+
+       * sparc/lite.h (aoutos.h): Don't include it.
+       * configure (sparclite-*-aout*): Add aoutos.h to tm_file.
+
+Sat Aug  3 23:13:55 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * combine.c (rtx_equal_for_field_assignment_p): Check for
+       get_last_value returning (CLOBBER (CONST_INT 0)).
+
+Sat Aug  3 20:19:14 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * i960.md (subsi3+1): Handle case where first operand is constant
+       but second operand is not.
+
+       * m68k/vxm68k.h (WCHAR_TYPE_SIZE): Undef, then define to 16.
+
+Fri Aug  2 15:46:19 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa/pa-hpux.h (LINK_SPEC): Don't link in PA1.1 specific
+       libraries when creating shared libraries.
+       * pa/pa-hpux9.h, pa/pa-hpux10.h: Likewise.
+
+Fri Aug  2 13:36:42 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (output_float_compare): fcomi should be followed by the
+       correct conditional jump instead of fcom/pfstsw/and/jne
+       (override_options): Added -mbranch-cost to set BRANCH_COST.
+       
+       * i386.md (sgt+1,slt+1,sge+1,sle+1,bgt+1,blt+1,bge+1,ble+1,bleu+4)
+       Added TARGET_CMOVE check for fcomi.
+       (movsicc_1+1,movhicc_1+1): Added to handle the general case.
+       
+       * i386.h (i386_branch_cost, i386_branch_cost_string): Added.
+
+Fri Aug  2 11:53:55 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * sparc/vxsparc.h (CPP_PREDEFINES): Add `-DCPU=SPARC'.
+
+Thu Aug  1 23:56:01 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (ASM_OUTPUT_INT): Remove all hacks for exception table.
+
+Thu Aug  1 10:08:14 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
+
+       * m68k.h (RTX_COSTS, case PLUS): Get operand order right.
+
+Wed Jul 31 15:06:46 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc.md (negtf2,abstf2): Fix v9 case.
+
+Wed Jul 31 09:49:25 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (ASM_OUTPUT_INT): Use an 'E%' prefix for items in
+       the exception table if TARGET_GAS && ! TARGET_PORTABLE_RUNTIME.
+
+Tue Jul 30 15:37:31 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * i386/cygwin32.h (dbxcoff.h): Include.
+       (DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
+       Move definitions before include of dbxcoff.h.
+       (ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_MAIN_SOURCE_FILE_END): Delete.
+       (DBX_BLOCKS_FUNCTION_RELATIVE, DBX_FUNCTION_FIRST): Delete.
+
+Tue Jul 30 15:03:53 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
+
+       * i960.md (eq reg (const_int 0)): New pattern.
+
+Tue Jul 30 11:15:44 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (RETURN_ADDR_RTX): Offset is -20 from the frame, not +20!
+
+Mon Jul 29 12:16:17 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.h (GO_IF_LEGITIMATE_ADDRESS): Fix thinko in last change.
+
+Fri Jul 26 18:19:47 1996  Doug Evans  <dje@cygnus.com>
+
+       * dwarfout.c (output_bound_representation): Fix typo.
+
+Thu Jul 25 16:00:10 1996  Mike Stump  <mrs@cygnus.com>
+
+       * expr.c (do_jump, case TRUTH_ORIF_EXPR): Ensure end of an
+       exception region comes after its start.
+       (do_jump, case TRUTH_ANDIF_EXPR): Likewise.
+
+Thu Jul 25 13:36:42 1996  Stan Cox  <coxs@equinox>
+
+       * i386.c (output_float_compare): Added support for Pentium Pro
+       fcomi instruction which sets EFLAGS instead of FPU Status Word.
+
+Wed Jul 24 21:48:08 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * cse.c (canon_hash, cse_insn): MEM is not unchanging if it is
+       in the frame (since the temp slot might be reused).
+
+Wed Jul 24 17:34:06 1996  J"orn Rennecke (amylaar@cygnus.com)
+
+       * sh.md (branch_true, branch_false, inverse_branch_true): Express
+       tests of the T bit as comparisons against zero, rather than one.
+       (inverse_branch_false, beq, bne, bgt, blt, ble, bge, bgtu): Likewise.
+       (bltu, bgeu, bleu, casesi): Likewise.
+
+Wed Jul 24 15:58:06 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md: (mov{sf,df,xf}cc{,_1}): New patterns for P6 FP cmove.
+       * i386.c (put_condition_code, print_operand, output_fp_cc0_set):
+       Support fcmov suffixes.
+
+Wed Jul 24 10:53:38 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * pa.c (move_operand): Relax "mode" test.  Allow scaled
+       indexed addressing modes.
+       (output_fp_move_double): Tweak output strings to work with updated
+       'F' and 'M' output modifiers.
+       (print_operand): Collapse 'F' and 'M' into a single hunk of code.
+       For auto-increment modes output "s,ma" and "s,mb".
+       For scaled indexing modes output "x,s"
+       For other addresses, output nothing for 'M' and "s" for 'F'.
+       * pa.h (EXTRA_CONSTRAINT): Don't accept scaled indexed addresses
+       for 'Q' and 'T'.  Do accept scaled indexed addresses for 'R'.
+       (GO_IF_LEGITIMATE_ADDRESS): Accept scaled indexed addresses
+       for SFmode and DFmode.
+       * pa.md: Remove all scaled indexed load patterns.
+       (movsi patterns): Accept scaled indexed addresses in some
+       cases.  Update output strings for updated 'M' and 'F' output modifiers.
+       (movhi, movqi, movsf, movdf, movdi patterns): Likewise.
+
+Tue Jul 23 23:10:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.h (struct tree_int_cst): Add field for TREE_CST_RTL.
+       * varasm.c (decode_addr_const, output_constant_def): AllowINTEGER_CST.
+
+Tue Jul 23 16:42:09 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.c (reg_unused_after): Handle JUMP_INSN inside a sequence.
+
+Tue Jul 23 16:33:25 1996  Mike Stump  <mrs@cygnus.com>
+
+       * Make exception handling work better when optimizations are on.
+       * except.c, except.h: New files.
+       * Makefile.in (OBJS): Add except.o.
+       (except.o): Add.
+       (stmt.o, final.o): Add except.h.
+       * rtl.c (note_insn_name): Add NOTE_INSN_EH_REGION_{BEG,END}.
+       * rtl.h: Likewise.
+       * arm.h (MASK_RETURN_ADDR): Define.
+       * pa.h (MASK_RETURN_ADDR, RETURN_ADDR_RTX): New macros.
+       * sparc.h (DOESNT_NEED_UNWINDER): Define if not doing a flat function.
+       * mips.h (RETURN_ADDR_RTX): Improve.
+       * vax.h (RETURN_ADDR_RTX): Improve.
+       * toplev.c (rest_of_compilation): Use find_handler_labels.
+       (main, interim_eh{,_hook}): Remove interim_eh_hook support.
+       (flag_exceptions): New flag; also add to table.
+       (compile_file): Emit the exception table in the backend now.
+       * final.c (final_scan_insn): Support ASM_OUTPUT_EH_REGION_{BEG,END}.
+       (final_scan_insn): Redo handler labels, implement
+       NOTE_INSN_EH_REGION_BEG and NOTE_INSN_EH_REGION_END and use them
+       instead of CODE_LABELs.
+       (final): Add call to check_handler_labels.
+       * libgcc2.c (L_eh): Add support for EH_TABLE_LOOKUP.
+       * sparc.md (return): Add a reference to the return address register.
+       * flow.c (find_basic_blocks): Add support for handler_labels.
+       * loop.c (find_and_verify_loops): Likewise.
+       * jump.c (jump_optimize): Likewise.
+       Add call to check_handler_labels.  Add call to exception_optimize.
+       * sched.c (sched_analyze): Smuggle exception region notes around.
+       (unlink_notes, reemit_notes, schedule_block): Likewise.
+       (sched_analyze): Add extra element since we remove two at a time.
+       * integrate.c (save_for_inline_copying): Add support for exception
+       regions.
+       (expand_inline_function): Likewise.
+       (function_cannot_inline_p): Don't inline functions that have EH
+       regions before NOTE_INSN_FUNCTION_BEG.
+       (finish_inline): Use FIRST_FUNCTION_INSN, not NEXT_INSN.
+       * function.c (expand_start_all_catch): New function.
+       * function.h: Add exception handling support information.
+       * expr.c (expand_expr, {defer,expand}_cleanups_to, do_jump): Transform
+       interim_eh_hook into calls to expand_ehregion_{start,end}.
+       * stmt.c (expand_{decl_cleanup,cleanups}): Likewise.
+       (init_stmt_for_function): Call init_eh.
+       (save_stmt_status): Call save_eh_status.
+       (restore_stmt_status): Call restore_eh_status.
+       * expr.h (throw_libfunc): Add.
+       * optabs.c (throw_libfunc): Initialize.
+       * print-rtl.c (print_rtx): Add support for exception regions.
+       * rs6000.c (EXCEPTION_SECTION): Define.
+       * output.h (exception_section): Declare.
+       * varasm.c (exception_section): Define.
+       * i386.c, i960.c, rs6000.c: Include except.h for function.h.
+       * c-pragma.c, emit-rtl.c, expr.c, final.c, flow.c: Include except.h.
+       * function.c, integrate.c, jump.c, loop.c, objc-act.c: Likewise.
+       * stmt.c, stor-layout.c, toplev.c, tree.c, varasm.c: Likewise.
+       
+Tue Jul 23 12:32:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (rs6000_replace_regno): Set pic_offset_table_rtx so
+       that other phases will use the PIC register instead of the
+       placeholder.
+
+       * rs6000.md (movsi_got*): Eliminate -fPIC code, keep -fpic code.
+       (movsi): Only call movsi_got if -fpic, not -fPIC.
+
+       * sysv4.h (OVERRIDE_OPTIONS): Improve error messages.  Always set
+       -msdata=data by default, even if -fpic/-fPIC/-mrelocatable.  Treat
+       -fPIC the same as -mrelocatable-lib and vica versa.
+
+       * t-ppcgas: (MULTILIB_*): Use -mreloctable-lib, instead of
+       -mrelocatable.  Map Solaris into mcall-sysv-noeabi case.  Build
+       -mrelocatable-lib libraries under non-eabi case.  When linking, if
+       -fpic, -fPIC, or -shared, link in the -mrelocatable-lib libraries.
+
+Mon Jul 22 19:34:20 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * iris6.h (ASM_SPEC): Change {% to %{.
+
+       * dwarf2out.c (output_call_frame_info): Change FDE CIE offset to
+       be section name rather than 0.
+       (gen_subprogram_die): Only emit DW_AT_external if origin is NULL.
+       Only call equate_decl_number_to_die if origin is NULL.
+       (dwarfout_begin_function): In code that computes offset of frame
+       pointer, change 4 to UNITS_PER_WORD.
+
+       * combine.c (undo_all): Clear previous_undos field.
+
+Mon Jul 22 19:10:45 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * configure: Don't change target_alias to target in Makefile.
+
+Sat Jul 20 09:28:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * dwarfout.c (output_bound_representation): Treat default case
+       as variable bounds, then look inside for SAVE_EXPR.
+
+       * mips.h (INITIALIZE_TRAMPOLINE): Use `_flush_cache'; flush data
+       cache too.
+
+Sat Jul 20 09:24:13 1996  Marco Walther  (Marco.Walther@mch.sni.de).
+
+       * configure (mips-sni-sysv4): New target.
+       * mips/sni-gas.h, mips/sni-svr4.h, mips/x-sni-svr4: New files.
+
+Fri Jul 19 17:44:13 1996  Stan Coxs  <coxs@dg-rtp.dg.com>
+
+       * i386.md: (leave): Clobbers esp and ebp.
+
+       * i386.h: (TARGET_USE_Q_REG): Support inline strlen on PentiumPro
+
+Fri Jul 19 15:56:18 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * m68k/t-m68kbare (MULTILIB_OPTIONS): Add m5200.
+       (MULTILIB_EXCEPTIONS): Define.
+       * m68k/lb1sf68.asm: Add MCF5200 support.
+       * m68k.md (adddi_sexthishl32): Set condition to !TARGET_5200.
+       (subdi_sexthishl32, ashrdi3, ashrhi3): Likewise.
+       (negdi2): Change into define_expand.
+       (negdi2_internal): Rename from old negdi2; condition now !TARGET_5200.
+       (negdi2_5200): New insn.
+       * m68k.c (output_function_prologue): Don't use add.w if TARGET_5200.
+       (output_function_epilogue): Likewise.
+
+       * m68k.md (movqi): Remove complex cases which move between address reg
+       and memory; rely on secondary reloads instead.
+
+Fri Jul 19 12:22:50 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * fixproto (std_files): Add utime.h.
+
+Fri Jul 19 10:59:46 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * m68k/m68kemb.h: Remove '\' at EOF.
+
+Fri Jul 19 09:59:00 1996  Joel Sherrill <joel@OARcorp.com>
+
+       * m68k/coff.h (STARTFILE_SPEC): Add #undef before definition.
+
+Fri Jul 19 09:44:45 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * m68k.h (LEGITIMATE_INDEX_P): Coldfire does not have scale
+       by 8 addressing modes.
+
+       * m68k-none.h: Use MASK_* macros instead of explicit constants.
+
+Fri Jul 19 09:08:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.md (negdi2): Undo last change: don't apply neg to address regs.
+
+Fri Jul 19 09:03:01 1996  Robert Wilhelm  (rwilhelm@Physik.TU-Muenchen.DE)
+
+       * toplev.c (main): Correct typo in error message.
+
+Thu Jul 18 20:29:33 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * Makefile.in (OBJS): Add dwarf2out.o.
+       (dwarf2out.o): New rule.
+       * dwarf2.h, dwarf2out.c: New files.
+       * dwarfout.c: Check DWARF_VERSION macro.
+
+       * mips/iris6.h (DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE):
+       Move after header files are included.
+       (iris5.h): Include instead of iris5gas.h.
+       (MACHINE_TYPE): Change 5.x to 6.x.
+       (DEBUG_SECTION, LINE_SECTION): Add debug_ to name, fix attributes.
+       (SFNAMES_SECTION, SRCINFO_SECTION, MACINFO_SECTION, PUBNAMES_SECTION,
+       ARANGES_SECTION): Fix attributes.
+       (DWARF_VERSION, MIPS_DEBUGGING_INFO, ASM_DECLARE_FUNCTION_NAME,
+       ASM_DECLARE_FUNCTION_SIZE, FUNCTION_NAME_ALREADY_DECLARED,
+       FRAME_SECTION, ABBREV_SECTION): Define.
+       (DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, MIPS_DEBUGGING_INFO,
+       DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_INFO): Delete undefs at
+       end of file.
+       * mips/mips.c (function_prologue): Use FUNCTION_NAME_ALREADY_DECLARED.
+       (function_epilogue): Likewise.
+
+Thu Jul 18 19:24:19 1996  David Mosberger-Tang  <davidm@azstarnet.com>
+
+       * alpha/elf.h (INT_ASM_OP): Change from ".long" to ".quad".
+
+Thu Jul 18 19:20:58 1996  Ulrich Drepper  <drepper@myware.rz.uni-karlsruhe.de>
+
+       * stddef.h: Undefine __need_wint_t.
+
+Thu Jul 18 19:06:35 1996  J.T. Conklin  <jtc@hippo.cygnus.com>
+
+       * longlong.h (mc680x0): Define umul_ppmm, udiv_qrnnd, sdiv_qrnnd
+       for the '020, '030, '040, and '332.  Define count_leading_zeros
+       for the '020, '030, '040, and '060.
+
+       * m68k.md: Add TARGET_5200 to conditions which determine whether
+       the extbl instruction is emitted.
+       (mulsi3): Enable pattern with TARGET_5200.
+
+       * m68k.md (add patterns): Don't use two addqw instructions when
+       adding small (8 < N <= 16) integers to address registers on 68040.
+
+Thu Jul 18 18:06:15 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure: Write target_alias in Makefile.
+       (i[3456]86-*-sco3.2v4*): Set truncate_target.
+       * Makefile.in (target_alias): New and used for all current uses
+       of `target'.
+
+Thu Jul 18 17:46:02 1996  Dave Love  <d.love@dl.ac.uk>
+
+       * gcc.c (default_compilers): Extra Fortran extensions.
+
+Wed Jul 17 10:28:10 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>
+
+       * expmed.c (expand_mult_highpart): Revert last change.
+
+Tue Jul 16 12:51:59 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc/sparc-rtems.h: #include "sparc/sparc-aout.h" -> sparc/aout.h.
+
+Mon Jul 15 14:42:06 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/iris6.h (LINK_SPEC): Add -woff 84.
+
+Fri Jul 12 17:34:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/eabi.asm (__eabi): Convert pointers in the Global Offset
+       Table if -mrelocatable.  Move loops into separate subroutines for
+       ease of debugging.  Reorganize code somewhat.
+
+       * rs6000/rs6000.c (small_data_operand): Allow small data under
+       Solaris.
+
+       * rs6000/sol-c0.c (_start): Initialize r13 to point to the small
+       data operand.
+
+       * rs6000/sol-c{i,n}.asm (_init, _fini): Enable shared library
+       support.
+
+       * rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Default to
+       -msdata=data, even if -fpic or -mrelocatable.  Allow -mrelocatable
+       and -mno-eabi.
+       (CPP_SYSV_SPEC): If -fpic, define __PIC__ and __pic__ to 1.  If
+       -fPIC, define them to 2.
+       (CPP_ENDIAN_SPEC): Push definition of macros for specific endian
+       targets to new specs.
+       (CPP_ENDIAN_DEFAULT_SPEC): Define to use CPP_ENDIAN_BIG_SPEC.
+       (CPP_ENDIAN_{LITTLE,BIG,SOLARIS}_SPEC): New specs for little
+       endian mode, big endian mode, and Solaris, which can't define
+       _LITTLE_ENDIAN.  Define __LITTLE_ENDIAN__ in all cases for little
+       endian systems.  Define __BIG_ENDIAN__ in all cases for big endian
+       systems.
+       (SUBTARGET_EXTRA_SPECS): Add new specs.
+
+       * rs6000/{eabile,sysv4le}.h (CPP_ENDIAN_DEFAULT_SPEC): Define to
+       use CPP_ENDIAN_LITTLE_SPEC.
+
+       * rs6000/sol2.h (CPP_ENDIAN_LITTLE_SPEC): Define as
+       CPP_ENDIAN_SOLARIS_SPEC so that _LITTLE_ENDIAN is not define.
+
+Fri Jul 12 17:34:01 1996  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.c (function_arg): Add IBM AIX XL compiler broken FP arg
+       passing compatibility mode.
+       * rs6000.h (TARGET_XL_CALL): Define default.
+       * aix3newas.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
+       * aix41.h (TARGET_XL_CALL, SUBTARGET_SWITCHES): Define.
+
+Fri Jul 12 15:04:43 1996  Doug Evans  <dje@cygnus.com>
+
+       * arm/arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures.
+
+       * ptx4.h ({ASM,LINK}_SPEC): %{V} %{v:%{!V:-V}} -> %{v:-V}.
+       * svr4.h ({ASM,LINK}_SPEC): Likewise.
+       * dsp16xx/dsp16xx.h ({ASM,LINK}_SPEC): Likewise.
+       * i386/dgux.h (LINK_SPEC): Likewise.
+       * i386/sol2.h (LINK_SPEC): Likewise.
+       * m88k/dgux.h ({LINK,ASM_CPU}_SPEC): Likewise.
+       * sparc/sol2.h ({ASM,LINK}_SPEC): Likewise.
+       * sparc/sp64-elf.h ({ASM,LINK}_SPEC): Likewise.
+       * sparc/sysv4.h (ASM_SPEC): Likewise.
+
+Thu Jul 11 17:29:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.h (GOT_TOC_REGNUM): New macro for r2, which is used as a
+       marker for the GOT/TOC register to be allocated later.
+       (MACHINE_DEPENDENT_REORG): Call rs6000_reorg.
+       (rs6000_reorg): Add declaration.
+
+       * rs6000.c (rs6000_got_register): Return REG 2, not a pseudo
+       register in order to work with inlined functions.
+       (rs6000_replace_regno): New function to replace a register with a
+       new pseudo register.
+       (rs6000_finalize_pic): Loop through all of the insns, replacing
+       any GOT_TOC_REGNUM registers with a new pseudo register, and
+       adding the initialization of of the GOT register if it was
+       created.
+       (rs6000_reorg): New function to check whether the GOT_TOC register
+       marker was removed.
+
+Thu Jul 11 10:12:50 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * h8300/h8300.h (OK_FOR_U): If generating H8/S code, accept
+       SYMBOL_REF and SYMBOL_REF + CONST_INT.
+
+       * h8300/h8300.c (shift_one): Emit tabs between opcode and
+       operands to be consistent with the rest of the compiler.
+       (rotate_one): Likewise.
+       (shift_two, rotate_two): Define.
+       (get_shift_alg): Accept new argument "assembler2_p" for
+       rotate/shift by two insns.  All callers changed.  Rework
+       to generate more efficient code on the H8/300, H8/300H, and
+       H8/S.  Try to simplify somewhat.
+       (emit_a_shift): Use shift-by-two insns when they're available.
+       Emit tabs between opcode and operands to be consistent with
+       the rest of the compiler.
+
+Wed Jul 10 19:32:17 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/iris6.h (ASM_SPEC): Correct typos in Jun 18 change.
+
+Wed Jul 10 18:56:38 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * sh/sh.c (machine_dependent_reorg): When looking for the
+       instruction that sets a register in LOG_LINKS, skip the link if
+       REG_NOTE_KIND is not zero.
+
+Wed Jul 10 15:02:18 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (rs6000_got_register): New function to return a pseudo
+       register to hold the pic register.  Abort if reload is in progress
+       or done.
+       (num_insns_constant): Allow SFmode and DFmode.
+
+       * rs6000.h (CONST_DOUBLE_OK_FOR_LETTER_P): Redo 'G' so that it
+       means a constant that takes exactly two insns.
+       (rs6000_got_register): Add declaration.
+
+       * rs6000.md (movsi_got): Move setup of pic register to
+       rs6000_got_register.
+       (movsf): If -msoft-float, don't force constants to memory.
+       (mov{sf,df} insns): If soft floating point, allow any constant to
+       be loaded.  Add define_splits that allow the 604 to use both
+       integer units for loading constants.  Make sure insn length is
+       correct.
+
+Tue Jul  9 17:05:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (easy_fp_constant): All FP constants are considered
+       hard for -fpic and hardware floating point, so that the GOT
+       register is created.
+
+Tue Jul  9 15:21:27 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * x-iris6 (FIXPROTO_DEFINES): Add -D_SGI_SOURCE.
+
+Mon Jul  8 18:00:33 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh/sh.h (enum reg_class): Add new class GENERAL_FP_REGS.
+       (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise.
+
+       * cse.c (note_mem_written): Varying structure memory access with
+       AND address can alias scalars.
+       * sched.c (true_dependence, anti_dependence, output_dependence):
+       Likewise.
+
+       * sh.c (calc_live_regs): For pragma_interrupt case, exclude call
+       clobbered regs that are fixed, explicitly add MACH_REG and MACL_REG.
+
+       * calls.c (expand_call): For assign_stack_temp call in PARALLEL case,
+       get mode from type instead of using BLKmode.
+       * function.c (aggregate_value_p): If hard_function_value returns
+       a non-REG, then return 0.
+
+       * mips/mips.c (function_arg): Add explicit checks for FIELD_DECLs.
+       (mips_function_value): Add explicit checks for FIELD_DECLs, and save
+       them in the array FIELDS.  When returning structure with 1 float field,
+       enclose it in a PARALLEL and set the PARALLEL mode correctly.
+       * mips/mips.md (call_value): Call gen_call_value_multiple_internal0
+       only if there are multiple return values.  Strip the PARALLEL off
+       if there there is only one return value.
+
+Mon Jul  8 16:27:33 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * First cut at support for the H8/S.
+       * h8300/h8300.c (h8300_init_once): Handle the H8/S (treat it
+       like the H8/300H).
+       (dosize, adds_subs_operand, one_insn_adds_subs_operand): Likewise.
+       (output_adds_subs, const_costs, print_operand): Likewise.
+       (output_simode_bld, h8300_adjust_insn_length): Likewise.
+       (push_order, pop_order): Reverse.
+       (function_prologue): Try to use ldm.l and stm.l insns
+       on the H8/S.  Minor cleanups.
+       (function_epilogue): Likewise.
+       (asm_file_start): Emit ".h8300s" when compiling for the H8/S.
+       * h8300/h8300.h (CPP_SPEC): Handle the H8/S.
+       (TARGET_H8300S): New target.
+       (TARGET_SWITCHES): Add "-ms" and "-mno-s".
+       (BITS_PER_WORD): Handle the H8/S (treat it like the H8/300H).
+       (UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY): Likewise.
+       (BIGGEST_ALIGNMENT, BIGGEST_FIELD_ALIGNMENT): Likewise.
+       (INITIALIZE_TRAMPOLINE, MOVE_MAX, Pmode): Likewise.
+       * h8300/h8300.md: Handle H8/S just like H8/300H
+       throughout the entire file.
+       * h8300/t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries
+       too.
+       (MULTILIB_DIRNAMES): Put H8/S libraries in "h8300s" directory.
+       * h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating
+       h8300s object files.  Otherwise treat the H8/S just like the H8/300H.
+       * ginclude/stdarg.h: Handle the H8/S.
+       * ginclude/varargs.h: Likewise.
+
+Mon Jul  8 14:50:58 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc/sol2.h (LINK_SPEC): Don't pass `-z text' if
+       -shared -mimpure-text.
+
+Sun Jul  7 18:03:46 1996  Torbjorn Granlund  <tege@noisy.tmg.se>
+
+       * m68k/lb1sf68.asm (__udivsi3): Use faster tstw instead of btst.
+
+Thu Jul  4 11:44:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (get_inner_reference): Delete using alternate mode for
+       bitfield; we don't make bitfields anymore if not needed.
+
+Wed Jul  3 18:23:17 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * c-common.c (record_function_format): Define as static.
+       
+       * collect2.c (at SUNOS4_SHARED_LIBRARIES): Fix reference to unistd.h.
+
+Wed Jul  3 17:35:20 1996  Gavin Koch  <gavin@cygnus.com>
+
+        * c-typeck.c (default_conversion): Add bitfield promotions.
+                
+Wed Jul  3 17:09:22 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * gcc.c (default_compilers): Add null entries for languages we
+       heard of.
+       (main): If found one of those entries, say compiler not installed.
+
+Wed Jul  3 12:52:53 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa.c (fmpy_operands): Define.
+       (combinable_fmpy): New function.
+       (combinable_fadd, combinable_fsub): Likewise.
+       * pa.md (parallel_addb, parallel_movb): New patterns.
+       (fmpyadd, fmpysub): New patterns.
+
+       * pa.c (fmpyaddoperands): Tighten checks.  Allow SFmode.
+       (fmpysuboperands): Similarly.
+
+Tue Jul  2 18:57:15 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa.c (ireg_or_int5_operand): New function.
+       (output_parallel_movb, output_parallel_addb): Likewise.
+       (combinable_copy, combinable_add, following_call): Likewise.
+       (pa_adjust_insn_length): Handle parallel unconditional branches.
+       (output_movb): Handle case were destination is %sar.
+       * pa.h: Declare new functions.
+       * pa.md (parallel_branch): New "type" attribute.
+       (delay slot descriptions): Don't allow "parallel_branches" in
+       delay slots.  Fill "parallel_branches" like "branch" insns.
+       (movb patterns): Handle %sar as destination register.
+
+       * expr.c (compare): If function pointers need canonicalization
+       before comparisons, canonicalize them.
+       (do_store_flag): Do not use an sCC insn for a function pointer
+       comparison if function pointers need canonicalization before
+       comparing.
+
+Tue Jul  2 17:56:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h ({START,END}FILE_LINUX_SPEC): If -mnewlib is not
+       used, use the crtbegin/crtend that 2.7.2 used.
+
+Sat Jun 29 07:10:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.h (INIT_EXPANDERS): Define, call rs6000_init_expanders.
+       (RS6000_VARARGS_OFFSET): fpmem area no longer next to outgoing
+       argument area.
+       (STARTING_FRAME_OFFSET): Ditto.
+       (STACK_DYNAMIC_OFFSET): Ditto.
+       (frame_pointer_needed): Add external declaration.
+       (rs6000_{save,restore}_machine_status): Ditto.
+       (rs6000_init_expanders): Ditto.
+
+       * rs6000.c (rs6000_{save,restore}_machine_status): New functions
+       to save and restore the globals needed on a per function basis.
+       (rs6000_init_expanders): Initialize globals needed on a per
+       function basis, and set up so the above save/restore functions are
+       called when processing nested functions.
+       (output_epilog): Don't initialize per function globals here.
+       (rs6000_stack_info): Change where the fpmem save area is to below
+       the local variables, and not just below the outgoing argument
+       area.
+
+       * rs6000.md (floatsidf2*, fix_truncdfsi2*): Rewrite conversion
+       routines to track new location of the fpmem save area.  Allocate a
+       new base register temp for the routines in case the stack frame is
+       more than 32k in size.
+
+Sat Jun 29 05:44:37 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * explow.c (convert_memory_address, case PLUS): Fix error in
+       last change.
+
+Fri Jun 28 23:30:48 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * reload1.c (choose_reload_regs): Properly mark spill registers
+       as in use for inherited reloads.
+
+Fri Jun 28 18:37:20 1996  Stephen L Moshier  <moshier@world.std.com>
+
+       * objc/sarray.c (ifdef __alpha__): Don't declare `free'.
+       * objc/thr-decosf1.c (objc_thread_id): Use pthread_getunique_np
+       to obtain a thread ID value.
+       (objc_mutex_allocate): Cast mutex->owner to _objc_thread_t.
+       (objc_mutex_deallocate): Likewise.
+       (objc_mutex_unlock): Likewise.
+       (objc_mutex_trylock):  Declare thread_id as _objc_thread_t.
+       (objc_mutex_lock): Likewise.
+       (objc_mutex_unlock): Likewise.
+
+       * real.c (asctoeg): `0.0eX' is zero, regardless of the exponent X.
+
+Fri Jun 28 18:33:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * vax.md (rotl): Remove extraneous `$'.
+
+       * combine.c (previous_num_undos): Deleted variable.
+       (MAX_UNDO): Deleted macro.
+       (struct undo): New field, next.
+       (struct undobuf): Deleted num_undos and undo.
+       New fields undos, frees, and previous_undos.
+       (SUBST, SUBST_INT): Rework to allocate memory and chain undo entries.
+       (combine_instructions): Initialize undobuf.{undos,previous_undos},
+       not undobuf.num_undo and previous_num_undos.
+       (try_combine): Likewise.
+       (undo_all, gen_rtx_combine): Rework to use new data structures.
+
+Fri Jun 28 16:48:25 1996  Scott Christley <scottc@net-community.com>
+
+       * objc/sendmsg.c (__objc_block_forward): New function.
+       (get_imp, objc_msg_lookup): Use different forwarding function
+       when the returning a floating point value.
+
+Fri Jun 28 16:25:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * configure: Allow multiple makefile frags.
+       (i[3456]86-*-linux*oldld*): Add i386/t-crtstuff as target frag.
+       (i[3456]86-*-linux*aout*, i[3456]86-*-linux*): Likewise.
+       (m68k-*-linux*aout*): Add t-linux-aout as target frag.
+       (m68k-*-linux*): Add t-linux as target frag.
+       * Makefile.in (Makefile): xmake_file and tmake_file now already
+       contain the $(srcdir)/config prefix.
+
+       * config/t-linux (BOOT_CFLAGS): Removed, no longer necessary.
+       (CRTSTUFF_T_CFLAGS): Don't define.
+       (CRTSTUFF_T_CFLAGS_S): Define this instead.
+       * config/t-linux-aout (BOOT_CFLAGS): Removed.
+       * m68k/t-linux: Remove variables now in t-linux.
+
+Fri Jun 28 15:06:05 1996  John F. Carr  <jfc@mit.edu>
+
+       * alpha.c (alpha_emit_conditional_move): Emit correct code when
+       incoming comparison code is NE.
+
+Fri Jun 28 14:35:45 1996  J.T. Conklin  <jtc@hippo.cygnus.com>
+
+       * c-decl.c (init_decl_processing): Register __builtin_memset 
+       and memset as builtin functions.
+       * expr.c (expand_builtin, case BUILTIN_MEMSET): Open code memset
+       where val == 0.
+
+Fri Jun 28 14:10:03 1996  Richard Henderson  <rth@tamu.edu>
+
+       * alpha/linux.h (FUNCTION_PROFILER): _mcount has non-standard linkage.
+       * alpha/elf.h (LINK_SPEC): Bring emulation name into sync
+       with Cygnus snapshot.
+
+       * alpha.h ({MASK,TARGET}_BUILD_CONSTANTS): New macros.
+       (TARGET_SWITCHES): New target option build-constants.
+       * alpha.c (alpha_emit_set_long_const): New function.
+       * alpha.md (movdi): Call it.
+       * expmed.c (expand_mult_highpart): Use op1 not wide_op1 in
+       expansion of mul_highpart.
+       
+       * alpha.c (output_{pro,epi}log): Flag_inhibit_size_directive
+       should supress .ent, .end, and accompanying directives.
+       (alpha_output_lineno): Fix polarity on GAS test.
+       * alpha.h (NO_DBX_FUNCTION_END): New macro.
+       * dbxout.c (dbxout_function): Respect NO_DBX_FUNCTION_END.
+       * alpha/elf.h: New file.
+       * alpha/linux.h (INITIALIZE_TRAMPOLINE): New definition.
+       * alpha/xm-linux.h (HAVE_STRERROR): Define.
+       * configure (alpha*-linux*ecoff*): New target, was alpha-*-linux*.
+       (alpha-*-linux*): Use elf.h.
+       * crtstuff.c (init_dummy): Only i386-linux (at most)
+       needs ___brk_addr hack.
+       
+Thu Jun 27 20:23:30 1996  Jon Buller  (jonb@metronet.com)
+
+       * ns32k.c (split_di): New; from i386.c.
+       * ns32k.md (adddi3, subdi3, negdi3): New patterns.
+
+Thu Jun 27 19:42:50 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * combine.c (force_to_mode, case NE): Fix typo and logical error.
+       (simplify_comparison): Don't swap args if op1 is CONST_INT.
+
+Thu Jun 27 18:49:35 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * expmed.c (extract_bit_field): Check TRULY_NOOP_TRUNCATION before
+       making a SUBREG of a REG.
+
+Thu Jun 27 11:03:59 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * mips/mips.h (CC1_SPEC): Put spaces between the -mips* cases.
+       * mips/osfrose.h (CC1_SPEC): Likewise.
+
+       * sh/sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if the
+       insn is inside a sequence.
+
+Wed Jun 26 19:09:43 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa/pa.h (CMP_PSI): Delete.
+       (FUNCTION_POINTER_COMPARISON_MODE): Likewise.
+       * pa/pa.md (cmppsi); Delete expander.
+       (canonicalize_funcptr_for_compare): Renamed from plabel_dereference,
+       turned into an expander + anonymous pattern.
+
+Tue Jun 25 22:36:11 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * gcc.c (PEXECUTE_VERBOSE): Define.
+       (execute): Pass PEXECUTE_VERBOSE to pexecute if -v.
+
+Tue Jun 25 12:23:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.h (FINALIZE_PIC): Define to call rs6000_finalize_pic.
+       (rs6000_finalize_pic): Add declaration.
+       (svr4_traceback): Delete unused declaration.
+
+       * rs6000.md (movsi_got): Don't emit gen_init_v4_pic insn.
+       (V.4 call insns): Do not use @plt for PIC calls.
+
+       * rs6000.c (print_operand_address): Handle LABEL_REF just like
+       SYMBOL_REF.
+       (rs6000_finalize_pic): Define, emit the gen_init_v4_pic insn
+       before all other insns if needed for V.4 PIC calls.
+
+       * eabi-ci.asm (_GLOBAL_OFFSET_TABLE_): Do not provide a default
+       definition, since it interferes with the linker generated version.
+
+Tue Jun 25 01:17:50 1996  Jeffrey A. Law  <law@cygnsu.com>
+
+       * h8300/h8300.c (function_prologue): Update "monitor" prologues.
+       (function_epilogue): Similarly.
+
+       * pa/pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are
+       loaded "statically".
+
+Mon Jun 24 19:48:36 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>
+
+       * configure ({i386,i960,m68k,powerpc,sparc}-rtems): New targets.
+       * i386/go32-rtems.h, i386/i386-rtems.h: New files.
+       * i960/i960-rtems.h: New file.
+       * m68k/m68k-rtems.h: New file.
+       * rs6000/powerpc-rtems.h: New file.
+       * sparc/sparc-rtems.h: New file.
+
+Mon Jun 24 23:09:22 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c: (create_definition): Diagnose `#define #' only once.
+
+Mon Jun 24 11:42:58 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * i386/cygwin32.h, rs6000/cygwin32.h (CPP_PREDEFINES): For consistency,
+       change to define WIN32, WINNT, and CYGWIN32.
+
+Mon Jun 24 10:46:50 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (floatsidf2*): Move the xor of the argument into the
+       define_insn, since it confuses inline function expands.
+
+Fri Jun 21 20:40:17 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.md (call_internal1, call_value_internal1): Delete obsolete code.
+       (call_internal2, call_value_internal2, call_value_multiple_internal2):
+       Delete obsolete code.  Explicitly load SYMBOL_REF into register.
+       (call_value): Change Pmode to SImode in gen_call_value_internal0 call.
+
+Thu Jun 20 12:20:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * configure (*-aix*): If building a cross compiler, use t-xnewas
+       instead of t-newas.
+
+       * rs6000.c (num_insns_constant_wide): Fix typo if HOST_WIDE_INT
+       has more than 32 bits.
+
+Wed Jun 19 17:50:33 1996  Richard Henderson  <richard@atheist.tamu.edu>
+
+       * combine.c (move_deaths): New parameter maybe_kill_insn.
+       Don't move note if reg killed by maybe_kill_insn.
+       (try_combine): Pass new arg to move_deaths.
+       
+Wed Jun 19 10:44:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * toplev.c (flag_keep_static_consts): Define.
+       (f_options): Add "keep-static-consts" entry.
+       (compile_file): Check it in addition to !optimize for emitting
+       static const variables.
+
+Tue Jun 18 23:37:20 1996  Doug Evans  <dje@cygnus.com>
+
+       * i386/cygwin32.h (ASM_OUTPUT_SOURCE_LINE): Local symbols begin with L.
+
+Tue Jun 18 12:00:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (asm_output_aligned_bss): Don't emit a skip of size 0.
+
+Tue Jun 18 06:24:28 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * integrate.c (expand_inline_function): Add missing call to
+       force_operand when getting structure_value_addr into reg.
+
+       * alpha.c (override_options): Allow EV4/5 or 21064/21164 for cpu.
+       Clean up handling of floating-point options.
+       * alpha.h (TARGET_SWITCHES): Have all -mieee options turn
+       on MASK_IEEE_CONFORMANT.
+       (TARGET_DEFAULT): Use symbolic value.
+       * alpha.md: When not involving named pattern, update condition
+       to include alpha_tp != ALPHA_TP_INSN.
+       Don't do float_extend as part of other pattern when ALPHA_TP_INSN.
+       (extendsfsd2): Split into two patterns, depending on 
+       value of alpha_tp.
+
+       * mips/iris6.h (ASM_SPEC): Treat -o32 as -32 and -n64 same as -64.
+       * mips.c (override_options): Likewise.  
+
+       * genattrtab.c (fatal): Declare A1 and A2 as char *.
+
+       * function.c (find_temp_slot_from_address): Check for overlap
+       from BASE_OFFSET if X is PLUS of virtual_stack_vars_rtx and const.
+
+       * flow.c (flow_analysis): Fix typo in last change.
+
+       * expr.c (expand_builtin, case BUILT_IN_{SET,LONG}JMP): Properly
+       handle case when ptr_mode != Pmode.
+
+       * combine.c (try_combine): Don't use split if dest of new I2
+       is used between I2 and I3.
+
+       * c-typeck.c (pointer_int_sum): Convert integer to both signedness
+       and precision of sizetype.
+       * explow.c (convert_memory_address, case PLUS, MULT): Don't commute
+       operation with extension if not adding small integer.
+
+       * Makefile.in (BOOT_LANGUAGES): New variable.
+       (bootstrap): Use it to select languages for stage1.
+       * configure (extra_host_objs): New variable.
+       Separate files needed for target and host and concatenate list.
+       (extra_gcc_objs): Use setting for host, not target.
+       (objc_thread_file): Start with it as null, then don't include "thr-".
+       Print name of file after others and in same format.
+       (alpha-*-winnt*, i[3456]86-*-winnt): oldnames.o is in extra_host_objs.
+       (all_boot_languages): New variable.
+       Set from boot_language variable in config-lang.in.
+       Defines value of BOOT_LANGUAGES in Makefile.
+       (Makefile): Set target to the canonical form of target.
+
+Mon Jun 17 22:37:07 1996  Mike Meissner  <meissner@rtl.cygnus.com>
+
+       * rs6000/win-nt.h (ASM_DECLARE_FUNCTION_NAME): Put function
+       descriptor in .reldata, not .text.
+
+Mon Jun 17 16:05:34 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * ginclude/stddef.h (wint_t): Don't wrap with #ifndef __cplusplus.
+
+Mon Jun 17 15:03:20 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.c (mips_split_addresses): New variable.
+       (simple_memory_operand): Add comment about mode check.  Add check
+       for LO_SUM.
+       (call_insn_operand): OP is now an addresses instead of a MEM.
+       (move_operand, mips_check_split): New functions.
+       (mips_count_memory_refs): Add check for LO_SUM.
+       (mips_move_1word): Add HIGH support.
+       (mips_address_cost): Delete check for HIGH.
+       (output_block_move): Handle LO_SUM addresses.
+       (override_options): Set mips_split_addresses.
+       (print_operand_address): Add LO_SUM support.
+       * mips.h (mips_split_addresses, mips_check_split, move_operand):
+       New declarations
+       (GO_IF_LEGITIMATE_ADDRESS): Reject constant addresses when
+       mips_split_addresses is TRUE.  Add LO_SUM support.
+       (LEGITIMIZE_ADDRESS): Add LO_SUM support.
+       (PREDICATE_CODES): Modify call_insn_operand support.  Add
+       move_operand.
+       * mips.md (memory): Change r4100/r4300 support.
+       (imuldiv): Add r4300 support.
+       (high, low): New patterns.
+       (movsi, movdi): Add LO_SUM support.
+       (movsi_internal1, movsi_internal2): Use move_operand instead of
+       general_operand.
+       (movstrsi_internal, movstrsi_internal2): Delete R constraint.
+       (call, call_value): Pass address instead of MEM to call_insn_operand.
+       Call gen_call_{value_}internal0 instead of internal1.
+       (call_internal0, call_value_internal0, call_multiple_internal0):
+       New patterns.
+       (call_internal1, call_internal2, call_value_internal1,
+       call_value_internal2, call_value_multiple_internal2): Add explicit
+       MEM before target address.
+
+Sun Jun 16 23:05:16 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * configure (hppa*-hp-hpux10*): Use new pa-hpux10 configuration file.
+       (hppa*-hp-hpux*): Use hpux9 configuration files by default.
+       * pa/pa-hpux10.h: New file.
+       * pa/pa-ghpux9.h: Deleted.  No longer used.
+
+Sat Jun 15 04:35:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * i386/gnu.h (LINK_SPEC): Remove -rpath /lib/ option.
+       Ignore -ibcs option.
+
+Thu Jun 13 14:49:41 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * gen-protos.c (main): Change argv[i] to argv[0][i].
+
+Thu Jun 13 10:46:24 1996  Doug Evans  <dje@cygnus.com>
+
+       * gcc.c (pfatal_pexecute): Delete code to check errno < sys_nerr.
+
+Wed Jun 12 21:47:10 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>
+
+       * alpha.c (alpha_cpu, alpha_cpu_string): New variables.
+       (override_options): Process -mcpu= value.
+       (alpha_adjust_cost): Handle adjustments for EV5.
+       * alpha.h (enum processor_type): New enum.
+       (alpha_cpu, alpha_cpu_string): New declarations.
+       (target_options): Add "cpu=".
+       (RTX_COSTS): Adjust values for EV5.
+       * alpha.md: Add scheduling rules for EV5.
+
+Tue Jun 11 17:51:03 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-common.c (check_format_info): Change text of message about use
+       of `0' with precision.
+
+Tue Jun 11 15:14:10 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.h (TARGET_SCHEDULE_PROLOGUE): New. Allows prologue to
+       be emitted as asm or rtl.
+
+       * i386.c (function_prologue): Emit prologue as asm.
+       (override_options): Don't emit rtl for prologue if -fpic.
+
+Tue Jun 11 14:41:01 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/eabi.asm (__eabi): Fix normal code so that it properly
+       loads up r2/r13 if needed again.
+
+       * rs6000/sysv4.h (CPP_ENDIAN_SPEC): Call cpp_endian_default, not
+       cpp_endian_default_spec.
+
+Mon Jun 10 15:10:56 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * local-alloc.c (update_equiv_regs): Ignore insns that read or
+       write registers that are likely to be spilled.
+
+       * pa.h (cmp_type): Add CMP_PSI.
+       (FUNCTION_POINTER_COMPARISON_MODE): Define.
+       * pa.md (cmppsi): New expander.
+       (plabel_dereference): New pattern
+
+Mon Jun 10 14:56:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sol2.h (SKIP_ASM_OP): Delete, Solaris accepts .space,
+       like rest of PowerPC V4 ports.
+
+       * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_LOCAL): Emit .lcomm if not
+       using the .sbss area.  If using the .sbss area, put out
+       appropriate .size directive.
+
+Mon Jun 10 14:53:38 1996  Doug Evans  <dje@cygnus.com>
+
+       Move fork/exec/wait handling into file of its own.
+       * pexecute.c: New file.
+       * Makefile.in (pexecute.o): Add rule.
+       (xgcc): Link in pexecute.o.
+       (protoize,unprotoize): Likewise.
+       * gcc.c (_WIN32): Don't include process.h or declare spawnv{,p}.
+       (pexecute,pwait): Add prototypes.
+       (PEXECUTE_{FIRST,LAST,SEARCH}): Define.
+       (execv,execvp): Delete decls.
+       (perror_exec): Delete.
+       (pfatal_pexecute): New function.
+       (pexecute support): Delete.
+       (execute): -pipe not supported if _WIN32 or OS2.
+       Update call to pexecute.  Fatal error if pexecute fails.  Call pwait.
+       * protoize.c: Include gansidecl.h.
+       (my_execvp): Delete.
+       (choose_temp_base,pexecute,pwait): Declare.
+       (PEXECUTE_{FIRST,LAST,SEARCH}): Define.
+       (execvp): Delete decl.
+       (usage): Fix typo.
+       (gen_aux_info_file): Rewrite to use pexecute/pwait.
+
+       * gcc.c (do_spec_1): Allow leading text in version string.
+       Delete support for default minor number = 0.
+
+Mon Jun 10 11:49:53 1996  Scott Christley <scottc@net-community.com>
+
+       * objc/Makefile (libobjc.a): Don't delete the library.
+
+       * objc/thr.h (objc_set_thread_callback): New function.
+       (objc_thread_callback): Typedef for the hook function.
+       * objc/thr.c (__objc_thread_detach_function): Clear thread storage.
+       Call the thread hook function when first becoming multi-threaded.
+       (objc_set_thread_callback): New function.
+
+       * objc/selector.c (__sel_register_typed_name): Additional parameter
+       that indicates whether name and type parameters are constant or not.
+       * objc/runtime.h (__sel_register_typed_name): Likewise.
+       * objc/init.c (__sel_register_typed_name): Likewise.
+
+       * objc/init.c (__objc_init_protocols): Need to unlock mutex.
+
+Mon Jun 10 11:44:44 1996  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * sparc/t-sol2 (gmon.o): Depend on stmp-int-hdrs.
+       (crt1.o, crti.o, crtn.o, gcrt1.o): Depend on $(GCC_PASSES).
+
+Mon Jun 10 11:29:46 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * flow.c (flow_analysis, find_basic_blocks): Ignore
+       nonlocal_label_list for CALL_INSN that has a REG_RETVAL.
+
+       * c-common.c (decl_attributes, case A_T_UNION): Don't look at fields
+       of union if there aren't any.
+
+Sat Jun  8 22:13:33 1996  Stan Cox <coxs@dg-rtp.dg.com>
+
+       * i386.c (ix86_expand_prologue): Keep pic register load ahead
+       of reference which may use a pic register.
+
+Sat Jun  8 22:13:33 1996  Jim Wilson <wilson@cygnus.com>
+
+       * i386.md (strlensi_unroll4, strlensi_unroll5): Use + not =& for
+       constraint for input/output operand 2.
+
+Sat Jun  8 22:13:33 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+       * i386.h (CONST_COSTS): Even integer constants have a cost.
+       (RTX_COSTS): Take costs of subexpressions into account.
+       If a multiply is actually a shift, use the cost of the shift.
+       * i386/unix.h (SHIFT_DOUBLE_OMITS_COUNT): New macro.
+       * i386/{gas, next, seq-gas}.h (SHIFT_DOUBLE_OMITS_COUNT): Redefine
+       as zero.
+       * i386.c (print_operand): new letter 's'.
+
+Sat Jun  8 15:13:33 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/mips.c (override_options): Add vr4100 and vr4300 support.
+       * mips/mips.h (enum processor_type): Likewise.
+       (MASK_4300_MUL_FIX, TARGET_4300_MUL_FIX): New macros.
+       (TARGET_SWITCHES): Add -mfix4300 option.
+       * mips/mips.md (cpu, memory, imuldiv, adder, mult, divide): Add
+       vr4100 and vr4300 support.
+       (muldf3, mulsf3): Add vr4300 support.
+       (muldf3_internal, muldf_r4300, mulsf3_internal, mulsf_r4300): New
+       patterns.
+
+Sat Jun  8 14:35:23 1996  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * toplev.c (main): Re-enable -gxcoff+.
+
+Sat Jun  8 14:20:14 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * m68k/lb1sf68.asm (__{eq,ne,gt,lt,ge,le}{df,sf}2): Removed
+       extraneous comments, constants, labels, etc.
+
+       * m68k/altos3068.h (TARGET_DEFAULT): Use MASK_* macros
+       instead of explicit constants in definitions or conditionals.
+       * m68k/{apollo68, aux, ccur-GAS, dpx2, hp320, hp3bsd}.h: Likewise.
+       * m68k/{hp3bsd44, isi-nfp, isi, linux-aout, linux}.h): Likewise.
+       * m68k/{lynx-ng, lynx, m68k-none, m68k-psos, m68kv4}.h): Likewise.
+       * m68k/{mot3300, netbsd, news, next, pbb, plexus, sun2o4}.h): Likewise.
+       * m68k/{sun3, sun3n, tower}.h): Likewise.
+
+Sat Jun  8 13:55:23 1996  Matthias Pfaller  (leo@marco.de)
+
+       * ns32k.md (define_insns for ffs[qhs]i2): Deleted.
+       (define_expand for ffssi2): New pattern.
+
+Sat Jun  8 13:44:14 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * reload.c (find_equiv_reg): Set need_stable_sp if GOAL is the
+       stack pointer.
+
+Sat Jun  8 13:36:05 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (fixup_var_refs_1, case SIGN_EXTEND): Handle
+       paradoxical SUBREGs as first operand.
+       (fixup_var_regs_1, case SET): Handle paradoxical SUBREGs as
+       first operand of a ZERO_EXTRACT in SET_DEST.
+
+       * c-common.c (enum attrs): Add A_FORMAT_ARG.
+       (init_attribute): Initialize it.
+       (decl_attributes, case A_FORMAT): Clean up error messages.
+       (decl_attributes, case A_FORMAT_ARG): New case.
+       (struct international_format_info): New structure and typedef.
+       (international_format_list): New variable.
+       (record_international_format): New function.
+       (init_format_info): Call it for gettext, dcgettext, and dcgettext.
+       (check_format_info): See if format arg is call to
+       internationalization function.
+
+Fri Jun  7 20:04:40 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * gcc.c (MULTILIB_SELECT): Delete definition.
+       (multilib_select): Delete static initializer.
+       (multilib_obstack, multilib_raw): New global variables.
+       (multilib.h): Include inside multilib_raw definition.
+       (main): Set multilib_select from multilib_raw.
+       * genmultilib: Change output to be a sequence of short strings
+       separated by commas rather than a single long macro definition.
+
+       * cse.c (simplify_binary_operation, case MULT): Check for case
+       where width is larger than HOST_BITS_PER_WIDE_INT, and upper most
+       bit is set.  We can not generate a simple shift in this case.
+
+       * gsyms.h (enum sdb_type): Add T_LNGDBL if EXTENDED_SDB_BASIC_TYPES.
+       (enum sdb_masks): Add EXTENDED_SDB_BASIC_TYPES masks.
+       * sdbout.c (gsyms.h): Include if CROSS_COMPILE is defined.
+       (plain_type_1): Use TYPE_PRECISION instead of TYPE_SIZE.
+       Add check for LONG_DOUBLE_TYPE_SIZE if EXTENDED_SDB_BASIC_TYPES.
+       * i960/i960.h (EXTENDED_SDB_BASIC_TYPES): Define.
+       (PUT_SDB_TYPE): Delete now unnecessary shifting and masking.
+
+       * i960/i960.h (i960_output_move_{double,quad}): Declare.
+
+Fri Jun  7 19:22:09 1996  Scott Christley <scottc@net-community.com>
+
+       * Makefile.in (OBJC_THREAD_FILE): New variable.
+       * configure (objc_thread_file): Set new variable to appropriate
+       values based upon target operating system; default is `thr-single'.
+       * objc/Makefile (OBJC_THREAD_FILE): Add target and dependency.
+       (thr.o): Remove OS specific thread files as dependencies.
+       * objc/thr-decosf1.c: Now compiles as a separate source file, so
+       include appropriate Objective-C headers.
+       * objc/thr-{mach,os2,posix,irix,single,solaris,win32}.c: Likewise.
+       * objc/thr.c: Remove inclusion of source files.
+       * objc/thr.h (__objc_thread_exit_status): Declare global variable.
+       * objc/thr-pthreads.c: New file.
+
+Fri Jun  7 19:04:04 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * m68k.h (TARGET_SWITCHES): Treat -m68302 like -m68000 and -m68332
+       like -m68020; remove -mno-68302 and -mno-68332.
+
+Fri Jun  7 12:06:12 1996  Per Bothner  <bothner@deneb.cygnus.com>
+
+       * expr.c (safe_from_p):  Allow Chill-style variable-sized arrays.
+
+Thu Jun  6 23:11:11 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.c (h8300_monitor_function_p): New function.
+       (h8300_os_task_function_p): Likewise.
+       (os_task, monitor): Variables to note if the current
+       function is an os_task or monitor.
+       (function_prologue): Set monitor and/or os_task as needed.  Handle
+       os_task and monitor functions.
+       (function_epilogue): Clear monitor and os_task.  Handle os_task and
+       monitor functions.
+       (h8300_valid_machine_decl_attribute): Accept "OS_Task" and
+       "monitor".
+
+Thu Jun  6 20:01:54 1996  Per Bothner  <bothner@cygnus.com>
+
+       * gen-protos.c (progname):  New variable (needed by cppalloc.c).
+       (main):  Set progname.
+
+       * cpplib.h (struct parse_file):  Removed.
+       (CPP_FATAL_LIMIT, CPP_FATAL_ERRORS, CPP_OUT_BUFFER):  New macros.
+       * cpphash.c (cpp_lookup):  Change struct parse_file -> cpp_reader.
+
+       * cpplib.c (init_parse_option):  Renamed to cpp_options_init.
+       (push_parse_file):  Renamed to ...
+       (cpp_start_read):  Change to return 1 on success, 0 on failure.
+       (init_parse_file):  Renamed to cpp_reader_init.
+       * cppmain.c (main):  Use CPP_SET_WRITTEN and cpp_fatal.
+       Use renamed function names, and return protocols.
+       * fix-header.c (read_scan_file):  Likewise.
+
+       * cpperror.c (cpp_message):  Generalize for "fatal" errors.
+       (cpp_fatal):  New function (just calls cpp_message).
+       * cpplib.c (cpp_start_read, cpp_handle_options, cpp_finish,
+       parse_goto_mark, parse_move_mark):  Use cpp_fatal rather than fatal.
+
+       * fix-header.c (check_macro_names):  Fix struct parse_file->cpp_reader.
+       * cpplib.c (newline_fix):  Remove unused function.
+
+Thu Jun  6 19:47:26 1996  Jim Wilson  <wilson@cygnus.com>
+
+       Changes to support parameters and return values in multiple
+       non-contiguous locations.
+       * calls.c (expand_call): Handle NIL in PARALLEL.  Handle PARALLEL
+       parameter in REG.  Handle PARALLEL return value in VALREG.
+       (emit_library_call, emit_library_call_value): Abort for PARALLEL.
+       (store_one_arg): Delete code for handling EXPR_LIST.
+       * expr.c (emit_group_load, emit_group_store): New functions.
+       (use_group_regs): New function.
+       (emit_push_insn): Handle PARALLEL parameter in REG.
+       (expand_assignment): Handle PARALLEL to_rtx.
+       (store_expr): Handle PARALLEL target.
+       * expr.h (emit_group_load, emit_group_store, use_group_regs): New
+       declarations.
+       * function.c (assign_parms): Handle PARALLEL parameter in ENTRY_PARM.
+       * stmt.c (expand_value_return): Handle PARALLEL return_reg.
+
+       * mips/abi64.h (TYPE_DEPENDENT_REG): Delete.
+       * mips/mips.c (function_arg): Return PARALLEL for structure with
+       aligned double fields.
+       (type_dependent_reg): Delete.
+       (mips_function_value): Return PARALLEL for structure
+       with two floating point fields.
+       * mips/mips.md (call_value): Handle PARALLEL in operands[0].
+       (call_value_multiple_internal2): New pattern.
+       * pa/pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST.
+       * rs6000/rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL
+       in comments.
+       (function_arg): Generate PARALLEL instead of EXPR_LIST.
+
+Thu Jun  6 18:21:27 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * function.c (assign_parms): Tighten up code that makes REG_EQUIV
+       notes for parms.
+
+       * fold-const.c (fold): Don't do anything with evaluated SAVE_EXPR.
+
+Thu Jun  6 17:54:07 1996  J.T. Conklin  <jtc@cygnus.com>
+
+       * m68k.h (TARGET_SWITCHES): Group all floating point options.
+       When an fp option is selected, unset bits used for other mutually
+       exclusive fp options.
+       (OVERRIDE_OPTIONS): Remove special case for SUPPORT_SUN_FPA;
+       bits used for 68881 and SKY are now cleared by TARGET_SWITCHES.
+
+       * m68k.md (movsi_const0, movhi): Favor clr with TARGET_5200.
+       (add[qhs]3): Don't use two addqw/subqw insns to add small integers to
+       an address register with TARGET_68060.
+       (stack push peephole): Use moveq.l with TARGET_5200 (when appropriate).
+
+       * m68k.h (MASK_5200, TARGET_5200): New macros.
+       (TARGET_SWITCHES): Add "m5200".
+       (LEGITIMATE_INDEX_P): Add TARGET_5200 to conditional expression.
+       * m68k.c (const_method): Do not synthesize long constants
+       with byte or word operations with TARGET_5200.
+       * m68k.md: Disable byte and word arithmetic, rotate, integer
+       divide, dbcc, etc. insns for TARGET_5200.
+       * m68k-none.h: (CPU_FPU_SPEC, CPP_SPEC, ASM_SPEC): Support m5200.
+
+Thu Jun  6 17:32:32 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * fixproto (subdirs): Work around Solaris 2.5
+       /usr/xpgr/bin/sed problem with \+\+.
+
+Thu Jun  6 15:06:27 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * c-decl.c (grokdeclarator): Call pop_obstacks after creating
+       TYPE_DECL.
+
+       * loop.c (strength_reduce): If HAVE_cc0 defined, disable auto_inc_opt
+       if it would put an insn between a cc0 setter/user pair.
+
+Thu Jun  6 13:06:54 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): If __sun__ is
+       defined, treat that as little endian.
+
+Wed Jun  5 20:04:53 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * i960/i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED.
+
+       * sh/sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define.
+       * sh/sh.md (branch_true): Add comment about T-bit compares.
+
+Tue Jun  4 23:08:34 1996  Per Bothner  <bothner@deneb.cygnus.com>
+
+       * cpplib.h, cpplib.c:  Remove support for !STATIC_BUFFERS.
+       * cpplib.h:  Use unsigned char rather than U_CHAR.
+       * cpplib.h (cpp_reader):  Add destructor #ifdef __cplusplus.
+       (cpp_cleanup):  New prototype.
+       * cpplib.c (special_symbol, do_once, do_include, cpp_get_token):
+       Compare cpp_buffer against CPP_NULL_BUFFER, not NULL.
+
+       * cpplib.c (dump_special_to_buffer):  New function.
+       (initialize_builtins):  Use it.
+
+Wed Jun  5 19:10:22 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa/pa.h (TEXT_SPACE_P): Fix thinko in last change.
+
+Wed Jun  5 16:25:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.h (ASM_DEFAULT_SPEC): Default to "", not -mpwr.
+
+       * sysv4.h (SUBTARGET_SWITCHES): Add -mshlib.
+       (LINK_PATH_SPEC): Add -compat-bsd support from Solaris.
+       (LINK_SPEC): Eliminate %{b} and %{G}, since they conflict with GCC
+       switches.  Defer shared library support to LINK_SHLIB_SPEC.  Defer
+       target selection to LINK_TARGET_SPEC.
+       (LINK_SHLIB_SPEC): Provide two different versions, depending on
+       whether shared libraries are default or not.  Make shared
+       libraries not default until linker is fixed.
+       (LINK_OS_*_SPEC): New specs for OS specific linker switches.
+       (SUBTARGET_EXTRA_SPECS): Add new specs.
+
+       * {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into the general
+       link spec.
+
+       * {sysv4,sysv4le,eabile}.h (LINK_TARGET_SPEC): Only pass -oformat
+       to the linker if the user is changing the default endian format.
+
+       * {sol2,linux,eabisim,eabilesim}.h (LINK_OS_DEFAULT_SPEC): Define
+       to use the appropriate OS link spec.
+
+Wed Jun  5 16:35:10 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * ginclude/stddef.h: Fix typo: TYPE_ptrdiff_t to _TYPE_ptrdiff_t.
+
+Wed Jun  5 15:52:57 1996  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * varasm.c (output_constructor):  Handle RANGE_EXPR in array index.
+
+Wed Jun  5 13:45:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * sparc.md (*call_{address,symbolic}_struct_value_sp32): Allow
+       operand 2 to be const0_rtx.
+
+Tue Jun  4 16:43:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (make_decl_rtl): Don't update DECL_ASSEMBLER_NAME for
+       local statics.
+
+       * c-decl.c (start_decl): Always set DECL_COMMON on statics.
+       * varasm.c (assemble_variable): Only treat vars with DECL_COMMON
+       as common.
+
+Tue Jun  4 14:55:49 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa.c (reloc_needed): New function.
+       * pa.h (TEXT_SPACE_P): Variables/constants with initializers
+       requiring relocs never live in the text space.
+
+Tue Jun  4 14:10:46 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * sh.c (fp_zero_operand): Do not accept minus zero.
+
+       * sh.h (ASM_OUTPUT_LOOP_ALIGN): Define.
+       (ASM_OUTPUT_ALIGN_CODE): Define.
+       (ADJUST_INSN_LENGTH): Add in bytes that may be added by
+       alignment.
+       * sh.c (output_branch): Run ADJUST_INSN_LENGTH in reverse to get
+       correct length.  Just call abort rather than returning "bad".
+       (find_barrier): Adjust limits for possible alignment.
+
+Tue Jun  4 09:35:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/t-solaris: New target config file for PowerPC Solaris
+       without gas.
+
+       * rs6000/t-ppc: Eliminate all multilib varients except for
+       software floating point.
+
+       * configure (powerpcle-*-solaris*): If not --with-gnu-as, use
+       t-solaris, not t-ppc.
+
+       * rs6000/sol2.h (MULTILIB_DEFAULTS): Add correct defaults for
+       Solaris.
+
+       * rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): Clone from svr4.h, omit
+       @progbits, since Solaris assembler doesn't like it.
+       (LIB_SOLARIS_SPEC): If -msolaris-cclib, add libabi.a.
+       ({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use explicit
+       pathnames for the Solaris compiler start/end files.
+       (ASM_SPEC): Pass -mno-regnames to the assembler.
+
+Mon Jun  3 19:40:10 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/abi64.h (CPP_SPEC): Make -mabi=n32 the default.
+       * mips/iris6.h (MIPS_ISA_DEFAULT, MIPS_ABI_DEFAULT, MULTILIB_DEFAULTS,
+       ASM_SPEC, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
+       * mips.md (tablejump_internal4+1): Fix typo in condition.
+       * mips/x-iris6 (CC, OLDCC): Define to be `cc -32'.
+
+Mon Jun  3 07:57:35 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.def ([LR]SHIFT_EXPR): Remove `a' from printed names.
+
+       * sparc.md (call): Mask unimp operand to 12 bits, just like Sun.
+
+       * expr.c (store_field): Fix typo in last change; update TARGET addr.
+
+       * c-decl.c (start_struct): Set TYPE_PACKED from flag_pack_struct.
+       (start_enum): Likewise but from flag_short_enums.
+       (finish_enum): Test TYPE_PACKED, not flag_short_enums.
+       * stor-layout.c (layout_decl): Test DECL_PACKED and TYPE_PACKED
+       instead of flag_pack_struct.
+       (layout_record): Likewise.
+
+Sun Jun  2 19:41:14 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.md (tablejump_internal3, tablejump_internal4): New patterns.
+       (tablejump): Use them for PIC code.
+
+Fri May 31 17:26:53 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.c (ix86_expand_epilogue): Don't generate references to an
+       exposed vacated stack.
+       * i386.md (epilogue_set_stack_ptr): New.
+
+Fri May 31 15:07:49 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/abi64.h: Add -mabi=n32 support.
+       (ABI_64BIT): Delete.
+       (TARGET_LONG64, CPP_SPEC, STACK_BOUNDARY, MIPS_STACK_ALIGN,
+       GP_ARG_LAST, FP_ARG_LAST, SUBTARGET_CONDITIONAL_REGISTER_USAGE,
+       MAX_ARGS_IN_REGISTER, FUNCTION_ARG_PADDING, RETURN_IN_MEMORY,
+       SETUP_INCOMING_VARARGS): Modify.
+       (REG_PARM_STACK_SPACE): Ifdef out.
+       (TARGET_DEFAULT, SUBTARGET_TARGET_OPTIONS): Define.
+       * mips/iris6.h: Add -mabi=n32 support.
+       (TARGET_DEFAULT, ASM_OUTPUT_INTERNAL_LABEL,
+       ASM_GENERATE_INTERNAL_LABEL): Delete.
+       (MULTILIB_DEFAULTS, ASM_SPEC, EXTRA_SECTION_FUNCTIONS,
+       ASM_OUTPUT_ALIGNED_LOCAL, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC):
+       Modify.
+       (MIPS_ABI_DEFAULT, LOCAL_LABEL_PREFIX): Define.
+       * mips/mips.c: Add -mabi=n32 support.
+       (mips_const_double_ok, mips_move_1word, mips_move_2words,
+       function_arg, override_options, mips_asm_file_start,
+       compute_frame_size, save_restore_insns, function_prologue,
+       mips_expand_prologue, function_epilogue, mips_function_value): Modify.
+       (mips_abi, mips_abi_string): Define
+       * mips/mips.h: Add -mabi=n32 support.
+       (ABI_64BIT): Delete.
+       (TARGET_OPTIONS, INITIAL_ELIMINATION_OFFSET, GO_IF_LEGITIMATE_ADDRESS,
+       CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT_P, LEGITIMIZE_ADDRESS,
+       ASM_OUTPUT_ADDR_DIFF_ELT): Modify.
+       (enum mips_abi_type, SUBTARGET_TARGET_OPTIONS): Define.
+       (mips_abi, mips_abi_string): Declare.
+       * mips/mips.md (jump, tablejump_internal1, tablejump_internal2): Add
+       -mabi=n32 support.
+       * mips/t-iris6 (MULTILIB_OPTIONS): Add -mabi=n32 support.
+       * mips/xm-irix6.h (HOST_BITS_PER_LONG): Use _MIPS_SZLONG not 64.
+       * ginclude/va-mips.h (va_start): Add -mabi=n32 support.
+
+Fri May 31 14:45:30 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (SUBTARGET_SWITCHES): Add -msolaris-cclib to use
+       the Sun compiler's crt files instead of ours.
+       ({START,END}FILE_SOLARIS_SPEC): If -msolaris-cclib, use the Sun
+       compiler's crt files instead of ours.
+       (SUBTARGET_OVERRIDE_OPTIONS): Don't set -msdata=data for Solaris.
+       (SBSS_SECTION_ASM_OP): For Solaris, don't use @nobits.
+       (CPP_OS_SOLARIS_SPEC): Remove -Asystem(unix) and -Asystem(svr4).
+
+       * rs6000/t-ppc{,gas} (MULTILIB*): Add Solaris specific multilibs.
+
+       * rs6000/eabi{,le}sim.h (*_DEFAULT_SPEC): Rather than using
+       duplicate definitions, just use %(...) so that there is only one
+       place in the specs file where the switches are defined.
+       * rs6000/{linux,sol2}.h (*_DEFAULT_SPEC): Ditto.
+
+       * rs6000/sol2.h (CPP_PREDEFINES): Use the standard one in sysv4.h.
+       (RS6000_ABI_NAME): Default is solaris.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Don't redefine.
+
+       * rs6000/sol-c{i.asm,n.asm,c0.c}: Provide more things that Solaris
+       needs for program startup.
+
+Thu May 30 21:57:34 1996  Mike Stump  <mrs@cygnus.com>
+
+       * tree.def (OFFSET_REF): Remove.
+       * expr.c (expand_expr, case OFFSET_REF): Likewise.
+       * tree.c (substitute_in_expr): Remove OFFSET_REF code.
+
+Wed May 29 14:54:44 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/eabi.asm (__eabi): If not -mrelocatable, don't assemble
+       relocatable functions, so that it can be assembled with the
+       Solaris assembler.
+
+       * rs6000/sysv4.h (CPP_SYSV_SPEC): Define _RELOCATABLE if
+       -mrelocatable-lib as well as -mrelocatable.
+
+       * rs6000.c (rs6000_file_start): New function to print some more
+       information to the asm file.
+       * rs6000/{sysv4,win-nt,rs6000}.h (ASM_FILE_START): Call it.
+
+Tue May 28 15:21:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77.  The new fpmem
+       register represents the memory location used for float/int
+       conversions.
+       ({FIXED,CALL_USED}_REGISTERS): Add support for the fpmem pseudo
+       register.
+       (REG_ALLOC_ORDER): Ditto.
+       (HARD_REGNO_{NREGS,MODE_OK}): Ditto.
+       (REGISTER_MOVE_COST): Ditto.
+       (reg_class): Ditto.
+       (REG_CLASS_{NAMES,CONTENTS}): Ditto.
+       (REGNO_REG_CLASS): Ditto.
+       (PREFERRED_RELOAD_CLASS): Ditto.
+       (CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Ditto.
+       (rs6000_stack): Ditto.
+       ({,DEBUG_}REGISTER_NAMES): Ditto.
+       (FPMEM_{REGNO_P,REGNUM}): New macros for fpmem register.
+       (rs6000_fpmem_{offset,size}): New global variables.
+       (RS6000_VARARGS_OFFSET): Fpmem temporary storage is located
+       between outgoing arg area and varargs save area.
+       (STARTING_FRAME_OFFSET): Ditto.
+       (STACK_DYNAMIC_OFFSET): Ditto.
+       (PREDICATE_CODES): Add fpmem_operand.
+       ({count_register,fpmem}_operand): Add declarations.
+
+       * rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem
+       'register'.
+       (rs6000_fpmem_{offset,size}): New global variables.
+       (fpmem_operand): Return true for fpmem registers.
+       (gpc_reg_operand): The fpmem register is not general purpose.
+       (includes_rshift_p): Add casts to silence warnings from Solaris
+       PowerPC host compiler.
+       (print_operand): Add 'v' operand type for the upper 16 bits of
+       signed constants, to placate the Solaris assembler.
+       ({rs6000,debug}_stack_info): Add support for fpmem 'register'.
+       (output_epilog): Ditto.
+
+       * rs6000.md (addsi3,movsi,movsf,movdi): Use %v for constants with
+       the upper 16 bits, to get the sign correct for PowerPC Solaris.
+       (float{,uns}sidf2,fix_truncdfsi2): Rewrite to use 'register' 76
+       for the memory location used to convert between float and integer.
+
+       * sysv4.h (ASM_OUTPUT_{CON,DE}STRUCTOR): Use code laid down in
+       .init and .fini for making constructors and destructors under
+       Solaris.
+       (ASM_SPEC): Do not pass -u to the assembler.
+       (CC1_SPEC): -mrelocatable implies -meabi.
+
+       * sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System
+       V.4.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Don't define a Solaris specific
+       method.
+
+Mon May 27 06:39:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (expand_builtin, case BUILT_IN_{LONG,SET}JMP):
+       Convert block address from ptr_mode to Pmode.
+
+Sun May 26 20:05:43 1996  Doug Evans  <dje@cygnus.com>
+
+       * gcc.c (MSDOS pexecute): Call xmalloc, not malloc.
+
+Sun May 26 08:31:54 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure (vax-*-{sysv}): tm_file and xm_file now list.
+       (vax-*-ultrix): tm_file is now list.
+       (we32k-att-sysv*): xm_file now list.
+       * vax/xm-netbsd.h: Deleted.
+       * vax/netbsd.h: No longer include vax.h and config/netbsd.h.
+       * vax/ultrix.h, vax/vaxv.h: No longer include vax.h.
+       * vax/xm-vaxv.h: No longer include xm-vax.h.
+       * xm-we32k.h: No longer include xm-svr3.h.
+
+       * configure: Separately set target_cpu_default for two
+       case statements and then combine if both set.
+       (alpha-*-winnt3): tm_file and xm_file are now list.
+       Set target_cpu_default to 64.
+       * winnt/config-nt.bat: Make .h files properly for Alpha.
+       * alpha.h (WINDOWS_NT): No longer defined and used.
+       (MASK_WINDOWS_NT, TARGET_WINDOWS_NT): New macros.
+       (ASM_OUTPUT_ADDR_DIFF_ELT): Use TARGET_WINDOWS_NT.
+       * alpha.c (output_prolog): Test TARGET_WINDOWS_NT, not WINDOWS_NT.
+       * alpha.md: Likewise.
+       * alpha/config-nt.sed: Properly set tm_file and {build,host}_xm_file.
+       * alpha/win-nt.h: Don't include alpha.h
+       (WINDOWS_NT): No longer define.
+       * alpha/xm-winnt.h: Don't include xm-alpha.h and winnt/xm-winnt.h.
+
+Fri May 24 12:34:22 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * configure (cpu_type): Add case for arm.
+       (sparclet-*-aout*): Delete extra_headers.
+
+       * varasm.c (asm_output_bss): New argument DECL.
+       Use ASM_DECLARE_OBJECT_NAME if defined.
+       (asm_output_aligned_bss): Likewise.
+       (assemble_variable): Pass DECL to ASM_OUTPUT{,_ALIGNED}_BSS.
+       * arm/aout.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * h8300/h8300.h (ASM_OUTPUT_BSS): Update.
+       * i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * i386/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * m68k/coff.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * m68k/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * m68k/m68k-aout.h (ASM_OUTPUT_BSS): Update.
+       * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * rs6000/win-nt.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+       * sparc/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update.
+
+Thu May 23 19:55:52 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * combine.c (set_nonzero_bits_and_sign_copies): Set
+       reg_sign_bit_copies to one not zero to indicate that the value
+       is unknown.
+
+Thu May 23 18:39:24 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * config/netbsd.h (SWITCH_TAKES_ARG): Add -R.
+       (LINK_SPEC): Add %{R*}.
+
+       * m68k/lb1sf68.asm: Construct exception masks at compile time
+       instead of or'ing in bits at run time.
+
+Thu May 23 15:53:06 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * sh/sh.md: Add new instruction types fp and fpdiv.  Set new
+       instruction types where appropriate.  Add function unit fp.
+       Claim that store instructions use function unit memory.
+
+Thu May 23 00:36:19 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH
+       on the H8/300H.
+       * h8300/h8300.md: Use "m" rather than "o" constraint everywhere
+       appropriate.  Cleanup use of "i" and "n" constraints.
+
+Wed May 22 17:43:37 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * fixincludes (pthread.h): Add extern to __page_size* declarations
+       for AIX 4.1.x.
+
+       * combine.c (nonzero_bits): Don't assume arg pointer has same
+       alignment as stack pointer.
+
+Wed May 22 16:09:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (LINK_START_DEFAULT_SPEC): Spell macro correctly.
+       (LIB_DEFAULT_SPEC): Provide default version.
+
+Wed May 22 11:23:57 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+       * i386.md (return_pop_internal): new pattern.
+       (pop): disable emitting of bogus move instruction.
+       * i386.c (ix86_expand_epilogue): use gen_return_pop_internal to
+       simultanously return and pop args; removed stray semicolon.
+       * config/linux-aout.h, config/linux.h (SET_ASM_OP): Added for
+       __attribute__ ((alias ())) support.
+
+Wed May 22 08:06:42 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu.edu>
+
+       * combine.c (init_reg_last_arrays, setup_incoming_promotions):
+       Correct prototypes.
+
+Tue May 21 13:42:17 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.md (div patterns): Rewrite.
+       (mod patterns): Likewise.
+
+       * pa/pa.c (basereg_operand): Never accept a CONST_INT.
+
+Tue May 21 12:26:40 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * pa/pa-hpux9.h, pa-osf.h (LINK_SPEC): Provide version for Snake.
+
+Tue May 21 07:20:48 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vax.h (TARGET_NAME): Define unless already defined.
+       (TARGET_VERSION): Print TARGET_NAME.
+       * vax/vms.h (TARGET_NAME): Always redefine.
+       (TARGET_VERSION): Delete; retain vax.h definition.
+
+Mon May 20 14:00:44 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.c (output_file_start): Delete misplaced semicolon.
+
+Mon May 20 11:58:15 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * reorg.c (relax_delay_slots): Call update_block before
+       redirecting a branch past a redundant insn.
+
+Sun May 19 16:40:53 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * Makefile.in (libobjc.a, sublibobjc.a): 'specs' added to
+       dependencies.
+
+Sun May 19 12:25:48 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure: Add new switch to provide default for cpu_type;
+       delete numerous settings of it in main switch.
+       (hppa): Reflect rerrangements below; use new configure features.
+       * pa/pa-gas.h, pa/pa-pro-end.h: New files.
+       * pa/pa1.h, pa/pa1-osf.h, pa/pa1-ghpux.h, pa/pa1-oldas.h: Deleted.
+       * pa/pa1-ghpux9.h, pa/pa1-hpux9.h, pa/pa1-hpux.h: Deleted.
+       * pa/pa1-ghiux.h, pa/pa1-hiux.h, pa/pa-ghpux.h: Deleted.
+       * pa/pa-gux7.h, pa/pa-ghiux.h: Deleted.
+       * pa/pa-hiux.h: No longer include pa-hpux.h.
+       * pa/pa-hpux.h: No longer include pa.h.
+       (TARGET_DEFAULT): Unset before setting.
+       (LINK_SPEC): Provide option for pa1.
+       * pa/pa-hpux7.h: No longer include pa.h.
+       (HP_FP_ARG_DESCRIPTOR_REVERSED): Don't define here.
+       * pa/pa-hpux9.h, pa/pa-oldas.h: No longer include pa-hpux.h.
+       (TARGET_DEFAULT): Don't need to set here.
+       * pa/pa-osf.h: No longer include pa.h.
+       (TARGET_DEFAULT): Don't define; identical to default.
+       * pa/pa-pro.h: No longer include pa.h.
+       Move definitions after include to new file pa-pro-end.h.
+       * pa.h (TARGET_SWITCHES): Include TARGET_CPU_DEFAULT.
+       (TARGET_CPU_DEFAULT): Provide default value.
+       (CPP_SPEC): Test TARGET_CPU_DEFAULT too.
+
+       * Makefile.in (function.o): Includes bc-emit.h.
+       (reg-stack.o): Includes insn-flags.h.
+       * expr.h (function_value): Deleted; no such function.
+       (bc_build_calldesc, bc_runtime_type_code): New declarations.
+       * c-decl.c: Add prototypes for all static functions.
+       * c-iterate.c: Likewise.
+       * dbxout.c: Likewise.
+       (adspath): Delete; never used and has numerous parse errors.
+       * dwarfout.c: If not GNUC, make `inline' null; otherwise, leave alone.
+       Add `static' to inline functions.
+       Add prototypes for static function.
+       * expr.c (bc_runtime_type_code): Delete redundant declaration.
+       * function.c: Include bc-emit.h.
+       ({save,restore}_machine_status): Add prototype for args.
+       (bc_runtime_type_code, bc_build_calldesc): Delete redundant decls.
+       (bc_emit_trampoline, bc_end_function): Likewise.
+       * reg-stack.c: Include insn-flags.h.
+       Add prototypes for static functions.
+       (gen_jump, gen_movdf, gen_movxf): Delete redundant declarations.
+       (find_regno_note, emit_jump_insn_before, emit_label_after): Likewise.
+       (swap_rtx_condition): Now static.
+       * sdbout.c: Add prototypes for static functions.
+       (sdbout_parms, sdbout_reg_parms): Delete extra parm to plain_type.
+
+Sun May 19 11:50:10 1996  John Carr <jfc@mit.edu>
+
+       * alpha.c (alpha_emit_conditional_move): Compare to 0 in correct mode.
+
+Sat May 18 20:17:27 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.c (prepare_move_operands): If source is r0, and dest is reg+reg
+       MEM, then copy source to a pseudo-reg.
+       * sh.md (untyped_call): New pattern.
+
+       * unroll.c (copy_loop_body): When update split DEST_ADDR giv,
+       check to make sure it was split.
+       (find_splittable_givs): Fix reversed test of verify_addresses result.
+
+Sat May 18 10:26:04 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * tree.c (unsave_expr_now): Avoid use of NULL_RTX since no rtl.h.
+
+       * configure: Set cpu_default, tm_file, and xm_file early.
+       Remove redundant settings of those, tmake_file, and xmake_file.
+       Use ${tm_file} and ${xm_file} to refer to the main files.
+       Sort some entries for consistency and reformat some others.
+       (rs6000, powerpc): Remove bogus test on host == target.
+       (alpha-*-linux): xm-linux.h no longer includes xm-alpha.
+       (alpha-*-osf*): Remove redundant setting of target_cpu_default.
+       (*-convex-*): Use target_cpu_default instead of separate .h files.
+       (clipper-intergraph-clix*): clix.h no longer includes any files.
+       (i860, i960, pdp11): Reflect removal of includes listed below.
+       * alpha/xm-linux.h: No longer include xm-alpha.h.
+       * clipper/clix.h: No longer include clipper.h and svr3.h.
+       * convex.h: Provide a default for TARGET_DEFAULT.
+       Take "or" of TARGET_DEFAULT and TARGET_CPU_DEFAULT everywhere.
+       * convex/convex{1,2,32,34,38}.h: Deleted.
+       * i860/bsd-gas.h: No longer include bsd.h.
+       * i860/bsd.h: No longer include i860.h.
+       * i860/fx2800.h: No longer include i860/sysv4.h.
+       (OUTPUT_TDESC): No longer define.
+       (ASM_FILE_END): Move redefinition to here.
+       * i860/mach.h: No longer include i860.h.
+       * i860/paragon.h, i860/sysv3.h: No longer include i860.h and svr3.h.
+       * i860/sysv4.h: No longer include i860.h and svr4.h.
+       (ASM_FILE_END): Delete redefinition from here.
+       * i860/xm-fx2800.h: No longer include xm-i860.h.
+       * i860/xm-paragon.h, i860/xm-sysv{3,4}.h: Deleted.
+       * i960/i960-coff.h: No longer include i960.h and dbxcoff.h.
+       * i960/vx960-coff.h: No longer include i960-coff.h.
+       * i960/vx960.h: No longer include i960.h.
+       * pdp11/2bsd.h: No longer include pdp11.h.
+
+       * i370/i370.h: Renamed from mvs.h.
+       * i370/i370.c: Renamed from mvs370.c.
+       * i370/t-i370: Renamed from t-mvs.
+       * i370/xm-i370.h: Renamed from xm-mvs.h.
+       * configure (i370-*-mvs*): Use default names for all files.
+
+       * c-parse.in: Update number of shift/reduce conflicts for objc.
+
+Sat May 18 08:20:17 1996  Dennis Glatting  (dennisg@plaintalk.bellevue.wa.us)
+
+       * m68k/next.h (FINALIZE_TRAMPOLINE): Add missing backslashes.
+
+Fri May 17 19:57:20 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vax/xm-vms.h (dbxout_resume_previous_source_file): New macro.
+
+Fri May 17 14:20:13 1996  Mike Stump  <mrs@cygnus.com>
+
+       * expr.c (expand_expr, cond TARGET_EXPR): Make TARGET_EXPRs
+       redoable for UNSAVE_EXPR.
+       * stmt.c (expand_decl_cleanup): Wrap the cleanup in an UNSAVE_EXPR
+       to that we can redo it.
+       * tree.c (unsave_expr_now): Handle TARGET_EXPRs fully now.
+       * tree.def (TARGET_EXPR): Add a fourth field so that TARGET_EXPRs
+       are redoable.
+
+       * expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++
+       frontend to the backend where it belongs.
+       * tree.c (unsave_expr): Likewise.
+       (unsave_expr_now): Likewise.
+       * tree.def (UNSAVE_EXPR): Likewise.
+       * tree.h (unsave_expr): Likewise.
+       (unsave_expr_now): Likewise.
+
+Fri May 17 15:04:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (lshrsi3 insns): Add special case code for shifting by
+       0 to avoid bad code generated with no optimization.
+
+Fri May 17 13:50:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+        * i386/unix.h (ASM_OUTPUT_MI_THUNK): Define.
+       * i386/{att.h,bsd.h,sun386.h} (ASM_OUTPUT_MI_THUNK): Delete.
+
+Fri May 17 13:34:28 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * config/fp-bit.c (_fpdiv_parts): Correct sign handling when
+       dividing zero or infinity by something.
+
+Fri May 17 12:36:36 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       Standardize option output in assembler files.
+       * Makefile.in (toplev.o): Pass -DTARGET_NAME.
+       * arm/aout.h (ASM_OUTPUT_OPTIONS): Delete.
+       (ASM_FILE_START): Delete option output support.
+       * arm/arm.c (output_option, output_options, m_options): Delete.
+       * m88k/m88k.c (output_file_start): Delete option output support.
+       * m88k/m88k.h (ASM_COMMENT_START): Define.
+       * mips/mips.c (target_switches, print_options): Delete.
+       (mips_asm_file_start): Put output of -G,Cpu,ISA here.
+       * mips/mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #".
+       * rs6000/rs6000.c (output_option, m_options, output_options): Delete.
+       * rs6000/rs6000.h (ASM_OUTPUT_OPTIONS): Delete.
+       (ASM_COMMENT_START): Define.
+       (ASM_FILE_START): Delete option output support.
+       * rs6000/sysv4.h (ASM_FILE_START): Likewise.
+       * rs6000/win-nt.h (ASM_FILE_START): Likewise.  Delete duplicate.
+       * sh/sh.c (output_option, m_options, output_options): Delete.
+       (output_file_start): Delete option output support.
+       * sh/sh.h (ASM_FILE_START): Likewise.
+       (ASM_COMMENT_START): Define.
+       * dwarfout.c (*): flag_verbose_asm renamed to flag_debug_asm.
+       * flags.h (flag_debug_asm): Declare.
+       * toplev.c (print_version): New function.
+       (print_single_switch): New arguments pos, max, indent, sep, term.
+       (print_switch_values): New arguments pos, max, indent, sep, term.
+       Update call to print_single_switch.  Output options passed and
+       options enabled.
+       (MAX_LINE): New macro.
+       (flag_debug_asm): Define.
+       (compile_file): Output options to assembler file.
+       (main): Recognize -dA.  Call print_version.  Update call to
+       print_switch_values.
+       (line_position): Deleted.
+
+Fri May 17 10:50:44 1996  Stan Cox  (coxs@dg-rtp.dg.com)
+
+       * i386.c (function_prologue, ix86_expand_prologue,
+       function_epilogue, ix86_expand_epilogue): Generate prologue and
+       epilogue as RTL (prior to scheduling) instead of emitting asm.
+       (override_options): If only -march is given, make it the default -mcpu.
+       * i386.h (FUNCTION_BEGIN_EPILOGUE): Renamed from FUNCTION_EPILOGUE.
+       * i386.md (return, return_internal, prologue, prologue_set_got,
+       prologue_get_pc, epilogue, leave, pop): New patterns for emitting
+       asm from prologue and epilogue RTL.
+       * m88k/t-dgux (T_CFLAGS): Delete.
+       * m88k/x-dgux (X_CFLAGS): New.
+
+Fri May 17 09:54:23 1996  Jim Meyering  (meyering@asic.sc.ti.com)
+
+       * Makefile.in (stamp-crt{,S}): Use -o to avoid conflicts if
+       both of these are built in parallel.
+
+Fri May 17 08:55:19 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expmed.c (store_split_bit_field): Don't assume the alignment
+       of VALUE is the same as the record.
+
+       * configure: Write #define TARGET_CPU_DEFAULT into tm.h
+       instead of defining MAYBE_TARGET_DEFAULT in Makefile.
+       (alpha-*-linux): Set target_cpu_default to 4 and xmake_file to none.
+       (alpha-*-osf*): Set target_cpu_default to 4 if --gas.
+       * Makefile.in (gcc.o, toplev.o, $(out_object_file)):
+       Remove MAYBE_TARGET_DEFAULT.
+
+       * combine.c (insn_cuid): New function.
+       (INSN_CUID): Sometimes call it.
+
+Fri May 17 08:12:37 1996  Scott Christley <scottc@net-community.com>
+
+       * objc/sendmsg.c (objc_get_uninstalled_dtable): New function.
+       * objc/objc-api.h (objc_get_uninstalled_dtable): New declaration.
+
+        * objc/thr-os2.c, objc/thr-posix.c, objc/thr-mach.c: New files.
+        * objc/THREADS.MACH: New file.
+
+       * objc/sendmsg.c (nil_method): Deleted from here.
+       * objc/nil_method.c: New file.
+       * Makefile (OBJC_O): Add dependency for nil_method.c.
+
+       * objc/hash.c (hash_is_key_in_hash): New function.
+       * objc/hash.h: Include objc/objc.h here instead of in objc/hash.c
+       to get BOOL typedef.
+
+Fri May 17 08:01:48 1996  Doug Rupp  (rupp@gnat.com)
+
+       * msdos/configur.bat: If Ada subdirectory present, adjust Makefile.
+
+Fri May 17 07:40:04 1996  Ulrich Drepper  (drepper@cygnus.com)
+
+       * stddef.h: If need_wint_t defined, nothing in this file is needed.
+       (_WINT_T, __WINT__TYPE__, wint_t): Define under certain circumstances.
+
+Thu May 16 18:53:25 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * fold-const.c (fold, case EQ_EXPR): When folding VAR++ = CONST,
+       mask the new const if VAR is a bitfield reference; also for VAR--.
+
+Thu May 16 18:29:03 1996  Doug Evans  <dje@seba.cygnus.com>
+
+       * varasm.c (function_section): Delete flag_function_sections support.
+       (assemble_start_function): Put it here.  Use UNIQUE_SECTION if defined.
+
+Wed May 15 13:35:11 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.{h,c,md} (rs6000_pic_register): Delete all uses, use
+       pic_offset_table_rtx instead.
+
+       * rs6000.md (move_to_float): Rewrite so that it uses the register
+       allocator to allocate the stack temp, instead of calling
+       rs6000_stack_temp.
+       (fix_truncdfsi2): Ditto.
+
+       * rs6000.c (rs6000_stack_temp): Delete, no longer used.
+
+Wed May 15 10:39:27 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define.
+
+Sat May 11 07:42:59 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (store_field): Support BLKmode bitfield if aligned on
+       byte boundary using emit_block_move.
+       (expand_expr, case COMPONENT_REF): Likewise.
+
+Fri May 10 18:33:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * configure (alpha-*-linux): Reverse order in tm_file list.
+       Delete xmake_file.
+       * alpha/x-linux: Deleted.
+       * alpha/linux.h (ASM_FINAL_SPEC): Add #undef.
+       * alpha/xm-linux.h: Remove bogus trailing #endif.
+
+       * loop.c (maybe_eliminate_biv_1): Disable all but two cases
+       of biv elimination with givs and restrict those two cases to
+       an ADD_VAL that is an address.
+
+       * flow.c (mark_set_1, mark_used_regs): Clean up usages
+       of ALL_NEEDED; change to SOME_NOT_NEEDED and set properly.
+
+Fri May 10 11:37:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * toplev.c (compile_file): Don't warn about artificial functions
+       declared static and not defined.
+
+Thu May  9 22:03:28 1996  Doug Evans  <dje@cygnus.com>
+
+       * varasm.c (assemble_start_function): ASM_DECLARE_FUNCTION_NAME
+       needn't consider bytecodes.
+       (assemble_variable): ASM_DECLARE_OBJECT_NAME needn't
+       consider bytecodes.
+       * toplev.c (rest_of_decl_compilation): Likewise with
+       ASM_FINISH_DECLARE_OBJECT.
+       * arm/aof.h (ASM_DECLARE_{FUNCTION,OBJECT}_NAME): Delete bytecode
+       support.
+       * vax/vms.h (ASM_DECLARE_OBJECT_NAME): Likewise.
+
+Thu May  9 19:36:13 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.h (SET_ASM_OP): Define.
+
+Thu May  9 13:31:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sysv4.h (SUBTARGET_{SWITCHES,OPTIONS}): Add support for
+       finer grain control on -msdata, so that eabi people can specify to
+       compile sdata code to only use r13 instead of r2/r13.  Make
+       -mrelocatable-lib turn off -msdata, just like -m relocatable does.
+       (SUBTARGET_OVERRIDE_OPTIONS): Ditto.
+       (ENCODE_SECTION_INFO): Move to rs6000.c.
+       (ASM_SPEC): -msdata=eabi sets -memb also.
+       (CC1_SPEC): -mno-sdata gets converted to -msdata=none.
+
+       * rs6000.c (rs6000_sdata{,_name}): Add support for finer grain
+       control on -msdata.
+       (output_options): Ditto.
+       (small_data_operand): Ditto.
+       (print_operand): Ditto.
+       (rs6000_select_section): Ditto.
+       (rs6000_encode_section_info): Move here from sysv4.h, section
+       names are stored as STRING nodes, not IDENTIFIER.
+
+Wed May  8 21:04:49 1996  Doug Evans  <dje@cygnus.com>
+
+       * function.c (aggregate_value_p): Return 1 if TREE_ADDRESSABLE.
+       * pa/pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE.
+
+Tue May  7 13:42:57 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.c: Include obstack.h.
+       (bit_memory_operand): New function.
+       (print_operand): Append ":16" to a memory reference to
+       the tiny data area.
+       (h8300_tiny_data_p): New function.
+       (h8300_valid_machine_decl_attribute): Accept "tiny_data".  Fix
+       typo.
+       (h8300_encode_label): New function.
+       (h8300_adjust_insn_length): References to the tiny data section
+       are two bytes shorter than normal accesses on the H8/300H.
+       * h8300/h8300.h (OK_FOR_U): Fix thinko.
+       (ENCODE_SECTION_INFO): Encode info for tiny data variables.
+       (STRIP_NAME_ENCODING): Define.
+       * h8300/h8300.md (movqi insn): Fix length for a constant load.
+       (movstrictqi): Likewise.
+       (movhi, movstricthi): Likewise.
+       (memory btst patterns): Add register to the constraints to keep
+       reload happy.
+
+       * h8300/h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int)))
+       is a valid U operand if SYMBOL_REF_FLAG is set on the
+       SYMBOL_REF.
+       * h8300/h8300.md (memory btst patterns): New patterns.
+
+       * h8300/h8300.c (h8300_eightbit_data_p): Renamed from
+       h8300_tiny_data_p.
+       (h8300_eightbit_data_p): Check for the "eightbit_data"
+       attribute instead of "tiny_data".
+       (h8300_valid_machine_decl_attribute): Likewise.
+       * h8300/h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p
+       instead of h8300_tiny_data_p.
+
+       * h8300/h8300.h (READONLY_DATA_SECTION): Define.
+       (EXTRA_SECTIONS): Add in_readonly_data.
+       (READONLY_DATA_SECTION_ASM_OP): Define.
+       (EXTRA_SECTION_FUNCTINOS): Add readonly_data.
+
+Tue May  7 09:26:24 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * varasm.c (make_decl_rtl): Update DECL_ASSEMBLER_NAME for local
+       statics.  Remove reference to flag_no_common.
+
+Mon May  6 21:38:36 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * cpplib.c (skip_comment, handle_directive): Don't use uninit vars.
+
+Mon May  6 18:47:36 1996  Doug Evans  <dje@cygnus.com>
+
+       * dbxout.c (dbxout_function): When deciding to call dbxout_function_end
+       change test from flag_function_sections to DECL_SECTION_NAME != NULL.
+
+       * varasm.c (named_section): Accept any decl.
+
+Mon May  6 16:41:08 1996  Stan Cox  (coxs@dg-rtp.dg.com)
+
+       * final.c (final_scan_insn): Modify conditional moves whose cc is
+       nonstandard.
+
+       * c-common.c (decl_attributes): Chain multiple attributes correctly.
+
+Mon May  6 15:41:43 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * stmt.c (expand_decl): Don't deduce alignment of SIZE from
+       DECL_ALIGN; use TYPE_ALIGN instead.
+
+       * function.c (assign_parms): Set RTX_UNCHANGING_P in stack_parm
+       if parm is read-only.
+
+       * c-common.c (truthvalue_conversion, case ADDR_EXPR): Don't
+       treat address of external decl as always nonzero.
+
+Mon May  6 11:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * c-decl.c (start_decl): Check -fno-common here.
+       * varasm.c (assemble_variable): Instead of here.
+       * final.c (end_final): Likewise.
+       * c-common.c (init_attributes, decl_attributes): Add A_COMMON.
+
+Mon May  6 11:12:39 1996  Mike Stump  <mrs@cygnus.com>
+
+       * expr.c (expand_increment): Add third parameter to know when to
+       ignore the result value.
+       (store_constructor): Likewise
+       (expand_expr, case {PRE,POST}{INC,DEC}REMENT_EXPR): Likewise.
+       * tree.c (stabilize_reference): Always ignore the first operand of
+       COMPOUND_EXPRs.
+
+Mon May  6 13:14:45 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.c (gen_shifty_op): Truncate VALUE to avoid out of bounds array
+       access.
+
+       * expr.c (expand_expr, case INDIRECT_REF): Delete obsolete code
+       to special case a SAVE_EXPR operand.
+
+Mon May  6 10:00:12 1996  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * vax.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Mon May  6 09:49:10 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k/linux.h: Use the new trampoline definition.
+       (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Deleted.
+       (INITIALIZE_TRAMPOLINE): Changed.
+       (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
+
+Mon May  6 09:43:55 1996  Patrick J. LoPresti  (patl@lcs.mit.edu)
+
+       * rtlanal.c (rtx_addr_varies_p): Scan operands of type `E'.
+
+Mon May  6 09:04:40 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * x-linux{,-aout} (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): Deleted.
+       * config/t-linux (BOOT_CFLAGS, STMP_FIXPROTO, STMP_FIXPROTO): New,
+       moved from x-linux.
+       * t-linux-aout: New file.
+       * configure (i[3456]86-*-linux*oldld*, i[3456]86-*-linux*aout*):
+       Set tmake_file to t-linux-aout.
+
+Sun May  5 22:13:22 1996  H.J. Lu  (hjl@gnu.ai.mit.edu)
+
+       * Makefile.in (gxx_include_dir): Change to $(prefix)/include/g++.
+       (old_gxx_include_dir): New - defined as $(libdir)/g++-include.
+       (cccp.o, cpplib.o): Also pass OLD_GPLUSPLUS_INCLUDE_DIR (set
+       from $(old_gxx_include_dir)).
+       * cccp.c (include_defaults_array): For C++, also search
+       OLD_GPLUSPLUS_INCLUDE_DIR.
+       * cpplib.c (default_include): Likewise.
+       * configure: Remove no-longer-needed support for --gxx-include-dir.
+
+Sun May  5 21:59:53 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-lex.c (check_newline): Fix #pragma parsing; issue error message
+       for directive that starts with `p' but isn't `pragma'.
+
+Sun May  5 13:13:40 1996  Jeremy Bettis  <jeremy@hksys.com>
+
+       * objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
+       stored in a hashtable.
+
+Sun May  5 13:09:54 1996  Satoshi Adachi  (adachi@wisdom.aa.ap.titech.ac.jp)
+
+       * m68k/newsgas.h (SET_ASM_OP, ASM_WEAKEN_LABEL): Define.
+
+Sun May  5 12:48:08 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * tree.c (build_real_from_int_cst): Remove spurious test for
+        REAL_IS_NOT_DOUBLE.
+
+Sat May  4 12:17:58 1996  Richard Earnshaw (rearnsha@armltd.co.uk)
+
+       * arm.h (ASM_OUTPUT_MI_THUNK): Moved here from aout.h.  Rewrite to be
+       independent of the selected assembler, and to use optimal number of
+       instructions.
+       * arm/aout.h (ASM_OUTPUT_MI_THUNK): Delete.
+
+       * arm/aout.h (ASM_OUTPUT_OPTIONS): Define.
+       (ASM_FILE_START): Call ASM_OUTPUT_OPTIONS.
+       (BSS_SECTION_OP): Define.
+       (ASM_OUTPUT_ALIGN): Don't output anything if byte alignment is wanted.
+       (ASM_OUTPUT_ALIGNED_BSS): Define.
+       * arm.h (target_cpu_name): Delete.
+       (TARGET_SWITCHES): Delete "be" and "le".
+       (TARGET_OPTIONS): Delete "cpu-", add "tune=".
+       (struct arm_cpu_select): New struct.
+       (PROCESSOR_DEFAULT, TARGET_CPU_DEFAULT): Define.
+       (EXTRA_CC_MODES, EXTRA_CC_NAMES): Add CC_Cmode.
+       (CANONICALIZE_COMPARISON): Define.
+       * arm.c (arm_select): Declare and initialize.
+       (all_procs): Add arm7100.
+       (arm_override_options): Parse arm_select structure to determine
+       selected architecture and tuning parameters.
+       (output_option, output_options): New functions.
+       (arm_canonicalize_comparison): New function.
+       (arm_gen_movstrqi): Don't add a writeback of the index registers for
+       the last instructions.
+       (arm_select_cc_mode): Detect case where mode is carry out of unsigned
+       arithmetic.
+       (output_lcomm_directive): Use bss_section (), and use alignment
+       rather than rounding.
+       (get_arm_condition_code): Handle CC_Cmode.
+       (final_prescan_insn): Avoid boundary case where we would occasionally
+       inline MAX_INSNS_SKIPPED+1 insns.  Allow call_insns to be inlined in
+       APCS_32 mode if they are the last insn in the block.
+       * arm.md (*addsi3_compareneg): Delete potentially unsafe insn.
+       (*addsi3_compare_op[12]): New insns.
+       (*compare_addsi2_op[01]): New insns.
+       (*addsi3_carryin, *addsi3_carryin_alt[12]): New insns.
+       (*cmp_ite1): Use arm_add_operand instead of arm_rhs_operand.
+       * semi.h (PROCESSOR_DEFAULT): Default to PROCESSOR_ARM6.
+
+Fri May  3 10:52:11 1996 1996  Stan Cox  (coxs@dg-rtp.dg.com)
+
+       * i386.md (movesicc, movehicc) Pentium Pro conditional move insns.
+
+       * i386.h (TARGET_PENTIUMPRO, TARGET_CMOVE, BRANCH_COST,
+       ASM_OUTPUT_FUNCTION_PREFIX): New macros for conditional move.
+
+       * i386.c (asm_output_function_prefix, function_prologue): Setup
+       pic on Pentium Pro so a return will match the call.
+       (print_operand, put_condition_code): Output conditional move suffixes.
+
+Fri May  3 10:52:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386/{att.h,gas.h,bsd.h,sub386.h} (ASM_OUTPUT_MI_THUNK): Define.
+
+Wed May  1 17:54:51 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc.h (ASM_OUTPUT_MI_THUNK): Fix for sparc64, optimize.
+
+Wed May  1 13:28:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Define.
+       * i386/sysv4.h: Likewise.
+       * sparc/sysv4.h: Likewise.
+
+Wed May  1 01:44:47 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.c (h8300_adjust_insn_length): Adjust the cost of
+       shifts by small constant values.
+       * h8300/h8300.md: Refine comments.  Remove names from many
+       patterns which don't need them.
+       (compare insns): Don't underestimate lengths.
+       (andqi3 expander): Remove constrains.
+       (andhi3): Don't underestimate length.
+       (andsi3): Don't underestimate length.  Improve code when upper
+       or lower half of destination is being cleared.
+       (indirect_jump_h8300, indirect_jump_h8300h): Simplify.
+       (shift insns): Remove useless "I" constraint.
+
+       * h8300/h8300.md (bcs type): Remove "bcs" type attribute and
+       all references.
+       (bcs insns): Delete.  No longer needed.
+       (setcc from bitfield): Rewrite to use zero_extract.  Provide
+       QImode, HImode and SImode variants.
+
+Tue Apr 30 18:13:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * svr4.h (SELECT_SECTION): If RELOC is true, put it in data.
+
+Tue Apr 30 17:26:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * fold-const.c (fold): Don't call convert to recreate tree nodes
+       we already have.
+
+Tue Apr 30 16:52:41 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.c (one_insn_adds_subs_operand): New function.
+       (h8300_adjust_insn_length): New function.
+       * h8300/h8300.h (ADJUST_INSN_LENGTH): Define.
+       * h8300/h8300.md: Remove obsolete comments.
+       (move patterns): Tweak constraints.
+       (tst patterns): Use "register_operand" for predicate.
+       (adds pattern): Use one_insn_adds_subs_operand to get length
+       computation correct.
+       (subs pattern): Similarly.
+       (movstrhi): Remove unused expander.
+       (fancy*, pxor, and-not patterns): Remove.  No longer needed.
+
+Tue Apr 30 13:35:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/sol-c0.c (_start): Temporarily display calling
+       __do_global_ctors, since the Solaris linker doesn't handle the
+       relocations properly.
+
+Mon Apr 29 13:03:12 1996  Doug Evans  <dje@cyguns.com>
+
+       * sparc/vxsparc.h: sparc-aout.h renamed to aout.h.
+
+Mon Apr 29 00:35:15 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.c (names_small): Remove "BAD" postfix from
+       %r7 byte registers.
+       (rtx_equal_function_value_matters): Remove extra declaration.
+       (output_simode_bld): New function.
+       * h8300/h8300.h (NO_FUNCTION_CSE): Do define this.  Register
+       pressure makes cse-ing function addresses rarely a win.
+       (reg_class): Remove unnecessary register classes LONG_REGS,
+       SP_REG, SP_AND_G_REGS.
+       (REG_CLASS_NAMES): Corresponding changes.
+       (REG_CLASS_CONTENTS): Corresponding changes.
+       (REGNO_REG_CLASS): Corresponding changes.
+       (REG_CLASS_FROM_LETTER): Corresponding chagnes.
+       (output_simode_bld): Declare.
+       * h8300/h8300.md: Nuke comments for stuff which has been fixed.
+       (all patterns): Remove references to register class "a" (SP_REGS)
+       which no longer exists.
+       (many patterns): Accept auto-inc auto-dec addresses in more cases.
+       (zero_extendqisi2): New pattern for the H8/300.
+       (zero_extendhisi2): Only use zero_extendhisi2_h8300 when not optimizing.
+       (extendhisi2): Only use extendhisi2_h8300 when not optimizing.
+       (extendqisi2): New pattern for the H8/300.
+       (bitfield related patterns): Completely rewrite.
+       (fancy_bclr, fancy_btst): Deleted.  Redundant with new bitfield
+       patterns.
+       (addhi3 pattern for h8300): Handle case where we can't make matching
+       constraints (works around hard to fix reload problem).
+       (stack_pointer_manip): Delete.
+       (and not patterns): New combiner patterns.
+
+       * pa/pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the
+       final $CODE$ subspace is in the $TEXT$ space.
+
+Sun Apr 28 14:52:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * svr4.h (ASM_OUTPUT_SECTION_NAME): If no decl is specified,
+       make the section read/write data.
+
+Sat Apr 27 10:28:59 1996  Michael Meissner  <meissner@wogglebug.tiac.net>
+
+       * rs6000/t-ppcgas (MULTILIB_EXCEPTIONS): Don't allow -mrelocatable
+       and -mcall-sysv-noeabi.
+
+       * rs6000/sysv.h (SUBTARGET_OVERRIDE_OPTIONS): The -mcall-aix
+       option sets -meabi.  Don't allow -mrelocatable without -meabi.
+
+Fri Apr 26 16:10:46 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc/sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on
+       operand 0.
+
+Fri Apr 26 14:36:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * gcc/config/i960/t-{960bare,vxworks960} (MULTILIB*): Add
+       soft-float multilib support.
+
+Fri Apr 26 06:38:56 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * stor-layout.c (layout_decl): Turn off DECL_BIT_FIELD for BLKmode
+       that's properly aligned and a multiple of a byte.
+
+Thu Apr 25 22:43:19 1996  Doug Evans  <dje@cygnus.com>
+
+       * i386/gas.h (ASM_OUTPUT_ALIGN): #if 0 out again.
+       Undoes change of Apr. 9.
+       * i386/go32.h (ASM_OUTPUT_ALIGN): Define.
+
+Thu Apr 25 14:05:33 1996  Richard Kenner  (kennervlsi1.ultra.nyu.edu)
+
+       * calls.c (expand_call): In inlining case, if BEFORE_CALLS is
+       zero, start looking at first insn (one more place).
+
+       * expr.c (expand_builtin, case BUILT_IN_SETJMP): CLOBBER the
+       static chain after label at setjmp point.
+
+Thu Apr 25 09:02:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (print_operand{,_address}): Correct compile error if
+       TARGET_EABI is not defined.  Also, just call small_data_operand,
+       without testing the ABI.
+       (rs6000_select_section): Ditto.
+
+       * rs6000/sysv4.h (CC1_SPEC): For -mcall-solaris, don't pass
+       -mno-main-init.
+
+Wed Apr 24 18:26:48 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * collect2.c (handler): Delete export_file when we get a signal.
+
+Wed Apr 24 14:54:44 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa/pa1-ghpux.h (LINK_SPEC): Define.  Link in PA1.1 libraries
+       by default.
+       * pa/{pa1-ghpux9.h, pa1-hpux.h, pa1-hpux9.h}: Likewise.
+
+Wed Apr 24 11:12:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * configure (powerpc{,le}-*-eabi*): Use t-ppc{,gas}, instead of
+       t-eabi{,gas}.
+       (powerpc-*-linux,powerpcle-*-solaris): Add definitions.
+       (MULTILIB_DIRNAMES): Pick shorter names for the multilib
+       directories.
+       (MULTILIB_*): Do not build -msdata versions of the library.  Build
+       both system V and eabi versions of the libraries.
+
+       * rs6000/t-ppc{,gas} (MULTILIB*): Don't build -msdata versions of
+       the libraries.  Split -mcall-sysv libraries into
+       -mcall-sysv-{eabi,noeabi} varients.
+       (LIB2FUNCS_EXTRA): Add eabi.S, eabi-ctors.c.
+       (eabi.S): Use eabi.S, not eabi.s for eabi.asm.
+       (crt files): Add support for Solaris crt files.
+
+       * rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris
+       support.
+
+       * rs6000/linux.h: New file for Linux support.
+
+       * rs6000/eabi-ci.asm (ppc-asm.h): Include.
+       (.got section): Correct attribute.
+
+       * rs6000/eabi-c{i,n}.asm (.init,.finit): Add support for System V
+       style .init/.fini sections, that constructors and destructors
+       place a bl <func> in the appropriate section.
+
+       * rs6000/eabi-ctors.c (__do_global_{c,d}tors): Call __init, and
+       __fini to handle constructors/destructors in the .init, .fini
+       sections.
+
+       * rs6000/{eabi,sysv}.h: Move most eabi configuration stuff from
+       eabi.h to sysv.h.
+
+       * rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from a switch into
+       an option.  Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi}
+       options.  Add -m{,no-}eabi options to control whether we adhere to
+       the System V spec or the EABI spec.  Add -m{,no-}regnames to
+       control whether registers are printed out as %r0 instead of 0.
+       (SUBTARGET_OVERRIDE_OPTIONS): Add support for new -mcall options.
+       (FP_ARG_MAX_REG): Use new macros for ABI conformance.
+       (RS6000_REG_SAVE): Ditto.
+       (STACK_BOUNDARY,BIGGEST_ALIGNMENT): If eabi, align to 8 byte
+       boundary, otherwise 16 byte.
+       (EXTRA_SECTIONS): Add .init, .fini sections.
+       (*_SPEC): Reorganize so that the different targets all have sub
+       specs that go in the specs file.  Add support for linux and
+       Solaris targets.
+
+       * rs6000/{sysv4,eabi}*.h (*_SPECS): Only override the default
+       spec, all other specs moved to sysv4.h.
+       (RS6000_ABI_NAME): Use RS6000_ABI_NAME to set the default ABI
+       name, not TARGET_DEFAULTS.
+
+       * rs6000/xm-sysv4.h (alloca): Properly declare alloca if compiler
+       is not GCC.
+       (DONT_DECLARE_SYS_SIGLIST): Define.
+
+       * rs6000.c (rs6000_abi_name): New global for getting the results
+       of -mcall-xxx.
+       (rs6000_reg_names): New global for holding the normal register
+       names.
+       (alt_reg_names): Alternate register names for -mregnames.
+       (rs6000_override_options): If -mregnames, copy alt_reg_names into
+       rs6000_reg_names.
+       (input_operand): Recognize ABI_SOLARIS.
+       (small_data_operand): Ditto.
+       (init_cumulative_args): Ditto.
+       (function_arg{,_boundary,_advance,_partial_nregs}): Ditto.
+       (function_arg_pass_by_reference): Ditto.
+       (setup_incoming_varargs): Ditto.
+       ({rs6000,debug}_stack_info): Ditto.
+       (output_{prolog,epilog}): Ditto.
+       (print_operand): %$ prints '.' on Solaris, '$' elsewhere.
+       (print_operand{,_address}): If not eabi, use @sdarel for small
+       data references.
+       (rs6000_stack_info): Only emit __eabi call if TARGET_EABI.
+
+       * rs6000.h (*_SPECS): Move the System V specs to svr4.h.
+       (ABI_SOLARIS): New ABI, mostly like System V.
+       (EXTRA_CONSTRAINT): Use ABI_SOLARIS like ABI_V4.
+       (RETURN_ADDRESS_OFFSET): Ditto.
+       (LEGITIMATE_SMALL_DATA_P): Ditto.
+       (RETURN_IN_MEMORY): On Solaris, small structures are returned in
+       registers.
+       (REGISTER_NAMES): Use rs6000_reg_names array, instead of string
+       literals.
+       (DEBUG_REGISTER_NAMES): Define.
+       (ADDITIONAL_REGISTER_NAMES): Add sp, toc aliases.
+       (PRINT_OPERAND_PUNCT_VALID_P): Recognize $ as a punctuation char.
+
+       * rs6000.md (got & call patterns): Use ABI_SOLARIS to mean the
+       same as ABI_V4.
+       (branch patterns): Use %$ for the current location, not just $.
+
+       * va-ppc.h: Add Solaris support.
+
+Tue Apr 23 20:02:13 1996  Doug Evans  <dje@cygnus.com>
+
+       * sparc/sparc.c (output_function_prologue): In -mbroken-saverestore
+       case, %sp = %fp - size.
+       * sparc/t-splet (TARGET_LIBGCC2_CFLAGS): Delete.
+       * sparc/sparc.md (isa attribute): Add sparclet.
+       (*smacsi,*smacdi,*umacdi): Use match_operand, not match_dup
+       for third arg.
+       (*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32,const_umulsidi3): Use
+       smuld,umuld for sparclet.
+
+Tue Apr 23 16:28:28 1996  Michael Meissner  <meissner@wombat.gnu.ai.mit.edu>
+
+       * config/m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so
+       gcc will use libgloss for supported target boards {idp,mvme,bcc}.
+
+Tue Apr 23 16:00:28 1996  Per Bothner  <bothner@cygnus.com>
+
+       * expr.c (store_constructor):  Fix test for missing array elements.
+
+Tue Apr 23 11:21:09 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * config/i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive.
+       (ASM_OUTPUT_ALIGNED_LOCAL): Generate an `lcomm' directive.
+       (TARGET_DEFAULT): Include TARGET_IEEE_FP.
+       (CPP_PREDEFINES): Include Di386.
+
+Mon Apr 22 12:00:46 1996  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.h (BIGGEST_FIELD_ALIGNMENT): Delete.
+       (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Define.
+       * sysv4.h (BIGGEST_FIELD_ALIGNMENT): Delete.
+       (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
+       * win-nt.h (ADJUST_FIELD_ALIGN, ROUND_TYPE_ALIGN): Undefine.
+
+Sun Apr 21 17:52:36 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k/coff.h (ASM_OUTPUT_SECTION): Test DECL before
+       dereferencing it.
+
+       * cse.c (cse_process_notes): Handle SUBREG like ZERO_EXTEND.
+
+Sun Apr 21 12:57:12 1996  Doug Evans  <dje@cygnus.com>
+
+       * arm/aout.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Sun Apr 21 09:50:09 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
+
+Sun Apr 21 08:42:13 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.c (check_float_value): Cast args of bcopy to avoid warnings.
+
+Sat Apr 20 21:22:21 1996  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * stor-layout.c (layout_record): Use ADJUST_FIELD_ALIGN to modify
+       alignment of fields within records.
+
+Sat Apr 20 19:55:33 1996  Niels Moller  <nisse@lysator.liu.se>
+
+       * c-parse.in (typespec): Made <SomeProtocol> equivalent
+       to (id <SomeProtocol>).
+       (non_empty_protocolrefs): New nonterminal.
+
+Sat Apr 20 08:34:02 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+        * stmt.c (check_for_full_enumeration_handling): Call case_tree2list
+       before checking for case expressions not corresponding to enumerators.
+       (mark_seen_cases): If SPARSENESS == 2, exploit AVL order.
+       Else, convert tree to list.
+       Set xlo to -1 if SPARSENESS == 1 search failed.
+       (expand_end_case): Avoid calling case_tree2list on list.
+
+Fri Apr 19 16:54:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000/win-nt.h (BIGGEST_FIELD_ALIGNMENT): Set to 64, not
+       32 that AIX uses.
+
+Fri Apr 19 16:40:38 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * i386.md (movqi): Handle QImode values in %si and %di.
+
+Thu Apr 18 20:56:56 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * sh.md (lshrsi3): Change gen_ashlsi3_d to gen_lshrsi3_d.
+
+Thu Apr 18 15:49:28 1996  Per Bothner  <bothner@cygnus.com>
+
+       * sparc.h (ASM_OUTPUT_MI_THUNK): Define.
+
+Thu Apr 18 15:19:26 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.md: Remove "type" attribute from all patterns
+       except those which have varying length branches.  Eliminate
+       obsolete "type" attributes.  Add additional comments about insn
+       length computation problems and further optimizations.  Add
+       "length" and "cc" attributes to insns without them, fix a few
+       length computations.  Remove patterns which are commented out.
+
+       * h8300.md (zero extension expanders and insns): Simplify, fix various
+       length problems, provide optimized versions for the h8300 and h8300h.
+       (sign extension expanders and insns): Likewise.  Make them
+       nearly identical to zero_extension patterns and insns.
+
+Wed Apr 17 18:50:16 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * pa.h (SELECT_SECTION): Define.  Never place a something
+       into the read-only data section if it requires a reloc.
+
+       * pa.md (rotlsi3): Delete unnecessary and incorrect pattern.
+
+Wed Apr 17 17:15:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.md (movdi): Never FAIL, even if operand[1] is not a
+       general operand, due to being in volatile memory.
+
+Wed Apr 17 15:20:10 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * c-lex.c (check_newline): Rewrite to use tokens.
+       (handle_sysv_pragma): Take a token instead of a character.
+       * i960.c (process_pragma): Take the IDENTIFIER_POINTER tree
+       node instead of a character.
+       * sh.c (handle_pragma): Likewise.
+       * config/nextstep.c (handle_pragma): Likewise.
+       * h8300.c (handle_pragma): Likewise.
+       * i960.h (HANDLE_PRAGMA): Expect/pass 2nd arg of NODE, not CH.
+       * sh.h (HANDLE_PRAGMA): Likewise.
+       * config/nextstep.h (HANDLE_PRAGMA): Likewise.
+       * h8300.h (HANDLE_PRAGMA): Likewise.
+
+Wed Apr 17 14:28:43 1996  Doug Evans  <dje@cygnus.com>
+
+       * choose-temp.c: Don't include sys/file.h ifdef NO_SYS_FILE_H.
+       #include <stdio.h>.
+       (choose_temp_base): Make tmp,usrtmp, static locals.
+
+Wed Apr 17 08:41:02 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.c (alpha_emit_conditional_move): Fix some bugs in previous
+       change and do some cleanup.
+
+Tue Apr 16 18:53:05 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * reload.c (push_reload): Add extra reload for inside of SUBREG if
+       it is CONSTANT_P.
+
+       * expr.c (do_store_flag): Rewrite last change to avoid compiler
+       warnings.
+
+       * reload.c (push_reload): When reuse an old reload, set the modes
+       to be the larger of the old and new modes.
+
+        * i960/t-960bare (xp-bit.c): Fix typo in source file name.
+
+Tue Apr 16 18:09:16 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/h8300.md (andhi3): If 2nd operand is a CONST_INT that
+       meets the 'J' constraint, then only two bytes are needed for
+       this insn.  Improve code generated for the h8300h when both
+       operands are registers.
+       (iorhi3, xorhi3): Likewise.  Rework to be nearly identical to andhi3.
+       (andsi3): If 2nd operand is a CONST_INT that meets the 'J'
+       constraint, then only two bytes are need for this insn.
+       Improve code generated for the h8300h regardless of the
+       type of the 2nd operand.  Make this pattern work on the h8300 too.
+       (iorsi3, xorsi3): Likewise.  Rework to be nearly identical to andsi3.
+       (iorqi3_internal): Make this pattern look more like andqi3_internal.
+       (one_cmplhi2, one_cmplsi2): Fix length computation for H8300H.
+
+Tue Apr 16 17:43:25 1996  J"orn Rennecke (amylaar@meolyon.hanse.de)
+
+       * i386.md (addsidi3_2): Handle non-MEM overlap case.
+
+Tue Apr 16 16:59:49 1996  Richard Henderson  <rth@tamu.edu>
+
+       * function.c (expand_function_end): Allow TRAMPOLINE_TEMPLATE
+       to be omitted on systems for which it is not cost effective.
+       * varasm.c (assemble_trampoline_template): No such function
+       if no TRAMPOLINE_TEMPLATE.
+       * m68k.h: Greatly simplify the run-time trampoline code:
+       (TRAMPOLINE_TEMPLATE, TRANSFER_FROM_TRAMPOLINE): Delete define.
+       (TRAMPOLINE_SIZE, INITIALIZE_TRAMPOLINE): Changed.
+       (TRAMPOLINE_ALIGN): No point aligning to cache line.
+       (FINISH_INIT_TRAMPOLINE): New define.
+       * m68k/next.h: Instead of redefining INITIALIZE_TRAMPOLINE,
+       make use of the new FINISH_INIT_TRAMPOLINE.
+       * m68k/{m68k.h,next.h,aux.h} (FINISH_INIT_TRAMPOLINE):
+       Rename to FINALIZE_TRAMPOLINE.
+       * m68k/{linux.h,m68kv4.h}: Override trampoline macros.
+
+Tue Apr 16 16:02:50 1996  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * combine.c (make_field_assignment): Allow XOR in final case.
+
+Tue Apr 16 11:33:53 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * m68k.h (TARGET_SWITCHES): Don't remove MASK_68060 with -msoft-float.
+
+       * m68k.h (MULL_COST, MULW_COST, RTX_COSTS): Add costs for TARGET_68060.
+       * m68k.md (ashlsi_16, lshrsi_16): Disable pattern for TARGET_68060;
+       this special case is not faster for that cpu.
+
+Tue Apr 16 10:54:55 1996  Eliot Dresselhaus  <dresselh@rft30.nas.nasa.gov>
+
+       * alpha.c (alpha_emit_conditional_move): New function.
+       * alpha.h (alpha_emit_conditional_move): Declare it.
+       * alpha.md (cmov* define_expands): Use it.
+
+Tue Apr 16 09:06:17 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * function.h (struct function): New field returns_pointer.
+       * function.c (push_function_context_{to,from}): Save and restore
+       current_function_returns_pointer.
+
+       * config/svr4.h (ENDFILE_SPEC): Add missing `%s'.
+
+       * configure (m68k-*-linux*aout*): Set tmake_file to m68k/t-linux-aout.
+       (m68k-*-linux*): Set extra_parts.
+       * m68k/t-linux (INSTALL_ASSERT_H): New definition.
+       (CRTSTUFF_T_CFLAGS_S, TARGET_LIBGCC2_CFLAGS): New definitions.
+       * m68k/t-linux-aout: New file.
+       * m68k/linux.h (LIB_SPEC): Deleted.
+       (BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_BSS): Define.
+
+       * m68k.h (TRAMPOLINE_ALIGNMENT): Specify alignment in bits, not bytes.
+
+Tue Apr 16 08:53:17 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * final.c (final_scan_insn): Allow removal of redundant test and
+       compare instructions that use clobbers.
+
+Tue Apr 16 06:22:00 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-decl.c (clear_limbo_values): New function.
+       (pushdecl): Call it for function body blocks.
+
+       * objc/thr-decosf1.c (_objc_thread_id): Correct return type from
+       int to _objc_thread_id.
+
+       * expr.c (expand_builtin, case BUILT_IN_LONGJMP): Make a decl
+       for __dummy, so we can call make_function_rtl on it.
+
+       * expr.c (expand_assignment): Don't pre-evaluate RHS if a CALL_EXPR
+       with a variable-size return.
+
+Mon Apr 15 17:38:45 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixincludes: Fix undefined VOIDFUNCPTR in VxWorks 5.2 <time.h>.
+
+Mon Apr 15 15:12:16 1996  Jim Wilson  <wilson@cygnus.com>
+
+       * expr.c (do_store_flag): Before calling exact_log2, remove any
+       sign extension bits.
+
+       * reload1.c (emit_reload_insns): Call reload_reg_reaches_end_p for
+       every reg of multi-reg spill register.  Invalidate old info for multi
+       reg spill registers when only part survives to the end.
+
+Mon Apr 15 14:49:12 1996  Mike Stump  <mrs@cygnus.com>
+
+       * function.c (preserve_temp_slots): Only preserve temporaries that
+       happen to be at the current level.
+
+Mon Apr 15 14:08:12 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * gansidecl.h: New file.
+       * choose-temp.c: New file.
+       * Makefile.in (xgcc): Depend on and link in choose-temp.o.
+       (collect2): Likewise.
+       (choose-temp.o): Add rule for.
+       * collect2.c: #include "gansidecl.h".
+       (const,PROTO): Delete.
+       (P_tmpdir): Delete.
+       (choose_temp_base): Declare as extern, delete internal copy.
+       (main): Update call to choose_temp_base.
+       * cpphash.c: #include "gansidecl.h".
+       (NULL,const,volatile): Delete.
+       * demangle.h: #include "gansidecl.h".
+       (PROTO,PTR,const): Delete.
+       * expr.h (const): Delete.
+       * fix-header.c: #include "gansidecl.h".
+       (const): Delete.
+       * gcc.c: #include "gansidecl.h".
+       (PROTO,VPROTO,PVPROTO,VPROTO,VA_START,NULL): Delete.
+       (GENERIC_PTR,NULL_PTR,P_tmpdir): Delete.
+       (choose_temp_base): Declare as extern, delete internal copy.
+       (concat): Rewrite to take a variable number of arguments.
+       (choose_temp_base_try,concat[346]): Delete.
+       (translate_options,set_spec,process_command,do_spec_1,
+       is_directory,main): Always use concat, not concat[346].  Pass
+       NULL_PTR as trailing arg to concat.
+       * genattr.c (main): Delete printing of "#define PROTO".
+       * machmode.h: #include "gansidecl.h".
+       (PROTO): Delete.
+       (HAVE_MACHINE_MODES): Move definition to standard place.
+       * recog.h: #include "gansidecl.h".
+       (PROTO,const): Delete.
+       * rtl.h: #include "gansidecl.h".
+       (PROTO,VPROTO,PVPROTO,VPROTO,VA_START,STDIO_PROTO): Delete.
+       (NULL,GENERIC_PTR,NULL_PTR): Delete.
+       * tree.h: Likewise.
+
+Mon Apr 15 08:49:20 1996  Tom May  (ftom@netcom.com)
+
+       * cse.c (invalidate_skipped_set): Ignore CLOBBER after calling
+       note_mem_written, not before.
+
+Mon Apr 15 08:22:03 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>
+
+       * m68k.md (tstdi): Optimized for "d" case.
+       (movqi): Allow moving "i" into "a".
+       (zero_extendsidi2): Alternatives merged.
+       (extendplussidi): Fixed when operands 0 and 1 share a register.
+       (adddi_sexthishl32): Constraints reordered for better reload.
+       (adddi3,subdi_sexthishl32,subdi3,negdi2): Likewise.
+       (ashldi_sexthi): Accept "m" as operand 0.
+       (ashldi_const32): Alternatives merged.
+       (ashift patterns): Output "lsl" instead of "asl".
+       (beq0_di): If condition codes already set, output only branch insn.
+       (bne0_di,bge0_di,blt0_di): Likewise.
+       * m68k.c (notice_update_cc, case ASHIFT{,RT}, LSHIFTRT, ROTATE{,RT}):
+       Don't set CC_NO_OVERFLOW.
+       * m68k.h (TARGET_SWITCHES): Fix typo in "c68000" entry.
+
+Mon Apr 15 08:06:17 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * real.c (eadd1): Check for overflow on X plus X.
+
+Mon Apr 15 08:02:24 1996  J.T. Conklin  <jtc@cygnus.com>
+
+       * i386/netbsd.h (HAVE_SYSV_PRAGMA): Removed definition.
+       * config/netbsd.h (HAVE_SYSV_PRAGMA): Define.
+       (SET_ASM_OP): Define.
+
+Mon Apr 15 07:28:54 1996  Fila Kolodny <fila@ibi.com>
+
+       * configure: Add definition for host= into Makefile.
+       * build-make (CC): Pass -b $(host), not target.
+
+Mon Apr 15 05:12:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (bc_expand_increment): Change declaration to return void.
+
+       * toplev.c (max_label_num_after_reload): New variable.
+       (rest_of_compilation): Set it.
+       * reorg.c (find_dead_or_set_registers): Only kill spill regs after
+       label made before jump2.
+
+       * combine.c (expand_field_assignment): Take SUBREG_WORD into
+       account when have STRICT_LOW_PART.
+       (make_extraction): Make a STRICT_LOW_PART at any low-order word.
+
+Mon Apr 15 03:43:11 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * flags.h (flag_function_sections): Declare.
+       * toplev.c (flag_function_sections): Define.
+       (compile_file): Add warnings when -ffunction-sections is
+       used with -g, or profiling.  Disable -ffunction-sections
+       when profiling is used.  Add warning when -ffunction-sections
+       is used on a target that doesn't support it.
+       * varasm.c (named_section): Make a copy of the section name
+       in case the original is in temporary storage.
+       (function_section): Set DECL_SECTION_NAME for each function
+       if flag_function_sections is on and the target supports it.
+       * dbxout.c (dbxout_function_end): New function.
+       (dbxout_function): Call dbxout_function_end if using extensions
+       and flag_function_sections is on.
+       * sparc/sysv4.h (ASM_OUTPUT_SECTION_NAME): Prefix a function
+       section's name with ".text%" when -ffunction-sections.
+
+Sun Apr 14 19:37:43 1996  Doug Evans  <dje@cygnus.com>
+
+       * toplev.c (main): Delete redundant test for -p used with -fbytecode.
+
+Sun Apr 14 19:01:59 1996  John F. Carr <jfc@mit.edu>
+
+       * c-decl.c (finish_enum): Don't crash if no type can represent all
+       enumeration values.
+
+Sun Apr 14 18:56:40 1996  J.T. Conklin  <jtc@rtl.cygnus.com>
+
+       * m68k.md (ftruncdf2): Enable for m68060 systems.
+
+Sun Apr 14 18:49:30 1996  David L. Reese  (david.reese@east.sun.com)
+
+       * fold-const.c (range_test):  Don't convert hi_cst or lo_cst
+       to unsigned when folding signed range tests.
+
+Sun Apr 14 08:56:27 1996  Stephen L Moshier  <moshier@world.std.com>
+
+       * real.h (ereal_from_{int,uint}): Add new arg, MODE.
+       (REAL_VALUE_FROM{,_UNSIGNED}_INT): New arg, MODE.
+       * real.c (ereal_from_{int,uint}): New arg, MODE.
+       * cse.c (simplify_unary_operation): Add new arg to REAL_VALUE_FROM_INT.
+       * fold-const.c (fold_convert): Likewise.
+       * tree.c (real_value_from_int_cst): New arg, TYPE.
+       Pass mode to REAL_VALUE_FROM_INT.
+       (build_real_from_int_cst): Properly deal with truncation.
+
+Sun Apr 14 08:21:29 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * combine.c (try_combine): When substituting in output of I2,
+       ensure dest isn't clobbered in I2.
+
+       * combine.c (combine_instructions): In initial scan of insns,
+       handle a REG_INC note's affect on sign bit copies and nonzero bits.
+       (set_nonzero_bits_and_sign_copies): Treat a zero SET arg as a CLOBBER.
+
+Sun Apr 14 07:52:28 1996  Manor Askenazi  <manor@santafe.edu>
+
+       * objc/encoding.c (objc_skip_typespec): Don't abort for _C_UNDEF.
+
+Sat Apr 13 20:35:36 1996  Richard Henderson  (richard@atheist.tamu.edu)
+
+       * configure (m68k-apple-aux*): Rework to take advantange
+       of list of tm.h files and support all four gas/gld options.
+       * m68k/auxas.h, m68k/auxgas.h, m68k/auxgld.h, m68k/auxld.h: New files.
+       * m68k/auxstd.h, m68k/auxgnu.h: Deleted.
+
+Sat Apr 13 20:18:11 1996  Stephen L Moshier  <moshier@world.std.com>
+
+       * alpha.c (check_float_value): New function.
+       * alpha.h (CHECK_FLOAT_VALUE): Define.
+       (ASM_OUTPUT_FLOAT): Print the value in hex.
+
+Sat Apr 13 15:08:45 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * configure: New target arm{,el}-*-coff*.
+       (cpu_default): Sort alphabetically.
+       * arm/coff.h: New file.
+       * arm/t-bare: New file.
+       * arm/arm.c (use_return_insn): Don't use return for naked functions.
+       (arm_valid_machine_decl_attribute): New function.
+       (arm_naked_function_p): New function.
+       (output_func_prologue): Naked functions don't have prologues.
+       (arm_expand_prologue): Likewise.
+       (output_func_epilogue): Likewise with epilogues.
+
+Sat Apr 13 11:31:32 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.c (adds_subs_operand): Fix thinko in last change.
+
+       * h8300.md (subhi3): Turn into a define_expand.
+       (subhi3 using adds_subs): New pattern.
+       (H8300 subhi): Derived from old subhi pattern.  Simplified.
+       (H8300H subhi): Likewise.
+       (subsi using adds_subs): New pattern.  Only used on H8300H.
+       (subsi_h8300): Allow "a" registers as destination.
+       (subsi_h8300h): Allow "a" registers as destination.  Simplify.
+
+       * h8300.md (bcs_qiqi, bcs_hihi, bs_hiqi): Fix thinkos
+       in last change.
+
+Sat Apr 13 08:59:48 1996  Fila Kolodny <fila@ibi.com>
+
+       * i370/mvs.h (ASM_DECLARE_FUNCTION_NAME): Don't write anything to
+       asm file, because everything is handled in FUNCTION_PROLOGUE.
+
+Sat Apr 13 07:55:38 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.c (alpha_emit_set_const_1): Renamed from
+       alpha_emit_set_const and static.
+       Remove change of Nov 26; again use normal mechanism for SImode.
+       (alpha_emit_set_const): New function.
+
+Fri Apr 12 18:19:39 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.c (adds_subs_operand, output_adds_subs): New functions.
+       * h8300.md (addhi3): Turn into a define_expand.
+       (addhi3 using adds_subs): New pattern.
+       (H8300 addhi): Derived from old addhi pattern.  Simplified.
+       (H8300H addhi): Likewise.
+       (addsi using adds_subs): New pattern.  Only used on H8300H.
+       (addsi_h8300): Allow "a" registers as destination.
+       (addsi_h8300h):  Simplify.  Allow "a" registers as destination.
+
+       * h8300.md (bcs): New attribute type.
+       (default_length): Compute correct length for bcs insns.
+       (bcs_qiqi, bcs_hihi, bs_hiqi): Use new type and update
+       to account for correct length computation.
+
+       * h8300/h8300.md (movhi_internal): Demand at least one operand to
+       be a register.
+       (movsi_h8300): Optimize loading certain constants.
+       (movsi_h8300h): Likewise.
+
+       * h8300.h (NO_FUNCTION_CSE): Comment out.
+       (FUNCTION_ARG_REGNO_P): Properly define for TARGET_QUICKCALL.
+       (RETURN_IN_MEMORY): Don't return small structs in regs.
+
+       * h8300.c (const_costs): -4 and 4 are cheap on the h8300h.
+       (notice_update_cc): Remove references to "value2" field.
+
+       * h8300.c (dosize): Remove unused "fped" argument.  All callers
+       changed.  Handle add/sub of 5-8 bytes efficiently on the h8300h.
+
+       * h8300.c (print_operand): Handle new 'R' case for accessing
+       the 8-bit area.  Make code for 'Y' fall into code for 'R' when
+       operand is not a register.  Update some comments.
+       (h8300_tiny_data_p): New function.
+       (h8300_valid_machine_decl_attribute): Handle "tiny_data" attribute.
+       * h8300.h (OK_FOR_U): Handle memory references into the
+       8-bit area.
+       (ENCODE_SECTION_INFO): Mark SYMBOL_REFs which refer to 8-bit area.
+       * h8300.md (many patterns): Use 'R' rather than 'X' for
+       operands that may be memory accesses into the 8-bit area.
+       (btst pattern): New pattern to set the cc0 (zbit) based on
+       data in the 8-bit area.
+
+       * h8300.md (one_cmplsi2): Fix length computation for h8300h.
+
+Fri Apr 12 14:34:39 1996  Doug Evans  <dje@cygnus.com>
+
+       * arm.md (*ldmsi,*stmsi): Use (mem (match_operand ...))
+       to avoid using indirect_operand (reload problems).
+       * arm/semi.h (CPP_PREDEFINES): Define __semi__ instead of semi.
+       * arm/aout.h (ASM_GENERATE_INTERNAL_LABEL): Use LOCAL_LABEL_PREFIX.
+       (ASM_OUTPUT_ADDR_{VEC,DIFF_ELT}): Likewise.
+
+Fri Apr 12 09:43:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * dbxout.c (dbxout_typedefs): Don't emit incomplete types yet.
+       (dbxout_symbol): Use DECL_ARTIFICIAL to recognize C++ implicit
+       typedefs.
+
+Thu Apr 11 21:56:26 1996  Doug Evans  <dje@cygnus.com>
+
+       * i386/t-winnt (winnt.o): Rewrite based on .c.o rule.
+       (oldnames.o,spawnv.o): Add rules for.
+
+Thu Apr 11 07:25:06 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * calls.c (expand_call): In inlining case, if BEFORE_CALLS is
+       zero, start looking at first insn.
+
+       * expr.c (preexpand_calls, case CALL_EXPR): Rework to properly
+       avoid expanding functions returning variable size objects.
+
+       * integrate.c (expand_inline_function): When comparing types
+       of formal and actual, use TYPE_MAIN_VARIANT.
+
+Thu Apr 11 00:48:29 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300/lib1funcs.asm (modnorm): New function(s).  Like divnorm,
+       but gets the sign bit right for modulo operations.
+       (__modhi3, modsi3): Use modnorm.
+
+       * h8300/h8300.c (dosize): On the h8300h, do 4 byte adjustments
+       using adds and subs.
+       * h8300/h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits.
+       Reverses change from Apr 2, 1996.
+
+Wed Apr 10 18:39:52 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * sparc.h (ASM_OUTPUT_INTERNAL_LABELREF): Delete.
+       (FUNCTION_PROFILER): Use ASM_GENERATE_INTERNAL_LABEL instead.
+
+       * sparc.c (sparc_override_options): 90c701 renamed to tsc701.
+       (eligible_for_epilogue_delay_slot): Don't allow anything if
+       -mbroken-saverestore.
+       (output_function_prologue): Only use trivial save's if
+       -mbroken-saverestore.
+       * sparc.h (CPP_SPEC): Handle -mcpu={sparclet,tsc701}.
+       (ASM_SPEC): Likewise.
+       ({MASK,TARGET}_BROKEN_SAVERESTORE): Define.
+       (enum processor_type): 90C701 renamed to TSC701.
+       * sparc.md (attr cpu): 90c701 renamed to tsc701.
+       * sparc/splet.h (SUBTARGET_SWITCHES): Recognize -mbroken-saverestore.
+
+Wed Apr 10 17:56:02 1996  Stan Cox  <coxs@dg-rtp.dg.com>
+
+       * m88k/dgux.h (EXTRA_SPECS): Define.
+       (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
+       * m88k/dguxbcs.h (ASM_SPEC,CPP_SPEC,STARTFILE_SPEC): Use EXTRA_SPECS.
+       * m88k/m88k.c (output_ascii) Output literal HT.
+
+Wed Apr 10 17:28:37 1996  James Carlson  (carlson@xylogics.com)
+
+       * configure: Work around AIX bug when defining SUBDIRS.
+
+Wed Apr 10 17:22:42 1996  Paul Eggert  <eggert@twinsun.com>
+
+       * cexp.y (parse_number): Don't reject long long constants unless
+       pedantic.
+
+Wed Apr 10 17:19:56 1996  Stephen L. Moshier  (moshier@world.std.com)
+
+       * real.c (e64toe): Properly distinguish between NaN and infinity
+       bit patterns for real-words-big-endian targets.
+
+Wed Apr 10 17:17:26 1996  Richard Earnshaw  (rearnsha@armltd.co.uk)
+
+       * real.c (endian): Add two explicit casts.
+       (e64toe): Support ARM extended precision fp format.
+       Check negative infinities properly for NaNs.
+       (toe64): Support ARM extended precision fp format.
+
+Tue Apr  9 12:53:31 1996  Doug Evans  <dje@canuck.cygnus.com>
+
+       * i386/gas.h (ASM_OUTPUT_ALIGN): Define and use .balign.
+
+Tue Apr  9 12:48:45 1996  Stephen L Moshier  (moshier@world.std.com)
+
+       * sparc.c (fp_zero_operand): Exclude -0.0.
+
+Tue Apr  9 07:11:24 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * alpha.c: Fix typo in last change.
+
+       * tree.c (substitute_in_expr): Don't return new expression if
+       nothing changed.
+       (substitute_in_type): Deleted, not used.
+       * tree.h (substitute_in_type): Delete declaration.
+
+Mon Apr  8 16:30:18 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * flow.c (find_auto_inc): Also make sure there aren't
+       any sets of the incremented register between the memory
+       reference and increment insn.
+
+Mon Apr  8 15:41:14 1996  John Polstra  (jdp@polstra.com)
+
+       * configure (i[3456]86-*-freebsdelf*): New target.
+       * i386/freebsd-elf.h: New file.
+       * i386/x-freebsd (USER_H): New define; to null.
+
+Mon Apr  8 14:44:41 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * c-decl.c (finish_function): Always warn if main doesn't return int.
+
+Mon Apr  8 13:01:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * rs6000.c (got_operand): New function, returns true if the
+       operand can go in V.4's GOT.
+       (rs6000_pic_register): New variable.
+       (output_epilog): Reset rs6000_pic_register.
+
+       * rs6000.h (rs6000_pic_register,got_operand,flag_pic): Add
+       declarations.
+       (PREDICATE_CODES): Add got_operand.
+
+       * rs6000.md (movsi): Add support for V.4's -fpic and -FPIC.
+       (init_v4_pic): Initialize the V4 pic register if needed.
+       (call patterns): If -fpic/-fPIC, call function with @plt suffix.
+
+       * t-eabigas (MULTILIB_DIRNAMES): Remove errant pic directory.
+
+       * rs6000.c (output_prolog): Correctly store & restore the
+       arguments to main in their correct save location, when calling the
+       start function.
+
+Mon Apr  8 13:01:37 1996  David Reese  <Dave.Reese@East.Sun.COM>
+
+       * rs6000.c (print_operand): Use reg_names to print registers.
+
+Fri Apr  5 00:40:19 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.c (h8300_valid_machine_decl_attribute): Use underscores,
+       not dashes in attributes.
+       (h8300_funcvec_function_p): Corresponding changes.
+       (h8300_interrupt_function_p): Likewise.
+
+       * pa.h (INIT_CUMULATIVE_INCOMING_ARGS): Initialize "indirect"
+       field to zero.
+
+Thu Apr  4 12:52:11 1996  Jim Wilson  <wilson@chestnut.cygnus.com>
+
+       * loop.c (combine_givs): Use new macro GIV_SORT_CRITERION.
+       New variable giv_array.  Loop over giv_array instead of following
+       next_iv links.
+       (giv_sort): New function.
+       * sh.h (GIV_SORT_CRITERION):  Define.
+
+       * c-typeck.c (push_init_level): When output alignment for structure
+       field, add check to verify it is the next field to be output.
+
+Thu Apr  4 12:19:26 1996  David Mosberger-Tang  <davidm@AZStarNet.com>
+
+       * alpha.c: Don't include stamp.h for Linux.
+
+Thu Apr  4 12:17:08 1996  Richardg Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * objc/Makefile: Rename thread* to thr*.
+       * objc/thread.c: Rename thread-* to thr-*.
+       * objc/thr-decosf1.c: Renamed from thread-decosf1.c
+       * objc/thr-irix.c: Renamed from thread-irix.c.
+       * objc/thr-single.c: Renamed from thread-single.c.
+       * objc/thr-solarius.c: Renamed from thread-solaris.c.
+       * objc/thr-win32.c: Renamed from thread-win32.c.
+       * objc/objc-api.h: Include thr.h, not thread.h.
+       * objc/runtime.h, objc/sarray.h: Likewise.
+
+       * i386.md (ashldi3_const_int): Don't recognize if won't match
+       constraint of operand 2.
+
+Thu Apr  4 11:40:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
+
+       * config/fp-bit.c (EXTENDED_FLOAT_STUBS): If EXTENDED_FLOAT_STUBS
+       is defined, define all of the XF/TF functions that might be
+       generated that we don't have code for yet.
+
+       * i960/t-(vxworks960,960bare): (LIB2FUNCS_EXTRA): Make and
+       compile xp-bits.c that defines EXTENDED_FLOAT_STUBS.
+
+       From: steve chamberlain  <sac@slash.cygnus.com>
+       * i386/x-cygwin32 (LANGUAGES): Delete.
+       * i386/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
+       * rs6000/xm-cygwin32.h (EXECUTABLE_SUFFIX): Set to .exe.
+
+Wed Apr  3 14:10:16 1996  Jim Wilson  <wilson@chestnut.cygnus.com>
+
+       * expr.c (emit_push_insn): Clobber register only if it is non-zero.
+
+Wed Apr  3 11:31:55 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.h (h8300_funcvec_function_p): Declaration moved here.
+       * h8300.c (h8300_funcvec_function_p): Declaration removed from here.
+       * h8300.md (tstqi): Tweak to work like other tstXX patterns.
+       (cmphi): Turn into a define_expand.  Add two anonymous
+       matterns to match the output of the cmphi expander.
+       (cmpsi): Accept constants as the second input operand.
+
+Tue Apr  2 13:52:30 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.md (movqi_internal): Remove useless alternative(s).  Fix
+       lengths and simplify by reordering remaining alternatives.
+       (movstrictqi, movhi_internal, movstricthi): Likewise.
+       (movsi_h8300h, movsf_h8300h): Likewise.
+
+       * h8300/h8300.c (extra_pop): Remove unused variable.
+       (current_function_anonymous_args): Likewise.
+       (function_prologue): Remove incorrect varargs/stdarg
+       related code.
+       (function_epilogue): Likewise.
+       (function_arg): Never pass unnamed arguments in registers.
+       * h8300.h (LONG_LONG_TYPE_SIZE): Use 64bits when ints are 32bits.
+       (SETUP_INCOMING_VARARGS): Remove definition.
+
+Mon Apr  1 16:59:48 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * fixincludes: Fix signal prototype on SunOS to avoid pedantic C++
+       error.
+
+Mon Apr  1 16:16:34 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+
+       * expr.c (get_inner_reference): When finding mode to access bitfield
+       that ends up properly aligned, use mode class of its type unless
+       type's mode was BLKmode.
+
+Mon Apr  1 13:45:30 1996  Jeffrey A. Law  <law@cygnus.com>
+
+       * h8300.c (interrupt_handler): Renamed from pragma_interrupt.
+       All references changed.
+       (function_prologue): Set interrupt_handler if the current
+       function has the "interrrupt-handler" attribute.
+       (small_call_insn_operand): New function.
+       (h8300_interrrupt_function_p): New function.
+       (h8300_funcvec_function_p): New function.
+       (h8300_valid_machine_decl_attribute): New function.
+       * h8300.h (VALID_MACHINE_DECL_ATTRIBUTE): Define.
+       * h8300.md (call insns): Handle calls through the
+       function vector.  Indirect calls and calls through
+       the function vector have a length of two bytes.
+
+See ChangeLog.10 for earlier changes.
diff --git a/gcc/INSTALL b/gcc/INSTALL
deleted file mode 100644 (file)
index d4ac7c5..0000000
+++ /dev/null
@@ -1,1906 +0,0 @@
-This file documents the installation of the GNU compiler.  Copyright
-(C) 1988, 1989, 1992, 1994, 1995 Free Software Foundation, Inc.  You
-may copy, distribute, and modify it freely as long as you preserve this
-copyright notice and permission notice.
-
-Installing GNU CC
-*****************
-
-   Here is the procedure for installing GNU CC on a Unix system.  See
-*Note VMS Install::, for VMS systems.  In this section we assume you
-compile in the same directory that contains the source files; see *Note
-Other Dir::, to find out how to compile in a separate directory on Unix
-systems.
-
-   You cannot install GNU C by itself on MSDOS; it will not compile
-under any MSDOS compiler except itself.  You need to get the complete
-compilation package DJGPP, which includes binaries as well as sources,
-and includes all the necessary compilation tools and libraries.
-
-  1. If you have built GNU CC previously in the same directory for a
-     different target machine, do `make distclean' to delete all files
-     that might be invalid.  One of the files this deletes is
-     `Makefile'; if `make distclean' complains that `Makefile' does not
-     exist, it probably means that the directory is already suitably
-     clean.
-
-  2. On a System V release 4 system, make sure `/usr/bin' precedes
-     `/usr/ucb' in `PATH'.  The `cc' command in `/usr/ucb' uses
-     libraries which have bugs.
-
-  3. Specify the host, build and target machine configurations.  You do
-     this by running the file `configure'.
-
-     The "build" machine is the system which you are using, the "host"
-     machine is the system where you want to run the resulting compiler
-     (normally the build machine), and the "target" machine is the
-     system for which you want the compiler to generate code.
-
-     If you are building a compiler to produce code for the machine it
-     runs on (a native compiler), you normally do not need to specify
-     any operands to `configure'; it will try to guess the type of
-     machine you are on and use that as the build, host and target
-     machines.  So you don't need to specify a configuration when
-     building a native compiler unless `configure' cannot figure out
-     what your configuration is or guesses wrong.
-
-     In those cases, specify the build machine's "configuration name"
-     with the `--build' option; the host and target will default to be
-     the same as the build machine.  (If you are building a
-     cross-compiler, see *Note Cross-Compiler::.)
-
-     Here is an example:
-
-          ./configure --build=sparc-sun-sunos4.1
-
-     A configuration name may be canonical or it may be more or less
-     abbreviated.
-
-     A canonical configuration name has three parts, separated by
-     dashes.  It looks like this: `CPU-COMPANY-SYSTEM'.  (The three
-     parts may themselves contain dashes; `configure' can figure out
-     which dashes serve which purpose.)  For example,
-     `m68k-sun-sunos4.1' specifies a Sun 3.
-
-     You can also replace parts of the configuration by nicknames or
-     aliases.  For example, `sun3' stands for `m68k-sun', so
-     `sun3-sunos4.1' is another way to specify a Sun 3.  You can also
-     use simply `sun3-sunos', since the version of SunOS is assumed by
-     default to be version 4.  `sun3-bsd' also works, since `configure'
-     knows that the only BSD variant on a Sun 3 is SunOS.
-
-     You can specify a version number after any of the system types,
-     and some of the CPU types.  In most cases, the version is
-     irrelevant, and will be ignored.  So you might as well specify the
-     version if you know it.
-
-     See *Note Configurations::, for a list of supported configuration
-     names and notes on many of the configurations.  You should check
-     the notes in that section before proceeding any further with the
-     installation of GNU CC.
-
-     There are four additional options you can specify independently to
-     describe variant hardware and software configurations.  These are
-     `--with-gnu-as', `--with-gnu-ld', `--with-stabs' and `--nfp'.
-
-    `--with-gnu-as'
-          If you will use GNU CC with the GNU assembler (GAS), you
-          should declare this by using the `--with-gnu-as' option when
-          you run `configure'.
-
-          Using this option does not install GAS.  It only modifies the
-          output of GNU CC to work with GAS.  Building and installing
-          GAS is up to you.
-
-          Conversely, if you *do not* wish to use GAS and do not specify
-          `--with-gnu-as' when building GNU CC, it is up to you to make
-          sure that GAS is not installed.  GNU CC searches for a
-          program named `as' in various directories; if the program it
-          finds is GAS, then it runs GAS.  If you are not sure where
-          GNU CC finds the assembler it is using, try specifying `-v'
-          when you run it.
-
-          The systems where it makes a difference whether you use GAS
-          are
-          `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv',
-          `i386-ANY-isc',
-          `i860-ANY-bsd', `m68k-bull-sysv', `m68k-hp-hpux',
-          `m68k-sony-bsd',
-          `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv',
-          `ANY-lynx-lynxos', and `mips-ANY').  On any other system,
-          `--with-gnu-as' has no effect.
-
-          On the systems listed above (except for the HP-PA, for ISC on
-          the 386, and for `mips-sgi-irix5.*'), if you use GAS, you
-          should also use the GNU linker (and specify `--with-gnu-ld').
-
-    `--with-gnu-ld'
-          Specify the option `--with-gnu-ld' if you plan to use the GNU
-          linker with GNU CC.
-
-          This option does not cause the GNU linker to be installed; it
-          just modifies the behavior of GNU CC to work with the GNU
-          linker.  Specifically, it inhibits the installation of
-          `collect2', a program which otherwise serves as a front-end
-          for the system's linker on most configurations.
-
-    `--with-stabs'
-          On MIPS based systems and on Alphas, you must specify whether
-          you want GNU CC to create the normal ECOFF debugging format,
-          or to use BSD-style stabs passed through the ECOFF symbol
-          table.  The normal ECOFF debug format cannot fully handle
-          languages other than C.  BSD stabs format can handle other
-          languages, but it only works with the GNU debugger GDB.
-
-          Normally, GNU CC uses the ECOFF debugging format by default;
-          if you prefer BSD stabs, specify `--with-stabs' when you
-          configure GNU CC.
-
-          No matter which default you choose when you configure GNU CC,
-          the user can use the `-gcoff' and `-gstabs+' options to
-          specify explicitly the debug format for a particular
-          compilation.
-
-          `--with-stabs' is meaningful on the ISC system on the 386,
-          also, if `--with-gas' is used.  It selects use of stabs
-          debugging information embedded in COFF output.  This kind of
-          debugging information supports C++ well; ordinary COFF
-          debugging information does not.
-
-          `--with-stabs' is also meaningful on 386 systems running
-          SVR4.  It selects use of stabs debugging information embedded
-          in ELF output.  The C++ compiler currently (2.6.0) does not
-          support the DWARF debugging information normally used on 386
-          SVR4 platforms; stabs provide a workable alternative.  This
-          requires gas and gdb, as the normal SVR4 tools can not
-          generate or interpret stabs.
-
-    `--nfp'
-          On certain systems, you must specify whether the machine has
-          a floating point unit.  These systems include
-          `m68k-sun-sunosN' and `m68k-isi-bsd'.  On any other system,
-          `--nfp' currently has no effect, though perhaps there are
-          other systems where it could usefully make a difference.
-
-     The `configure' script searches subdirectories of the source
-     directory for other compilers that are to be integrated into GNU
-     CC.  The GNU compiler for C++, called G++ is in a subdirectory
-     named `cp'.  `configure' inserts rules into `Makefile' to build
-     all of those compilers.
-
-     Here we spell out what files will be set up by `configure'.
-     Normally you need not be concerned with these files.
-
-        * A file named `config.h' is created that contains a `#include'
-          of the top-level config file for the machine you will run the
-          compiler on (*note The Configuration File:
-          (gcc.info)Config.).  This file is responsible for defining
-          information about the host machine.  It includes `tm.h'.
-
-          The top-level config file is located in the subdirectory
-          `config'.  Its name is always `xm-SOMETHING.h'; usually
-          `xm-MACHINE.h', but there are some exceptions.
-
-          If your system does not support symbolic links, you might
-          want to set up `config.h' to contain a `#include' command
-          which refers to the appropriate file.
-
-        * A file named `tconfig.h' is created which includes the
-          top-level config file for your target machine.  This is used
-          for compiling certain programs to run on that machine.
-
-        * A file named `tm.h' is created which includes the
-          machine-description macro file for your target machine.  It
-          should be in the subdirectory `config' and its name is often
-          `MACHINE.h'.
-
-        * The command file `configure' also constructs the file
-          `Makefile' by adding some text to the template file
-          `Makefile.in'.  The additional text comes from files in the
-          `config' directory, named `t-TARGET' and `x-HOST'.  If these
-          files do not exist, it means nothing needs to be added for a
-          given target or host.
-
-  4. The standard directory for installing GNU CC is `/usr/local/lib'.
-     If you want to install its files somewhere else, specify
-     `--prefix=DIR' when you run `configure'.  Here DIR is a directory
-     name to use instead of `/usr/local' for all purposes with one
-     exception: the directory `/usr/local/include' is searched for
-     header files no matter where you install the compiler.  To override
-     this name, use the `--local-prefix' option below.
-
-  5. Specify `--local-prefix=DIR' if you want the compiler to search
-     directory `DIR/include' for locally installed header files
-     *instead* of `/usr/local/include'.
-
-     You should specify `--local-prefix' *only* if your site has a
-     different convention (not `/usr/local') for where to put
-     site-specific files.
-
-     *Do not* specify `/usr' as the `--local-prefix'!  The directory
-     you use for `--local-prefix' *must not* contain any of the
-     system's standard header files.  If it did contain them, certain
-     programs would be miscompiled (including GNU Emacs, on certain
-     targets), because this would override and nullify the header file
-     corrections made by the `fixincludes' script.
-
-  6. Make sure the Bison parser generator is installed.  (This is
-     unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
-     more recent than `c-parse.y' and `cexp.y' and you do not plan to
-     change the `.y' files.)
-
-     Bison versions older than Sept 8, 1988 will produce incorrect
-     output for `c-parse.c'.
-
-  7. If you have chosen a configuration for GNU CC which requires other
-     GNU tools (such as GAS or the GNU linker) instead of the standard
-     system tools, install the required tools in the build directory
-     under the names `as', `ld' or whatever is appropriate.  This will
-     enable the compiler to find the proper tools for compilation of
-     the program `enquire'.
-
-     Alternatively, you can do subsequent compilation using a value of
-     the `PATH' environment variable such that the necessary GNU tools
-     come before the standard system tools.
-
-  8. Build the compiler.  Just type `make LANGUAGES=c' in the compiler
-     directory.
-
-     `LANGUAGES=c' specifies that only the C compiler should be
-     compiled.  The makefile normally builds compilers for all the
-     supported languages; currently, C, C++ and Objective C.  However,
-     C is the only language that is sure to work when you build with
-     other non-GNU C compilers.  In addition, building anything but C
-     at this stage is a waste of time.
-
-     In general, you can specify the languages to build by typing the
-     argument `LANGUAGES="LIST"', where LIST is one or more words from
-     the list `c', `c++', and `objective-c'.  If you have any
-     additional GNU compilers as subdirectories of the GNU CC source
-     directory, you may also specify their names in this list.
-
-     Ignore any warnings you may see about "statement not reached" in
-     `insn-emit.c'; they are normal.  Also, warnings about "unknown
-     escape sequence" are normal in `genopinit.c' and perhaps some
-     other files.  Likewise, you should ignore warnings about "constant
-     is so large that it is unsigned" in `insn-emit.c' and
-     `insn-recog.c' and a warning about a comparison always being zero
-     in `enquire.o'.  Any other compilation errors may represent bugs in
-     the port to your machine or operating system, and should be
-     investigated and reported.
-
-     Some commercial compilers fail to compile GNU CC because they have
-     bugs or limitations.  For example, the Microsoft compiler is said
-     to run out of macro space.  Some Ultrix compilers run out of
-     expression space; then you need to break up the statement where
-     the problem happens.
-
-  9. If you are building a cross-compiler, stop here.  *Note
-     Cross-Compiler::.
-
- 10. Move the first-stage object files and executables into a
-     subdirectory with this command:
-
-          make stage1
-
-     The files are moved into a subdirectory named `stage1'.  Once
-     installation is complete, you may wish to delete these files with
-     `rm -r stage1'.
-
- 11. If you have chosen a configuration for GNU CC which requires other
-     GNU tools (such as GAS or the GNU linker) instead of the standard
-     system tools, install the required tools in the `stage1'
-     subdirectory under the names `as', `ld' or whatever is
-     appropriate.  This will enable the stage 1 compiler to find the
-     proper tools in the following stage.
-
-     Alternatively, you can do subsequent compilation using a value of
-     the `PATH' environment variable such that the necessary GNU tools
-     come before the standard system tools.
-
- 12. Recompile the compiler with itself, with this command:
-
-          make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2"
-
-     This is called making the stage 2 compiler.
-
-     The command shown above builds compilers for all the supported
-     languages.  If you don't want them all, you can specify the
-     languages to build by typing the argument `LANGUAGES="LIST"'.  LIST
-     should contain one or more words from the list `c', `c++',
-     `objective-c', and `proto'.  Separate the words with spaces.
-     `proto' stands for the programs `protoize' and `unprotoize'; they
-     are not a separate language, but you use `LANGUAGES' to enable or
-     disable their installation.
-
-     If you are going to build the stage 3 compiler, then you might
-     want to build only the C language in stage 2.
-
-     Once you have built the stage 2 compiler, if you are short of disk
-     space, you can delete the subdirectory `stage1'.
-
-     On a 68000 or 68020 system lacking floating point hardware, unless
-     you have selected a `tm.h' file that expects by default that there
-     is no such hardware, do this instead:
-
-          make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float"
-
- 13. If you wish to test the compiler by compiling it with itself one
-     more time, install any other necessary GNU tools (such as GAS or
-     the GNU linker) in the `stage2' subdirectory as you did in the
-     `stage1' subdirectory, then do this:
-
-          make stage2
-          make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2"
-
-     This is called making the stage 3 compiler.  Aside from the `-B'
-     option, the compiler options should be the same as when you made
-     the stage 2 compiler.  But the `LANGUAGES' option need not be the
-     same.  The command shown above builds compilers for all the
-     supported languages; if you don't want them all, you can specify
-     the languages to build by typing the argument `LANGUAGES="LIST"',
-     as described above.
-
-     If you do not have to install any additional GNU tools, you may
-     use the command
-
-          make bootstrap LANGUAGES=LANGUAGE-LIST BOOT_CFLAGS=OPTION-LIST
-
-     instead of making `stage1', `stage2', and performing the two
-     compiler builds.
-
- 14. Then compare the latest object files with the stage 2 object
-     files--they ought to be identical, aside from time stamps (if any).
-
-     On some systems, meaningful comparison of object files is
-     impossible; they always appear "different."  This is currently
-     true on Solaris and some systems that use ELF object file format.
-     On some versions of Irix on SGI machines and DEC Unix (OSF/1) on
-     Alpha systems, you will not be able to compare the files without
-     specifying `-save-temps'; see the description of individual
-     systems above to see if you get comparison failures.  You may have
-     similar problems on other systems.
-
-     Use this command to compare the files:
-
-          make compare
-
-     This will mention any object files that differ between stage 2 and
-     stage 3.  Any difference, no matter how innocuous, indicates that
-     the stage 2 compiler has compiled GNU CC incorrectly, and is
-     therefore a potentially serious bug which you should investigate
-     and report.
-
-     If your system does not put time stamps in the object files, then
-     this is a faster way to compare them (using the Bourne shell):
-
-          for file in *.o; do
-          cmp $file stage2/$file
-          done
-
-     If you have built the compiler with the `-mno-mips-tfile' option on
-     MIPS machines, you will not be able to compare the files.
-
- 15. Install the compiler driver, the compiler's passes and run-time
-     support with `make install'.  Use the same value for `CC',
-     `CFLAGS' and `LANGUAGES' that you used when compiling the files
-     that are being installed.  One reason this is necessary is that
-     some versions of Make have bugs and recompile files gratuitously
-     when you do this step.  If you use the same variable values, those
-     files will be recompiled properly.
-
-     For example, if you have built the stage 2 compiler, you can use
-     the following command:
-
-          make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST"
-
-     This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
-     `cpp' and `libgcc.a' in the directory
-     `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the
-     compiler driver program looks for them.  Here TARGET is the target
-     machine type specified when you ran `configure', and VERSION is
-     the version number of GNU CC.  This naming scheme permits various
-     versions and/or cross-compilers to coexist.
-
-     This also copies the driver program `xgcc' into
-     `/usr/local/bin/gcc', so that it appears in typical execution
-     search paths.
-
-     On some systems, this command causes recompilation of some files.
-     This is usually due to bugs in `make'.  You should either ignore
-     this problem, or use GNU Make.
-
-     *Warning: there is a bug in `alloca' in the Sun library.  To avoid
-     this bug, be sure to install the executables of GNU CC that were
-     compiled by GNU CC.  (That is, the executables from stage 2 or 3,
-     not stage 1.)  They use `alloca' as a built-in function and never
-     the one in the library.*
-
-     (It is usually better to install GNU CC executables from stage 2
-     or 3, since they usually run faster than the ones compiled with
-     some other compiler.)
-
- 16. If you're going to use C++, it's likely that you need to also
-     install the libg++ distribution.  It should be available from the
-     same place where you got the GNU C distribution.  Just as GNU C
-     does not distribute a C runtime library, it also does not include
-     a C++ run-time library.  All I/O functionality, special class
-     libraries, etc., are available in the libg++ distribution.
-
-Configurations Supported by GNU CC
-==================================
-
-   Here are the possible CPU types:
-
-     1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300,
-     hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m68000, m68k,
-     m88k, mips, mipsel, mips64, mips64el, ns32k, powerpc, powerpcle,
-     pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, we32k.
-
-   Here are the recognized company names.  As you can see, customary
-abbreviations are used rather than the longer official names.
-
-     acorn, alliant, altos, apollo, att, bull, cbm, convergent, convex,
-     crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm,
-     intergraph, isi, mips, motorola, ncr, next, ns, omron, plexus,
-     sequent, sgi, sony, sun, tti, unicom, wrs.
-
-   The company name is meaningful only to disambiguate when the rest of
-the information supplied is insufficient.  You can omit it, writing
-just `CPU-SYSTEM', if it is not needed.  For example, `vax-ultrix4.2'
-is equivalent to `vax-dec-ultrix4.2'.
-
-   Here is a list of system types:
-
-     386bsd, aix, acis, amigados, aos, aout, bosx, bsd, clix, coff,
-     ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms,
-     genix, gnu, gnu/linux, hiux, hpux, iris, irix, isc, luna, lynxos,
-     mach, minix, msdos, mvs, netbsd, newsos, nindy, ns, osf, osfrose,
-     ptx, riscix, riscos, rtu, sco, sim, solaris, sunos, sym, sysv,
-     udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks, winnt,
-     xenix.
-
-You can omit the system type; then `configure' guesses the operating
-system from the CPU and company.
-
-   You can add a version number to the system type; this may or may not
-make a difference.  For example, you can write `bsd4.3' or `bsd4.4' to
-distinguish versions of BSD.  In practice, the version number is most
-needed for `sysv3' and `sysv4', which are often treated differently.
-
-   If you specify an impossible combination such as `i860-dg-vms', then
-you may get an error message from `configure', or it may ignore part of
-the information and do the best it can with the rest.  `configure'
-always prints the canonical name for the alternative that it used.  GNU
-CC does not support all possible alternatives.
-
-   Often a particular model of machine has a name.  Many machine names
-are recognized as aliases for CPU/company combinations.  Thus, the
-machine name `sun3', mentioned above, is an alias for `m68k-sun'.
-Sometimes we accept a company name as a machine name, when the name is
-popularly used for a particular machine.  Here is a table of the known
-machine names:
-
-     3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300,
-     balance, convex-cN, crds, decstation-3100, decstation, delta,
-     encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN, hp9k7NN,
-     hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin, miniframe,
-     mmax, news-3600, news800, news, next, pbd, pc532, pmax, powerpc,
-     powerpcle, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3,
-     sun4, symmetry, tower-32, tower.
-
-Remember that a machine name specifies both the cpu type and the company
-name.  If you want to install your own homemade configuration files,
-you can use `local' as the company name to access them.  If you use
-configuration `CPU-local', the configuration name without the cpu prefix
-is used to form the configuration file names.
-
-   Thus, if you specify `m68k-local', configuration uses files
-`m68k.md', `local.h', `m68k.c', `xm-local.h', `t-local', and `x-local',
-all in the directory `config/m68k'.
-
-   Here is a list of configurations that have special treatment or
-special things you must know:
-
-`1750a-*-*'
-     MIL-STD-1750A processors.
-
-     Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no
-     longer supports the Tektronix Assembler, but instead produces
-     output for `as1750', an assembler/linker available under the GNU
-     Public License for the 1750A. Contact *kellogg@space.otn.dasa.de*
-     for more details on obtaining `as1750'.  A similarly licensed
-     simulator for the 1750A is available from same address.
-
-     You should ignore a fatal error during the building of libgcc
-     (libgcc is not yet implemented for the 1750A.)
-
-     The `as1750' assembler requires the file `ms1750.inc', which is
-     found in the directory `config/1750a'.
-
-     GNU CC produced the same sections as the Fairchild F9450 C
-     Compiler, namely:
-
-    `Normal'
-          The program code section.
-
-    `Static'
-          The read/write (RAM) data section.
-
-    `Konst'
-          The read-only (ROM) constants section.
-
-    `Init'
-          Initialization section (code to copy KREL to SREL).
-
-     The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16).
-     This means that type `char' is represented with a 16-bit word per
-     character.  The 1750A's "Load/Store Upper/Lower Byte" instructions
-     are not used by GNU CC.
-
-`alpha-*-osf1'
-     Systems using processors that implement the DEC Alpha architecture
-     and are running the DEC Unix (OSF/1) operating system, for example
-     the DEC Alpha AXP systems.  (VMS on the Alpha is not currently
-     supported by GNU CC.)
-
-     GNU CC writes a `.verstamp' directive to the assembler output file
-     unless it is built as a cross-compiler.  It gets the version to
-     use from the system header file `/usr/include/stamp.h'.  If you
-     install a new version of DEC Unix, you should rebuild GCC to pick
-     up the new version stamp.
-
-     Note that since the Alpha is a 64-bit architecture,
-     cross-compilers from 32-bit machines will not generate code as
-     efficient as that generated when the compiler is running on a
-     64-bit machine because many optimizations that depend on being
-     able to represent a word on the target in an integral value on the
-     host cannot be performed.  Building cross-compilers on the Alpha
-     for 32-bit machines has only been tested in a few cases and may
-     not work properly.
-
-     `make compare' may fail on old versions of DEC Unix unless you add
-     `-save-temps' to `CFLAGS'.  On these systems, the name of the
-     assembler input file is stored in the object file, and that makes
-     comparison fail if it differs between the `stage1' and `stage2'
-     compilations.  The option `-save-temps' forces a fixed name to be
-     used for the assembler input file, instead of a randomly chosen
-     name in `/tmp'.  Do not add `-save-temps' unless the comparisons
-     fail without that option.  If you add `-save-temps', you will have
-     to manually delete the `.i' and `.s' files after each series of
-     compilations.
-
-     GNU CC now supports both the native (ECOFF) debugging format used
-     by DBX and GDB and an encapsulated STABS format for use only with
-     GDB.  See the discussion of the `--with-stabs' option of
-     `configure' above for more information on these formats and how to
-     select them.
-
-     There is a bug in DEC's assembler that produces incorrect line
-     numbers for ECOFF format when the `.align' directive is used.  To
-     work around this problem, GNU CC will not emit such alignment
-     directives while writing ECOFF format debugging information even
-     if optimization is being performed.  Unfortunately, this has the
-     very undesirable side-effect that code addresses when `-O' is
-     specified are different depending on whether or not `-g' is also
-     specified.
-
-     To avoid this behavior, specify `-gstabs+' and use GDB instead of
-     DBX.  DEC is now aware of this problem with the assembler and
-     hopes to provide a fix shortly.
-
-`arm'
-     Advanced RISC Machines ARM-family processors.  These are often
-     used in embedded applications.  There are no standard Unix
-     configurations.  This configuration corresponds to the basic
-     instruction sequences and will produce a.out format object modules.
-
-     You may need to make a variant of the file `arm.h' for your
-     particular configuration.
-
-`arm-*-riscix'
-     The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD
-     Unix.  If you are running a version of RISC iX prior to 1.2 then
-     you must specify the version number during configuration.  Note
-     that the assembler shipped with RISC iX does not support stabs
-     debugging information; a new version of the assembler, with stabs
-     support included, is now available from Acorn.
-
-`a29k'
-     AMD Am29k-family processors.  These are normally used in embedded
-     applications.  There are no standard Unix configurations.  This
-     configuration corresponds to AMD's standard calling sequence and
-     binary interface and is compatible with other 29k tools.
-
-     You may need to make a variant of the file `a29k.h' for your
-     particular configuration.
-
-`a29k-*-bsd'
-     AMD Am29050 used in a system running a variant of BSD Unix.
-
-`decstation-*'
-     DECstations can support three different personalities: Ultrix, DEC
-     OSF/1, and OSF/rose.  To configure GCC for these platforms use the
-     following configurations:
-
-    `decstation-ultrix'
-          Ultrix configuration.
-
-    `decstation-osf1'
-          Dec's version of OSF/1.
-
-    `decstation-osfrose'
-          Open Software Foundation reference port of OSF/1 which uses
-          the OSF/rose object file format instead of ECOFF.  Normally,
-          you would not select this configuration.
-
-     The MIPS C compiler needs to be told to increase its table size
-     for switch statements with the `-Wf,-XNg1500' option in order to
-     compile `cp/parse.c'.  If you use the `-O2' optimization option,
-     you also need to use `-Olimit 3000'.  Both of these options are
-     automatically generated in the `Makefile' that the shell script
-     `configure' builds.  If you override the `CC' make variable and
-     use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit
-     3000'.
-
-`elxsi-elxsi-bsd'
-     The Elxsi's C compiler has known limitations that prevent it from
-     compiling GNU C.  Please contact `mrs@cygnus.com' for more details.
-
-`dsp16xx'
-     A port to the AT&T DSP1610 family of processors.
-
-`h8300-*-*'
-     The calling convention and structure layout has changed in release
-     2.6.  All code must be recompiled.  The calling convention now
-     passes the first three arguments in function calls in registers.
-     Structures are no longer a multiple of 2 bytes.
-
-`hppa*-*-*'
-     There are two variants of this CPU, called 1.0 and 1.1, which have
-     different machine descriptions.  You must use the right one for
-     your machine.  All 7NN machines and 8N7 machines use 1.1, while
-     all other 8NN machines use 1.0.
-
-     The easiest way to handle this problem is to use `configure hpNNN'
-     or `configure hpNNN-hpux', where NNN is the model number of the
-     machine.  Then `configure' will figure out if the machine is a 1.0
-     or 1.1.  Use `uname -a' to find out the model number of your
-     machine.
-
-     `-g' does not work on HP-UX, since that system uses a peculiar
-     debugging format which GNU CC does not know about.  However, `-g'
-     will work if you also use GAS and GDB in conjunction with GCC.  We
-     highly recommend using GAS for all HP-PA configurations.
-
-     You should be using GAS-2.3 (or later) along with GDB-4.12 (or
-     later).  These can be retrieved from all the traditional GNU ftp
-     archive sites.
-
-     Build GAS and install the resulting binary as:
-
-          /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
-
-     where CONFIGURATION is the configuration name (perhaps
-     `hpNNN-hpux') and GCCVERSION is the GNU CC version number.  Do
-     this *before* starting the build process, otherwise you will get
-     errors from the HPUX assembler while building `libgcc2.a'.  The
-     command
-
-          make install-dir
-
-     will create the necessary directory hierarchy so you can install
-     GAS before building GCC.
-
-     To enable debugging, configure GNU CC with the `--with-gnu-as'
-     option before building.
-
-     It has been reported that GNU CC produces invalid assembly code for
-     1.1 machines running HP-UX 8.02 when using the HP assembler.
-     Typically the errors look like this:
-          as: bug.s @line#15 [err#1060]
-            Argument 0 or 2 in FARG upper
-                   - lookahead = ARGW1=FR,RTNVAL=GR
-          as: foo.s @line#28 [err#1060]
-            Argument 0 or 2 in FARG upper
-                   - lookahead = ARGW1=FR
-
-     You can check the version of HP-UX you are running by executing
-     the command `uname -r'.   If you are indeed running HP-UX 8.02 on
-     a PA and using the HP assembler then configure GCC with
-     "hpNNN-hpux8.02".
-
-`i370-*-*'
-     This port is very preliminary and has many known bugs.  We hope to
-     have a higher-quality port for this machine soon.
-
-`i386-*-linuxoldld'
-     Use this configuration to generate a.out binaries on Linux if you
-     do not have gas/binutils version 2.5.2 or later installed. This is
-     an obsolete configuration.
-
-`i386-*-linuxaout'
-     Use this configuration to generate a.out binaries on Linux. This
-     configuration is being superseded. You must use gas/binutils
-     version 2.5.2 or later.
-
-`i386-*-linux'
-     Use this configuration to generate ELF binaries on Linux.  You must
-     use gas/binutils version 2.5.2 or later.
-
-`i386-*-sco'
-     Compilation with RCC is recommended.  Also, it may be a good idea
-     to link with GNU malloc instead of the malloc that comes with the
-     system.
-
-`i386-*-sco3.2v4'
-     Use this configuration for SCO release 3.2 version 4.
-
-`i386-*-isc'
-     It may be a good idea to link with GNU malloc instead of the
-     malloc that comes with the system.
-
-     In ISC version 4.1, `sed' core dumps when building `deduced.h'.
-     Use the version of `sed' from version 4.0.
-
-`i386-*-esix'
-     It may be good idea to link with GNU malloc instead of the malloc
-     that comes with the system.
-
-`i386-ibm-aix'
-     You need to use GAS version 2.1 or later, and and LD from GNU
-     binutils version 2.2 or later.
-
-`i386-sequent-bsd'
-     Go to the Berkeley universe before compiling.  In addition, you
-     probably need to create a file named `string.h' containing just
-     one line: `#include <strings.h>'.
-
-`i386-sequent-ptx1*'
-     Sequent DYNIX/ptx 1.x.
-
-`i386-sequent-ptx2*'
-     Sequent DYNIX/ptx 2.x.
-
-`i386-sun-sunos4'
-     You may find that you need another version of GNU CC to begin
-     bootstrapping with, since the current version when built with the
-     system's own compiler seems to get an infinite loop compiling part
-     of `libgcc2.c'.  GNU CC version 2 compiled with GNU CC (any
-     version) seems not to have this problem.
-
-     See *Note Sun Install::, for information on installing GNU CC on
-     Sun systems.
-
-`i[345]86-*-winnt3.5'
-     This version requires a GAS that has not let been released.  Until
-     it is, you can get a prebuilt binary version via anonymous ftp from
-     `cs.washington.edu:pub/gnat' or `cs.nyu.edu:pub/gnat'. You must
-     also use the Microsoft header files from the Windows NT 3.5 SDK.
-     Find these on the CDROM in the `/mstools/h' directory dated
-     9/4/94.  You must use a fixed version of Microsoft linker made
-     especially for NT 3.5, which is also is available on the NT 3.5
-     SDK CDROM.  If you do not have this linker, can you also use the
-     linker from Visual C/C++ 1.0 or 2.0.
-
-     Installing GNU CC for NT builds a wrapper linker, called `ld.exe',
-     which mimics the behaviour of Unix `ld' in the specification of
-     libraries (`-L' and `-l').  `ld.exe' looks for both Unix and
-     Microsoft named libraries.  For example, if you specify `-lfoo',
-     `ld.exe' will look first for `libfoo.a' and then for `foo.lib'.
-
-     You may install GNU CC for Windows NT in one of two ways,
-     depending on whether or not you have a Unix-like shell and various
-     Unix-like utilities.
-
-       1. If you do not have a Unix-like shell and few Unix-like
-          utilities, you will use a DOS style batch script called
-          `configure.bat'.  Invoke it as `configure winnt' from an
-          MSDOS console window or from the program manager dialog box.
-          `configure.bat' assumes you have already installed and have
-          in your path a Unix-like `sed' program which is used to
-          create a working `Makefile' from `Makefile.in'.
-
-          `Makefile' uses the Microsoft Nmake program maintenance
-          utility and the Visual C/C++ V8.00 compiler to build GNU CC.
-          You need only have the utilities `sed' and `touch' to use
-          this installation method, which only automatically builds the
-          compiler itself.  You must then examine what `fixinc.winnt'
-          does, edit the header files by hand and build `libgcc.a'
-          manually.
-
-       2. The second type of installation assumes you are running a
-          Unix-like shell, have a complete suite of Unix-like utilities
-          in your path, and have a previous version of GNU CC already
-          installed, either through building it via the above
-          installation method or acquiring a pre-built binary.  In this
-          case, use the `configure' script in the normal fashion.
-
-`i860-intel-osf1'
-     This is the Paragon.  If you have version 1.0 of the operating
-     system, you need to take special steps to build GNU CC due to
-     peculiarities of the system.  Newer system versions have no
-     problem.  See the section `Installation Problems' in the GNU CC
-     Manual.
-
-`*-lynx-lynxos'
-     LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as
-     `/bin/gcc'.  You should compile with this instead of `/bin/cc'.
-     You can tell GNU CC to use the GNU assembler and linker, by
-     specifying `--with-gnu-as --with-gnu-ld' when configuring.  These
-     will produce COFF format object files and executables;  otherwise
-     GNU CC will use the installed tools, which produce a.out format
-     executables.
-
-`m68000-hp-bsd'
-     HP 9000 series 200 running BSD.  Note that the C compiler that
-     comes with this system cannot compile GNU CC; contact
-     `law@cs.utah.edu' to get binaries of GNU CC for bootstrapping.
-
-`m68k-altos'
-     Altos 3068.  You must use the GNU assembler, linker and debugger.
-     Also, you must fix a kernel bug.  Details in the file
-     `README.ALTOS'.
-
-`m68k-att-sysv'
-     AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to
-     compile GNU CC with this machine's standard C compiler, due to
-     bugs in that compiler.  You can bootstrap it more easily with
-     previous versions of GNU CC if you have them.
-
-     Installing GNU CC on the 3b1 is difficult if you do not already
-     have GNU CC running, due to bugs in the installed C compiler.
-     However, the following procedure might work.  We are unable to
-     test it.
-
-       1. Comment out the `#include "config.h"' line on line 37 of
-          `cccp.c' and do `make cpp'.  This makes a preliminary version
-          of GNU cpp.
-
-       2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to
-          that file name.
-
-       3. Undo your change in `cccp.c', or reinstall the original
-          version, and do `make cpp' again.
-
-       4. Copy this final version of GNU cpp into `/lib/cpp'.
-
-       5. Replace every occurrence of `obstack_free' in the file
-          `tree.c' with `_obstack_free'.
-
-       6. Run `make' to get the first-stage GNU CC.
-
-       7. Reinstall the original version of `/lib/cpp'.
-
-       8. Now you can compile GNU CC with itself and install it in the
-          normal fashion.
-
-`m68k-bull-sysv'
-     Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU
-     CC works either with native assembler or GNU assembler. You can use
-     GNU assembler with native coff generation by providing
-     `--with-gnu-as' to the configure script or use GNU assembler with
-     dbx-in-coff encapsulation by providing `--with-gnu-as --stabs'.
-     For any problem with native assembler or for availability of the
-     DPX/2 port of GAS, contact `F.Pierresteguy@frcl.bull.fr'.
-
-`m68k-crds-unox'
-     Use `configure unos' for building on Unos.
-
-     The Unos assembler is named `casm' instead of `as'.  For some
-     strange reason linking `/bin/as' to `/bin/casm' changes the
-     behavior, and does not work.  So, when installing GNU CC, you
-     should install the following script as `as' in the subdirectory
-     where the passes of GCC are installed:
-
-          #!/bin/sh
-          casm $*
-
-     The default Unos library is named `libunos.a' instead of `libc.a'.
-     To allow GNU CC to function, either change all references to
-     `-lc' in `gcc.c' to `-lunos' or link `/lib/libc.a' to
-     `/lib/libunos.a'.
-
-     When compiling GNU CC with the standard compiler, to overcome bugs
-     in the support of `alloca', do not use `-O' when making stage 2.
-     Then use the stage 2 compiler with `-O' to make the stage 3
-     compiler.  This compiler will have the same characteristics as the
-     usual stage 2 compiler on other systems.  Use it to make a stage 4
-     compiler and compare that with stage 3 to verify proper
-     compilation.
-
-     (Perhaps simply defining `ALLOCA' in `x-crds' as described in the
-     comments there will make the above paragraph superfluous.  Please
-     inform us of whether this works.)
-
-     Unos uses memory segmentation instead of demand paging, so you
-     will need a lot of memory.  5 Mb is barely enough if no other
-     tasks are running.  If linking `cc1' fails, try putting the object
-     files into a library and linking from that library.
-
-`m68k-hp-hpux'
-     HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a
-     bug in the assembler that prevents compilation of GNU CC.  To fix
-     it, get patch PHCO_4484 from HP.
-
-     In addition, if you wish to use gas `--with-gnu-as' you must use
-     gas version 2.1 or later, and you must use the GNU linker version
-     2.1 or later.  Earlier versions of gas relied upon a program which
-     converted the gas output into the native HP/UX format, but that
-     program has not been kept up to date.  gdb does not understand
-     that native HP/UX format, so you must use gas if you wish to use
-     gdb.
-
-`m68k-sun'
-     Sun 3.  We do not provide a configuration file to use the Sun FPA
-     by default, because programs that establish signal handlers for
-     floating point traps inherently cannot work with the FPA.
-
-     See *Note Sun Install::, for information on installing GNU CC on
-     Sun systems.
-
-`m88k-*-svr3'
-     Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
-     These systems tend to use the Green Hills C, revision 1.8.5, as the
-     standard C compiler.  There are apparently bugs in this compiler
-     that result in object files differences between stage 2 and stage
-     3.  If this happens, make the stage 4 compiler and compare it to
-     the stage 3 compiler.  If the stage 3 and stage 4 object files are
-     identical, this suggests you encountered a problem with the
-     standard C compiler; the stage 3 and 4 compilers may be usable.
-
-     It is best, however, to use an older version of GNU CC for
-     bootstrapping if you have one.
-
-`m88k-*-dgux'
-     Motorola m88k running DG/UX.  To build 88open BCS native or cross
-     compilers on DG/UX, specify the configuration name as
-     `m88k-*-dguxbcs' and build in the 88open BCS software development
-     environment.  To build ELF native or cross compilers on DG/UX,
-     specify `m88k-*-dgux' and build in the DG/UX ELF development
-     environment.  You set the software development environment by
-     issuing `sde-target' command and specifying either `m88kbcs' or
-     `m88kdguxelf' as the operand.
-
-     If you do not specify a configuration name, `configure' guesses the
-     configuration based on the current software development
-     environment.
-
-`m88k-tektronix-sysv3'
-     Tektronix XD88 running UTekV 3.2e.  Do not turn on optimization
-     while building stage1 if you bootstrap with the buggy Green Hills
-     compiler.  Also, The bundled LAI System V NFS is buggy so if you
-     build in an NFS mounted directory, start from a fresh reboot, or
-     avoid NFS all together.  Otherwise you may have trouble getting
-     clean comparisons between stages.
-
-`mips-mips-bsd'
-     MIPS machines running the MIPS operating system in BSD mode.  It's
-     possible that some old versions of the system lack the functions
-     `memcpy', `memcmp', and `memset'.  If your system lacks these, you
-     must remove or undo the definition of `TARGET_MEM_FUNCTIONS' in
-     `mips-bsd.h'.
-
-     The MIPS C compiler needs to be told to increase its table size
-     for switch statements with the `-Wf,-XNg1500' option in order to
-     compile `cp/parse.c'.  If you use the `-O2' optimization option,
-     you also need to use `-Olimit 3000'.  Both of these options are
-     automatically generated in the `Makefile' that the shell script
-     `configure' builds.  If you override the `CC' make variable and
-     use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit
-     3000'.
-
-`mips-mips-riscos*'
-     The MIPS C compiler needs to be told to increase its table size
-     for switch statements with the `-Wf,-XNg1500' option in order to
-     compile `cp/parse.c'.  If you use the `-O2' optimization option,
-     you also need to use `-Olimit 3000'.  Both of these options are
-     automatically generated in the `Makefile' that the shell script
-     `configure' builds.  If you override the `CC' make variable and
-     use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit
-     3000'.
-
-     MIPS computers running RISC-OS can support four different
-     personalities: default, BSD 4.3, System V.3, and System V.4 (older
-     versions of RISC-OS don't support V.4).  To configure GCC for
-     these platforms use the following configurations:
-
-    `mips-mips-riscos`rev''
-          Default configuration for RISC-OS, revision `rev'.
-
-    `mips-mips-riscos`rev'bsd'
-          BSD 4.3 configuration for RISC-OS, revision `rev'.
-
-    `mips-mips-riscos`rev'sysv4'
-          System V.4 configuration for RISC-OS, revision `rev'.
-
-    `mips-mips-riscos`rev'sysv'
-          System V.3 configuration for RISC-OS, revision `rev'.
-
-     The revision `rev' mentioned above is the revision of RISC-OS to
-     use.  You must reconfigure GCC when going from a RISC-OS revision
-     4 to RISC-OS revision 5.  This has the effect of avoiding a linker
-     bug.
-
-`mips-sgi-*'
-     In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib"
-     option must be installed from the CD-ROM supplied from Silicon
-     Graphics.  This is found on the 2nd CD in release 4.0.1.
-
-     In order to compile GCC on an SGI running IRIX 5, the
-     "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM
-     supplied by Silicon Graphics.
-
-     `make compare' may fail on version 5 of IRIX unless you add
-     `-save-temps' to `CFLAGS'.  On these systems, the name of the
-     assembler input file is stored in the object file, and that makes
-     comparison fail if it differs between the `stage1' and `stage2'
-     compilations.  The option `-save-temps' forces a fixed name to be
-     used for the assembler input file, instead of a randomly chosen
-     name in `/tmp'.  Do not add `-save-temps' unless the comparisons
-     fail without that option.  If you do you `-save-temps', you will
-     have to manually delete the `.i' and `.s' files after each series
-     of compilations.
-
-     The MIPS C compiler needs to be told to increase its table size
-     for switch statements with the `-Wf,-XNg1500' option in order to
-     compile `cp/parse.c'.  If you use the `-O2' optimization option,
-     you also need to use `-Olimit 3000'.  Both of these options are
-     automatically generated in the `Makefile' that the shell script
-     `configure' builds.  If you override the `CC' make variable and
-     use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit
-     3000'.
-
-     On Irix version 4.0.5F, and perhaps on some other versions as well,
-     there is an assembler bug that reorders instructions incorrectly.
-     To work around it, specify the target configuration
-     `mips-sgi-irix4loser'.  This configuration inhibits assembler
-     optimization.
-
-     In a compiler configured with target `mips-sgi-irix4', you can turn
-     off assembler optimization by using the `-noasmopt' option.  This
-     compiler option passes the option `-O0' to the assembler, to
-     inhibit reordering.
-
-     The `-noasmopt' option can be useful for testing whether a problem
-     is due to erroneous assembler reordering.  Even if a problem does
-     not go away with `-noasmopt', it may still be due to assembler
-     reordering--perhaps GNU CC itself was miscompiled as a result.
-
-     To enable debugging under Irix 5, you must use GNU as 2.5 or later,
-     and use the `--with-gnu-as' configure option when configuring gcc.
-     GNU as is distributed as part of the binutils package.
-
-`mips-sony-sysv'
-     Sony MIPS NEWS.  This works in NEWSOS 5.0.1, but not in 5.0.2
-     (which uses ELF instead of COFF).  Support for 5.0.2 will probably
-     be provided soon by volunteers.  In particular, the linker does
-     not like the code generated by GCC when shared libraries are
-     linked in.
-
-`ns32k-encore'
-     Encore ns32000 system.  Encore systems are supported only under
-     BSD.
-
-`ns32k-*-genix'
-     National Semiconductor ns32000 system.  Genix has bugs in `alloca'
-     and `malloc'; you must get the compiled versions of these from GNU
-     Emacs.
-
-`ns32k-sequent'
-     Go to the Berkeley universe before compiling.  In addition, you
-     probably need to create a file named `string.h' containing just
-     one line: `#include <strings.h>'.
-
-`ns32k-utek'
-     UTEK ns32000 system ("merlin").  The C compiler that comes with
-     this system cannot compile GNU CC; contact `tektronix!reed!mason'
-     to get binaries of GNU CC for bootstrapping.
-
-`romp-*-aos'
-`romp-*-mach'
-     The only operating systems supported for the IBM RT PC are AOS and
-     MACH.  GNU CC does not support AIX running on the RT.  We
-     recommend you compile GNU CC with an earlier version of itself; if
-     you compile GNU CC with `hc', the Metaware compiler, it will work,
-     but you will get mismatches between the stage 2 and stage 3
-     compilers in various files.  These errors are minor differences in
-     some floating-point constants and can be safely ignored; the stage
-     3 compiler is correct.
-
-`rs6000-*-aix'
-`powerpc-*-aix'
-     Various early versions of each release of the IBM XLC compiler
-     will not bootstrap GNU CC.  Symptoms include differences between
-     the stage2 and stage3 object files, and errors when compiling
-     `libgcc.a' or `enquire'.  Known problematic releases include:
-     xlc-1.2.1.8, xlc-1.3.0.0 (distributed with AIX 3.2.5), and
-     xlc-1.3.0.19.  Both xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are
-     known to produce working versions of GNU CC, but most other recent
-     releases correctly bootstrap GNU CC.  Also, releases of AIX prior
-     to AIX 3.2.4 include a version of the IBM assembler which does not
-     accept debugging directives: assembler updates are available as
-     PTFs.  Also, if you are using AIX 3.2.5 or greater and the GNU
-     assembler, you must have a version modified after October 16th,
-     1995 in order for the GNU C compiler to build.  See the file
-     `README.RS6000' for more details on of these problems.
-
-     GNU CC does not yet support the 64-bit PowerPC instructions.
-
-     Objective C does not work on this architecture because it makes
-     assumptions that are incompatible with the calling conventions.
-
-     AIX on the RS/6000 provides support (NLS) for environments outside
-     of the United States.  Compilers and assemblers use NLS to support
-     locale-specific representations of various objects including
-     floating-point numbers ("." vs "," for separating decimal
-     fractions).  There have been problems reported where the library
-     linked with GNU CC does not produce the same floating-point
-     formats that the assembler accepts.  If you have this problem, set
-     the LANG environment variable to "C" or "En_US".
-
-     Due to changes in the way that GNU CC invokes the binder (linker)
-     for AIX 4.1, you may now receive warnings of duplicate symbols
-     from the link step that were not reported before.  The assembly
-     files generated by GNU CC for AIX have always included multiple
-     symbol definitions for certain global variable and function
-     declarations in the original program.  The warnings should not
-     prevent the linker from producing a correct library or runnable
-     executable.
-
-`powerpc-*-elf'
-`powerpc-*-sysv4'
-     PowerPC system in big endian mode, running System V.4.
-
-     This configuration is currently under development.
-
-`powerpc-*-eabiaix'
-     Embedded PowerPC system in big endian mode with -mcall-aix
-     selected as the default.  This system is currently under
-     development.
-
-`powerpc-*-eabisim'
-     Embedded PowerPC system in big endian mode for use in running
-     under the PSIM simulator.  This system is currently under
-     development.
-
-`powerpc-*-eabi'
-     Embedded PowerPC system in big endian mode.
-
-     This configuration is currently under development.
-
-`powerpcle-*-elf'
-`powerpcle-*-sysv4'
-     PowerPC system in little endian mode, running System V.4.
-
-     This configuration is currently under development.
-
-`powerpcle-*-sysv4'
-     Embedded PowerPC system in little endian mode.
-
-     This system is currently under development.
-
-`powerpcle-*-eabisim'
-     Embedded PowerPC system in little endian mode for use in running
-     under the PSIM simulator.
-
-     This system is currently under development.
-
-`powerpcle-*-eabi'
-     Embedded PowerPC system in little endian mode.
-
-     This configuration is currently under development.
-
-`vax-dec-ultrix'
-     Don't try compiling with Vax C (`vcc').  It produces incorrect code
-     in some cases (for example, when `alloca' is used).
-
-     Meanwhile, compiling `cp/parse.c' with pcc does not work because of
-     an internal table size limitation in that compiler.  To avoid this
-     problem, compile just the GNU C compiler first, and use it to
-     recompile building all the languages that you want to run.
-
-`sparc-sun-*'
-     See *Note Sun Install::, for information on installing GNU CC on
-     Sun systems.
-
-`vax-dec-vms'
-     See *Note VMS Install::, for details on how to install GNU CC on
-     VMS.
-
-`we32k-*-*'
-     These computers are also known as the 3b2, 3b5, 3b20 and other
-     similar names.  (However, the 3b1 is actually a 68000; see *Note
-     Configurations::.)
-
-     Don't use `-g' when compiling with the system's compiler.  The
-     system's linker seems to be unable to handle such a large program
-     with debugging information.
-
-     The system's compiler runs out of capacity when compiling `stmt.c'
-     in GNU CC.  You can work around this by building `cpp' in GNU CC
-     first, then use that instead of the system's preprocessor with the
-     system's C compiler to compile `stmt.c'.  Here is how:
-
-          mv /lib/cpp /lib/cpp.att
-          cp cpp /lib/cpp.gnu
-          echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
-          chmod +x /lib/cpp
-
-     The system's compiler produces bad code for some of the GNU CC
-     optimization files.  So you must build the stage 2 compiler without
-     optimization.  Then build a stage 3 compiler with optimization.
-     That executable should work.  Here are the necessary commands:
-
-          make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
-          make stage2
-          make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
-
-     You may need to raise the ULIMIT setting to build a C++ compiler,
-     as the file `cc1plus' is larger than one megabyte.
-
-Compilation in a Separate Directory
-===================================
-
-   If you wish to build the object files and executables in a directory
-other than the one containing the source files, here is what you must
-do differently:
-
-  1. Make sure you have a version of Make that supports the `VPATH'
-     feature.  (GNU Make supports it, as do Make versions on most BSD
-     systems.)
-
-  2. If you have ever run `configure' in the source directory, you must
-     undo the configuration.  Do this by running:
-
-          make distclean
-
-  3. Go to the directory in which you want to build the compiler before
-     running `configure':
-
-          mkdir gcc-sun3
-          cd gcc-sun3
-
-     On systems that do not support symbolic links, this directory must
-     be on the same file system as the source code directory.
-
-  4. Specify where to find `configure' when you run it:
-
-          ../gcc/configure ...
-
-     This also tells `configure' where to find the compiler sources;
-     `configure' takes the directory from the file name that was used to
-     invoke it.  But if you want to be sure, you can specify the source
-     directory with the `--srcdir' option, like this:
-
-          ../gcc/configure --srcdir=../gcc OTHER OPTIONS
-
-     The directory you specify with `--srcdir' need not be the same as
-     the one that `configure' is found in.
-
-   Now, you can run `make' in that directory.  You need not repeat the
-configuration steps shown above, when ordinary source files change.  You
-must, however, run `configure' again when the configuration files
-change, if your system does not support symbolic links.
-
-Building and Installing a Cross-Compiler
-========================================
-
-   GNU CC can function as a cross-compiler for many machines, but not
-all.
-
-   * Cross-compilers for the Mips as target using the Mips assembler
-     currently do not work, because the auxiliary programs
-     `mips-tdump.c' and `mips-tfile.c' can't be compiled on anything
-     but a Mips.  It does work to cross compile for a Mips if you use
-     the GNU assembler and linker.
-
-   * Cross-compilers between machines with different floating point
-     formats have not all been made to work.  GNU CC now has a floating
-     point emulator with which these can work, but each target machine
-     description needs to be updated to take advantage of it.
-
-   * Cross-compilation between machines of different word sizes is
-     somewhat problematic and sometimes does not work.
-
-   Since GNU CC generates assembler code, you probably need a
-cross-assembler that GNU CC can run, in order to produce object files.
-If you want to link on other than the target machine, you need a
-cross-linker as well.  You also need header files and libraries suitable
-for the target machine that you can install on the host machine.
-
-Steps of Cross-Compilation
---------------------------
-
-   To compile and run a program using a cross-compiler involves several
-steps:
-
-   * Run the cross-compiler on the host machine to produce assembler
-     files for the target machine.  This requires header files for the
-     target machine.
-
-   * Assemble the files produced by the cross-compiler.  You can do this
-     either with an assembler on the target machine, or with a
-     cross-assembler on the host machine.
-
-   * Link those files to make an executable.  You can do this either
-     with a linker on the target machine, or with a cross-linker on the
-     host machine.  Whichever machine you use, you need libraries and
-     certain startup files (typically `crt....o') for the target
-     machine.
-
-   It is most convenient to do all of these steps on the same host
-machine, since then you can do it all with a single invocation of GNU
-CC.  This requires a suitable cross-assembler and cross-linker.  For
-some targets, the GNU assembler and linker are available.
-
-Configuring a Cross-Compiler
-----------------------------
-
-   To build GNU CC as a cross-compiler, you start out by running
-`configure'.  Use the `--target=TARGET' to specify the target type.  If
-`configure' was unable to correctly identify the system you are running
-on, also specify the `--build=BUILD' option.  For example, here is how
-to configure for a cross-compiler that produces code for an HP 68030
-system running BSD on a system that `configure' can correctly identify:
-
-     ./configure --target=m68k-hp-bsd4.3
-
-Tools and Libraries for a Cross-Compiler
-----------------------------------------
-
-   If you have a cross-assembler and cross-linker available, you should
-install them now.  Put them in the directory `/usr/local/TARGET/bin'.
-Here is a table of the tools you should put in this directory:
-
-`as'
-     This should be the cross-assembler.
-
-`ld'
-     This should be the cross-linker.
-
-`ar'
-     This should be the cross-archiver: a program which can manipulate
-     archive files (linker libraries) in the target machine's format.
-
-`ranlib'
-     This should be a program to construct a symbol table in an archive
-     file.
-
-   The installation of GNU CC will find these programs in that
-directory, and copy or link them to the proper place to for the
-cross-compiler to find them when run later.
-
-   The easiest way to provide these files is to build the Binutils
-package and GAS.  Configure them with the same `--host' and `--target'
-options that you use for configuring GNU CC, then build and install
-them.  They install their executables automatically into the proper
-directory.  Alas, they do not support all the targets that GNU CC
-supports.
-
-   If you want to install libraries to use with the cross-compiler,
-such as a standard C library, put them in the directory
-`/usr/local/TARGET/lib'; installation of GNU CC copies all all the
-files in that subdirectory into the proper place for GNU CC to find
-them and link with them.  Here's an example of copying some libraries
-from a target machine:
-
-     ftp TARGET-MACHINE
-     lcd /usr/local/TARGET/lib
-     cd /lib
-     get libc.a
-     cd /usr/lib
-     get libg.a
-     get libm.a
-     quit
-
-The precise set of libraries you'll need, and their locations on the
-target machine, vary depending on its operating system.
-
-   Many targets require "start files" such as `crt0.o' and `crtn.o'
-which are linked into each executable; these too should be placed in
-`/usr/local/TARGET/lib'.  There may be several alternatives for
-`crt0.o', for use with profiling or other compilation options.  Check
-your target's definition of `STARTFILE_SPEC' to find out what start
-files it uses.  Here's an example of copying these files from a target
-machine:
-
-     ftp TARGET-MACHINE
-     lcd /usr/local/TARGET/lib
-     prompt
-     cd /lib
-     mget *crt*.o
-     cd /usr/lib
-     mget *crt*.o
-     quit
-
-`libgcc.a' and Cross-Compilers
-------------------------------
-
-   Code compiled by GNU CC uses certain runtime support functions
-implicitly.  Some of these functions can be compiled successfully with
-GNU CC itself, but a few cannot be.  These problem functions are in the
-source file `libgcc1.c'; the library made from them is called
-`libgcc1.a'.
-
-   When you build a native compiler, these functions are compiled with
-some other compiler-the one that you use for bootstrapping GNU CC.
-Presumably it knows how to open code these operations, or else knows how
-to call the run-time emulation facilities that the machine comes with.
-But this approach doesn't work for building a cross-compiler.  The
-compiler that you use for building knows about the host system, not the
-target system.
-
-   So, when you build a cross-compiler you have to supply a suitable
-library `libgcc1.a' that does the job it is expected to do.
-
-   To compile `libgcc1.c' with the cross-compiler itself does not work.
-The functions in this file are supposed to implement arithmetic
-operations that GNU CC does not know how to open code for your target
-machine.  If these functions are compiled with GNU CC itself, they will
-compile into infinite recursion.
-
-   On any given target, most of these functions are not needed.  If GNU
-CC can open code an arithmetic operation, it will not call these
-functions to perform the operation.  It is possible that on your target
-machine, none of these functions is needed.  If so, you can supply an
-empty library as `libgcc1.a'.
-
-   Many targets need library support only for multiplication and
-division.  If you are linking with a library that contains functions for
-multiplication and division, you can tell GNU CC to call them directly
-by defining the macros `MULSI3_LIBCALL', and the like.  These macros
-need to be defined in the target description macro file.  For some
-targets, they are defined already.  This may be sufficient to avoid the
-need for libgcc1.a; if so, you can supply an empty library.
-
-   Some targets do not have floating point instructions; they need other
-functions in `libgcc1.a', which do floating arithmetic.  Recent
-versions of GNU CC have a file which emulates floating point.  With a
-certain amount of work, you should be able to construct a floating
-point emulator that can be used as `libgcc1.a'.  Perhaps future
-versions will contain code to do this automatically and conveniently.
-That depends on whether someone wants to implement it.
-
-   Some embedded targets come with all the necessary `libgcc1.a'
-routines written in C or assembler.  These targets build `libgcc1.a'
-automatically and you do not need to do anything special for them.
-Other embedded targets do not need any `libgcc1.a' routines since all
-the necessary operations are supported by the hardware.
-
-   If your target system has another C compiler, you can configure GNU
-CC as a native compiler on that machine, build just `libgcc1.a' with
-`make libgcc1.a' on that machine, and use the resulting file with the
-cross-compiler.  To do this, execute the following on the target
-machine:
-
-     cd TARGET-BUILD-DIR
-     ./configure --host=sparc --target=sun3
-     make libgcc1.a
-
-And then this on the host machine:
-
-     ftp TARGET-MACHINE
-     binary
-     cd TARGET-BUILD-DIR
-     get libgcc1.a
-     quit
-
-   Another way to provide the functions you need in `libgcc1.a' is to
-define the appropriate `perform_...' macros for those functions.  If
-these definitions do not use the C arithmetic operators that they are
-meant to implement, you should be able to compile them with the
-cross-compiler you are building.  (If these definitions already exist
-for your target file, then you are all set.)
-
-   To build `libgcc1.a' using the perform macros, use
-`LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the compiler.
-Otherwise, you should place your replacement library under the name
-`libgcc1.a' in the directory in which you will build the
-cross-compiler, before you run `make'.
-
-Cross-Compilers and Header Files
---------------------------------
-
-   If you are cross-compiling a standalone program or a program for an
-embedded system, then you may not need any header files except the few
-that are part of GNU CC (and those of your program).  However, if you
-intend to link your program with a standard C library such as `libc.a',
-then you probably need to compile with the header files that go with
-the library you use.
-
-   The GNU C compiler does not come with these files, because (1) they
-are system-specific, and (2) they belong in a C library, not in a
-compiler.
-
-   If the GNU C library supports your target machine, then you can get
-the header files from there (assuming you actually use the GNU library
-when you link your program).
-
-   If your target machine comes with a C compiler, it probably comes
-with suitable header files also.  If you make these files accessible
-from the host machine, the cross-compiler can use them also.
-
-   Otherwise, you're on your own in finding header files to use when
-cross-compiling.
-
-   When you have found suitable header files, put them in
-`/usr/local/TARGET/include', before building the cross compiler.  Then
-installation will run fixincludes properly and install the corrected
-versions of the header files where the compiler will use them.
-
-   Provide the header files before you build the cross-compiler, because
-the build stage actually runs the cross-compiler to produce parts of
-`libgcc.a'.  (These are the parts that *can* be compiled with GNU CC.)
-Some of them need suitable header files.
-
-   Here's an example showing how to copy the header files from a target
-machine.  On the target machine, do this:
-
-     (cd /usr/include; tar cf - .) > tarfile
-
-   Then, on the host machine, do this:
-
-     ftp TARGET-MACHINE
-     lcd /usr/local/TARGET/include
-     get tarfile
-     quit
-     tar xf tarfile
-
-Actually Building the Cross-Compiler
-------------------------------------
-
-   Now you can proceed just as for compiling a single-machine compiler
-through the step of building stage 1.  If you have not provided some
-sort of `libgcc1.a', then compilation will give up at the point where
-it needs that file, printing a suitable error message.  If you do
-provide `libgcc1.a', then building the compiler will automatically
-compile and link a test program called `libgcc1-test'; if you get
-errors in the linking, it means that not all of the necessary routines
-in `libgcc1.a' are available.
-
-   You must provide the header file `float.h'.  One way to do this is
-to compile `enquire' and run it on your target machine.  The job of
-`enquire' is to run on the target machine and figure out by experiment
-the nature of its floating point representation.  `enquire' records its
-findings in the header file `float.h'.  If you can't produce this file
-by running `enquire' on the target machine, then you will need to come
-up with a suitable `float.h' in some other way (or else, avoid using it
-in your programs).
-
-   Do not try to build stage 2 for a cross-compiler.  It doesn't work to
-rebuild GNU CC as a cross-compiler using the cross-compiler, because
-that would produce a program that runs on the target machine, not on the
-host.  For example, if you compile a 386-to-68030 cross-compiler with
-itself, the result will not be right either for the 386 (because it was
-compiled into 68030 code) or for the 68030 (because it was configured
-for a 386 as the host).  If you want to compile GNU CC into 68030 code,
-whether you compile it on a 68030 or with a cross-compiler on a 386, you
-must specify a 68030 as the host when you configure it.
-
-   To install the cross-compiler, use `make install', as usual.
-
-Installing GNU CC on the Sun
-============================
-
-   On Solaris (version 2.1), do not use the linker or other tools in
-`/usr/ucb' to build GNU CC.  Use `/usr/ccs/bin'.
-
-   Make sure the environment variable `FLOAT_OPTION' is not set when
-you compile `libgcc.a'.  If this option were set to `f68881' when
-`libgcc.a' is compiled, the resulting code would demand to be linked
-with a special startup file and would not link properly without special
-pains.
-
-   There is a bug in `alloca' in certain versions of the Sun library.
-To avoid this bug, install the binaries of GNU CC that were compiled by
-GNU CC.  They use `alloca' as a built-in function and never the one in
-the library.
-
-   Some versions of the Sun compiler crash when compiling GNU CC.  The
-problem is a segmentation fault in cpp.  This problem seems to be due to
-the bulk of data in the environment variables.  You may be able to avoid
-it by using the following command to compile GNU CC with Sun CC:
-
-     make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
-
-Installing GNU CC on VMS
-========================
-
-   The VMS version of GNU CC is distributed in a backup saveset
-containing both source code and precompiled binaries.
-
-   To install the `gcc' command so you can use the compiler easily, in
-the same manner as you use the VMS C compiler, you must install the VMS
-CLD file for GNU CC as follows:
-
-  1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to
-     point to the directories where the GNU CC executables
-     (`gcc-cpp.exe', `gcc-cc1.exe', etc.) and the C include files are
-     kept respectively.  This should be done with the commands:
-
-          $ assign /system /translation=concealed -
-            disk:[gcc.] gnu_cc
-          $ assign /system /translation=concealed -
-            disk:[gcc.include.] gnu_cc_include
-
-     with the appropriate disk and directory names.  These commands can
-     be placed in your system startup file so they will be executed
-     whenever the machine is rebooted.  You may, if you choose, do this
-     via the `GCC_INSTALL.COM' script in the `[GCC]' directory.
-
-  2. Install the `GCC' command with the command line:
-
-          $ set command /table=sys$common:[syslib]dcltables -
-            /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
-          $ install replace sys$common:[syslib]dcltables
-
-  3. To install the help file, do the following:
-
-          $ library/help sys$library:helplib.hlb gcc.hlp
-
-     Now you can invoke the compiler with a command like `gcc /verbose
-     file.c', which is equivalent to the command `gcc -v -c file.c' in
-     Unix.
-
-   If you wish to use GNU C++ you must first install GNU CC, and then
-perform the following steps:
-
-  1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the
-     directory where the preprocessor will search for the C++ header
-     files.  This can be done with the command:
-
-          $ assign /system /translation=concealed -
-            disk:[gcc.gxx_include.] gnu_gxx_include
-
-     with the appropriate disk and directory name.  If you are going to
-     be using libg++, this is where the libg++ install procedure will
-     install the libg++ header files.
-
-  2. Obtain the file `gcc-cc1plus.exe', and place this in the same
-     directory that `gcc-cc1.exe' is kept.
-
-     The GNU C++ compiler can be invoked with a command like `gcc /plus
-     /verbose file.cc', which is equivalent to the command `g++ -v -c
-     file.cc' in Unix.
-
-   We try to put corresponding binaries and sources on the VMS
-distribution tape.  But sometimes the binaries will be from an older
-version than the sources, because we don't always have time to update
-them.  (Use the `/version' option to determine the version number of
-the binaries and compare it with the source file `version.c' to tell
-whether this is so.)  In this case, you should use the binaries you get
-to recompile the sources.  If you must recompile, here is how:
-
-  1. Execute the command procedure `vmsconfig.com' to set up the files
-     `tm.h', `config.h', `aux-output.c', and `md.', and to create files
-     `tconfig.h' and `hconfig.h'.  This procedure also creates several
-     linker option files used by `make-cc1.com' and a data file used by
-     `make-l2.com'.
-
-          $ @vmsconfig.com
-
-  2. Setup the logical names and command tables as defined above.  In
-     addition, define the VMS logical name `GNU_BISON' to point at the
-     to the directories where the Bison executable is kept.  This
-     should be done with the command:
-
-          $ assign /system /translation=concealed -
-            disk:[bison.] gnu_bison
-
-     You may, if you choose, use the `INSTALL_BISON.COM' script in the
-     `[BISON]' directory.
-
-  3. Install the `BISON' command with the command line:
-
-          $ set command /table=sys$common:[syslib]dcltables -
-            /output=sys$common:[syslib]dcltables -
-            gnu_bison:[000000]bison
-          $ install replace sys$common:[syslib]dcltables
-
-  4. Type `@make-gcc' to recompile everything (alternatively, submit
-     the file `make-gcc.com' to a batch queue).  If you wish to build
-     the GNU C++ compiler as well as the GNU CC compiler, you must
-     first edit `make-gcc.com' and follow the instructions that appear
-     in the comments.
-
-  5. In order to use GCC, you need a library of functions which GCC
-     compiled code will call to perform certain tasks, and these
-     functions are defined in the file `libgcc2.c'.  To compile this
-     you should use the command procedure `make-l2.com', which will
-     generate the library `libgcc2.olb'.  `libgcc2.olb' should be built
-     using the compiler built from the same distribution that
-     `libgcc2.c' came from, and `make-gcc.com' will automatically do
-     all of this for you.
-
-     To install the library, use the following commands:
-
-          $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
-          $ library gnu_cc:[000000]gcclib/delete=L_*
-          $ library libgcc2/extract=*/output=libgcc2.obj
-          $ library gnu_cc:[000000]gcclib libgcc2.obj
-
-     The first command simply removes old modules that will be replaced
-     with modules from `libgcc2' under different module names.  The
-     modules `new' and `eprintf' may not actually be present in your
-     `gcclib.olb'--if the VMS librarian complains about those modules
-     not being present, simply ignore the message and continue on with
-     the next command.  The second command removes the modules that
-     came from the previous version of the library `libgcc2.c'.
-
-     Whenever you update the compiler on your system, you should also
-     update the library with the above procedure.
-
-  6. You may wish to build GCC in such a way that no files are written
-     to the directory where the source files reside.  An example would
-     be the when the source files are on a read-only disk.  In these
-     cases, execute the following DCL commands (substituting your
-     actual path names):
-
-          $ assign dua0:[gcc.build_dir.]/translation=concealed, -
-                   dua1:[gcc.source_dir.]/translation=concealed  gcc_build
-          $ set default gcc_build:[000000]
-
-     where the directory `dua1:[gcc.source_dir]' contains the source
-     code, and the directory `dua0:[gcc.build_dir]' is meant to contain
-     all of the generated object files and executables.  Once you have
-     done this, you can proceed building GCC as described above.  (Keep
-     in mind that `gcc_build' is a rooted logical name, and thus the
-     device names in each element of the search list must be an actual
-     physical device name rather than another rooted logical name).
-
-  7. *If you are building GNU CC with a previous version of GNU CC, you
-     also should check to see that you have the newest version of the
-     assembler*.  In particular, GNU CC version 2 treats global constant
-     variables slightly differently from GNU CC version 1, and GAS
-     version 1.38.1 does not have the patches required to work with GCC
-     version 2.  If you use GAS 1.38.1, then `extern const' variables
-     will not have the read-only bit set, and the linker will generate
-     warning messages about mismatched psect attributes for these
-     variables.  These warning messages are merely a nuisance, and can
-     safely be ignored.
-
-     If you are compiling with a version of GNU CC older than 1.33,
-     specify `/DEFINE=("inline=")' as an option in all the
-     compilations.  This requires editing all the `gcc' commands in
-     `make-cc1.com'.  (The older versions had problems supporting
-     `inline'.)  Once you have a working 1.33 or newer GNU CC, you can
-     change this file back.
-
-  8. If you want to build GNU CC with the VAX C compiler, you will need
-     to make minor changes in `make-cccp.com' and `make-cc1.com' to
-     choose alternate definitions of `CC', `CFLAGS', and `LIBS'.  See
-     comments in those files.  However, you must also have a working
-     version of the GNU assembler (GNU as, aka GAS) as it is used as
-     the back-end for GNU CC to produce binary object modules and is
-     not included in the GNU CC sources.  GAS is also needed to compile
-     `libgcc2' in order to build `gcclib' (see above); `make-l2.com'
-     expects to be able to find it operational in
-     `gnu_cc:[000000]gnu-as.exe'.
-
-     To use GNU CC on VMS, you need the VMS driver programs `gcc.exe',
-     `gcc.com', and `gcc.cld'.  They are distributed with the VMS
-     binaries (`gcc-vms') rather than the GNU CC sources.  GAS is also
-     included in `gcc-vms', as is Bison.
-
-     Once you have successfully built GNU CC with VAX C, you should use
-     the resulting compiler to rebuild itself.  Before doing this, be
-     sure to restore the `CC', `CFLAGS', and `LIBS' definitions in
-     `make-cccp.com' and `make-cc1.com'.  The second generation
-     compiler will be able to take advantage of many optimizations that
-     must be suppressed when building with other compilers.
-
-   Under previous versions of GNU CC, the generated code would
-occasionally give strange results when linked with the sharable
-`VAXCRTL' library.  Now this should work.
-
-   Even with this version, however, GNU CC itself should not be linked
-with the sharable `VAXCRTL'.  The version of `qsort' in `VAXCRTL' has a
-bug (known to be present in VMS versions V4.6 through V5.5) which
-causes the compiler to fail.
-
-   The executables are generated by `make-cc1.com' and `make-cccp.com'
-use the object library version of `VAXCRTL' in order to make use of the
-`qsort' routine in `gcclib.olb'.  If you wish to link the compiler
-executables with the shareable image version of `VAXCRTL', you should
-edit the file `tm.h' (created by `vmsconfig.com') to define the macro
-`QSORT_WORKAROUND'.
-
-   `QSORT_WORKAROUND' is always defined when GNU CC is compiled with
-VAX C, to avoid a problem in case `gcclib.olb' is not yet available.
-
-`collect2'
-==========
-
-   Many target systems do not have support in the assembler and linker
-for "constructors"--initialization functions to be called before the
-official "start" of `main'.  On such systems, GNU CC uses a utility
-called `collect2' to arrange to call these functions at start time.
-
-   The program `collect2' works by linking the program once and looking
-through the linker output file for symbols with particular names
-indicating they are constructor functions.  If it finds any, it creates
-a new temporary `.c' file containing a table of them, compiles it, and
-links the program a second time including that file.
-
-   The actual calls to the constructors are carried out by a subroutine
-called `__main', which is called (automatically) at the beginning of
-the body of `main' (provided `main' was compiled with GNU CC).  Calling
-`__main' is necessary, even when compiling C code, to allow linking C
-and C++ object code together.  (If you use `-nostdlib', you get an
-unresolved reference to `__main', since it's defined in the standard
-GCC library.  Include `-lgcc' at the end of your compiler command line
-to resolve this reference.)
-
-   The program `collect2' is installed as `ld' in the directory where
-the passes of the compiler are installed.  When `collect2' needs to
-find the *real* `ld', it tries the following file names:
-
-   * `real-ld' in the directories listed in the compiler's search
-     directories.
-
-   * `real-ld' in the directories listed in the environment variable
-     `PATH'.
-
-   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
-     if specified.
-
-   * `ld' in the compiler's search directories, except that `collect2'
-     will not execute itself recursively.
-
-   * `ld' in `PATH'.
-
-   "The compiler's search directories" means all the directories where
-`gcc' searches for passes of the compiler.  This includes directories
-that you specify with `-B'.
-
-   Cross-compilers search a little differently:
-
-   * `real-ld' in the compiler's search directories.
-
-   * `TARGET-real-ld' in `PATH'.
-
-   * The file specified in the `REAL_LD_FILE_NAME' configuration macro,
-     if specified.
-
-   * `ld' in the compiler's search directories.
-
-   * `TARGET-ld' in `PATH'.
-
-   `collect2' explicitly avoids running `ld' using the file name under
-which `collect2' itself was invoked.  In fact, it remembers up a list
-of such names--in case one copy of `collect2' finds another copy (or
-version) of `collect2' installed as `ld' in a second place in the
-search path.
-
-   `collect2' searches for the utilities `nm' and `strip' using the
-same algorithm as above for `ld'.
-
-Standard Header File Directories
-================================
-
-   `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
-where GNU CC stores its private include files, and also where GNU CC
-stores the fixed include files.  A cross compiled GNU CC runs
-`fixincludes' on the header files in `$(tooldir)/include'.  (If the
-cross compilation header files need to be fixed, they must be installed
-before GNU CC is built.  If the cross compilation header files are
-already suitable for ANSI C and GNU CC, nothing special need be done).
-
-   `GPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
-is where `g++' looks first for header files.  `libg++' installs only
-target independent header files in that directory.
-
-   `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
-normally `/usr/local/include'.  GNU CC searches this directory so that
-users can install header files in `/usr/local/include'.
-
-   `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
-doesn't install anything there.
-
-   `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It
-is the place for other packages to install header files that GNU CC will
-use.  For a cross-compiler, this is the equivalent of `/usr/include'.
-When you build a cross-compiler, `fixincludes' processes any header
-files in this directory.
-
diff --git a/gcc/ORDERS b/gcc/ORDERS
deleted file mode 100644 (file)
index ac183c9..0000000
+++ /dev/null
@@ -1,4003 +0,0 @@
-The actual order form follows the descriptions of media contents.
-
-Most of this file is excerpted from the January 1997 GNU's Bulletin.
-
-Please send suggestions for improvements to gnu@prep.ai.mit.edu or the postal
-address at the end of the order form.  Thank You.
-
------------------------------------------------------------------------------
-
-FSF Order Form with Descriptions                       January, 1997
-   
-
-
-Free Software Foundation, Inc.     Telephone: +1-617-542-5942
-59 Temple Place - Suite 330        Fax: (including Japan) +1-617-542-2652
-Boston, MA   02111-1307            Electronic Mail: `gnu@prep.ai.mit.edu'
-USA                                World Wide Web: http://www.gnu.ai.mit.edu
------------------------------------------------------------------------------
-
-
-
-There are some sections (e.g. ``Forthcoming GNUs'' and ``How to Get GNU
-Software'') which are not in this Order Form file.  If you wish to see them,
-ask gnu@prep.ai.mit.edu for the complete July, 1996 GNU's Bulletin.
-
-
-
-Table of Contents
------------------
-
-       Donations Translate Into Free Software
-       Cygnus Matches Donations!
-       Free Software Redistributors Donate
-       Help from Free Software Companies
-       Major Changes in GNU Software and Documentation
-       The Deluxe Distribution
-       GNU Documentation
-       GNU Software
-
-       Program/Package Cross Reference
-       CD-ROMs
-          Pricing of the GNU CD-ROMs
-             What Do the Different Prices Mean?
-             Why Is There an Individual Price?
-             Is There a Maximum Price?
-          January 1997 Compiler Tools Binaries CD-ROM
-          Source Code CD-ROMs
-             January 1997 Source Code CD-ROMs
-             July 1996 Source Code CD-ROMs
-       CD-ROM Subscription Service
-       FSF T-shirt
-       Free Software Foundation Order Form
-
-
------------------------------------------------------------------------------
-
-
-
-Donations Translate Into Free Software
-**************************************
-
-If you appreciate Emacs, GNU CC, Ghostscript, and other free software, you
-may wish to help us make sure there is more in the future--remember,
-*donations translate into more free software!*
-
-Your donation to us is tax-deductible in the United States.  We gladly accept
-*any* currency, although the U.S. dollar is the most convenient.
-
-If your employer has a matching gifts program for charitable donations,
-please arrange to: add the FSF to the list of organizations for your
-employer's matching gifts program; and have your donation matched (note *Note
-Cygnus Matches Donations!::).  If you do not know, please ask your personnel
-department.
-
-Circle amount you are donating, cut out this form, and send it with your
-donation to:
-
-        Free Software Foundation, Inc.
-        59 Temple Place - Suite 330
-        Boston, MA  02111-1307
-        USA
-
-      $500   $250   $100   $50   Other $_____  Other currency:_____
-
-You can charge a donation to any of Carte Blanche, Diner's Club, JCB,
-MasterCard, Visa, or American Express.  Charges may also be faxed to
-+1-617-542-2652.
-
-      Card type: __________________  Expiration Date: _____________
-     
-      Account Number: _____________________________________________
-     
-      Cardholder's Signature: _____________________________________
-     
-      Name: _______________________________________________________
-     
-      Street Address: _____________________________________________
-     
-      City/State/Province: ________________________________________
-     
-      Zip Code/Postal Code/Country: _______________________________
-     
-      Telephone Number: ___________________________________________
-     
-      Email Address: ______________________________________________
-
-
-Cygnus Matches Donations!
-*************************
-
-To encourage cash donations to the Free Software Foundation, Cygnus Solutions
-will continue to contribute corporate funds to the FSF to accompany gifts by
-its employees, and by its customers and their employees.
-
-Donations payable to the Free Software Foundation should be sent by eligible
-persons to Cygnus Solutions, which will add its gifts and forward the total
-to the FSF each quarter.  The FSF will provide the contributor with a receipt
-to recognize the contribution (which is tax-deductible on U.S.  tax returns).
-To see if your employer is a Cygnus customer, or for more information,
-please contact Cygnus:
-
-        Cygnus Solutions
-        1325 Chesapeake Terrace
-        Sunnyvale, CA   94089
-        USA
-     
-        Telephone: +1 408 542 9600
-                   +1 800 Cygnus1 (-294-6871)
-        Fax:       +1 408 542 9700
-        Electronic-Mail: `info@cygnus.com'
-        FTP: `ftp.cygnus.com'
-        World Wide Web: `http://www.Cygnus.com/'
-
-
-Free Software Redistributors Donate
-***********************************
-
-In adddition to their conference donation, Red Hat Software has agreed to
-donate $1.00 to the FSF for every copy of Red Hat Archives sold.  They have
-also added a GNU logo to the back of that CD with the words "Supports the
-Free Software Foundation".
-
-The SNOW 2.1 CD producers added the words "Includes $5 donation to the FSF"
-to the front of their CD.  Potential buyers will know just how much of the
-price is for the FSF & how much is for the redistributor.
-
-The Sun Users Group Deutschland has made it even clearer: their CD says,
-"Price 90 DM, + 12 DM donation to the FSF." We thank them for their
-contribution to our efforts.
-
-Kyoto Micro Computer of Japan regularly gives us 10% of their GNU-related
-sales.
-
-Mr. Hiroshi, Mr. Kojima, and the other authors of the `Linux Primer' in Japan
-have donated money from the sales of their book.
-
-Infomagic has continued to make sizeable donations to the FSF.
-
-At the request of author Arnold Robbins, Specialized Systems Consultants, Inc.
-continues to donate 3% of their profits from selling `Effective AWK
-Programming'.  We would also like to acknowledge the many SSC authors who
-have donated their royalties and fees to the FSF.
-
-In the long run, the success of free software depends on how much new free
-software people develop.  Free software distribution offers an opportunity to
-raise funds for such development in an ethical way.  These redistributors
-have made use of the opportunity.  Many others let it go to waste.
-
-You can help promote free software development by convincing for-a-fee
-redistributors to contribute--either by doing development themselves or by
-donating to development organizations (the FSF and others).
-
-The way to convince distributors to contribute is to demand and expect this
-of them.  This means choosing among distributors partly by how much they give
-to free software development.  Then you can show distributors they must
-compete to be the one who gives the most.
-
-To make this work, you must insist on numbers that you can compare, such as,
-"We will give ten dollars to the Foobar project for each disk sold." A vague
-commitment, such as "A portion of the profits is donated," doesn't give you a
-basis for comparison.  Even a precise fraction "of the profits from this
-disk" is not very meaningful, since creative accounting and unrelated
-business decisions can greatly alter what fraction of the sales price counts
-as profit.
-
-Also, press developers for firm information about what kind of development
-they do or support.  Some kinds make much more long-term difference than
-others.  For example, maintaining a separate version of a GNU program
-contributes very little; maintaining a program on behalf of the GNU Project
-<contributes much.  Easy new ports contribute little, since someone else
-would surely do them; difficult ports such as adding a new CPU to the GNU
-compiler or Mach contribute more; major new features & programs contribute
-the most.
-
-By establishing the idea that supporting further development is "the proper
-thing to do" when distributing free software for a fee, we can assure a
-steady flow of resources for making more free software.
-
-
-Help from Free Software Companies
-*********************************
-
-When choosing a free software business, ask those you are considering how
-much they do to assist free software development, e.g., by contributing money
-to free software development or by writing free software improvements
-themselves for general use.  By basing your decision partially on this
-factor, you can help encourage those who profit from free software to
-contribute to its growth.
-
-Wingnut (SRA's special GNU support group) regularly donates a part of its
-income to the FSF to support the development of new GNU programs.  Listing
-them here is our way of thanking them.  Wingnut has made a pledge to donate
-10% of their income to the FSF, and has purchased several Deluxe Distribution
-packages in Japan.  Also see *Note Cygnus Matches Donations!::.
-
-        Wingnut Project
-        Software Research Associates, Inc.
-        1-1-1 Hirakawa-cho, Chiyoda-ku
-        Tokyo 102, Japan
-     
-        Phone:  (+81-3)3234-2611
-        Fax:    (+81-3)3942-5174
-        E-mail: `info-wingnut@sra.co.jp'
-        WWW: `http://www.sra.co.jp/public/sra/product/wingnut/'
-
-
-Major Changes in GNU Software and Documentation
-***********************************************
-
-   * Hurd Progress   (Also *note What Is the Hurd::.)
-
-     We have made two test releases of the Hurd, and we will make another
-     (version 0.2) in this month.  Stability is improving, and we have begun
-     modifying various user-level utilities to understand new Hurd filesystem
-     features (fileutils, shellutils, tar, etc.).
-
-     One way for people to help out is to compile and run as much third-party
-     free software as they can; in this way we can find bugs and deficiencies
-     with some rapidity.  Volunteers with a PC are therefore eagerly sought
-     to get the new 0.2 release and compile their favorite Unix programs and
-     games.
-
-   * GNU System Progress
-
-     Version 0.2 of the GNU system will be released in this month, to coincide
-     with the 0.2 release of the Hurd.  This complete GNU system is available
-     by FTP.  We are working with Ian Murdock to develop an excellent package
-     management system for GNU.  This will make administering and upgrading
-     the system much easier.  Because of features only the Hurd has, the GNU
-     package management system will be simpler and more featureful than
-     similar package systems for various GNU/Linux distributions.
-
-   * New Source Code CD!   (See *Note January 1997 Source Code CD-ROMs::)
-
-     We are releasing the January 1997 (Edition 9) Source Code CD-ROM this
-     month.  Once again, it is a two disk set.  It includes several new
-     programs: `gforth', `gpc', <Meta-HTML>, `stow', `units', VRweb, `wget',
-     `windows32api', and `xinfo'.  On the CD-ROMs are full distributions of
-     X11R6.3, MIT Scheme, Emacs, GCC, and current versions of all other GNU
-     Software.  *Note GNU Software::, for more about these packages.
-
-   * New Compiler Tools CD-ROM  
-
-     We are releasing the January 1997 (Edition 4) Compiler Tools Binaries
-     CD.  Support is included for several new operating systems.
-
-     The Compiler Tools Binaries CD-ROM contains executables of the GNU
-     compiler tools for some systems that don't normally come with a
-     compiler.  This allows users of those systems to compile their own
-     software without having to buy a proprietary compiler.
-
-     We hope to include more systems with each update of this CD-ROM.  If you
-     can help build binaries for new systems or have one to suggest, please
-     contact us at either address on the top menu.  For more information, see
-     *Note Compiler Tools Binaries CD-ROM::.
-
-   * New/Updated Manuals since Last Bulletin   (See *Note Documentation::)
-
-     Since the last bulletin, we have published new editions of: `Debugging
-     with GDB', for version 4.16 with a new color cover; `Texinfo' Manual,
-     edition 2.24; & the `GNU Emacs Manual', for version 19.33 with a new
-     color cover.  `Using and Porting GNU CC' has been re-printed in a
-     lay-flat bound edition with a new color cover.  A new Bison Manual with
-     a new color cover is planned.
-
-   * Give to GNU the United Way!
-
-     As a 501(c)3 tax-exempt organization, the FSF is eligible to receive
-     United Way funds.  When donating to United Way, one can specify that all
-     or part of the donation be directed to the FSF.  On the donor form,
-     check the "Specific Requests" box and include the sentence, "Send my
-     gift to the Free Software Foundation, 59 Temple Place, Suite 330,
-     Boston, MA 02111." We especially appreciate the donations from Microsoft
-     matching the United Way donations of their employees.  Also see *Note
-     Donations Translate Into Free Software:: and *Note Cygnus Matches
-     Donations!::.
-
-   * GNU Software Works on MS-DOS   (Also *note GNU Software::.)
-
-     GNU Emacs 19 and many other GNU programs have been ported to MS-DOS for
-     i386/i486/Pentium machines.  We ship binaries & sources on the *Note
-     Compiler Tools Binaries CD-ROM::.
-
-   * MULE Merge Almost Complete
-
-     MULE is the Multi-Lingual Emacs developed by Ken'ichi Handa at the
-     Electro-Technical Lab in Tsukuba, Japan.  Handa has readied the code for
-     merging into Emacs and we expect to complete the merge soon.
-
-   * GCC   (For current status on GCC and GNAT, *note GNU Software::.)
-
-     New front ends for GCC are being done for Pascal & Chill.  Pascal,
-     `gpc', stagnated for some years, but should be released by the time you
-     read this.  See `http://agnes.dida.physik.uni-essen.de/~gnu-pascal'.
-
-   * GUILE
-
-     GUILE is currently available as a test release.  GNU's Ubiquitous
-     Intelligent Language for Extension is an SCM-based library that can make
-     any ordinary C program extensible.  (For SCM info, see "JACAL" in *Note
-     GNU Software::.)
-
-     Also being developed are SCSH-compatible system call & Tk interfaces, a
-     module system, dynamic linking support, & a byte-code interpreter.
-     Support for Emacs Lisp & a more C-like language is coming.
-
-   * Texinfo   (For current status, *note GNU Software::.)
-
-     Texinfo now provides macro facilities and supports multicolumn tables.
-     It comes with an `install-info' program that packages can use to update
-     the `dir' file automatically when they install their Info files.
-
-   * GNU Common Lisp   (For current status, *note GNU Software::.)
-
-     Version 2.2.1 of GNU Common Lisp (GCL) was released in December '96.  It
-     now includes a graphical interface to the Tk widget system.  All
-     documentation is now Texinfo-based, with built-in regexp matching used
-     to access the documentation.  A first pass at the Common Lisp condition
-     system is also included.  Version 2.2.1 contains mainly updates to allow
-     GCL 2.2 to work correctly with current operating system levels, and to
-     fix bugs.  Volunteers to help with the move to the ANSI standard are
-     most welcome; please contact `schelter@math.utexas.edu'.
-
-   * Experimental Electronic Cash
-
-     `http://www.lysator.liu.se/~nisse/NCash' is an experimental
-     implementation of anonymous electronic cash which is to be released as
-     free software.
-
-   * HTML Professional and GPL
-
-     The recent development and release of HTML Professional was made under
-     the terms of the GNU GPL.  In order to facilitate distribution, the GPL
-     text was re-encoded into this more recent version of HTML, and is now
-     distributed with HTML Pro.  An online copy can be retrieved at
-     `http://www.arbornet.org/~silmaril/dtds/html/gnugpl.html'.
-
-     HTML Pro is an unofficial version of the HTML DTD.  HTML Pro is
-     distributed for discussion by the `www-html' mailing list.  It
-     composites all other known versions, and allows World Wide Web designers
-     to use recent experimental additions in a rational and structured manner.
-     It comes with a `.ced' file for GNU Emacs/psgml-mode and can be gotten at
-     `ftp://www.ucc.ie/pub/html/htmlpro.{zip|tar.gz|zip.hqx}'.
-     Documentation is at
-     `http://www.arbornet.org/~silmaril/dtds/html/htmlpro.html'.
-
-   * Meta-HTML 5.01 Source Release
-
-     Version 5.01 of Universal Access Inc.'s <Meta-HTML> is now available.
-
-     <Meta-HTML> is a programming language specifically designed to work
-     within the environment of the World Wide Web.  Although it is a genuine
-     programming language, suitable for large-scale symbolic manipulation,
-     <Meta-HTML> also provides the most commonly wanted Web functionality as
-     built-in primitives, so you don't have to write them.  You can find out
-     more about the theory of implementation in this white paper
-     `http://www.metahtml.com/meta-html/manifesto.html'.
-
-     Web pages are authored using HTML and <Meta-HTML> statements freely
-     intermixed.  When a page is requested by a browser, the page is passed
-     through the <Meta-HTML> engine, which dynamically processes any
-     <Meta-HTML> statements to produce a final HTML page which is delivered
-     to the browser.
-
-     The source distribution provides several different interpreter options:
-     a CGI engine which can be run by any Unix Web server; a full-featured
-     Web server (mhttpd) with the interpreter built in; a standalone
-     processor, much like Perl or Tcl; and an interactive debugger, with a
-     feel similar to GDB (mdb).
-
-     There is a user mailing list: `metahtml-users@metahtml.com'.  You can
-     subscribe on the Web at `http://www.metahtml.com/E-Mail/', or by sending
-     mail to `metahtml-users-request@metahtml.com'.
-
-     Pre-compiled distribution sets for some systems are available via the
-     <Meta-HTML> Web site at `http://www.metahtml.com'.
-
-   * VRweb Browser
-
-     VRweb, a browser for 3D models on the Web written in the Virtual Reality
-     Modeling Language (VRML), is now available under the GPL.  VRweb works
-     in conjunction with Web browsers on Unix & Windows platforms.
-
-     VRweb is a joint project of IICM (home of Hyper-G), NCSA (home of
-     Mosaic), & the University of Minnesota (home of Gopher).  The software
-     is freely available in binary & source.  VRweb 1.2 for Unix has just
-     been released, VRweb 1.2 for Windows will follow in due course.  You can
-     download VRweb from `ftp://iicm.tu-graz.ac.at/pub/Hyper-G/VRweb/UNIX'
-     and numerous mirror sites.  Further information on VRweb can be found at
-     `http://hyperg.iicm.tu-graz.ac.at/vrweb'.
-
-     VRML is a non-proprietary, platform-independent file format for 3D
-     graphics on the Internet.  Also see `http://www.sdsc.edu/vrml/',  the
-     VRML Repository.
-
-
-
-The Deluxe Distribution
-***********************
-
-The Free Software Foundation has been asked repeatedly to create a package
-that provides executables for all of our software.  Normally we offer only
-sources.  The Deluxe Distribution provides binaries with the source code and
-includes six T-shirts, all our CD-ROMs, printed manuals, & reference cards.
-
-The FSF Deluxe Distribution contains the binaries and sources to hundreds of
-different programs including Emacs, the GNU C/C++ Compiler, the GNU Debugger,
-the complete X Window System, and all the GNU utilities.
-
-We will make a Deluxe Distribution for most machines/operating systems.  We
-may be able to send someone to your office to do the compilation, if we can't
-find a suitable machine here.  However, we can only compile the programs that
-already support your chosen machine/system - porting is a separate matter.
-(To commission a port, see the GNU Service Directory; details in *Note Free
-Software Support::.) Compiling all these programs takes time; a Deluxe
-Distribution for an unusual machine will take longer to produce than one for
-a common machine.  Please contact the FSF Office with any questions.
-
-We supply the software on a write-once CD-ROM (in ISO 9660 format with "Rock
-Ridge" extensions), or on one of these tapes in Unix `tar' format: 1600 or
-6250bpi 1/2in reel, Sun DC300XLP 1/4in cartridge - QIC24, IBM RS/6000 1/4in
-c.t. - QIC 150, Exabyte 8mm c.t., or DAT 4mm c.t.  If your computer cannot
-read any of these, please contact us to see if we can handle your format.
-
-The manuals included are one each of `Bison', `Calc', `GAWK', `GCC', `GNU C
-Library', `GDB', `Flex', `GNU Emacs Lisp Reference', `Programming in Emacs
-Lisp: An Introduction', `Make', `Texinfo', & `Termcap' manuals; six copies of
-the `GNU Emacs' manual; and ten reference cards each for Emacs, Bison, Calc,
-Flex, & GDB.
-
-Every Deluxe Distribution also has a copy of the latest editions of our
-CD-ROMs that have sources of our software & compiler tool binaries for some
-systems.  The CDs are in ISO 9660 format with Rock Ridge extensions.
-
-The price of the Deluxe Distribution is $5000 (shipping included).  These
-sales provide enormous financial assistance to help the FSF develop more free
-software.  To order, please fill out the "Deluxe Distribution" section on the
-*note Free Software Foundation Order Form::.  and send it to:
-
-        Free Software Foundation, Inc.
-        59 Temple Place - Suite 330
-        Boston, MA   02111-1307
-        USA
-     
-        Telephone: +1-617-542-5942
-        Fax (including Japan): +1-617-542-2652
-        Electronic Mail: gnu@prep.ai.mit.edu
-        World Wide Web: http://www.gnu.ai.mit.edu
-
-
-GNU Documentation
-*****************
-
-GNU is dedicated to having quality, easy-to-use online & printed
-documentation.  GNU manuals are intended to explain underlying concepts,
-describe how to use all the features of each program, & give examples of
-command use.  GNU manuals are distributed as Texinfo source files, which
-yield both typeset hardcopy via the TeX document formatting system and online
-hypertext display via the menu-driven Info system.  Source for these manuals
-comes with our software; here are the manuals that we publish as printed
-books.  See the *note Free Software Foundation Order Form::., to order them.
-
-Most GNU manuals are bound as soft cover books with "lay-flat" bindings.
-This allows you to open them so they lie flat on a table without creasing the
-binding.  They have an inner cloth spine and an outer cardboard cover that
-will not break or crease as an ordinary paperback will.  Currently, the
-`Using and Porting GNU CC', `GDB', `Emacs', `Emacs Lisp Reference',
-`Programming in Emacs Lisp: An Introduction', `GNU Awk User's Guide', `Make',
-& `Bison' manuals have this binding.  Our other manuals also lie flat when
-opened, using a GBC binding.  Our manuals are 7in by 9.25in except the 8.5in
-by 11in `Calc' manual.
-
-The edition number of the manual and version number of the program listed
-after each manual's name were current at the time this Bulletin was published.
-
-`Debugging with GDB' (for Version 4.16) tells how to run your program under
-GNU Debugger control, examine and alter data, modify a program's flow of
-control, and use GDB through GNU Emacs.
-
-The `GNU Emacs Manual' (12th Edition for Version 19.33) describes editing with
-GNU Emacs.  It explains advanced features, including outline mode and regular
-expression search; how to use special programming modes to write languages
-like C++ and TeX; how to use the `tags' utility; how to compile and correct
-code; how to make your own keybindings; and other elementary customizations.
-
-`Programming in Emacs Lisp: An Introduction' (October 1995 Edition 1.04) is
-for people who are not necessarily interested in programming, but who do want
-to customize or extend their computing environment.  If you read it in Emacs
-under Info mode, you can run the sample programs directly.
-
-`The GNU Emacs Lisp Reference Manual' (Edition 2.4 for Version 19.29) and
-`The GNU Emacs Lisp Reference, Japanese Edition' (Japanese Draft Revision
-1.0, from English Edition 2.4 for Version 19.29) cover this programming
-language in depth, including data types, control structures, functions,
-macros, syntax tables, searching/matching, modes, windows, keymaps, byte
-compilation, and the operating system interface.
-
-`The GNU Awk User's Guide' (Edition 1.0 for Version 3.0) tells how to use
-`gawk'.  It is written for those who have never used `awk' and describes
-features of this powerful string and record manipulation language.  It
-clearly delineates those features which are part of POSIX `awk' from `gawk'
-extensions, providing a comprehensive guide to `awk' program portability.
-
-`GNU Make' (Edition 0.50 for Version 3.75 Beta) describes GNU `make', a
-program used to rebuild parts of other programs.  The manual tells how to
-write "makefiles", which specify how a program is to be compiled and how its
-files depend on each other.  Included are an introductory chapter for novice
-users and a section about automatically generated dependencies.
-
-The `Flex' manual (Edition 1.03 for Version 2.3.7) teaches you to write a
-lexical scanner definition for the `flex' program to create a C++ or C-coded
-scanner that recognizes the patterns defined.  You need no prior knowledge of
-scanners.
-
-`The Bison Manual' (November 1995 Edition for Version 1.25) teaches you how
-to write context-free grammars for the Bison program that convert into
-C-coded parsers.  You need no prior knowledge of parser generators.
-
-`Using and Porting GNU CC' (November 1995 Edition for Version 2.7.2) tells
-how to run, install, and port the GNU C Compiler to new systems.  It lists
-new features and incompatibilities of GCC, but people not familiar with C
-will still need a good reference on the C programming language.  It also
-covers G++.
-
-The `Texinfo' manual (Edition 2.24 for Version 3) explains the markup
-language that produces our online Info documentation & typeset hardcopies.
-It tells you how to make tables, lists, chapters, nodes, accented & special
-characters, indexes, cross references, & how to catch mistakes.
-
-`The Termcap Manual' (3rd Edition for Version 1.3), often described as "twice
-as much as you ever wanted to know about termcap," details the format of the
-termcap database, the definitions of terminal capabilities, and the process
-of interrogating a terminal description.  This manual is primarily for
-programmers.
-
-The `C Library Reference Manual' (Edition 0.08 for Version 2.0) describes the
-library's facilities, including both what Unix calls "library functions" &
-"system calls."  We are doing small copier runs of this manual until it
-becomes more stable.  Please send fixes to `bug-glibc-manual@prep.ai.mit.edu'.
-
-The `Emacs Calc Manual' (for Version 2.02) is both a tutorial and a reference
-manual.  It tells how to do ordinary arithmetic, how to use Calc for algebra,
-calculus, and other forms of mathematics, and how to extend Calc.
-
-
-GNU Software
-************
-
-All our software is available via FTP; see *Note How to Get GNU Software::.
-We also offer *Note CD-ROMs::, and printed *Note Documentation::, which
-includes manuals and reference cards.  In the articles describing the
-contents of each medium, the version number listed after each program name
-was current when we published this Bulletin.  When you order a newer CD-ROM,
-some of the programs may be newer and therefore the version number higher.
-See the *note Free Software Foundation Order Form::., for ordering
-information.
-
-Some of the contents of our FTP distributions are compressed.  We have
-software on our FTP sites to uncompress these files.  Due to patent troubles
-with `compress', we use another compression program, `gzip'.  (Such
-prohibitions on software development are fought by the League for Programming
-Freedom; *note What Is the LPF::., for details.)
-
-You may need to build GNU `make' before you build our other software.  Some
-vendors supply no `make' utility at all and some native `make' programs lack
-the `VPATH' feature essential for using the GNU configure system to its full
-extent.  The GNU `make' sources have a shell script to build `make' itself on
-such systems.
-
-We welcome all bug reports and enhancements sent to the appropriate
-electronic mailing list (*note Free Software Support::.).
-
-
-Configuring GNU Software
-------------------------
-
-We are using Autoconf, a uniform scheme for configuring GNU software packages
-in order to compile them (see "Autoconf" and "Automake" below, in this
-article).  The goal is to have all GNU software support the same alternatives
-for naming machine and system types.
-
-Ultimately, it will be possible to configure and build the entire system all
-at once, eliminating the need to configure each individual package separately.
-
-You can also specify both the host and target system to build
-cross-compilation tools.  Most GNU programs now use Autoconf-generated
-configure scripts.
-
-
-GNU Software Now Available
---------------------------
-
-For future programs and features, see *Note Forthcoming GNUs::.
-
-Key to cross reference:
-
-        BinCD        January 1997 Binaries CD-ROM
-        SrcCD        January 1997 Source CD-ROMs
-
-[FSFman] shows that we sell a manual for that package.  [FSFrc] shows we sell
-a reference card for that package.  To order them, see the *note Free
-Software Foundation Order Form::.  *Note Documentation::, for more
-information on the manuals.  Source code for each manual or reference card is
-included with each package.
-
-   * `acm'   (SrcCD)
-
-     `acm' is a LAN-oriented, multiplayer, aerial combat simulation that runs
-     under the X Window System.  Players engage in air to air combat against
-     one another using heat seeking missiles and cannons.  We are working on
-     a more accurate simulation of real airplane flight characteristics.
-
-   * Apache   *Also see* `http://www.apache.org/'   (SrcCD)
-
-     Apache is an HTTP server designed as a successor to the NCSA family of
-     web servers.  It adds a significant amount of new functionality, has an
-     extensive API for modular enhancements, is extremely flexible without
-     compromising speed, and has an active development group and user
-     community.
-
-   * Autoconf   (SrcCD)
-
-     Autoconf produces shell scripts which automatically configure source code
-     packages.  These scripts adapt the packages to many kinds of Unix-like
-     systems without manual user intervention.  Autoconf creates a script for
-     a package from a template file which lists the operating system features
-     which the package can use, in the form of `m4' macro calls.  Autoconf
-     requires GNU `m4' to operate, but the resulting configure scripts it
-     generates do not.
-
-   * Automake   (SrcCD)
-
-     Automake is a tool for generating `Makefile.in's for use with Autoconf.
-     The generated makefiles are compliant with GNU Makefile standards.
-
-   * BASH   (SrcCD)
-
-     GNU's shell, BASH (Bourne Again SHell), is compatible with the Unix `sh'
-     and offers many extensions found in `csh' and `ksh'.  BASH has job
-     control, `csh'-style command history, command-line editing (with Emacs
-     and `vi' modes built-in), and the ability to rebind keys via the
-     `readline' library.  BASH conforms to the POSIX 1003.2-1992 standard.
-
-   * `bc'   (SrcCD)
-
-     `bc' is an interactive algebraic language with arbitrary precision
-     numbers.  GNU `bc' follows the POSIX 1003.2-1992 standard with several
-     extensions, including multi-character variable names, an `else'
-     statement, and full Boolean expressions.  The RPN calculator `dc' is now
-     distributed as part of the same package, but GNU `bc' is not implemented
-     as a `dc' preprocessor.
-
-   * BFD   (BinCD, SrcCD)
-
-     The Binary File Descriptor library allows a program which operates on
-     object files (e.g., `ld' or GDB) to support many different formats in a
-     clean way.  BFD provides a portable interface, so that only BFD needs to
-     know the details of a particular format.  One result is that all
-     programs using BFD will support formats such as a.out, COFF, and ELF.
-     BFD comes with Texinfo source for a manual (not yet published on paper).
-
-     At present, BFD is not distributed separately; it is included with
-     packages that use it.
-
-   * Binutils   (BinCD, SrcCD)
-
-     Binutils includes these programs: `ar', `c++filt', `demangle', `gas',
-     `gprof', `ld', `nlmconv', `nm', `objcopy', `objdump', `ranlib', `size',
-     `strings', & `strip'.
-
-     Binutils version 2 uses the BFD library.  The GNU assembler, `gas',
-     supports the a29k, Alpha, H8/300, H8/500, HP-PA, i386, i960, m68k, m88k,
-     MIPS, NS32K, SH, SPARC, Tahoe, Vax, and Z8000 CPUs, and attempts to be
-     compatible with many other assemblers for Unix and embedded systems.  It
-     can produce mixed C and assembly listings, and includes a macro facility
-     similar to that in some other assemblers.  GNU's linker, `ld', emits
-     source-line numbered error messages for multiply-defined symbols and
-     undefined references, and interprets a superset of AT&T's Linker Command
-     Language, which gives control over where segments are placed in memory.
-     `nlmconv' converts object files into Novell NetWare Loadable Modules.
-     `objdump' can disassemble code for most of the CPUs listed above, and
-     can display other data (e.g., symbols and relocations) from any file
-     format read by BFD.
-
-   * Bison   *See *Note Documentation::* (BinCD, SrcCD)   [FSFman, FSFrc]
-
-     Bison is an upwardly compatible replacement for the parser generator
-     `yacc'.  Texinfo source for the `Bison Manual' and reference card are
-     included.
-
-   * C Library   *See *Note Forthcoming GNUs::*   (BinCD, SrcCD)   [FSFman]
-
-     The GNU C library supports ISO C-1989, ISO C/amendment 1-1995, POSIX
-     1003.1-1990, POSIX 1003.1b-1993, POSIX 1003.1c-1995 (when the underlying
-     system permits), & most of the functions in POSIX 1003.2-1992.  It is
-     nearly compliant with the extended XPG4.2 specification which guarantees
-     upward compatibility with 4.4BSD & many System V functions.
-
-     When used with the GNU Hurd, the C Library performs many functions of the
-     Unix system calls directly.  Mike Haertel has written a fast `malloc'
-     which wastes less memory than the old GNU version.
-
-     GNU `stdio' lets you define new kinds of streams, just by writing a few
-     C functions.  Two methods for handling translated messages help writing
-     internationalized programs & the user can adopt the environment the
-     program runs in to conform with local conventions.  Extended `getopt'
-     functions are already used to parse options, including long options, in
-     many GNU utilities.  The name lookup functions now are modularized which
-     makes it easier to select the service which is needed for the specific
-     database & the document interface makes it easy to add new services.
-     Texinfo source for the `GNU C Library Reference Manual' is included
-     (*note Documentation::.).
-
-     Previous versions of the GNU C library ran on a large number of systems.
-     The architecture-dependent parts of the C library have not been updated
-     since development on version 2.0 started, so today it runs out of the
-     box only on GNU/Hurd (all platforms GNU/Hurd also runs on) & GNU/Linux
-     (ix86, Alpha, m68k, work is in progress for MIPS & Sparc).  Other
-     architectures will become available again as soon as somebody does the
-     port.
-
-   * C++ Library   (BinCD, SrcCD)
-
-     The GNU C++ library (libg++) contains an extensive collection of
-     container and utility classes, including Obstacks, multiple-precision
-     Integers and Rationals, Complex numbers, BitSets, and BitStrings.
-
-     The distribution also includes the libstdc++ library.  This implements
-     library facilities defined by the forthcoming ANSI/ISO C++ standard,
-     including strings, the iostream library, and a port of the Standard
-     Template Library.
-
-   * Calc   (SrcCD)   [FSFman, FSFrc]
-
-     Calc (written by Dave Gillespie in Emacs Lisp) is an extensible, advanced
-     desk calculator & mathematical tool that runs as part of GNU Emacs.  You
-     can use Calc as a simple four-function calculator, but it has many more
-     features including: choice of algebraic or RPN (stack-based) entry;
-     logarithmic, trigonometric, & financial functions; arbitrary precision;
-     complex numbers; vectors; matrices; dates; times; infinities; sets;
-     algebraic simplification; & differentiation & integration.  It outputs to
-     `gnuplot', & comes with source for a manual & reference card (*note
-     Documentation::.).
-
-   * `cfengine'   (SrcCD)
-
-     `cfengine' is used to maintain site-wide configuration of a
-     heterogeneous Unix network using a simple high level language.  Its
-     appearance is similar to `rdist', but allows many more operations to be
-     performed automatically.  See Mark Burgess, "A Site Configuration
-     Engine", `Computing Systems', Vol. 8, No. 3 (ask `office@usenix.org' how
-     to get a copy).
-
-   * Chess   (SrcCD)
-
-     GNU Chess lets most modern computers play a full game of chess.  It has
-     a plain terminal interface, a curses interface, & the unique X Windows
-     interface `xboard'.  Best results are obtained using GNU C to compile
-     GNU Chess.
-
-     Recent improvements include "configure"-capability, correct thinking on
-     opponent's time, makefile for Windows NT, full Windows 95/NT
-     compatibility, parallel Unix & Windows 95/NT versions, major crash bug
-     fix & various other minor improvements & bug fixes.
-
-     Stuart Cracraft founded GNU Chess & is the project lead for the 10+ year
-     history of GNU Chess.  Acknowledgements for this past year's work
-     include Chua Kong Sian, National Supercomputing Research Center,
-     Singapore; & Conor McCarthy, Biomolecular/Biomed Science at Griffith
-     University, Australia.
-
-     Send bugs to `bug-gnu-chess@prep.ai.mit.edu' & general comments to
-     `info-gnu-chess@prep.ai.mit.edu'.  Visit the author's website at
-     `http://www.win.net/~msm/index.html'.  Play GNU Chess on the web at
-     `http://www.delorie.com/game-room/chess'.
-
-   * CLISP   (SrcCD)
-
-     CLISP is a Common Lisp implementation by Bruno Haible & Michael Stoll.
-     It mostly supports the Lisp described by `Common LISP: The Language (2nd
-     edition)' & the ANSI Common Lisp standard.  CLISP includes an
-     interpreter, a byte-compiler, a large subset of CLOS & a foreign language
-     interface.  The user interface language (English, German, French) can be
-     chosen at run time.  An X11 API is available through CLX & Garnet.
-     CLISP needs only 2 MB of memory & runs on many microcomputers (including
-     MS-DOS systems, OS/2, Windows NT, Windows 95, Amiga 500-4000, & Acorn
-     RISC PC) & all kinds of Unix systems.
-
-   * Common Lisp   *Also *note GNUs Flashes::.*   (SrcCD)
-
-     GNU Common Lisp (GCL, formerly known as Kyoto Common Lisp) is a compiler
-     & interpreter for Common Lisp.  GCL is very portable & extremely
-     efficient on a wide class of applications, & compares favorably in
-     performance with commercial Lisps on several large theorem-prover &
-     symbolic algebra systems.  GCL supports the CLtL1 specification but is
-     moving towards the proposed ANSI standard.
-
-     GCL compiles to C & then uses the native optimizing C compiler (e.g.,
-     GCC).  A function with a fixed number of args & one value turns into a C
-     function of the same number of args, returning one value--so GCL is
-     maximally efficient on such calls.  Its conservative garbage collector
-     gives great freedom to the C compiler to put Lisp values in registers.
-     It has a source level Lisp debugger for interpreted code & displays
-     source code in an Emacs window.  Its profiler (based on the C profiling
-     tools) counts function calls & the time spent in each function.
-
-     There is now a built-in interface to the Tk widget system.  It runs in a
-     separate process, so users may monitor progress on Lisp computations or
-     interact with running computations via a windowing interface.
-
-     There is also an Xlib interface via C (xgcl-2).  CLX runs with GCL, as
-     does PCL (see "PCL" later in this article).
-
-     GCL version 2.2.1 is released under the GNU Library General Public
-     License.
-
-   * CLX   (SrcCD)
-
-     CLX is an X Window interface library for GCL.  This is separate from the
-     built-in TK interface.
-
-   * `cpio'   (SrcCD)
-
-     `cpio' is an archive program with all the features of SVR4 `cpio',
-     including support for the final POSIX 1003.1 `ustar' standard.  `mt', a
-     program to position magnetic tapes, is included with `cpio'.
-
-   * CVS   (SrcCD)
-
-     CVS is a version control system (like RCS or SCCS) which allows you to
-     keep old versions of files (usually source code), keep a log of who,
-     when, and why changes occurred, etc.  It handles multiple developers,
-     multiple directories, triggers to enable/log/control various operations,
-     and can work over a wide area network.  It does not handle build
-     management or bug-tracking; these are handled by `make' and GNATS,
-     respectively.
-
-   * DejaGnu   (SrcCD)
-
-     DejaGnu is a framework to test programs with a single front end for all
-     tests.  DejaGnu's flexibility & consistency makes it easy to write tests.
-     DejaGnu will also work with remote hosts and embedded systems.
-
-     DejaGnu comes with `expect', which runs scripts to conduct dialogs with
-     programs.
-
-   * Diffutils   (SrcCD)
-
-     GNU `diff' compares files showing line-by-line changes in several
-     flexible formats.  It is much faster than traditional Unix versions.  The
-     Diffutils package has `diff', `diff3', `sdiff', & `cmp'.  Future plans
-     include support for internationalization (e.g., error messages in
-     Chinese) & some non-Unix PC environments, & a library interface that can
-     be used by other free software.
-
-   * DJGPP   *Also see "GCC" in this article*   (BinCD)
-
-     DJ Delorie has ported GCC/G++ to i386s running DOS.  DJGPP has a 32-bit
-     i386 DOS extender with a symbolic debugger, development libraries, &
-     ports of Bison, `flex', & Binutils.  Full source code is provided.  It
-     needs at least 5MB of hard disk space to install & 512K of RAM to use.
-     It supports SVGA (up to 1024x768), XMS & VDISK memory allocation,
-     `himem.sys', VCPI (e.g., QEMM, DESQview, & 386MAX), & DPMI (e.g.,
-     Windows 3.x, OS/2, QEMM, & QDPMI).  Version 2 was released in Feb. 1996,
-     & needs a DPMI environment; a free DPMI server is included.
-
-     FTP from `ftp.simtel.net' in `/pub/simtelnet/gnu/djgpp/' (or a SimTel
-     mirror site).
-
-     Ask `listserv@delorie.com', to join a DJGPP users mailing list.
-
-   * `dld'   (SrcCD)
-
-     `dld' is a dynamic linker written by W. Wilson Ho.  Linking your program
-     with the `dld' library allows you to dynamically load object files into
-     the running binary.  `dld' supports a.out object types on the following
-     platforms: Convex C-Series (BSD), i386/i486/Pentium (GNU/Linux), Sequent
-     Symmetry i386 (Dynix 3), Sun-3 (SunOS 3 & 4), Sun-4 (SunOS 4), & VAX
-     (Ultrix).
-
-   * `doschk'   (SrcCD)
-
-     This program is a utility to help software developers ensure that their
-     source file names are distinguishable on System V platforms with
-     14-character filenames and on MS-DOS systems with 8+3 character
-     filenames.
-
-   * `ed'   (SrcCD)
-
-     `ed' is the standard text editor.  It is line-oriented and can be used
-     interactively or in scripts.
-
-   * Elib   (SrcCD)
-
-     Elib is a small library of Emacs Lisp functions, including routines for
-     using AVL trees and doubly-linked lists.
-
-   * Elisp archive   (SrcCD)
-
-     This is a snapshot of Ohio State's GNU Emacs Lisp FTP Archive.  FTP it
-     from `archive.cis.ohio-state.edu' in `/pub/gnu/emacs/elisp-archive'.
-
-   * Emacs   *Also *note Forthcoming GNUs::.*   [FSFman(s), FSFrc]
-
-     In 1975, Richard Stallman developed the first Emacs, an extensible,
-     customizable real-time display editor & computing environment.  GNU Emacs
-     is his second implementation.  It offers true Lisp--smoothly integrated
-     into the editor--for writing extensions & provides an interface to the X
-     Window System.  It runs on Unix, MS-DOS, & Windows NT or 95.  In
-     addition to its powerful native command set, Emacs can emulate the
-     editors vi & EDT (DEC's VMS editor).  Emacs has many other features which
-     make it a full computing support environment.  Source for the `GNU Emacs
-     Manual' & a reference card comes with the software.  Sources for the
-     `GNU Emacs Lisp Reference Manual', & `Programming in Emacs Lisp: An
-     Introduction' are distributed in separate packages.  *Note
-     Documentation::.
-
-   * Emacs 19   (SrcCD)   [FSFman(s), FSFrc]
-
-     Emacs 19 works with character-only terminals & with the X Window System
-     (with or without an X toolkit).  Features new to Emacs 19 include:
-     multiple X windows ("frames" to Emacs), with a separate X window for the
-     minibuffer or a minibuffer attached to each X window; use of the X
-     toolkit; interfacing with the X resource manager; property lists
-     associated with regions of text in a buffer; multiple fonts & colors
-     defined by those properties; simplified/improved processing of function
-     keys, mouse movement & clicks; X selection processing, including
-     clipboard selections; hooks to be run if the point or mouse moves
-     outside a certain range; menu bars & popup menus defined by keymaps;
-     scrollbars; before- & after-change hooks; a source-level debugger for
-     Emacs Lisp programs; floating point numbers; improved buffer allocation,
-     including returning storage to the system when a buffer is killed; many
-     updated libraries; Autoconf-based configuration; support for version
-     control systems (CVS, RCS, & SCCS); & European character sets.
-
-     Features added recently to Emacs 19 include the ability to open frames
-     on more than one X display from a single Emacs job, operation under
-     MS-DOS, MS Windows, and Windows NT, displaying multiple views of an
-     outline at the same time, Lisp-level timers for real time and idle time,
-     version control support for CVS and for multiple branches, text
-     properties for formatting text, commands to edit text properties and
-     save them in files, and GNU-standard long-named command line options.
-     Also see *Note Forthcoming GNUs::.
-
-     Emacs 19 works on: Acorn RISC (RISCiX); Alliant FX/2800 (BSD); Alpha
-     (OSF/1 or GNU/Linux); Apollo (DomainOS); Bull DPX/2 2nn & 3nn (SysV.3) &
-     sps7 (SysV.2); Clipper; Convex (BSD); Cubix QBx (SysV); Data General
-     Aviion (DGUX); DEC MIPS (Ultrix 4.2, OSF/1, not VMS); Elxsi 6400 (SysV);
-     Gould Power Node & NP1 (4.2 & 4.3BSD); Harris Night Hawk 1200, 3000,
-     4000 & 5000 (cxux); Harris Night Hawk Power PC (powerunix); Honeywell
-     XPS100 (SysV); HP 9000 series 200, 300, 700, 800 (but not 500) (4.3BSD;
-     HP-UX 7, 8, 9; NextStep); Intel i386/i486/Pentium (GNU/Hurd, GNU/Linux,
-     386BSD, AIX, BSDI/386, FreeBSD, Esix, ISC, MS-DOS, NetBSD, SCO3.2v4,
-     Solaris, SysV, Xenix, WindowsNT, Windows95); IBM RS/6000 (AIX 3.2) &
-     RT/PC (AIX, BSD); Motorola Delta 147 & 187 (SysV.3, SysV.4, m88kbcs);
-     National Semiconductor 32K (Genix); NeXT (BSD, Mach 2 w/ NeXTStep 3.0);
-     Paragon (OSF/1); Prime EXL (SysV); Pyramid (BSD); Sequent Symmetry (BSD,
-     ptx); Siemens RM400 & RM600 (SysV); SGI Iris 4D (Irix 4.x & 5.x); Sony
-     News/RISC (NewsOS); Stardent i860 (SysV); Sun 3 & 4, SPARC 1, 1+, 2, 10,
-     Classic (SunOS 4.0, 4.1, Solaris 2.0-2.3); Tadpole 68k (SysV); Tektronix
-     XD88 (SysV.3) & 4300 (BSD); & Titan P2 & P3 (SysV).
-
-   * Emacs 18   (SrcCD)   [FSFrc]
-
-     Emacs 18 is several years old.  We no longer maintain it, but still
-     distribute it for those using platforms which Emacs 19 does not support:
-     Alliant FX/80, Altos 3068, Amdahl (UTS), AT&T (3Bs & 7300 PC), CCI 5/32
-     & 6/32, Celerity, DEC (VAX VMS), Dual, Encore (APC, DPC, & XPC), HLH
-     Orion (original & 1/05), ISI (Optimum V, 80386), Masscomp, NCR Tower 32
-     (SVR2 & SVR3), Nixdorf Targon 31, Nu (TI & LMI), pfa50, Plexus, Prime
-     EXL, Stride (system rel. 2), Tahoe, Tandem Integrity S2, Tektronix 16000,
-     Triton 88, Ustation E30 (SS5E), Whitechapel (MG1), & Wicat.
-
-   * `es'   (SrcCD)
-
-     `es' is an extensible shell (based on `rc') with first-class functions,
-     lexical scope, exceptions, and rich return values (i.e., functions can
-     return values other than just numbers).  `es''s extensibility comes from
-     the ability to modify and extend the shell's built-in services, such as
-     path searching and redirection.  Like `rc', it is great for both
-     interactive use and scripting, particularly since its quoting rules are
-     much less baroque than the C and Bourne shells.
-
-   * `enscript'   (SrcCD)
-
-     `enscript' is an upwardly-compatible replacement for the Adobe
-     `enscript' program.  It formats ASCII files (outputting in Postscript)
-     and stores generated output to a file or sends it directly to the
-     printer.
-
-   * Exim   (SrcCD)
-
-     Exim is a new Internet mail transfer agent, similar in style to Smail 3.
-     It can handle relatively high volume mail systems, header rewriting,
-     control over which hosts/nets may use it as a relay, blocking of
-     unwanted mail from specified hosts/nets/senders, and multiple local
-     domains on one mail host ("virtual domains") with several options for
-     the way these are handled.
-
-   * `f2c'   *Also see "Fortran" below & in *Note Forthcoming GNUs::*  
-     (SrcCD)
-
-     `f2c' converts Fortran-77 source into C or C++, which can be compiled
-     with GCC or G++.  Get bug fixes by FTP from site `netlib.bell-labs.com'
-     or by email from `netlib@netlib.bell-labs.com'.  For a summary, see the
-     file `/netlib/f2c/readme.Z'.
-
-   * `ffcall'   (SrcCD)
-
-     `ffcall' is a C library for implementing foreign function calls in
-     embedded interpreters by Bill Triggs and Bruno Haible.  It allows C
-     functions with arbitrary argument lists and return types to be called or
-     emulated (callbacks).
-
-   * Fileutils   (SrcCD)
-
-     The Fileutils are: `chgrp', `chmod', `chown', `cp', `dd', `df', `dir',
-     `dircolors', `du', `install', `ln', `ls', `mkdir', `mkfifo', `mknod',
-     `mv', `rm', `rmdir', `sync', `touch', & `vdir'.
-
-   * Findutils   (SrcCD)
-
-     `find' is frequently used both interactively and in shell scripts to
-     find files which match certain criteria and perform arbitrary operations
-     on them.  Also included are `locate', which scans a database for file
-     names that match a pattern, and `xargs', which applies a command to a
-     list of files.
-
-   * Finger   (SrcCD)
-
-     GNU Finger has more features than other finger programs.  For sites with
-     many hosts, a single host may be designated as the finger "server" host
-     and other hosts at that site configured as finger "clients".  The server
-     host collects information about who is logged in on the clients.  To
-     finger a user at a GNU Finger site, a query to any of its client hosts
-     gets useful information.  GNU Finger supports many customization
-     features, including user output filters and site-programmable output for
-     special target names.
-
-   * `flex'   (BinCD, SrcCD)   [FSFman, FSFrc]
-
-     `flex' is a replacement for the `lex' scanner generator.  `flex' was
-     written by Vern Paxson of the Lawrence Berkeley Laboratory and generates
-     far more efficient scanners than `lex' does.  Sources for the `Flex
-     Manual' and reference card are included (*note Documentation::.).
-
-   * Fortran (`g77')   *Also *note Forthcoming GNUs::.*   (SrcCD)
-
-     GNU Fortran (`g77'), developed by Craig Burley, is available for public
-     beta testing on the Internet.  For now, `g77' produces code that is
-     mostly object-compatible with `f2c' & uses the same run-time library
-     (`libf2c').
-
-   * Fontutils   (SrcCD)
-
-     The Fontutils convert between font formats, create fonts for use with
-     Ghostscript or TeX (starting with a scanned type image & converting the
-     bitmaps to outlines), etc.  It includes: `bpltobzr', `bzrto',
-     `charspace', `fontconvert', `gsrenderfont', `imageto', `imgrotate',
-     `limn', & `xbfe'.
-
-   * GAWK   (SrcCD)   [FSFman]
-
-     GAWK is upwardly compatible with the latest POSIX specification of
-     `awk'.  It also provides several useful extensions not found in other
-     `awk' implementations.  Texinfo source for the `The GNU Awk User's
-     Guide' comes with the software (*note Documentation::.).
-
-   * `gcal'   (SrcCD)
-
-     `gcal' is a program for printing calendars.  It displays different
-     styled calendar sheets, eternal holiday lists, and fixed date warning
-     lists.
-
-   * GCC   *Also *note GNUs Flashes::.*   (BinCD, SrcCD)   [FSFman]
-
-     Version 2 of the GNU C Compiler supports the languages C, C++, and
-     Objective-C; the source file name suffix or a compiler option selects
-     the language.  (Also see "GNAT" later in this article for Ada language
-     supports.) Objective-C support was donated by NeXT.  The runtime support
-     needed to run Objective-C programs is now distributed with GCC (this
-     does not include any Objective-C classes aside from `object', but see
-     "GNUstep" in *Note Forthcoming GNUs::).  As much as possible, G++ is
-     kept compatible with the evolving draft ANSI standard, but not with
-     `cfront' (AT&T's compiler), which has been diverging from ANSI.
-
-     GCC is a fairly portable optimizing compiler which performs many
-     optimizations.  They include: automatic register allocation, common
-     sub-expression elimination (CSE) (including a certain amount of CSE
-     between basic blocks - though not all the supported machine descriptions
-     provide for scheduling or delay slots), invariant code motion from
-     loops, induction variable optimizations, constant propagation, copy
-     propagation, delayed popping of function call arguments, tail recursion
-     elimination, integration of inline functions & frame pointer elimination,
-     instruction scheduling, loop unrolling, filling of delay slots, leaf
-     function optimization, optimized multiplication by constants, the
-     ability to assign attributes to instructions, & many local optimizations
-     automatically deduced from the machine description.
-
-     GCC can open-code most arithmetic on 64-bit values (type `long long
-     int').  It supports extended floating point (type `long double') on the
-     68k; other machines will follow.  GCC supports full ANSI C, traditional
-     C, & GNU C extensions (including: nested functions support, nonlocal
-     gotos, & taking the address of a label).
-
-     GCC can generate a.out, COFF, ELF, & OSF-Rose files when used with a
-     suitable assembler.  It can produce debugging information in these
-     formats: BSD stabs, COFF, ECOFF, ECOFF with stabs, & DWARF.
-
-     GCC generates code for many CPUs, including the a29k, Alpha, ARM, AT&T,
-     DSP1610, Clipper, Convex cN, Elxsi, Fujitsu Gmicro, i370, i860, i960,
-     MIL-STD-1750a, MIPS, ns32k, PDP-11, Pyramid, ROMP, RS/6000, SH, SPUR,
-     Tahoe, VAX, & we32k.
-
-     Position-independent code is generated for the Clipper, Hitachi H8/300,
-     HP-PA (1.0 & 1.1), i386/i486/Pentium, m68k, m88k, SPARC, & SPARClite.
-
-     Operating systems supported include: GNU/Hurd, GNU/Linux, ACIS, AIX, AOS,
-     BSD, Clix, Concentrix, Ctix, DG/UX, Dynix, FreeBSD, Genix, HP-UX, Irix,
-     ISC, Luna, LynxOS, Minix, NetBSD, NewsOS, NeXTStep, OS/2, OSF, OSF-Rose,
-     RISCOS, SCO, Solaris 2, SunOS 4, System/370, SysV, Ultrix, Unos, VMS, &
-     Windows/NT.
-
-     Using the configuration scheme for GCC, building a cross-compiler is as
-     easy as building a native compiler.
-
-     Version 1 of GCC, G++, & libg++ are no longer maintained.
-
-     Texinfo source for the `Using and Porting GNU CC' manual is included
-     with GCC (*note Documentation::.).
-
-   * GDB   (BinCD, SrcCD)   [FSFman, FSFrc]
-
-     GDB, the GNU DeBugger, is a source-level debugger for C, C++, & Fortran.
-     It provides partial support for  Modula-2 & Chill.
-
-     GDB can debug both C & C++, & will work with executables made by many
-     different compilers; but, C++ debugging will have some limitations if
-     you do not use GCC.
-
-     GDB has a command line user interface, and Emacs has GDB mode as an
-     interface.  Two X interfaces (not distributed or maintained by the FSF)
-     are: `gdbtk' (FTP it from `ftp.cygnus.com' in directory `/pub/gdb'); and
-     `xxgdb' (FTP it from `ftp.x.org' in directory `/contrib/utilities').
-
-     Executable files and symbol tables are read via the BFD library, which
-     allows a single copy of GDB to debug programs with multiple object file
-     formats (e.g., a.out, COFF, ELF).  Other features include a rich command
-     language, remote debugging over serial lines or TCP/IP, and watchpoints
-     (breakpoints triggered when the value of an expression changes).
-
-     GDB uses a standard remote interface to a simulator library which (so
-     far) has simulators for the ARM, Hitachi H8/300, Hitachi H8/500, Hitachi
-     Super-H, PowerPC, WDC 65816, & Zilog Z8001/2.
-
-     GDB can perform cross-debugging.  To say that GDB "targets" a platform
-     means it can perform native or cross-debugging for it.  To say that GDB
-     can "host" a given platform means that it can be built on it, but cannot
-     necessarily debug native programs.
-
-     GDB can:
-
-        * "target" & "host": Amiga 3000 (Amix, NetBSD), DEC Alpha (OSF/1),
-          DECstation 3100 & 5000 (Ultrix), HP 9000/300 (BSD, HP-UX), HP
-          9000/700 (HP-UX 9, 10), i386/i486/Pentium (GNU/Hurd, GNU/Linux,
-          BSD, FreeBSD, LynxOS, NetBSD, SCO, Windows NT), IBM RS/6000 (AIX
-          3.x, AIX 4.x, LynxOS), Motorola Delta m88k (System V, CX/UX), PC532
-          (NetBSD), Motorola m68k MVME-167 (LynxOS), NCR 3000 (SVR4), PowerPC
-          (AIX 4.x, MacOS, Windows NT), SGI (Irix V3, V4, V5), SONY News
-          (NewsOS 3.x), SPARC (LynxOS, NetBSD, Solaris 2.x, & SunOS 4.1 )
-          Sun-3 (SunOS 4.1), & Ultracomputer (a29k running Sym1).
-
-        * "target", but not "host": AMD 29000 (COFF & a.out), ARM (RDP),
-          Hitachi H8/300, Hitachi SH (CMON, SH3, E7000), HP PA Pro (Winbond,
-          Oki), i386 (a.out, COFF, OS/9000), i960 (MON960, Nindy, VxWorks),
-          m68k/m68332 (a.out, COFF, CPU32BUG, EST, ROM68K, VxWorks), MIPS
-          (ELF, IDT ecoff, PMON, VxWorks), PowerPC (PPCBug), Matra Sparclet,
-          Fujitsu SPARClite (a.out, COFF), WDC 65816, & Z8000.
-
-        * "host", but not "target": IBM RT/PC (AIX), HP/Apollo 68k (BSD), &
-          m68k Apple Macintosh (MacOS).  Sources for the manual,
-     `Debugging with GDB', and a reference card are included (*note
-     Documentation::.).
-
-   * `gdbm'   (SrcCD)
-
-     `gdbm' is the GNU replacement for the traditional `dbm' and `ndbm'
-     libraries.  It implements a database using quick lookup by hashing.
-     `gdbm' does not ordinarily make sparse files (unlike its Unix and BSD
-     counterparts).
-
-   * `gettext'    *Also *note Help the GNU Translation Project::.*   (SrcCD)
-
-     The GNU `gettext' tool set has everything maintainers need to
-     internationalize a package's user messages.  Once a package has been
-     internationalized, `gettext''s many tools help translators localize
-     messages to their native language and automate handling the translation
-     files.
-
-   * Generic NQS   (SrcCD)
-
-     Generic NQS is a network queuing system for spreading batch jobs across a
-     network of machines.  It is designed to be simple to install on a
-     heterogeneous network of machines, and has optimizations for running on
-     the high end, symmetric multiprocessing servers that are currently on the
-     market.  It is available for many more UNIX variants than any other
-     comparable product, and inter-operates with other NQS systems, including
-     Cray's NQE.
-
-   * `geomview'   *See* `http://www.geom.umn.edu/software/geomview'   (SrcCD)
-
-     `geomview' is an interactive geometry viewing program, for UNIX systems
-     with Motif, using X, GL, or OpenGL graphics.  It allows multiple
-     independently controllable objects and cameras.  `geomview' provides
-     interactive control for motion, appearances (including lighting,
-     shading, and materials), picking on an object, edge or vertex level, and
-     snapshots in PPM or SGI image files, Postscript, and Renderman RIB
-     format.  `geomview' can be controlled through direct mouse manipulation,
-     control panels, and keyboard shortcuts.  External programs can also
-     drive desired aspects of the viewer (such as continually loading
-     changing geometry or controlling the motion of certain objects) while
-     allowing interactive control of everything else.
-
-   * `gforth'   (SrcCD)
-
-     `gforth' is a fast, portable implementation of the ANS Forth language.
-
-   * Ghostscript   (SrcCD)
-
-     Ghostscript is an interpreter for the Postscript and PDF graphics
-     languages.
-
-     The current version of GNU Ghostscript, 3.33, includes nearly a full
-     Postscript Level 2 interpreter and a PDF 1.0 interpreter.  Significant
-     new features include: support for anti-aliased characters; the ability
-     to scan a directory and register all the fonts in it; support for Type 0
-     (Japanese / Chinese / Korean) fonts; and the ability to compile all the
-     external initialization files into the executable.  This version can
-     also run as a 32-bit MS Windows application.
-
-     Thanks to the generosity of URW++ (Hamburg, Germany), the low-quality
-     bitmap-derived fonts distributed with older versions have been replaced
-     with commercial-quality, hinted outline fonts.
-
-     Ghostscript executes commands in the Postscript language by writing
-     directly to a printer, drawing on an X window, or writing to files for
-     printing later or manipulating with other graphics programs.
-
-     Ghostscript includes a C-callable graphics library (for client programs
-     that do not want to deal with the Postscript language).  It also supports
-     i386/i486/Pentiums running DOS with EGA, VGA or SuperVGA graphics (but
-     please do *not* ask the FSF staff any questions about this; we do not
-     use DOS).
-
-   * Ghostview   (SrcCD)
-
-     Tim Theisen, `ghostview@cs.wisc.edu', created Ghostview, a previewer for
-     multi-page files with an X Window interface.  Ghostview & Ghostscript
-     work together; Ghostview creates a viewing window & Ghostscript draws in
-     it.
-
-   * GIT   (SrcCD)
-
-     The GNU Interactive Tools package includes: an extensible file system
-     browser, an ASCII/hex file viewer, a process viewer/killer, & other
-     related utilities & shell scripts.  It can be used to increase the speed
-     & efficiency of many daily tasks, such as copying & moving files &
-     directories, invoking editors, compressing/uncompressing files, creating
-     & expanding archives, compiling programs, sending mail, etc.  It looks
-     nice, has colors (if the standard ANSI color sequences are supported), &
-     is user-friendly.
-
-   * `gmp'   (SrcCD)
-
-     GNU `mp' is a library for arithmetic on arbitrary precision integers,
-     rational numbers, and floating-point numbers.  It has a rich set of
-     functions with a regular interface.
-
-     A major new release, version 2, came out in Spring '96.  Compared to
-     previous versions, it is much faster, contains lots of new functions, &
-     has support for arbitrary precision floating-point numbers.
-
-   * Gnans    (SrcCD)
-
-     Gnans is a program (and language) for the numerical study of
-     deterministic and stochastic dynamical systems.  The dynamical systems
-     may evolve in continuous or discrete time.  Gnans has graphical &
-     command line interfaces.
-
-   * GNAT: The GNU Ada Translator   (SrcCD)
-
-     GNAT, a front end for the entire Ada 95 language, including all special
-     needs annexes, is available via anonymous FTP from `cs.nyu.edu' and
-     various mirror sites in `/pub/gnat'.  SGI, DEC, and Siemens Nixdorf have
-     chosen GNU Ada 95 as the Ada compiler for their systems.  GNAT is
-     maintained by Ada Core Technologies.  For more information, see
-     `http://www.gnat.com'.
-
-   * GNATS   (SrcCD)
-
-     GNATS, GNats: A Tracking System, is a bug-tracking system.  It is based
-     upon the paradigm of a central site or organization which receives
-     problem reports and negotiates their resolution by electronic mail.
-     Although it has been used primarily as a software bug-tracking system so
-     far, it is sufficiently generalized that it could be used for handling
-     system administration issues, project management, or any number of other
-     applications.
-
-   * GNUMATH (`gnussl')   (SrcCD)
-
-     GNUMATH is a library (`gnussl') that simplifies scientific programming
-     in C & C++.  Its focus is on problems that can be solved by a
-     straight-forward application of numerical linear algebra.  It also
-     handles plotting.  It is in beta release; it is expected to grow more
-     versatile & offer a wider scope in time.
-
-   * `gnuplot'   (SrcCD)
-
-     `gnuplot' is an interactive program for plotting mathematical
-     expressions and data.  It plots both curves (2 dimensions) & surfaces (3
-     dimensions).  It was neither written nor named for the GNU Project; the
-     name is a coincidence.  Various GNU programs use `gnuplot'.
-
-   * `gnuserv'   (SrcCD)
-
-     `gnuserv' is an enhanced version of Emacs' `emacsclient' program.  It
-     lets the user direct a running Emacs to edit files or evaluate arbitrary
-     Emacs Lisp constructs from another process.
-
-   * GnuGo   (SrcCD)
-
-     GnuGo plays the game of Go.  It is not yet very sophisticated.
-
-   * `gperf'   (SrcCD)
-
-     `gperf' generates perfect hash tables.  The C version is in package
-     cperf.  The C++ version is in libg++.  Both produce hash functions in
-     either C or C++.
-
-   * Graphics   (SrcCD)
-
-     GNU Graphics produces x-y plots from ASCII or binary data.  It outputs
-     in Postscript, Tektronix 4010 compatible, and Unix device-independent
-     "plot" formats.  It has a previewer for the X Window System.  Features
-     include a `spline' interpolation program; examples of shell scripts
-     using `graph' and `plot'; a statistics toolkit; and output in TekniCAD
-     TDA and ln03 file formats.  Email bugs or queries to Rich Murphey,
-     `Rich@lamprey.utmb.edu'.
-
-   * grep   (SrcCD)
-
-     This package has GNU `grep', `egrep', and `fgrep', which find lines that
-     match entered patterns.  They are much faster than the traditional Unix
-     versions.
-
-   * Groff   (SrcCD)
-
-     Groff is a document formatting system based on a device-independent
-     version of `troff', & includes: `eqn', `nroff', `pic', `refer', `tbl',
-     `troff'; the `man', `ms', & `mm' macros; & drivers for Postscript, TeX
-     `dvi' format, the LaserJet 4 series of printers, and typewriter-like
-     devices.  Groff's `mm' macro package is almost compatible with the DWB
-     `mm' macros with several extensions.  Also included is a modified
-     version of the Berkeley `me' macros and an enhanced version of the X11
-     `xditview' previewer.  Written in C++, these programs can be compiled
-     with GNU C++ Version 2.7.2 or later.
-
-     Groff users are encouraged to contribute enhancements.  Most needed are
-     complete Texinfo documentation, a `grap' emulation (a `pic' preprocessor
-     for typesetting graphs), a page-makeup postprocessor similar to `pm'
-     (see `Computing Systems', Vol. 2, No. 2; ask `office@usenix.org' how to
-     get a copy), and an ASCII output class for `pic' to integrate `pic' with
-     Texinfo.  Questions and bug reports from users who have read the
-     documentation provided with Groff can be sent to
-     `bug-groff@prep.ai.mit.edu'.
-
-   * `gzip'   (SrcCD)
-
-     `gzip' can expand LZW-compressed files but uses another, unpatented
-     algorithm for compression which generally produces better results.  It
-     also expands files compressed with System V's `pack' program.
-
-   * `hello'   (SrcCD)
-
-     The GNU `hello' program produces a familiar, friendly greeting.  It
-     allows non-programmers to use a classic computer science tool which would
-     otherwise be unavailable to them.  Because it is protected by the GNU
-     General Public License, users are free to share and change it.  `hello'
-     is also a good example of a program that meets the GNU coding standards.
-     Like any truly useful program, `hello' contains a built-in mail reader.
-
-   * `hp2xx'   (SrcCD)
-
-     GNU `hp2xx' reads HP-GL files, decomposes all drawing commands into
-     elementary vectors, and converts them into a variety of vector and raster
-     output formats.  It is also an HP-GL previewer.  Currently supported
-     vector formats include encapsulated Postscript, Uniplex RGIP, Metafont,
-     various special TeX-related formats, and simplified HP-GL (line drawing
-     only) for imports.  Raster formats supported include IMG, PBM, PCX, &
-     HP-PCL (including Deskjet & DJ5xxC support).  Previewers work under X11
-     (Unix), OS/2 (PM & full screen), & MS-DOS (SVGA, VGA, & HGC).
-
-   * HylaFAX   *Also see* `http://www.vix.com/hylafax/'   (SrcCD)
-
-     HylaFAX (once named FlexFAX) is a facsimile system for Unix systems.  It
-     supports sending, receiving, & polled retrieval of facsimile, as well as
-     transparent shared data use of the modem.
-
-   * Hyperbole   (SrcCD)
-
-     Hyperbole, written by Bob Weiner in Emacs Lisp, is an open, efficient,
-     programmable information management, autonumbered outliner, & hypertext
-     system, intended for everyday work on any platform Emacs runs on.
-
-   * ID Utils   (SrcCD)
-
-     ID Utils is a package of simple, fast, high-capacity,
-     language-independent tools that index program identifiers, literal
-     numbers, or words of human-readable text.  Queries can be issued from
-     the command-line, or from within Emacs, serving as an augmented tags
-     facility.
-
-   * `indent'   (SrcCD)
-
-     GNU `indent' formats C source code into the GNU, BSD, K&R, or your own
-     special indentation style.  GNU `indent' is more robust & provides more
-     functionality than other such programs, including handling C++ comments.
-     It runs on Unix, DOS, VMS and ATARI systems.
-
-     The next version will also format C++ source code.  A Java version may
-     be considered in the future.
-
-   * Inetutils   (SrcCD)
-
-     Inetutils has common networking utilities & servers.
-
-     This release is mainly support the GNU Hurd, which is source compatible
-     with BSD in many ways, & will probably only work on systems that are
-     similarly compatible.
-
-   * Ispell   (SrcCD)
-
-     Ispell is an interactive spell checker that suggests "near misses" to
-     replace unrecognized words.  System & user-maintained dictionaries for
-     multiple languages can be used.  Standalone & Emacs interfaces are
-     available.
-
-   * JACAL   *Not available from the FSF except by FTP*
-
-     JACAL is a symbolic mathematics system for the manipulation &
-     simplification of algebraic equations & expressions.  It is written in
-     Scheme using the SLIB portable Scheme Library.  JACAL comes with SCM, an
-     IEEE P1178 & R4RS compliant Scheme implementation written in C.  SCM runs
-     on Amiga, Atari-ST, MacOS, MS-DOS, OS/2, NOS/VE, Unicos, VMS, Unix, &
-     similar systems.
-
-     The FSF is not distributing JACAL on any physical media.  You can FTP it
-     or get it from the Web site below.  Documentation is at
-     `http://www-swiss.ai.mit.edu/~jaffer/JACAL.html'.
-
-   * Karma   (SrcCD)
-
-     Karma is a signal and image processing library and visualization toolkit
-     that provides interprocess communications, authentication, graphics
-     display, and user interface to and manipulation of the Karma network
-     data structure. Several foreign data formats are also supported.  Karma
-     comes packaged with a number of generic visualization tools and some
-     astronomy-specific tools.
-
-   * `less'   (SrcCD)
-
-     `less' is a display paginator similar to `more' and `pg', but with
-     various features (such as the ability to scroll backwards) that most
-     pagers lack.
-
-   * Lynx   *Also see* `http://www.cc.ukans.edu/about_lynx'  (SrcCD)
-
-     Lynx is a text-only World Wide Web browser for those running
-     character-only ("cursor-addressable") terminals or terminal emulators.
-
-   * `m4'   (SrcCD)
-
-     GNU `m4' is an implementation of the traditional Unix macro processor.
-     It is mostly SVR4 compatible, although it has some extensions (e.g.,
-     handling more than 9 positional parameters to macros).  `m4' also has
-     built-in functions for including files, running shell commands, doing
-     arithmetic, etc.
-
-   * `make'   (BinCD, SrcCD) [FSFman]
-
-     GNU `make' supports POSIX 1003.2 and has all but a few obscure features
-     of the BSD and System V versions of `make', and runs on MS-DOS,
-     AmigaDOS, VMS, & Windows NT or 95, as well as all Unix-compatible
-     systems.  GNU extensions include long options, parallel compilation,
-     flexible implicit pattern rules, conditional execution, & powerful text
-     manipulation functions.  Source for the `Make Manual' comes with the
-     program (*note Documentation::.).
-
-   * MandelSpawn   (SrcCD)
-
-     A parallel Mandelbrot generation program for the X Window System.
-
-   * Maxima   (SrcCD)
-
-     Maxima is a Common Lisp implementation of MIT's Macsyma system for
-     computer based algebra.
-
-   * Meta-HTML   (SrcCD)
-
-     <Meta-HTML> is a programming language specifically designed for working
-     within the World Wide Web environment.  Although it is a genuine
-     programming language, suitable for large-scale symbolic manipulation, it
-     provides the most commonly wanted Web functionality as built-in
-     primitives, so you don't have to write them.
-
-   * Midnight Commander (`mc')   (SrcCD)
-
-     The Midnight Commander is a user friendly & colorful Unix file manager &
-     shell, useful to novice & guru alike.  It has a built-in virtual file
-     system that manipulates files inside tar files or files on remote
-     machines using the FTP protocol.  This mechanism is extendable with
-     external Unix programs.
-
-   * Miscellaneous Files Distribution   (SrcCD)
-
-     The GNU Miscellaneous Files are non-crucial files that are common on
-     various systems, including word lists, airport codes, ZIP codes etc.
-
-   * `mkisofs'   (SrcCD)
-
-     `mkisofs' is a pre-mastering program to generate an ISO 9660 file system.
-     It takes a snapshot of a directory tree, and makes a binary image which
-     corresponds to an ISO 9660 file system when written to a block device.
-
-     It can also generate the System Use Sharing Protocol records of the Rock
-     Ridge Interchange Protocol (used to further describe the files in an ISO
-     9660 file system to a Unix host; it provides information such as longer
-     filenames, uid/gid, permissions, and device nodes).
-
-     The `mkisofs' program is often used with `cdwrite'.  The `cdwrite'
-     program works by taking the image that `mkisofs' generates and driving a
-     cdwriter drive to actually burn the disk.  `cdwrite' works under
-     GNU/Linux, and supports popular cdwriter drives.  Older versions of
-     `cdwrite' were included with older versions of `mkisofs';
-     `sunsite.unc.edu' has the latest version:
-     `/pub/Linux/utils/disk-management/cdwrite-2.0.tar.gz'.
-
-   * `mtools'   (SrcCD)
-
-     `mtools' is a set of public domain programs to allow Unix systems to
-     read, write, and manipulate files on an MS-DOS file system (usually a
-     diskette).
-
-   * MULE   (SrcCD)
-
-     MULE is a MULtilingual Enhancement to GNU Emacs.  MULE text buffers can
-     contain a mix of characters from many languages including: Japanese,
-     Chinese, Korean, Vietnamese, Thai, modern European languages (including
-     Greek & Russian), Arabic, & Hebrew.  MULE also provides input methods
-     for all of them.  MULE is being merged into GNU Emacs.  *Note GNU &
-     Other Free Software in Japan::, for more information about MULE.
-
-   * `ncurses'   (SrcCD)
-
-     `ncurses' implements the Unix `curses' API for developing screen-based
-     programs that are terminal independent.  It is not merely an emulation
-     of old (BSD) curses/termcap, but is fully compatible with SVR4
-     curses/terminfo.  It includes color, multiple-highlight, & xterm
-     mouse-event support.
-
-   * NetHack   (SrcCD)
-
-     NetHack is a Rogue-like adventure game supporting character & X displays.
-
-   * NIH Class Library   (SrcCD)
-
-     The NIH Class Library is a set of C++ classes (similar to
-     Smalltalk-80's) written in C++ by Keith Gorlen of the National Institutes
-     of Health (NIH).
-
-   * `nvi'   (SrcCD)
-
-     `nvi' is an implementation of the `ex'/`vi' Unix editor.  It has all the
-     functionality of the original `ex'/`vi', except `open' mode & the `lisp'
-     edit option.  Enhancements include multiple buffers, command-line
-     editing & path completion, integrated Perl5 & Tcl scripting languages,
-     Cscope support & tag stacks, 8-bit data support, infinite file/line
-     lengths, infinite undo, language catalogs, incremental search, extended
-     regular expressions, and security fixes.  It uses Autoconf for
-     configuration and runs on any Unix-like system.
-
-   * Oaklisp    (SrcCD)
-
-     Oaklisp is a fast, portable, object-oriented Scheme with first class
-     types.
-
-   * Objective-C Library   (SrcCD)
-
-     Our Objective-C Class Library (`gstep-base.tar.gz', `libgnustep-base')
-     has general-purpose, non-graphical Objective-C objects written by Andrew
-     McCallum & others.  It includes collection classes for maintaining
-     groups of objects, I/O streams, coders for formatting objects & C types
-     to streams, ports for network packet transmission, distributed objects
-     (remote object messaging), string classes, invocations, notifications,
-     event loops, timers, exceptions, pseudo-random number generators, &
-     more.  It has the base classes for the GNUstep project; all but a few of
-     them have already been written.  Send queries & bugs to
-     `mccallum@gnu.ai.mit.edu'.  See "GNUstep" in *Note Forthcoming GNUs::.
-
-   * OBST   (SrcCD)
-
-     OBST is a persistent object management system with bindings to C++.
-     OBST supports incremental loading of methods.  Its graphical tools
-     require the X Window System.  It features a hands-on tutorial including
-     sample programs.  It compiles with G++, and should install easily on
-     most Unix platforms.
-
-   * Octave   *Also see* `http://www.che.wisc.edu/octave'   (SrcCD)
-
-     Octave does arithmetic for real and complex scalars and matrices, solves
-     sets of nonlinear algebraic equations, integrates systems of ordinary
-     differential & differential-algebraic equations, and integrates
-     functions over finite & infinite intervals.  Two- & three-dimensional
-     plotting is available using `gnuplot'.
-
-     Version 2.0 of Octave was released in December '96.  It includes support
-     for dynamically linked functions, user-defined data types, many new
-     functions, & a completely revised manual.  Octave works on most Unix
-     systems & OS/2.  A port to Windows NT/95 is underway.
-
-   * Oleo     (SrcCD)
-
-     Oleo is a spreadsheet program (better for you than the more expensive
-     spreadsheets).  It supports the X Window System and character-based
-     terminals, and can output Embedded Postscript renditions of spreadsheets.
-     Keybindings should be familiar to Emacs users and are configurable.
-     Oleo supports multiple variable-width fonts when used under the X Window
-     System or outputting to Postscript devices.
-
-   * `p2c'   (SrcCD)
-
-     `p2c' is Dave Gillespie's Pascal-to-C translator.  It inputs many
-     dialects (HP, ISO, Turbo, VAX, etc.)  & generates readable,
-     maintainable, portable C.
-
-   * `patch'   (SrcCD)
-
-     `patch' is our version of Larry Wall's program to take `diff''s output
-     and apply those differences to an original file to generate the modified
-     version.
-
-   * PCL   (SrcCD)
-
-     PCL is a free implementation of a large subset of CLOS, the Common Lisp
-     Object System.  It runs under both GCL and CLISP, mentioned above.
-
-   * `perl'   (SrcCD)
-
-     Larry Wall's `perl' combines the features & capabilities of C, `sed',
-     `awk', & `sh', and provides interfaces to the Unix system calls & many C
-     library routines.
-
-   * `pine'   *Also *note Bad News and Good News about Pine::.*   (SrcCD)
-
-     `pine' is a friendly menu-driven electronic mail manager and user
-     interface.
-
-   * `ptx'    *Also *note Forthcoming GNUs::.*   (SrcCD)
-
-     GNU `ptx' is our version of the traditional permuted index generator.
-     It handles multiple input files at once, has TeX compatible output, &
-     outputs readable "KWIC" (KeyWords In Context) indexes without using
-     `nroff'.
-
-     It does not yet handle input files that do not fit in memory all at once.
-
-   * `rc'   (SrcCD)
-
-     `rc' is a shell that features a C-like syntax (much more so than `csh')
-     and far cleaner quoting rules than the C or Bourne shells.  It's
-     intended to be used interactively, but is also great for writing
-     scripts.  It inspired the shell `es'.
-
-   * RCS   (SrcCD)
-
-     RCS, the Revision Control System, is used for version control &
-     management of software projects.  Used with GNU `diff', RCS can handle
-     binary files (8-bit data, executables, object files, etc).  RCS now
-     conforms to GNU configuration standards & to POSIX 1003.1b-1993.  Also
-     see the CVS item above.
-
-   * `recode'    *Also *note Forthcoming GNUs::.*   (SrcCD)
-
-     GNU `recode' converts files between character sets and usages.  When
-     exact transliterations are not possible, it may delete the offending
-     characters or fall back on approximations.  This program recognizes or
-     outputs nearly 150 different character sets and is able to transliterate
-     files between almost any pair.  Most RFC 1345 character sets are
-     supported.
-
-   * `regex'   (SrcCD)
-
-     The GNU regular expression library supports POSIX.2, except for
-     internationalization features.  It is included in many GNU programs which
-     do regular expression matching & is available separately.  An alternate
-     regular expression package, `rx', is faster than `regex' in many cases;
-     we were planning to replace `regex' with `rx', but it is not certain
-     this will happen.
-
-   * Roxen   (SrcCD)
-
-     Roxen is a modularized, object-oriented, non-forking World Wide Web
-     server with high performance and throughput.  It was formerly named
-     Spinner, but was renamed for trademark reasons.
-
-   * `rx'   (SrcCD)
-
-     Tom Lord has written `rx', a new regular expression library which is
-     faster than the older GNU `regex' library.  It is being distributed with
-     `sed'.  `rx' is also an installation option for `fileutils', `id-utils',
-     and `textutils', and maybe for future versions of `cpio', `m4' and `ptx'.
-
-   * SAOimage   (SrcCD)
-
-     SAOimage is an X-based astronomical image viewer.  It reads array data
-     images, which may be in specific formats, and displays them with a
-     pseudocolor colormap.  There is full interactive control of the
-     colormap, panning and zooming, graphical annotation, and cursor tracking
-     in pixel and sky coordinates, among other features.
-
-   * Scheme   (SrcCD)
-
-     Scheme is a simplified, lexically-scoped dialect of Lisp.  It was
-     designed at MIT and other universities to teach students the art of
-     programming and to research new parallel programming constructs and
-     compilation techniques.
-
-     We now distribute MIT Scheme 7.3, which conforms to the "Revised^4
-     Report On the Algorithmic Language Scheme" (MIT AI Lab Memo 848b), for
-     which TeX source is included.  It is written partly in C, but is
-     presently hard to bootstrap.  Binaries to bootstrap it exist for: HP9000
-     series 300, 400, 700, & 800 (running HP-UX 9.0), NeXT (NeXT OS 2 or 3.2),
-     DEC Alpha (OSF/1), IBM RS/6000 (AIX), Sun-3 or Sun-4 (SunOS 4.1),
-     DECstation 3100/5100 (Ultrix 4.0), Sony NeWS-3250 (NEWS OS 5.01), &
-     Intel i386 (MS-DOS, Windows 3.1 or NT).  If your system isn't on this
-     list & you don't enjoy the bootstrap challenge, see "JACAL" earlier in
-     this article.
-
-   * `screen'   (SrcCD)
-
-     `screen' is a terminal multiplexer that runs several separate "screens"
-     (ttys) on a single character-based terminal.  Each virtual terminal
-     emulates a DEC VT100 plus several ISO 2022 and ISO 6429 (ECMA 48, ANSI
-     X3.64) functions, including color.  Arbitrary keyboard input translation
-     is also supported.  `screen' sessions can be detached and resumed later
-     on a different terminal type.  Output in detached sessions is saved for
-     later viewing.
-
-   * `sed'   (SrcCD)
-
-     `sed' is a stream-oriented version of `ed'.  It comes with the `rx'
-     library.
-
-   * Sharutils   (SrcCD)
-
-     `shar' makes so-called shell archives out of many files, preparing them
-     for transmission by electronic mail services; `unshar' helps unpack
-     these shell archives after reception.  `uuencode' and `uudecode' are
-     POSIX compliant implementations of a pair of programs which transform
-     files into a format that can be safely transmitted across a 7-bit ASCII
-     link.
-
-   * Shellutils   (SrcCD)
-
-     The Shellutils are: `basename', `chroot', `date', `dirname', `echo',
-     `env', `expr', `factor', `false', `groups', `hostname', `id', `logname',
-     `nice', `nohup', `pathchk', `printenv', `printf', `pwd', `seq', `sleep',
-     `stty', `su', `tee', `test', `true', `tty', `uname', `uptime', `users',
-     `who', `whoami', & `yes'.
-
-   * Shogi   (SrcCD)
-
-     Shogi is a Japanese game similar to Chess; a major difference is that
-     captured pieces can be returned into play.
-
-     GNU Shogi is a variant of GNU Chess; it implements the same features &
-     similar heuristics.  As a new feature, sequences of partial board
-     patterns can be introduced to help the program play toward specific
-     opening patterns.  It has both character and X display interfaces.
-
-     It is primarily supported by Matthias Mutz on behalf of the FSF.
-
-   * SIPP    (SrcCD)
-
-     SIPP is a library for photorealisticly rendering 3D scenes.  Scenes can
-     be illuminated by an arbitrary number of light sources; they are built up
-     of object hierarchies, with arbitrarily many subobjects and subsurfaces.
-     Surfaces can be rendered with either Phong, Gouraud, or flat shading.
-     The library supports programmable shaders and texture mapping.
-
-   * Smail   (SrcCD)
-
-     Smail is a mail transport system, designed as a compatible drop-in
-     replacement for `sendmail'.  It uses a much simpler configuration format
-     than `sendmail' and is designed to be setup with minimal effort.
-
-   * Smalltalk   *Also *note Forthcoming GNUs::.*   (SrcCD)
-
-     GNU Smalltalk is an interpreted object-oriented programming language
-     system written in highly portable C.  It has been ported to DOS, many
-     Unix, & other OSes.  Features include a binary image save capability,
-     the ability to call user-written C code with parameters, an Emacs
-     editing mode, a version of the X protocol invocable from Smalltalk,
-     optional byte-code compilation and/or execution tracing, & automatically
-     loaded per-user initialization files.  It implements all of the classes
-     & protocol in the book "Smalltalk-80: The Language", except for the
-     graphic user interface (GUI) related classes.
-
-   * SNePS    (SrcCD)
-
-     SNePS is the Semantic Network Processing System.  It is an
-     implementation of a fully intensional theory of propositional knowledge
-     representation and reasoning.  SNePS runs under CLISP or GCL.
-
-   * Superopt   (SrcCD)
-
-     Superopt is a function sequence generator that uses an exhaustive
-     generate-and-test approach to find the shortest instruction sequence for
-     a given function.  You provide a function as input, a CPU to generate
-     code for, and how many instructions you want.  Its use in GCC is
-     described in the `ACM SIGPLAN PLDI'92 Proceedings'.  It supports: SPARC,
-     m68k, m68020, m88k, IBM POWER and PowerPC, AMD 29k, Intel x86 & 960,
-     Pyramid, DEC Alpha, Hitachi SH, & HP-PA.
-
-   * `stow'   (SrcCD)
-
-     `stow' manages the installation of software packages, keeping them
-     separate while making them appear to be installed in the same place.
-
-   * `tar'   (SrcCD)
-
-     GNU `tar' includes multi-volume support, the ability to archive sparse
-     files, compression/decompression, remote archives, and special features
-     that allow `tar' to be used for incremental and full backups.  GNU `tar'
-     uses an early draft of the POSIX 1003.1 `ustar' format which is
-     different from the final version.  This will be corrected in the future.
-
-   * Termcap Library   (SrcCD)   [FSFman]
-
-     The GNU Termcap library is a drop-in replacement for `libtermcap.a' on
-     any system.  It does not place an arbitrary limit on the size of Termcap
-     entries, unlike most other Termcap libraries.  Included is source for the
-     `Termcap Manual' in Texinfo format (*note Documentation::.).
-
-   * Termutils   (SrcCD)
-
-     The Termutils package contains programs for controlling terminals.
-     `tput' is a portable way for shell scripts to use special terminal
-     capabilities.  `tabs' is a program to set hardware terminal tab settings.
-
-   * TeX   (SrcCD)
-
-     TeX is a document formatting system that handles complicated
-     typesetting, including mathematics.  It is GNU's standard text formatter.
-
-     The University of Washington maintains & supports a tape distribution of
-     TeX for Unix systems.  The core material is Karl Berry's `web2c' TeX
-     package.  Sources are available via anonymous FTP; retrieval
-     instructions are in `/pub/tex/unixtex.ftp' on `ftp.cs.umb.edu'.  If you
-     receive any installation support from the University of Washington,
-     consider sending them a donation.
-
-     To order a full distribution written in `tar' on either a 1/4inch
-     4-track QIC-24 cartridge or a 4mm DAT cartridge, send $210.00 to:
-
-          Pierre A. MacKay
-          Department of Classics
-          DH-10, Denny Hall 218
-          University of Washington
-          Seattle, WA   98195
-          USA
-          
-          Electronic-Mail: `mackay@cs.washington.edu'
-          Telephone: +1-206-543-2268
-
-     Please make checks payable to: `University of Washington'.  Do not
-     specify any other payee.  That causes accounting problems.  Checks must
-     be in U.S. dollars, drawn on a U.S. bank.  Only prepaid orders can be
-     handled.  Overseas sites: please add to the base cost $20.00 to ship via
-     air parcel post or $30.00 to ship via courier.  Please check with the
-     above for current prices & formats.
-
-   * Texinfo   (SrcCD)   [FSFman]
-
-     Texinfo is a set of utilities (`makeinfo', `info', `install-info',
-     `texi2dvi', `texindex', & `texinfmt.el') which generate printed manuals,
-     plain ASCII text, & online hypertext documentation (called "Info"), &
-     can read online Info documents; Info files can also be read in Emacs.
-     Version 3 has both Emacs Lisp & standalone programs written in C or as
-     shell scripts.  Texinfo mode for Emacs enables easy editing & updating
-     of Texinfo files.  Source for the `Texinfo Manual' is included (*note
-     Documentation::.).
-
-   * Textutils   (SrcCD)
-
-     The Textutils programs manipulate textual data.  They include: `cat',
-     `cksum', `comm', `csplit', `cut', `expand', `fmt', `fold', `head',
-     `join', `md5sum', `nl', `od', `paste', `pr', `sort', `split', `sum',
-     `tac', `tail', `tr', `unexpand', `uniq', and `wc'.
-
-   * TIFF library   (SrcCD)
-
-     The TIFF library, `libtiff', is a library for manipulating Tagged Image
-     File Format files, a commonly used bitmap graphics format.
-
-   * Tile Forth   (SrcCD)
-
-     Tile Forth is a 32-bit implementation of the Forth-83 standard written
-     in C, allowing it to be easily ported to new systems & extended with any
-     C-function (graphics, windowing, etc).
-
-     Many documented Forth libraries are available, e.g. top-down parsing,
-     multi-threads, & object-oriented programming.
-
-   * `time'   (SrcCD)
-
-     `time' reports (usually from a shell) the user, system, & real time used
-     by a process.  On some systems it also reports memory usage, page
-     faults, etc.
-
-   * `ucblogo'   (SrcCD)
-
-     `ucblogo' implements the classic teaching language, Logo.
-
-   * UUCP   (SrcCD)
-
-     GNU's UUCP system (written by Ian Lance Taylor) supports the `f', `g'
-     (all window & packet sizes), `v', `G', `t', `e', Zmodem, & two new
-     bidirectional (`i' & `j') protocols.  With a BSD sockets library, it can
-     make TCP connections.  With TLI libraries, it can make TLI connections.
-     Source is included for a manual (not yet published by the FSF).
-
-   * viewfax   (SrcCD)
-
-     Viewfax is a tool for displaying fax files on an X display.  It can
-     display raw, digifax or tiff/f files, such as those received by HylaFAX.
-
-   * W3   (SrcCD)
-
-     W3 (written by William Perry in Emacs Lisp) is an extensible, advanced
-     World Wide Web browser that runs as part of Emacs.  It understands many
-     protocols & file formats: FTP, gopher, HTML, SMTP, Telnet, WAIS, etc.
-
-   * `wdiff'   (SrcCD)
-
-     `wdiff' is a front-end to GNU `diff'.  It compares two files, finding
-     the words deleted or added to the first to make the second.  It has many
-     output formats and works well with terminals and pagers.  `wdiff' is
-     very useful when two texts differ only by a few words and paragraphs
-     have been refilled.
-
-   * `wget'   (SrcCD)
-
-     `wget' non-interactively retrieves files from the WWW using HTTP & FTP.
-     It is suitable for use in shell scripts.
-
-   * `windows32api'   (SrcCD)
-
-     `windows32' is a set of header files & import libraries that can be used
-     by GNU tools for compiling & linking programs to be run on Windows NT/95.
-
-   * WN   (SrcCD)
-
-     WN is a World Wide Web server designed to be secure and flexible.  It
-     offers many different capabilities in pre-parsing files before passing
-     them to the client, and has a very different design from Apache and the
-     NCSA server.
-
-   * X11   (SrcCD)
-
-     We distribute Version 11, Release 6.3 of the X Window System with the
-     latest patches & bug fixes.  X11 includes all of the core software,
-     documentation, contributed clients, libraries, & toolkits, games, etc.
-
-     While supplies last, we will distribute X11R5 on the November 1993
-     Source Code CD-ROM.
-
-   * `xboard'   (SrcCD)
-
-     `xboard' is a graphical chessboard for X Windows.  It can serve as a
-     user interface to the Crafty or GNU chess programs, the Internet Chess
-     Servers, e-mail correspondence chess, or games saved in Portable Game
-     Notation.
-
-   * `xgrabsc'   (SrcCD)
-
-     `xgrabsc' is a screen capture program similar to `xwd' but with a
-     graphical user interface, more ways of selecting the part of the screen
-     to capture, & different types of output: Postscript, color Postscript,
-     xwd, bitmap, pixmap, & puzzle.
-
-   * `xinfo'   (SrcCD)
-
-     `xinfo' is an X-windows program for reading Info files.  It uses a
-     special widget, which is available for use in other programs.
-
-   * `xshogi'   (SrcCD)
-
-     `xshogi' is a graphical Shogi (Japanese Chess) board for the X Window
-     System.  It can serve as a user interface to GNU Shogi, as a referee for
-     games between two humans, or as a client for the Internet Shogi Server.
-
-   * `Ygl'   (SrcCD)
-
-     `Ygl' emulates a subset of SGI's GL (Graphics Language) library under
-     X11 on most platforms with an ANSI C compiler (including GCC).  It has
-     most two-dimensional graphics routines, the queue device & query
-     routines, double buffering, RGB mode with dithering, FORTRAN bindings,
-     etc.
-
-
-Program/Package Cross Reference
-*******************************
-
-Here is a list of the package each GNU program or library is in.  You can FTP
-the current list in the file `/pub/gnu/ProgramIndex' from a GNU FTP host
-(listed in *Note How to Get GNU Software::).
-
-        * 4dview geomview
-     
-        * a2p perl
-        * a2x xopt
-        * ac bsd44
-        * accton bsd44
-        * ackpfd phttpd
-        * acl bsd44
-        * acm acm
-        * acms acm
-        * addbbox geomview
-        * addftinfo Groff
-        * adventure bsd44
-        * afm2tfm TeX
-        * aid ID Utils
-        * amd bsd44
-        * ansitape bsd44
-        * AnswerGarden xopt
-        * apply bsd44
-        * appres xreq
-        * apropos bsd44
-        * ar Binutils
-        * arithmetic bsd44
-        * arp bsd44
-        * atc bsd44
-        * authwn WN
-        * autoconf Autoconf
-        * autoheader Autoconf
-        * automake Automake
-        * autoreconf Autoconf
-        * autoscan Autoconf
-        * autoupdate Autoconf
-        * auto_box xopt
-        * auto_box xreq
-     
-        * b2m Emacs
-        * backgammon bsd44
-        * bad144 bsd44
-        * badsect bsd44
-        * banner bsd44
-        * basename Shellutils
-        * bash BASH
-        * battlestar bsd44
-        * bc bc
-        * bcd bsd44
-        * bdes bsd44
-        * bdftops Ghostscript
-        * beach_ball xopt
-        * beach_ball xreq
-        * beach_ball2 xopt
-        * bibtex TeX
-        * biff bsd44
-        * bison Bison
-        * bitmap xreq
-        * boggle bsd44
-        * bpltobzr Fontutils
-        * bugfiler bsd44
-        * buildhash Ispell
-        * bzrto Fontutils
-     
-        * c++ GCC
-        * c++filt Binutils
-        * c2ph perl
-        * ca100 xopt
-        * caesar bsd44
-        * cal bsd44
-        * calendar bsd44
-        * canfield bsd44
-        * cat Textutils
-        * cbars wdiff
-        * cc GCC
-        * cc1 GCC
-        * cc1obj GCC
-        * cc1plus GCC
-        * cccp GCC
-        * cdwrite mkisofs
-        * cfengine cfengine
-        * cgi Spinner
-        * charspace Fontutils
-        * checknr bsd44
-        * chess bsd44
-        * chflags bsd44
-        * chgrp Fileutils
-        * ching bsd44
-        * chmod Fileutils
-        * chown Fileutils
-        * chpass bsd44
-        * chroot bsd44
-        * ci RCS
-        * cksum Textutils
-        * cktyps g77
-        * clisp CLISP
-        * clri bsd44
-        * cmail xboard
-        * cmmf TeX
-        * cmodext xopt
-        * cmp Diffutils
-        * co RCS
-        * col bsd44
-        * colcrt bsd44
-        * colrm bsd44
-        * column bsd44
-        * comm Textutils
-        * compress bsd44
-        * comsat bsd44
-        * connectd bsd44
-        * cp Fileutils
-        * cpicker xopt
-        * cpio cpio
-        * cpp GCC
-        * cppstdin perl
-        * cribbage bsd44
-        * crock xopt
-        * csh bsd44
-        * csplit Textutils
-        * ctags Emacs
-        * ctwm xopt
-        * cu UUCP
-        * cut Textutils
-        * cvs CVS
-        * cvscheck CVS
-        * cvtmail Emacs
-        * cxterm xopt
-     
-        * d Fileutils
-        * date Shellutils
-        * dc bc
-        * dd Fileutils
-        * ddd DDD
-        * defid ID Utils
-        * delatex TeX
-        * demangle Binutils
-        * descend CVS
-        * detex TeX
-        * df Fileutils
-        * dhtppd phttpd
-        * diff Diffutils
-        * diff3 Diffutils
-        * diffpp enscript
-        * digest-doc Emacs
-        * dipress bsd44
-        * dir Fileutils
-        * dircolors Fileutils
-        * dirname Shellutils
-        * dish xopt
-        * disklabel bsd44
-        * diskpart bsd44
-        * dld dld
-        * dm bsd44
-        * dmesg bsd44
-        * doschk doschk
-        * dox xopt
-        * du Fileutils
-        * dump bsd44
-        * dump mkisofs
-        * dumpfs bsd44
-        * dvi2tty TeX
-        * dvicopy TeX
-        * dvips TeX
-        * dvitype TeX
-     
-        * ecc ecc
-        * echo Shellutils
-        * ed ed
-        * edit-pr GNATS
-        * editres xreq
-        * edquota bsd44
-        * eeprom bsd44
-        * egrep grep
-        * eid ID Utils
-        * emacs Emacs
-        * emacsclient Emacs
-        * emacsserver Emacs
-        * emacstool Emacs
-        * emu xopt
-        * enscript enscript
-        * env Shellutils
-        * eqn Groff
-        * error bsd44
-        * es es
-        * esdebug es
-        * etags Emacs
-        * ex nvi
-        * example geomview
-        * exicyclog Exim
-        * exigrep Exim
-        * exim Exim
-        * eximon Exim
-        * eximon Exim
-        * eximstats Exim
-        * exinext Exim
-        * exiwhat Exim
-        * expand Textutils
-        * expect DejaGnu
-        * expr Shellutils
-        * exterm xopt
-     
-        * f2c f2c
-        * factor bsd44
-        * fakemail Emacs
-        * false Shellutils
-        * fastboot bsd44
-        * fax2ps HylaFAX
-        * faxalter HylaFAX
-        * faxanswer HylaFAX
-        * faxcover HylaFAX
-        * faxd HylaFAX
-        * faxd.recv HylaFAX
-        * faxmail HylaFAX
-        * faxquit HylaFAX
-        * faxrcvd HylaFAX
-        * faxrm HylaFAX
-        * faxstat HylaFAX
-        * fc f2c
-        * fdraw xopt
-        * ffe g77
-        * fgrep grep
-        * fid ID Utils
-        * file bsd44
-        * find Findutils
-        * find2perl perl
-        * finger Finger
-        * fingerd Finger
-        * fish bsd44
-        * fixfonts Texinfo
-        * fixinc.svr4 GCC
-        * fixincludes GCC
-        * flex flex
-        * flex++ flex
-        * flythrough geomview
-        * fmt bsd44
-        * fnid ID Utils
-        * fold Textutils
-        * font2c Ghostscript
-        * fontconvert Fontutils
-        * forth Tile Forth
-        * forthicon Tile Forth
-        * forthtool Tile Forth
-        * fortune bsd44
-        * fpr bsd44
-        * freq Ispell
-        * freqtbl Ispell
-        * from bsd44
-        * fsck bsd44
-        * fsplit bsd44
-        * fstat bsd44
-        * ftp bsd44
-        * ftp Inetutils
-        * ftpd bsd44
-        * ftpd Inetutils
-     
-        * g++ GCC
-        * gas Binutils
-        * gawk GAWK
-        * gcal gcal
-        * gcc GCC
-        * gcore bsd44
-        * gdb GDB
-        * genclass libg++
-        * geomstuff geomview
-        * gettext gettext
-        * getty bsd44
-        * gftodvi TeX
-        * gftopk TeX
-        * gftype TeX
-        * ghostview Ghostview
-        * gid ID Utils
-        * ginsu geomview
-        * git GIT
-        * gitaction GIT
-        * gitcmp GIT
-        * gitkeys GIT
-        * gitmatch GIT
-        * gitmount GIT
-        * gitps GIT
-        * gitredir GIT
-        * gitrgrep GIT
-        * gitview GIT
-        * gitwipe GIT
-        * gn GN
-        * gnans Gnans
-        * gnanslator Gnans
-        * gnats GNATS
-        * gnuchess Chess
-        * gnuchessc Chess
-        * gnuchessn Chess
-        * gnuchessr Chess
-        * gnuchessx Chess
-        * gnuclient gnuserv
-        * gnudoit gnuserv
-        * gnupdisp Shogi
-        * gnuplot gnuplot
-        * gnuplot_x11 gnuplot
-        * gnuserv gnuserv
-        * gnushogi Shogi
-        * gnushogir Shogi
-        * gnushogix Shogi
-        * go GnuGo
-        * gpc xopt
-        * gpc xreq
-        * gperf cperf
-        * gperf libg++
-        * gprof Binutils
-        * graffiti geomview
-        * graph Graphics
-        * grep grep
-        * grodvi Groff
-        * groff Groff
-        * grops Groff
-        * grotty Groff
-        * groups Shellutils
-        * gs Ghostscript
-        * gsbj Ghostscript
-        * gsdj Ghostscript
-        * gslj Ghostscript
-        * gslp Ghostscript
-        * gsnd Ghostscript
-        * gsrenderfont Fontutils
-        * gunzip gzip
-        * gvclock geomview
-        * gwm xopt
-        * gzexe gzip
-        * gzip gzip
-     
-        * h2ph perl
-        * h2pl perl
-        * hack bsd44
-        * hangman bsd44
-        * head Textutils
-        * hello hello
-        * hexdump bsd44
-        * hexl Emacs
-        * hinge geomview
-        * hostname Shellutils
-        * hp2xx hp2xx
-        * hterm xopt
-        * htmlencode phttpd
-        * httpd apache
-        * httpdecode phttpd
-     
-        * i18nOlwmV2 xopt
-        * i2mif xopt
-        * ico xopt
-        * ico xreq
-        * id Shellutils
-        * ident RCS
-        * ifconfig bsd44
-        * ifnames Autoconf
-        * ImageMagick xopt
-        * imageto Fontutils
-        * iman xopt
-        * imgrotate Fontutils
-        * indent indent
-        * indxbib Groff
-        * inetd bsd44
-        * inetd Inetutils
-        * info Texinfo
-        * inimf TeX
-        * init bsd44
-        * initex TeX
-        * inn bsd44
-        * install Fileutils
-        * iostat bsd44
-        * isodiag mkisofs
-        * isodump mkisofs
-        * ispell Ispell
-        * ixterm xopt
-        * ixx xopt
-     
-        * join Textutils
-        * jot bsd44
-        * jove bsd44
-     
-        * kdestroy bsd44
-        * kdump bsd44
-        * kermit bsd44
-        * kgames xopt
-        * kgmon bsd44
-        * kill bsd44
-        * kinit bsd44
-        * kinput2 xopt
-        * klist bsd44
-        * kpasswdd bsd44
-        * ksrvtgt bsd44
-        * kterm xopt
-        * ktrace bsd44
-     
-        * lam bsd44
-        * larn bsd44
-        * lasergnu gnuplot
-        * last bsd44
-        * lastcomm bsd44
-        * latex TeX
-        * lclock xopt
-        * ld Binutils
-        * leave bsd44
-        * less less
-        * lesskey less
-        * libavcall.a ffcall
-        * libbfd.a Binutils
-        * libbfd.a GDB
-        * libbzr.a Fontutils
-        * libc.a C Library
-        * libcompat.a bsd44
-        * libcurses.a bsd44
-        * libcurses.a ncurses
-        * libdcurses.a ncurses
-        * libedit.a bsd44
-        * libF77.a f2c
-        * libF77.a g77
-        * libg++.a libg++
-        * libgdbm.a gdbm
-        * libgf.a Fontutils
-        * libgmp.a gmp
-        * libgnanslib.a Gnans
-        * libgnussl.a gnussl
-        * libI77.a f2c
-        * libI77.a g77
-        * libkvm.a bsd44
-        * libm.a bsd44
-        * libncurses.a ncurses
-        * libnihcl.a NIHCL
-        * libnihclmi.a NIHCL
-        * libnihclvec.a NIHCL
-        * libnls.a xreq
-        * libobjects.a libobjects
-        * liboctave.a Octave
-        * liboldX.a xreq
-        * libpbm.a Fontutils
-        * libPEXt.a xopt
-        * libpk.a Fontutils
-        * libresolv.a bsd44
-        * librpc.a bsd44
-        * libsipp.a SIPP
-        * libtcl.a DejaGnu
-        * libtelnet.a bsd44
-        * libterm.a bsd44
-        * libtermcap.a Termcap
-        * libtfm.a Fontutils
-        * libtiff.a tiff
-        * libutil.a bsd44
-        * libvacall.a ffcall
-        * libWc.a xopt
-        * libwidgets.a Fontutils
-        * libX.a xreq
-        * libXau.a xreq
-        * libXaw.a xreq
-        * libXcp.a xopt
-        * libXcu.a xopt
-        * libXdmcp.a xreq
-        * libXmp.a xopt
-        * libXmu.a xreq
-        * libXO.a xopt
-        * libXop.a xopt
-        * libXp.a xopt
-        * libXpex.a xopt
-        * libXt.a xopt
-        * libXt.a xreq
-        * libXwchar.a xopt
-        * liby.a bsd44
-        * libYgl.a Ygl
-        * lid ID Utils
-        * limn Fontutils
-        * listres xopt
-        * listres xreq
-        * lkbib Groff
-        * ln Fileutils
-        * locate Findutils
-        * lock bsd44
-        * logcvt-ip2n phttpd
-        * logger bsd44
-        * login bsd44
-        * logname Shellutils
-        * logo ucblogo
-        * lookbib Groff
-        * lorder bsd44
-        * lpr bsd44
-        * ls Fileutils
-        * lynx lynx
-     
-        * m4 m4
-        * mail bsd44
-        * mail-files Sharutils
-        * mailq smail
-        * mailshar Sharutils
-        * make make
-        * make-docfile Emacs
-        * make-path Emacs
-        * makeindex TeX
-        * makeinfo Texinfo
-        * MakeTeXPK TeX
-        * man bsd44
-        * man-macros Groff
-        * maniview geomview
-        * mattrib mtools
-        * maze xopt
-        * maze xreq
-        * mazewar xopt
-        * mc mc
-        * mcd mtools
-        * mcopy mtools
-        * mcserv mc
-        * md5sum Textutils
-        * mdel mtools
-        * mdir mtools
-        * me-macros Groff
-        * medit2gv geomview
-        * merge RCS
-        * mesg bsd44
-        * mf TeX
-        * mformat mtools
-        * mft TeX
-        * mgdiff xopt
-        * mh bsd44
-        * mille bsd44
-        * mkafmmap enscript
-        * mkcache GN
-        * mkdep bsd44
-        * mkdir Fileutils
-        * mkfifo Fileutils
-        * mkid ID Utils
-        * mkisofs mkisofs
-        * mklocale bsd44
-        * mkmanifest mtools
-        * mkmf bsd44
-        * mkmodules CVS
-        * mknod Fileutils
-        * mkstr bsd44
-        * mlabel mtools
-        * mm-macros Groff
-        * mmd mtools
-        * monop bsd44
-        * more bsd44
-        * morse bsd44
-        * mount bsd44
-        * mountd bsd44
-        * movemail Emacs
-        * mprof bsd44
-        * mrd mtools
-        * mread mtools
-        * mren mtools
-        * ms-macros Groff
-        * msgcmp gettext
-        * msgfmt gettext
-        * msgmerge gettext
-        * msgs bsd44
-        * msgunfmt gettext
-        * mst Smalltalk
-        * mt cpio
-        * mterm xopt
-        * mtree bsd44
-        * mtype mtools
-        * mule MULE
-        * muncher xopt
-        * mv Fileutils
-        * mvdir Fileutils
-        * mwrite mtools
-     
-        * NDview geomview
-        * nethack NetHack
-        * netstat bsd44
-        * newfs bsd44
-        * nfsd bsd44
-        * nfsiod bsd44
-        * nfsstat bsd44
-        * nice Shellutils
-        * nl Textutils
-        * nlmconv Binutils
-        * nm Binutils
-        * nohup Shellutils
-        * nose geomview
-        * notify HylaFAX
-        * nroff Groff
-        * number bsd44
-     
-        * objc GCC
-        * objcopy Binutils
-        * objdump Binutils
-        * objective-c GCC
-        * obst-boot OBST
-        * obst-CC OBST
-        * obst-cct OBST
-        * obst-cgc OBST
-        * obst-cmp OBST
-        * obst-cnt OBST
-        * obst-cpcnt OBST
-        * obst-csz OBST
-        * obst-dir OBST
-        * obst-dmp OBST
-        * obst-gen OBST
-        * obst-gsh OBST
-        * obst-init OBST
-        * obst-scp OBST
-        * obst-sil OBST
-        * obst-stf OBST
-        * oclock xreq
-        * octave Octave
-        * od Textutils
-        * oleo Oleo
-        * ora-examples xopt
-     
-        * p2c p2c
-        * pagesize bsd44
-        * palette xopt
-        * pascal bsd44
-        * passwd bsd44
-        * paste Textutils
-        * patch patch
-        * patgen TeX
-        * pathalias bsd44
-        * pathchk Shellutils
-        * pathto smail
-        * pax bsd44
-        * pbmplus xopt
-        * perl perl
-        * pfbtops Groff
-        * phantasia bsd44
-        * phttpd phttpd
-        * pic Groff
-        * pico pine
-        * pig bsd44
-        * pine pine
-        * ping bsd44
-        * pixedit xopt
-        * pixmap xopt
-        * pktogf TeX
-        * pktype TeX
-        * plaid xopt
-        * plot2fig Graphics
-        * plot2plot Graphics
-        * plot2ps Graphics
-        * plot2tek Graphics
-        * pltotf TeX
-        * pollrcvd HylaFAX
-        * pom bsd44
-        * pooltype TeX
-        * portmap bsd44
-        * ppt bsd44
-        * pr Textutils
-        * pr-addr GNATS
-        * pr-edit GNATS
-        * primes bsd44
-        * printenv Shellutils
-        * printf Shellutils
-        * protoize GCC
-        * proxygarb Spinner
-        * ps bsd44
-        * ps2ascii Ghostscript
-        * ps2epsi Ghostscript
-        * ps2fax HylaFAX
-        * psbb Groff
-        * pstat bsd44
-        * psycho xopt
-        * ptester phttpd
-        * ptx ptx
-        * pubdic+ xopt
-        * puzzle xopt
-        * puzzle xreq
-        * pwd Shellutils
-        * pyramid xopt
-     
-        * query-pr GNATS
-        * quiz bsd44
-        * quot bsd44
-        * quota bsd44
-        * quotacheck bsd44
-        * quotaon bsd44
-     
-        * rain bsd44
-        * random bsd44
-        * ranlib Binutils
-        * rbootd bsd44
-        * rc rc
-        * rcp bsd44
-        * rcp Inetutils
-        * rcs RCS
-        * rcs-to-cvs CVS
-        * rcs2log Emacs
-        * rcsdiff RCS
-        * rcsfreeze RCS
-        * rcsmerge RCS
-        * rdist bsd44
-        * reboot bsd44
-        * recode recode
-        * recvstats HylaFAX
-        * red ed
-        * refer Groff
-        * remsync Sharutils
-        * renice bsd44
-        * repquota bsd44
-        * restore bsd44
-        * rev bsd44
-        * rexecd bsd44
-        * rexecd Inetutils
-        * rlog RCS
-        * rlogin bsd44
-        * rlogin Inetutils
-        * rlogind bsd44
-        * rlogind Inetutils
-        * rm Fileutils
-        * rmail bsd44
-        * rmdir Fileutils
-        * rmt cpio
-        * rmt tar
-        * robots bsd44
-        * rogue bsd44
-        * route bsd44
-        * routed bsd44
-        * rr xopt
-        * rs bsd44
-        * rsh bsd44
-        * rsh Inetutils
-        * rshd bsd44
-        * rshd Inetutils
-        * rsmtp smail
-        * runq smail
-        * runtest DejaGnu
-        * runtest.exp DejaGnu
-        * ruptime bsd44
-        * rwho bsd44
-        * rwhod bsd44
-     
-        * s2p perl
-        * sail bsd44
-        * saoimage SAOimage
-        * savecore bsd44
-        * sc bsd44
-        * sccs bsd44
-        * sccs2rcs CVS
-        * scdisp xopt
-        * screen screen
-        * script bsd44
-        * scsiformat bsd44
-        * sctext xopt
-        * sdiff Diffutils
-        * sed sed
-        * send-pr GNATS
-        * sendfax HylaFAX
-        * sendmail bsd44
-        * sgi2fax HylaFAX
-        * sgn GN
-        * sh bsd44
-        * shar Sharutils
-        * shinbun xopt
-        * shogi Shogi
-        * showfont xopt
-        * showmount bsd44
-        * shutdown bsd44
-        * size Binutils
-        * sj3 xopt
-        * sjxa xopt
-        * slattach bsd44
-        * sleep Shellutils
-        * sliplogin bsd44
-        * smail smail
-        * smtpd smail
-        * snake bsd44
-        * snftobdf xopt
-        * soelim Groff
-        * sort Textutils
-        * sos2obst OBST
-        * spider xopt
-        * split Textutils
-        * startslip bsd44
-        * stereo geomview
-        * stf OBST
-        * strings Binutils
-        * strip Binutils
-        * stty Shellutils
-        * su Shellutils
-        * sum Textutils
-        * superopt Superopt
-        * swapon bsd44
-        * sweep geomview
-        * sync bsd44
-        * sysctl bsd44
-        * syslog Inetutils
-        * syslogd bsd44
-        * syslogd Inetutils
-        * systat bsd44
-     
-        * tabs Termutils
-        * tac Textutils
-        * tackdown geomview
-        * tail Textutils
-        * taintperl perl
-        * talk bsd44
-        * talk Inetutils
-        * talkd bsd44
-        * talkd Inetutils
-        * tangle TeX
-        * tar tar
-        * tbl Groff
-        * tcal gcal
-        * tcl DejaGnu
-        * tclsh DejaGnu
-        * tcopy bsd44
-        * tcp Emacs
-        * tee Shellutils
-        * tek2plot Graphics
-        * telnet bsd44
-        * telnet Inetutils
-        * telnetd bsd44
-        * telnetd Inetutils
-        * test Shellutils
-        * test-g++ DejaGnu
-        * test-tool DejaGnu
-        * tetris bsd44
-        * tex TeX
-        * tex3patch Texinfo
-        * texi2dvi Texinfo
-        * texindex Texinfo
-        * texspell TeX
-        * textfmt HylaFAX
-        * tfmtodit Groff
-        * tftopl TeX
-        * tftp bsd44
-        * tftp Inetutils
-        * tftpd bsd44
-        * tftpd Inetutils
-        * tgrind TeX
-        * time time
-        * timed bsd44
-        * timer Emacs
-        * timex xopt
-        * tip bsd44
-        * tkpostage xopt
-        * tn3270 bsd44
-        * togeomview geomview
-        * touch Fileutils
-        * tput Termutils
-        * tr Textutils
-        * traceroute bsd44
-        * transcript HylaFAX
-        * transfig xopt
-        * transformer geomview
-        * trek bsd44
-        * trigrp geomview
-        * trn3 bsd44
-        * troff Groff
-        * trpt bsd44
-        * trsp bsd44
-        * true Shellutils
-        * tset bsd44
-        * tsort bsd44
-        * tty Shellutils
-        * ttygnans Gnans
-        * tunefs bsd44
-        * tupdate gettext
-        * tvtwm xopt
-        * twm xreq
-     
-        * ul bsd44
-        * ulpc Spinner
-        * umount bsd44
-        * uname Shellutils
-        * uncompress gzip
-        * unexpand Textutils
-        * unifdef bsd44
-        * unify wdiff
-        * uniq Textutils
-        * unprotoize GCC
-        * unshar Sharutils
-        * unvis bsd44
-        * update bsd44
-        * updatedb Findutils
-        * users Shellutils
-        * uuchk UUCP
-        * uucico UUCP
-        * uuconv UUCP
-        * uucp UUCP
-        * uucpd bsd44
-        * uucpd Inetutils
-        * uudecode Sharutils
-        * uudir UUCP
-        * uuencode Sharutils
-        * uulog UUCP
-        * uuname UUCP
-        * uupath smail
-        * uupick UUCP
-        * uurate UUCP
-        * uusched UUCP
-        * uustat UUCP
-        * uuto UUCP
-        * uux UUCP
-        * uuxqt UUCP
-     
-        * v Fileutils
-        * vacation bsd44
-        * vandal xopt
-        * vcdiff Emacs
-        * vdir Fileutils
-        * vftovp TeX
-        * vgrind bsd44
-        * vi nvi
-        * viewres xopt
-        * viewres xreq
-        * vine xopt
-        * vipw bsd44
-        * virmf TeX
-        * virtex TeX
-        * vis bsd44
-        * vmstat bsd44
-        * vptovf TeX
-     
-        * w bsd44
-        * waisgn GN
-        * wakeup Emacs
-        * wall bsd44
-        * wargames bsd44
-        * wc Textutils
-        * wdiff wdiff
-        * weave TeX
-        * what bsd44
-        * whatis bsd44
-        * whereis bsd44
-        * who Shellutils
-        * whoami Shellutils
-        * whois bsd44
-        * window bsd44
-        * winterp xopt
-        * wish DejaGnu
-        * wn WN
-        * wndex WN
-        * worm bsd44
-        * worms bsd44
-        * write bsd44
-        * wump bsd44
-     
-        * x11perf xreq
-        * x2p perl
-        * xalarm xopt
-        * xancur xopt
-        * xargs Findutils
-        * xauth xreq
-        * xbfe Fontutils
-        * xbiff xopt
-        * xbiff xreq
-        * xboard xboard
-        * xboing xopt
-        * xbuffy3 xopt
-        * xcalc xopt
-        * xcalc xreq
-        * xcalendar xopt
-        * xcdplayer xopt
-        * xcell xopt
-        * xclipboard xreq
-        * xclock xreq
-        * xcmdmenu xopt
-        * xcms xopt
-        * xcmsdb xreq
-        * xcmstest xreq
-        * xco xopt
-        * xcolorize xopt
-        * xcolors xopt
-        * xconsole xreq
-        * xcrtca xopt
-        * xdaliclock xopt
-        * xdiary xopt
-        * xditview Groff
-        * xditview xopt
-        * xditview xreq
-        * xdm xreq
-        * xdpyinfo xreq
-        * xdu xopt
-        * xdvi TeX
-        * xdvi xopt
-        * xdvorak xopt
-        * xearth xopt
-        * xed xopt
-        * xedit xopt
-        * xedit xreq
-        * xev xopt
-        * xev xreq
-        * xexit xopt
-        * xeyes xopt
-        * xeyes xreq
-        * xfd xreq
-        * xfed xopt
-        * xfedor xopt
-        * xfeoak xopt
-        * xferstats HylaFAX
-        * xfig xopt
-        * xfontsel xopt
-        * xfontsel xreq
-        * xforecast xopt
-        * xgas xopt
-        * xgas xreq
-        * xgc xopt
-        * xgc xreq
-        * xgettext gettext
-        * xhearts xopt
-        * xhelp xopt
-        * xhost xreq
-        * xinit xreq
-        * xkeycaps xopt
-        * xkill xreq
-        * xlax xopt
-        * xlayout xopt
-        * xlbiff xopt
-        * xless xopt
-        * xload xopt
-        * xload xreq
-        * xlogin xopt
-        * xlogo xreq
-        * xlsatoms xreq
-        * xlsclients xreq
-        * xlsfonts xreq
-        * xmag xreq
-        * xmail xopt
-        * xmailbox xopt
-        * xmailwatcher xopt
-        * xman xopt
-        * xman xreq
-        * xmandel xopt
-        * xmessage xopt
-        * xmeter xopt
-        * xmh xreq
-        * xmh-icons xopt
-        * xmh.editor xopt
-        * xmodmap xreq
-        * xmon xopt
-        * xmove xopt
-        * xmphone xopt
-        * xpd xopt
-        * xphoon xopt
-        * xpipeman xopt
-        * xplot Graphics
-        * xpostit xopt
-        * xpr xopt
-        * xpr xreq
-        * xprompt xopt
-        * xproof xopt
-        * xprop xreq
-        * xpserv xopt
-        * xrdb xreq
-        * xrefresh xreq
-        * xrsh xopt
-        * xrubik xopt
-        * xrunclient xopt
-        * xscope xopt
-        * xscreensaver xopt
-        * xsession xopt
-        * xset xreq
-        * xsetroot xreq
-        * xshogi xshogi
-        * xstdcmap xreq
-        * xstr bsd44
-        * xtalk xopt
-        * xterm xreq
-        * xterm_color xopt
-        * xtetris xopt
-        * xTeXcad.13 xopt
-        * xtiff xopt
-        * xtokid ID Utils
-        * xtree xopt
-        * xtv xopt
-        * xwd xreq
-        * xwininfo xreq
-        * xwud xreq
-     
-        * yacc bsd44
-        * yes Shellutils
-        * youbin xopt
-        * yow Emacs
-     
-        * zcat gzip
-        * zcmp gzip
-        * zdiff gzip
-        * zforce gzip
-        * zgrep gzip
-        * zmore gzip
-        * znew gzip
-     
-        * [ Shellutils
-
-
-CD-ROMs
-*******
-
-We offer these CD-ROMs:
-
-   * Several editions of our *Note Source Code CD-ROMs::.
-
-   * January 1997 *Note Compiler Tools Binaries CD-ROM::.
-
-   * December 1995 Compiler Tools Binaries CD-ROM, see the *note Free
-     Software Foundation Order Form::.
-
-   * December 1994 Compiler Tools Binaries CD-ROM, see the *note Free
-     Software Foundation Order Form::.
-
-   * December 1993 Compiler Tools Binaries CD-ROM, see the *note Free
-     Software Foundation Order Form::.
-
-Our CDs are in ISO 9660 format & can be mounted as a read-only file system on
-most computers.  If your driver supports it, you can mount each CD with "Rock
-Ridge" extensions & it will look like a regular Unix file system, rather than
-one full of truncated & otherwise mangled names that fit vanilla ISO 9660.
-
-You can build most of the software without copying the sources off the CD.
-You only need enough disk space for object files and intermediate build
-targets.
-
-
-Pricing of the GNU CD-ROMs
---------------------------
-
-If a business or organization is ultimately paying, the January 1997 Source CD
-set costs $240.  The set costs $60 if you, an individual, are paying out of
-your own pocket.  The January 1997 Compiler Tools Binaries CD-ROM costs $220
-for a business or organization, and $55 for an individual.
-
-
-What Do the Different Prices Mean?
-..................................
-
-The software on our disks is free; anyone can copy it and anyone can run it.
-What we charge for is the physical disk and the service of distribution.
-
-We charge two different prices depending on who is buying.  When a company or
-other organization buys the January 1997 Source CD-ROMs, we charge $240.
-When an individual buys the same CD-ROMs, we charge just $60.  This
-distinction is not a matter of who is allowed to use the software.  In either
-case, once you have a copy, you can distribute as many copies as you wish and
-there's no restriction on who can have or run them.  The price distinction is
-entirely a matter of what kind of entity pays for the CDs.
-
-You, the reader, are certainly an individual, not a company.  If you are
-buying a disk "in person", then you are probably doing so as an individual.
-But if you expect to be reimbursed by your employer, then the disk is really
-for the company; so please pay the company price and get reimbursed for it.
-We won't try to check up on you--we use the honor system--so please cooperate.
-
-Buying CDs at the company price is very helpful for GNU; just
-150 Source CDs at that price support an FSF programmer or tech writer for a
-year.
-
-
-Why Is There an Individual Price?
-.................................
-
-In the past, our distribution tapes were ordered mainly by companies.  The CD
-at the price of $240 provides them with all of our software for a much lower
-price than they would previously have paid for six different tapes.  To lower
-the price more would cut into the FSF's funds very badly and decrease the
-software development we can do.
-
-However, for individuals, $240 is too high a price; hardly anyone could
-afford that.  So we decided to make CDs available to individuals at the lower
-price of $60.
-
-
-Is There a Maximum Price?
-.........................
-
-Our stated prices are minimum prices.  Feel free to pay a higher price if you
-wish to support GNU development more.  The sky's the limit; we will accept as
-high a price as you can offer.  Or simply give a donation (tax-deductible in
-the U.S.) to the Free Software Foundation, a tax-exempt public charity.
-
-
-January 1997 Compiler Tools Binaries CD-ROM
--------------------------------------------
-
-The fourth edition of our CD-ROM that has binaries and complete sources for
-GNU compiler tools for some systems which lack a compiler, will be available
-at the end of January 1997.  This enables the people who use these systems to
-compile GNU and other free software without having to buy a proprietary
-compiler.  You can also use these GNU tools to compile your own
-C/C++/Objective-C programs.  Older editions of this CD are available while
-supplies last at a reduced price; see the *note Free Software Foundation
-Order Form::.
-
-We hope to have more systems on each update of this CD.  If you can help
-build binaries for new systems (especially those that don't come with a C
-compiler), or have one to suggest, please contact us at the addresses on the
-top menu.
-
-These packages:
-
-        * DJGPP
-        * GCC/G++/Objective-C
-        * GNU C Library
-        * GDB
-        * Binutils
-        * Bison
-        * Emacs (MS-DOS only)
-        * Flex
-        * Make
-        * libg++
-
-On these platforms:
-
-        * `i386-msdos'
-        * `hppa1.1-hp-hpux9'
-        * `hppa1.1-hp-hpux10'
-        * `powerpc-ibm-aix4.2'
-        * `sparc-sun-solaris2.4'
-        * `sparc-sun-solaris2.5'
-        * `sparc-sun-sunos4.1'
-
-
-Source Code CD-ROMs
--------------------
-
-We have several versions of our Source Code CD-ROMs available, including:
-
-   * *Note January 1997 Source Code CD-ROMs::, the newest release, has
-     programs, bug fixes, & improvements not on the other CDs.
-
-   * *Note July 1996 Source Code CD-ROMs::.
-
-   * December 1995 Source Code CD-ROMs, see the *note Free Software
-     Foundation Order Form::.
-
-   * June 1995 Source Code CD-ROM, see the *note Free Software Foundation
-     Order Form::.
-
-   * May 1994 Source Code CD-ROM, see the *note Free Software Foundation
-     Order Form::.
-
-   * November 1993 Source Code CD-ROM, see the *note Free Software Foundation
-     Order Form::.
-
-   * May 1993 Source Code CD-ROM, see the *note Free Software Foundation
-     Order Form::.
-
-   * October 1992 Source Code CD-ROM, see the *note Free Software Foundation
-     Order Form::.
-
-The older Source CDs are available while supplies last at a reduced price
-(please note that the December 1994 Source CD is permanently out of stock).
-All the Source CDs have Texinfo source for the GNU manuals listed in *Note
-Documentation::.
-
-MIT Scheme & much of X11 is *not* on the older Source CDs.
-
-There are no precompiled programs on these Source CDs.  You will need a C
-compiler (programs which need some other interpreter or compiler normally
-provide the C source for a bootstrapping program).  We ship C compiler
-binaries for some systems on the *Note Compiler Tools Binaries CD-ROM::.
-
-
-January 1997 Source Code CD-ROMs
-................................
-
-The 9th edition of our Source Code CD will be available at the end of January
-1997 with two CD-ROM disks.  It has programs, bug fixes, & improvements not
-on the older Source CDs.  It has these packages, & some manuals that are not
-part of packages.  The version number of each package listed might be higher
-on the 9th edition CD due to new releases being made between now and then.
-
-
-        * acm 4.7
-        * apache 1.2b2
-        * Autoconf 2.12
-        * Automake 1.0
-        * BASH 1.14.7
-        * bc 1.03
-        * Binutils 2.7
-        * Bison 1.25
-        * C Library 2.0
-        * Calc 2.02f
-        * cfengine 1.3.17a
-        * Chess 4.0.pl77
-        * CLISP 1996.05.30
-        * Common Lisp 2.2
-        * cperf 2.1a
-        * cpio 2.4.2
-        * CVS 1.9
-        * DejaGnu 1.3
-        * Diffutils 2.7
-        * dld 3.3
-        * doschk 1.1
-        * ed 0.2
-        * Elib 1.0
-        * elisp archive
-        * Emacs 18.59
-        * Emacs 19.34
-        * enscript 1.4.0
-        * es 0.84
-        * Exim 1.59
-        * f2c 1996.09.25
-        * ffcall 1.1
-        * Fileutils 3.14
-        * Findutils 4.1
-        * Finger 1.37
-        * flex 2.5.4
-        * Fontutils 0.6
-        * g77 0.5.19
-        * GAWK 3.0.1
-        * gcal 2.10
-        * GCC/G++/Objective-C 2.7.2.1
-        * GDB 4.16
-        * gdbm 1.7.3
-        * Generic NQS 3.50.2
-        * geomview 1.6.1
-        * gettext 0.10
-        * gforth 0.2.0
-        * Ghostscript 3.33
-        * Ghostview 1.5
-        * Ghostview for Windows 1.0
-        * GIT 4.3.14
-        * gmp 2.0.2
-        * GN 2.24
-        * Gnans 1.5.1
-        * gnat 3.05
-        * GNATS 3.2
-        * GNU Emacs Lisp Reference Manual 1.03
-        * GNU Emacs Lisp Reference Manual 2.4.2
-        * GnuGo 1.2
-        * gnuplot 3.5
-        * gnuserv 2.1alpha
-        * gnussl 0.2.1
-        * Graphics 0.17
-        * grep 2.0
-        * Groff 1.10
-        * gzip 1.2.4
-        * hello 1.3
-        * hp2xx 3.1.4
-        * HylaFAX 4.0b018
-        * Hyperbole 4.01
-        * ID Utils 3.2
-        * indent 1.9.1
-        * Inetutils 1.2
-        * Ispell 3.1.20
-        * karma 1.6
-        * less 321
-        * libg++ 2.7.2
-        * libobjects 0.1.19
-        * lynx 2.6
-        * m4 1.4
-        * make 3.75
-        * MandelSpawn 0.07
-        * maxima 5.2
-        * mc 3.2.1
-        * <Meta-HTML> 5.01
-        * miscfiles 1.0
-        * mkisofs 1.05GNU
-        * mm 1.07
-        * mtools 3.0
-        * MULE 2.3
-        * ncurses 1.9.9e
-        * NetHack 3.2.1
-        * NIHCL 3.1.4
-        * nvi 1.76
-        * Oaklisp 930720
-        * OBST 3.4.3
-        * Octave 2.0
-        * Oleo 1.6
-        * p2c 1.20
-        * patch 2.1
-        * perl 4.036
-        * perl 5.003
-        * phttpd 0.99.72.1
-        * pine 3.91
-        * Programming in Emacs Lisp an Introduction 1.04
-        * ptx 0.4
-        * rc 1.4
-        * RCS 5.7
-        * readline 2.0
-        * recode 3.4
-        * regex 0.12
-        * rx 1.4
-        * SAOimage 1.19
-        * screen 3.7.2
-        * sed 2.05
-        * Sharutils 4.2
-        * Shellutils 1.14
-        * Shogi 1.2p03
-        * SIPP 3.1
-        * smail 3.2
-        * Smalltalk 1.1.5
-        * Roxen 1.0
-        * stow 1.3.2
-        * Superopt 2.5
-        * tar 1.11.8
-        * Termcap 1.3
-        * Termutils 2.0
-        * TeX 3.145
-        * Texinfo 3.9
-        * Textutils 1.20
-        * tiff 3.4b035
-        * Tile Forth 2.1
-        * time 1.7
-        * ucblogo 3.4
-        * UUCP 1.06.1
-        * W3 2.2.26
-        * wdiff 0.5
-        * wget 1.4.2
-        * windows32api 0.1.2
-        * WN 1.17.1
-        * X11R6.3
-        * xboard 3.4.pl1
-        * xgrabsc 2.41
-        * xinfo 1.01.01
-        * xshogi 1.2p03
-        * Ygl 3.1
-
-
-July 1996 Source Code CD-ROMs
-.............................
-
-We still have copies of the 8th edition of our Source CD with two CD-ROM
-disks.  It has these packages, & some manuals that are not part of packages:
-
-
-        * acm 4.7
-        * apache 1.1
-        * Autoconf 2.10
-        * Automake 1.0
-        * BASH 1.14.6
-        * bc 1.03
-        * Binutils 2.7
-        * Bison 1.25
-        * C Library 1.93
-        * Calc 2.02d
-        * cfengine 1.3.7
-        * Chess 4.0.pl77
-        * CLISP 1996.05.30
-        * Common Lisp 2.2
-        * cperf 2.1a
-        * cpio 2.4.2
-        * CVS 1.8.1
-        * DejaGnu 1.3
-        * Diffutils 2.7
-        * dld 3.3
-        * doschk 1.1
-        * ed 0.2
-        * Elib 1.0
-        * elisp archive
-        * Emacs 18.59
-        * Emacs 19.31
-        * Emacs 19.32
-        * enscript 1.4.0
-        * es 0.84
-        * Exim 0.53
-        * f2c 1996.07.23
-        * ffcall 1.0
-        * Fileutils 3.13
-        * Findutils 4.1
-        * Finger 1.37
-        * flex 2.5.3
-        * Fontutils 0.6
-        * g77 0.5.18
-        * GAWK 3.0.0
-        * gcal 1.01
-        * GCC/G++/Objective-C 2.7.2
-        * GCC 2.7.2.1
-        * GDB 4.16
-        * gdbm 1.7.3
-        * Generic NQS 3.50.0
-        * geomview 1.5.0
-        * gettext 0.10
-        * Ghostscript 3.33
-        * Ghostview 1.5
-        * Ghostview for Windows 1.0
-        * GIT 4.3.11
-        * gmp 2.0.2
-        * GN 2.24
-        * Gnans 1.5.1
-        * gnat 3.05
-        * GNATS 3.2
-        * GNU Emacs Lisp Reference Manual 1.03
-        * GNU Emacs Lisp Reference Manual 2.4
-        * GnuGo 1.2
-        * gnuplot 3.5
-        * gnuserv 2.1alpha
-        * gnussl 0.2
-        * Graphics 0.17
-        * grep 2.0
-        * Groff 1.10
-        * gzip 1.2.4
-        * hello 1.3
-        * hp2xx 3.1.4
-        * HylaFAX 4.0b018
-        * ID Utils 3.1
-        * indent 1.9.1
-        * Inetutils 1.0
-        * Ispell 3.1.20
-        * karma 1.4
-        * less 321
-        * libg++ 2.7.2
-        * libobjects 0.1.19
-        * lynx 2.5
-        * m4 1.4
-        * make 3.75
-        * MandelSpawn 0.07
-        * maxima 5.2
-        * mc 3.2.1
-        * miscfiles 1.0
-        * mkisofs 1.05GNU
-        * mm 1.07
-        * mtools 3.0
-        * MULE 2.3
-        * ncurses 1.9.9e
-        * NetHack 3.2.1
-        * NIHCL 3.1.4
-        * nvi 1.71
-        * Oaklisp 930720
-        * OBST 3.4.3
-        * Octave 1.1.1
-        * Oleo 1.6
-        * p2c 1.20
-        * patch 2.1
-        * perl 4.036
-        * perl 5.003
-        * phttpd 0.99.72.1
-        * pine 3.91
-        * Programming in Emacs Lisp an Introduction 1.04
-        * ptx 0.4
-        * rc 1.4
-        * RCS 5.7
-        * readline 2.0
-        * regex 0.12
-        * rx 1.0
-        * SAOimage 1.18
-        * screen 3.7.1
-        * sed 2.05
-        * Sharutils 4.2
-        * Shellutils 1.12
-        * Shogi 1.2p03
-        * SIPP 3.1
-        * smail 3.2
-        * Smalltalk 1.1.1
-        * Spinner 1.0b14
-        * Superopt 2.5
-        * tar 1.11.8
-        * Termcap 1.3
-        * Termutils 2.0
-        * TeX 3.145
-        * Texinfo 3.7
-        * Textutils 1.19
-        * tiff 3.4b035
-        * Tile Forth 2.1
-        * time 1.7
-        * ucblogo 3.3
-        * UUCP 1.06.1
-        * W3 2.2.26
-        * wdiff 0.5
-        * WN 1.15.3
-        * X11R6.3
-        * xboard 3.4.pl1
-        * xgrabsc 2.41
-        * xshogi 1.2p03
-        * Ygl 3.1
-
-
-CD-ROM Subscription Service
-***************************
-
-Our subscription service enables you to stay current with the latest GNU
-developments.  For a one-time cost equivalent to three Source CD-ROMs (plus
-shipping in some cases), we will ship you four new versions of the *Note
-Source Code CD-ROMs::.  The CD-ROMs are sent as they are issued (currently
-twice a year, but we hope to make it more frequent).  We do not yet know if
-we will be offering subscriptions to the Compiler Tools Binaries CD.
-
-A subscription is an easy way to keep up with the regular bug fixes to the X
-Window System.  Each edition of the *Note Source Code CD-ROMs::, has updated
-sources for the X Window System.
-
-Please note: In two cases, you must pay 4 times the normal shipping required
-for a single order when you pay for each subscription.  If you're in Alaska,
-Hawaii, or Puerto Rico you must add $20.00 for shipping for each
-subscription.  If you're outside of the U.S., Canada, and Puerto Rico, you
-must add $80.00 for each subscription.  See "CD-ROMs" and "Tax and Shipping
-Costs" on the *note Free Software Foundation Order Form::.
-
-
-FSF T-shirt
-***********
-
-The front of our T-shirt has the GNU Emacs Lisp code `(USE 'GNU)' with "`()'"
-being the dancing parentheses from the cover of our `GNU Emacs Lisp Reference
-Manual' (drawn by Berkeley, CA artist Etienne Suvasa).  The shirt's back has
-the Preamble to the GNU General Public License.
-
-These shirts come in black, purple, red, pink, burgundy, blue, and natural
-(off-white).  When you order, please give 3 choices.  Black and purple are
-printed in white; the other colors are printed in black.  All shirts are
-thick 100% cotton, and come in sizes S, M, L, XL, and XXL (but they run small
-so you may want a larger size than usual).
-
-GNU T-shirts often create spontaneous friendships at conferences & on
-university campuses.  They also make great gifts for friends & family,
-including children!
-
-
-Free Software Foundation Order Form
-***********************************
-
-All items are distributed with permission to copy and to redistribute.
-Texinfo source for each manual and source for each reference card is on the
-appropriate CD-ROM; the prices for these media do not include printed
-documentation.  All items are provided on an ``as is'' basis, with no
-warranty of any kind.  Please allow four weeks for delivery (though it
-won't usually take that long).
-
-
-     PRICE AND CONTENTS MAY CHANGE WITHOUT NOTICE AFTER July 31, 1997.
-
-
-A possibly more current version of this order form can be found on the
-World Wide Web at `http://www.gnu.ai.mit.edu/order/order.html' or
-can be found in file `/pub/gnu/GNUinfo/ORDERS' on a GNU FTP host
-(listed in *Note How to Get GNU Software::).
-
-
-
-FSF Deluxe Distribution
-.......................
-(Please contact us with any questions.  *note Deluxe Distribution::.
-for machine, operating system, and media types.)
-
-
-____ @ $5000 = $ ______   The Deluxe Distribution, with manuals, etc.
-
-Machine: _____________________________________________________________________
-
-Operating system: ____________________________________________________________
-
-Media type: __________________________________________________________________
-
-Version of X Window System to build: _________________________________________
-
-
-
-CD-ROMs, in ISO 9660 format (*note CD-ROMs::.):
-..............................................
-
-
-GNU Source Code CD-ROMs, Version 9 with X11R6.3 (*note January 1997 Source Code CD-ROMs::.):
-
-____ @ $240  = $ ______   for corporations and other organizations.
-
-____ @ $ 60  = $ ______   for individuals.
-
-
-Subscriptions, next 4 updates, of the Source Code CD-ROM, in ISO 9660 format
-(*note CD-ROM Subscription Service::.):
-
-____ @ $720  = $ ______   for corporations and other organizations.
-
-____ @ $180  = $ ______   for individuals.
-
-
-GNU Compiler Tools Binaries CD-ROM, Version 4, January 1997 Edition
-(*note Compiler Tools Binaries CD-ROM::.):
-
-____ @ $220  = $ ______   for corporations and other organizations.
-
-____ @  $55  = $ ______   for individuals.
-
-
-
-Proceedings
------------
-
-____ @ $ 25  = $ ______   The Proceedings of the First Conference
-                          on Freely Redistributable Software - only
-                          available while supplies last.
-
-
-
-Manuals
--------
-
-These manuals (*note Documentation::.).  The latest version of each manual
-will be shipped.  Please contact us if you want a specific version.
-
-____ @ $ 25  = $ ______   GNU Emacs manual, with a reference card.
-
-____ @ $ 50  = $ ______   GNU Emacs Lisp Reference manual, in two volumes.
-
-____ @ $ 60  = $ ______   GNU Emacs Lisp Reference, Japanese Edition.
-
-____ @ $ 50  = $ ______   Using and Porting GNU CC.
-
-____ @ $ 50  = $ ______   GNU C Library Reference Manual.
-
-____ @ $ 50  = $ ______   GNU Emacs Calc manual, with a reference card.
-
-____ @ $ 20  = $ ______   Programming in Emacs Lisp: An Introduction.
-
-____ @ $ 20  = $ ______   Debugging with GDB, with a reference card.
-
-____ @ $ 25  = $ ______   GNU Awk User's Guide.
-
-____ @ $ 20  = $ ______   Make manual.
-
-____ @ $ 20  = $ ______   Bison manual, with a reference card.
-
-____ @ $ 20  = $ ______   Flex manual, with a reference card.
-
-____ @ $ 20  = $ ______   Texinfo manual.
-
-____ @ $ 15  = $ ______   Termcap manual.
-
-
-
-Reference Cards
----------------
-
-The following reference cards, in packets of ten.  For single copies please
-contact us.
-
-____ @ $ 10  = $ ______   GNU Emacs version 19 reference cards.
-
-____ @ $ 10  = $ ______   GNU Emacs Calc reference cards.
-
-____ @ $ 10  = $ ______   GDB reference cards.
-
-____ @ $ 10  = $ ______   Bison reference cards.
-
-____ @ $ 10  = $ ______   Flex reference cards.
-
-
-
-T-shirts
---------
-
-GNU/FSF T-shirts, thick 100% cotton in sizes: M, L, XL, & XXL (they run
-small); and in colors: black, purple, red, pink, burgundy, blue, &
-natural (off-white); please list 1st, 2nd, and 3rd choice of color
-(*note FSF T-shirt::.):
-
-____ @ $ 15  = $ ______   Size _____
-
-                          Color choice: 1st _______ 2nd _______ 3rd _______
-
-____ @ $ 15  = $ ______   Size _____
-
-                          Color choice: 1st _______ 2nd _______ 3rd _______
-
-____ @ $ 15  = $ ______   Size  _____
-
-                          Color choice: 1st _______ 2nd _______ 3rd _______
-
-____ @ $ 15  = $ ______   Size _____
-
-                          Color choice: 1st _______ 2nd _______ 3rd _______
-
-
-Older Items
------------
-
-Older items are only available while supplies last.
-
-____ @ $  5  = $ ______   GNU Emacs version 18 reference cards, in packets
-                           of ten.
-
-____ @ $ 15  = $ ______   GNU Emacs Manual for Emacs version 19.29.
-
-
-____ @ $ 10  = $ ______   Gawk Manual, Edition 0.16 for version 2.16.
-
-
-____ @ $ 40  = $ ______   Using and Porting GCC, 8.5 x 11 inches, with
-                           plastic binding (same text as current edition)
-
-____ @ $ 15  = $ ______   Debugging with GDB for Version 4.14
-
-
-Please fill in the number of each older CD-ROM you order:
-
-     GNU Compiler Tools Binaries CD-ROMs:
-
-Version 1 (December '93)  ______    Version 2 (December '94) ______
-
-Version 3 (December '95)  ______
-
-     GNU Source Code CD-ROMs: (Version 5 (Dec. '94) is not available.)
-
-Version 1 (October '92)   ______    Version 2 (May '93) ______
-
-Version 3 (November '93 - last edition with X11R5)  ______
-
-Version 4 (May '94 - first edition with X11R6)  ______
-
-Version 6 (June '95)  ______        Version 7 (Dec. '95)  ______
-
-Version 8 (June '96)  ______
-
-Please put the total count and cost of the above older CD-ROMs here:
-
-____ @ $ 80  = $ ______   for corporations and other organizations.
-
-____ @ $ 20  = $ ______   for individuals.
-
-                 ======
-
-      Subtotal $ ______
-
-
-
-Tax and Shipping Costs
-----------------------
-
-             + $ ______   For addresses in Massachusetts: add 5% sales tax
-                          or give tax exempt number.  There is no sales tax
-                          on T-shirts.
-             + $ ______   Shipping fee for addresses in Alaska, Hawaii, or
-                          Puerto Rico:
-                            $  5.00 base charge;
-                          + $  5.00 for *each* Emacs Calc or Emacs Lisp
-                            Reference manual ($ 5.00 * #ofMans);
-                          + $ 20.00 for *each* CD-ROM subscription
-                                             ($20.00 * #ofSubs);
-                          + $  1.00 for *each* item other then the above
-                            (shipping for all other items =
-                                                     $ 1.00 * #ofOtherItems).
-             + $ ______   Shipping fee for most Foreign Destinations: (Please
-                          do *not* use this formula for addresses in China,
-                          Guam, Indonesia, Israel, Malaysia, New Zealand,
-                          Philippines, and Thailand.  Please fax,
-                          or contact us for an exact shipping quote.)
-                            $ 20.00 base charge for orders to other
-                              addresses outside of U.S., Canada, & Puerto Rico:
-                          + $ 10.00 for each item ordered, ($ 10.00 * #ofItems)
-                          + $ 80.00 for each CD-ROM subscription
-                              ($ 80.00 * #ofSubs) (don't count as an item).
-             + $ ______   Optional (tax-deductible in the U.S.) donation.
-                 ------   We suggest 5% if paying by credit card.
-
-         TOTAL $ ______   We pay for shipping via UPS ground transportation in
-                          the contiguous 48 states and Canada.  For very
-                          large orders, ask about actual shipping costs for
-                          that order.
-
-Note:  The shipping fee for foreign destinations covers express courier
-       shipping.  If you would like shipping via air mail, please contact
-       our distribution offfice for a quote on your order.
-
-Shipping Information
---------------------
-
-Name: ________________________________________________________________________
-
-Mail Stop/Dept. Name: ________________________________________________________
-
-Organization: ________________________________________________________________
-
-Street Address: ______________________________________________________________
-
-City, State/Province: ________________________________________________________
-
-Zip Code/Postal Code Country: ________________________________________________
-
-Telephone number in case of a problem with your order.
-For international orders, please include a Fax number. _______________________
-
-E-mail Address: ______________________________________________________________
-
-
-------------------------------------------------------------------------------
-|                                                                            |
-|  Orders filled only upon receipt of check, money order, or credit card     |
-|  order in U.S. dollars.  Unpaid orders will be returned to the sender.     |
-|  We do not have the staff to handle the billing of unpaid orders.  Please  |
-|  help keep our lives simple by including your payment with your order.     |
-|                                                                            |
-------------------------------------------------------------------------------
-
-
-
-For orders from outside the U.S.:
----------------------------------
-
-You are responsible for paying all duties, tariffs, and taxes.  If you
-refuse to pay the charges, the shipper will return or abandon the order.
-
-
- ---------------------------------------------------------------------------
- |                                                                         |
- |      Please make checks payable to the ``Free Software Foundation''.    |
- |                                                                         |
- |           Checks must be in U.S. dollars, drawn on a U.S. bank.         |
- |                                                                         |
- ---------------------------------------------------------------------------
-
-
-
-For Credit Card Orders:
------------------------
-
-The Free Software Foundation takes these credit cards: Carte Blanche,
-Diner's Club, JCB, MasterCard, Visa, or American Express.  Please note that
-we are charged about 5% of an order's total amount in credit card
-processing fees.  Please consider paying by check instead, or adding on a 5%
-donation to make up the difference.  To place a credit card order, please
-give us this information:
-
-
-Card type: ___________________________________________________________________
-
-Account Number: ______________________________________________________________
-
-Expiration Date: _____________________________________________________________
-
-Cardholder's Name: ___________________________________________________________
-
-Cardholder's Signature: ______________________________________________________
-
-
-
-------------------------------------------------------------------------------
-|                                                                            |
-|     If you wish to pay by wire transfer or you are a reseller, please      |
-|     contact us or write us for details.                                    |
-|                                                                            |
-------------------------------------------------------------------------------
-
-
-
-A possibly more current version of this order form can be found on the
-World Wide Web at `http://www.gnu.ai.mit.edu/order/order.html' or
-can be found in file `/pub/gnu/GNUinfo/ORDERS' on a GNU FTP host
-(listed in *Note How to Get GNU Software::).
-
-
-
-                Please mail orders to:  Free Software Foundation
-                                        59 Temple Place - Suite 330
-                                        Boston, MA   02111
-PRICES AND CONTENTS MAY CHANGE          +1-617-542-5942
-WITHOUT NOTICE AFTER July 31, 1997     Fax (including Japan): +1-617-542-2652
-
-Version: January 1997 ASCII etc/ORDERS
-
------------------------------------------------------------------------------
diff --git a/gcc/README-bugs b/gcc/README-bugs
deleted file mode 100644 (file)
index 06e15bb..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-The purpose of GCC pretesting is to verify that the new GCC
-distribution, about to be released, works properly on your system *with
-no change whatever*, when installed following the precise
-recommendations that come with the distribution.
-
-Here are some guidelines on how to do pretesting so as to make it
-helpful.  All of them follow from common sense together with the
-nature of the purpose and the situation.
-
-* It is absolutely vital that you mention even the smallest change or
-departure from the standard sources and installation procedure.
-
-Otherwise, you are not testing the same program that I wrote.  Testing
-a different program is usually of no use whatever.  It can even cause
-trouble if you fail to tell me that you tested some other program
-instead of what I know as GCC.  I might think that GCC works, when in
-fact it has not been properly tried, and might have a glaring fault.
-
-* Even changing the compilation options counts as a change in the
-program.  The GCC sources specify which compilation options to use.
-Some of them are specified in makefiles, and some in machine-specific
-configuration files.
-
-You have ways to override this--but if you do, then you are not
-testing what ordinary users will do.  Therefore, when pretesting, it
-is vital to test with the default compilation options.
-
-(It is okay to test with nonstandard options as well as testing with
-the standard ones.)
-
-* The machine and system configuration files of GCC are parts of
-GCC.  So when you test GCC, you need to do it with the
-configuration files that come with GCC.
-
-If GCC does not come with configuration files for a certain machine,
-and you test it with configuration files that don't come with GCC,
-this is effectively changing GCC.  Because the crucial fact about
-the planned release is that, without changes, it doesn't work on that
-machine.
-
-To make GCC work on that machine, I would need to install new
-configuration files.  That is not out of the question, since it is
-safe--it certainly won't break any other machines that already work.
-But you will have to rush me the legal papers to give the FSF
-permission to use a large piece of text.
-
-* Look for recommendations for your system.
-
-You can find these recommendations in the Installation node of the
-manual, and in the file INSTALL.  (These two files have the same text.)
-
-These files say which configuration name to use for your machine, so
-use the ones that are recommended.  If you guess, you might guess
-wrong and encounter spurious difficulties.  What's more, if you don't
-follow the recommendations then you aren't helping to test that its
-recommendations are valid.
-
-These files may describe other things that you need to do to make GCC
-work on your machine.  If so, you should follow these recommendations
-also, for the same reason.
-
-Also look at the Trouble chapter of the manual for items that
-pertain to your machine.
-
-* Don't delay sending information.
-
-When you find a problem, please double check it if you can do so
-quickly.  But don't spend a long time double-checking.  A good rule is
-always to tell me about every problem on the same day you encounter
-it, even if that means you can't find a solution before you report the
-problem.
-
-I'd much rather hear about a problem today and a solution tomorrow
-than get both of them tomorrow at the same time.
-
-* Make each bug report self-contained.
-
-If you refer back to another message, whether from you or from someone
-else, then it will be necessary for anyone who wants to investigate
-the bug to find the other message.  This may be difficult, it is
-probably time-consuming.
-
-To help me save time, simply copy the relevant parts of any previous
-messages into your own bug report.
-
-In particular, if I ask you for more information because a bug report
-was incomplete, it is best to send me the *entire* collection of
-relevant information, all together.  If you send just the additional
-information, that makes me do extra work.  There is even a risk that
-I won't remember what question you are sending me the answer to.
-
-* Always be precise when talking about changes you have made.  Show
-things rather than describing them.  Use exact filenames (relative to
-the main directory of the distribution), not partial ones.  For
-example, say "I changed Makefile" rather than "I changed the
-makefile".  Instead of saying "I defined the MUMBLE macro", send a
-diff that shows your change.
-
-* Always use `diff -c' to make diffs.  If you don't include context,
-it may be hard for me to figure out where you propose to make the
-changes.  I might have to ignore your patch because I can't tell what
-it means.
-
-* When you write a fix, keep in mind that I can't install a change
-that would break other systems.
-
-People often suggest fixing a problem by changing machine-independent
-files such as toplev.c to do something special that a particular
-system needs.  Sometimes it is totally obvious that such changes would
-break GCC for almost all users.  I can't possibly make a change like
-that.  All I can do is send it back to you and ask you to find a fix
-that is safe to install.
-
-Sometimes people send fixes that *might* be an improvement in
-general--but it is hard to be sure of this.  I can install such
-changes some of the time, but not during pretest, when I am trying to
-get a new version to work reliably as quickly as possible.
-
-The safest changes for me to install are changes to the configuration
-files for a particular machine.  At least I know those can't create
-bugs on other machines.
-
-* Don't try changing GCC unless it fails to work if you don't change it.
-
-* Don't even suggest changes that would only make GCC cleaner.
-Every change I install could introduce a bug, so I won't install
-a change unless I see it is necessary.
-
-* If you would like to suggest changes for purposes other than fixing
-serious bugs, don't wait till pretest time.  Instead, send them just
-after I make a release.  That's the best time for me to install them.
-
-* In some cases, if you don't follow these guidelines, your
-information might still be useful, but I might have to do more work to
-make use of it.  Unfortunately, I am so far behind in my work that I
-just can't get the job done unless you help me to do it efficiently.
-
-
-                               Thank you
-                                  rms
-\f
-Local Variables:
-mode: text
-End:
diff --git a/gcc/SERVICE b/gcc/SERVICE
deleted file mode 100644 (file)
index 786d476..0000000
+++ /dev/null
@@ -1,1460 +0,0 @@
-                                                       -*- text -*-
-GNU Service Directory
----------------------
-
-This is a list of people who have asked to be listed as offering
-support services for GNU software, including GNU Emacs, for a fee
-or in some cases at no charge.
-
-The information comes from the people who asked to be listed;
-we do not include any information we know to be false, but we
-cannot check out any of the information; we are transmitting it to
-you as it was given to us and do not promise it is correct.
-Also, this is not an endorsement of the people listed here.
-We have no opinions and usually no information about the abilities of
-any specific person.  We provide this list to enable you to contact
-service providers and decide for yourself whether to hire one.
-
-Before FSF will list your name in the GNU Service Directory, we ask
-that you agree informally to the following terms:
-
-1. You will not restrict (except by copyleft) the use or distribution
-of any software, documentation, or other information you supply anyone
-in the course of modifying, extending, or supporting GNU software.
-This includes any information specifically designed to ameliorate the
-use of GNU software.
-
-2. You will not take advantage of contact made through the Service
-Directory to advertise an unrelated business (e.g., sales of
-non-GNU-related proprietary information).  You may spontaneously
-mention your availability for general consulting, but you should not
-promote a specific unrelated business unless the client asks.
-
-Please include some indication of your rates, because otherwise users
-have nothing to go by. Please put each e-mail address inside "<>".
-Please put nothing else inside "<>".  Thanks!
-
-For a current copy of this directory, or to have yourself listed, ask:
-       gnu@prep.ai.mit.edu
-
-** Please keep the entries in this file alphabetical **
-\1f
-Altrasoft      <info@altrasoft.com>
-4880 Stevens Creek Blvd., Suite 205
-San Jose, CA  95129-1034
-+1 408 243 3300
-http://www.altrasoft.com
-
-Altrasoft provides corporate-quality support, development and user
-documentation for GNU Emacs, XEmacs and InfoDock.  (InfoDock is a turnkey
-information management and software development toolset built atop emacs,
-written by one of our associates.)  Emacs distributions for a variety of
-platforms are also available, as is support for other emacs variants, such as
-those often found on PCs.
-
-Our unique focus on emacs-related work allows us to attract expert talent in
-this area to keep you on the leading edge of productivity, especially if you
-do software development work.  We do the porting, patching, coding,
-integrating, debugging, documenting and testing so that your people spend
-much more productive time on their mainline tasks.
-
-Standard support packages include help on all aspects of the packages
-supported, including all tools shipped as a standard part of the original
-package distribution.  In general, we want to give you an unbelievably strong
-level of support, so where we can, we will also answer questions concerning
-any add-on Lisp code that is used at your site.  Setup and customization
-help, bug fixes, and announcements of new releases are, of course, included.
-
-Support rates start at $1,500 USD, for single user support for one year.
-Discounts are available for group contracts.  We also offer Golden Support
-contracts for those who need the absolute best in mission-critical support;
-contact us for details.  Hourly development rates and fixed bid work are
-available.
-
-Updated: 1997-05-12
-\1f
-Magnus Alvestad <magnus@itanalyse.no>
-
-GNU Emacs, GCC, the Unix tools, Linux, Jolt.
-
-Rates: Free, or from $50/hour.
-
-Updated:  1997-05-09
-\1f
-AO UrbanSoft <info@usoft.spb.su>
-St. Petersburg State University Science Campus
-St. Petersburg, Russia
-www.usoft.spb.ru
-
-AO UrbanSoft packages, markets and supports
-industry standard free software products,
-including the Linux operating system and
-TeX document compiler.
-The company also provides programming services 
-based on TeX, Tk, Python, HTML, Java, Perl and
-Intranet. 
-
-Rates approximately 15 USD per hour.
-
-Updated: 1997-05-25
-\1f
-Joseph Arceneaux               <jla@ai.mit.edu>
-PO Box 460633                  http://www.samsara.com/~jla
-San Francisco, CA  94146-0633
-+1 415 648 9988
-+1 415 285 9088
-
-Recently led the project making Wells Fargo Bank the first to provide
-secure customer account access over the Internet.
-
-Former FSF staffmember.  Performed X11 implementation of Emacs version
-19, designed and implemented WYSIWYG Emacs.  Installed and
-administered FSF network.  Maintainer of GNU indent.  Over 15 years
-experience with Unix and other systems, from writing ROM monitors to
-UI design and system administration.
-
-I provide installation, porting, debugging and customization or
-development of GNU and other Unix software.  I also design and
-implement free software projects and consult on software engineering
-and systems design.  Handholding and  teaching services are also
-available as well as things like LAN and compute--infrastructure design.
-
-Time and material rates around $150 USD per hour, depending upon the
-particular job.  I am also very interested in fixed-bid jobs.  For
-selected non-profit organizations with worthy goals, I work for free.
-
-Updated: 1995-10-17
-\1f
-Gerd Aschemann         <Aschemann@Informatik.TH-Darmstadt.de>
-Osannstr. 49
-D-64285 Darmstadt
-Tel.: +49 6151 16 2259
-http://www.informatik.th-darmstadt.de/~ascheman/
-
-- System Administrator (UNIX) at CS Department, TU Darmstadt, Germany
-- 17 years experience with CS, System administration on different platforms
-- 10 years with UNIX/Networking/FreeWare/GNU/X11
--  8 years organizer of Operating Systems and Distributed Systems courses
-- Lectures on System and Network Administration
-- Platforms: Solaris, SunOS, Ultrix, OSF1, HP-UX, Linux, FreeBSD, AIX, SCO
-- Distributed Platforms and Information Systems (CORBA, WWW, Java, FTP)
-- Experience with parallel environments (Connection Machine, Meiko, Parsytec)
-- Consultant
-
-Rates are at 130,-- DM (~80 US$) per hour minimum, depending on the job.
-I am willing to travel for sufficiently large jobs.
-
-Updated: 1997-05-07
-\1f
-
-                       Basis Technology Corp.
-                    One Kendall Square, Bldg 200
-                        Cambridge, MA 02139
-                               U.S.A.
-
-                        Tel: +1-617-252-5636
-                        Fax: +1-617-252-9150
-                     E-mail: <info@basistech.com>
-                   Web: http://www.basistech.com
-
-Technical Expertise:
-  Multilingual software development
-  Internationalization and localization of software products
-  International character encodings, including Unicode, ISO-10646,
-    ISO-2022, ISO-8859-n, JIS, KSC5601, BIG5, GB2312
-  Translation of technical materials into Japanese, Korean, and Chinese
-    including HTML, SGML, RTF, MIF, etc.
-
-GNU-related Services:
-  Custom internationalization and localization of GNU software, or
-    applications developed using GNU tools (GCC, G++, Emacs Lisp, etc.)
-  Custom multilingual application development based on MULE.
-
-GNU Contributions:
-  Organized 1992, 1993, and 1994 fund-raising seminars and lecture
-    tours for FSF in Japan.
-  Negotiated book royalty agreements with Japanese publishers on
-    behalf of the FSF.
-  Negotiated hardware contributions from Japanese PC vendors to
-    the FSF.
-
-Contacts:
-  Carl Hoffman, Steve Cohen, or Karen Watts
-
-Updated:  1997-05-07
-\1f
-Laurent Bernardin
-16, rue Dicks
-L-6944 Niederanven
-Luxemburg
-<bernardin@inf.ethz.ch>
-+41 1 632 7469
-
-Support and installation of all GNU software.
-
-Expertise: C, C++, Java, Motif, X, Unix administration, network security
-
-Rates: ~60 US$ / hour (Flux 2000.-)
-
-Updated:  1997-05-07
-\1f
-Paul Black                                      <paulb@triode.apana.org.au>
-Sydney, Australia
-
-     I am available for general consulting on GNU software.  My specific
-areas of interest are:
-       - general C, C++, ADA and APL programming
-       - Gnu/unix utilities
-       - Troff
-       - Real Time Software
-       - Linux
-       - IP Comms, SMTP, NNTP, HTTP and WWW
-       - Simulation
-
-I am happy to provide free consulting/services if the work is of the order of
-a couple of hours. If more time is required, I am happy to negotiate depending
-on the nature of the work, my indicative rate is $40 per hour.
-
-Entered: 1996-07-10
-\1f
-Keith Bostic
-
-       I'm interested in supporting/extending the ex/vi editors,
-       which I wrote.  On-site or by email, rates are based on the
-       project.  <bostic@cs.berkeley.edu>
-
-Entered:  1996-07-15
-\1f
-Philip Brown
-<phil@mitre.org>
-(703) 893-8967 (prefer email)
-Northern-VA, D.C. Area
-Rates: $40/Hr; less for educational or charitable organizations
-
-Systems Supported:
-        HP9000/7xx running HP/UX 8.07 - 10.X
-        IBM RS6000 running AIX 3.2.X
-        Also SGI/Indy and Sun/Sparcs
-
-Software Supported:
-        Most all FSF (Gnu) software
-        esp. GCC, Emacs, Binutils, GS, etc...
-
-Statement:
-        I'd be more than happy to assist anyone in my area with acquiring,
-        installing, and configuring any FSF tools/utilities on any of the
-        above systems.  I'm also willing to work with other UNIX systems not
-        listed above. In addition, I'd be happy to share my many years of
-        experience with anyone having difficulty using or configuring these
-        tools.  I've been installing and using them for about 5 years now
-        and I'll swear by their quality and the people/principles that made
-        them available.
-
-
-                       Phil Brown
-
-Updated:  1997-05-07
-\1f
-James Craig Burley
-97 Arrowhead Circle
-Ashland, MA 01721-1987
-508 881-6087, -4745
-(Please call only between 0900-1700 Eastern time, and only if you
-are prepared to hire me -- ask me to help you for free only
-via email, to which I might or might not respond.)
-Email: <burley@gnu.ai.mit.edu> --preferred--
-       <burley@cygnus.com>
-       <burley@world.std.com>
-
-Expertise:
-    Compiler Internals (author of GNU Fortran, for example)
-    Operating Systems Internals
-    Tools/Utilities Development and Maintenance
-    Microcode Development and Maintenance (primarily VLIW machines)
-    System Design (computers, operating systems, toolsets, &c)
-    Debugging (often asked to help debug Other People's Code)
-    Documentation (authored many books and ran a few doc projects)
-    Extensive experience with a variety of operating systems, hardware,
-       languages, and so on
-
-Rate: $100/hour -- willing to consider flat-fee arrangements
-
-Updated: 1997-05-07
-\1f
-Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
-Becket House
-66 Highland Ave. No. 8
-Somerville, MA  02143
-(617) 623-0654
-
-
-All GNU software: Installation, customization, answering simple or
-                 complex questions, bug fixing, extension.
-
-Experience:  I have done Unix and GNU programming for several years,
-            I am the primary author of the Hurd (which provides most
-            kernel related facilities for the GNU OS).
-
-I am easily available in the Cambridge/Boston area; work via email.
-I am willing to travel for sufficiently large jobs.
-
-Rates: $100/hr, negotiable, less for non-profit organizaions.
-
-Updated: 1997-05-07
-\1f
-   C2V                         Michel Delval <mfd@ccv.fr>
-   82 bd Haussmann             Jean-Alain Le Borgne <jalb@ccv.fr>
-   75008 Paris
-   France
-   Tel (33 1) 40.08.07.07
-   Fax (33 1) 43.87.35.99
-   Compuserve 100413,1012
-   http://c2v.com
-
-   We offer source or source+binary distribution, installation, training,
-   maintenance, technical support, consulting, specific development and
-   followup on the GNU software development environment: Emacs, gcc/g++,
-   binutils, gas, gdb.
-
-   Experience: adapted gcc, gas and binutils to work as cross-development
-   tools for the Thomson D950 DSP chip: GCC parser and typing system
-   have been augmented to allow the manipulation of variables located in
-   separated memory spaces. Porting on new platforms, and professionally
-   developing software with the GNU tools in the Unix/X11 environment
-   since they were first available.
-
-   Rates: from 2000 FF/day to 150 000 FF/year, 40% discount for
-   educational institutions, add taxes and expenses.  Ask for list.
-
-Updated: 1997-05-09
-\1f
-Bruce Dawson    -    <jbd@codemeta.com>
-CodeMeta, Inc.
-Epping, NH  USA
-800-468-8750
-
-Specializing in GNU tools such as guile, CVS, gnats, bash, gawk, fileutils...
-
-Services:
- o 800 phone support.
-
- o Modification and development.
-
- o Training.
-
-Rate: $75/hour or per quote.
-
-http://www.codemeta.com
-
-Updated: 1997-05-09
-\1f
-Kevin Cosgrove         <kevinc@dOink.COM>
-
-
-       I can help folks with porting & installation of many GNU
-       and X packages on a variety of Unix platforms.
-
-
-       My rates depend on the scope of each project but range
-       from $35 to $90 per hour.
-
-Updated:  1997-05-07
-\1f
-Couvares Consulting
-211 W. Gilman St., Suite 3W
-Madison, WI 53703 USA
-Phone: (608) 256-6201
-EMail: <couvares@family.hampshire.edu>
-Contact: Peter F. Couvares
-
-Type of support: We offer phone/email support, installation, ongoing
-     administration, training, programming, and specialized consulting for
-     free software and other UNIX systems.
-
-Sample prices: USD75/hour commercial, 40/hour nonprofit, sliding scale
-for individuals.
-
-Updated:  1996-12-04
-\1f
-Stuart Cracraft                <cracraft@ai.mit.edu>
-25682 Cresta Loma
-Laguna Niguel, CA, 92677, USA
-GNUline: 714-308-7900
-Website: http://www.earthlink.net/~cracraft/index.html
-Rate: $90/hour
-Consultation topics:
-Entire GNU suite - porting, compilation, installation,
-user-training, administrator-training
-Method: telephone line support, call-in via modem to your site,
-work over the Internet, or in-person visit.
-Experience: supporting GNU since the mid-1980's, coordinator
-of GNU Chess (original author), GNU Shogi, GNU Go. Ported GNU Emacs
-to Solaris (System V Release 4). Expertise in C, Emacs Lisp, Perl,
-Expect, Oracle, Informix, SunOS, Solaris, NIS, NFS.
-
-Customized programming also available.
-
-Updated: 1997-05-07
-\1f
-Noel Cragg                      <noel@cyclic.com>
-6244 Aberdeen Av
-Goleta CA 93117
-805-899-4695
-
-I'll do installation, debugging, and extension of GNU tools on a
-contract basis.  CVS and configuration management are my current
-specialties.  Rate: $75/hour or per-project negotiated fee.
-
-Updated: 1997-05-07
-\1f
-Cygnus Solutions
-<info@cygnus.com>
-1325 Chesapeake Terrace
-Sunnyvale, CA 94089 USA
-+1 408 542 9600 voice
-+1 408 542 9699 fax
-Web Site: http://www.cygnus.com
-
-
-Cygnus Solutions provides supported and maintained versions of gcc, g++, gdb
-with GUI, GNU linker and GNU macro assembler.  In addition, Cygnus provides
-these GNU software development tools for well over 100 host-target
-configurations.  Support includes bug fixes and semi-annual releases of the
-toolset.  Each release is regression tested and includes substantial
-improvements and additions to the current release.  Support is available for
-groups of 5 or 25 on a wide range of standard, special and vintage
-toolchains for native and embedded applications.  New target processors are
-being added regularly.  Rates for support for standard products start at $7495.
-
-Cygnus Solutions contacts:
-
-       Kathy Powers
-       ph: +1-206-888-6002
-       fx: +1-206-888-6145
-       email: <kpowers@cygnus.com>
-
-
-       Erik Westcott
-       ph: +1 408 542 9637
-       fx: +1 408 542 9699
-       email:  <westcott@cygnus.com>
-Updated: 1997-05-23
-\1f
-Marcus G. Daniels              <marcusd@gnu.ai.mit.edu>
-31060 S. Kaufman Rd.           <marcus@tdb.com>
-Canby, OR  97013-9520          <marcus@sysc.pdx.edu>
-(503) 651-2694                 
-
-I can customize, extend, port, and repair many types of free software.
-I maintain the CLISP Common Lisp implementation and contribute to
-several GNU packages (e.g. Emacs).  Ten years of C and Unix
-experience.  Consulting rates start at $40 US/hr.
-
-Updated: 1997-05-07
-\1f
-Edgar Der-Danieliantz (Danielyan) <edd@acm.org>
-P.O. Box 10             FAX +374 2 28 50 82
-Yerevan 375009
-ARMENIA
-
- Support for GCC, X Window System, WWW, Tcl/Tk, logic programming,
- Internet security, TCP/IP.
-
- Experience:
-    OS's: 4.4BSD, SVR4.2, FreeBSD, SCO, Solaris, UnixWare.
-    Languages: C, C++, Objective C, Pascal, Tcl/Tk, Perl, Prolog
-    Platforms: Intel, SPARC, Mac, VAX, NeXT.
-
- Rates: Depending on type of work, approx. $20/hour. Contact for more
-        information.
-    Negotiable for individuals and non-profit organizations.
-    FREE for individuals who can't pay. Your 'Thanks!' just enough! :-)
-    Payment by international wire transfer or check.
-
-Updated:  1997-05-07
-\1f
-Echo Labs                  <echo@iinet.net.au>
-29 Weld St,                http://www.iinet.net.au/~echo/
-Nedlands, WA 6009
-Perth, Australia
-+61 (0) 41 985 9603
-
-Echo Labs is a software consultancy that also provides support and
-development skills.  Specialising in GNU software, particularly Tcl/Tk
-and Linux. We can deliver systems at a fraction of the cost of those
-based on more traditional technologies.  Internet/intranet and data
-communications solutions, for all platforms are undertaken.  GUI
-front-ends done quickly.
-
-While typically involved in engineering and technical area, any
-GNU/freeware software will be supported.
-
-For further details see: http://www.iinet.net.au/~echo/
-
-Experience: 12+ years C/Unix, Sun, SCO, Linux, Win/NT.
-            Systems programming, device drivers, hardware interfacing.
-            GNU tools/utilities,
-            Embedded & realtime systems, software, firmware, hardware.
-            Communications protocols and implementation.
-
-Degrees:    BAppSc (CS), Curtin University, Perth
-
-Rates:      AUS $50-75/hr neg.
-
-Updated:    1997-05-09
-\1f
-Free Software Association of Germany
-Michaela Merz
-Heimatring 19
-6000 Frankfurt/Main 70
-phone:   (+49 69) 6312083)
-ert  :   (+49-172-6987246)
-email:   (info@elara.fsag.de)
-
-Supporting all kinds of freeware (i.e. GNU), freeware development, consulting,
-training, installation.         Special LINUX support group.
-
-RATES:
-
-Companies and for profit
-organizations             :  100 US$ / hour
-Private and not-for-profit
-organizations             :   40 US$ / hour
-ert (24h Emergency
-response team)            :  300 US$ / hour
-
-Entered: 1994-04-14
-\1f
-Noah Friedman                  <friedman@prep.ai.mit.edu>
-1111 W. El Camino Real #109-331
-Sunnyvale, CA 94087
-(permanent)
-
-Author of several Emacs Lisp packages and parts of Emacs, as well as
-numerous network and unix system utilities.  Co-maintained GNU Texinfo and
-Autoconf for a couple of years.  Experienced unix systems administrator.
-FSF employee Feb 1991--Sep 1994.
-
-I can perform installation, porting, and enhancement of all GNU software
-and any other free software, including the Linux kernel; system design and
-administration for unix-type systems and IP networks; and I am willing to
-provide handholding for shell programming, Emacs Lisp development, and
-version control systems such as RCS and CVS.
-
-Fees negotiable, averaging $75-$100/hour.  I can work in the California bay
-area or anywhere accessible on the Internet.  For larger jobs I may be
-willing to travel.
-
-Updated: 1997-05-08
-\1f
-Ronald F. Guilmette    <rfg@monkeys.com>
-RG Consulting
-1751 East Roseville Pkwy. #1828
-Roseville, CA 95661
-Tel: +1 916 786 7945
-FAX: +1 916 786 5311
-
-Services:      Development & porting of GNU software development tools.
-
-GNU Contributions:
-               Invented, designed, and implemented the protoize and
-               unprotoize tools supplied with GCC2.
-
-               Designed and developed all code to support the generation
-               of Dwarf symbolic debugging information for System V Release
-               4 in GCC2.
-
-               Performed original port of GNU compilers to SVr4 system.
-
-               Finished port of GNU compilers to Intel i860 RISC
-               processor.
-
-Experience:    13+ years UNIX systems experience, all working on compilers
-               and related tools.
-
-               7+ years working professionally on GCC, G++, and GDB under
-               contract to various firms including the Microelectronics
-               and Computer Technology Corporation (MCC), Data General (DG),
-               Network Computing Devices (NCD), and Intel Corp.
-
-Other qualifications:
-               Developer of the RoadTest (tm) C and C++ commercial
-               compiler test suites.
-
-               Former vice-chairman of UNIX International Programming
-               Languages Special Interest Group (UI/PLSIG).
-
-               Bachelor's and a Master's degrees, both in Computer Science.
-
-Rates:         Variable depending upon contract duration.  Call for quote.
-
-Updated: 1997-05-07
-\1f
-Michael P. Deignan
-Ideamation, Inc.
-136 Nelson Street
-Providence, RI 02908
-(401) 331-3708
-(401) 272-6449 fax.
-
-Rate:  Varies depending on complexity of task.
-       Hourly and fixed-rate contracts are available.
-Programs Supported:    All
-
-Updated: 1997-05-07
-\1f
-Interactive Information Limited
-
-Interactive Information Limited is an Edinburgh-based company that
-specialises in WWW services and support for using the Internet for
-marketing.
-
-Our staff have many years experience in using, and developing lisp packages
-within, Emacs, and in using other GNU/Unix tools, particularly under public
-domain UNIXes.
-
-We can provide services throughout the UK, at any level from general
-consultancy through fetching, installing and customising software to
-bespoke programming.  Fees would be in the range #300 - #600 per day,
-depending primarily on the size of the job.
-
-You can contact us
-       by email: <enquire@interactive.co.uk>
-       by phone: 0370 30 40 52 (UK)
-                 (+44) 370 30 40 52 (International)
-       by post: 3, Lauriston Gardens,
-                Edinburgh EH3 9HH
-                Scotland
-
-Entered: 1997-05-09
-\1f
-Scott D. Kalter                        <sdk@twinsun.com>
-2032 Corral Canyon
-Malibu, CA 90265-9503
-Home: (310) 456-0254
-
-Very familiar with all levels of Elisp programming.  Taught Emacs use
-and customization in universities and industry.  Extensive
-troubleshooting and user support experience.  Co-developed an
-object-oriented extension to Elisp (Eoops) that can be used for
-projects.  Extensive Elisp level modification for rapid prototyping of
-designs used in groupware research.  This includes the development of
-an infrastructure to support multiple, communicating Emacs processes.
-
-Prefer e-mail communication to telephone calls.
-
-Updated:  1997-05-07
-\1f
-Kaman Sciences Corporation
-Griffiss Business & Technology Park
-775 Daedalian Drive
-Rome, NY 13441-4909
-(315) 334-4900
-CONTACTS: 
-       Dennis Fitzgerald       <dfitzgerald@rome.kaman.com> 
-       Tom Robbins             <trobbins@rome.kaman.com>
-Kaman Sciences has performed a GNU port for a custom RISC processor.
-We have experience in the definition and description of the machine
-register transfer language to the GNU tool-set.  This includes rewriting
-and modification of the necessary description and source files of gcc, gas,
-and gld and other binutils.  Kaman also has services for installation and
-setup of GNU tools, (GAWK, GCC, EMACS, etc.) on Sun workstations.
-  
-Work is on a "service contract" basis and development is charged either
-hourly or as a fixed price contract.
-Consulting rates: $70 to $175 per hour.
-Updated:  1997-05-07
-\1f
-Ehud Karni      <kehud@simonwiesel.net.il>
-
-I am an UNIX system programmer. My skills include writing in C and scripts.
-
-In the GNU domain, I consider myself an expert on Emacs.  I have written several
-packages in emacs-lisp (.el) including: better Hebrew support, another marking
-system, emulation for CDC full screen editor (FSE), COBOL mode, mathematical
-expression computing, and enhancements to vc.el (customization) and to ange-ftp
-(added Novell and NT operating systems).
-     I have installed and tested Emacs and my el's on several machines: DG,
-HP, Alpha (OSF) and PC (DOS).
-     I installed and worked with several other GNU packages - RCS, Gmake, GCC
-and more, but I'm not an expert in these packages.
-
-I work in Israel and my normal rate is $40 per hour.
-
-Entered:  1996-07-15
-\1f
-Joseph R. Kiniry               <kiniry@cs.caltech.edu>
-Caltech Mailstop 256-80                http://www.cs.caltech.edu/~kiniry/
-Pasadena, CA 91125              <jrk@metagenesis.com>
-Phone: 818-395-4840
-Fax: 818-792-4257
-
-Long-term high-level consultant in a variety of domains.  See
-http://www.cs.caltech.edu/~kiniry/resume.html for more information on
-professional and academic background.
-
-I provide installation, porting, debugging, customization, design, and
-development of GNU and other UNIX and non-UNIX software.  I am or have
-been a certified developer with Microsoft, SunSoft, NeXT, and Amiga.
-I have a great deal of development and management experience and an
-extremely broad background which contributes to my excellent system
-integration capabilities.  I have a special expertise and conduct
-research in distributed object technologies.
-
-Time and material rates for local work vary regionally, but are
-currently $250 per hour on the west coast.  Other rates apply for
-long-term jobs (day rates, travel, etc.) and remote work (usually 1/2
-fee).  I am interested in fixed-bid jobs and will work for lower rates
-for non-profit organizations and educational institutions.
-
-Updated: 1997-05-07
-\1f
-Bradley M. Kuhn
-<bkuhn@acm.org>
-http://www.smart.net/~bkuhn
-
-I am available for primarily Unix system administration consulting, including
-but not limited to installation, configuration and integration of GNU tools
-and other copy-lefted software such as GNU/Linux.
-
-I am particularly skilled at end-user hand-holding and assisting in the
-integration of GNU and other copy-lefted software into new environments that
-have not used such tools in the past.
-
-Please visit my homepage for more information on my background and skills.
-
-I am available for both 1099 (preferred) and W2 on-site contracting in the
-Baltimore, MD metropolitan area, as well as remote consulting via dialup or
-Internet connection anywhere in the US.
-
-My rate is in the $40/hour range, depending on the circumstances.  Rates for
-non-profit organizations are substantially lower, and possibly free.
-
-Updated: 1996-12-31
-\1f
-Fen Labalme                       <fen@comedia.com>
-CoMedia Consulting           http//www.comedia.com/comedia/
-40 Carl Street #4                 WE ARE EVERYWHERE
-San Francisco CA 94117             JUST SAY "KNOW"
-
-Consulting, installation, customization and training for GNU Emacs,
-and selected other GNU & network software.  Design & implementation
-of free software projects, as well as software engineering & system
-design.  I have been hacking Emacs since '76 when it was TECO and ^R
-macros (don't ask), and am inter/intra-network, UNIX & Web friendly.
-
-Rates: $75 hour & up, depending;  flat rate jobs considered.
-       Lower rates, barter or free for selected non-profits.
-
-Updated: 1997-05-07
-\1f
-Greg Lehey
-LEMIS
-PO Box 460
-Echunga SA 5153
-Australia
-
-Phone: +61-8-8388-8250
-Fax:   +61-8-8388-8250
-Mobile:        +61-41-739-7062
-Mail   <grog@lemis.com>
-
-Services: Supply, porting, installation, consultation on all GNU
-products.
-
-Experience: 20 years OS and compiler experience, ports of most GNU
-products.  Author of ported software CD-ROM for UNIX System V.4.2,
-"Porting UNIX Software" (O'Reilly), "Installing and Running FreeBSD"
-and "The Complete FreeBSD" (both Walnut Creek).
-
-Rates: Choice of AUD 120 per hour or hotline rates AUD 2.50 DM per
-minute.  Outside Australia, $US 100 per hour or $US 2 per minute.
-Quick questions may be free.  Limited free support available for
-purchasers of LEMIS CD-ROMs.
-
-Updated: 1997-05-09
-\1f
-Rohan Lenard                            <rjl@wr.com.au>
-32 Holtermann St.
-Crows Nest, NSW 2065
-AUSTRALIA
-+61 411250024
-
-* The human face behind the bug-g++@prep.ai.mit.edu mailing list - known
-  in the past as <rjl@iassf.easams.com.au> and <rjl@ot.com.au> - now
-  known as <rjl@wr.com.au>.
-
-* Interested in providing first line support and development.
-
-Experience: 10+ years C/Unix, 6+ years C++
-            Extensive experience with GNU tools, cross-compilers,
-            embedded/hosted systems, realtime, simulations,
-            and military software.
-
-Degrees:    BSc (CS), BE (Comms), University of Melbourne
-
-Rates:      AUS $75+/hr neg.
-
-Updated:  1997-05-17
-\1f
-Reuven M. Lerner               <reuven@netvision.net.il>
-17 Disraeli Street
-Haifa 34333
-Israel
-
-Phone:     04-824-2265 (within Israel)
-       +972-4-824-2265 (outside of Israel)
-
-Fax:       04-826-1219 (within Israel)
-       +972-4-826-1219 (outside of Israel)    
-
-WWW: http://www.netvision.net.il/php/reuven
-
-- System and network administration, especially Linux-based systems
-  and networks
-- Administration, training, and programming for Internet nodes and
-  World-Wide Web sites
-- Installation, support and training in the use of Linux, Emacs, Perl,
-  and other free software
-- Expertise in C, Emacs Lisp, and Perl
-
-Consulting rates: $75/hour, less for educational institutions.
-
-Updated: 1997-05-07
-\1f
-Richard Levitte             (in TeX: Richard Levitte
-Levitte Programming                  Levitte Programming
-Spannvagen 38, I                     Spannv\"agen 28, I
-S-168 35  Bromma                     S-168 35  Bromma
-Sweden                               Sweden)
-Tel.nr.:  +46 (8) 26 52 47      (there is an answering machine)
-Cellular: +46 (10) 222 64 05
-e-mail:   <levitte@lp.se>
-
-What I do:
-       Primarly I work on GNU software for VMS, both VAX and AXP.  I've
-       been porting GNU Emacs to VMS since spring 1991.  I've  ported a
-       bunch of other GNU programs as well.  I maintain GNU vmslib.
-       For further info, see http://www.lp.se/~levitte/prof/resume.html
-
-Programs supported:
-       To a varying degree (ranging from extention and porting to
-       installation and simple questions) at the time of updating this
-       entry:
-       - GNU vmslib, emacs, autoconf, zip, diffutils, m4, patch, texinfo,
-         C/C++; on both VMS and Unix.
-       - Other GNU programs to a small degree; on Unix.
-       For further info, look at http://www.lp.se/products/gnu.html
-
-Experience:
-       Fluent in TeX/LaTeX and many programming languages.
-       Modified key elements in Emacs (e.g., memory and process management)
-       to work transparently on VMS.  I have very good knowledge in the VMS
-       operating system.  I'm also knowledged in the a few Unix flavors.
-       For further info, see http://www.lp.se/~levitte/prof/resume.html
-
-Your Rate:
-       $70-$100/hour (500-800 SEK in sweden), plus expenses.  My rates
-       are negotiable, depending on how interesting the project is to me.
-
-Updated: 1997-05-08
-\1f
-Lexa Software                           info@lexa.com
-1590 The Alameda, Suite 102
-San Jose, CA  95126
-
-+1 800 278-2040
-+1 408 278-2043  voice
-+1 408 278-2045  fax
-
-http://www.lexa.com
-
-Lexa Software provides support for GNU C/C++ including the GNU debugger
-and linker.  Lexa has extensive experience supporting GCC/G++ on SNI
-and Pyramid as well as all other MIPS ABI platforms.  We offer support
-to 2, 5, 25 and larger number of users via phone, email, ftp.
-
-Updated:  1997-05-01
-\1f
-Gord Matzigkeit                      <gord@gnu.ai.mit.edu>
-2220 Capitol Hill Crescent           http://www.m-tech.ab.ca/~gord/
-Calgary, Alberta   T2M 4B9           Voice: (403) 282-1387
-CANADA                               FAX:   (403) 284-0137
-
-I will help install badly-behaved source code packages, and have experience
-fixing them to conform to GNU standards.  I will gladly help novices and
-intermediate computer users to understand, install, and use free software,
-whether or not I have prior experience with that software.  I know my
-limitations well, and will freely give other contacts if I do not want to
-solve your problem myself.
-
-I have installed and administered free and proprietary systems in home,
-academic, and business environments.  I have practical experience in most
-aspects of Unix and network security.  I know how to diagnose a complex
-existing computer system and incrementally replace it with a superior free
-system without disrupting service.
-
-I have over 2 years of experience with several of the major free OSes:
-Linux/GNU (Red Hat, Debian, Slackware), NetBSD, FreeBSD, and GNU/Hurd.  I am
-the maintainer of GNU Libtool and GNU DLD.  Some of my specialties are:
-Emacs, Automake, Autoconf, SANE, C, Perl, and shell script programming.
-
-My rates start at $10 (Canadian dollars) per hour.  When I am not starving, I
-do not charge worthy non-profit organizations.
-
-Updated:  1997-05-08
-\1f
-Andrew McCallum
-6623 Dalzell Place
-Pittsburgh, PA  15217
-Home: (412) 422-0688
-<mccallum@cs.cmu.edu>
-http://www.cs.rochester.edu/u/mccallum
-
-Services:     Support, enhancements, new development in:
-               GNU Objective C
-               GNUstep, both graphical and non-graphical.
-               GNUstep Base Library: libgnustep-base
-               (especially Distributed Objects)
-               Interface between Objective-C and Guile or TCL: libguileobjc.
-
-Experience:    10+ years of UNIX experience.
-               Programming for NeXTSTEP since version 0.8, 1988.
-               MA and PhD in Computer Science.
-               Extensive work on GNU Objective C Runtime.
-               Author of GNUstep Base Library, including Distributed Objects
-               FSF Chief Maintainer of the GNUstep Project.
-               Contributor to GCC, Emacs, Guile.
-               C, Objective-C, Postscript, Scheme, Lisp, ELisp, Linux.
-               English and Francais.
-
-Rates:         $90-$150 / hour, negotiable, depending on many variables.
-
-Updated: 1997-05-07
-\1f
-Erik Naggum            <erik@naggum.no>
-P.O. Box 1570 Vika     http://www.naggum.no
-0118 OSLO              phone: +47 8800 8879
-NORWAY                 NIC handle: EN9
-
-Background: I have extensive experience with programming under Unix, in C
-in particular (since 1983), with standards and specifications for Internet
-protocols (since 1987), International Standards for character sets and
-encoding schemes (since 1988), ISO 8879 SGML (since 1990, national head of
-delegation to ISO/IEC JTC 1/SC 18/WG 8 since 1991), and ANSI X3.226 Common
-Lisp (since early 1994).  I have been an Emacs user and programmer from
-1984 to 1987 (TOPS-20) and from 1991 to present (Unix).  since early 1994,
-I have worked on GNU Emacs development, in both Lisp and C, and since mid
-1995, I have been tracking the development code.
-
-Services I offer the free software community include supporting Emacs users
-and programmers with expert advice (gratis on USENET or mailing lists where
-others may benefit), customizing and writing Emacs functions and packages,
-delivering courses and seminars from tutorials to writing Emacs Lisp and C
-extensions, and providing general aid with all GNU software.
-
-My standard rate is a flat USD 80 per hour or USD 2 per minute (you decide
-which time unit to apply), but to offset the cost of processing money, the
-minimum credit card charge is USD 100 and the minimum invoiced amount is
-USD 250.  Discounts are available to worthy causes -- present your case.
-Time away from home is billed at USD 40 per hour around the clock to
-encourage remote work.  (Courses and seminars are negotiated individually.)
-
-Please call only about actual work, I prefer mail for all other questions.
-
-Updated: 1997-07-18
-\1f
-NET-Community                   <sales@net-community.com>
-522 SW 5th Avenue               http://www.net-community.com
-Suite 1105
-Portland, OR 97204 USA
-1-800-919-0060 voice  
-1-503-274-4423 voice  
-1-503-274-5406 fax    
-
-NET-Community provides support for the complete GNUstep toolset
-including the Objective-C runtime within GCC, the GNUstep Base Library,
-the Display Ghostscript system, the GNUstep GUI Library, the GNUstep
-X/DPS GUI Backend, and the GNUstep Database Library. NET-Community also
-provides support for its own MediaBook software including the MediaBook
-Random Library and the MediaBook Speech Synthesis Library. 
-NET-Community actively supports and develops free software on all
-GNUstep platforms; a portion of the proceeds, usually 20%, generated
-from CD-ROM sales go towards additional development and enhancement of
-GNUstep.
-
-Updated: 1997-05-12
-\1f
-  Open Systems Consultants a.s
-  St. Olavsgt. 24
-  N-0166 OSLO
-  NORWAY
-
-Phone:               Fax:
-  +47 22 20 40 50    +47 22 20 02 85
-
-Web:                 E-mail:
-  http://www.osc.no  <gnu-support@osc.no>
-
-Open Systems Consultants a.s can provide programming support for all
-GNU software -- extending or adopting it to meet customer needs.
-Prices vary with software and project.  Hourly fees are in the $80-120
-range.  Fixed-priced projects are also available.  No phone support.
-
-Updated:  1997-05-08
-\1f
-Francesco Potorti` <F.Potorti@cnuce.cnr.it>
-Via S.Stefano, 8
-56123 Pisa, Italy
-Tel. (050)560671
-
-Emacs: installation and maintenance, training and tutorials,
-       customisation, extensions, troubleshooting.  Author of some of
-       the packages in the emacs distribution, has made the porting
-       of emacs to the Motorola Delta architecture.
-
-Other: installation and maintenance of GNU software.  Experience with
-       hylafax, RCS, gperf, etags, smail, indent, diff, gawk, gcc,
-       screen.  Is the current maintainer of etags.
-
-Rates: 30-80 KL/hr, depending on experience on the particular task.
-       Average is 50 KL/hr $50/hr.
-       Prefer e-mail communication to telephone.
-
-Qualifications: Electronic Engineering degree, Pisa.  Full time
-       researcher in CNUCE-CNR.
-       Familiar with elisp programming and porting of C programs.
-
-Updated:  1997-05-08
-\1f
-Dipl.-Inform. Klaus Kaempf             <kkaempf@progis.de>
-proGIS Software
-Jakobstr. 117
-D-52064 Aachen
-Germany
-http://www.progis.de
-Tel +49 241 470670
-Fax +49 241 4706729
-
-- 15 years C/Unix experience
-- 6 years VMS experience
-- Ported BFD library, Binutils, GNU Assembler, GNU C, GNU C++,
-  GNU C++ libraries, and GNU Make to openVMS/Alpha.
-
-We do a lot of cross-platform (Unix-VMS-WindowsNT) development
-mostly with the GNU compiler environment. We are actively
-supporting GNU software on openVMS/Alpha.
-
-Rates start at 160.- DM / hour for support and
-installation. Larger projects are negotiable.
-
-Updated: 1997-05-08
-\1f
-Quiotix Corporation
-Menlo Park, CA
-
-Contact: Jeffrey Siegal
-         jbs@quiotix.com
-         415 324-0535
-
-Area of focus: Embedded systems--using GNU software to develop for
-embedded systems, porting GNU software to embedded systems, extending GNU
-software to better support embedded environments, developing new tools and
-utilities for embedded development using GNU software.
-
-Services: porting, development, support, project management, advisory
-consulting.
-
-Rates: $125-$250/hour or fixed fees depending on services provided.
-
-Updated:  1997-05-16
-\1f
-Wolfgang S. Rupprecht          <wolfgang@wsrcc.com>
-47 Esparito Ave.
-Fremont, CA 94539-3827
-(510) 659-9757
-
-Anything, (lisp, C, customization, porting, installing) I have
-written thousands of lines of GNU Emacs C and Lisp code.  Original
-author of the floating point additions in Emacs 19.
-
-Rates: $95/hr.
-
-Updated: 1997-05-08
-\1f
-Stanislav Shalunov
-
-Email: shalunov@mccme.ru
-Phones: on request
-
-Installing, configuring, helping learn any free software.  
-Handholding, trouble shooting.  Making custom changes to free 
-software written in C.  Teaching, lecturing, consulting.
-
-Want to have a free OS with free software serving your needs but do 
-not want to spend time yourself or not very skilled with the 
-computers?  Cannot decide which free software suits your needs 
-better?  Drop me a line.
-
-Well, essentially, anything else on special request.  :-)
-
-Rate: $30/hour if you are in Moscow and I am there when you request 
-job done, $50 if the job may be done remotely (like configuring user 
-level program), $60/hour + travel expenses otherwise.  (Negotiable, 
-significant discounts may apply.)
-
-Entered 1997-07-17
-\f
-Vin Shelton
-EtherSoft, Inc
-617.924.6437
-<acs@acm.org>
-
-I have been a professional programmer for 20 years, with most of that time
-spent doing UNIX/C/C++ hacking.  My specialties are (in no particular
-order): system/kernel hacking, speech recognition, perl, object-oriented
-design and analysis, FSF software (I have built nearly every FSF package on
-several different platforms), small language design and implementation, and
-HTML/web programming.  Currently I'm a member of the XEmacs beta testing
-team - I'm responsible for maintaining the version 19.15 patches and have
-written a few small packages/lisp hacks.  My rates vary from $60 - $100 per
-hour, depending on the size of the project.
-
-Updated: 1997-05-09
-\1f
-Signum Support AB              <info@signum.se>
-Teknikringen 8
-S-583 30 Linkoping, Sweden
-+46 13 21 46 00 voice
-+46 13 21 47 00 fax
-http://www.signum.se/
-
-Signum Support AB is a company dedicated to supporting, developing and
-distributing free software for mainly UNIX systems. The people behind
-Signum Support AB have many years of general UNIX and Internet
-experience, both as system administrators and as programmers, and also
-extensive experience in maintaining and administring the GNU programs
-and Linux.
-
-Signum Support develops and markets the free GUI equiped Readynet
-Internet server, the free PHTTPD http server and the easy to use Linux
-based Fuego firewall.
-
-Services offered:
-
- - Support on Internet service software, especially the free
-   Readynet Internet server we have developed for Linux.
- - Support on Linux.
- - Customization of Linux.
- - Installation and customizing GNU and other free software.  We are
-   making free software as easy to install and use as shrink wrapped
-   programs.
- - Warranty protection.
- - Finding, Recommending and Investigation of free software in any
-   area of the customers choise.
- - Regular consulting.
-
-Rates: For software items, request our price list.
-       For consulting, 700-900 SEK/hour.
-
-Updated: 1997-05-12
-\1f
-   Jon Solomon                     <jsol@gnu.ai.mit.edu>
-   235 Main St., Apt 3C-1
-   East Hartford, Conn. 06118
-   +1 860 895-8289
-
-   Maintains all GNU software... Available for General Consulting
-   (contact me if you are interested)...
-   Sendmail a specialty... Can answer questions pertaining to the
-   installation, maintainence, bug reporting and fixing for
-   most GNU products... Adhering to the FSF/GNU copyleft for all
-   work... (I only charge for the time it takes to do the above,
-   the software (and most GNU copyleft'd software) is free.
-   I can make tapes for you if you need that...
-
-Updated: 1997-05-09
-\1f
-Name:           Julian Stacey <jhs@freebsd.org>
-Location:      Munich Germany, & on the Internet.
-Qualifications: University Degree, BSc Hons Computer & Cybernetics, 1980.
-Phone:          +49.89.268616   Fax: +49.89.260812   Data: +49.89.26023276
-Resume:                http://www.freebsd.org/~jhs/
-Time Zone:      +01:00
-Rate:           130-170 DM/Hour.  2.7846 DM = 1 Pound = US $1.6332
-Commercial Independent Freelance Consultancy:
-                Any Unix (inc FreeBSD, Linux etc), C, X-Windows, FSF Tools,
-                Internet, Systems engineering, hardware interfacing, 
-                real time, comms & scientific industrial, even Cyrillic &
-                Chinese interfaces etc.  No Emacs. No Cobol.
-Free Sources:   FSF, FreeBSD & NetBSD CVS & current (daily!) & releases,
-               X-Windows, XFree86, Free dial in soon (details on web).
-               Media Copy Charge ~DM 100 QIC 1/4" 525M, 150M, & 60M; & CAS-60M.
-Free GCC-1.40  For Symmetric Computer Systems Model 375 (native cc is broken).
-Languages:      Deutsch & Francais
-                Man kann mir in Deutsch schreiben, (oder mich anrufen).
-                Je comprend Francais, mais je n'ecris pas des responses en Fr.
-! NO FREE HELP !
-       - The Free Software Foundation do not pay me.
-       - I earn my living from professional consultancy fees.
-       - Though I write code for public domain ...
-       - I will Not solve stranger's complex problems for free !
-WHEN CONTACTING ME,  DO THIS :-
-         1) Tell me Immediately,  Are You:
-               A)  Expecting to pay my bill for professional consultancy.
-               B)  Seeking a few minutes advice free of charge.
-         2) Give me your email adddress, or that of a friend.
-            or Volunteer to phone back ~ 5 days later to collect follow-up
-            info.  from the net.  (No I will not incur bills phoning you back).
-         3) Speak English if you want free advice !  I speak German, &
-            listen in French, but if you're not paying, make some effort too !
-
-Updated: 1997-05-15
-\1f
-Richard M. Stallman    <rms@gnu.ai.mit.edu>
-545 Tech Sq, Rm 430
-Cambridge, MA 02139
-
-Emacs: anything whatever
-Is anyone interested in courses in using or extending GNU Emacs?
-
-Original inventor of Emacs and main author of GNU Emacs and GCC.
-
-Rates: $6/min or $250/hr.
-
-Updated: 1997-05-09
-\1f
-Kayvan Sylvan <kayvan@sylvan.com>
-Sylvan Associates
-879 Lewiston Drive
-San Jose, CA 95136-1517
-Phone: (408) 978-1407
-Fax:   (408) 978-1417
-
-I will help you port, install and customize GNU Emacs, GCC, G++,
-bison, and other GNU tools on almost any architechture and operating
-system. Questions answered. GNU C and lisp hacking available. I will
-also do ongoing support and periodic upgrades if you get on my GNU
-software subscription list.
-
-Rates: $70-$100/hour, depending on type of work. Substantial discounts
-for long-term contracts and also for educational or non-profit
-institutions.
-
-Experience: Many different Unix systems (2.9BSD to 4.4BSD, Xenix, SVR3 and
-SVR4, Linux, FreeBSD). Systems programming and system administration on all
-brands of Unix. Kernel hacking experience. Lots of porting experience.
-
-Updated: 1997-05-09
-\1f
-TerraTel AB <info@netg.se>
-Tankeg=E5ngen 4
-S-417 56 G=F6teborg, Sweden
-+46 31 50 79 40 voice
-+46 31 50 79 39 fax
-http://www.netg.se
-
-TerraTel AB is a company that does consultant jobs and holds courses
-in the fields of Unix software, TCP/IP networking and Internet
-applications. The people behind TerraTel AB have many years
-of general UNIX experience, both as system administrators and as
-programmers, and also extensive experience in maintaining the GNU
-programs; in administration as well as finding and fixing bugs.
-
-Services offered:
-
-- Installation and customizing GNU and other free software.  We will
-  make free software as easy to install and use as shrink wrapped
-  programs.
-- Service and support subscriptions.
-- Warranty protection.
-- Customization and porting.
-- Subscriptions to new versions which we will send monthly or with
-  any other interval.
-- Finding, recommending and investigating free software in any
-  area of the customers choice.
-- Regular consulting.
-- Support on Internet service software, especially the free
-- Support on Linux.
-- Freeware based courses in Unix usage, C, C++, or any GNU tools
-
-Rates: For courses, contact us for a quote,
-For consulting, $60-120/hour, depending on contract length.
-
-Entered:  1997-05-12
-\1f
-Jonathan Thornburg / BKIS Consulting
-E-mail: <bkis@island.net>       (preferred way to contact me)
-Postal: Box 8-7, Thetis Island  BC  V0R 2Y0, Canada
-Phone:  (250) 246-3640          (somewhat unreliable)
-
-* B.Sc (Honors 1st Class) in Math+Physics+CS, M.Sc and Ph.D in Astronomy
-* 20+ years computing experience using a wide range of software and
-  hardware environments
-
-* Very fluent in C (15+ years experience)
-* Fluent in C++, Perl, sh, csh, Awk, Fortran, PL/I, Pascal, APL, Lisp,
-            Basic, Maple, Reduce, various machine languages
-* Very fluent (10+ years experience) in general Unix toolset and programming
-* Good knowledge (4+ years experience) of Unix system administration
-  (SunOS, Linux, SGI)
-* Strong background (both theory and practical experience) in Unix/network
-  security, computer graphics, X and Motif GUI programming
-* Good general knowledge of Unix (kernel) internals and device drivers
-* Very fluent in LaTeX, TeX, also HTML, HTTP, and CGI programming
-* Member of Usenix (professional and technical Unix association) and
-  SAGE (system administrator's guild)
-
-* Very strong background (extensive experience) in numerical analysis
-* Strong backgrounds in hardware architecture, microprogramming,
-  programming language implementation, compiler theory, data structures,
-  OS design and internals, networking, symbolic manipulation, AI
-
-I'm available for Unix-based contract programming, software installation,
-and/or general system administration.  My recent projects include several
-20K-50K 50K line C/Maple/Awk scientific applications, several small (1K line)
-Perl/Awk text processors and "system glue" CGI programs, finding and fixing
-bugs in a (free) 50K line graphics package, and a partially completed project
-to port (really rewrite) the GUI of a 50K line C++ Netscape plugin from
-Win32 to Unix/X/Motif.
-
-Unless otherwise required by a client, all the software I write is covered
-by the GNU Public License.  My basic rate is Can$50/hour for work I can do
-remotely over the Internet, more for on-site work, less for selected
-non-profit organizations.
-
-Updated:  1997-05-19
-\1f
-Leonard H. Tower Jr.   <tower@prep.ai.mit.edu>
-36 Porter Street
-Somerville, MA 02143
-USA
-+1-617-623-7739
-
-Will work on most GNU software.
-Installation, handholding, trouble shooting, extensions, teaching.
-
-Rates: $ 150.00/hour + travel expenses.  Negotiable for non-profits.
-
-Experience: Have hacked on over a dozen architectures in many languages.  Have
-system mothered too many varieties of Unixes.  Assisted rms with the front end
-of gcc and its back-end support.  Resume available on request.
-
-Updated:  1997-05-24
-\1f
-noris network GmbH
-Matthias Urlichs
-Schleiermacherstrasse 12
-90491 Nuernberg
-Germany
-Phone: +49 911 59818-0
-Fax: +49 911 59818-11
-<info@noris.de>
-http://info.noris.de/ (German)
-
-Expertise:
-  OS internals, esp. Linux and BSD, esp. device drivers
-  Network protocol / program design and coding
-  Utilities coding and maintainance
-  Program debugging, testing
-  User interface design and testing
-  Several programming and tool languages
-
-Services:
-  Installation, debugging, enhancement, distribution,
-    for all kinds of free software.
-  System administration for most Unix-like systems.
-  Email, Fax, phone, and in-person consulting (and/or "question answering").
-  Remote support and system monitoring (over the Internet),
-  Update service (new tools tested and installed automagically)
-  Internet access
-
-Rates:
-  DM 110 (~$70) per hour
-  Support contracts start at DM 170/month + DM 30/supported system.
-  Willing to travel for sufficiently large jobs.
-  Rates don't include taxes.
-
-Updated: 1996-07-05
-\1f
-Paul C.A. van Gool
-      <P.vanGool@LR.TUDelft.NL>
-
-Address: Faculty of Aerospace Engineering
-         Delft University of Technology
-         Kluyverweg 1,  2629 HS Delft
-         The Netherlands
-
-Phone: +31-15-2785370
-Fax  : +31-15-2786480
-
-I would like to provide unpaid support for the following things:
-
-- C
-- C++
-- f2c
-- compilation and installation of most GNU packages
-
-Updated:  1997-05-12
-\1f
-Arne Wichmann
-
-EMail: <aw@math.uni-sb.de>
-Telephone on request.
-
-I support GNU software on the following platforms:
-
-Linux
-SunOS 4.X 5.X
-HPUX 9.X
-other platforms on request.
-
-Usual rates: 20DM per hour. Free support for private people as time
-permits.
-
-Updated: 1997-05-16
-\1f
-Jody Winston
-xprt Computer Consulting, Inc.
-731 Voyager
-Houston, TX, 77058
-(281) 480-UNIX, <jody@sccsi.com>
-
-We have supported, installed, and used the entire GNU software suite
-for over 8 years on many different Unix platforms.  We have written
-character device drivers and proc file systems for custom hardware
-running on Linux.  In addition, we have developed a custom X11 server
-and X input extensions. Our consulting rate is $150.00 US dollars per
-hour, negotiable, plus a per diem for out of town work.
-
-Updated:  1997-05-12
-\1f
-Lige Zhou
-Consultant
-Open Technologies Corporation
-Sun Lotus Bldg. 2nd Floor
-2-9-1 Chuou, Nakano-ku, Tokyo 164 Japan
-Tel: +81-3-3365-2911 Fax: +81-3-3365-2920
-E-mail: <zhou@opentech.co.jp>
-
-My profile is listed at:  http://www.opentech.co.jp/~zhou/
-
-I have two years of experience porting and supporting GNU C Compiler and
-GNU Assember at the Wingnut project of SRA, Inc., Tokyo.
-
-I can provide free consultation on these products if the problem is not
-time-consuming.
-
-Updated:  1996-12-04
-\1f
-
-For a current copy of this directory, or to have yourself listed, ask:
-       gnu@prep.ai.mit.edu
-
-** Please keep the entries in this file alphabetical **
diff --git a/gcc/bi-parser.c b/gcc/bi-parser.c
deleted file mode 100644 (file)
index 9f6f2b0..0000000
+++ /dev/null
@@ -1,980 +0,0 @@
-
-/*  A Bison parser, made from bi-parser.y with Bison version GNU Bison version 1.24
-  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define        DEFOP   258
-#define        STRING  259
-
-#line 22 "bi-parser.y"
-
-
-#include <stdio.h>
-#include "hconfig.h"
-#include "bi-defs.h"
-
-extern char yytext[];
-extern int yyleng;
-
-
-/* Chain of all defs built by the parser. */
-struct def *defs;
-int ndefs;
-
-static struct node *makenode ();
-static struct variation *makevar ();
-static struct def *makedef ();
-
-void yyerror ();
-
-
-#line 44 "bi-parser.y"
-typedef union
-{
-  char *string;
-  struct def *def;
-  struct variation *variation;
-  struct node *node;
-} YYSTYPE;
-
-#ifndef YYLTYPE
-typedef
-  struct yyltype
-    {
-      int timestamp;
-      int first_line;
-      int first_column;
-      int last_line;
-      int last_column;
-      char *text;
-   }
-  yyltype;
-
-#define YYLTYPE yyltype
-#endif
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define        YYFINAL         39
-#define        YYFLAG          -32768
-#define        YYNTBASE        8
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 259 ? yytranslate[x] : 17)
-
-static const char 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,     5,
-     7,     2,     2,     6,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     2,     4,     7,    18,    20,    24,    28,    34,    42,
-    52,    53,    55,    59,    60,    62,    66
-};
-
-static const short yyrhs[] = {     9,
-     0,    10,     0,     9,    10,     0,     3,     5,     4,     6,
-    13,     6,     5,    11,     7,     7,     0,    12,     0,    11,
-     6,    12,     0,     5,    13,     7,     0,     5,    13,     6,
-    14,     7,     0,     5,    13,     6,    14,     6,    14,     7,
-     0,     5,    13,     6,    14,     6,    14,     6,    14,     7,
-     0,     0,     4,     0,     5,    15,     7,     0,     0,    16,
-     0,    16,     6,    15,     0,     4,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-    60,    65,    67,    71,    76,    78,    82,    85,    87,    89,
-    93,    95,    98,   101,   105,   108,   112
-};
-
-static const char * const yytname[] = {   "$","error","$undefined.","DEFOP",
-"STRING","'('","','","')'","top","defs","def","variations","variation","opt_string",
-"list","items","item",""
-};
-#endif
-
-static const short yyr1[] = {     0,
-     8,     9,     9,    10,    11,    11,    12,    12,    12,    12,
-    13,    13,    14,    14,    15,    15,    16
-};
-
-static const short yyr2[] = {     0,
-     1,     1,     2,    10,     1,     3,     3,     5,     7,     9,
-     0,     1,     3,     0,     1,     3,     1
-};
-
-static const short yydefact[] = {     0,
-     0,     1,     2,     0,     3,     0,    11,    12,     0,     0,
-     0,    11,     0,     5,     0,     0,     0,    14,     7,     6,
-     4,     0,     0,    17,     0,    15,    14,     8,    13,     0,
-     0,    16,    14,     9,     0,    10,     0,     0,     0
-};
-
-static const short yydefgoto[] = {    37,
-     2,     3,    13,    14,     9,    23,    25,    26
-};
-
-static const short yypact[] = {     2,
-     6,     2,-32768,     8,-32768,     7,    10,-32768,     9,    11,
-    12,    10,    -5,-32768,    -3,    12,    13,    14,-32768,-32768,
--32768,    17,     1,-32768,    15,    18,    14,-32768,-32768,    17,
-     3,-32768,    14,-32768,    16,-32768,    25,    26,-32768
-};
-
-static const short yypgoto[] = {-32768,
--32768,    27,-32768,    19,    20,   -27,   -12,-32768
-};
-
-
-#define        YYLAST          35
-
-
-static const short yytable[] = {    31,
-    16,    17,    18,    19,     1,    35,    27,    28,    33,    34,
-     4,     6,     7,     8,    10,    11,    12,    32,    22,    21,
-    24,    29,    36,    30,    38,    39,     0,     0,     5,     0,
-     0,    15,     0,     0,    20
-};
-
-static const short yycheck[] = {    27,
-     6,     7,     6,     7,     3,    33,     6,     7,     6,     7,
-     5,     4,     6,     4,     6,     5,     5,    30,     5,     7,
-     4,     7,     7,     6,     0,     0,    -1,    -1,     2,    -1,
-    -1,    12,    -1,    -1,    16
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
-#define YYERROR                goto yyerrlab1
-/* 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);                      \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-#ifndef YYPURE
-#define YYLEX          yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int    yychar;                 /*  the lookahead symbol                */
-YYSTYPE        yylval;                 /*  the semantic value of the           */
-                               /*  lookahead symbol                    */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;                        /*  location data for the lookahead     */
-                               /*  symbol                              */
-#endif
-
-int yynerrs;                   /*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;                   /*  nonzero means print parse trace     */
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
-
-#ifndef        YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-\f
-#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
-#else                          /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (from, to, count)
-     char *from;
-     char *to;
-     int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *from, char *to, int count)
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 192 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#endif
-
-int
-yyparse(YYPARSE_PARAM)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
-
-  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
-  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
-
-  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
-
-  YYSTYPE yyval;               /*  the variable used to return         */
-                               /*  semantic values from the action     */
-                               /*  routines                            */
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  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 - 1;
-  yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
-
-  *++yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-        the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-        but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yyls1, size * sizeof (*yylsp),
-                &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yystacksize);
-#endif
-
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
-#else /* no yyoverflow */
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       {
-         yyerror("parser stack overflow");
-         return 2;
-       }
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
-  goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Reading a token: ");
-#endif
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-       {
-         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise meaning
-            of a token, for further debugging info.  */
-#ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-#endif
-         fprintf (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-/* Do the default action for the current state.  */
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
-yyreduce:
-  yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-              yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-
-  switch (yyn) {
-
-case 1:
-#line 62 "bi-parser.y"
-{ defs = yyvsp[0].def; ;
-    break;}
-case 3:
-#line 68 "bi-parser.y"
-{ yyvsp[0].def->next = yyvsp[-1].def; yyval.def = yyvsp[0].def; ;
-    break;}
-case 4:
-#line 73 "bi-parser.y"
-{ yyval.def = makedef (yyvsp[-7].string, yyvsp[-5].string, yyvsp[-2].variation); ;
-    break;}
-case 6:
-#line 79 "bi-parser.y"
-{ yyvsp[0].variation->next = yyvsp[-2].variation; yyval.variation = yyvsp[0].variation; ;
-    break;}
-case 7:
-#line 84 "bi-parser.y"
-{ yyval.variation = makevar (yyvsp[-1].string, (struct node *) NULL, (struct node *) NULL, (struct node *) NULL); ;
-    break;}
-case 8:
-#line 86 "bi-parser.y"
-{ yyval.variation = makevar (yyvsp[-3].string, yyvsp[-1].node, (struct node *) NULL, (struct node *) NULL); ;
-    break;}
-case 9:
-#line 88 "bi-parser.y"
-{ yyval.variation = makevar (yyvsp[-5].string, yyvsp[-3].node, yyvsp[-1].node, (struct node *) NULL); ;
-    break;}
-case 10:
-#line 90 "bi-parser.y"
-{ yyval.variation = makevar (yyvsp[-7].string, yyvsp[-5].node, yyvsp[-3].node, yyvsp[-1].node); ;
-    break;}
-case 11:
-#line 94 "bi-parser.y"
-{ yyval.string = ""; ;
-    break;}
-case 12:
-#line 95 "bi-parser.y"
-{ yyval.string = yyvsp[0].string; ;
-    break;}
-case 13:
-#line 100 "bi-parser.y"
-{ yyval.node = yyvsp[-1].node; ;
-    break;}
-case 14:
-#line 102 "bi-parser.y"
-{ yyval.node = NULL; ;
-    break;}
-case 16:
-#line 109 "bi-parser.y"
-{ yyvsp[-2].node->next = yyvsp[0].node; yyval.node = yyvsp[-2].node; ;
-    break;}
-case 17:
-#line 114 "bi-parser.y"
-{ yyval.node = makenode (yyvsp[0].string); ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/local/share/bison.simple"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
-
-  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yyerrlab:   /* here on detecting error */
-
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         int size = 0;
-         char *msg;
-         int x, count;
-
-         count = 0;
-         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-         for (x = (yyn < 0 ? -yyn : 0);
-              x < (sizeof(yytname) / sizeof(char *)); x++)
-           if (yycheck[x + yyn] == x)
-             size += strlen(yytname[x]) + 15, count++;
-         msg = (char *) malloc(size + 15);
-         if (msg != 0)
-           {
-             strcpy(msg, "parse error");
-
-             if (count < 5)
-               {
-                 count = 0;
-                 for (x = (yyn < 0 ? -yyn : 0);
-                      x < (sizeof(yytname) / sizeof(char *)); x++)
-                   if (yycheck[x + yyn] == x)
-                     {
-                       strcat(msg, count == 0 ? ", expecting `" : " or `");
-                       strcat(msg, yytname[x]);
-                       strcat(msg, "'");
-                       count++;
-                     }
-               }
-             yyerror(msg);
-             free(msg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exceeded");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror("parse error");
-    }
-
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-}
-#line 117 "bi-parser.y"
-
-
-static struct node *
-makenode (s)
-     char *s;
-{
-  struct node *n;
-
-  n = (struct node *) malloc (sizeof (struct node));
-  n->text = s;
-  n->next = NULL;
-  return n;
-}
-
-static struct variation *
-makevar (name, inputs, outputs, literals)
-     char *name;
-     struct node *inputs, *outputs, *literals;
-{
-  struct variation *v;
-
-  v = (struct variation *) malloc (sizeof (struct variation));
-  v->name = name;
-  v->code = ndefs++;
-  v->inputs = inputs;
-  v->outputs = outputs;
-  v->literals = literals;
-  v->next = NULL;
-  return v;
-}
-
-static struct def *
-makedef (name, template, vars)
-     char *name, *template;
-     struct variation *vars;
-{
-  struct def *d;
-
-  d = (struct def *) malloc (sizeof (struct def));
-  d->basename = name;
-  d->template = template;
-  d->variations = vars;
-  d->next = NULL;
-  return d;
-}
-
-void
-yyerror (s)
-     char *s;
-{
-  fprintf (stderr, "syntax error in input\n");
-  exit (FATAL_EXIT_CODE);
-}
diff --git a/gcc/bi-parser.h b/gcc/bi-parser.h
deleted file mode 100644 (file)
index 5beb862..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-typedef union
-{
-  char *string;
-  struct def *def;
-  struct variation *variation;
-  struct node *node;
-} YYSTYPE;
-#define        DEFOP   258
-#define        STRING  259
-
-
-extern YYSTYPE yylval;
diff --git a/gcc/c-parse.c b/gcc/c-parse.c
deleted file mode 100644 (file)
index 0c6f3d2..0000000
+++ /dev/null
@@ -1,3859 +0,0 @@
-
-/*  A Bison parser, made from c-parse.y with Bison version GNU Bison version 1.24
-  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define        IDENTIFIER      258
-#define        TYPENAME        259
-#define        SCSPEC  260
-#define        TYPESPEC        261
-#define        TYPE_QUAL       262
-#define        CONSTANT        263
-#define        STRING  264
-#define        ELLIPSIS        265
-#define        SIZEOF  266
-#define        ENUM    267
-#define        STRUCT  268
-#define        UNION   269
-#define        IF      270
-#define        ELSE    271
-#define        WHILE   272
-#define        DO      273
-#define        FOR     274
-#define        SWITCH  275
-#define        CASE    276
-#define        DEFAULT 277
-#define        BREAK   278
-#define        CONTINUE        279
-#define        RETURN  280
-#define        GOTO    281
-#define        ASM_KEYWORD     282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        ATTRIBUTE       285
-#define        EXTENSION       286
-#define        LABEL   287
-#define        REALPART        288
-#define        IMAGPART        289
-#define        ASSIGN  290
-#define        OROR    291
-#define        ANDAND  292
-#define        EQCOMPARE       293
-#define        ARITHCOMPARE    294
-#define        LSHIFT  295
-#define        RSHIFT  296
-#define        UNARY   297
-#define        PLUSPLUS        298
-#define        MINUSMINUS      299
-#define        HYPERUNARY      300
-#define        POINTSAT        301
-#define        INTERFACE       302
-#define        IMPLEMENTATION  303
-#define        END     304
-#define        SELECTOR        305
-#define        DEFS    306
-#define        ENCODE  307
-#define        CLASSNAME       308
-#define        PUBLIC  309
-#define        PRIVATE 310
-#define        PROTECTED       311
-#define        PROTOCOL        312
-#define        OBJECTNAME      313
-#define        CLASS   314
-#define        ALIAS   315
-#define        OBJC_STRING     316
-
-#line 56 "c-parse.y"
-
-#include <stdio.h>
-#include <errno.h>
-#include <setjmp.h>
-
-#include "config.h"
-#include "tree.h"
-#include "input.h"
-#include "c-lex.h"
-#include "c-tree.h"
-#include "flags.h"
-
-#ifdef MULTIBYTE_CHARS
-#include <stdlib.h>
-#include <locale.h>
-#endif
-
-
-/* Since parsers are distinct for each language, put the language string
-   definition here.  */
-char *language_string = "GNU C";
-
-#ifndef errno
-extern int errno;
-#endif
-
-void yyerror ();
-
-/* Like YYERROR but do call yyerror.  */
-#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
-#line 93 "c-parse.y"
-typedef union {long itype; tree ttype; enum tree_code code;
-       char *filename; int lineno; int ends_in_label; } YYSTYPE;
-#line 209 "c-parse.y"
-
-/* Number of statements (loosely speaking) seen so far.  */
-static int stmt_count;
-
-/* Input file and line number of the end of the body of last simple_if;
-   used by the stmt-rule immediately after simple_if returns.  */
-static char *if_stmt_file;
-static int if_stmt_line;
-
-/* List of types and structure classes of the current declaration.  */
-static tree current_declspecs = NULL_TREE;
-static tree prefix_attributes = NULL_TREE;
-
-/* Stack of saved values of current_declspecs and prefix_attributes.  */
-static tree declspec_stack;
-
-/* 1 if we explained undeclared var errors.  */
-static int undeclared_variable_notice;
-
-
-/* Tell yyparse how to print a token's value, if yydebug is set.  */
-
-#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
-
-#ifndef YYLTYPE
-typedef
-  struct yyltype
-    {
-      int timestamp;
-      int first_line;
-      int first_column;
-      int last_line;
-      int last_column;
-      char *text;
-   }
-  yyltype;
-
-#define YYLTYPE yyltype
-#endif
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define        YYFINAL         681
-#define        YYFLAG          -32768
-#define        YYNTBASE        84
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 238)
-
-static const char 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,    80,     2,     2,     2,    52,    43,     2,    59,
-    76,    50,    48,    81,    49,    58,    51,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,    38,    77,     2,
-    36,     2,    37,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-    60,     2,    83,    42,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    82,    41,    78,    79,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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,
-    39,    40,    44,    45,    46,    47,    53,    54,    55,    56,
-    57,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    75
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     1,     3,     4,     7,     8,    12,    14,    16,    22,
-    25,    29,    34,    39,    42,    45,    48,    51,    53,    54,
-    55,    63,    68,    69,    70,    78,    83,    84,    85,    92,
-    96,    98,   100,   102,   104,   106,   108,   110,   112,   114,
-   116,   117,   119,   121,   125,   127,   130,   133,   136,   139,
-   142,   147,   150,   155,   158,   161,   163,   165,   167,   172,
-   173,   181,   183,   187,   191,   195,   199,   203,   207,   211,
-   215,   219,   223,   227,   231,   232,   237,   238,   243,   244,
-   245,   253,   254,   260,   264,   268,   270,   272,   274,   278,
-   282,   283,   288,   293,   298,   302,   306,   309,   312,   314,
-   317,   318,   320,   323,   327,   329,   331,   334,   337,   342,
-   347,   350,   353,   357,   359,   361,   364,   367,   368,   369,
-   374,   379,   383,   387,   390,   393,   396,   399,   403,   404,
-   407,   410,   413,   416,   420,   421,   424,   427,   429,   431,
-   434,   437,   439,   441,   444,   447,   450,   454,   455,   458,
-   460,   462,   464,   469,   474,   476,   478,   480,   482,   486,
-   488,   492,   493,   498,   499,   506,   510,   511,   518,   522,
-   523,   525,   527,   530,   537,   539,   543,   544,   546,   551,
-   558,   563,   565,   567,   569,   571,   573,   574,   579,   581,
-   582,   585,   587,   591,   593,   594,   599,   601,   602,   611,
-   612,   619,   620,   626,   627,   632,   633,   639,   640,   641,
-   647,   648,   649,   655,   657,   659,   663,   667,   672,   676,
-   680,   684,   686,   690,   695,   699,   703,   707,   709,   713,
-   717,   721,   726,   730,   734,   736,   737,   745,   751,   754,
-   755,   763,   769,   772,   773,   782,   783,   791,   794,   795,
-   797,   798,   800,   802,   805,   806,   810,   813,   817,   819,
-   823,   825,   827,   830,   832,   836,   841,   848,   854,   856,
-   860,   862,   864,   868,   871,   874,   875,   877,   879,   882,
-   883,   886,   890,   894,   897,   901,   906,   910,   913,   917,
-   920,   922,   924,   927,   930,   931,   933,   936,   937,   938,
-   940,   942,   945,   949,   951,   954,   957,   964,   970,   976,
-   979,   982,   987,   988,   993,   994,   995,   999,  1004,  1008,
-  1010,  1012,  1014,  1016,  1019,  1020,  1025,  1027,  1031,  1032,
-  1033,  1041,  1047,  1050,  1051,  1052,  1053,  1066,  1067,  1074,
-  1077,  1080,  1083,  1087,  1094,  1103,  1114,  1127,  1131,  1136,
-  1138,  1140,  1141,  1148,  1152,  1158,  1161,  1164,  1165,  1167,
-  1168,  1170,  1171,  1173,  1175,  1179,  1184,  1186,  1190,  1191,
-  1194,  1197,  1198,  1203,  1206,  1207,  1209,  1211,  1215,  1217,
-  1221,  1226,  1231,  1236,  1241,  1246,  1247,  1250,  1252,  1255,
-  1257,  1261,  1263,  1267
-};
-
-static const short yyrhs[] = {    -1,
-    85,     0,     0,    86,    88,     0,     0,    85,    87,    88,
-     0,    90,     0,    89,     0,    27,    59,    99,    76,    77,
-     0,   237,    88,     0,   122,   136,    77,     0,   129,   122,
-   136,    77,     0,   125,   122,   135,    77,     0,   129,    77,
-     0,   125,    77,     0,     1,    77,     0,     1,    78,     0,
-    77,     0,     0,     0,   125,   122,   165,    91,   116,    92,
-   196,     0,   125,   122,   165,     1,     0,     0,     0,   129,
-   122,   168,    93,   116,    94,   196,     0,   129,   122,   168,
-     1,     0,     0,     0,   122,   168,    95,   116,    96,   196,
-     0,   122,   168,     1,     0,     3,     0,     4,     0,    43,
-     0,    49,     0,    48,     0,    54,     0,    55,     0,    79,
-     0,    80,     0,   101,     0,     0,   101,     0,   107,     0,
-   101,    81,   107,     0,   113,     0,    50,   105,     0,   237,
-   105,     0,    98,   105,     0,    40,    97,     0,   103,   102,
-     0,   103,    59,   183,    76,     0,   104,   102,     0,   104,
-    59,   183,    76,     0,    33,   105,     0,    34,   105,     0,
-    11,     0,    29,     0,   102,     0,    59,   183,    76,   105,
-     0,     0,    59,   183,    76,    82,   106,   150,    78,     0,
-   105,     0,   107,    48,   107,     0,   107,    49,   107,     0,
-   107,    50,   107,     0,   107,    51,   107,     0,   107,    52,
-   107,     0,   107,    46,   107,     0,   107,    47,   107,     0,
-   107,    45,   107,     0,   107,    44,   107,     0,   107,    43,
-   107,     0,   107,    41,   107,     0,   107,    42,   107,     0,
-     0,   107,    40,   108,   107,     0,     0,   107,    39,   109,
-   107,     0,     0,     0,   107,    37,   110,    99,    38,   111,
-   107,     0,     0,   107,    37,   112,    38,   107,     0,   107,
-    36,   107,     0,   107,    35,   107,     0,     3,     0,     8,
-     0,   115,     0,    59,    99,    76,     0,    59,     1,    76,
-     0,     0,    59,   114,   197,    76,     0,   113,    59,   100,
-    76,     0,   113,    60,    99,    83,     0,   113,    58,    97,
-     0,   113,    57,    97,     0,   113,    54,     0,   113,    55,
-     0,     9,     0,   115,     9,     0,     0,   118,     0,   118,
-    10,     0,   202,   203,   119,     0,   117,     0,   191,     0,
-   118,   117,     0,   117,   191,     0,   127,   122,   135,    77,
-     0,   130,   122,   136,    77,     0,   127,    77,     0,   130,
-    77,     0,   202,   203,   124,     0,   120,     0,   191,     0,
-   121,   120,     0,   120,   191,     0,     0,     0,   125,   122,
-   135,    77,     0,   129,   122,   136,    77,     0,   125,   122,
-   159,     0,   129,   122,   162,     0,   125,    77,     0,   129,
-    77,     0,   237,   124,     0,   133,   126,     0,   129,   133,
-   126,     0,     0,   126,   134,     0,   126,     5,     0,   126,
-   143,     0,   133,   128,     0,   130,   133,   128,     0,     0,
-   128,   134,     0,   128,     5,     0,   130,     0,   143,     0,
-   129,   130,     0,   129,   143,     0,     7,     0,     5,     0,
-   130,     7,     0,   130,     5,     0,   133,   132,     0,   185,
-   133,   132,     0,     0,   132,   134,     0,     6,     0,   169,
-     0,     4,     0,    28,    59,    99,    76,     0,    28,    59,
-   183,    76,     0,     6,     0,     7,     0,   169,     0,   138,
-     0,   135,    81,   138,     0,   140,     0,   136,    81,   138,
-     0,     0,    27,    59,   115,    76,     0,     0,   165,   137,
-   142,    36,   139,   148,     0,   165,   137,   142,     0,     0,
-   168,   137,   142,    36,   141,   148,     0,   168,   137,   142,
-     0,     0,   143,     0,   144,     0,   143,   144,     0,    30,
-    59,    59,   145,    76,    76,     0,   146,     0,   145,    81,
-   146,     0,     0,   147,     0,   147,    59,     3,    76,     0,
-   147,    59,     3,    81,   101,    76,     0,   147,    59,   100,
-    76,     0,    97,     0,     5,     0,     6,     0,     7,     0,
-   107,     0,     0,    82,   149,   150,    78,     0,     1,     0,
-     0,   151,   174,     0,   152,     0,   151,    81,   152,     0,
-   107,     0,     0,    82,   153,   150,    78,     0,     1,     0,
-     0,    60,   107,    10,   107,    83,    36,   154,   152,     0,
-     0,    60,   107,    83,    36,   155,   152,     0,     0,    60,
-   107,    83,   156,   152,     0,     0,    97,    38,   157,   152,
-     0,     0,    58,    97,    36,   158,   152,     0,     0,     0,
-   165,   160,   116,   161,   197,     0,     0,     0,   168,   163,
-   116,   164,   197,     0,   166,     0,   168,     0,    59,   166,
-    76,     0,   166,    59,   232,     0,   166,    60,    99,    83,
-     0,   166,    60,    83,     0,    50,   186,   166,     0,   143,
-   123,   166,     0,     4,     0,   167,    59,   232,     0,   167,
-    60,    99,    83,     0,   167,    60,    83,     0,    50,   186,
-   167,     0,   143,   123,   167,     0,     4,     0,   168,    59,
-   232,     0,    59,   168,    76,     0,    50,   186,   168,     0,
-   168,    60,    99,    83,     0,   168,    60,    83,     0,   143,
-   123,   168,     0,     3,     0,     0,    13,    97,    82,   170,
-   176,    78,   142,     0,    13,    82,   176,    78,   142,     0,
-    13,    97,     0,     0,    14,    97,    82,   171,   176,    78,
-   142,     0,    14,    82,   176,    78,   142,     0,    14,    97,
-     0,     0,    12,    97,    82,   172,   181,   175,    78,   142,
-     0,     0,    12,    82,   173,   181,   175,    78,   142,     0,
-    12,    97,     0,     0,    81,     0,     0,    81,     0,   177,
-     0,   177,   178,     0,     0,   177,   178,    77,     0,   177,
-    77,     0,   131,   122,   179,     0,   131,     0,   185,   122,
-   179,     0,   185,     0,     1,     0,   237,   178,     0,   180,
-     0,   179,    81,   180,     0,   202,   203,   165,   142,     0,
-   202,   203,   165,    38,   107,   142,     0,   202,   203,    38,
-   107,   142,     0,   182,     0,   181,    81,   182,     0,     1,
-     0,    97,     0,    97,    36,   107,     0,   131,   184,     0,
-   185,   184,     0,     0,   187,     0,     7,     0,   185,     7,
-     0,     0,   186,     7,     0,    59,   187,    76,     0,    50,
-   186,   187,     0,    50,   186,     0,   187,    59,   225,     0,
-   187,    60,    99,    83,     0,   187,    60,    83,     0,    59,
-   225,     0,    60,    99,    83,     0,    60,    83,     0,   189,
-     0,   205,     0,   189,   205,     0,   189,   191,     0,     0,
-   188,     0,     1,    77,     0,     0,     0,   194,     0,   195,
-     0,   194,   195,     0,    32,   236,    77,     0,   197,     0,
-     1,   197,     0,    82,    78,     0,    82,   192,   193,   121,
-   190,    78,     0,    82,   192,   193,     1,    78,     0,    82,
-   192,   193,   188,    78,     0,   199,   204,     0,   199,     1,
-     0,    15,    59,    99,    76,     0,     0,    18,   201,   204,
-    17,     0,     0,     0,   202,   203,   207,     0,   202,   203,
-   218,   204,     0,   202,   203,   206,     0,   207,     0,   218,
-     0,   197,     0,   215,     0,    99,    77,     0,     0,   198,
-    16,   208,   204,     0,   198,     0,   198,    16,     1,     0,
-     0,     0,    17,   209,    59,    99,    76,   210,   204,     0,
-   200,    59,    99,    76,    77,     0,   200,     1,     0,     0,
-     0,     0,    19,    59,   220,    77,   211,   220,    77,   212,
-   220,    76,   213,   204,     0,     0,    20,    59,    99,    76,
-   214,   204,     0,    23,    77,     0,    24,    77,     0,    25,
-    77,     0,    25,    99,    77,     0,    27,   219,    59,    99,
-    76,    77,     0,    27,   219,    59,    99,    38,   221,    76,
-    77,     0,    27,   219,    59,    99,    38,   221,    38,   221,
-    76,    77,     0,    27,   219,    59,    99,    38,   221,    38,
-   221,    38,   224,    76,    77,     0,    26,    97,    77,     0,
-    26,    50,    99,    77,     0,    77,     0,   216,     0,     0,
-    19,    59,   113,    76,   217,   204,     0,    21,   107,    38,
-     0,    21,   107,    10,   107,    38,     0,    22,    38,     0,
-    97,    38,     0,     0,     7,     0,     0,    99,     0,     0,
-   222,     0,   223,     0,   222,    81,   223,     0,     9,    59,
-    99,    76,     0,   115,     0,   224,    81,   115,     0,     0,
-   226,   227,     0,   229,    76,     0,     0,   230,    77,   228,
-   227,     0,     1,    76,     0,     0,    10,     0,   230,     0,
-   230,    81,    10,     0,   231,     0,   230,    81,   231,     0,
-   125,   122,   167,   142,     0,   125,   122,   168,   142,     0,
-   125,   122,   184,   142,     0,   129,   122,   168,   142,     0,
-   129,   122,   184,   142,     0,     0,   233,   234,     0,   227,
-     0,   235,    76,     0,     3,     0,   235,    81,     3,     0,
-    97,     0,   236,    81,    97,     0,    31,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-   236,   241,   255,   257,   257,   258,   260,   262,   263,   271,
-   275,   286,   291,   296,   298,   300,   301,   302,   307,   314,
-   316,   321,   326,   332,   334,   339,   344,   350,   352,   357,
-   364,   366,   369,   371,   373,   375,   377,   379,   381,   385,
-   389,   392,   395,   398,   402,   404,   407,   410,   414,   442,
-   448,   451,   454,   457,   459,   463,   467,   471,   473,   476,
-   480,   507,   509,   511,   513,   515,   517,   519,   521,   523,
-   525,   527,   529,   531,   533,   537,   539,   543,   545,   548,
-   552,   554,   561,   564,   567,   573,   672,   673,   675,   681,
-   683,   697,   720,   722,   724,   728,   734,   736,   741,   743,
-   748,   750,   751,   761,   766,   768,   769,   770,   777,   783,
-   788,   791,   799,   804,   806,   807,   808,   815,   826,   830,
-   836,   841,   846,   851,   853,   855,   864,   867,   871,   873,
-   875,   880,   884,   887,   891,   894,   896,   908,   911,   913,
-   915,   919,   923,   925,   928,   941,   944,   948,   950,   958,
-   959,   960,   964,   966,   972,   973,   974,   977,   979,   982,
-   984,   987,   990,   996,  1003,  1005,  1012,  1019,  1022,  1029,
-  1032,  1036,  1039,  1043,  1048,  1051,  1055,  1058,  1060,  1062,
-  1064,  1071,  1073,  1074,  1075,  1080,  1082,  1087,  1095,  1100,
-  1104,  1107,  1109,  1114,  1117,  1119,  1121,  1125,  1128,  1128,
-  1131,  1131,  1134,  1134,  1137,  1137,  1140,  1142,  1153,  1161,
-  1165,  1176,  1184,  1191,  1193,  1198,  1201,  1206,  1208,  1210,
-  1217,  1219,  1227,  1233,  1235,  1237,  1244,  1246,  1252,  1258,
-  1260,  1262,  1264,  1271,  1273,  1276,  1281,  1283,  1287,  1289,
-  1291,  1293,  1297,  1299,  1302,  1305,  1308,  1311,  1315,  1317,
-  1320,  1322,  1326,  1329,  1334,  1336,  1338,  1352,  1359,  1364,
-  1370,  1375,  1377,  1382,  1384,  1388,  1392,  1396,  1406,  1408,
-  1413,  1418,  1421,  1425,  1428,  1432,  1435,  1438,  1441,  1445,
-  1448,  1452,  1456,  1458,  1460,  1462,  1464,  1466,  1468,  1470,
-  1480,  1488,  1490,  1492,  1496,  1498,  1501,  1504,  1515,  1517,
-  1522,  1524,  1527,  1541,  1544,  1547,  1549,  1557,  1565,  1576,
-  1581,  1584,  1597,  1605,  1609,  1613,  1617,  1623,  1627,  1632,
-  1635,  1640,  1643,  1644,  1661,  1666,  1669,  1681,  1683,  1693,
-  1703,  1704,  1712,  1715,  1727,  1731,  1748,  1758,  1767,  1772,
-  1777,  1782,  1786,  1790,  1801,  1808,  1815,  1822,  1833,  1839,
-  1842,  1847,  1870,  1904,  1929,  1960,  1975,  1986,  1990,  1994,
-  1997,  2002,  2004,  2007,  2009,  2013,  2018,  2021,  2027,  2032,
-  2037,  2039,  2048,  2049,  2055,  2057,  2067,  2069,  2073,  2076,
-  2082,  2092,  2101,  2110,  2120,  2134,  2139,  2144,  2146,  2155,
-  2158,  2163,  2166,  2170
-};
-
-static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER",
-"TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
-"ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
-"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ATTRIBUTE",
-"EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'","OROR",
-"ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT","'+'",
-"'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT",
-"'.'","'('","'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE",
-"CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS",
-"OBJC_STRING","')'","';'","'}'","'~'","'!'","','","'{'","']'","program","extdefs",
-"@1","@2","extdef","datadef","fndef","@3","@4","@5","@6","@7","@8","identifier",
-"unop","expr","exprlist","nonnull_exprlist","unary_expr","sizeof","alignof",
-"cast_expr","@9","expr_no_commas","@10","@11","@12","@13","@14","primary","@15",
-"string","old_style_parm_decls","lineno_datadecl","datadecls","datadecl","lineno_decl",
-"decls","setspecs","setattrs","decl","typed_declspecs","reserved_declspecs",
-"typed_declspecs_no_prefix_attr","reserved_declspecs_no_prefix_attr","declmods",
-"declmods_no_prefix_attr","typed_typespecs","reserved_typespecquals","typespec",
-"typespecqual_reserved","initdecls","notype_initdecls","maybeasm","initdcl",
-"@16","notype_initdcl","@17","maybe_attribute","attributes","attribute","attribute_list",
-"attrib","any_word","init","@18","initlist_maybe_comma","initlist1","initelt",
-"@19","@20","@21","@22","@23","@24","nested_function","@25","@26","notype_nested_function",
-"@27","@28","declarator","after_type_declarator","parm_declarator","notype_declarator",
-"structsp","@29","@30","@31","@32","maybecomma","maybecomma_warn","component_decl_list",
-"component_decl_list2","component_decl","components","component_declarator",
-"enumlist","enumerator","typename","absdcl","nonempty_type_quals","type_quals",
-"absdcl1","stmts","lineno_stmt_or_labels","xstmts","errstmt","pushlevel","maybe_label_decls",
-"label_decls","label_decl","compstmt_or_error","compstmt","simple_if","if_prefix",
-"do_stmt_start","@33","save_filename","save_lineno","lineno_labeled_stmt","lineno_stmt_or_label",
-"stmt_or_label","stmt","@34","@35","@36","@37","@38","@39","@40","all_iter_stmt",
-"all_iter_stmt_simple","@41","label","maybe_type_qual","xexpr","asm_operands",
-"nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@42","parmlist_1",
-"@43","parmlist_2","parms","parm","parmlist_or_identifiers","@44","parmlist_or_identifiers_1",
-"identifiers","identifiers_or_typenames","extension",""
-};
-#endif
-
-static const short yyr1[] = {     0,
-    84,    84,    86,    85,    87,    85,    88,    88,    88,    88,
-    89,    89,    89,    89,    89,    89,    89,    89,    91,    92,
-    90,    90,    93,    94,    90,    90,    95,    96,    90,    90,
-    97,    97,    98,    98,    98,    98,    98,    98,    98,    99,
-   100,   100,   101,   101,   102,   102,   102,   102,   102,   102,
-   102,   102,   102,   102,   102,   103,   104,   105,   105,   106,
-   105,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-   107,   107,   107,   107,   108,   107,   109,   107,   110,   111,
-   107,   112,   107,   107,   107,   113,   113,   113,   113,   113,
-   114,   113,   113,   113,   113,   113,   113,   113,   115,   115,
-   116,   116,   116,   117,   118,   118,   118,   118,   119,   119,
-   119,   119,   120,   121,   121,   121,   121,   122,   123,   124,
-   124,   124,   124,   124,   124,   124,   125,   125,   126,   126,
-   126,   126,   127,   127,   128,   128,   128,   129,   129,   129,
-   129,   130,   130,   130,   130,   131,   131,   132,   132,   133,
-   133,   133,   133,   133,   134,   134,   134,   135,   135,   136,
-   136,   137,   137,   139,   138,   138,   141,   140,   140,   142,
-   142,   143,   143,   144,   145,   145,   146,   146,   146,   146,
-   146,   147,   147,   147,   147,   148,   149,   148,   148,   150,
-   150,   151,   151,   152,   153,   152,   152,   154,   152,   155,
-   152,   156,   152,   157,   152,   158,   152,   160,   161,   159,
-   163,   164,   162,   165,   165,   166,   166,   166,   166,   166,
-   166,   166,   167,   167,   167,   167,   167,   167,   168,   168,
-   168,   168,   168,   168,   168,   170,   169,   169,   169,   171,
-   169,   169,   169,   172,   169,   173,   169,   169,   174,   174,
-   175,   175,   176,   176,   177,   177,   177,   178,   178,   178,
-   178,   178,   178,   179,   179,   180,   180,   180,   181,   181,
-   181,   182,   182,   183,   183,   184,   184,   185,   185,   186,
-   186,   187,   187,   187,   187,   187,   187,   187,   187,   187,
-   188,   189,   189,   189,   190,   190,   191,   192,   193,   193,
-   194,   194,   195,   196,   196,   197,   197,   197,   197,   198,
-   198,   199,   201,   200,   202,   203,   204,   204,   205,   206,
-   206,   207,   207,   207,   208,   207,   207,   207,   209,   210,
-   207,   207,   207,   211,   212,   213,   207,   214,   207,   207,
-   207,   207,   207,   207,   207,   207,   207,   207,   207,   207,
-   215,   217,   216,   218,   218,   218,   218,   219,   219,   220,
-   220,   221,   221,   222,   222,   223,   224,   224,   226,   225,
-   227,   228,   227,   227,   229,   229,   229,   229,   230,   230,
-   231,   231,   231,   231,   231,   233,   232,   234,   234,   235,
-   235,   236,   236,   237
-};
-
-static const short yyr2[] = {     0,
-     0,     1,     0,     2,     0,     3,     1,     1,     5,     2,
-     3,     4,     4,     2,     2,     2,     2,     1,     0,     0,
-     7,     4,     0,     0,     7,     4,     0,     0,     6,     3,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     0,     1,     1,     3,     1,     2,     2,     2,     2,     2,
-     4,     2,     4,     2,     2,     1,     1,     1,     4,     0,
-     7,     1,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     0,     4,     0,     4,     0,     0,
-     7,     0,     5,     3,     3,     1,     1,     1,     3,     3,
-     0,     4,     4,     4,     3,     3,     2,     2,     1,     2,
-     0,     1,     2,     3,     1,     1,     2,     2,     4,     4,
-     2,     2,     3,     1,     1,     2,     2,     0,     0,     4,
-     4,     3,     3,     2,     2,     2,     2,     3,     0,     2,
-     2,     2,     2,     3,     0,     2,     2,     1,     1,     2,
-     2,     1,     1,     2,     2,     2,     3,     0,     2,     1,
-     1,     1,     4,     4,     1,     1,     1,     1,     3,     1,
-     3,     0,     4,     0,     6,     3,     0,     6,     3,     0,
-     1,     1,     2,     6,     1,     3,     0,     1,     4,     6,
-     4,     1,     1,     1,     1,     1,     0,     4,     1,     0,
-     2,     1,     3,     1,     0,     4,     1,     0,     8,     0,
-     6,     0,     5,     0,     4,     0,     5,     0,     0,     5,
-     0,     0,     5,     1,     1,     3,     3,     4,     3,     3,
-     3,     1,     3,     4,     3,     3,     3,     1,     3,     3,
-     3,     4,     3,     3,     1,     0,     7,     5,     2,     0,
-     7,     5,     2,     0,     8,     0,     7,     2,     0,     1,
-     0,     1,     1,     2,     0,     3,     2,     3,     1,     3,
-     1,     1,     2,     1,     3,     4,     6,     5,     1,     3,
-     1,     1,     3,     2,     2,     0,     1,     1,     2,     0,
-     2,     3,     3,     2,     3,     4,     3,     2,     3,     2,
-     1,     1,     2,     2,     0,     1,     2,     0,     0,     1,
-     1,     2,     3,     1,     2,     2,     6,     5,     5,     2,
-     2,     4,     0,     4,     0,     0,     3,     4,     3,     1,
-     1,     1,     1,     2,     0,     4,     1,     3,     0,     0,
-     7,     5,     2,     0,     0,     0,    12,     0,     6,     2,
-     2,     2,     3,     6,     8,    10,    12,     3,     4,     1,
-     1,     0,     6,     3,     5,     2,     2,     0,     1,     0,
-     1,     0,     1,     1,     3,     4,     1,     3,     0,     2,
-     2,     0,     4,     2,     0,     1,     1,     3,     1,     3,
-     4,     4,     4,     4,     4,     0,     2,     1,     2,     1,
-     3,     1,     3,     1
-};
-
-static const short yydefact[] = {     3,
-     5,     0,     0,     0,   152,   143,   150,   142,     0,     0,
-     0,     0,     0,     0,   394,    18,     4,     8,     7,     0,
-   118,   118,   138,   129,   139,   172,   151,     0,     6,    16,
-    17,    31,    32,   246,   248,   255,   239,   255,   243,     0,
-     0,     0,   235,   280,     0,     0,   160,   119,     0,    15,
-     0,    14,     0,   140,   129,   141,   145,   144,   127,   173,
-    10,     0,   244,     0,     0,   236,     0,   240,    86,    87,
-    99,    56,    57,     0,     0,     0,    33,    35,    34,     0,
-    36,    37,     0,    38,    39,     0,     0,    40,    58,     0,
-     0,    62,    43,    45,    88,     0,   278,     0,   276,   148,
-     0,   276,   177,     0,     0,    11,     0,     0,    30,     0,
-   386,     0,     0,   170,   222,   280,     0,     0,   158,   119,
-     0,   214,   215,     0,     0,   128,   131,   155,   156,   130,
-   132,   157,   271,   272,   251,   269,     0,   170,   262,   257,
-   118,   254,   118,     0,   255,   170,   255,    54,    55,    49,
-    46,     0,     0,     0,     0,    48,     0,     0,     0,    50,
-     0,    52,     0,     0,    79,    77,    75,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    97,
-    98,     0,     0,    41,     0,   100,    47,   153,   280,   369,
-     0,   274,   277,   146,   154,   279,   148,   275,   183,   184,
-   185,   182,     0,   175,   178,   281,   231,   230,   161,   162,
-   234,     0,   229,     0,   233,     0,     0,    28,     0,   315,
-   106,   316,   169,   171,     0,     0,    13,     0,     0,    22,
-     0,   170,   386,     0,    12,    26,     0,     0,   252,     0,
-   251,   238,   315,   256,   315,   263,     0,   242,     0,    90,
-    89,   298,     0,     0,     9,    44,     0,     0,    85,    84,
-     0,     0,     0,     0,    73,    74,    72,    71,    70,    68,
-    69,    63,    64,    65,    66,    67,    96,    95,     0,    42,
-     0,   284,     0,   288,     0,   290,     0,   369,     0,   149,
-   147,     0,   177,    41,     0,     0,   390,   376,   118,   118,
-   388,     0,   377,   379,   387,     0,   232,   297,     0,   108,
-   103,   107,     0,   167,   220,   216,   159,   221,    20,   166,
-   217,   219,     0,    24,   273,   270,   170,     0,   258,   264,
-   316,   260,   170,   170,   306,   299,    92,    60,    59,    51,
-    53,     0,     0,    78,    76,    93,    94,   283,   282,   370,
-   289,   285,   287,     0,   174,   176,    86,     0,   163,   374,
-   276,   276,   371,   372,     0,   389,     0,     0,    29,   304,
-   104,   118,   118,   135,     0,     0,   164,   218,     0,   247,
-   170,   315,     0,   237,   241,     0,     0,   300,   301,     0,
-    80,    83,   286,   179,     0,   181,   228,   280,   369,   119,
-   170,   170,   170,   280,   170,   170,     0,   378,   380,   391,
-   305,   111,     0,   112,     0,   135,   133,   189,   187,   186,
-   168,    21,     0,    25,   245,   265,     0,   170,   392,     0,
-     0,     0,   315,     0,     0,   115,   316,   292,   302,   197,
-    86,     0,     0,   195,     0,   194,     0,   249,   192,     0,
-     0,   284,     0,   386,     0,   381,   382,   383,   284,   384,
-   385,   373,     0,     0,   162,   134,   137,   136,     0,   165,
-   170,     0,   266,   303,     0,   308,   117,   116,   296,     0,
-   309,   294,   316,   293,     0,     0,     0,     0,   204,    61,
-     0,   191,    81,   180,   226,   280,   227,   223,   225,     0,
-   109,   110,     0,   268,   170,   393,   307,     0,   152,     0,
-   329,   313,     0,     0,     0,     0,     0,     0,     0,     0,
-   358,   350,     0,     0,   113,   118,   118,   322,   327,     0,
-     0,   319,   320,   323,   351,   321,     0,   206,     0,   202,
-     0,     0,   193,     0,   224,   188,   267,     0,     0,   315,
-   360,     0,     0,   356,   340,   341,   342,     0,     0,     0,
-   359,     0,   357,   324,   124,     0,   125,     0,     0,   311,
-   316,   310,   333,     0,   126,     0,     0,   200,     0,   196,
-   205,     0,     0,     0,   361,    45,     0,     0,     0,   354,
-   343,     0,   348,     0,     0,   122,   208,     0,   123,   211,
-   328,   315,     0,     0,   207,     0,     0,   203,   312,     0,
-   314,   352,   334,   338,     0,   349,     0,   120,     0,   121,
-     0,   326,   317,   315,     0,   198,   201,   330,   315,   360,
-   315,   355,   362,     0,   209,   212,   318,   332,     0,   315,
-   353,     0,   339,     0,     0,   363,   364,   344,     0,     0,
-   199,   331,   335,     0,   362,     0,     0,   210,   213,   360,
-     0,     0,   345,   365,     0,   366,     0,     0,   336,   367,
-     0,   346,   315,     0,     0,   337,   347,   368,     0,     0,
-     0
-};
-
-static const short yydefgoto[] = {   679,
-     1,     2,     3,    17,    18,    19,   231,   376,   237,   379,
-   113,   309,   445,    86,   153,   279,    88,    89,    90,    91,
-    92,   390,    93,   264,   263,   261,   450,   262,    94,   154,
-    95,   218,   219,   220,   371,   432,   433,    20,   108,   525,
-   299,    59,   372,   417,   300,    23,    99,   194,    24,   130,
-   118,    46,   114,   119,   423,    47,   375,   223,   224,    26,
-   203,   204,   205,   421,   469,   447,   448,   449,   488,   639,
-   607,   579,   542,   576,   596,   619,   649,   599,   621,   650,
-   210,   122,   495,   123,    27,   145,   147,   137,    62,   492,
-   240,    64,    65,   142,   329,   330,   135,   136,   101,   192,
-   102,   104,   193,   434,   435,   480,   221,   336,   387,   388,
-   389,   369,   370,   529,   530,   531,   550,   571,   313,   572,
-   438,   532,   533,   602,   549,   640,   630,   660,   673,   631,
-   534,   535,   629,   536,   562,   587,   645,   646,   647,   671,
-   284,   285,   301,   407,   302,   303,   304,   213,   214,   305,
-   306,   430,    96
-};
-
-static const short yypact[] = {    90,
-    99,   588,   588,   321,-32768,-32768,-32768,-32768,    77,    79,
-    85,    49,    75,    87,-32768,-32768,-32768,-32768,-32768,   194,
-    37,  2116,   245,-32768,   119,-32768,-32768,   588,-32768,-32768,
--32768,-32768,-32768,-32768,   111,-32768,   133,-32768,   143,  1958,
-  1892,   179,-32768,-32768,   194,   164,-32768,   119,  1352,-32768,
-   457,-32768,   194,   245,-32768,   119,-32768,-32768,   404,-32768,
--32768,   267,-32768,   181,   419,-32768,   201,-32768,-32768,-32768,
--32768,-32768,-32768,  1958,  1958,   397,-32768,-32768,-32768,  1958,
--32768,-32768,   848,-32768,-32768,  1958,   227,   229,-32768,  1985,
-  2012,-32768,  2202,  1091,   299,  1958,-32768,   240,   204,-32768,
-   242,  1002,   699,   441,   172,-32768,   457,   194,-32768,   264,
--32768,  1427,   360,   119,-32768,-32768,   457,   217,-32768,   119,
-   724,   344,   392,   220,  1412,   404,-32768,-32768,-32768,-32768,
-   119,-32768,-32768,   292,   250,-32768,   267,   119,-32768,-32768,
-   381,   300,   313,   822,-32768,   119,-32768,-32768,-32768,-32768,
--32768,   317,   320,   326,   343,-32768,   347,  1958,   848,-32768,
-   848,-32768,  1958,  1958,   390,-32768,-32768,  1958,  1958,  1958,
-  1958,  1958,  1958,  1958,  1958,  1958,  1958,  1958,  1958,-32768,
--32768,   397,   397,  1958,  1958,-32768,-32768,-32768,-32768,   204,
-  1487,-32768,   442,   277,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   106,-32768,   371,-32768,   392,-32768,-32768,   408,
-   392,   434,-32768,   636,-32768,   358,   372,-32768,   268,    59,
--32768,-32768,   433,   119,   226,   346,-32768,   457,   457,-32768,
-   360,   119,-32768,  1500,-32768,-32768,   360,  1958,   397,   387,
-   250,-32768,-32768,-32768,-32768,-32768,   394,-32768,   396,-32768,
--32768,   399,   405,  1781,-32768,  2202,   407,   410,  2202,  2202,
-  1958,   455,  1958,  1958,  1751,   578,  1357,   607,   873,   707,
-   707,   303,   303,-32768,-32768,-32768,-32768,-32768,   422,   229,
-   412,    56,   429,-32768,   904,-32768,   421,-32768,  1553,-32768,
-   277,   430,   699,  2039,    57,   449,-32768,-32768,-32768,  1709,
--32768,   453,   265,-32768,-32768,   115,-32768,-32768,    55,-32768,
--32768,-32768,  1083,-32768,   344,-32768,-32768,   344,-32768,   494,
--32768,-32768,   452,-32768,  2202,-32768,   119,   458,   451,-32768,
--32768,   451,   119,   119,-32768,   510,-32768,-32768,-32768,-32768,
--32768,   507,  1958,  2231,  2243,-32768,-32768,   442,-32768,-32768,
--32768,-32768,-32768,   464,-32768,-32768,   124,   474,-32768,-32768,
-   309,    67,-32768,-32768,  1679,-32768,   549,   326,-32768,-32768,
--32768,   476,   450,-32768,  1341,    55,-32768,-32768,    55,-32768,
-   119,-32768,   333,-32768,-32768,   397,   942,   510,-32768,  1161,
--32768,  2218,-32768,-32768,  1958,-32768,-32768,-32768,    67,   119,
-   144,   160,   119,-32768,   160,   119,   904,-32768,-32768,-32768,
--32768,-32768,   457,-32768,   194,-32768,   887,-32768,-32768,  2202,
--32768,-32768,  1341,-32768,-32768,-32768,  1958,   130,-32768,   266,
-   432,   667,   479,   481,   760,-32768,-32768,-32768,-32768,-32768,
-   522,   397,  1958,-32768,   526,  2202,   487,   497,-32768,  1958,
-   132,   207,   601,-32768,  1566,-32768,-32768,-32768,   176,-32768,
--32768,-32768,   279,   281,    52,   887,-32768,-32768,  1161,-32768,
-  2166,  1958,-32768,-32768,   397,-32768,-32768,-32768,-32768,   501,
--32768,-32768,-32768,-32768,  1647,   545,  2064,  1161,-32768,-32768,
-  1221,-32768,  2218,-32768,   454,-32768,   454,-32768,-32768,   500,
--32768,-32768,   506,-32768,  2166,-32768,-32768,  1727,   547,   527,
--32768,-32768,   529,   537,  1958,   559,   533,   536,  1905,    89,
-   592,-32768,   565,   540,-32768,   555,  2120,-32768,   590,  1024,
-    60,-32768,-32768,-32768,-32768,-32768,  1838,-32768,  1958,   597,
-   557,  1281,-32768,   813,-32768,-32768,-32768,  1958,   585,-32768,
-  1958,  1958,  2135,-32768,-32768,-32768,-32768,   568,  1958,   586,
--32768,   608,-32768,-32768,-32768,   457,-32768,   194,  1104,-32768,
--32768,-32768,-32768,  1958,-32768,  1281,  2117,-32768,  1281,-32768,
--32768,   593,  1958,   666,-32768,   275,   622,   632,  1958,-32768,
--32768,   637,-32768,  1958,   301,-32768,   108,   308,-32768,  1033,
--32768,-32768,  1727,   633,-32768,   677,  1281,-32768,-32768,   642,
--32768,-32768,-32768,-32768,  2184,-32768,    26,-32768,   360,-32768,
-   360,-32768,-32768,-32768,   643,-32768,-32768,-32768,-32768,  1958,
--32768,-32768,   710,   646,-32768,-32768,-32768,-32768,  1281,-32768,
--32768,   647,-32768,   668,    47,   651,-32768,-32768,   326,   326,
--32768,-32768,-32768,  1958,   710,   656,   710,-32768,-32768,  1958,
-   658,    48,-32768,-32768,   659,-32768,   434,   662,-32768,   299,
-   146,-32768,-32768,   663,   434,-32768,-32768,   299,   742,   743,
--32768
-};
-
-static const short yypgoto[] = {-32768,
--32768,-32768,-32768,   153,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    -5,-32768,   -40,   456,  -137,   427,-32768,-32768,
-   -55,-32768,   398,-32768,-32768,-32768,-32768,-32768,   197,-32768,
-  -191,  -207,   542,-32768,-32768,   332,-32768,    22,   -98,   216,
-     0,   711,-32768,   351,     7,    -7,   -15,   573,    11,  -171,
-  -365,   -45,  -107,   -52,-32768,-32768,-32768,   206,    14,    53,
--32768,   483,-32768,   349,-32768,  -411,-32768,  -384,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   -38,   -63,  -310,   -13,   -30,-32768,-32768,-32768,-32768,-32768,
-   551,    24,-32768,   630,   550,   414,   653,   558,    27,   -57,
-     3,   -89,  -152,   365,-32768,-32768,  -170,-32768,-32768,-32768,
-   411,  -292,  -128,-32768,-32768,-32768,-32768,   -95,  -285,  -422,
-   367,-32768,   208,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   209,-32768,  -555,   149,-32768,   150,-32768,
-   525,-32768,  -232,-32768,-32768,-32768,   459,  -194,-32768,-32768,
--32768,-32768,     9
-};
-
-
-#define        YYLAST          2295
-
-
-static const short yytable[] = {    87,
-    98,    21,    21,    35,    37,    39,    49,   124,    22,    22,
-    28,    28,   121,   232,    54,    25,    25,   222,   148,   149,
-   295,   229,   290,   319,   151,   253,   225,    21,   132,   324,
-   156,   105,    55,    48,    22,    56,    28,   283,   321,   125,
-   187,    25,    51,    53,   198,   383,   280,   463,   310,   141,
-   401,   100,   350,   226,   209,   368,   134,   503,    48,  -102,
-   573,    67,   206,   633,   120,   186,    48,   143,   311,    43,
-   150,   216,   131,   144,   642,   100,   541,    60,   110,    32,
-    33,    32,    33,   422,   655,   667,   424,    32,    33,    -1,
-   207,    32,    33,   100,   211,   132,    14,   202,    -2,   282,
-    60,   634,   232,   105,   665,   189,   543,    40,    60,   155,
-   111,   112,   197,    50,   190,   191,   404,    48,   574,   290,
-   120,    48,   656,   668,   222,   399,   191,   584,   141,   348,
-   120,   134,   359,    41,   110,   222,   252,  -162,   559,   131,
-  -102,   222,   497,  -162,   281,    42,   143,   331,    14,   331,
-   287,   485,   144,   197,   100,    29,   280,   581,    34,    14,
-    36,   315,   243,   132,   245,   318,    38,   472,   247,   100,
-   249,   100,    60,    14,   462,   317,   277,   278,    43,   622,
-    61,   292,   206,    60,  -162,   257,   293,   258,  -162,    14,
-   366,   605,    63,   323,   608,   367,    43,   508,   339,   394,
-   595,   637,   454,   455,   395,    14,   641,   494,   643,    43,
-   397,   207,   158,   206,    66,   211,   436,   652,   111,   112,
-   342,   674,   627,    14,    68,   404,   675,    25,    43,   115,
-   111,   112,   206,   134,   399,   191,    14,   103,   120,   411,
-   106,   120,   120,    44,   107,   468,   283,   208,   354,    57,
-   676,    58,    45,   189,   651,    14,   398,   451,   138,   498,
-   132,   477,   190,   191,   482,   399,   191,   133,   217,    32,
-    33,  -105,  -105,  -105,  -105,   116,    60,  -105,   146,  -105,
-  -105,  -105,   128,   129,   117,   603,   331,   202,     9,    10,
-    11,   437,    54,   227,   468,  -105,   235,   228,    25,   348,
-   107,   453,   157,   403,   406,   373,   348,   186,   452,   158,
-    55,    43,   397,    56,   459,   188,     5,   195,     7,   196,
-   361,   362,   212,   374,     9,    10,    11,   238,   180,   181,
-   239,   182,   183,   184,   185,    43,   115,   437,    14,   483,
-    13,   364,   474,   242,   428,   365,   475,   402,   405,  -105,
-   612,   248,   177,   178,   179,   501,   528,   502,   398,   228,
-   217,   107,    14,  -315,  -315,  -315,  -315,   399,   191,   464,
-   427,  -315,  -315,  -315,   400,    48,   244,   618,    25,   528,
-   429,   228,   116,   416,   620,   105,   132,  -315,   107,  -261,
-  -261,   117,   250,   413,   415,   251,   120,    30,    31,    32,
-    33,   465,   233,   234,   233,   234,   544,   252,   127,   128,
-   129,   635,    48,   636,   500,     9,    10,    11,   254,   139,
-    25,   316,     5,   255,     7,    97,   120,   -82,    48,   294,
-     9,    10,    11,    14,   110,   132,   486,   320,   207,   211,
-   307,  -101,    71,    43,   524,   207,    13,   206,   308,    15,
-   111,   112,    60,     5,    57,     7,    58,  -259,  -259,    43,
-   115,     9,    10,    11,   327,   400,   400,   524,   314,   506,
-    14,   333,    48,   334,   528,   670,   335,    13,   558,   523,
-   337,   187,   340,   678,   526,   341,    14,   288,   289,   232,
-    44,   527,   343,   537,   347,   140,  -253,   346,    25,    45,
-   288,   289,   523,   351,   349,   355,   116,   582,   308,   476,
-   585,   588,   454,   455,   560,   117,   160,   162,   592,    54,
-   658,   659,   598,   222,   360,   222,   414,   597,   363,   377,
-   207,   382,   380,   604,   378,   381,   526,    55,   384,   385,
-    56,   386,   610,   527,   391,   537,   393,   566,   568,   396,
-    25,   410,   412,   617,   600,   256,  -295,   400,   481,   -31,
-   259,   260,   524,   489,   490,   265,   266,   267,   268,   269,
-   270,   271,   272,   273,   274,   275,   276,   491,   507,   120,
-   538,    48,   545,   546,   -32,   548,   425,   551,     4,   585,
-  -118,     5,     6,     7,     8,   552,   554,   523,   561,     9,
-    10,    11,   563,    43,   397,   569,   456,   457,   458,   555,
-   460,   461,   556,   661,    12,    13,   564,    14,    15,   585,
-   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-    14,   565,   578,   473,   580,   325,   296,  -118,   297,     5,
-     6,     7,     8,   583,   591,   298,  -118,     9,    10,    11,
-   496,   172,   173,   174,   175,   176,   177,   178,   179,    45,
-   344,   345,   593,    13,    16,    14,   594,   217,   609,  -114,
-  -114,  -114,  -114,  -114,  -114,  -114,   504,  -114,  -114,  -114,
-  -114,  -114,   611,  -114,  -114,  -114,  -114,  -114,  -114,  -114,
-  -114,  -114,  -114,  -114,  -114,  -114,  -114,  -114,   613,  -114,
-  -114,    32,    33,   199,   200,   201,  -114,   614,   625,  -114,
-   547,  -375,   626,   616,  -114,  -114,  -114,   628,   644,   638,
-  -114,  -114,   648,   653,   230,  -114,   654,   -19,   -19,   -19,
-   -19,   657,   663,   666,   669,   -19,   -19,   -19,   672,   677,
-   392,   680,   681,  -114,  -114,  -114,  -114,   586,  -114,   358,
-   110,   -19,   575,  -162,   175,   176,   177,   178,   179,  -162,
-   217,   312,  -315,  -315,   478,   126,   466,  -315,  -315,   291,
-  -315,   470,   420,   246,  -315,   356,  -315,  -315,  -315,  -315,
-  -315,  -315,  -315,  -315,  -315,  -315,  -315,   446,  -315,   241,
-  -315,   328,  -315,  -315,   332,   426,   326,   479,   439,  -315,
-  -162,   484,  -315,   662,  -162,   -19,   664,  -315,  -315,  -315,
-   623,   624,   352,  -315,  -315,    43,   397,     0,  -315,   206,
-   420,     0,   139,   409,   471,     5,     0,     7,    97,     0,
-     0,     0,     0,     9,    10,    11,  -315,  -291,  -315,  -315,
-   487,  -315,    14,     0,     0,     0,     0,   493,   152,    13,
-    69,     5,    15,     7,    97,    70,    71,     0,    72,     9,
-    10,    11,   496,     0,     0,     0,   446,     0,     0,   505,
-     0,    45,     0,     0,     0,    13,    73,     0,    15,     0,
-    74,    75,     0,     0,     0,   446,     0,    76,   446,     0,
-    77,   467,   128,   129,     0,    78,    79,    80,     9,    10,
-    11,    81,    82,     0,   296,     0,    83,     5,     6,     7,
-     8,     0,   553,   298,     0,     9,    10,    11,   173,   174,
-   175,   176,   177,   178,   179,     0,    84,    85,     0,   -91,
-     0,    13,     0,    14,     0,     0,   577,     0,     0,   446,
-     0,     0,   431,     0,  -315,  -315,  -315,  -315,  -315,  -315,
-  -315,     0,  -315,  -315,  -315,  -315,  -315,     0,  -315,  -315,
-  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,
-  -315,  -315,  -315,   446,  -315,  -315,   446,     0,     0,  -375,
-     0,  -315,     0,     0,  -315,     0,   615,     0,     0,  -315,
-  -315,  -315,     0,     0,     0,  -315,  -315,     0,     0,     0,
-  -315,     0,     0,     0,   446,     5,     0,     7,   196,     0,
-     0,     0,     0,     9,    10,    11,     0,     0,  -315,     0,
-  -315,  -315,     0,  -315,   570,     0,  -315,  -315,     0,    13,
-     0,  -315,  -315,     0,  -315,     0,   446,     0,  -315,     0,
-  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,  -315,
-  -315,   189,  -315,     0,  -315,     0,  -315,  -315,     0,   110,
-   190,   191,  -162,  -315,     0,     0,  -315,     0,  -162,     0,
-     0,  -315,  -315,  -315,     0,     0,     0,  -315,  -315,     0,
-     0,     0,  -315,     0,     0,     0,     5,     6,     7,     8,
-     0,   111,   112,     0,     9,    10,    11,     0,     0,     0,
-  -315,     0,  -315,  -315,   601,  -315,  -325,  -325,     0,  -162,
-    13,  -325,  -325,  -162,  -325,     0,     0,     0,  -325,     0,
-  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,  -325,
-  -325,     0,  -325,     0,  -325,     0,  -325,  -325,     0,     0,
-     0,     0,     0,  -325,   180,   181,  -325,   182,   183,   184,
-   185,  -325,  -325,  -325,     0,     0,     0,  -325,  -325,     0,
-     0,   440,  -325,   441,    33,     0,     0,     0,    70,    71,
-     0,    72,     0,     0,     0,     0,     0,     0,     0,     0,
-  -325,     0,  -325,  -325,     0,  -325,     0,     0,     0,    73,
-     0,    15,     0,    74,    75,     0,     0,     0,     0,     0,
-    76,     0,     0,    77,     0,     0,     0,     0,    78,    79,
-    80,     0,     0,     0,    81,    82,     0,     0,   442,    83,
-   443,   440,     0,   441,    33,     0,     0,     0,    70,    71,
-     0,    72,     0,     0,     0,     0,     0,     0,  -190,    84,
-    85,     0,   444,     0,     0,     0,     0,     0,     0,    73,
-     0,    15,     0,    74,    75,     0,     0,     0,     0,     0,
-    76,     0,     0,    77,     0,     0,     0,     0,    78,    79,
-    80,     0,     0,     0,    81,    82,     0,     0,   442,    83,
-   443,   440,     0,   441,    33,     0,     0,     0,    70,    71,
-     0,    72,     0,     0,     0,     0,     0,     0,  -250,    84,
-    85,     0,   444,     0,     0,     0,     0,     0,     0,    73,
-     0,    15,     0,    74,    75,     0,     0,     0,     0,     0,
-    76,     0,     0,    77,     0,     0,     0,     0,    78,    79,
-    80,     0,     0,     0,    81,    82,     0,     0,   442,    83,
-   443,   418,     0,    69,     0,     0,     0,     0,    70,    71,
-     0,    72,   109,     0,     0,   -27,   -27,   -27,   -27,    84,
-    85,     0,   444,   -27,   -27,   -27,     0,     0,     0,    73,
-     0,    15,     0,    74,    75,     0,     0,     0,   110,   -27,
-    76,  -162,     0,    77,     0,     0,     0,  -162,    78,    79,
-    80,     0,     0,     0,    81,    82,     0,     0,     0,    83,
-   171,   172,   173,   174,   175,   176,   177,   178,   179,     0,
-   111,   112,   236,     0,     0,   -23,   -23,   -23,   -23,    84,
-    85,     0,   419,   -23,   -23,   -23,     0,     0,  -162,    69,
-     0,     0,  -162,   -27,    70,    71,     0,    72,   110,   -23,
-     0,  -162,     0,     0,     0,     0,     0,  -162,     0,     0,
-     0,     0,     0,     0,     0,    73,     0,    15,     0,    74,
-    75,     0,     0,     0,     0,     0,    76,     0,     0,    77,
-   111,   112,     0,     0,    78,    79,    80,     0,     0,     0,
-    81,    82,     0,     0,     0,    83,     0,     0,  -162,    69,
-     0,     0,  -162,   -23,    70,    71,     0,    72,     0,     0,
-     0,     0,    69,     0,     0,    84,    85,    70,    71,   215,
-    72,     0,     0,     0,     0,    73,     0,    15,     0,    74,
-    75,     0,     0,     0,     0,     0,    76,     0,    73,    77,
-    15,     0,    74,    75,    78,    79,    80,     0,     0,    76,
-    81,    82,    77,     0,     0,    83,     0,    78,    79,    80,
-     0,     0,     0,    81,    82,    69,     0,     0,    83,     0,
-    70,    71,     0,    72,     0,    84,    85,     0,    69,   286,
-     0,     0,     0,    70,    71,     0,    72,     0,    84,    85,
-     0,    73,   322,    15,     0,    74,    75,     0,     0,     0,
-     0,     0,    76,     0,    73,    77,    15,     0,    74,    75,
-    78,    79,    80,     0,     0,    76,    81,    82,    77,     0,
-     0,    83,     0,    78,    79,    80,     0,     0,     0,    81,
-    82,     0,     0,     0,    83,     0,     0,     0,     0,     0,
-     0,    84,    85,     0,     0,   353,     0,     0,     0,     0,
-     0,     0,     0,     0,    84,    85,     0,     0,   499,   441,
-   509,     6,     7,     8,    70,    71,     0,    72,     9,    10,
-    11,   510,     0,   511,   512,   513,   514,   515,   516,   517,
-   518,   519,   520,   521,    13,    73,    14,    15,     0,    74,
-    75,     0,     5,     6,     7,     8,    76,     0,   408,    77,
-     9,    10,    11,     0,    78,    79,    80,     0,     0,     0,
-    81,    82,     0,     0,     0,    83,    13,     0,    14,     0,
-     0,     0,     5,     6,     7,     8,     0,     0,     0,     0,
-     9,    10,    11,   522,     0,    84,    85,     0,   252,   441,
-    33,     0,     0,     0,    70,    71,    13,    72,    14,     0,
-     0,   510,     0,   511,   512,   513,   514,   515,   516,   517,
-   518,   519,   520,   521,     0,    73,     0,    15,     0,    74,
-    75,     0,     0,     0,     0,     0,    76,     0,     0,    77,
-     0,     0,     0,     0,    78,    79,    80,     0,     0,     0,
-    81,    82,     0,    69,     0,    83,     0,     0,    70,    71,
-     0,    72,   169,   170,   171,   172,   173,   174,   175,   176,
-   177,   178,   179,   522,     0,    84,    85,     0,   252,    73,
-     0,    15,     0,    74,    75,     0,     0,     0,     0,     0,
-    76,     0,     0,    77,     0,     0,     0,     0,    78,    79,
-    80,     0,     0,     0,    81,    82,     0,     0,     0,    83,
-    69,     5,     6,     7,     8,    70,    71,     0,    72,     9,
-    10,    11,     0,     0,     0,     0,     0,     0,     0,    84,
-    85,     0,   338,     0,     0,    13,    73,    14,    15,     0,
-    74,    75,     0,     0,     0,     0,     0,    76,     0,     0,
-    77,     0,     0,     0,     0,    78,    79,    80,     0,     0,
-     0,    81,    82,     0,    69,     5,    83,     7,    97,    70,
-    71,     0,    72,     9,    10,    11,     0,    69,     0,     0,
-     0,     0,    70,    71,     0,    72,    84,    85,     0,    13,
-    73,     0,    15,     0,    74,    75,     0,     0,     0,     0,
-     0,    76,     0,    73,    77,    15,     0,    74,    75,    78,
-    79,    80,     0,     0,    76,    81,    82,    77,     0,     0,
-    83,     0,    78,    79,    80,     0,     0,     0,    81,    82,
-    69,     0,     0,    83,     0,    70,    71,     0,    72,     0,
-    84,    85,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   557,     0,    84,    85,     0,    73,    69,    15,     0,
-    74,    75,    70,    71,     0,    72,     0,    76,     0,     0,
-    77,     0,     0,     0,     0,    78,    79,    80,     0,     0,
-     0,    81,    82,    73,    69,    15,    83,    74,    75,    70,
-    71,     0,    72,     0,    76,     0,     0,    77,     0,     0,
-     0,     0,    78,    79,    80,     0,    84,    85,    81,    82,
-    73,   357,    15,   159,    74,    75,    70,    71,     0,    72,
-     0,    76,     0,     0,    77,     0,     0,     0,     0,    78,
-    79,    80,     0,    84,    85,    81,    82,    73,     0,    15,
-   161,    74,    75,   539,     0,     0,     0,     0,    76,     0,
-     0,    77,     0,     0,     0,     0,    78,    79,    80,     0,
-    84,    85,    81,    82,     0,     0,     0,    83,   163,   164,
-   165,     0,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   176,   177,   178,   179,     0,    84,    85,     5,
-     6,     7,     8,     5,     6,     7,     8,     9,    10,    11,
-     0,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    13,   589,    14,   540,    13,     0,    14,
-     0,   163,   164,   165,     0,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,   177,   178,   179,   163,
-   164,   165,   590,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,   179,     0,     0,     0,
-     0,     0,    52,     0,     0,    14,   567,     0,     0,   606,
-   163,   164,   165,     0,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,   177,   178,   179,   163,   164,
-   165,   632,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   176,   177,   178,   179,   163,   164,   165,     0,
-   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-   176,   177,   178,   179,   165,     0,   166,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-   177,   178,   179,   168,   169,   170,   171,   172,   173,   174,
-   175,   176,   177,   178,   179
-};
-
-static const short yycheck[] = {    40,
-    41,     2,     3,     9,    10,    11,    20,    53,     2,     3,
-     2,     3,    51,   121,    22,     2,     3,   113,    74,    75,
-   212,   120,   194,   231,    80,   154,   116,    28,    59,   237,
-    86,    45,    22,    20,    28,    22,    28,   190,   233,    53,
-    96,    28,    21,    22,   102,   331,   184,   413,   219,    65,
-   361,    41,   285,   117,   107,     1,    62,   469,    45,     1,
-     1,    38,     7,    38,    51,     9,    53,    65,    10,     3,
-    76,   112,    59,    65,   630,    65,   488,    25,    27,     3,
-     4,     3,     4,   376,    38,    38,   379,     3,     4,     0,
-   104,     3,     4,    83,   108,   126,    30,   103,     0,   189,
-    48,    76,   210,   117,   660,    50,   491,    59,    56,    83,
-    59,    60,   102,    77,    59,    60,    50,   104,    59,   291,
-   107,   108,    76,    76,   220,    59,    60,   550,   144,   282,
-   117,   137,    76,    59,    27,   231,    82,    30,    50,   126,
-    82,   237,   453,    36,   185,    59,   144,   243,    30,   245,
-   191,   437,   144,   143,   144,     3,   294,   542,    82,    30,
-    82,   225,   141,   194,   143,   229,    82,    38,   145,   159,
-   147,   161,   120,    30,   407,   228,   182,   183,     3,   602,
-    28,    76,     7,   131,    77,   159,    81,   161,    81,    30,
-    76,   576,    82,   234,   579,    81,     3,   483,   254,    76,
-   566,   624,    59,    60,    81,    30,   629,    76,   631,     3,
-     4,   225,    81,     7,    82,   229,   387,   640,    59,    60,
-   261,    76,   607,    30,    82,    50,    81,   214,     3,     4,
-    59,    60,     7,   239,    59,    60,    30,    59,   225,   368,
-    77,   228,   229,    50,    81,   417,   399,    76,   289,     5,
-   673,     7,    59,    50,   639,    30,    50,   395,    78,   454,
-   291,   432,    59,    60,   435,    59,    60,     1,     1,     3,
-     4,     4,     5,     6,     7,    50,   224,    10,    78,    12,
-    13,    14,     6,     7,    59,   571,   382,   293,    12,    13,
-    14,   387,   300,    77,   466,    28,    77,    81,   285,   452,
-    81,   400,    76,   361,   362,   313,   459,     9,   398,    81,
-   300,     3,     4,   300,   404,    76,     4,    76,     6,     7,
-   299,   300,    59,   313,    12,    13,    14,    36,    54,    55,
-    81,    57,    58,    59,    60,     3,     4,   433,    30,   435,
-    28,    77,    77,   138,   383,    81,    81,   361,   362,    82,
-    76,   146,    50,    51,    52,    77,   485,    77,    50,    81,
-     1,    81,    30,     4,     5,     6,     7,    59,    60,   415,
-    38,    12,    13,    14,   361,   362,    77,    77,   365,   508,
-   386,    81,    50,   373,    77,   399,   417,    28,    81,    77,
-    78,    59,    76,   372,   373,    76,   383,    77,    78,     3,
-     4,   415,    59,    60,    59,    60,   496,    82,     5,     6,
-     7,   619,   399,   621,   455,    12,    13,    14,    76,     1,
-   407,    76,     4,    77,     6,     7,   413,    38,   415,    59,
-    12,    13,    14,    30,    27,   466,   442,   232,   452,   453,
-    83,    82,     9,     3,   485,   459,    28,     7,    77,    31,
-    59,    60,   400,     4,     5,     6,     7,    77,    78,     3,
-     4,    12,    13,    14,    78,   452,   453,   508,    36,   475,
-    30,    78,   459,    78,   603,   667,    78,    28,   519,   485,
-    76,   537,    76,   675,   485,    76,    30,    59,    60,   597,
-    50,   485,    38,   485,    83,    77,    78,    76,   485,    59,
-    59,    60,   508,    83,    76,    76,    50,   548,    77,    78,
-   551,   552,    59,    60,   520,    59,    90,    91,   559,   527,
-   649,   650,   568,   619,    76,   621,    77,   566,    76,    36,
-   544,    81,   327,   574,    83,    78,   537,   527,   333,   334,
-   527,    32,   583,   537,    38,   537,    83,   526,   527,    76,
-   537,     3,    77,   594,   568,   158,    78,   544,    78,    38,
-   163,   164,   603,    38,    78,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,   177,   178,   179,    81,    78,   566,
-    36,   568,    83,    78,    38,    59,   381,    59,     1,   630,
-     3,     4,     5,     6,     7,    59,    38,   603,     7,    12,
-    13,    14,    38,     3,     4,    16,   401,   402,   403,    77,
-   405,   406,    77,   654,    27,    28,    77,    30,    31,   660,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    30,    77,    36,   428,    78,   238,     1,    50,     3,     4,
-     5,     6,     7,    59,    77,    10,    59,    12,    13,    14,
-    50,    45,    46,    47,    48,    49,    50,    51,    52,    59,
-   263,   264,    77,    28,    77,    30,    59,     1,    76,     3,
-     4,     5,     6,     7,     8,     9,   471,    11,    12,    13,
-    14,    15,    17,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    77,    33,
-    34,     3,     4,     5,     6,     7,    40,    76,    76,    43,
-   505,    76,    36,    77,    48,    49,    50,    76,     9,    77,
-    54,    55,    77,    77,     1,    59,    59,     4,     5,     6,
-     7,    81,    77,    76,    76,    12,    13,    14,    77,    77,
-   343,     0,     0,    77,    78,    79,    80,   551,    82,   294,
-    27,    28,   537,    30,    48,    49,    50,    51,    52,    36,
-     1,   220,     3,     4,   433,    55,   416,     8,     9,   197,
-    11,   423,   375,   144,    15,   293,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,   390,    29,   137,
-    31,   241,    33,    34,   245,   382,   239,   433,   388,    40,
-    77,   435,    43,   655,    81,    82,   657,    48,    49,    50,
-   603,   603,   288,    54,    55,     3,     4,    -1,    59,     7,
-   423,    -1,     1,   365,   427,     4,    -1,     6,     7,    -1,
-    -1,    -1,    -1,    12,    13,    14,    77,    78,    79,    80,
-   443,    82,    30,    -1,    -1,    -1,    -1,   450,     1,    28,
-     3,     4,    31,     6,     7,     8,     9,    -1,    11,    12,
-    13,    14,    50,    -1,    -1,    -1,   469,    -1,    -1,   472,
-    -1,    59,    -1,    -1,    -1,    28,    29,    -1,    31,    -1,
-    33,    34,    -1,    -1,    -1,   488,    -1,    40,   491,    -1,
-    43,     5,     6,     7,    -1,    48,    49,    50,    12,    13,
-    14,    54,    55,    -1,     1,    -1,    59,     4,     5,     6,
-     7,    -1,   515,    10,    -1,    12,    13,    14,    46,    47,
-    48,    49,    50,    51,    52,    -1,    79,    80,    -1,    82,
-    -1,    28,    -1,    30,    -1,    -1,   539,    -1,    -1,   542,
-    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,     8,
-     9,    -1,    11,    12,    13,    14,    15,    -1,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    30,    31,   576,    33,    34,   579,    -1,    -1,    76,
-    -1,    40,    -1,    -1,    43,    -1,   589,    -1,    -1,    48,
-    49,    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,
-    59,    -1,    -1,    -1,   607,     4,    -1,     6,     7,    -1,
-    -1,    -1,    -1,    12,    13,    14,    -1,    -1,    77,    -1,
-    79,    80,    -1,    82,     1,    -1,     3,     4,    -1,    28,
-    -1,     8,     9,    -1,    11,    -1,   639,    -1,    15,    -1,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    50,    29,    -1,    31,    -1,    33,    34,    -1,    27,
-    59,    60,    30,    40,    -1,    -1,    43,    -1,    36,    -1,
-    -1,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-    -1,    -1,    59,    -1,    -1,    -1,     4,     5,     6,     7,
-    -1,    59,    60,    -1,    12,    13,    14,    -1,    -1,    -1,
-    77,    -1,    79,    80,     1,    82,     3,     4,    -1,    77,
-    28,     8,     9,    81,    11,    -1,    -1,    -1,    15,    -1,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    40,    54,    55,    43,    57,    58,    59,
-    60,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-    -1,     1,    59,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    77,    -1,    79,    80,    -1,    82,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,    59,
-    60,     1,    -1,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,    59,
-    60,     1,    -1,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,    59,
-    60,     1,    -1,     3,    -1,    -1,    -1,    -1,     8,     9,
-    -1,    11,     1,    -1,    -1,     4,     5,     6,     7,    79,
-    80,    -1,    82,    12,    13,    14,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    27,    28,
-    40,    30,    -1,    43,    -1,    -1,    -1,    36,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-    44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
-    59,    60,     1,    -1,    -1,     4,     5,     6,     7,    79,
-    80,    -1,    82,    12,    13,    14,    -1,    -1,    77,     3,
-    -1,    -1,    81,    82,     8,     9,    -1,    11,    27,    28,
-    -1,    30,    -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,
-    59,    60,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,    -1,    -1,    59,    -1,    -1,    77,     3,
-    -1,    -1,    81,    82,     8,     9,    -1,    11,    -1,    -1,
-    -1,    -1,     3,    -1,    -1,    79,    80,     8,     9,    83,
-    11,    -1,    -1,    -1,    -1,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    29,    43,
-    31,    -1,    33,    34,    48,    49,    50,    -1,    -1,    40,
-    54,    55,    43,    -1,    -1,    59,    -1,    48,    49,    50,
-    -1,    -1,    -1,    54,    55,     3,    -1,    -1,    59,    -1,
-     8,     9,    -1,    11,    -1,    79,    80,    -1,     3,    83,
-    -1,    -1,    -1,     8,     9,    -1,    11,    -1,    79,    80,
-    -1,    29,    83,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    29,    43,    31,    -1,    33,    34,
-    48,    49,    50,    -1,    -1,    40,    54,    55,    43,    -1,
-    -1,    59,    -1,    48,    49,    50,    -1,    -1,    -1,    54,
-    55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
-    -1,    79,    80,    -1,    -1,    83,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    79,    80,    -1,    -1,    83,     3,
-     4,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
-    14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    -1,    33,
-    34,    -1,     4,     5,     6,     7,    40,    -1,    10,    43,
-    12,    13,    14,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,    -1,    -1,    59,    28,    -1,    30,    -1,
-    -1,    -1,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
-    12,    13,    14,    77,    -1,    79,    80,    -1,    82,     3,
-     4,    -1,    -1,    -1,     8,     9,    28,    11,    30,    -1,
-    -1,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    -1,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,
-    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,     3,    -1,    59,    -1,    -1,     8,     9,
-    -1,    11,    42,    43,    44,    45,    46,    47,    48,    49,
-    50,    51,    52,    77,    -1,    79,    80,    -1,    82,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-     3,     4,     5,     6,     7,     8,     9,    -1,    11,    12,
-    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
-    80,    -1,    82,    -1,    -1,    28,    29,    30,    31,    -1,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,
-    43,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,
-    -1,    54,    55,    -1,     3,     4,    59,     6,     7,     8,
-     9,    -1,    11,    12,    13,    14,    -1,     3,    -1,    -1,
-    -1,    -1,     8,     9,    -1,    11,    79,    80,    -1,    28,
-    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    40,    -1,    29,    43,    31,    -1,    33,    34,    48,
-    49,    50,    -1,    -1,    40,    54,    55,    43,    -1,    -1,
-    59,    -1,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-     3,    -1,    -1,    59,    -1,     8,     9,    -1,    11,    -1,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    77,    -1,    79,    80,    -1,    29,     3,    31,    -1,
-    33,    34,     8,     9,    -1,    11,    -1,    40,    -1,    -1,
-    43,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,
-    -1,    54,    55,    29,     3,    31,    59,    33,    34,     8,
-     9,    -1,    11,    -1,    40,    -1,    -1,    43,    -1,    -1,
-    -1,    -1,    48,    49,    50,    -1,    79,    80,    54,    55,
-    29,     3,    31,    59,    33,    34,     8,     9,    -1,    11,
-    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,
-    49,    50,    -1,    79,    80,    54,    55,    29,    -1,    31,
-    59,    33,    34,    10,    -1,    -1,    -1,    -1,    40,    -1,
-    -1,    43,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,
-    79,    80,    54,    55,    -1,    -1,    -1,    59,    35,    36,
-    37,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    -1,    79,    80,     4,
-     5,     6,     7,     4,     5,     6,     7,    12,    13,    14,
-    -1,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    10,    30,    83,    28,    -1,    30,
-    -1,    35,    36,    37,    -1,    39,    40,    41,    42,    43,
-    44,    45,    46,    47,    48,    49,    50,    51,    52,    35,
-    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
-    -1,    -1,    77,    -1,    -1,    30,    77,    -1,    -1,    83,
-    35,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
-    45,    46,    47,    48,    49,    50,    51,    52,    35,    36,
-    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    35,    36,    37,    -1,
-    39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-    49,    50,    51,    52,    37,    -1,    39,    40,    41,    42,
-    43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-    50,    51,    52,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
-#define YYERROR                goto yyerrlab1
-/* 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);                      \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-#ifndef YYPURE
-#define YYLEX          yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int    yychar;                 /*  the lookahead symbol                */
-YYSTYPE        yylval;                 /*  the semantic value of the           */
-                               /*  lookahead symbol                    */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;                        /*  location data for the lookahead     */
-                               /*  symbol                              */
-#endif
-
-int yynerrs;                   /*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;                   /*  nonzero means print parse trace     */
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
-
-#ifndef        YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-\f
-#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
-#else                          /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (from, to, count)
-     char *from;
-     char *to;
-     int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *from, char *to, int count)
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 192 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#endif
-
-int
-yyparse(YYPARSE_PARAM)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
-
-  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
-  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
-
-  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
-
-  YYSTYPE yyval;               /*  the variable used to return         */
-                               /*  semantic values from the action     */
-                               /*  routines                            */
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  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 - 1;
-  yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
-
-  *++yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-        the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-        but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yyls1, size * sizeof (*yylsp),
-                &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yystacksize);
-#endif
-
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
-#else /* no yyoverflow */
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       {
-         yyerror("parser stack overflow");
-         return 2;
-       }
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
-  goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Reading a token: ");
-#endif
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-       {
-         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise meaning
-            of a token, for further debugging info.  */
-#ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-#endif
-         fprintf (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-/* Do the default action for the current state.  */
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
-yyreduce:
-  yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-              yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-
-  switch (yyn) {
-
-case 1:
-#line 237 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids an empty source file");
-                 finish_file ();
-               ;
-    break;}
-case 2:
-#line 242 "c-parse.y"
-{
-                 /* In case there were missing closebraces,
-                    get us back to the global binding level.  */
-                 while (! global_bindings_p ())
-                   poplevel (0, 0, 0);
-                 finish_file ();
-               ;
-    break;}
-case 3:
-#line 256 "c-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 5:
-#line 257 "c-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 9:
-#line 264 "c-parse.y"
-{ STRIP_NOPS (yyvsp[-2].ttype);
-                 if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
-                     || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
-                   assemble_asm (yyvsp[-2].ttype);
-                 else
-                   error ("argument of `asm' is not a constant string"); ;
-    break;}
-case 10:
-#line 272 "c-parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 11:
-#line 277 "c-parse.y"
-{ if (pedantic)
-                   error ("ANSI C forbids data definition with no type or storage class");
-                 else if (!flag_traditional)
-                   warning ("data definition has no type or storage class"); 
-
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 12:
-#line 287 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 13:
-#line 292 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 14:
-#line 297 "c-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 15:
-#line 299 "c-parse.y"
-{ shadow_tag (yyvsp[-1].ttype); ;
-    break;}
-case 18:
-#line 303 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
-    break;}
-case 19:
-#line 309 "c-parse.y"
-{ if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 20:
-#line 314 "c-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 21:
-#line 316 "c-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 22:
-#line 322 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 23:
-#line 327 "c-parse.y"
-{ if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 24:
-#line 332 "c-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 25:
-#line 334 "c-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 26:
-#line 340 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 27:
-#line 345 "c-parse.y"
-{ if (! start_function (NULL_TREE, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 28:
-#line 350 "c-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 29:
-#line 352 "c-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 30:
-#line 358 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 33:
-#line 370 "c-parse.y"
-{ yyval.code = ADDR_EXPR; ;
-    break;}
-case 34:
-#line 372 "c-parse.y"
-{ yyval.code = NEGATE_EXPR; ;
-    break;}
-case 35:
-#line 374 "c-parse.y"
-{ yyval.code = CONVERT_EXPR; ;
-    break;}
-case 36:
-#line 376 "c-parse.y"
-{ yyval.code = PREINCREMENT_EXPR; ;
-    break;}
-case 37:
-#line 378 "c-parse.y"
-{ yyval.code = PREDECREMENT_EXPR; ;
-    break;}
-case 38:
-#line 380 "c-parse.y"
-{ yyval.code = BIT_NOT_EXPR; ;
-    break;}
-case 39:
-#line 382 "c-parse.y"
-{ yyval.code = TRUTH_NOT_EXPR; ;
-    break;}
-case 40:
-#line 386 "c-parse.y"
-{ yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
-    break;}
-case 41:
-#line 391 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 43:
-#line 397 "c-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 44:
-#line 399 "c-parse.y"
-{ chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 46:
-#line 405 "c-parse.y"
-{ yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
-    break;}
-case 47:
-#line 408 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 48:
-#line 411 "c-parse.y"
-{ yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
-                 overflow_warning (yyval.ttype); ;
-    break;}
-case 49:
-#line 415 "c-parse.y"
-{ tree label = lookup_label (yyvsp[0].ttype);
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids `&&'");
-                 if (label == 0)
-                   yyval.ttype = null_pointer_node;
-                 else
-                   {
-                     TREE_USED (label) = 1;
-                     yyval.ttype = build1 (ADDR_EXPR, ptr_type_node, label);
-                     TREE_CONSTANT (yyval.ttype) = 1;
-                   }
-               ;
-    break;}
-case 50:
-#line 443 "c-parse.y"
-{ skip_evaluation--;
-                 if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
-                     && DECL_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
-                   error ("`sizeof' applied to a bit-field");
-                 yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
-    break;}
-case 51:
-#line 449 "c-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
-    break;}
-case 52:
-#line 452 "c-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
-    break;}
-case 53:
-#line 455 "c-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
-    break;}
-case 54:
-#line 458 "c-parse.y"
-{ yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
-    break;}
-case 55:
-#line 460 "c-parse.y"
-{ yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
-    break;}
-case 56:
-#line 464 "c-parse.y"
-{ skip_evaluation++; ;
-    break;}
-case 57:
-#line 468 "c-parse.y"
-{ skip_evaluation++; ;
-    break;}
-case 59:
-#line 474 "c-parse.y"
-{ tree type = groktypename (yyvsp[-2].ttype);
-                 yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
-    break;}
-case 60:
-#line 477 "c-parse.y"
-{ start_init (NULL_TREE, NULL, 0);
-                 yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
-                 really_start_incremental_init (yyvsp[-2].ttype); ;
-    break;}
-case 61:
-#line 481 "c-parse.y"
-{ char *name;
-                 tree result = pop_init_level (0);
-                 tree type = yyvsp[-5].ttype;
-                 finish_init ();
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids constructor expressions");
-                 if (TYPE_NAME (type) != 0)
-                   {
-                     if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-                       name = IDENTIFIER_POINTER (TYPE_NAME (type));
-                     else
-                       name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
-                   }
-                 else
-                   name = "";
-                 yyval.ttype = result;
-                 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
-                   {
-                     int failure = complete_array_type (type, yyval.ttype, 1);
-                     if (failure)
-                       abort ();
-                   }
-               ;
-    break;}
-case 63:
-#line 510 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 64:
-#line 512 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 65:
-#line 514 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 66:
-#line 516 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 67:
-#line 518 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 68:
-#line 520 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 69:
-#line 522 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 70:
-#line 524 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 71:
-#line 526 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 72:
-#line 528 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 73:
-#line 530 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 74:
-#line 532 "c-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 75:
-#line 534 "c-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
-    break;}
-case 76:
-#line 537 "c-parse.y"
-{ skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
-                 yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 77:
-#line 540 "c-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
-    break;}
-case 78:
-#line 543 "c-parse.y"
-{ skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
-                 yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 79:
-#line 546 "c-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
-    break;}
-case 80:
-#line 549 "c-parse.y"
-{ skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
-                                     - (yyvsp[-4].ttype == boolean_false_node)); ;
-    break;}
-case 81:
-#line 552 "c-parse.y"
-{ skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
-                 yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 82:
-#line 555 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
-                 /* Make sure first operand is calculated only once.  */
-                 yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
-                 yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
-    break;}
-case 83:
-#line 562 "c-parse.y"
-{ skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
-                 yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 84:
-#line 565 "c-parse.y"
-{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
-                 C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
-    break;}
-case 85:
-#line 568 "c-parse.y"
-{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
-                 /* This inhibits warnings in truthvalue_conversion.  */
-                 C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
-    break;}
-case 86:
-#line 575 "c-parse.y"
-{
-                 yyval.ttype = lastiddecl;
-                 if (!yyval.ttype || yyval.ttype == error_mark_node)
-                   {
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                           {
-                             /* Ordinary implicit function declaration.  */
-                             yyval.ttype = implicitly_declare (yyvsp[0].ttype);
-                             assemble_external (yyval.ttype);
-                             TREE_USED (yyval.ttype) = 1;
-                           }
-                       }
-                     else if (current_function_decl == 0)
-                       {
-                         error ("`%s' undeclared here (not in a function)",
-                                IDENTIFIER_POINTER (yyvsp[0].ttype));
-                         yyval.ttype = error_mark_node;
-                       }
-                     else
-                       {
-                           {
-                             if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node
-                                 || IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) != current_function_decl)
-                               {
-                                 error ("`%s' undeclared (first use this function)",
-                                        IDENTIFIER_POINTER (yyvsp[0].ttype));
-
-                                 if (! undeclared_variable_notice)
-                                   {
-                                     error ("(Each undeclared identifier is reported only once");
-                                     error ("for each function it appears in.)");
-                                     undeclared_variable_notice = 1;
-                                   }
-                               }
-                             yyval.ttype = error_mark_node;
-                             /* Prevent repeated error messages.  */
-                             IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
-                             IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) = current_function_decl;
-                           }
-                       }
-                   }
-                 else if (TREE_TYPE (yyval.ttype) == error_mark_node)
-                   yyval.ttype = error_mark_node;
-                 else if (C_DECL_ANTICIPATED (yyval.ttype))
-                   {
-                     /* The first time we see a build-in function used,
-                        if it has not been declared.  */
-                     C_DECL_ANTICIPATED (yyval.ttype) = 0;
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         /* Omit the implicit declaration we
-                            would ordinarily do, so we don't lose
-                            the actual built in type.
-                            But print a diagnostic for the mismatch.  */
-                           if (TREE_CODE (yyval.ttype) != FUNCTION_DECL)
-                             error ("`%s' implicitly declared as function",
-                                    IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-                         else if ((TYPE_MODE (TREE_TYPE (TREE_TYPE (yyval.ttype)))
-                                   != TYPE_MODE (integer_type_node))
-                                  && (TREE_TYPE (TREE_TYPE (yyval.ttype))
-                                      != void_type_node))
-                           pedwarn ("type mismatch in implicit declaration for built-in function `%s'",
-                                    IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-                         /* If it really returns void, change that to int.  */
-                         if (TREE_TYPE (TREE_TYPE (yyval.ttype)) == void_type_node)
-                           TREE_TYPE (yyval.ttype)
-                             = build_function_type (integer_type_node,
-                                                    TYPE_ARG_TYPES (TREE_TYPE (yyval.ttype)));
-                       }
-                     else
-                       pedwarn ("built-in function `%s' used without declaration",
-                                IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-
-                     /* Do what we would ordinarily do when a fn is used.  */
-                     assemble_external (yyval.ttype);
-                     TREE_USED (yyval.ttype) = 1;
-                   }
-                 else
-                   {
-                     assemble_external (yyval.ttype);
-                     TREE_USED (yyval.ttype) = 1;
-                   }
-
-                 if (TREE_CODE (yyval.ttype) == CONST_DECL)
-                   {
-                     yyval.ttype = DECL_INITIAL (yyval.ttype);
-                     /* This is to prevent an enum whose value is 0
-                        from being considered a null pointer constant.  */
-                     yyval.ttype = build1 (NOP_EXPR, TREE_TYPE (yyval.ttype), yyval.ttype);
-                     TREE_CONSTANT (yyval.ttype) = 1;
-                   }
-               ;
-    break;}
-case 88:
-#line 674 "c-parse.y"
-{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
-    break;}
-case 89:
-#line 676 "c-parse.y"
-{ char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                   C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
-                 yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 90:
-#line 682 "c-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 91:
-#line 684 "c-parse.y"
-{ if (current_function_decl == 0)
-                   {
-                     error ("braced-group within expression allowed only inside a function");
-                     YYERROR;
-                   }
-                 /* We must force a BLOCK for this level
-                    so that, if it is not expanded later,
-                    there is a way to turn off the entire subtree of blocks
-                    that are contained in it.  */
-                 keep_next_level ();
-                 push_iterator_stack ();
-                 push_label_level ();
-                 yyval.ttype = expand_start_stmt_expr (); ;
-    break;}
-case 92:
-#line 698 "c-parse.y"
-{ tree rtl_exp;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids braced-groups within expressions");
-                 pop_iterator_stack ();
-                 pop_label_level ();
-                 rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
-                 /* The statements have side effects, so the group does.  */
-                 TREE_SIDE_EFFECTS (rtl_exp) = 1;
-
-                 if (TREE_CODE (yyvsp[-1].ttype) == BLOCK)
-                   {
-                     /* Make a BIND_EXPR for the BLOCK already made.  */
-                     yyval.ttype = build (BIND_EXPR, TREE_TYPE (rtl_exp),
-                                 NULL_TREE, rtl_exp, yyvsp[-1].ttype);
-                     /* Remove the block from the tree at this point.
-                        It gets put back at the proper place
-                        when the BIND_EXPR is expanded.  */
-                     delete_block (yyvsp[-1].ttype);
-                   }
-                 else
-                   yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 93:
-#line 721 "c-parse.y"
-{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 94:
-#line 723 "c-parse.y"
-{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 95:
-#line 725 "c-parse.y"
-{
-                   yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 96:
-#line 729 "c-parse.y"
-{
-                  tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
-
-                    yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
-               ;
-    break;}
-case 97:
-#line 735 "c-parse.y"
-{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
-    break;}
-case 98:
-#line 737 "c-parse.y"
-{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
-    break;}
-case 100:
-#line 744 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 103:
-#line 753 "c-parse.y"
-{ c_mark_varargs ();
-                 if (pedantic)
-                   pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
-    break;}
-case 104:
-#line 763 "c-parse.y"
-{ ;
-    break;}
-case 109:
-#line 779 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 110:
-#line 784 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);     
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 111:
-#line 789 "c-parse.y"
-{ shadow_tag_warned (yyvsp[-1].ttype, 1);
-                 pedwarn ("empty declaration"); ;
-    break;}
-case 112:
-#line 792 "c-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 113:
-#line 801 "c-parse.y"
-{ ;
-    break;}
-case 118:
-#line 816 "c-parse.y"
-{ yyval.itype = suspend_momentary ();
-                 pending_xref_error ();
-                 declspec_stack = tree_cons (prefix_attributes,
-                                             current_declspecs,
-                                             declspec_stack);
-                 split_specs_attrs (yyvsp[0].ttype,
-                                    &current_declspecs, &prefix_attributes); ;
-    break;}
-case 119:
-#line 827 "c-parse.y"
-{ prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
-    break;}
-case 120:
-#line 832 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 121:
-#line 837 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 122:
-#line 842 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 123:
-#line 847 "c-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 124:
-#line 852 "c-parse.y"
-{ shadow_tag (yyvsp[-1].ttype); ;
-    break;}
-case 125:
-#line 854 "c-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 126:
-#line 856 "c-parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 127:
-#line 866 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 128:
-#line 868 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 129:
-#line 872 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 130:
-#line 874 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 131:
-#line 876 "c-parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 132:
-#line 881 "c-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 133:
-#line 886 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 134:
-#line 888 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 135:
-#line 893 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 136:
-#line 895 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 137:
-#line 897 "c-parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 138:
-#line 910 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 139:
-#line 912 "c-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
-    break;}
-case 140:
-#line 914 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 141:
-#line 916 "c-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 142:
-#line 921 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
-                 TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 143:
-#line 924 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 144:
-#line 926 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
-                 TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 145:
-#line 929 "c-parse.y"
-{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
-                 TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
-    break;}
-case 146:
-#line 943 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 147:
-#line 945 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 148:
-#line 949 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 149:
-#line 951 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 152:
-#line 961 "c-parse.y"
-{ /* For a typedef name, record the meaning, not the name.
-                    In case of `foo foo, bar;'.  */
-                 yyval.ttype = lookup_name (yyvsp[0].ttype); ;
-    break;}
-case 153:
-#line 965 "c-parse.y"
-{ yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
-    break;}
-case 154:
-#line 967 "c-parse.y"
-{ yyval.ttype = groktypename (yyvsp[-1].ttype); ;
-    break;}
-case 162:
-#line 989 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 163:
-#line 991 "c-parse.y"
-{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
-                 yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 164:
-#line 998 "c-parse.y"
-{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
-                                         yyvsp[-1].ttype, prefix_attributes);
-                 start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
-    break;}
-case 165:
-#line 1003 "c-parse.y"
-{ finish_init ();
-                 finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
-    break;}
-case 166:
-#line 1006 "c-parse.y"
-{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
-                                      yyvsp[0].ttype, prefix_attributes);
-                 finish_decl (d, NULL_TREE, yyvsp[-1].ttype); 
-                ;
-    break;}
-case 167:
-#line 1014 "c-parse.y"
-{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
-                                         yyvsp[-1].ttype, prefix_attributes);
-                 start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
-    break;}
-case 168:
-#line 1019 "c-parse.y"
-{ finish_init ();
-                 decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
-                 finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
-    break;}
-case 169:
-#line 1023 "c-parse.y"
-{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
-                                      yyvsp[0].ttype, prefix_attributes);
-                 finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 170:
-#line 1031 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 171:
-#line 1033 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 172:
-#line 1038 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 173:
-#line 1040 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 174:
-#line 1045 "c-parse.y"
-{ yyval.ttype = yyvsp[-2].ttype; ;
-    break;}
-case 175:
-#line 1050 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 176:
-#line 1052 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 177:
-#line 1057 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 178:
-#line 1059 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 179:
-#line 1061 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
-    break;}
-case 180:
-#line 1063 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
-    break;}
-case 181:
-#line 1065 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 187:
-#line 1083 "c-parse.y"
-{ really_start_incremental_init (NULL_TREE);
-                 /* Note that the call to clear_momentary
-                    is in process_init_element.  */
-                 push_momentary (); ;
-    break;}
-case 188:
-#line 1088 "c-parse.y"
-{ yyval.ttype = pop_init_level (0);
-                 if (yyval.ttype == error_mark_node
-                     && ! (yychar == STRING || yychar == CONSTANT))
-                   pop_momentary ();
-                 else
-                   pop_momentary_nofree (); ;
-    break;}
-case 189:
-#line 1096 "c-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 190:
-#line 1102 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids empty initializer braces"); ;
-    break;}
-case 194:
-#line 1116 "c-parse.y"
-{ process_init_element (yyvsp[0].ttype); ;
-    break;}
-case 195:
-#line 1118 "c-parse.y"
-{ push_init_level (0); ;
-    break;}
-case 196:
-#line 1120 "c-parse.y"
-{ process_init_element (pop_init_level (0)); ;
-    break;}
-case 198:
-#line 1126 "c-parse.y"
-{ set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
-    break;}
-case 200:
-#line 1129 "c-parse.y"
-{ set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 202:
-#line 1132 "c-parse.y"
-{ set_init_index (yyvsp[-1].ttype, NULL_TREE); ;
-    break;}
-case 204:
-#line 1135 "c-parse.y"
-{ set_init_label (yyvsp[-1].ttype); ;
-    break;}
-case 206:
-#line 1138 "c-parse.y"
-{ set_init_label (yyvsp[-1].ttype); ;
-    break;}
-case 208:
-#line 1144 "c-parse.y"
-{ push_c_function_context ();
-                 if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); ;
-    break;}
-case 209:
-#line 1153 "c-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 210:
-#line 1161 "c-parse.y"
-{ finish_function (1);
-                 pop_c_function_context (); ;
-    break;}
-case 211:
-#line 1167 "c-parse.y"
-{ push_c_function_context ();
-                 if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); ;
-    break;}
-case 212:
-#line 1176 "c-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 213:
-#line 1184 "c-parse.y"
-{ finish_function (1);
-                 pop_c_function_context (); ;
-    break;}
-case 216:
-#line 1200 "c-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 217:
-#line 1202 "c-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 218:
-#line 1207 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 219:
-#line 1209 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 220:
-#line 1211 "c-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 221:
-#line 1218 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 223:
-#line 1229 "c-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 224:
-#line 1234 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 225:
-#line 1236 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 226:
-#line 1238 "c-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 227:
-#line 1245 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 229:
-#line 1254 "c-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 230:
-#line 1259 "c-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 231:
-#line 1261 "c-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 232:
-#line 1263 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 233:
-#line 1265 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 234:
-#line 1272 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 236:
-#line 1278 "c-parse.y"
-{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
-                 /* Start scope of tag before parsing components.  */
-               ;
-    break;}
-case 237:
-#line 1282 "c-parse.y"
-{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 238:
-#line 1284 "c-parse.y"
-{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
-                                     yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 239:
-#line 1288 "c-parse.y"
-{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 240:
-#line 1290 "c-parse.y"
-{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
-    break;}
-case 241:
-#line 1292 "c-parse.y"
-{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 242:
-#line 1294 "c-parse.y"
-{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
-                                     yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 243:
-#line 1298 "c-parse.y"
-{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 244:
-#line 1300 "c-parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (yyvsp[-1].ttype); ;
-    break;}
-case 245:
-#line 1303 "c-parse.y"
-{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 246:
-#line 1306 "c-parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (NULL_TREE); ;
-    break;}
-case 247:
-#line 1309 "c-parse.y"
-{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 248:
-#line 1312 "c-parse.y"
-{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 252:
-#line 1323 "c-parse.y"
-{ if (pedantic) pedwarn ("comma at end of enumerator list"); ;
-    break;}
-case 253:
-#line 1328 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 254:
-#line 1330 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 pedwarn ("no semicolon at end of struct or union"); ;
-    break;}
-case 255:
-#line 1335 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 256:
-#line 1337 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 257:
-#line 1339 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified"); ;
-    break;}
-case 258:
-#line 1354 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 259:
-#line 1360 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag(yyvsp[0].ttype);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 260:
-#line 1365 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 261:
-#line 1371 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag(yyvsp[0].ttype);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 262:
-#line 1376 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 263:
-#line 1378 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 265:
-#line 1385 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 266:
-#line 1390 "c-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 267:
-#line 1394 "c-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 268:
-#line 1397 "c-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 270:
-#line 1409 "c-parse.y"
-{ if (yyvsp[-2].ttype == error_mark_node)
-                   yyval.ttype = yyvsp[-2].ttype;
-                 else
-                   yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
-    break;}
-case 271:
-#line 1414 "c-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 272:
-#line 1420 "c-parse.y"
-{ yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 273:
-#line 1422 "c-parse.y"
-{ yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 274:
-#line 1427 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 275:
-#line 1429 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 276:
-#line 1434 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 278:
-#line 1440 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 279:
-#line 1442 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 280:
-#line 1447 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 281:
-#line 1449 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 282:
-#line 1454 "c-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 283:
-#line 1457 "c-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 284:
-#line 1459 "c-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 285:
-#line 1461 "c-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 286:
-#line 1463 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 287:
-#line 1465 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 288:
-#line 1467 "c-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 289:
-#line 1469 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 290:
-#line 1471 "c-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
-    break;}
-case 291:
-#line 1482 "c-parse.y"
-{
-                 if (pedantic && yyvsp[0].ends_in_label)
-                   pedwarn ("ANSI C forbids label at end of compound statement");
-               ;
-    break;}
-case 293:
-#line 1491 "c-parse.y"
-{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
-    break;}
-case 294:
-#line 1493 "c-parse.y"
-{ yyval.ends_in_label = 0; ;
-    break;}
-case 298:
-#line 1505 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 pushlevel (0);
-                 clear_last_expr ();
-                 push_momentary ();
-                 expand_start_bindings (0);
-               ;
-    break;}
-case 300:
-#line 1518 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids label declarations"); ;
-    break;}
-case 303:
-#line 1529 "c-parse.y"
-{ tree link;
-                 for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
-                   {
-                     tree label = shadow_label (TREE_VALUE (link));
-                     C_DECLARED_LABEL_FLAG (label) = 1;
-                     declare_nonlocal_label (label);
-                   }
-               ;
-    break;}
-case 304:
-#line 1543 "c-parse.y"
-{;
-    break;}
-case 306:
-#line 1548 "c-parse.y"
-{ yyval.ttype = convert (void_type_node, integer_zero_node); ;
-    break;}
-case 307:
-#line 1550 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), 1, 0);
-                 yyval.ttype = poplevel (1, 1, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 308:
-#line 1558 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 yyval.ttype = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 309:
-#line 1566 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 yyval.ttype = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 312:
-#line 1586 "c-parse.y"
-{ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
-                 yyval.itype = stmt_count;
-                 if_stmt_file = yyvsp[-5].filename;
-                 if_stmt_line = yyvsp[-4].lineno;
-                 position_after_white_space (); ;
-    break;}
-case 313:
-#line 1599 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 expand_start_loop_continue_elsewhere (1);
-                 position_after_white_space (); ;
-    break;}
-case 314:
-#line 1606 "c-parse.y"
-{ expand_loop_continue_here (); ;
-    break;}
-case 315:
-#line 1610 "c-parse.y"
-{ yyval.filename = input_filename; ;
-    break;}
-case 316:
-#line 1614 "c-parse.y"
-{ yyval.lineno = lineno; ;
-    break;}
-case 317:
-#line 1619 "c-parse.y"
-{ ;
-    break;}
-case 318:
-#line 1624 "c-parse.y"
-{ ;
-    break;}
-case 319:
-#line 1629 "c-parse.y"
-{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
-    break;}
-case 320:
-#line 1634 "c-parse.y"
-{ yyval.ends_in_label = 0; ;
-    break;}
-case 321:
-#line 1636 "c-parse.y"
-{ yyval.ends_in_label = 1; ;
-    break;}
-case 322:
-#line 1642 "c-parse.y"
-{ stmt_count++; ;
-    break;}
-case 324:
-#line 1645 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-/* It appears that this should not be done--that a non-lvalue array
-   shouldn't get an error if the value isn't used.
-   Section 3.2.2.1 says that an array lvalue gets converted to a pointer
-   if it appears as a top-level expression,
-   but says nothing about non-lvalue arrays.  */
-#if 0
-                 /* Call default_conversion to get an error
-                    on referring to a register array if pedantic.  */
-                 if (TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == ARRAY_TYPE
-                     || TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == FUNCTION_TYPE)
-                   yyvsp[-1].ttype = default_conversion (yyvsp[-1].ttype);
-#endif
-                 iterator_expand (yyvsp[-1].ttype);
-                 clear_momentary (); ;
-    break;}
-case 325:
-#line 1662 "c-parse.y"
-{ expand_start_else ();
-                 yyvsp[-1].itype = stmt_count;
-                 position_after_white_space (); ;
-    break;}
-case 326:
-#line 1666 "c-parse.y"
-{ expand_end_cond ();
-                 if (extra_warnings && stmt_count == yyvsp[-3].itype)
-                   warning ("empty body in an else-statement"); ;
-    break;}
-case 327:
-#line 1670 "c-parse.y"
-{ expand_end_cond ();
-                 /* This warning is here instead of in simple_if, because we
-                    do not want a warning if an empty if is followed by an
-                    else statement.  Increment stmt_count so we don't
-                    give a second error if this is a nested `if'.  */
-                 if (extra_warnings && stmt_count++ == yyvsp[0].itype)
-                   warning_with_file_and_line (if_stmt_file, if_stmt_line,
-                                               "empty body in an if-statement"); ;
-    break;}
-case 328:
-#line 1682 "c-parse.y"
-{ expand_end_cond (); ;
-    break;}
-case 329:
-#line 1684 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
-                 /* The emit_nop used to come before emit_line_note,
-                    but that made the nop seem like part of the preceding line.
-                    And that was confusing when the preceding line was
-                    inside of an if statement and was not really executed.
-                    I think it ought to work to put the nop after the line number.
-                    We will see.  --rms, July 15, 1991.  */
-                 emit_nop (); ;
-    break;}
-case 330:
-#line 1694 "c-parse.y"
-{ /* Don't start the loop till we have succeeded
-                    in parsing the end test.  This is to make sure
-                    that we end every loop we start.  */
-                 expand_start_loop (1);
-                 emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion (yyvsp[-1].ttype));
-                 position_after_white_space (); ;
-    break;}
-case 331:
-#line 1703 "c-parse.y"
-{ expand_end_loop (); ;
-    break;}
-case 332:
-#line 1706 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion (yyvsp[-2].ttype));
-                 expand_end_loop ();
-                 clear_momentary (); ;
-    break;}
-case 333:
-#line 1713 "c-parse.y"
-{ expand_end_loop ();
-                 clear_momentary (); ;
-    break;}
-case 334:
-#line 1717 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 if (yyvsp[-1].ttype) c_expand_expr_stmt (yyvsp[-1].ttype);
-                 /* Next step is to call expand_start_loop_continue_elsewhere,
-                    but wait till after we parse the entire for (...).
-                    Otherwise, invalid input might cause us to call that
-                    fn without calling expand_end_loop.  */
-               ;
-    break;}
-case 335:
-#line 1729 "c-parse.y"
-{ yyvsp[0].lineno = lineno;
-                 yyval.filename = input_filename; ;
-    break;}
-case 336:
-#line 1732 "c-parse.y"
-{ 
-                 /* Start the loop.  Doing this after parsing
-                    all the expressions ensures we will end the loop.  */
-                 expand_start_loop_continue_elsewhere (1);
-                 /* Emit the end-test, with a line number.  */
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-3].lineno);
-                 if (yyvsp[-4].ttype)
-                   expand_exit_loop_if_false (NULL_PTR,
-                                              truthvalue_conversion (yyvsp[-4].ttype));
-                 /* Don't let the tree nodes for $9 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 yyvsp[-3].lineno = lineno;
-                 yyvsp[-2].filename = input_filename;
-                 position_after_white_space (); ;
-    break;}
-case 337:
-#line 1748 "c-parse.y"
-{ /* Emit the increment expression, with a line number.  */
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
-                 expand_loop_continue_here ();
-                 if (yyvsp[-3].ttype)
-                   c_expand_expr_stmt (yyvsp[-3].ttype);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary ();
-                 expand_end_loop (); ;
-    break;}
-case 338:
-#line 1759 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 c_expand_start_case (yyvsp[-1].ttype);
-                 /* Don't let the tree nodes for $3 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 position_after_white_space (); ;
-    break;}
-case 339:
-#line 1767 "c-parse.y"
-{ expand_end_case (yyvsp[-3].ttype);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 340:
-#line 1773 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 if ( ! expand_exit_something ())
-                   error ("break statement not within loop or switch"); ;
-    break;}
-case 341:
-#line 1778 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 if (! expand_continue_loop (NULL_PTR))
-                   error ("continue statement not within a loop"); ;
-    break;}
-case 342:
-#line 1783 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 c_expand_return (NULL_TREE); ;
-    break;}
-case 343:
-#line 1787 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
-                 c_expand_return (yyvsp[-1].ttype); ;
-    break;}
-case 344:
-#line 1791 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
-                 STRIP_NOPS (yyvsp[-2].ttype);
-                 if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
-                     || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
-                   expand_asm (yyvsp[-2].ttype);
-                 else
-                   error ("argument of `asm' is not a constant string"); ;
-    break;}
-case 345:
-#line 1802 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
-                 c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
-                                        yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 346:
-#line 1809 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
-                 c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
-                                        yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 347:
-#line 1817 "c-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
-                 c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
-                                        yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 348:
-#line 1823 "c-parse.y"
-{ tree decl;
-                 stmt_count++;
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
-                 decl = lookup_label (yyvsp[-1].ttype);
-                 if (decl != 0)
-                   {
-                     TREE_USED (decl) = 1;
-                     expand_goto (decl);
-                   }
-               ;
-    break;}
-case 349:
-#line 1834 "c-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids `goto *expr;'");
-                 stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
-    break;}
-case 352:
-#line 1849 "c-parse.y"
-{
-           /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-
-           yyval.itype = 0;
-           if (TREE_CODE (yyvsp[-1].ttype) != VAR_DECL)
-             error ("invalid `for (ITERATOR)' syntax");
-           else if (! ITERATOR_P (yyvsp[-1].ttype))
-             error ("`%s' is not an iterator",
-                    IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
-           else if (ITERATOR_BOUND_P (yyvsp[-1].ttype))
-             error ("`for (%s)' inside expansion of same iterator",
-                    IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
-           else
-             {
-               yyval.itype = 1;
-               iterator_for_loop_start (yyvsp[-1].ttype);
-             }
-         ;
-    break;}
-case 353:
-#line 1870 "c-parse.y"
-{
-           if (yyvsp[-1].itype)
-             iterator_for_loop_end (yyvsp[-3].ttype);
-         ;
-    break;}
-case 354:
-#line 1905 "c-parse.y"
-{ register tree value = check_case_value (yyvsp[-1].ttype);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 stmt_count++;
-
-                 if (value != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 355:
-#line 1930 "c-parse.y"
-{ register tree value1 = check_case_value (yyvsp[-3].ttype);
-                 register tree value2 = check_case_value (yyvsp[-1].ttype);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids case ranges");
-                 stmt_count++;
-
-                 if (value1 != error_mark_node && value2 != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase_range (value1, value2,
-                                                   convert_and_check, label,
-                                                   &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 4)
-                       warning ("empty case range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 356:
-#line 1961 "c-parse.y"
-{
-                 tree duplicate;
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-                 int success = pushcase (NULL_TREE, 0, label, &duplicate);
-                 stmt_count++;
-                 if (success == 1)
-                   error ("default label not within a switch statement");
-                 else if (success == 2)
-                   {
-                     error ("multiple default labels in one switch");
-                     error_with_decl (duplicate, "this is the first default label");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 357:
-#line 1976 "c-parse.y"
-{ tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
-                 stmt_count++;
-                 emit_nop ();
-                 if (label)
-                   expand_label (label);
-                 position_after_white_space (); ;
-    break;}
-case 358:
-#line 1988 "c-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 359:
-#line 1991 "c-parse.y"
-{ emit_line_note (input_filename, lineno); ;
-    break;}
-case 360:
-#line 1996 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 362:
-#line 2003 "c-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 365:
-#line 2010 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 366:
-#line 2015 "c-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 367:
-#line 2020 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
-    break;}
-case 368:
-#line 2022 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
-    break;}
-case 369:
-#line 2028 "c-parse.y"
-{ pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (0); ;
-    break;}
-case 370:
-#line 2032 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); ;
-    break;}
-case 372:
-#line 2040 "c-parse.y"
-{ tree parm;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids forward parameter declarations");
-                 /* Mark the forward decls as such.  */
-                 for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
-                   TREE_ASM_WRITTEN (parm) = 1;
-                 clear_parm_order (); ;
-    break;}
-case 373:
-#line 2048 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 374:
-#line 2050 "c-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
-    break;}
-case 375:
-#line 2056 "c-parse.y"
-{ yyval.ttype = get_parm_info (0); ;
-    break;}
-case 376:
-#line 2058 "c-parse.y"
-{ yyval.ttype = get_parm_info (0);
-                 /* Gcc used to allow this as an extension.  However, it does
-                    not work for all targets, and thus has been disabled.
-                    Also, since func (...) and func () are indistinguishable,
-                    it caused problems with the code in expand_builtin which
-                    tries to verify that BUILT_IN_NEXT_ARG is being used
-                    correctly.  */
-                 error ("ANSI C requires a named argument before `...'");
-               ;
-    break;}
-case 377:
-#line 2068 "c-parse.y"
-{ yyval.ttype = get_parm_info (1); ;
-    break;}
-case 378:
-#line 2070 "c-parse.y"
-{ yyval.ttype = get_parm_info (0); ;
-    break;}
-case 379:
-#line 2075 "c-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 380:
-#line 2077 "c-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 381:
-#line 2084 "c-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 382:
-#line 2093 "c-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype)); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 383:
-#line 2102 "c-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 384:
-#line 2111 "c-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 385:
-#line 2121 "c-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 386:
-#line 2135 "c-parse.y"
-{ pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (1); ;
-    break;}
-case 387:
-#line 2139 "c-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); ;
-    break;}
-case 389:
-#line 2147 "c-parse.y"
-{ tree t;
-                 for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
-                   if (TREE_VALUE (t) == NULL_TREE)
-                     error ("`...' in old-style identifier list");
-                 yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 390:
-#line 2157 "c-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 391:
-#line 2159 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 392:
-#line 2165 "c-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 393:
-#line 2167 "c-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 394:
-#line 2172 "c-parse.y"
-{ yyval.itype = pedantic;
-                 pedantic = 0; ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/local/share/bison.simple"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
-
-  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yyerrlab:   /* here on detecting error */
-
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         int size = 0;
-         char *msg;
-         int x, count;
-
-         count = 0;
-         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-         for (x = (yyn < 0 ? -yyn : 0);
-              x < (sizeof(yytname) / sizeof(char *)); x++)
-           if (yycheck[x + yyn] == x)
-             size += strlen(yytname[x]) + 15, count++;
-         msg = (char *) malloc(size + 15);
-         if (msg != 0)
-           {
-             strcpy(msg, "parse error");
-
-             if (count < 5)
-               {
-                 count = 0;
-                 for (x = (yyn < 0 ? -yyn : 0);
-                      x < (sizeof(yytname) / sizeof(char *)); x++)
-                   if (yycheck[x + yyn] == x)
-                     {
-                       strcat(msg, count == 0 ? ", expecting `" : " or `");
-                       strcat(msg, yytname[x]);
-                       strcat(msg, "'");
-                       count++;
-                     }
-               }
-             yyerror(msg);
-             free(msg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exceeded");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror("parse error");
-    }
-
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-}
-#line 2176 "c-parse.y"
-
diff --git a/gcc/c-parse.h b/gcc/c-parse.h
deleted file mode 100644 (file)
index 21b3d0c..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-typedef union {long itype; tree ttype; enum tree_code code;
-       char *filename; int lineno; int ends_in_label; } YYSTYPE;
-#define        IDENTIFIER      258
-#define        TYPENAME        259
-#define        SCSPEC  260
-#define        TYPESPEC        261
-#define        TYPE_QUAL       262
-#define        CONSTANT        263
-#define        STRING  264
-#define        ELLIPSIS        265
-#define        SIZEOF  266
-#define        ENUM    267
-#define        STRUCT  268
-#define        UNION   269
-#define        IF      270
-#define        ELSE    271
-#define        WHILE   272
-#define        DO      273
-#define        FOR     274
-#define        SWITCH  275
-#define        CASE    276
-#define        DEFAULT 277
-#define        BREAK   278
-#define        CONTINUE        279
-#define        RETURN  280
-#define        GOTO    281
-#define        ASM_KEYWORD     282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        ATTRIBUTE       285
-#define        EXTENSION       286
-#define        LABEL   287
-#define        REALPART        288
-#define        IMAGPART        289
-#define        ASSIGN  290
-#define        OROR    291
-#define        ANDAND  292
-#define        EQCOMPARE       293
-#define        ARITHCOMPARE    294
-#define        LSHIFT  295
-#define        RSHIFT  296
-#define        UNARY   297
-#define        PLUSPLUS        298
-#define        MINUSMINUS      299
-#define        HYPERUNARY      300
-#define        POINTSAT        301
-#define        INTERFACE       302
-#define        IMPLEMENTATION  303
-#define        END     304
-#define        SELECTOR        305
-#define        DEFS    306
-#define        ENCODE  307
-#define        CLASSNAME       308
-#define        PUBLIC  309
-#define        PRIVATE 310
-#define        PROTECTED       311
-#define        PROTOCOL        312
-#define        OBJECTNAME      313
-#define        CLASS   314
-#define        ALIAS   315
-#define        OBJC_STRING     316
-
-
-extern YYSTYPE yylval;
diff --git a/gcc/c-parse.y b/gcc/c-parse.y
deleted file mode 100644 (file)
index fd2b0f9..0000000
+++ /dev/null
@@ -1,2176 +0,0 @@
-/*WARNING: This file is automatically generated!*/
-/* YACC parser for C syntax and for Objective C.  -*-c-*-
-   Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines the grammar of C and that of Objective C.
-   ifobjc ... end ifobjc  conditionals contain code for Objective C only.
-   ifc ... end ifc  conditionals contain code for C only.
-   Sed commands in Makefile.in are used to convert this file into
-   c-parse.y and into objc-parse.y.  */
-
-/* To whomever it may concern: I have heard that such a thing was once
-   written by AT&T, but I have never seen it.  */
-
-%expect 46
-
-/* These are the 23 conflicts you should get in parse.output;
-   the state numbers may vary if minor changes in the grammar are made.
-
-State 42 contains 1 shift/reduce conflict.  (Two ways to parse ATTRIBUTE.)
-State 44 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 103 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 110 contains 1 shift/reduce conflict.  (Two ways to parse ATTRIBUTE.)
-State 111 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 115 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 132 contains 1 shift/reduce conflict.  (See comment at component_decl.)
-State 180 contains 1 shift/reduce conflict.  (Two ways to parse ATTRIBUTE.)
-State 194 contains 2 shift/reduce conflict.  (Four ways to parse this.)
-State 202 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 214 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 220 contains 1 shift/reduce conflict.  (Two ways to recover from error.)
-State 304 contains 2 shift/reduce conflicts.  (Four ways to parse this.)
-State 335 contains 2 shift/reduce conflicts.  (Four ways to parse this.)
-State 347 contains 1 shift/reduce conflict.  (Two ways to parse ATTRIBUTES.)
-State 352 contains 1 shift/reduce conflict.  (Two ways to parse ATTRIBUTES.)
-State 383 contains 2 shift/reduce conflicts.  (Four ways to parse this.)
-State 434 contains 2 shift/reduce conflicts.  (Four ways to parse this.)  */
-
-
-%{
-#include <stdio.h>
-#include <errno.h>
-#include <setjmp.h>
-
-#include "config.h"
-#include "tree.h"
-#include "input.h"
-#include "c-lex.h"
-#include "c-tree.h"
-#include "flags.h"
-
-#ifdef MULTIBYTE_CHARS
-#include <stdlib.h>
-#include <locale.h>
-#endif
-
-
-/* Since parsers are distinct for each language, put the language string
-   definition here.  */
-char *language_string = "GNU C";
-
-#ifndef errno
-extern int errno;
-#endif
-
-void yyerror ();
-
-/* Like YYERROR but do call yyerror.  */
-#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-%}
-
-%start program
-
-%union {long itype; tree ttype; enum tree_code code;
-       char *filename; int lineno; int ends_in_label; }
-
-/* All identifiers that are not reserved words
-   and are not declared typedefs in the current block */
-%token IDENTIFIER
-
-/* All identifiers that are declared typedefs in the current block.
-   In some contexts, they are treated just like IDENTIFIER,
-   but they can also serve as typespecs in declarations.  */
-%token TYPENAME
-
-/* Reserved words that specify storage class.
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token SCSPEC
-
-/* Reserved words that specify type.
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token TYPESPEC
-
-/* Reserved words that qualify type: "const" or "volatile".
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token TYPE_QUAL
-
-/* Character or numeric constants.
-   yylval is the node for the constant.  */
-%token CONSTANT
-
-/* String constants in raw form.
-   yylval is a STRING_CST node.  */
-%token STRING
-
-/* "...", used for functions with variable arglists.  */
-%token ELLIPSIS
-
-/* the reserved words */
-/* SCO include files test "ASM", so use something else. */
-%token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
-%token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
-%token ATTRIBUTE EXTENSION LABEL
-%token REALPART IMAGPART
-
-/* Add precedence rules to solve dangling else s/r conflict */
-%nonassoc IF
-%nonassoc ELSE
-
-/* Define the operator tokens and their precedences.
-   The value is an integer because, if used, it is the tree code
-   to use in the expression made from the operator.  */
-
-%right <code> ASSIGN '='
-%right <code> '?' ':'
-%left <code> OROR
-%left <code> ANDAND
-%left <code> '|'
-%left <code> '^'
-%left <code> '&'
-%left <code> EQCOMPARE
-%left <code> ARITHCOMPARE
-%left <code> LSHIFT RSHIFT
-%left <code> '+' '-'
-%left <code> '*' '/' '%'
-%right <code> UNARY PLUSPLUS MINUSMINUS
-%left HYPERUNARY
-%left <code> POINTSAT '.' '(' '['
-
-/* The Objective-C keywords.  These are included in C and in
-   Objective C, so that the token codes are the same in both.  */
-%token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE
-%token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS
-
-/* Objective-C string constants in raw form.
-   yylval is an OBJC_STRING_CST node.  */
-%token OBJC_STRING
-
-
-%type <code> unop
-
-%type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist
-%type <ttype> expr_no_commas cast_expr unary_expr primary string STRING
-%type <ttype> typed_declspecs reserved_declspecs
-%type <ttype> typed_typespecs reserved_typespecquals
-%type <ttype> declmods typespec typespecqual_reserved
-%type <ttype> typed_declspecs_no_prefix_attr reserved_declspecs_no_prefix_attr
-%type <ttype> declmods_no_prefix_attr
-%type <ttype> SCSPEC TYPESPEC TYPE_QUAL nonempty_type_quals maybe_type_qual
-%type <ttype> initdecls notype_initdecls initdcl notype_initdcl
-%type <ttype> init maybeasm
-%type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
-%type <ttype> maybe_attribute attributes attribute attribute_list attrib
-%type <ttype> any_word
-
-%type <ttype> compstmt
-
-%type <ttype> declarator
-%type <ttype> notype_declarator after_type_declarator
-%type <ttype> parm_declarator
-
-%type <ttype> structsp component_decl_list component_decl_list2
-%type <ttype> component_decl components component_declarator
-%type <ttype> enumlist enumerator
-%type <ttype> typename absdcl absdcl1 type_quals
-%type <ttype> xexpr parms parm identifiers
-
-%type <ttype> parmlist parmlist_1 parmlist_2
-%type <ttype> parmlist_or_identifiers parmlist_or_identifiers_1
-%type <ttype> identifiers_or_typenames
-
-%type <itype> setspecs
-
-%type <ends_in_label> lineno_stmt_or_label lineno_stmt_or_labels stmt_or_label
-
-%type <filename> save_filename
-%type <lineno> save_lineno
-\f
-\f
-%{
-/* Number of statements (loosely speaking) seen so far.  */
-static int stmt_count;
-
-/* Input file and line number of the end of the body of last simple_if;
-   used by the stmt-rule immediately after simple_if returns.  */
-static char *if_stmt_file;
-static int if_stmt_line;
-
-/* List of types and structure classes of the current declaration.  */
-static tree current_declspecs = NULL_TREE;
-static tree prefix_attributes = NULL_TREE;
-
-/* Stack of saved values of current_declspecs and prefix_attributes.  */
-static tree declspec_stack;
-
-/* 1 if we explained undeclared var errors.  */
-static int undeclared_variable_notice;
-
-
-/* Tell yyparse how to print a token's value, if yydebug is set.  */
-
-#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
-%}
-\f
-%%
-program: /* empty */
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids an empty source file");
-                 finish_file ();
-               }
-       | extdefs
-               {
-                 /* In case there were missing closebraces,
-                    get us back to the global binding level.  */
-                 while (! global_bindings_p ())
-                   poplevel (0, 0, 0);
-                 finish_file ();
-               }
-       ;
-
-/* the reason for the strange actions in this rule
- is so that notype_initdecls when reached via datadef
- can find a valid list of type and sc specs in $0. */
-
-extdefs:
-       {$<ttype>$ = NULL_TREE; } extdef
-       | extdefs {$<ttype>$ = NULL_TREE; } extdef
-       ;
-
-extdef:
-       fndef
-       | datadef
-       | ASM_KEYWORD '(' expr ')' ';'
-               { STRIP_NOPS ($3);
-                 if ((TREE_CODE ($3) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
-                     || TREE_CODE ($3) == STRING_CST)
-                   assemble_asm ($3);
-                 else
-                   error ("argument of `asm' is not a constant string"); }
-       | extension extdef
-               { pedantic = $<itype>1; }
-       ;
-
-datadef:
-         setspecs notype_initdecls ';'
-               { if (pedantic)
-                   error ("ANSI C forbids data definition with no type or storage class");
-                 else if (!flag_traditional)
-                   warning ("data definition has no type or storage class"); 
-
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-        | declmods setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-        | declmods ';'
-         { pedwarn ("empty declaration"); }
-       | typed_declspecs ';'
-         { shadow_tag ($1); }
-       | error ';'
-       | error '}'
-       | ';'
-               { if (pedantic)
-                   pedwarn ("ANSI C does not allow extra `;' outside of a function"); }
-       ;
-\f
-fndef:
-         typed_declspecs setspecs declarator
-               { if (! start_function (current_declspecs, $3,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator
-               { if (! start_function (current_declspecs, $3,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | setspecs notype_declarator
-               { if (! start_function (NULL_TREE, $2,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-       | setspecs notype_declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-       ;
-
-identifier:
-       IDENTIFIER
-       | TYPENAME
-       ;
-
-unop:     '&'
-               { $$ = ADDR_EXPR; }
-       | '-'
-               { $$ = NEGATE_EXPR; }
-       | '+'
-               { $$ = CONVERT_EXPR; }
-       | PLUSPLUS
-               { $$ = PREINCREMENT_EXPR; }
-       | MINUSMINUS
-               { $$ = PREDECREMENT_EXPR; }
-       | '~'
-               { $$ = BIT_NOT_EXPR; }
-       | '!'
-               { $$ = TRUTH_NOT_EXPR; }
-       ;
-
-expr:  nonnull_exprlist
-               { $$ = build_compound_expr ($1); }
-       ;
-
-exprlist:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | nonnull_exprlist
-       ;
-
-nonnull_exprlist:
-       expr_no_commas
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | nonnull_exprlist ',' expr_no_commas
-               { chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-unary_expr:
-       primary
-       | '*' cast_expr   %prec UNARY
-               { $$ = build_indirect_ref ($2, "unary *"); }
-       /* __extension__ turns off -pedantic for following primary.  */
-       | extension cast_expr     %prec UNARY
-               { $$ = $2;
-                 pedantic = $<itype>1; }
-       | unop cast_expr  %prec UNARY
-               { $$ = build_unary_op ($1, $2, 0);
-                 overflow_warning ($$); }
-       /* Refer to the address of a label as a pointer.  */
-       | ANDAND identifier
-               { tree label = lookup_label ($2);
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids `&&'");
-                 if (label == 0)
-                   $$ = null_pointer_node;
-                 else
-                   {
-                     TREE_USED (label) = 1;
-                     $$ = build1 (ADDR_EXPR, ptr_type_node, label);
-                     TREE_CONSTANT ($$) = 1;
-                   }
-               }
-/* This seems to be impossible on some machines, so let's turn it off.
-   You can use __builtin_next_arg to find the anonymous stack args.
-       | '&' ELLIPSIS
-               { tree types = TYPE_ARG_TYPES (TREE_TYPE (current_function_decl));
-                 $$ = error_mark_node;
-                 if (TREE_VALUE (tree_last (types)) == void_type_node)
-                   error ("`&...' used in function with fixed number of arguments");
-                 else
-                   {
-                     if (pedantic)
-                       pedwarn ("ANSI C forbids `&...'");
-                     $$ = tree_last (DECL_ARGUMENTS (current_function_decl));
-                     $$ = build_unary_op (ADDR_EXPR, $$, 0);
-                   } }
-*/
-       | sizeof unary_expr  %prec UNARY
-               { skip_evaluation--;
-                 if (TREE_CODE ($2) == COMPONENT_REF
-                     && DECL_BIT_FIELD (TREE_OPERAND ($2, 1)))
-                   error ("`sizeof' applied to a bit-field");
-                 $$ = c_sizeof (TREE_TYPE ($2)); }
-       | sizeof '(' typename ')'  %prec HYPERUNARY
-               { skip_evaluation--;
-                 $$ = c_sizeof (groktypename ($3)); }
-       | alignof unary_expr  %prec UNARY
-               { skip_evaluation--;
-                 $$ = c_alignof_expr ($2); }
-       | alignof '(' typename ')'  %prec HYPERUNARY
-               { skip_evaluation--;
-                 $$ = c_alignof (groktypename ($3)); }
-       | REALPART cast_expr %prec UNARY
-               { $$ = build_unary_op (REALPART_EXPR, $2, 0); }
-       | IMAGPART cast_expr %prec UNARY
-               { $$ = build_unary_op (IMAGPART_EXPR, $2, 0); }
-       ;
-
-sizeof:
-       SIZEOF { skip_evaluation++; }
-       ;
-
-alignof:
-       ALIGNOF { skip_evaluation++; }
-       ;
-
-cast_expr:
-       unary_expr
-       | '(' typename ')' cast_expr  %prec UNARY
-               { tree type = groktypename ($2);
-                 $$ = build_c_cast (type, $4); }
-       | '(' typename ')' '{' 
-               { start_init (NULL_TREE, NULL, 0);
-                 $2 = groktypename ($2);
-                 really_start_incremental_init ($2); }
-         initlist_maybe_comma '}'  %prec UNARY
-               { char *name;
-                 tree result = pop_init_level (0);
-                 tree type = $2;
-                 finish_init ();
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids constructor expressions");
-                 if (TYPE_NAME (type) != 0)
-                   {
-                     if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-                       name = IDENTIFIER_POINTER (TYPE_NAME (type));
-                     else
-                       name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
-                   }
-                 else
-                   name = "";
-                 $$ = result;
-                 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
-                   {
-                     int failure = complete_array_type (type, $$, 1);
-                     if (failure)
-                       abort ();
-                   }
-               }
-       ;
-
-expr_no_commas:
-         cast_expr
-       | expr_no_commas '+' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '-' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '*' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '/' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '%' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas LSHIFT expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas RSHIFT expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas ARITHCOMPARE expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas EQCOMPARE expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '&' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '|' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '^' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas ANDAND
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_false_node; }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_false_node;
-                 $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
-       | expr_no_commas OROR
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_true_node; }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
-       | expr_no_commas '?'
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_false_node; }
-          expr ':'
-               { skip_evaluation += (($1 == boolean_true_node)
-                                     - ($1 == boolean_false_node)); }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = build_conditional_expr ($1, $4, $7); }
-       | expr_no_commas '?'
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
-                 /* Make sure first operand is calculated only once.  */
-                 $<ttype>2 = save_expr ($1);
-                 $1 = truthvalue_conversion (default_conversion ($<ttype>2));
-                 skip_evaluation += $1 == boolean_true_node; }
-         ':' expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = build_conditional_expr ($1, $<ttype>2, $5); }
-       | expr_no_commas '=' expr_no_commas
-               { $$ = build_modify_expr ($1, NOP_EXPR, $3);
-                 C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); }
-       | expr_no_commas ASSIGN expr_no_commas
-               { $$ = build_modify_expr ($1, $2, $3);
-                 /* This inhibits warnings in truthvalue_conversion.  */
-                 C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); }
-       ;
-
-primary:
-       IDENTIFIER
-               {
-                 $$ = lastiddecl;
-                 if (!$$ || $$ == error_mark_node)
-                   {
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                           {
-                             /* Ordinary implicit function declaration.  */
-                             $$ = implicitly_declare ($1);
-                             assemble_external ($$);
-                             TREE_USED ($$) = 1;
-                           }
-                       }
-                     else if (current_function_decl == 0)
-                       {
-                         error ("`%s' undeclared here (not in a function)",
-                                IDENTIFIER_POINTER ($1));
-                         $$ = error_mark_node;
-                       }
-                     else
-                       {
-                           {
-                             if (IDENTIFIER_GLOBAL_VALUE ($1) != error_mark_node
-                                 || IDENTIFIER_ERROR_LOCUS ($1) != current_function_decl)
-                               {
-                                 error ("`%s' undeclared (first use this function)",
-                                        IDENTIFIER_POINTER ($1));
-
-                                 if (! undeclared_variable_notice)
-                                   {
-                                     error ("(Each undeclared identifier is reported only once");
-                                     error ("for each function it appears in.)");
-                                     undeclared_variable_notice = 1;
-                                   }
-                               }
-                             $$ = error_mark_node;
-                             /* Prevent repeated error messages.  */
-                             IDENTIFIER_GLOBAL_VALUE ($1) = error_mark_node;
-                             IDENTIFIER_ERROR_LOCUS ($1) = current_function_decl;
-                           }
-                       }
-                   }
-                 else if (TREE_TYPE ($$) == error_mark_node)
-                   $$ = error_mark_node;
-                 else if (C_DECL_ANTICIPATED ($$))
-                   {
-                     /* The first time we see a build-in function used,
-                        if it has not been declared.  */
-                     C_DECL_ANTICIPATED ($$) = 0;
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         /* Omit the implicit declaration we
-                            would ordinarily do, so we don't lose
-                            the actual built in type.
-                            But print a diagnostic for the mismatch.  */
-                           if (TREE_CODE ($$) != FUNCTION_DECL)
-                             error ("`%s' implicitly declared as function",
-                                    IDENTIFIER_POINTER (DECL_NAME ($$)));
-                         else if ((TYPE_MODE (TREE_TYPE (TREE_TYPE ($$)))
-                                   != TYPE_MODE (integer_type_node))
-                                  && (TREE_TYPE (TREE_TYPE ($$))
-                                      != void_type_node))
-                           pedwarn ("type mismatch in implicit declaration for built-in function `%s'",
-                                    IDENTIFIER_POINTER (DECL_NAME ($$)));
-                         /* If it really returns void, change that to int.  */
-                         if (TREE_TYPE (TREE_TYPE ($$)) == void_type_node)
-                           TREE_TYPE ($$)
-                             = build_function_type (integer_type_node,
-                                                    TYPE_ARG_TYPES (TREE_TYPE ($$)));
-                       }
-                     else
-                       pedwarn ("built-in function `%s' used without declaration",
-                                IDENTIFIER_POINTER (DECL_NAME ($$)));
-
-                     /* Do what we would ordinarily do when a fn is used.  */
-                     assemble_external ($$);
-                     TREE_USED ($$) = 1;
-                   }
-                 else
-                   {
-                     assemble_external ($$);
-                     TREE_USED ($$) = 1;
-                   }
-
-                 if (TREE_CODE ($$) == CONST_DECL)
-                   {
-                     $$ = DECL_INITIAL ($$);
-                     /* This is to prevent an enum whose value is 0
-                        from being considered a null pointer constant.  */
-                     $$ = build1 (NOP_EXPR, TREE_TYPE ($$), $$);
-                     TREE_CONSTANT ($$) = 1;
-                   }
-               }
-       | CONSTANT
-       | string
-               { $$ = combine_strings ($1); }
-       | '(' expr ')'
-               { char class = TREE_CODE_CLASS (TREE_CODE ($2));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                   C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK);
-                 $$ = $2; }
-       | '(' error ')'
-               { $$ = error_mark_node; }
-       | '('
-               { if (current_function_decl == 0)
-                   {
-                     error ("braced-group within expression allowed only inside a function");
-                     YYERROR;
-                   }
-                 /* We must force a BLOCK for this level
-                    so that, if it is not expanded later,
-                    there is a way to turn off the entire subtree of blocks
-                    that are contained in it.  */
-                 keep_next_level ();
-                 push_iterator_stack ();
-                 push_label_level ();
-                 $<ttype>$ = expand_start_stmt_expr (); }
-         compstmt ')'
-               { tree rtl_exp;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids braced-groups within expressions");
-                 pop_iterator_stack ();
-                 pop_label_level ();
-                 rtl_exp = expand_end_stmt_expr ($<ttype>2);
-                 /* The statements have side effects, so the group does.  */
-                 TREE_SIDE_EFFECTS (rtl_exp) = 1;
-
-                 if (TREE_CODE ($3) == BLOCK)
-                   {
-                     /* Make a BIND_EXPR for the BLOCK already made.  */
-                     $$ = build (BIND_EXPR, TREE_TYPE (rtl_exp),
-                                 NULL_TREE, rtl_exp, $3);
-                     /* Remove the block from the tree at this point.
-                        It gets put back at the proper place
-                        when the BIND_EXPR is expanded.  */
-                     delete_block ($3);
-                   }
-                 else
-                   $$ = $3;
-               }
-       | primary '(' exprlist ')'   %prec '.'
-               { $$ = build_function_call ($1, $3); }
-       | primary '[' expr ']'   %prec '.'
-               { $$ = build_array_ref ($1, $3); }
-       | primary '.' identifier
-               {
-                   $$ = build_component_ref ($1, $3);
-               }
-       | primary POINTSAT identifier
-               {
-                  tree expr = build_indirect_ref ($1, "->");
-
-                    $$ = build_component_ref (expr, $3);
-               }
-       | primary PLUSPLUS
-               { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); }
-       | primary MINUSMINUS
-               { $$ = build_unary_op (POSTDECREMENT_EXPR, $1, 0); }
-       ;
-
-/* Produces a STRING_CST with perhaps more STRING_CSTs chained onto it.  */
-string:
-         STRING
-       | string STRING
-               { $$ = chainon ($1, $2); }
-       ;
-
-
-old_style_parm_decls:
-       /* empty */
-       | datadecls
-       | datadecls ELLIPSIS
-               /* ... is used here to indicate a varargs function.  */
-               { c_mark_varargs ();
-                 if (pedantic)
-                   pedwarn ("ANSI C does not permit use of `varargs.h'"); }
-       ;
-
-/* The following are analogous to lineno_decl, decls and decl
-   except that they do not allow nested functions.
-   They are used for old-style parm decls.  */
-lineno_datadecl:
-         save_filename save_lineno datadecl
-               { }
-       ;
-
-datadecls:
-       lineno_datadecl
-       | errstmt
-       | datadecls lineno_datadecl
-       | lineno_datadecl errstmt
-       ;
-
-/* We don't allow prefix attributes here because they cause reduce/reduce
-   conflicts: we can't know whether we're parsing a function decl with
-   attribute suffix, or function defn with attribute prefix on first old
-   style parm.  */
-datadecl:
-       typed_declspecs_no_prefix_attr setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods_no_prefix_attr setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);      
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs_no_prefix_attr ';'
-               { shadow_tag_warned ($1, 1);
-                 pedwarn ("empty declaration"); }
-       | declmods_no_prefix_attr ';'
-               { pedwarn ("empty declaration"); }
-       ;
-
-/* This combination which saves a lineno before a decl
-   is the normal thing to use, rather than decl itself.
-   This is to avoid shift/reduce conflicts in contexts
-   where statement labels are allowed.  */
-lineno_decl:
-         save_filename save_lineno decl
-               { }
-       ;
-
-decls:
-       lineno_decl
-       | errstmt
-       | decls lineno_decl
-       | lineno_decl errstmt
-       ;
-
-/* records the type and storage class specs to use for processing
-   the declarators that follow.
-   Maintains a stack of outer-level values of current_declspecs,
-   for the sake of parm declarations nested in function declarators.  */
-setspecs: /* empty */
-               { $$ = suspend_momentary ();
-                 pending_xref_error ();
-                 declspec_stack = tree_cons (prefix_attributes,
-                                             current_declspecs,
-                                             declspec_stack);
-                 split_specs_attrs ($<ttype>0,
-                                    &current_declspecs, &prefix_attributes); }
-       ;
-
-/* ??? Yuck.  See after_type_declarator.  */
-setattrs: /* empty */
-               { prefix_attributes = chainon (prefix_attributes, $<ttype>0); }
-       ;
-
-decl:
-       typed_declspecs setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs nested_function
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_nested_function
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs ';'
-               { shadow_tag ($1); }
-       | declmods ';'
-               { pedwarn ("empty declaration"); }
-       | extension decl
-               { pedantic = $<itype>1; }
-       ;
-
-/* Declspecs which contain at least one type specifier or typedef name.
-   (Just `const' or `volatile' is not enough.)
-   A typedef'd name following these is taken as a name to be declared.
-   Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
-
-typed_declspecs:
-         typespec reserved_declspecs
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | declmods typespec reserved_declspecs
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_declspecs:  /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_declspecs typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs SCSPEC
-               { if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs attributes
-               { $$ = tree_cons ($2, NULL_TREE, $1); }
-       ;
-
-typed_declspecs_no_prefix_attr:
-         typespec reserved_declspecs_no_prefix_attr
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | declmods_no_prefix_attr typespec reserved_declspecs_no_prefix_attr
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_declspecs_no_prefix_attr:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_declspecs_no_prefix_attr typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs_no_prefix_attr SCSPEC
-               { if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-/* List of just storage classes, type modifiers, and prefix attributes.
-   A declaration can start with just this, but then it cannot be used
-   to redeclare a typedef-name.
-   Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
-
-declmods:
-         declmods_no_prefix_attr
-               { $$ = $1; }
-       | attributes
-               { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); }
-       | declmods declmods_no_prefix_attr
-               { $$ = chainon ($2, $1); }
-       | declmods attributes
-               { $$ = tree_cons ($2, NULL_TREE, $1); }
-       ;
-
-declmods_no_prefix_attr:
-         TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
-                 TREE_STATIC ($$) = 1; }
-       | SCSPEC
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
-       | declmods_no_prefix_attr TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1);
-                 TREE_STATIC ($$) = 1; }
-       | declmods_no_prefix_attr SCSPEC
-               { if (extra_warnings && TREE_STATIC ($1))
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1);
-                 TREE_STATIC ($$) = TREE_STATIC ($1); }
-       ;
-
-
-/* Used instead of declspecs where storage classes are not allowed
-   (that is, for typenames and structure components).
-   Don't accept a typedef-name if anything but a modifier precedes it.  */
-
-typed_typespecs:
-         typespec reserved_typespecquals
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | nonempty_type_quals typespec reserved_typespecquals
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_typespecquals:  /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_typespecquals typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-/* A typespec (but not a type qualifier).
-   Once we have seen one of these in a declaration,
-   if a typedef name appears then it is being redeclared.  */
-
-typespec: TYPESPEC
-       | structsp
-       | TYPENAME
-               { /* For a typedef name, record the meaning, not the name.
-                    In case of `foo foo, bar;'.  */
-                 $$ = lookup_name ($1); }
-       | TYPEOF '(' expr ')'
-               { $$ = TREE_TYPE ($3); }
-       | TYPEOF '(' typename ')'
-               { $$ = groktypename ($3); }
-       ;
-
-/* A typespec that is a reserved word, or a type qualifier.  */
-
-typespecqual_reserved: TYPESPEC
-       | TYPE_QUAL
-       | structsp
-       ;
-
-initdecls:
-       initdcl
-       | initdecls ',' initdcl
-       ;
-
-notype_initdecls:
-       notype_initdcl
-       | notype_initdecls ',' initdcl
-       ;
-
-maybeasm:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | ASM_KEYWORD '(' string ')'
-               { if (TREE_CHAIN ($3)) $3 = combine_strings ($3);
-                 $$ = $3;
-               }
-       ;
-
-initdcl:
-         declarator maybeasm maybe_attribute '='
-               { $<ttype>$ = start_decl ($1, current_declspecs, 1,
-                                         $3, prefix_attributes);
-                 start_init ($<ttype>$, $2, global_bindings_p ()); }
-         init
-/* Note how the declaration of the variable is in effect while its init is parsed! */
-               { finish_init ();
-                 finish_decl ($<ttype>5, $6, $2); }
-       | declarator maybeasm maybe_attribute
-               { tree d = start_decl ($1, current_declspecs, 0,
-                                      $3, prefix_attributes);
-                 finish_decl (d, NULL_TREE, $2); 
-                }
-       ;
-
-notype_initdcl:
-         notype_declarator maybeasm maybe_attribute '='
-               { $<ttype>$ = start_decl ($1, current_declspecs, 1,
-                                         $3, prefix_attributes);
-                 start_init ($<ttype>$, $2, global_bindings_p ()); }
-         init
-/* Note how the declaration of the variable is in effect while its init is parsed! */
-               { finish_init ();
-                 decl_attributes ($<ttype>5, $3, prefix_attributes);
-                 finish_decl ($<ttype>5, $6, $2); }
-       | notype_declarator maybeasm maybe_attribute
-               { tree d = start_decl ($1, current_declspecs, 0,
-                                      $3, prefix_attributes);
-                 finish_decl (d, NULL_TREE, $2); }
-       ;
-/* the * rules are dummies to accept the Apollo extended syntax
-   so that the header files compile. */
-maybe_attribute:
-      /* empty */
-               { $$ = NULL_TREE; }
-       | attributes
-               { $$ = $1; }
-       ;
-attributes:
-      attribute
-               { $$ = $1; }
-       | attributes attribute
-               { $$ = chainon ($1, $2); }
-       ;
-
-attribute:
-      ATTRIBUTE '(' '(' attribute_list ')' ')'
-               { $$ = $4; }
-       ;
-
-attribute_list:
-      attrib
-               { $$ = $1; }
-       | attribute_list ',' attrib
-               { $$ = chainon ($1, $3); }
-       ;
-attrib:
-    /* empty */
-               { $$ = NULL_TREE; }
-       | any_word
-               { $$ = build_tree_list ($1, NULL_TREE); }
-       | any_word '(' IDENTIFIER ')'
-               { $$ = build_tree_list ($1, build_tree_list (NULL_TREE, $3)); }
-       | any_word '(' IDENTIFIER ',' nonnull_exprlist ')'
-               { $$ = build_tree_list ($1, tree_cons (NULL_TREE, $3, $5)); }
-       | any_word '(' exprlist ')'
-               { $$ = build_tree_list ($1, $3); }
-       ;
-
-/* This still leaves out most reserved keywords,
-   shouldn't we include them?  */
-
-any_word:
-         identifier
-       | SCSPEC
-       | TYPESPEC
-       | TYPE_QUAL
-       ;
-\f
-/* Initializers.  `init' is the entry point.  */
-
-init:
-       expr_no_commas
-       | '{'
-               { really_start_incremental_init (NULL_TREE);
-                 /* Note that the call to clear_momentary
-                    is in process_init_element.  */
-                 push_momentary (); }
-         initlist_maybe_comma '}'
-               { $$ = pop_init_level (0);
-                 if ($$ == error_mark_node
-                     && ! (yychar == STRING || yychar == CONSTANT))
-                   pop_momentary ();
-                 else
-                   pop_momentary_nofree (); }
-
-       | error
-               { $$ = error_mark_node; }
-       ;
-
-/* `initlist_maybe_comma' is the guts of an initializer in braces.  */
-initlist_maybe_comma:
-         /* empty */
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids empty initializer braces"); }
-       | initlist1 maybecomma
-       ;
-
-initlist1:
-         initelt
-       | initlist1 ',' initelt
-       ;
-
-/* `initelt' is a single element of an initializer.
-   It may use braces.  */
-initelt:
-       expr_no_commas
-               { process_init_element ($1); }
-       | '{' 
-               { push_init_level (0); }
-         initlist_maybe_comma '}'
-               { process_init_element (pop_init_level (0)); }
-       | error
-       /* These are for labeled elements.  The syntax for an array element
-          initializer conflicts with the syntax for an Objective-C message,
-          so don't include these productions in the Objective-C grammar.  */
-       | '[' expr_no_commas ELLIPSIS expr_no_commas ']' '='
-               { set_init_index ($2, $4); }
-         initelt
-       | '[' expr_no_commas ']' '='
-               { set_init_index ($2, NULL_TREE); }
-         initelt
-       | '[' expr_no_commas ']'
-               { set_init_index ($2, NULL_TREE); }
-         initelt
-       | identifier ':'
-               { set_init_label ($1); }
-         initelt
-       | '.' identifier '='
-               { set_init_label ($2); }
-         initelt
-       ;
-\f
-nested_function:
-         declarator
-               { push_c_function_context ();
-                 if (! start_function (current_declspecs, $1,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); }
-          old_style_parm_decls
-               { store_parm_decls (); }
-/* This used to use compstmt_or_error.
-   That caused a bug with input `f(g) int g {}',
-   where the use of YYERROR1 above caused an error
-   which then was handled by compstmt_or_error.
-   There followed a repeated execution of that same rule,
-   which called YYERROR1 again, and so on.  */
-         compstmt
-               { finish_function (1);
-                 pop_c_function_context (); }
-       ;
-
-notype_nested_function:
-         notype_declarator
-               { push_c_function_context ();
-                 if (! start_function (current_declspecs, $1,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-/* This used to use compstmt_or_error.
-   That caused a bug with input `f(g) int g {}',
-   where the use of YYERROR1 above caused an error
-   which then was handled by compstmt_or_error.
-   There followed a repeated execution of that same rule,
-   which called YYERROR1 again, and so on.  */
-         compstmt
-               { finish_function (1);
-                 pop_c_function_context (); }
-       ;
-
-/* Any kind of declarator (thus, all declarators allowed
-   after an explicit typespec).  */
-
-declarator:
-         after_type_declarator
-       | notype_declarator
-       ;
-
-/* A declarator that is allowed only after an explicit typespec.  */
-
-after_type_declarator:
-         '(' after_type_declarator ')'
-               { $$ = $2; }
-       | after_type_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | after_type_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | after_type_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | after_type_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '*' type_quals after_type_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs after_type_declarator
-               { $$ = $3; }
-       | TYPENAME
-       ;
-
-/* Kinds of declarator that can appear in a parameter list
-   in addition to notype_declarator.  This is like after_type_declarator
-   but does not allow a typedef name in parentheses as an identifier
-   (because it would conflict with a function with that typedef as arg).  */
-
-parm_declarator:
-         parm_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | parm_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | parm_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | parm_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '*' type_quals parm_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs parm_declarator
-               { $$ = $3; }
-       | TYPENAME
-       ;
-
-/* A declarator allowed whether or not there has been
-   an explicit typespec.  These cannot redeclare a typedef-name.  */
-
-notype_declarator:
-         notype_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | notype_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | '(' notype_declarator ')'
-               { $$ = $2; }
-       | '*' type_quals notype_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       | notype_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | notype_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs notype_declarator
-               { $$ = $3; }
-       | IDENTIFIER
-       ;
-
-structsp:
-         STRUCT identifier '{'
-               { $$ = start_struct (RECORD_TYPE, $2);
-                 /* Start scope of tag before parsing components.  */
-               }
-         component_decl_list '}' maybe_attribute 
-               { $$ = finish_struct ($<ttype>4, $5, $7); }
-       | STRUCT '{' component_decl_list '}' maybe_attribute
-               { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
-                                     $3, $5);
-               }
-       | STRUCT identifier
-               { $$ = xref_tag (RECORD_TYPE, $2); }
-       | UNION identifier '{'
-               { $$ = start_struct (UNION_TYPE, $2); }
-         component_decl_list '}' maybe_attribute
-               { $$ = finish_struct ($<ttype>4, $5, $7); }
-       | UNION '{' component_decl_list '}' maybe_attribute
-               { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
-                                     $3, $5);
-               }
-       | UNION identifier
-               { $$ = xref_tag (UNION_TYPE, $2); }
-       | ENUM identifier '{'
-               { $<itype>3 = suspend_momentary ();
-                 $$ = start_enum ($2); }
-         enumlist maybecomma_warn '}' maybe_attribute
-               { $$ = finish_enum ($<ttype>4, nreverse ($5), $8);
-                 resume_momentary ($<itype>3); }
-       | ENUM '{'
-               { $<itype>2 = suspend_momentary ();
-                 $$ = start_enum (NULL_TREE); }
-         enumlist maybecomma_warn '}' maybe_attribute
-               { $$ = finish_enum ($<ttype>3, nreverse ($4), $7);
-                 resume_momentary ($<itype>2); }
-       | ENUM identifier
-               { $$ = xref_tag (ENUMERAL_TYPE, $2); }
-       ;
-
-maybecomma:
-         /* empty */
-       | ','
-       ;
-
-maybecomma_warn:
-         /* empty */
-       | ','
-               { if (pedantic) pedwarn ("comma at end of enumerator list"); }
-       ;
-
-component_decl_list:
-         component_decl_list2
-               { $$ = $1; }
-       | component_decl_list2 component_decl
-               { $$ = chainon ($1, $2);
-                 pedwarn ("no semicolon at end of struct or union"); }
-       ;
-
-component_decl_list2:  /* empty */
-               { $$ = NULL_TREE; }
-       | component_decl_list2 component_decl ';'
-               { $$ = chainon ($1, $2); }
-       | component_decl_list2 ';'
-               { if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified"); }
-       ;
-
-/* There is a shift-reduce conflict here, because `components' may
-   start with a `typename'.  It happens that shifting (the default resolution)
-   does the right thing, because it treats the `typename' as part of
-   a `typed_typespecs'.
-
-   It is possible that this same technique would allow the distinction
-   between `notype_initdecls' and `initdecls' to be eliminated.
-   But I am being cautious and not trying it.  */
-
-component_decl:
-         typed_typespecs setspecs components
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_typespecs
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag($1);
-                 $$ = NULL_TREE; }
-       | nonempty_type_quals setspecs components
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | nonempty_type_quals
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag($1);
-                 $$ = NULL_TREE; }
-       | error
-               { $$ = NULL_TREE; }
-       | extension component_decl
-               { $$ = $2;
-                 pedantic = $<itype>1; }
-       ;
-
-components:
-         component_declarator
-       | components ',' component_declarator
-               { $$ = chainon ($1, $3); }
-       ;
-
-component_declarator:
-         save_filename save_lineno declarator maybe_attribute
-               { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE);
-                 decl_attributes ($$, $4, prefix_attributes); }
-       | save_filename save_lineno
-         declarator ':' expr_no_commas maybe_attribute
-               { $$ = grokfield ($1, $2, $3, current_declspecs, $5);
-                 decl_attributes ($$, $6, prefix_attributes); }
-       | save_filename save_lineno ':' expr_no_commas maybe_attribute
-               { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4);
-                 decl_attributes ($$, $5, prefix_attributes); }
-       ;
-
-/* We chain the enumerators in reverse order.
-   They are put in forward order where enumlist is used.
-   (The order used to be significant, but no longer is so.
-   However, we still maintain the order, just to be clean.)  */
-
-enumlist:
-         enumerator
-       | enumlist ',' enumerator
-               { if ($1 == error_mark_node)
-                   $$ = $1;
-                 else
-                   $$ = chainon ($3, $1); }
-       | error
-               { $$ = error_mark_node; }
-       ;
-
-
-enumerator:
-         identifier
-               { $$ = build_enumerator ($1, NULL_TREE); }
-       | identifier '=' expr_no_commas
-               { $$ = build_enumerator ($1, $3); }
-       ;
-
-typename:
-       typed_typespecs absdcl
-               { $$ = build_tree_list ($1, $2); }
-       | nonempty_type_quals absdcl
-               { $$ = build_tree_list ($1, $2); }
-       ;
-
-absdcl:   /* an absolute declarator */
-       /* empty */
-               { $$ = NULL_TREE; }
-       | absdcl1
-       ;
-
-nonempty_type_quals:
-         TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
-       | nonempty_type_quals TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-type_quals:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | type_quals TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-absdcl1:  /* a nonempty absolute declarator */
-         '(' absdcl1 ')'
-               { $$ = $2; }
-         /* `(typedef)1' is `int'.  */
-       | '*' type_quals absdcl1  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       | '*' type_quals  %prec UNARY
-               { $$ = make_pointer_declarator ($2, NULL_TREE); }
-       | absdcl1 '(' parmlist  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-       | absdcl1 '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | absdcl1 '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '(' parmlist  %prec '.'
-               { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); }
-       | '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, NULL_TREE, $2); }
-       | '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); }
-       /* ??? It appears we have to support attributes here, however
-          using prefix_attributes is wrong.  */
-       ;
-
-/* at least one statement, the first of which parses without error.  */
-/* stmts is used only after decls, so an invalid first statement
-   is actually regarded as an invalid decl and part of the decls.  */
-
-stmts:
-       lineno_stmt_or_labels
-               {
-                 if (pedantic && $1)
-                   pedwarn ("ANSI C forbids label at end of compound statement");
-               }
-       ;
-
-lineno_stmt_or_labels:
-         lineno_stmt_or_label
-       | lineno_stmt_or_labels lineno_stmt_or_label
-               { $$ = $2; }
-       | lineno_stmt_or_labels errstmt
-               { $$ = 0; }
-       ;
-
-xstmts:
-       /* empty */
-       | stmts
-       ;
-
-errstmt:  error ';'
-       ;
-
-pushlevel:  /* empty */
-               { emit_line_note (input_filename, lineno);
-                 pushlevel (0);
-                 clear_last_expr ();
-                 push_momentary ();
-                 expand_start_bindings (0);
-               }
-       ;
-
-/* Read zero or more forward-declarations for labels
-   that nested functions can jump to.  */
-maybe_label_decls:
-         /* empty */
-       | label_decls
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids label declarations"); }
-       ;
-
-label_decls:
-         label_decl
-       | label_decls label_decl
-       ;
-
-label_decl:
-         LABEL identifiers_or_typenames ';'
-               { tree link;
-                 for (link = $2; link; link = TREE_CHAIN (link))
-                   {
-                     tree label = shadow_label (TREE_VALUE (link));
-                     C_DECLARED_LABEL_FLAG (label) = 1;
-                     declare_nonlocal_label (label);
-                   }
-               }
-       ;
-
-/* This is the body of a function definition.
-   It causes syntax errors to ignore to the next openbrace.  */
-compstmt_or_error:
-         compstmt
-               {}
-       | error compstmt
-       ;
-
-compstmt: '{' '}'
-               { $$ = convert (void_type_node, integer_zero_node); }
-       | '{' pushlevel maybe_label_decls decls xstmts '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), 1, 0);
-                 $$ = poplevel (1, 1, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | '{' pushlevel maybe_label_decls error '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 $$ = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | '{' pushlevel maybe_label_decls stmts '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 $$ = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       ;
-
-/* Value is number of statements counted as of the closeparen.  */
-simple_if:
-         if_prefix lineno_labeled_stmt
-/* Make sure expand_end_cond is run once
-   for each call to expand_start_cond.
-   Otherwise a crash is likely.  */
-       | if_prefix error
-       ;
-
-if_prefix:
-         IF '(' expr ')'
-               { emit_line_note ($<filename>-1, $<lineno>0);
-                 expand_start_cond (truthvalue_conversion ($3), 0);
-                 $<itype>$ = stmt_count;
-                 if_stmt_file = $<filename>-1;
-                 if_stmt_line = $<lineno>0;
-                 position_after_white_space (); }
-       ;
-
-/* This is a subroutine of stmt.
-   It is used twice, once for valid DO statements
-   and once for catching errors in parsing the end test.  */
-do_stmt_start:
-         DO
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 expand_start_loop_continue_elsewhere (1);
-                 position_after_white_space (); }
-         lineno_labeled_stmt WHILE
-               { expand_loop_continue_here (); }
-       ;
-
-save_filename:
-               { $$ = input_filename; }
-       ;
-
-save_lineno:
-               { $$ = lineno; }
-       ;
-
-lineno_labeled_stmt:
-         save_filename save_lineno stmt
-               { }
-/*     | save_filename save_lineno error
-               { }
-*/
-       | save_filename save_lineno label lineno_labeled_stmt
-               { }
-       ;
-
-lineno_stmt_or_label:
-         save_filename save_lineno stmt_or_label
-               { $$ = $3; }
-       ;
-
-stmt_or_label:
-         stmt
-               { $$ = 0; }
-       | label
-               { $$ = 1; }
-       ;
-
-/* Parse a single real statement, not including any labels.  */
-stmt:
-         compstmt
-               { stmt_count++; }
-        | all_iter_stmt 
-       | expr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-/* It appears that this should not be done--that a non-lvalue array
-   shouldn't get an error if the value isn't used.
-   Section 3.2.2.1 says that an array lvalue gets converted to a pointer
-   if it appears as a top-level expression,
-   but says nothing about non-lvalue arrays.  */
-#if 0
-                 /* Call default_conversion to get an error
-                    on referring to a register array if pedantic.  */
-                 if (TREE_CODE (TREE_TYPE ($1)) == ARRAY_TYPE
-                     || TREE_CODE (TREE_TYPE ($1)) == FUNCTION_TYPE)
-                   $1 = default_conversion ($1);
-#endif
-                 iterator_expand ($1);
-                 clear_momentary (); }
-       | simple_if ELSE
-               { expand_start_else ();
-                 $<itype>1 = stmt_count;
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_cond ();
-                 if (extra_warnings && stmt_count == $<itype>1)
-                   warning ("empty body in an else-statement"); }
-       | simple_if %prec IF
-               { expand_end_cond ();
-                 /* This warning is here instead of in simple_if, because we
-                    do not want a warning if an empty if is followed by an
-                    else statement.  Increment stmt_count so we don't
-                    give a second error if this is a nested `if'.  */
-                 if (extra_warnings && stmt_count++ == $<itype>1)
-                   warning_with_file_and_line (if_stmt_file, if_stmt_line,
-                                               "empty body in an if-statement"); }
-/* Make sure expand_end_cond is run once
-   for each call to expand_start_cond.
-   Otherwise a crash is likely.  */
-       | simple_if ELSE error
-               { expand_end_cond (); }
-       | WHILE
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* The emit_nop used to come before emit_line_note,
-                    but that made the nop seem like part of the preceding line.
-                    And that was confusing when the preceding line was
-                    inside of an if statement and was not really executed.
-                    I think it ought to work to put the nop after the line number.
-                    We will see.  --rms, July 15, 1991.  */
-                 emit_nop (); }
-         '(' expr ')'
-               { /* Don't start the loop till we have succeeded
-                    in parsing the end test.  This is to make sure
-                    that we end every loop we start.  */
-                 expand_start_loop (1);
-                 emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion ($4));
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_loop (); }
-       | do_stmt_start
-         '(' expr ')' ';'
-               { emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion ($3));
-                 expand_end_loop ();
-                 clear_momentary (); }
-/* This rule is needed to make sure we end every loop we start.  */
-       | do_stmt_start error
-               { expand_end_loop ();
-                 clear_momentary (); }
-       | FOR
-         '(' xexpr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 if ($3) c_expand_expr_stmt ($3);
-                 /* Next step is to call expand_start_loop_continue_elsewhere,
-                    but wait till after we parse the entire for (...).
-                    Otherwise, invalid input might cause us to call that
-                    fn without calling expand_end_loop.  */
-               }
-         xexpr ';'
-               /* Can't emit now; wait till after expand_start_loop...  */
-               { $<lineno>7 = lineno;
-                 $<filename>$ = input_filename; }
-         xexpr ')'
-               { 
-                 /* Start the loop.  Doing this after parsing
-                    all the expressions ensures we will end the loop.  */
-                 expand_start_loop_continue_elsewhere (1);
-                 /* Emit the end-test, with a line number.  */
-                 emit_line_note ($<filename>8, $<lineno>7);
-                 if ($6)
-                   expand_exit_loop_if_false (NULL_PTR,
-                                              truthvalue_conversion ($6));
-                 /* Don't let the tree nodes for $9 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 $<lineno>7 = lineno;
-                 $<filename>8 = input_filename;
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { /* Emit the increment expression, with a line number.  */
-                 emit_line_note ($<filename>8, $<lineno>7);
-                 expand_loop_continue_here ();
-                 if ($9)
-                   c_expand_expr_stmt ($9);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary ();
-                 expand_end_loop (); }
-       | SWITCH '(' expr ')'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_start_case ($3);
-                 /* Don't let the tree nodes for $3 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_case ($3);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | BREAK ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 if ( ! expand_exit_something ())
-                   error ("break statement not within loop or switch"); }
-       | CONTINUE ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 if (! expand_continue_loop (NULL_PTR))
-                   error ("continue statement not within a loop"); }
-       | RETURN ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_return (NULL_TREE); }
-       | RETURN expr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_return ($2); }
-       | ASM_KEYWORD maybe_type_qual '(' expr ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 STRIP_NOPS ($4);
-                 if ((TREE_CODE ($4) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND ($4, 0)) == STRING_CST)
-                     || TREE_CODE ($4) == STRING_CST)
-                   expand_asm ($4);
-                 else
-                   error ("argument of `asm' is not a constant string"); }
-       /* This is the case with just output operands.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, NULL_TREE, NULL_TREE,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       /* This is the case with input operands as well.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, $8, NULL_TREE,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       /* This is the case with clobbered registers as well.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
-         asm_operands ':' asm_clobbers ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, $8, $10,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       | GOTO identifier ';'
-               { tree decl;
-                 stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 decl = lookup_label ($2);
-                 if (decl != 0)
-                   {
-                     TREE_USED (decl) = 1;
-                     expand_goto (decl);
-                   }
-               }
-       | GOTO '*' expr ';'
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids `goto *expr;'");
-                 stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 expand_computed_goto (convert (ptr_type_node, $3)); }
-       | ';'
-       ;
-
-all_iter_stmt:
-         all_iter_stmt_simple
-/*     | all_iter_stmt_with_decl */
-       ;
-
-all_iter_stmt_simple:
-         FOR '(' primary ')' 
-         {
-           /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-
-           $<itype>$ = 0;
-           if (TREE_CODE ($3) != VAR_DECL)
-             error ("invalid `for (ITERATOR)' syntax");
-           else if (! ITERATOR_P ($3))
-             error ("`%s' is not an iterator",
-                    IDENTIFIER_POINTER (DECL_NAME ($3)));
-           else if (ITERATOR_BOUND_P ($3))
-             error ("`for (%s)' inside expansion of same iterator",
-                    IDENTIFIER_POINTER (DECL_NAME ($3)));
-           else
-             {
-               $<itype>$ = 1;
-               iterator_for_loop_start ($3);
-             }
-         }
-         lineno_labeled_stmt
-         {
-           if ($<itype>5)
-             iterator_for_loop_end ($3);
-         }
-
-/*  This really should allow any kind of declaration,
-    for generality.  Fix it before turning it back on.
-
-all_iter_stmt_with_decl:
-         FOR '(' ITERATOR pushlevel setspecs iterator_spec ')' 
-         {
-*/         /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-/*
-           iterator_for_loop_start ($6);
-         }
-         lineno_labeled_stmt
-         {
-           iterator_for_loop_end ($6);
-           emit_line_note (input_filename, lineno);
-           expand_end_bindings (getdecls (), 1, 0);
-           $<ttype>$ = poplevel (1, 1, 0);
-           if (yychar == CONSTANT || yychar == STRING)
-             pop_momentary_nofree ();
-           else
-             pop_momentary ();     
-         }
-*/
-
-/* Any kind of label, including jump labels and case labels.
-   ANSI C accepts labels only before statements, but we allow them
-   also at the end of a compound statement.  */
-
-label:   CASE expr_no_commas ':'
-               { register tree value = check_case_value ($2);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 stmt_count++;
-
-                 if (value != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); }
-       | CASE expr_no_commas ELLIPSIS expr_no_commas ':'
-               { register tree value1 = check_case_value ($2);
-                 register tree value2 = check_case_value ($4);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids case ranges");
-                 stmt_count++;
-
-                 if (value1 != error_mark_node && value2 != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase_range (value1, value2,
-                                                   convert_and_check, label,
-                                                   &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 4)
-                       warning ("empty case range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); }
-       | DEFAULT ':'
-               {
-                 tree duplicate;
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-                 int success = pushcase (NULL_TREE, 0, label, &duplicate);
-                 stmt_count++;
-                 if (success == 1)
-                   error ("default label not within a switch statement");
-                 else if (success == 2)
-                   {
-                     error ("multiple default labels in one switch");
-                     error_with_decl (duplicate, "this is the first default label");
-                   }
-                 position_after_white_space (); }
-       | identifier ':'
-               { tree label = define_label (input_filename, lineno, $1);
-                 stmt_count++;
-                 emit_nop ();
-                 if (label)
-                   expand_label (label);
-                 position_after_white_space (); }
-       ;
-
-/* Either a type-qualifier or nothing.  First thing in an `asm' statement.  */
-
-maybe_type_qual:
-       /* empty */
-               { emit_line_note (input_filename, lineno);
-                 $$ = NULL_TREE; }
-       | TYPE_QUAL
-               { emit_line_note (input_filename, lineno); }
-       ;
-
-xexpr:
-       /* empty */
-               { $$ = NULL_TREE; }
-       | expr
-       ;
-
-/* These are the operands other than the first string and colon
-   in  asm ("addextend %2,%1": "=dm" (x), "0" (y), "g" (*x))  */
-asm_operands: /* empty */
-               { $$ = NULL_TREE; }
-       | nonnull_asm_operands
-       ;
-
-nonnull_asm_operands:
-         asm_operand
-       | nonnull_asm_operands ',' asm_operand
-               { $$ = chainon ($1, $3); }
-       ;
-
-asm_operand:
-         STRING '(' expr ')'
-               { $$ = build_tree_list ($1, $3); }
-       ;
-
-asm_clobbers:
-         string
-               { $$ = tree_cons (NULL_TREE, combine_strings ($1), NULL_TREE); }
-       | asm_clobbers ',' string
-               { $$ = tree_cons (NULL_TREE, combine_strings ($3), $1); }
-       ;
-\f
-/* This is what appears inside the parens in a function declarator.
-   Its value is a list of ..._TYPE nodes.  */
-parmlist:
-               { pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (0); }
-         parmlist_1
-               { $$ = $2;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); }
-       ;
-
-parmlist_1:
-         parmlist_2 ')'
-       | parms ';'
-               { tree parm;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids forward parameter declarations");
-                 /* Mark the forward decls as such.  */
-                 for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
-                   TREE_ASM_WRITTEN (parm) = 1;
-                 clear_parm_order (); }
-         parmlist_1
-               { $$ = $4; }
-       | error ')'
-               { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); }
-       ;
-
-/* This is what appears inside the parens in a function declarator.
-   Is value is represented in the format that grokdeclarator expects.  */
-parmlist_2:  /* empty */
-               { $$ = get_parm_info (0); }
-       | ELLIPSIS
-               { $$ = get_parm_info (0);
-                 /* Gcc used to allow this as an extension.  However, it does
-                    not work for all targets, and thus has been disabled.
-                    Also, since func (...) and func () are indistinguishable,
-                    it caused problems with the code in expand_builtin which
-                    tries to verify that BUILT_IN_NEXT_ARG is being used
-                    correctly.  */
-                 error ("ANSI C requires a named argument before `...'");
-               }
-       | parms
-               { $$ = get_parm_info (1); }
-       | parms ',' ELLIPSIS
-               { $$ = get_parm_info (0); }
-       ;
-
-parms:
-       parm
-               { push_parm_decl ($1); }
-       | parms ',' parm
-               { push_parm_decl ($3); }
-       ;
-
-/* A single parameter declaration or parameter type name,
-   as found in a parmlist.  */
-parm:
-         typed_declspecs setspecs parm_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs notype_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4)); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs absdcl maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-
-       | declmods setspecs absdcl maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-       ;
-
-/* This is used in a function definition
-   where either a parmlist or an identifier list is ok.
-   Its value is a list of ..._TYPE nodes or a list of identifiers.  */
-parmlist_or_identifiers:
-               { pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (1); }
-         parmlist_or_identifiers_1
-               { $$ = $2;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); }
-       ;
-
-parmlist_or_identifiers_1:
-         parmlist_1
-       | identifiers ')'
-               { tree t;
-                 for (t = $1; t; t = TREE_CHAIN (t))
-                   if (TREE_VALUE (t) == NULL_TREE)
-                     error ("`...' in old-style identifier list");
-                 $$ = tree_cons (NULL_TREE, NULL_TREE, $1); }
-       ;
-
-/* A nonempty list of identifiers.  */
-identifiers:
-       IDENTIFIER
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | identifiers ',' IDENTIFIER
-               { $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-/* A nonempty list of identifiers, including typenames.  */
-identifiers_or_typenames:
-       identifier
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | identifiers_or_typenames ',' identifier
-               { $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-extension:
-       EXTENSION
-               { $<itype>$ = pedantic;
-                 pedantic = 0; }
-       ;
-\f
-%%
diff --git a/gcc/cexp.c b/gcc/cexp.c
deleted file mode 100644 (file)
index a4f2cc5..0000000
+++ /dev/null
@@ -1,2142 +0,0 @@
-
-/*  A Bison parser, made from cexp.y with Bison version GNU Bison version 1.24
-  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define        INT     258
-#define        CHAR    259
-#define        NAME    260
-#define        ERROR   261
-#define        OR      262
-#define        AND     263
-#define        EQUAL   264
-#define        NOTEQUAL        265
-#define        LEQ     266
-#define        GEQ     267
-#define        LSH     268
-#define        RSH     269
-#define        UNARY   270
-
-#line 27 "cexp.y"
-
-#include "config.h"
-#include <setjmp.h>
-/* #define YYDEBUG 1 */
-
-/* The following symbols should be autoconfigured:
-       HAVE_STDLIB_H
-       STDC_HEADERS
-   In the mean time, we'll get by with approximations based
-   on existing GCC configuration symbols.  */
-
-#ifdef POSIX
-# ifndef HAVE_STDLIB_H
-# define HAVE_STDLIB_H 1
-# endif
-# ifndef STDC_HEADERS
-# define STDC_HEADERS 1
-# endif
-#endif /* defined (POSIX) */
-
-#if STDC_HEADERS
-# include <string.h>
-#endif
-
-#if HAVE_STDLIB_H || defined (MULTIBYTE_CHARS)
-# include <stdlib.h>
-#endif
-
-#ifdef MULTIBYTE_CHARS
-#include <locale.h>
-#endif
-
-#include <stdio.h>
-
-typedef unsigned char U_CHAR;
-
-/* This is used for communicating lists of keywords with cccp.c.  */
-struct arglist {
-  struct arglist *next;
-  U_CHAR *name;
-  int length;
-  int argno;
-};
-
-/* Define a generic NULL if one hasn't already been defined.  */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
-#endif
-
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR) 0)
-#endif
-
-/* Find the largest host integer type and set its size and type.
-   Don't blindly use `long'; on some crazy hosts it is shorter than `int'.  */
-
-#ifndef HOST_BITS_PER_WIDE_INT
-
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
-#endif
-
-#endif
-
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __attribute__(x)
-#endif
-
-#ifndef PROTO
-# if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#  define PROTO(ARGS) ARGS
-# else
-#  define PROTO(ARGS) ()
-# endif
-#endif
-
-#if defined (__STDC__) && defined (HAVE_VPRINTF)
-# include <stdarg.h>
-# define VA_START(va_list, var) va_start (va_list, var)
-# define PRINTF_ALIST(msg) char *msg, ...
-# define PRINTF_DCL(msg)
-# define PRINTF_PROTO(ARGS, m, n) PROTO (ARGS) __attribute__ ((format (__printf__, m, n)))
-#else
-# include <varargs.h>
-# define VA_START(va_list, var) va_start (va_list)
-# define PRINTF_ALIST(msg) msg, va_alist
-# define PRINTF_DCL(msg) char *msg; va_dcl
-# define PRINTF_PROTO(ARGS, m, n) () __attribute__ ((format (__printf__, m, n)))
-# define vfprintf(file, msg, args) \
-    { \
-      char *a0 = va_arg(args, char *); \
-      char *a1 = va_arg(args, char *); \
-      char *a2 = va_arg(args, char *); \
-      char *a3 = va_arg(args, char *); \
-      fprintf (file, msg, a0, a1, a2, a3); \
-    }
-#endif
-
-#define PRINTF_PROTO_1(ARGS) PRINTF_PROTO(ARGS, 1, 2)
-
-HOST_WIDE_INT parse_c_expression PROTO((char *));
-
-static int yylex PROTO((void));
-static void yyerror PROTO((char *)) __attribute__ ((noreturn));
-static HOST_WIDE_INT expression_value;
-
-static jmp_buf parse_return_error;
-
-/* Nonzero means count most punctuation as part of a name.  */
-static int keyword_parsing = 0;
-
-/* Nonzero means do not evaluate this expression.
-   This is a count, since unevaluated expressions can nest.  */
-static int skip_evaluation;
-
-/* some external tables of character types */
-extern unsigned char is_idstart[], is_idchar[], is_space[];
-
-/* Flag for -pedantic.  */
-extern int pedantic;
-
-/* Flag for -traditional.  */
-extern int traditional;
-
-/* Flag for -lang-c89.  */
-extern int c89;
-
-/* Flag for -Wundef.  */
-extern int warn_undef;
-
-#ifndef CHAR_TYPE_SIZE
-#define CHAR_TYPE_SIZE BITS_PER_UNIT
-#endif
-
-#ifndef INT_TYPE_SIZE
-#define INT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_TYPE_SIZE
-#define LONG_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
-#endif
-
-#ifndef MAX_CHAR_TYPE_SIZE
-#define MAX_CHAR_TYPE_SIZE CHAR_TYPE_SIZE
-#endif
-
-#ifndef MAX_INT_TYPE_SIZE
-#define MAX_INT_TYPE_SIZE INT_TYPE_SIZE
-#endif
-
-#ifndef MAX_LONG_TYPE_SIZE
-#define MAX_LONG_TYPE_SIZE LONG_TYPE_SIZE
-#endif
-
-#ifndef MAX_WCHAR_TYPE_SIZE
-#define MAX_WCHAR_TYPE_SIZE WCHAR_TYPE_SIZE
-#endif
-
-#if MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT
-#define MAX_CHAR_TYPE_MASK (~ (~ (HOST_WIDE_INT) 0 << MAX_CHAR_TYPE_SIZE))
-#else
-#define MAX_CHAR_TYPE_MASK (~ (HOST_WIDE_INT) 0)
-#endif
-
-#if MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT
-#define MAX_WCHAR_TYPE_MASK (~ (~ (HOST_WIDE_INT) 0 << MAX_WCHAR_TYPE_SIZE))
-#else
-#define MAX_WCHAR_TYPE_MASK (~ (HOST_WIDE_INT) 0)
-#endif
-
-/* Suppose A1 + B1 = SUM1, using 2's complement arithmetic ignoring overflow.
-   Suppose A, B and SUM have the same respective signs as A1, B1, and SUM1.
-   Suppose SIGNEDP is negative if the result is signed, zero if unsigned.
-   Then this yields nonzero if overflow occurred during the addition.
-   Overflow occurs if A and B have the same sign, but A and SUM differ in sign,
-   and SIGNEDP is negative.
-   Use `^' to test whether signs differ, and `< 0' to isolate the sign.  */
-#define overflow_sum_sign(a, b, sum, signedp) \
-       ((~((a) ^ (b)) & ((a) ^ (sum)) & (signedp)) < 0)
-
-struct constant;
-
-GENERIC_PTR xmalloc PROTO((size_t));
-HOST_WIDE_INT parse_escape PROTO((char **, HOST_WIDE_INT));
-int check_assertion PROTO((U_CHAR *, int, int, struct arglist *));
-struct hashnode *lookup PROTO((U_CHAR *, int, int));
-void error PRINTF_PROTO_1((char *, ...));
-void pedwarn PRINTF_PROTO_1((char *, ...));
-void warning PRINTF_PROTO_1((char *, ...));
-
-static int parse_number PROTO((int));
-static HOST_WIDE_INT left_shift PROTO((struct constant *, unsigned HOST_WIDE_INT));
-static HOST_WIDE_INT right_shift PROTO((struct constant *, unsigned HOST_WIDE_INT));
-static void integer_overflow PROTO((void));
-
-/* `signedp' values */
-#define SIGNED (~0)
-#define UNSIGNED 0
-
-#line 244 "cexp.y"
-typedef union {
-  struct constant {HOST_WIDE_INT value; int signedp;} integer;
-  struct name {U_CHAR *address; int length;} name;
-  struct arglist *keywords;
-} YYSTYPE;
-
-#ifndef YYLTYPE
-typedef
-  struct yyltype
-    {
-      int timestamp;
-      int first_line;
-      int first_column;
-      int last_line;
-      int last_column;
-      char *text;
-   }
-  yyltype;
-
-#define YYLTYPE yyltype
-#endif
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define        YYFINAL         77
-#define        YYFLAG          -32768
-#define        YYNTBASE        34
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 270 ? yytranslate[x] : 43)
-
-static const char 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,    29,     2,    31,     2,    27,    14,     2,    32,
-    33,    25,    23,     9,    24,     2,    26,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     8,     2,    17,
-     2,    18,     7,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,    13,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,    12,     2,    30,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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,    10,    11,    15,    16,    19,    20,    21,    22,    28
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     2,     4,     8,    11,    14,    17,    20,    23,    24,
-    31,    35,    39,    43,    47,    51,    55,    59,    63,    67,
-    71,    75,    79,    83,    87,    91,    95,    99,   100,   105,
-   106,   111,   112,   113,   121,   123,   125,   127,   128,   133
-};
-
-static const short yyrhs[] = {    35,
-     0,    36,     0,    35,     9,    36,     0,    24,    36,     0,
-    29,    36,     0,    23,    36,     0,    30,    36,     0,    31,
-     5,     0,     0,    31,     5,    37,    32,    42,    33,     0,
-    32,    35,    33,     0,    36,    25,    36,     0,    36,    26,
-    36,     0,    36,    27,    36,     0,    36,    23,    36,     0,
-    36,    24,    36,     0,    36,    21,    36,     0,    36,    22,
-    36,     0,    36,    15,    36,     0,    36,    16,    36,     0,
-    36,    19,    36,     0,    36,    20,    36,     0,    36,    17,
-    36,     0,    36,    18,    36,     0,    36,    14,    36,     0,
-    36,    13,    36,     0,    36,    12,    36,     0,     0,    36,
-    11,    38,    36,     0,     0,    36,    10,    39,    36,     0,
-     0,     0,    36,     7,    40,    36,     8,    41,    36,     0,
-     3,     0,     4,     0,     5,     0,     0,    32,    42,    33,
-    42,     0,     5,    42,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-   274,   279,   280,   287,   292,   295,   297,   300,   304,   306,
-   311,   316,   329,   346,   359,   365,   371,   377,   383,   386,
-   389,   396,   403,   410,   417,   420,   423,   426,   429,   432,
-   435,   438,   440,   443,   446,   448,   450,   458,   460,   473
-};
-
-static const char * const yytname[] = {   "$","error","$undefined.","INT","CHAR",
-"NAME","ERROR","'?'","':'","','","OR","AND","'|'","'^'","'&'","EQUAL","NOTEQUAL",
-"'<'","'>'","LEQ","GEQ","LSH","RSH","'+'","'-'","'*'","'/'","'%'","UNARY","'!'",
-"'~'","'#'","'('","')'","start","exp1","exp","@1","@2","@3","@4","@5","keywords",
-""
-};
-#endif
-
-static const short yyr1[] = {     0,
-    34,    35,    35,    36,    36,    36,    36,    36,    37,    36,
-    36,    36,    36,    36,    36,    36,    36,    36,    36,    36,
-    36,    36,    36,    36,    36,    36,    36,    38,    36,    39,
-    36,    40,    41,    36,    36,    36,    36,    42,    42,    42
-};
-
-static const short yyr2[] = {     0,
-     1,     1,     3,     2,     2,     2,     2,     2,     0,     6,
-     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     3,     3,     0,     4,     0,
-     4,     0,     0,     7,     1,     1,     1,     0,     4,     2
-};
-
-static const short yydefact[] = {     0,
-    35,    36,    37,     0,     0,     0,     0,     0,     0,     1,
-     2,     6,     4,     5,     7,     8,     0,     0,    32,    30,
-    28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    11,     3,
-     0,     0,     0,    27,    26,    25,    19,    20,    23,    24,
-    21,    22,    17,    18,    15,    16,    12,    13,    14,    38,
-     0,    31,    29,    38,    38,     0,    33,    40,     0,    10,
-     0,    38,    34,    39,     0,     0,     0
-};
-
-static const short yydefgoto[] = {    75,
-    10,    11,    38,    43,    42,    41,    71,    66
-};
-
-static const short yypact[] = {    12,
--32768,-32768,-32768,    12,    12,    12,    12,     1,    12,     4,
-    79,-32768,-32768,-32768,-32768,   -21,    31,    12,-32768,-32768,
--32768,    12,    12,    12,    12,    12,    12,    12,    12,    12,
-    12,    12,    12,    12,    12,    12,    12,    30,-32768,    79,
-    12,    12,    12,   110,   124,   137,   148,   148,   155,   155,
-   155,   155,   160,   160,   -17,   -17,-32768,-32768,-32768,     2,
-    58,    34,    95,     2,     2,    54,-32768,-32768,    55,-32768,
-    12,     2,    79,-32768,    63,   188,-32768
-};
-
-static const short yypgoto[] = {-32768,
-   180,    -4,-32768,-32768,-32768,-32768,-32768,   -60
-};
-
-
-#define        YYLAST          189
-
-
-static const short yytable[] = {    12,
-    13,    14,    15,    68,    69,    16,    64,    35,    36,    37,
-    -9,    74,    18,    40,     1,     2,     3,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-    57,    58,    59,    65,     4,     5,    61,    62,    63,    18,
-     6,     7,     8,     9,    21,    22,    23,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    60,    76,    39,    19,    67,    73,    20,    21,    22,
-    23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    19,    70,    72,    20,    21,
-    22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    36,    37,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-    36,    37,    23,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    33,    34,    35,    36,    37,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-    37,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-    34,    35,    36,    37,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    36,    37,    31,    32,    33,    34,    35,
-    36,    37,    33,    34,    35,    36,    37,    77,    17
-};
-
-static const short yycheck[] = {     4,
-     5,     6,     7,    64,    65,     5,     5,    25,    26,    27,
-    32,    72,     9,    18,     3,     4,     5,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-    35,    36,    37,    32,    23,    24,    41,    42,    43,     9,
-    29,    30,    31,    32,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    32,     0,    33,     7,     8,    71,    10,    11,    12,
-    13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,     7,    33,    33,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,    24,    25,    26,    27,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    14,    15,    16,
-    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-    27,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    17,    18,    19,    20,    21,    22,
-    23,    24,    25,    26,    27,    21,    22,    23,    24,    25,
-    26,    27,    23,    24,    25,    26,    27,     0,     9
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
-#define YYERROR                goto yyerrlab1
-/* 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);                      \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-#ifndef YYPURE
-#define YYLEX          yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int    yychar;                 /*  the lookahead symbol                */
-YYSTYPE        yylval;                 /*  the semantic value of the           */
-                               /*  lookahead symbol                    */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;                        /*  location data for the lookahead     */
-                               /*  symbol                              */
-#endif
-
-int yynerrs;                   /*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;                   /*  nonzero means print parse trace     */
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
-
-#ifndef        YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-\f
-#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
-#else                          /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (from, to, count)
-     char *from;
-     char *to;
-     int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *from, char *to, int count)
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 192 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#endif
-
-int
-yyparse(YYPARSE_PARAM)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
-
-  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
-  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
-
-  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
-
-  YYSTYPE yyval;               /*  the variable used to return         */
-                               /*  semantic values from the action     */
-                               /*  routines                            */
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  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 - 1;
-  yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
-
-  *++yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-        the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-        but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yyls1, size * sizeof (*yylsp),
-                &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yystacksize);
-#endif
-
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
-#else /* no yyoverflow */
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       {
-         yyerror("parser stack overflow");
-         return 2;
-       }
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
-  goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Reading a token: ");
-#endif
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-       {
-         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise meaning
-            of a token, for further debugging info.  */
-#ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-#endif
-         fprintf (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-/* Do the default action for the current state.  */
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
-yyreduce:
-  yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-              yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-
-  switch (yyn) {
-
-case 1:
-#line 275 "cexp.y"
-{ expression_value = yyvsp[0].integer.value; ;
-    break;}
-case 3:
-#line 281 "cexp.y"
-{ if (pedantic)
-                           pedwarn ("comma operator in operand of `#if'");
-                         yyval.integer = yyvsp[0].integer; ;
-    break;}
-case 4:
-#line 288 "cexp.y"
-{ yyval.integer.value = - yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[0].integer.signedp;
-                         if ((yyval.integer.value & yyvsp[0].integer.value & yyval.integer.signedp) < 0)
-                           integer_overflow (); ;
-    break;}
-case 5:
-#line 293 "cexp.y"
-{ yyval.integer.value = ! yyvsp[0].integer.value;
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 6:
-#line 296 "cexp.y"
-{ yyval.integer = yyvsp[0].integer; ;
-    break;}
-case 7:
-#line 298 "cexp.y"
-{ yyval.integer.value = ~ yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[0].integer.signedp; ;
-    break;}
-case 8:
-#line 301 "cexp.y"
-{ yyval.integer.value = check_assertion (yyvsp[0].name.address, yyvsp[0].name.length,
-                                                     0, NULL_PTR);
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 9:
-#line 305 "cexp.y"
-{ keyword_parsing = 1; ;
-    break;}
-case 10:
-#line 307 "cexp.y"
-{ yyval.integer.value = check_assertion (yyvsp[-4].name.address, yyvsp[-4].name.length,
-                                                     1, yyvsp[-1].keywords);
-                         keyword_parsing = 0;
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 11:
-#line 312 "cexp.y"
-{ yyval.integer = yyvsp[-1].integer; ;
-    break;}
-case 12:
-#line 317 "cexp.y"
-{ yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp;
-                         if (yyval.integer.signedp)
-                           {
-                             yyval.integer.value = yyvsp[-2].integer.value * yyvsp[0].integer.value;
-                             if (yyvsp[-2].integer.value
-                                 && (yyval.integer.value / yyvsp[-2].integer.value != yyvsp[0].integer.value
-                                     || (yyval.integer.value & yyvsp[-2].integer.value & yyvsp[0].integer.value) < 0))
-                               integer_overflow ();
-                           }
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       * yyvsp[0].integer.value); ;
-    break;}
-case 13:
-#line 330 "cexp.y"
-{ if (yyvsp[0].integer.value == 0)
-                           {
-                             if (!skip_evaluation)
-                               error ("division by zero in #if");
-                             yyvsp[0].integer.value = 1;
-                           }
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp;
-                         if (yyval.integer.signedp)
-                           {
-                             yyval.integer.value = yyvsp[-2].integer.value / yyvsp[0].integer.value;
-                             if ((yyval.integer.value & yyvsp[-2].integer.value & yyvsp[0].integer.value) < 0)
-                               integer_overflow ();
-                           }
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       / yyvsp[0].integer.value); ;
-    break;}
-case 14:
-#line 347 "cexp.y"
-{ if (yyvsp[0].integer.value == 0)
-                           {
-                             if (!skip_evaluation)
-                               error ("division by zero in #if");
-                             yyvsp[0].integer.value = 1;
-                           }
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp;
-                         if (yyval.integer.signedp)
-                           yyval.integer.value = yyvsp[-2].integer.value % yyvsp[0].integer.value;
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       % yyvsp[0].integer.value); ;
-    break;}
-case 15:
-#line 360 "cexp.y"
-{ yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp;
-                         if (overflow_sum_sign (yyvsp[-2].integer.value, yyvsp[0].integer.value,
-                                                yyval.integer.value, yyval.integer.signedp))
-                           integer_overflow (); ;
-    break;}
-case 16:
-#line 366 "cexp.y"
-{ yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp;
-                         if (overflow_sum_sign (yyval.integer.value, yyvsp[0].integer.value,
-                                                yyvsp[-2].integer.value, yyval.integer.signedp))
-                           integer_overflow (); ;
-    break;}
-case 17:
-#line 372 "cexp.y"
-{ yyval.integer.signedp = yyvsp[-2].integer.signedp;
-                         if ((yyvsp[0].integer.value & yyvsp[0].integer.signedp) < 0)
-                           yyval.integer.value = right_shift (&yyvsp[-2].integer, -yyvsp[0].integer.value);
-                         else
-                           yyval.integer.value = left_shift (&yyvsp[-2].integer, yyvsp[0].integer.value); ;
-    break;}
-case 18:
-#line 378 "cexp.y"
-{ yyval.integer.signedp = yyvsp[-2].integer.signedp;
-                         if ((yyvsp[0].integer.value & yyvsp[0].integer.signedp) < 0)
-                           yyval.integer.value = left_shift (&yyvsp[-2].integer, -yyvsp[0].integer.value);
-                         else
-                           yyval.integer.value = right_shift (&yyvsp[-2].integer, yyvsp[0].integer.value); ;
-    break;}
-case 19:
-#line 384 "cexp.y"
-{ yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value);
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 20:
-#line 387 "cexp.y"
-{ yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value);
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 21:
-#line 390 "cexp.y"
-{ yyval.integer.signedp = SIGNED;
-                         if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp)
-                           yyval.integer.value = yyvsp[-2].integer.value <= yyvsp[0].integer.value;
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       <= yyvsp[0].integer.value); ;
-    break;}
-case 22:
-#line 397 "cexp.y"
-{ yyval.integer.signedp = SIGNED;
-                         if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp)
-                           yyval.integer.value = yyvsp[-2].integer.value >= yyvsp[0].integer.value;
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       >= yyvsp[0].integer.value); ;
-    break;}
-case 23:
-#line 404 "cexp.y"
-{ yyval.integer.signedp = SIGNED;
-                         if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp)
-                           yyval.integer.value = yyvsp[-2].integer.value < yyvsp[0].integer.value;
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       < yyvsp[0].integer.value); ;
-    break;}
-case 24:
-#line 411 "cexp.y"
-{ yyval.integer.signedp = SIGNED;
-                         if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp)
-                           yyval.integer.value = yyvsp[-2].integer.value > yyvsp[0].integer.value;
-                         else
-                           yyval.integer.value = ((unsigned HOST_WIDE_INT) yyvsp[-2].integer.value
-                                       > yyvsp[0].integer.value); ;
-    break;}
-case 25:
-#line 418 "cexp.y"
-{ yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ;
-    break;}
-case 26:
-#line 421 "cexp.y"
-{ yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ;
-    break;}
-case 27:
-#line 424 "cexp.y"
-{ yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ;
-    break;}
-case 28:
-#line 427 "cexp.y"
-{ skip_evaluation += !yyvsp[-1].integer.value; ;
-    break;}
-case 29:
-#line 429 "cexp.y"
-{ skip_evaluation -= !yyvsp[-3].integer.value;
-                         yyval.integer.value = (yyvsp[-3].integer.value && yyvsp[0].integer.value);
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 30:
-#line 433 "cexp.y"
-{ skip_evaluation += !!yyvsp[-1].integer.value; ;
-    break;}
-case 31:
-#line 435 "cexp.y"
-{ skip_evaluation -= !!yyvsp[-3].integer.value;
-                         yyval.integer.value = (yyvsp[-3].integer.value || yyvsp[0].integer.value);
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 32:
-#line 439 "cexp.y"
-{ skip_evaluation += !yyvsp[-1].integer.value; ;
-    break;}
-case 33:
-#line 441 "cexp.y"
-{ skip_evaluation += !!yyvsp[-4].integer.value - !yyvsp[-4].integer.value; ;
-    break;}
-case 34:
-#line 443 "cexp.y"
-{ skip_evaluation -= !!yyvsp[-6].integer.value;
-                         yyval.integer.value = yyvsp[-6].integer.value ? yyvsp[-3].integer.value : yyvsp[0].integer.value;
-                         yyval.integer.signedp = yyvsp[-3].integer.signedp & yyvsp[0].integer.signedp; ;
-    break;}
-case 35:
-#line 447 "cexp.y"
-{ yyval.integer = yylval.integer; ;
-    break;}
-case 36:
-#line 449 "cexp.y"
-{ yyval.integer = yylval.integer; ;
-    break;}
-case 37:
-#line 451 "cexp.y"
-{ if (warn_undef && !skip_evaluation)
-                           warning ("`%.*s' is not defined",
-                                    yyvsp[0].name.length, yyvsp[0].name.address);
-                         yyval.integer.value = 0;
-                         yyval.integer.signedp = SIGNED; ;
-    break;}
-case 38:
-#line 459 "cexp.y"
-{ yyval.keywords = 0; ;
-    break;}
-case 39:
-#line 461 "cexp.y"
-{ struct arglist *temp;
-                         yyval.keywords = (struct arglist *) xmalloc (sizeof (struct arglist));
-                         yyval.keywords->next = yyvsp[-2].keywords;
-                         yyval.keywords->name = (U_CHAR *) "(";
-                         yyval.keywords->length = 1;
-                         temp = yyval.keywords;
-                         while (temp != 0 && temp->next != 0)
-                           temp = temp->next;
-                         temp->next = (struct arglist *) xmalloc (sizeof (struct arglist));
-                         temp->next->next = yyvsp[0].keywords;
-                         temp->next->name = (U_CHAR *) ")";
-                         temp->next->length = 1; ;
-    break;}
-case 40:
-#line 474 "cexp.y"
-{ yyval.keywords = (struct arglist *) xmalloc (sizeof (struct arglist));
-                         yyval.keywords->name = yyvsp[-1].name.address;
-                         yyval.keywords->length = yyvsp[-1].name.length;
-                         yyval.keywords->next = yyvsp[0].keywords; ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/local/share/bison.simple"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
-
-  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yyerrlab:   /* here on detecting error */
-
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         int size = 0;
-         char *msg;
-         int x, count;
-
-         count = 0;
-         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-         for (x = (yyn < 0 ? -yyn : 0);
-              x < (sizeof(yytname) / sizeof(char *)); x++)
-           if (yycheck[x + yyn] == x)
-             size += strlen(yytname[x]) + 15, count++;
-         msg = (char *) malloc(size + 15);
-         if (msg != 0)
-           {
-             strcpy(msg, "parse error");
-
-             if (count < 5)
-               {
-                 count = 0;
-                 for (x = (yyn < 0 ? -yyn : 0);
-                      x < (sizeof(yytname) / sizeof(char *)); x++)
-                   if (yycheck[x + yyn] == x)
-                     {
-                       strcat(msg, count == 0 ? ", expecting `" : " or `");
-                       strcat(msg, yytname[x]);
-                       strcat(msg, "'");
-                       count++;
-                     }
-               }
-             yyerror(msg);
-             free(msg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exceeded");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror("parse error");
-    }
-
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-}
-#line 479 "cexp.y"
-
-\f
-/* During parsing of a C expression, the pointer to the next character
-   is in this variable.  */
-
-static char *lexptr;
-
-/* Take care of parsing a number (anything that starts with a digit).
-   Set yylval and return the token type; update lexptr.
-   LEN is the number of characters in it.  */
-
-/* maybe needs to actually deal with floating point numbers */
-
-static int
-parse_number (olen)
-     int olen;
-{
-  register char *p = lexptr;
-  register int c;
-  register unsigned HOST_WIDE_INT n = 0, nd, max_over_base;
-  register int base = 10;
-  register int len = olen;
-  register int overflow = 0;
-  register int digit, largest_digit = 0;
-  int spec_long = 0;
-
-  yylval.integer.signedp = SIGNED;
-
-  if (*p == '0') {
-    base = 8;
-    if (len >= 3 && (p[1] == 'x' || p[1] == 'X')) {
-      p += 2;
-      base = 16;
-      len -= 2;
-    }
-  }
-
-  max_over_base = (unsigned HOST_WIDE_INT) -1 / base;
-
-  for (; len > 0; len--) {
-    c = *p++;
-
-    if (c >= '0' && c <= '9')
-      digit = c - '0';
-    else if (base == 16 && c >= 'a' && c <= 'f')
-      digit = c - 'a' + 10;
-    else if (base == 16 && c >= 'A' && c <= 'F')
-      digit = c - 'A' + 10;
-    else {
-      /* `l' means long, and `u' means unsigned.  */
-      while (1) {
-       if (c == 'l' || c == 'L')
-         {
-           if (!pedantic < spec_long)
-             yyerror ("too many `l's in integer constant");
-           spec_long++;
-         }
-       else if (c == 'u' || c == 'U')
-         {
-           if (! yylval.integer.signedp)
-             yyerror ("two `u's in integer constant");
-           yylval.integer.signedp = UNSIGNED;
-         }
-       else {
-         if (c == '.' || c == 'e' || c == 'E' || c == 'p' || c == 'P')
-           yyerror ("Floating point numbers not allowed in #if expressions");
-         else {
-           char *buf = (char *) alloca (p - lexptr + 40);
-           sprintf (buf, "missing white space after number `%.*s'",
-                    (int) (p - lexptr - 1), lexptr);
-           yyerror (buf);
-         }
-       }
-
-       if (--len == 0)
-         break;
-       c = *p++;
-      }
-      /* Don't look for any more digits after the suffixes.  */
-      break;
-    }
-    if (largest_digit < digit)
-      largest_digit = digit;
-    nd = n * base + digit;
-    overflow |= (max_over_base < n) | (nd < n);
-    n = nd;
-  }
-
-  if (base <= largest_digit)
-    pedwarn ("integer constant contains digits beyond the radix");
-
-  if (overflow)
-    pedwarn ("integer constant out of range");
-
-  /* If too big to be signed, consider it unsigned.  */
-  if (((HOST_WIDE_INT) n & yylval.integer.signedp) < 0)
-    {
-      if (base == 10)
-       warning ("integer constant is so large that it is unsigned");
-      yylval.integer.signedp = UNSIGNED;
-    }
-
-  lexptr = p;
-  yylval.integer.value = n;
-  return INT;
-}
-
-struct token {
-  char *operator;
-  int token;
-};
-
-static struct token tokentab2[] = {
-  {"&&", AND},
-  {"||", OR},
-  {"<<", LSH},
-  {">>", RSH},
-  {"==", EQUAL},
-  {"!=", NOTEQUAL},
-  {"<=", LEQ},
-  {">=", GEQ},
-  {"++", ERROR},
-  {"--", ERROR},
-  {NULL, ERROR}
-};
-
-/* Read one token, getting characters through lexptr.  */
-
-static int
-yylex ()
-{
-  register int c;
-  register int namelen;
-  register unsigned char *tokstart;
-  register struct token *toktab;
-  int wide_flag;
-  HOST_WIDE_INT mask;
-
- retry:
-
-  tokstart = (unsigned char *) lexptr;
-  c = *tokstart;
-  /* See if it is a special token of length 2.  */
-  if (! keyword_parsing)
-    for (toktab = tokentab2; toktab->operator != NULL; toktab++)
-      if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) {
-       lexptr += 2;
-       if (toktab->token == ERROR)
-         {
-           char *buf = (char *) alloca (40);
-           sprintf (buf, "`%s' not allowed in operand of `#if'", toktab->operator);
-           yyerror (buf);
-         }
-       return toktab->token;
-      }
-
-  switch (c) {
-  case '\n':
-    return 0;
-    
-  case ' ':
-  case '\t':
-  case '\r':
-    lexptr++;
-    goto retry;
-    
-  case 'L':
-    /* Capital L may start a wide-string or wide-character constant.  */
-    if (lexptr[1] == '\'')
-      {
-       lexptr++;
-       wide_flag = 1;
-       mask = MAX_WCHAR_TYPE_MASK;
-       goto char_constant;
-      }
-    if (lexptr[1] == '"')
-      {
-       lexptr++;
-       wide_flag = 1;
-       mask = MAX_WCHAR_TYPE_MASK;
-       goto string_constant;
-      }
-    break;
-
-  case '\'':
-    wide_flag = 0;
-    mask = MAX_CHAR_TYPE_MASK;
-  char_constant:
-    lexptr++;
-    if (keyword_parsing) {
-      char *start_ptr = lexptr - 1;
-      while (1) {
-       c = *lexptr++;
-       if (c == '\\')
-         c = parse_escape (&lexptr, mask);
-       else if (c == '\'')
-         break;
-      }
-      yylval.name.address = tokstart;
-      yylval.name.length = lexptr - start_ptr;
-      return NAME;
-    }
-
-    /* This code for reading a character constant
-       handles multicharacter constants and wide characters.
-       It is mostly copied from c-lex.c.  */
-    {
-      register HOST_WIDE_INT result = 0;
-      register num_chars = 0;
-      unsigned width = MAX_CHAR_TYPE_SIZE;
-      int max_chars;
-      char *token_buffer;
-
-      if (wide_flag)
-       {
-         width = MAX_WCHAR_TYPE_SIZE;
-#ifdef MULTIBYTE_CHARS
-         max_chars = MB_CUR_MAX;
-#else
-         max_chars = 1;
-#endif
-       }
-      else
-       max_chars = MAX_LONG_TYPE_SIZE / width;
-
-      token_buffer = (char *) alloca (max_chars + 1);
-
-      while (1)
-       {
-         c = *lexptr++;
-
-         if (c == '\'' || c == EOF)
-           break;
-
-         if (c == '\\')
-           {
-             c = parse_escape (&lexptr, mask);
-           }
-
-         num_chars++;
-
-         /* Merge character into result; ignore excess chars.  */
-         if (num_chars <= max_chars)
-           {
-             if (width < HOST_BITS_PER_WIDE_INT)
-               result = (result << width) | c;
-             else
-               result = c;
-             token_buffer[num_chars - 1] = c;
-           }
-       }
-
-      token_buffer[num_chars] = 0;
-
-      if (c != '\'')
-       error ("malformatted character constant");
-      else if (num_chars == 0)
-       error ("empty character constant");
-      else if (num_chars > max_chars)
-       {
-         num_chars = max_chars;
-         error ("character constant too long");
-       }
-      else if (num_chars != 1 && ! traditional)
-       warning ("multi-character character constant");
-
-      /* If char type is signed, sign-extend the constant.  */
-      if (! wide_flag)
-       {
-         int num_bits = num_chars * width;
-
-         if (lookup ((U_CHAR *) "__CHAR_UNSIGNED__",
-                     sizeof ("__CHAR_UNSIGNED__") - 1, -1)
-             || ((result >> (num_bits - 1)) & 1) == 0)
-           yylval.integer.value
-             = result & (~ (unsigned HOST_WIDE_INT) 0
-                         >> (HOST_BITS_PER_WIDE_INT - num_bits));
-         else
-           yylval.integer.value
-             = result | ~(~ (unsigned HOST_WIDE_INT) 0
-                          >> (HOST_BITS_PER_WIDE_INT - num_bits));
-       }
-      else
-       {
-#ifdef MULTIBYTE_CHARS
-         /* Set the initial shift state and convert the next sequence.  */
-         result = 0;
-         /* In all locales L'\0' is zero and mbtowc will return zero,
-            so don't use it.  */
-         if (num_chars > 1
-             || (num_chars == 1 && token_buffer[0] != '\0'))
-           {
-             wchar_t wc;
-             (void) mbtowc (NULL_PTR, NULL_PTR, 0);
-             if (mbtowc (& wc, token_buffer, num_chars) == num_chars)
-               result = wc;
-             else
-               pedwarn ("Ignoring invalid multibyte character");
-           }
-#endif
-         yylval.integer.value = result;
-       }
-    }
-
-    /* This is always a signed type.  */
-    yylval.integer.signedp = SIGNED;
-    
-    return CHAR;
-
-    /* some of these chars are invalid in constant expressions;
-       maybe do something about them later */
-  case '/':
-  case '+':
-  case '-':
-  case '*':
-  case '%':
-  case '|':
-  case '&':
-  case '^':
-  case '~':
-  case '!':
-  case '@':
-  case '<':
-  case '>':
-  case '[':
-  case ']':
-  case '.':
-  case '?':
-  case ':':
-  case '=':
-  case '{':
-  case '}':
-  case ',':
-  case '#':
-    if (keyword_parsing)
-      break;
-  case '(':
-  case ')':
-    lexptr++;
-    return c;
-
-  case '"':
-    mask = MAX_CHAR_TYPE_MASK;
-  string_constant:
-    if (keyword_parsing) {
-      char *start_ptr = lexptr;
-      lexptr++;
-      while (1) {
-       c = *lexptr++;
-       if (c == '\\')
-         c = parse_escape (&lexptr, mask);
-       else if (c == '"')
-         break;
-      }
-      yylval.name.address = tokstart;
-      yylval.name.length = lexptr - start_ptr;
-      return NAME;
-    }
-    yyerror ("string constants not allowed in #if expressions");
-    return ERROR;
-  }
-
-  if (c >= '0' && c <= '9' && !keyword_parsing) {
-    /* It's a number */
-    for (namelen = 1; ; namelen++) {
-      int d = tokstart[namelen];
-      if (! ((is_idchar[d] || d == '.')
-            || ((d == '-' || d == '+')
-                && (c == 'e' || c == 'E'
-                    || ((c == 'p' || c == 'P') && ! c89))
-                && ! traditional)))
-       break;
-      c = d;
-    }
-    return parse_number (namelen);
-  }
-
-  /* It is a name.  See how long it is.  */
-
-  if (keyword_parsing) {
-    for (namelen = 0;; namelen++) {
-      if (is_space[tokstart[namelen]])
-       break;
-      if (tokstart[namelen] == '(' || tokstart[namelen] == ')')
-       break;
-      if (tokstart[namelen] == '"' || tokstart[namelen] == '\'')
-       break;
-    }
-  } else {
-    if (!is_idstart[c]) {
-      yyerror ("Invalid token in expression");
-      return ERROR;
-    }
-
-    for (namelen = 0; is_idchar[tokstart[namelen]]; namelen++)
-      ;
-  }
-  
-  lexptr += namelen;
-  yylval.name.address = tokstart;
-  yylval.name.length = namelen;
-  return NAME;
-}
-
-
-/* Parse a C escape sequence.  STRING_PTR points to a variable
-   containing a pointer to the string to parse.  That pointer
-   is updated past the characters we use.  The value of the
-   escape sequence is returned.
-
-   RESULT_MASK is used to mask out the result;
-   an error is reported if bits are lost thereby.
-
-   A negative value means the sequence \ newline was seen,
-   which is supposed to be equivalent to nothing at all.
-
-   If \ is followed by a null character, we return a negative
-   value and leave the string pointer pointing at the null character.
-
-   If \ is followed by 000, we return 0 and leave the string pointer
-   after the zeros.  A value of 0 does not mean end of string.  */
-
-HOST_WIDE_INT
-parse_escape (string_ptr, result_mask)
-     char **string_ptr;
-     HOST_WIDE_INT result_mask;
-{
-  register int c = *(*string_ptr)++;
-  switch (c)
-    {
-    case 'a':
-      return TARGET_BELL;
-    case 'b':
-      return TARGET_BS;
-    case 'e':
-    case 'E':
-      if (pedantic)
-       pedwarn ("non-ANSI-standard escape sequence, `\\%c'", c);
-      return 033;
-    case 'f':
-      return TARGET_FF;
-    case 'n':
-      return TARGET_NEWLINE;
-    case 'r':
-      return TARGET_CR;
-    case 't':
-      return TARGET_TAB;
-    case 'v':
-      return TARGET_VT;
-    case '\n':
-      return -2;
-    case 0:
-      (*string_ptr)--;
-      return 0;
-      
-    case '0':
-    case '1':
-    case '2':
-    case '3':
-    case '4':
-    case '5':
-    case '6':
-    case '7':
-      {
-       register HOST_WIDE_INT i = c - '0';
-       register int count = 0;
-       while (++count < 3)
-         {
-           c = *(*string_ptr)++;
-           if (c >= '0' && c <= '7')
-             i = (i << 3) + c - '0';
-           else
-             {
-               (*string_ptr)--;
-               break;
-             }
-         }
-       if (i != (i & result_mask))
-         {
-           i &= result_mask;
-           pedwarn ("octal escape sequence out of range");
-         }
-       return i;
-      }
-    case 'x':
-      {
-       register unsigned HOST_WIDE_INT i = 0, overflow = 0;
-       register int digits_found = 0, digit;
-       for (;;)
-         {
-           c = *(*string_ptr)++;
-           if (c >= '0' && c <= '9')
-             digit = c - '0';
-           else if (c >= 'a' && c <= 'f')
-             digit = c - 'a' + 10;
-           else if (c >= 'A' && c <= 'F')
-             digit = c - 'A' + 10;
-           else
-             {
-               (*string_ptr)--;
-               break;
-             }
-           overflow |= i ^ (i << 4 >> 4);
-           i = (i << 4) + digit;
-           digits_found = 1;
-         }
-       if (!digits_found)
-         yyerror ("\\x used with no following hex digits");
-       if (overflow | (i != (i & result_mask)))
-         {
-           i &= result_mask;
-           pedwarn ("hex escape sequence out of range");
-         }
-       return i;
-      }
-    default:
-      return c;
-    }
-}
-
-static void
-yyerror (s)
-     char *s;
-{
-  error ("%s", s);
-  skip_evaluation = 0;
-  longjmp (parse_return_error, 1);
-}
-
-static void
-integer_overflow ()
-{
-  if (!skip_evaluation && pedantic)
-    pedwarn ("integer overflow in preprocessor expression");
-}
-
-static HOST_WIDE_INT
-left_shift (a, b)
-     struct constant *a;
-     unsigned HOST_WIDE_INT b;
-{
-   /* It's unclear from the C standard whether shifts can overflow.
-      The following code ignores overflow; perhaps a C standard
-      interpretation ruling is needed.  */
-  if (b >= HOST_BITS_PER_WIDE_INT)
-    return 0;
-  else
-    return (unsigned HOST_WIDE_INT) a->value << b;
-}
-
-static HOST_WIDE_INT
-right_shift (a, b)
-     struct constant *a;
-     unsigned HOST_WIDE_INT b;
-{
-  if (b >= HOST_BITS_PER_WIDE_INT)
-    return a->signedp ? a->value >> (HOST_BITS_PER_WIDE_INT - 1) : 0;
-  else if (a->signedp)
-    return a->value >> b;
-  else
-    return (unsigned HOST_WIDE_INT) a->value >> b;
-}
-\f
-/* This page contains the entry point to this file.  */
-
-/* Parse STRING as an expression, and complain if this fails
-   to use up all of the contents of STRING.  */
-/* STRING may contain '\0' bytes; it is terminated by the first '\n'
-   outside a string constant, so that we can diagnose '\0' properly.  */
-/* We do not support C comments.  They should be removed before
-   this function is called.  */
-
-HOST_WIDE_INT
-parse_c_expression (string)
-     char *string;
-{
-  lexptr = string;
-
-  /* if there is some sort of scanning error, just return 0 and assume
-     the parsing routine has printed an error message somewhere.
-     there is surely a better thing to do than this.     */
-  if (setjmp (parse_return_error))
-    return 0;
-
-  if (yyparse () != 0)
-    abort ();
-
-  if (*lexptr != '\n')
-    error ("Junk after end of expression.");
-
-  return expression_value;     /* set by yyparse () */
-}
-\f
-#ifdef TEST_EXP_READER
-
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-int pedantic;
-int traditional;
-
-int main PROTO((int, char **));
-static void initialize_random_junk PROTO((void));
-
-/* Main program for testing purposes.  */
-int
-main (argc, argv)
-     int argc;
-     char **argv;
-{
-  int n, c;
-  char buf[1024];
-
-  pedantic = 1 < argc;
-  traditional = 2 < argc;
-#if YYDEBUG
-  yydebug = 3 < argc;
-#endif
-  initialize_random_junk ();
-
-  for (;;) {
-    printf ("enter expression: ");
-    n = 0;
-    while ((buf[n] = c = getchar ()) != '\n' && c != EOF)
-      n++;
-    if (c == EOF)
-      break;
-    printf ("parser returned %ld\n", (long) parse_c_expression (buf));
-  }
-
-  return 0;
-}
-
-/* table to tell if char can be part of a C identifier. */
-unsigned char is_idchar[256];
-/* table to tell if char can be first char of a c identifier. */
-unsigned char is_idstart[256];
-/* table to tell if c is horizontal or vertical space.  */
-unsigned char is_space[256];
-
-/*
- * initialize random junk in the hash table and maybe other places
- */
-static void
-initialize_random_junk ()
-{
-  register int i;
-
-  /*
-   * Set up is_idchar and is_idstart tables.  These should be
-   * faster than saying (is_alpha (c) || c == '_'), etc.
-   * Must do set up these things before calling any routines tthat
-   * refer to them.
-   */
-  for (i = 'a'; i <= 'z'; i++) {
-    ++is_idchar[i - 'a' + 'A'];
-    ++is_idchar[i];
-    ++is_idstart[i - 'a' + 'A'];
-    ++is_idstart[i];
-  }
-  for (i = '0'; i <= '9'; i++)
-    ++is_idchar[i];
-  ++is_idchar['_'];
-  ++is_idstart['_'];
-  ++is_idchar['$'];
-  ++is_idstart['$'];
-
-  ++is_space[' '];
-  ++is_space['\t'];
-  ++is_space['\v'];
-  ++is_space['\f'];
-  ++is_space['\n'];
-  ++is_space['\r'];
-}
-
-void
-error (PRINTF_ALIST (msg))
-     PRINTF_DCL (msg)
-{
-  va_list args;
-
-  VA_START (args, msg);
-  fprintf (stderr, "error: ");
-  vfprintf (stderr, msg, args);
-  fprintf (stderr, "\n");
-  va_end (args);
-}
-
-void
-pedwarn (PRINTF_ALIST (msg))
-     PRINTF_DCL (msg)
-{
-  va_list args;
-
-  VA_START (args, msg);
-  fprintf (stderr, "pedwarn: ");
-  vfprintf (stderr, msg, args);
-  fprintf (stderr, "\n");
-  va_end (args);
-}
-
-void
-warning (PRINTF_ALIST (msg))
-     PRINTF_DCL (msg)
-{
-  va_list args;
-
-  VA_START (args, msg);
-  fprintf (stderr, "warning: ");
-  vfprintf (stderr, msg, args);
-  fprintf (stderr, "\n");
-  va_end (args);
-}
-
-int
-check_assertion (name, sym_length, tokens_specified, tokens)
-     U_CHAR *name;
-     int sym_length;
-     int tokens_specified;
-     struct arglist *tokens;
-{
-  return 0;
-}
-
-struct hashnode *
-lookup (name, len, hash)
-     U_CHAR *name;
-     int len;
-     int hash;
-{
-  return (DEFAULT_SIGNED_CHAR) ? 0 : ((struct hashnode *) -1);
-}
-
-GENERIC_PTR
-xmalloc (size)
-     size_t size;
-{
-  return (GENERIC_PTR) malloc (size);
-}
-#endif
diff --git a/gcc/config.in b/gcc/config.in
deleted file mode 100644 (file)
index 8a04e60..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* config.in.  Generated automatically from configure.in by autoheader.  */
-
-/* Include the old config.h as config2.h to simplify the transition
-   to autoconf.  */
-#include "config2.h"
-
-/* Whether malloc must be declared even if <stdlib.h> is included.  */
-#undef NEED_DECLARATION_MALLOC
-
-/* Whether realloc must be declared even if <stdlib.h> is included.  */
-#undef NEED_DECLARATION_REALLOC
-
-/* Whether free must be declared even if <stdlib.h> is included.  */
-#undef NEED_DECLARATION_FREE
-
-/* Define if you have the <stddef.h> header file.  */
-#undef HAVE_STDDEF_H
-
-/* Define if you have the <stdlib.h> header file.  */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file.  */
-#undef HAVE_STRING_H
-
-/* Define if you have the <strings.h> header file.  */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <time.h> header file.  */
-#undef HAVE_TIME_H
-
-/* Define if you have the <unistd.h> header file.  */
-#undef HAVE_UNISTD_H
diff --git a/gcc/config/alpha/crtbegin.asm b/gcc/config/alpha/crtbegin.asm
new file mode 100644 (file)
index 0000000..dfb11e5
--- /dev/null
@@ -0,0 +1,104 @@
+ # Copyright (C) 1996, 1998 Free Software Foundation, Inc.
+ #  Contributed by Richard Henderson (rth@tamu.edu)
+ #
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by the
+ # Free Software Foundation; either version 2, or (at your option) any
+ # later version.
+ # 
+ # In addition to the permissions in the GNU General Public License, the
+ # Free Software Foundation gives you unlimited permission to link the
+ # compiled version of this file with other programs, and to distribute
+ # those programs without any restriction coming from the use of this
+ # file.  (The General Public License restrictions do apply in other
+ # respects; for example, they cover modification of the file, and
+ # distribution when not linked into another program.)
+ # 
+ # This file is distributed in the hope that it will be useful, but
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ # General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 59 Temple Place - Suite 330,
+ # Boston, MA 02111-1307, USA.
+ # 
+ #    As a special exception, if you link this library with files
+ #    compiled with GCC to produce an executable, this does not cause
+ #    the resulting executable to be covered by the GNU General Public License.
+ #    This exception does not however invalidate any other reasons why
+ #    the executable file might be covered by the GNU General Public License.
+
+ #
+ # Heads of the constructor/destructor lists.
+ #
+
+ # The __*TOR_LIST__ symbols are not global because when this file is used
+ # in a shared library, we do not want the symbol to fall over to the
+ # application's lists.
+
+.section .ctors,"aw"
+
+       .align 3
+__CTOR_LIST__:
+       .quad -1
+
+.section .dtors,"aw"
+
+       .align 3
+__DTOR_LIST__:
+       .quad -1
+
+
+ #
+ # Fragment of the ELF _fini routine that invokes our dtor cleanup.
+ #
+
+.section .fini,"ax"
+
+       # Since the bits of the _fini function are spread across many
+       # object files, each potentially with its own GP, we must
+       # assume we need to load ours.  Further, our .fini section
+       # can easily be more than 4MB away from our .text bits so we
+       # can't use bsr.
+
+       br      $29,1f
+1:     ldgp    $29,0($29)
+       jsr     $26,__do_global_dtors_aux
+
+       # Must match the alignment we got from crti.o else we get
+       # zero-filled holes in our _fini function and then SIGILL.
+       .align 3
+
+ #
+ # Invoke our destructors in order.
+ #
+
+.text
+
+       .align 3
+       .ent __do_global_dtors_aux
+
+__do_global_dtors_aux:
+       ldgp    $29,0($27)
+       lda     $30,-16($30)
+       .frame  $30,16,$26,0
+       stq     $26,0($30)
+       .mask   0x4000000,-16
+       .prologue 1
+
+       lda     $1,__DTOR_LIST__
+       br      1f
+0:     stq     $1,8($30)
+       jsr     $26,($27)
+       ldq     $1,8($30)
+1:     ldq     $27,8($1)
+       addq    $1,8,$1
+       bne     $27,0b
+
+       ldq     $26,0($30)
+       lda     $30,16($30)
+       ret
+
+       .end __do_global_dtors_aux
diff --git a/gcc/config/alpha/crtend.asm b/gcc/config/alpha/crtend.asm
new file mode 100644 (file)
index 0000000..36f11b9
--- /dev/null
@@ -0,0 +1,105 @@
+ # Copyright (C) 1996 Free Software Foundation, Inc.
+ #  Contributed by Richard Henderson (rth@tamu.edu)
+ #
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by the
+ # Free Software Foundation; either version 2, or (at your option) any
+ # later version.
+ # 
+ # In addition to the permissions in the GNU General Public License, the
+ # Free Software Foundation gives you unlimited permission to link the
+ # compiled version of this file with other programs, and to distribute
+ # those programs without any restriction coming from the use of this
+ # file.  (The General Public License restrictions do apply in other
+ # respects; for example, they cover modification of the file, and
+ # distribution when not linked into another program.)
+ # 
+ # This file is distributed in the hope that it will be useful, but
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ # General Public License for more details.
+ # 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; see the file COPYING.  If not, write to
+ # the Free Software Foundation, 59 Temple Place - Suite 330,
+ # Boston, MA 02111-1307, USA.
+ # 
+ #    As a special exception, if you link this library with files
+ #    compiled with GCC to produce an executable, this does not cause
+ #    the resulting executable to be covered by the GNU General Public License.
+ #    This exception does not however invalidate any other reasons why
+ #    the executable file might be covered by the GNU General Public License.
+
+ #
+ # Tails of the constructor/destructor lists.
+ #
+
+ # The __*TOR_END__ symbols are not global because when this file is used
+ # in a shared library, we do not want the symbol to fall over to the
+ # application's lists.
+
+.section .ctors,"aw"
+
+       .align 3
+__CTOR_END__:
+       .quad   0
+
+.section .dtors,"aw"
+
+       .align 3
+__DTOR_END__:
+       .quad   0
+
+
+ #
+ # Fragment of the ELF _init routine that invokes our ctor startup
+ #
+
+.section .init,"ax"
+
+       # Since the bits of the _init function are spread across many
+       # object files, each potentially with its own GP, we must
+       # assume we need to load ours.  Further, our .init section
+       # can easily be more than 4MB away from our .text bits so we
+       # can't use bsr.
+
+       br      $29,1f
+1:     ldgp    $29,0($29)
+       jsr     $26,__do_global_ctors_aux
+
+       # Must match the alignment we got from crti.o else we get
+       # zero-filled holes in our _init function and thense SIGILL.
+       .align 3
+
+ #
+ # Invoke our destructors in order.
+ #
+
+.text
+
+       .align 3
+       .ent __do_global_ctors_aux
+
+__do_global_ctors_aux:
+       ldgp    $29,0($27)
+       lda     $30,-16($30)
+       .frame  $30,16,$26,0
+       stq     $9,8($30)
+       stq     $26,0($30)
+       .mask   0x4000200,-16
+       .prologue 1
+
+       lda     $9,__CTOR_END__
+       br      1f
+0:     jsr     $26,($27)
+1:     ldq     $27,-8($9)
+       subq    $9,8,$9
+       not     $27,$0
+       bne     $0,0b
+
+       ldq     $26,0($30)
+       ldq     $9,8($30)
+       lda     $30,16($30)
+       ret
+
+       .end __do_global_ctors_aux
diff --git a/gcc/config/alpha/t-crtbe b/gcc/config/alpha/t-crtbe
new file mode 100644 (file)
index 0000000..5e82b92
--- /dev/null
@@ -0,0 +1,9 @@
+# Effectively disable the crtbegin/end rules using crtstuff.c
+T = disable
+
+# Assemble startup files.
+crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler $(srcdir)/config/alpha/crtbegin.asm
+
+crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crtend.o -x assembler $(srcdir)/config/alpha/crtend.asm
diff --git a/gcc/config/alpha/vxworks.h b/gcc/config/alpha/vxworks.h
new file mode 100644 (file)
index 0000000..6016be9
--- /dev/null
@@ -0,0 +1,57 @@
+/* Definitions of target machine for GNU compiler.  Vxworks Alpha version.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* This file just exists to give specs for the Alpha running on VxWorks.  */
+
+#undef CPP_SPEC
+#define CPP_SPEC "\
+%{mvxsim:-DCPU=SIMALPHADUNIX} \
+%{!mvxsim: %{!mcpu*:-DCPU=21064} \
+           %{mcpu=21064:-DCPU=21064} \
+           %{mcpu=21164:-DCPU=21164}} \
+%{posix: -D_POSIX_SOURCE} \
+%{!.S: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}  \
+%{.S:  -D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}}"
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "\
+-D__vxworks -D__alpha_vxworks -Asystem(vxworks) \
+-Asystem(embedded) -D_LONGLONG  -Acpu(alpha) -Amachine(alpha)"
+
+/* VxWorks does all the library stuff itself.  */
+
+#undef LIB_SPEC
+#define LIB_SPEC ""
+
+/* VxWorks uses object files, not loadable images.  make linker just
+   combine objects. */
+
+#undef LINK_SPEC
+#define LINK_SPEC "-r"
+
+/* VxWorks provides the functionality of crt0.o and friends itself.  */
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC ""
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC ""
+
+#undef TRANSFER_FROM_TRAMPOLINE
diff --git a/gcc/config/alpha/xm-linux.h b/gcc/config/alpha/xm-linux.h
deleted file mode 100644 (file)
index 9426c4e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define HAVE_STRERROR
-#define DONT_DECLARE_SYS_SIGLIST
-#define USE_BFD
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
new file mode 100644 (file)
index 0000000..c9e5411
--- /dev/null
@@ -0,0 +1,2212 @@
+/* Subroutines used for code generation on the ARC cpu.
+   Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* ??? This is an old port, and is undoubtedly suffering from bit rot.  */
+
+#include <stdio.h>
+#include "config.h"
+#include "tree.h"
+#include "rtl.h"
+#include "regs.h"
+#include "hard-reg-set.h"
+#include "real.h"
+#include "insn-config.h"
+#include "conditions.h"
+#include "insn-flags.h"
+#include "output.h"
+#include "insn-attr.h"
+#include "flags.h"
+#include "expr.h"
+#include "recog.h"
+
+/* Which cpu we're compiling for (NULL(=base), ???).  */
+char *arc_cpu_string;
+int arc_cpu_type;
+
+/* Name of mangle string to add to symbols to separate code compiled for each
+   cpu (or NULL).  */
+char *arc_mangle_cpu;
+
+/* Save the operands last given to a compare for use when we
+   generate a scc or bcc insn.  */
+rtx arc_compare_op0, arc_compare_op1;
+
+/* Name of text, data, and rodata sections, as specified on command line.
+   Selected by -m{text,data,rodata} flags.  */
+char *arc_text_string = ARC_DEFAULT_TEXT_SECTION;
+char *arc_data_string = ARC_DEFAULT_DATA_SECTION;
+char *arc_rodata_string = ARC_DEFAULT_RODATA_SECTION;
+
+/* Name of text, data, and rodata sections used in varasm.c.  */
+char *arc_text_section;
+char *arc_data_section;
+char *arc_rodata_section;
+
+/* Array of valid operand punctuation characters.  */
+char arc_punct_chars[256];
+
+/* Variables used by arc_final_prescan_insn to implement conditional
+   execution.  */
+static int arc_ccfsm_state;
+static int arc_ccfsm_current_cc;
+static rtx arc_ccfsm_target_insn;
+static int arc_ccfsm_target_label;
+
+/* The maximum number of insns skipped which will be conditionalised if
+   possible.  */
+#define MAX_INSNS_SKIPPED 3
+
+/* A nop is needed between a 4 byte insn that sets the condition codes and
+   a branch that uses them (the same isn't true for an 8 byte insn that sets
+   the condition codes).  Set by arc_final_prescan_insn.  Used by
+   arc_print_operand.  */
+static int last_insn_set_cc_p;
+static int current_insn_set_cc_p;
+static void record_cc_ref ();
+
+void arc_init_reg_tables ();
+
+/* Called by OVERRIDE_OPTIONS to initialize various things.  */
+
+void
+arc_init (void)
+{
+  if (arc_cpu_string == 0
+      || !strcmp (arc_cpu_string, "base"))
+    {
+      /* Ensure we have a printable value for the .cpu pseudo-op.  */
+      arc_cpu_string = "base";
+      arc_cpu_type = 0;
+      arc_mangle_cpu = NULL;
+    }
+  else if (ARC_EXTENSION_CPU (arc_cpu_string))
+    ; /* nothing to do */
+  else
+    {
+      error ("bad value (%s) for -mcpu switch", arc_cpu_string);
+      arc_cpu_string = "base";
+      arc_cpu_type = 0;
+      arc_mangle_cpu = NULL;
+    }
+
+  /* Set the pseudo-ops for the various standard sections.  */
+  arc_text_section = xmalloc (strlen (arc_text_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+  sprintf (arc_text_section, ARC_SECTION_FORMAT, arc_text_string);
+  arc_data_section = xmalloc (strlen (arc_data_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+  sprintf (arc_data_section, ARC_SECTION_FORMAT, arc_data_string);
+  arc_rodata_section = xmalloc (strlen (arc_rodata_string) + sizeof (ARC_SECTION_FORMAT) + 1);
+  sprintf (arc_rodata_section, ARC_SECTION_FORMAT, arc_rodata_string);
+
+  arc_init_reg_tables ();
+
+  /* Initialize array for PRINT_OPERAND_PUNCT_VALID_P.  */
+  memset (arc_punct_chars, 0, sizeof (arc_punct_chars));
+  arc_punct_chars['#'] = 1;
+  arc_punct_chars['*'] = 1;
+  arc_punct_chars['?'] = 1;
+  arc_punct_chars['!'] = 1;
+  arc_punct_chars['~'] = 1;
+}
+\f
+/* The condition codes of the ARC, and the inverse function.  */
+static char *arc_condition_codes[] =
+{
+  "al", 0, "eq", "ne", "p", "n", "c", "nc", "v", "nv",
+  "gt", "le", "ge", "lt", "hi", "ls", "pnz", 0
+};
+
+#define ARC_INVERSE_CONDITION_CODE(X)  ((X) ^ 1)
+
+/* Returns the index of the ARC condition code string in
+   `arc_condition_codes'.  COMPARISON should be an rtx like
+   `(eq (...) (...))'.  */
+
+static int
+get_arc_condition_code (comparison)
+     rtx comparison;
+{
+  switch (GET_CODE (comparison))
+    {
+    case EQ : return 2;
+    case NE : return 3;
+    case GT : return 10;
+    case LE : return 11;
+    case GE : return 12;
+    case LT : return 13;
+    case GTU : return 14;
+    case LEU : return 15;
+    case LTU : return 6;
+    case GEU : return 7;
+    default : abort ();
+    }
+  /*NOTREACHED*/
+  return (42);
+}
+
+/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
+   return the mode to be used for the comparison.  */
+
+enum machine_mode
+arc_select_cc_mode (op, x, y)
+     enum rtx_code op;
+     rtx x, y;
+{
+  switch (op)
+    {
+    case EQ :
+    case NE :
+      return CCZNmode;
+    default :
+      switch (GET_CODE (x))
+       {
+       case AND :
+       case IOR :
+       case XOR :
+       case SIGN_EXTEND :
+       case ZERO_EXTEND :
+         return CCZNmode;
+       case ASHIFT :
+       case ASHIFTRT :
+       case LSHIFTRT :
+         return CCZNCmode;
+       }
+    }
+  return CCmode;
+}
+\f
+/* Vectors to keep interesting information about registers where it can easily
+   be got.  We use to use the actual mode value as the bit number, but there
+   is (or may be) more than 32 modes now.  Instead we use two tables: one
+   indexed by hard register number, and one indexed by mode.  */
+
+/* The purpose of arc_mode_class is to shrink the range of modes so that
+   they all fit (as bit numbers) in a 32 bit word (again).  Each real mode is
+   mapped into one arc_mode_class mode.  */
+
+enum arc_mode_class {
+  C_MODE,
+  S_MODE, D_MODE, T_MODE, O_MODE,
+  SF_MODE, DF_MODE, TF_MODE, OF_MODE
+};
+
+/* Modes for condition codes.  */
+#define C_MODES (1 << (int) C_MODE)
+
+/* Modes for single-word and smaller quantities.  */
+#define S_MODES ((1 << (int) S_MODE) | (1 << (int) SF_MODE))
+
+/* Modes for double-word and smaller quantities.  */
+#define D_MODES (S_MODES | (1 << (int) D_MODE) | (1 << DF_MODE))
+
+/* Modes for quad-word and smaller quantities.  */
+#define T_MODES (D_MODES | (1 << (int) T_MODE) | (1 << (int) TF_MODE))
+
+/* Value is 1 if register/mode pair is acceptable on arc.  */
+
+unsigned int arc_hard_regno_mode_ok[] = {
+  T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES,
+  T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES,
+  T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, T_MODES, D_MODES,
+  D_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+
+  /* ??? Leave these as S_MODES for now.  */
+  S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+  S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+  S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, S_MODES,
+  S_MODES, S_MODES, S_MODES, S_MODES, S_MODES, C_MODES
+};
+
+unsigned int arc_mode_class [NUM_MACHINE_MODES];
+
+enum reg_class arc_regno_reg_class[FIRST_PSEUDO_REGISTER];
+
+void
+arc_init_reg_tables ()
+{
+  int i;
+
+  for (i = 0; i < NUM_MACHINE_MODES; i++)
+    {
+      switch (GET_MODE_CLASS (i))
+       {
+       case MODE_INT:
+       case MODE_PARTIAL_INT:
+       case MODE_COMPLEX_INT:
+         if (GET_MODE_SIZE (i) <= 4)
+           arc_mode_class[i] = 1 << (int) S_MODE;
+         else if (GET_MODE_SIZE (i) == 8)
+           arc_mode_class[i] = 1 << (int) D_MODE;
+         else if (GET_MODE_SIZE (i) == 16)
+           arc_mode_class[i] = 1 << (int) T_MODE;
+         else if (GET_MODE_SIZE (i) == 32)
+           arc_mode_class[i] = 1 << (int) O_MODE;
+         else 
+           arc_mode_class[i] = 0;
+         break;
+       case MODE_FLOAT:
+       case MODE_COMPLEX_FLOAT:
+         if (GET_MODE_SIZE (i) <= 4)
+           arc_mode_class[i] = 1 << (int) SF_MODE;
+         else if (GET_MODE_SIZE (i) == 8)
+           arc_mode_class[i] = 1 << (int) DF_MODE;
+         else if (GET_MODE_SIZE (i) == 16)
+           arc_mode_class[i] = 1 << (int) TF_MODE;
+         else if (GET_MODE_SIZE (i) == 32)
+           arc_mode_class[i] = 1 << (int) OF_MODE;
+         else 
+           arc_mode_class[i] = 0;
+         break;
+       case MODE_CC:
+       default:
+         /* mode_class hasn't been initialized yet for EXTRA_CC_MODES, so
+            we must explicitly check for them here.  */
+         if (i == (int) CCmode || i == (int) CCZNmode || i == (int) CCZNCmode)
+           arc_mode_class[i] = 1 << (int) C_MODE;
+         else
+           arc_mode_class[i] = 0;
+         break;
+       }
+    }
+
+  for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+    {
+      if (i < 60)
+       arc_regno_reg_class[i] = GENERAL_REGS;
+      else if (i == 60)
+       arc_regno_reg_class[i] = LPCOUNT_REG;
+      else if (i == 61)
+       arc_regno_reg_class[i] = NO_REGS /* CC_REG: must be NO_REGS */;
+      else
+       arc_regno_reg_class[i] = NO_REGS;
+    }
+}
+\f
+/* ARC specific attribute support.
+
+   The ARC has these attributes:
+   interrupt - for interrupt functions
+*/
+
+/* Return nonzero if IDENTIFIER is a valid decl attribute.  */
+
+int
+arc_valid_machine_decl_attribute (type, attributes, identifier, args)
+     tree type;
+     tree attributes;
+     tree identifier;
+     tree args;
+{
+  if (identifier == get_identifier ("__interrupt__")
+      && list_length (args) == 1
+      && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
+    {
+      tree value = TREE_VALUE (args);
+
+      if (!strcmp (TREE_STRING_POINTER (value), "ilink1")
+          || !strcmp (TREE_STRING_POINTER (value), "ilink2"))
+       return 1;
+    }
+  return 0;
+}
+
+/* Return zero if TYPE1 and TYPE are incompatible, one if they are compatible,
+   and two if they are nearly compatible (which causes a warning to be
+   generated).  */
+
+int
+arc_comp_type_attributes (type1, type2)
+     tree type1, type2;
+{
+  return 1;
+}
+
+/* Set the default attributes for TYPE.  */
+
+void
+arc_set_default_type_attributes (type)
+     tree type;
+{
+}
+\f
+/* Acceptable arguments to the call insn.  */
+
+int
+call_address_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  return (symbolic_operand (op, mode)
+         || (GET_CODE (op) == CONST_INT && LEGITIMATE_CONSTANT_P (op))
+         || (GET_CODE (op) == REG));
+}
+
+int
+call_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != MEM)
+    return 0;
+  op = XEXP (op, 0);
+  return call_address_operand (op, mode);
+}
+
+/* Returns 1 if OP is a symbol reference.  */
+
+int
+symbolic_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case SYMBOL_REF:
+    case LABEL_REF:
+    case CONST :
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+/* Return truth value of statement that OP is a symbolic memory
+   operand of mode MODE.  */
+
+int
+symbolic_memory_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) == SUBREG)
+    op = SUBREG_REG (op);
+  if (GET_CODE (op) != MEM)
+    return 0;
+  op = XEXP (op, 0);
+  return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == CONST
+         || GET_CODE (op) == LABEL_REF);
+}
+
+/* Return true if OP is a short immediate (shimm) value.  */
+
+int
+short_immediate_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != CONST_INT)
+    return 0;
+  return SMALL_INT (INTVAL (op));
+}
+
+/* Return true if OP will require a long immediate (limm) value.
+   This is currently only used when calculating length attributes.  */
+
+int
+long_immediate_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case SYMBOL_REF :
+    case LABEL_REF :
+    case CONST :
+      return 1;
+    case CONST_INT :
+      return !SMALL_INT (INTVAL (op));
+    case CONST_DOUBLE :
+      /* These can happen because large unsigned 32 bit constants are
+        represented this way (the multiplication patterns can cause these
+        to be generated).  They also occur for SFmode values.  */
+      return 1;
+    }
+  return 0;
+}
+
+/* Return true if OP is a MEM that when used as a load or store address will
+   require an 8 byte insn.
+   Load and store instructions don't allow the same possibilities but they're
+   similar enough that this one function will do.
+   This is currently only used when calculating length attributes.  */
+
+int
+long_immediate_loadstore_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != MEM)
+    return 0;
+
+  op = XEXP (op, 0);
+  switch (GET_CODE (op))
+    {
+    case SYMBOL_REF :
+    case LABEL_REF :
+    case CONST :
+      return 1;
+    case CONST_INT :
+      /* This must be handled as "st c,[limm]".  Ditto for load.
+        Technically, the assembler could translate some possibilities to
+        "st c,[limm/2 + limm/2]" if limm/2 will fit in a shimm, but we don't
+        assume that it does.  */
+      return 1;
+    case CONST_DOUBLE :
+      /* These can happen because large unsigned 32 bit constants are
+        represented this way (the multiplication patterns can cause these
+        to be generated).  They also occur for SFmode values.  */
+      return 1;
+    case REG :
+      return 0;
+    case PLUS :
+      if (GET_CODE (XEXP (op, 1)) == CONST_INT
+         && !SMALL_INT (INTVAL (XEXP (op, 1))))
+       return 1;
+      return 0;
+    }
+  return 0;
+}
+
+/* Return true if OP is an acceptable argument for a single word
+   move source.  */
+
+int
+move_src_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case SYMBOL_REF :
+    case LABEL_REF :
+    case CONST :
+      return 1;
+    case CONST_INT :
+      return (LARGE_INT (INTVAL (op)));
+    case CONST_DOUBLE :
+      /* We can handle DImode integer constants in SImode if the value
+        (signed or unsigned) will fit in 32 bits.  This is needed because
+        large unsigned 32 bit constants are represented as CONST_DOUBLEs.  */
+      if (mode == SImode)
+       return arc_double_limm_p (op);
+      /* We can handle 32 bit floating point constants.  */
+      if (mode == SFmode)
+       return GET_MODE (op) == SFmode;
+      return 0;
+    case REG :
+      return register_operand (op, mode);
+    case SUBREG :
+      /* (subreg (mem ...) ...) can occur here if the inner part was once a
+        pseudo-reg and is now a stack slot.  */
+      if (GET_CODE (SUBREG_REG (op)) == MEM)
+       return address_operand (XEXP (SUBREG_REG (op), 0), mode);
+      else
+       return register_operand (op, mode);
+    case MEM :
+      return address_operand (XEXP (op, 0), mode);
+    default :
+      return 0;
+    }
+}
+
+/* Return true if OP is an acceptable argument for a double word
+   move source.  */
+
+int
+move_double_src_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case REG :
+      return register_operand (op, mode);
+    case SUBREG :
+      /* (subreg (mem ...) ...) can occur here if the inner part was once a
+        pseudo-reg and is now a stack slot.  */
+      if (GET_CODE (SUBREG_REG (op)) == MEM)
+       return move_double_src_operand (SUBREG_REG (op), mode);
+      else
+       return register_operand (op, mode);
+    case MEM :
+      /* Disallow auto inc/dec for now.  */
+      if (GET_CODE (XEXP (op, 0)) == PRE_DEC
+         || GET_CODE (XEXP (op, 0)) == PRE_INC)
+       return 0;
+      return address_operand (XEXP (op, 0), mode);
+    case CONST_INT :
+    case CONST_DOUBLE :
+      return 1;
+    default :
+      return 0;
+    }
+}
+
+/* Return true if OP is an acceptable argument for a move destination.  */
+
+int
+move_dest_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case REG :
+      return register_operand (op, mode);
+    case SUBREG :
+      /* (subreg (mem ...) ...) can occur here if the inner part was once a
+        pseudo-reg and is now a stack slot.  */
+      if (GET_CODE (SUBREG_REG (op)) == MEM)
+       return address_operand (XEXP (SUBREG_REG (op), 0), mode);
+      else
+       return register_operand (op, mode);
+    case MEM :
+      return address_operand (XEXP (op, 0), mode);
+    default :
+      return 0;
+    }
+}
+
+/* Return true if OP is valid load with update operand.  */
+
+int
+load_update_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != MEM
+      || GET_MODE (op) != mode)
+    return 0;
+  op = XEXP (op, 0);
+  if (GET_CODE (op) != PLUS
+      || GET_MODE (op) != Pmode
+      || !register_operand (XEXP (op, 0), Pmode)
+      || !nonmemory_operand (XEXP (op, 1), Pmode))
+    return 0;
+  return 1;
+}
+
+/* Return true if OP is valid store with update operand.  */
+
+int
+store_update_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != MEM
+      || GET_MODE (op) != mode)
+    return 0;
+  op = XEXP (op, 0);
+  if (GET_CODE (op) != PLUS
+      || GET_MODE (op) != Pmode
+      || !register_operand (XEXP (op, 0), Pmode)
+      || !(GET_CODE (XEXP (op, 1)) == CONST_INT
+          && SMALL_INT (INTVAL (XEXP (op, 1)))))
+    return 0;
+  return 1;
+}
+
+/* Return true if OP is a non-volatile non-immediate operand.
+   Volatile memory refs require a special "cache-bypass" instruction
+   and only the standard movXX patterns are set up to handle them.  */
+
+int
+nonvol_nonimm_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) == MEM && MEM_VOLATILE_P (op))
+    return 0;
+  return nonimmediate_operand (op, mode);
+}
+
+/* Accept integer operands in the range -0x80000000..0x7fffffff.  We have
+   to check the range carefully since this predicate is used in DImode
+   contexts.  */
+
+int
+const_sint32_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  /* All allowed constants will fit a CONST_INT.  */
+  return (GET_CODE (op) == CONST_INT
+         && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff));
+}
+
+/* Accept integer operands in the range 0..0xffffffff.  We have to check the
+   range carefully since this predicate is used in DImode contexts.  Also, we
+   need some extra crud to make it work when hosted on 64-bit machines.  */
+
+int
+const_uint32_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+#if HOST_BITS_PER_WIDE_INT > 32
+  /* All allowed constants will fit a CONST_INT.  */
+  return (GET_CODE (op) == CONST_INT
+         && (INTVAL (op) >= 0 && INTVAL (op) <= 0xffffffffL));
+#else
+  return ((GET_CODE (op) == CONST_INT && INTVAL (op) >= 0)
+         || (GET_CODE (op) == CONST_DOUBLE && CONST_DOUBLE_HIGH (op) == 0));
+#endif
+}
+
+/* Return 1 if OP is a comparison operator valid for the mode of CC.
+   This allows the use of MATCH_OPERATOR to recognize all the branch insns.
+
+   Some insns only set a few bits in the condition code.  So only allow those
+   comparisons that use the bits that are valid.  */
+
+int
+proper_comparison_operator (op, mode)
+    rtx op;
+    enum machine_mode mode;
+{
+  enum rtx_code code = GET_CODE (op);
+
+  if (GET_RTX_CLASS (code) != '<')
+    return 0;
+
+  if (GET_MODE (XEXP (op, 0)) == CCZNmode)
+    return (code == EQ || code == NE);
+  if (GET_MODE (XEXP (op, 0)) == CCZNCmode)
+    return (code == EQ || code == NE
+           || code == LTU || code == GEU || code == GTU || code == LEU);
+  return 1;
+}
+\f
+/* Misc. utilities.  */
+
+/* X and Y are two things to compare using CODE.  Emit the compare insn and
+   return the rtx for the cc reg in the proper mode.  */
+
+rtx
+gen_compare_reg (code, x, y)
+     enum rtx_code code;
+     rtx x, y;
+{
+  enum machine_mode mode = SELECT_CC_MODE (code, x, y);
+  rtx cc_reg;
+
+  cc_reg = gen_rtx (REG, mode, 61);
+
+  emit_insn (gen_rtx (SET, VOIDmode, cc_reg,
+                     gen_rtx (COMPARE, mode, x, y)));
+
+  return cc_reg;
+}
+
+/* Return 1 if VALUE, a const_double, will fit in a limm (4 byte number).
+   We assume the value can be either signed or unsigned.  */
+
+int
+arc_double_limm_p (value)
+     rtx value;
+{
+  HOST_WIDE_INT low, high;
+
+  if (GET_CODE (value) != CONST_DOUBLE)
+    abort ();
+
+  low = CONST_DOUBLE_LOW (value);
+  high = CONST_DOUBLE_HIGH (value);
+
+  if (low & 0x80000000)
+    {
+      return (((unsigned HOST_WIDE_INT) low <= 0xffffffff && high == 0)
+             || (((low & - (unsigned HOST_WIDE_INT) 0x80000000)
+                  == - (unsigned HOST_WIDE_INT) 0x80000000)
+                 && high == -1));
+    }
+  else
+    {
+      return (unsigned HOST_WIDE_INT) low <= 0x7fffffff && high == 0;
+    }
+}
+\f
+/* Do any needed setup for a variadic function.  For the ARC, we must
+   create a register parameter block, and then copy any anonymous arguments
+   in registers to memory.
+
+   CUM has not been updated for the last named argument which has type TYPE
+   and mode MODE, and we rely on this fact.
+
+   We do things a little weird here.  We're supposed to only allocate space
+   for the anonymous arguments.  However we need to keep the stack eight byte
+   aligned.  So we round the space up if necessary, and leave it to va-arc.h
+   to compensate.  */
+
+void
+arc_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
+     CUMULATIVE_ARGS *cum;
+     enum machine_mode mode;
+     tree type;
+     int *pretend_size;
+     int no_rtl;
+{
+  int first_anon_arg;
+
+  /* All BLKmode values are passed by reference.  */
+  if (mode == BLKmode)
+    abort ();
+
+  /* We must treat `__builtin_va_alist' as an anonymous arg.  */
+  if (current_function_varargs)
+    first_anon_arg = *cum;
+  else
+    first_anon_arg = *cum + ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1)
+                            / UNITS_PER_WORD);
+
+  if (first_anon_arg < MAX_ARC_PARM_REGS && !no_rtl)
+    {
+      /* Note that first_reg_offset < MAX_ARC_PARM_REGS.  */
+      int first_reg_offset = first_anon_arg;
+      /* Size in words to "pretend" allocate.  */
+      int size = MAX_ARC_PARM_REGS - first_reg_offset;
+      /* Extra slop to keep stack eight byte aligned.  */
+      int align_slop = size & 1;
+      rtx regblock;
+
+      regblock = gen_rtx (MEM, BLKmode,
+                         plus_constant (arg_pointer_rtx,
+                                        FIRST_PARM_OFFSET (0)
+                                        + align_slop * UNITS_PER_WORD));
+      move_block_from_reg (first_reg_offset, regblock,
+                          MAX_ARC_PARM_REGS - first_reg_offset,
+                          ((MAX_ARC_PARM_REGS - first_reg_offset)
+                           * UNITS_PER_WORD));
+
+      *pretend_size = ((MAX_ARC_PARM_REGS - first_reg_offset + align_slop)
+                      * UNITS_PER_WORD);
+    }
+}
+\f
+/* Cost functions.  */
+
+/* Provide the costs of an addressing mode that contains ADDR.
+   If ADDR is not a valid address, its cost is irrelevant.  */
+
+int
+arc_address_cost (addr)
+     rtx addr;
+{
+  switch (GET_CODE (addr))
+    {
+    case REG :
+      /* This is handled in the macro that calls us.
+        It's here for documentation.  */
+      return 1;
+
+    case LABEL_REF :
+    case SYMBOL_REF :
+    case CONST :
+      return 2;
+
+    case PLUS :
+      {
+       register rtx plus0 = XEXP (addr, 0);
+       register rtx plus1 = XEXP (addr, 1);
+
+       if (GET_CODE (plus0) != REG)
+         break;
+
+       switch (GET_CODE (plus1))
+         {
+         case CONST_INT :
+           return SMALL_INT (plus1) ? 1 : 2;
+         case CONST :
+         case SYMBOL_REF :
+         case LABEL_REF :
+           return 2;
+         default:
+           break;
+         }
+       break;
+      }
+    }
+
+  return 4;
+}
+\f
+/* Function prologue/epilogue handlers.  */
+
+/* ARC stack frames look like:
+
+             Before call                       After call
+        +-----------------------+       +-----------------------+
+        |                       |       |                       |
+   high |  local variables,     |       |  local variables,     |
+   mem  |  reg save area, etc.  |       |  reg save area, etc.  |
+        |                       |       |                       |
+        +-----------------------+       +-----------------------+
+        |                       |       |                       |
+        |  arguments on stack.  |       |  arguments on stack.  |
+        |                       |       |                       |
+ SP+16->+-----------------------+FP+48->+-----------------------+
+        | 4 word save area for  |       |  reg parm save area,  |
+        | return addr, prev %fp |       |  only created for     |    
+  SP+0->+-----------------------+       |  variable argument    |    
+                                        |  functions            |    
+                                 FP+16->+-----------------------+    
+                                        | 4 word save area for  |    
+                                        | return addr, prev %fp |    
+                                  FP+0->+-----------------------+    
+                                        |                       |    
+                                        |  local variables      |    
+                                        |                       |    
+                                        +-----------------------+    
+                                        |                       |    
+                                        |  register save area   |    
+                                        |                       |    
+                                        +-----------------------+    
+                                        |                       |    
+                                        |  alloca allocations   |    
+                                        |                       |    
+                                        +-----------------------+    
+                                        |                       |    
+                                        |  arguments on stack   |    
+                                        |                       |    
+                                 SP+16->+-----------------------+
+   low                                  | 4 word save area for  |    
+   memory                               | return addr, prev %fp |    
+                                  SP+0->+-----------------------+    
+
+Notes:
+1) The "reg parm save area" does not exist for non variable argument fns.
+   The "reg parm save area" can be eliminated completely if we created our
+   own va-arc.h, but that has tradeoffs as well (so it's not done).  */
+
+/* Structure to be filled in by arc_compute_frame_size with register
+   save masks, and offsets for the current function.  */
+struct arc_frame_info
+{
+  unsigned int total_size;     /* # bytes that the entire frame takes up.  */
+  unsigned int extra_size;     /* # bytes of extra stuff.  */
+  unsigned int pretend_size;   /* # bytes we push and pretend caller did.  */
+  unsigned int args_size;      /* # bytes that outgoing arguments take up.  */
+  unsigned int reg_size;       /* # bytes needed to store regs.  */
+  unsigned int var_size;       /* # bytes that variables take up.  */
+  unsigned int reg_offset;     /* Offset from new sp to store regs.  */
+  unsigned int gmask;          /* Mask of saved gp registers.  */
+  int          initialized;    /* Nonzero if frame size already calculated.  */
+};
+
+/* Current frame information calculated by arc_compute_frame_size.  */
+static struct arc_frame_info current_frame_info;
+
+/* Zero structure to initialize current_frame_info.  */
+static struct arc_frame_info zero_frame_info;
+
+/* Type of function DECL.
+
+   The result is cached.  To reset the cache at the end of a function,
+   call with DECL = NULL_TREE.  */
+
+enum arc_function_type
+arc_compute_function_type (decl)
+     tree decl;
+{
+  tree a;
+  /* Cached value.  */
+  static enum arc_function_type fn_type = ARC_FUNCTION_UNKNOWN;
+  /* Last function we were called for.  */
+  static tree last_fn = NULL_TREE;
+
+  /* Resetting the cached value?  */
+  if (decl == NULL_TREE)
+    {
+      fn_type = ARC_FUNCTION_UNKNOWN;
+      last_fn = NULL_TREE;
+      return fn_type;
+    }
+
+  if (decl == last_fn && fn_type != ARC_FUNCTION_UNKNOWN)
+    return fn_type;
+
+  /* Assume we have a normal function (not an interrupt handler).  */
+  fn_type = ARC_FUNCTION_NORMAL;
+
+  /* Now see if this is an interrupt handler.  */
+  for (a = DECL_MACHINE_ATTRIBUTES (current_function_decl);
+       a;
+       a = TREE_CHAIN (a))
+    {
+      tree name = TREE_PURPOSE (a), args = TREE_VALUE (a);
+
+      if (name == get_identifier ("__interrupt__")
+         && list_length (args) == 1
+         && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
+       {
+         tree value = TREE_VALUE (args);
+
+         if (!strcmp (TREE_STRING_POINTER (value), "ilink1"))
+           fn_type = ARC_FUNCTION_ILINK1;
+         else if (!strcmp (TREE_STRING_POINTER (value), "ilink2"))
+           fn_type = ARC_FUNCTION_ILINK2;
+         else
+           abort ();
+         break;
+       }
+    }
+
+  last_fn = decl;
+  return fn_type;
+}
+
+#define ILINK1_REGNUM 29
+#define ILINK2_REGNUM 30
+#define RETURN_ADDR_REGNUM 31
+#define FRAME_POINTER_MASK (1 << (FRAME_POINTER_REGNUM))
+#define RETURN_ADDR_MASK (1 << (RETURN_ADDR_REGNUM))
+
+/* Tell prologue and epilogue if register REGNO should be saved / restored.
+   The return address and frame pointer are treated separately.
+   Don't consider them here.  */
+#define MUST_SAVE_REGISTER(regno, interrupt_p) \
+((regno) != RETURN_ADDR_REGNUM && (regno) != FRAME_POINTER_REGNUM \
+ && (regs_ever_live[regno] && (!call_used_regs[regno] || interrupt_p)))
+
+#define MUST_SAVE_RETURN_ADDR (regs_ever_live[RETURN_ADDR_REGNUM])
+
+/* Return the bytes needed to compute the frame pointer from the current
+   stack pointer.
+
+   SIZE is the size needed for local variables.  */
+
+unsigned int
+arc_compute_frame_size (size)
+     int size;                 /* # of var. bytes allocated.  */
+{
+  int regno;
+  unsigned int total_size, var_size, args_size, pretend_size, extra_size;
+  unsigned int reg_size, reg_offset;
+  unsigned int gmask;
+  enum arc_function_type fn_type;
+  int interrupt_p;
+
+  var_size     = size;
+  args_size    = current_function_outgoing_args_size;
+  pretend_size = current_function_pretend_args_size;
+  extra_size   = FIRST_PARM_OFFSET (0);
+  total_size   = extra_size + pretend_size + args_size + var_size;
+  reg_offset   = FIRST_PARM_OFFSET(0) + current_function_outgoing_args_size;
+  reg_size     = 0;
+  gmask                = 0;
+
+  /* See if this is an interrupt handler.  Call used registers must be saved
+     for them too.  */
+  fn_type = arc_compute_function_type (current_function_decl);
+  interrupt_p = ARC_INTERRUPT_P (fn_type);
+
+  /* Calculate space needed for registers.
+     ??? We ignore the extension registers for now.  */
+
+  for (regno = 0; regno <= 31; regno++)
+    {
+      if (MUST_SAVE_REGISTER (regno, interrupt_p))
+       {
+         reg_size += UNITS_PER_WORD;
+         gmask |= 1 << regno;
+       }
+    }
+
+  total_size += reg_size;
+
+  /* If the only space to allocate is the fp/blink save area this is an
+     empty frame.  However, if we'll be making a function call we need to
+     allocate a stack frame for our callee's fp/blink save area.  */
+  if (total_size == extra_size
+      && !MUST_SAVE_RETURN_ADDR)
+    total_size = extra_size = 0;
+
+  total_size = ARC_STACK_ALIGN (total_size);
+
+  /* Save computed information.  */
+  current_frame_info.total_size   = total_size;
+  current_frame_info.extra_size   = extra_size;
+  current_frame_info.pretend_size = pretend_size;
+  current_frame_info.var_size     = var_size;
+  current_frame_info.args_size    = args_size;
+  current_frame_info.reg_size    = reg_size;
+  current_frame_info.reg_offset          = reg_offset;
+  current_frame_info.gmask       = gmask;
+  current_frame_info.initialized  = reload_completed;
+
+  /* Ok, we're done.  */
+  return total_size;
+}
+\f
+/* Common code to save/restore registers.  */
+
+void
+arc_save_restore (file, base_reg, offset, gmask, op)
+     FILE *file;
+     char *base_reg;
+     unsigned int offset;
+     unsigned int gmask;
+     char *op;
+{
+  int regno;
+
+  if (gmask == 0)
+    return;
+
+  for (regno = 0; regno <= 31; regno++)
+    {
+      if ((gmask & (1L << regno)) != 0)
+       {
+         fprintf (file, "\t%s %s,[%s,%d]\n",
+                    op, reg_names[regno], base_reg, offset);
+         offset += UNITS_PER_WORD;
+       }
+    }
+}
+\f
+/* Set up the stack and frame pointer (if desired) for the function.  */
+
+void
+arc_output_function_prologue (file, size)
+     FILE *file;
+     int size;
+{
+  char *sp_str = reg_names[STACK_POINTER_REGNUM];
+  char *fp_str = reg_names[FRAME_POINTER_REGNUM];
+  unsigned int gmask = current_frame_info.gmask;
+  enum arc_function_type fn_type = arc_compute_function_type (current_function_decl);
+
+  /* If this is an interrupt handler, set up our stack frame.
+     ??? Optimize later.  */
+  if (ARC_INTERRUPT_P (fn_type))
+    {
+      fprintf (file, "\t%s interrupt handler\n",
+              ASM_COMMENT_START);
+      fprintf (file, "\tsub %s,%s,16\n", sp_str, sp_str);
+    }
+
+  /* This is only for the human reader.  */
+  fprintf (file, "\t%s BEGIN PROLOGUE %s vars= %d, regs= %d, args= %d, extra= %d\n",
+          ASM_COMMENT_START, ASM_COMMENT_START,
+          current_frame_info.var_size,
+          current_frame_info.reg_size / 4,
+          current_frame_info.args_size,
+          current_frame_info.extra_size);
+
+  size = ARC_STACK_ALIGN (size);
+  size = (! current_frame_info.initialized
+          ? arc_compute_frame_size (size)
+          : current_frame_info.total_size);
+
+  /* These cases shouldn't happen.  Catch them now.  */
+  if (size == 0 && gmask)
+    abort ();
+
+  /* Allocate space for register argumenets if this is a variadic function.  */
+  if (current_frame_info.pretend_size != 0)
+    fprintf (file, "\tsub %s,%s,%d\n",
+            sp_str, sp_str, current_frame_info.pretend_size);
+
+  /* The home-grown ABI says link register is saved first.  */
+  if (MUST_SAVE_RETURN_ADDR)
+    fprintf (file, "\tst %s,[%s,%d]\n",
+            reg_names[RETURN_ADDR_REGNUM], sp_str, UNITS_PER_WORD);
+
+  /* Set up the previous frame pointer next (if we need to).  */
+  if (frame_pointer_needed)
+    {
+      fprintf (file, "\tst %s,[%s]\n", fp_str, sp_str);
+      fprintf (file, "\tmov %s,%s\n", fp_str, sp_str);
+    }
+
+  /* ??? We don't handle the case where the saved regs are more than 252
+     bytes away from sp.  This can be handled by decrementing sp once, saving
+     the regs, and then decrementing it again.  The epilogue doesn't have this
+     problem as the `ld' insn takes reg+limm values (though it would be more
+     efficient to avoid reg+limm).  */
+
+  /* Allocate the stack frame.  */
+  if (size - current_frame_info.pretend_size > 0)
+    fprintf (file, "\tsub %s,%s,%d\n",
+            sp_str, sp_str, size - current_frame_info.pretend_size);
+
+  /* Save any needed call-saved regs (and call-used if this is an
+     interrupt handler).  */
+  arc_save_restore (file, sp_str, current_frame_info.reg_offset,
+                   /* The zeroing of these two bits is unnecessary,
+                      but leave this in for clarity.  */
+                   gmask & ~(FRAME_POINTER_MASK | RETURN_ADDR_MASK),
+                   "st");
+
+  fprintf (file, "\t%s END PROLOGUE\n", ASM_COMMENT_START);
+}
+\f
+/* Do any necessary cleanup after a function to restore stack, frame,
+   and regs. */
+
+void
+arc_output_function_epilogue (file, size)
+     FILE *file;
+     int size;
+{
+  rtx epilogue_delay = current_function_epilogue_delay_list;
+  int noepilogue = FALSE;
+  enum arc_function_type fn_type = arc_compute_function_type (current_function_decl);
+
+  /* This is only for the human reader.  */
+  fprintf (file, "\t%s EPILOGUE\n", ASM_COMMENT_START);
+
+  size = ARC_STACK_ALIGN (size);
+  size = (!current_frame_info.initialized
+          ? arc_compute_frame_size (size)
+          : current_frame_info.total_size);
+
+  if (size == 0 && epilogue_delay == 0)
+    {
+      rtx insn = get_last_insn ();
+
+      /* If the last insn was a BARRIER, we don't have to write any code
+        because a jump (aka return) was put there.  */
+      if (GET_CODE (insn) == NOTE)
+       insn = prev_nonnote_insn (insn);
+      if (insn && GET_CODE (insn) == BARRIER)
+       noepilogue = TRUE;
+    }
+
+  if (!noepilogue)
+    {
+      unsigned int pretend_size = current_frame_info.pretend_size;
+      unsigned int frame_size = size - pretend_size;
+      int restored, fp_restored_p;
+      int can_trust_sp_p = !current_function_calls_alloca;
+      char *sp_str = reg_names[STACK_POINTER_REGNUM];
+      char *fp_str = reg_names[FRAME_POINTER_REGNUM];
+
+      /* ??? There are lots of optimizations that can be done here.
+        EG: Use fp to restore regs if it's closer.
+        Maybe in time we'll do them all.  For now, always restore regs from
+        sp, but don't restore sp if we don't have to.  */
+
+      if (!can_trust_sp_p)
+       {
+         if (!frame_pointer_needed)
+           abort ();
+         fprintf (file,"\tsub %s,%s,%d\t\t%s sp not trusted here\n",
+                  sp_str, fp_str, frame_size, ASM_COMMENT_START);
+       }
+
+      /* Restore any saved registers.  */
+      arc_save_restore (file, sp_str, current_frame_info.reg_offset,
+                       /* The zeroing of these two bits is unnecessary,
+                          but leave this in for clarity.  */
+                       current_frame_info.gmask & ~(FRAME_POINTER_MASK | RETURN_ADDR_MASK),
+                       "ld");
+
+      if (MUST_SAVE_RETURN_ADDR)
+       fprintf (file, "\tld %s,[%s,%d]\n",
+                reg_names[RETURN_ADDR_REGNUM],
+                frame_pointer_needed ? fp_str : sp_str,
+                UNITS_PER_WORD + (frame_pointer_needed ? 0 : frame_size));
+
+      /* Keep track of how much of the stack pointer we've restored.
+        It makes the following a lot more readable.  */
+      restored = 0;
+      fp_restored_p = 0;
+
+      /* We try to emit the epilogue delay slot insn right after the load
+        of the return address register so that it can execute with the
+        stack intact.  Secondly, loads are delayed.  */
+      /* ??? If stack intactness is important, always emit now.  */
+      if (MUST_SAVE_RETURN_ADDR && epilogue_delay != NULL_RTX)
+       {
+         final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+         epilogue_delay = NULL_RTX;
+       }
+
+      if (frame_pointer_needed)
+       {
+         /* Try to restore the frame pointer in the delay slot.  We can't,
+            however, if any of these is true.  */
+         if (epilogue_delay != NULL_RTX
+             || !SMALL_INT (frame_size)
+             || pretend_size
+             || ARC_INTERRUPT_P (fn_type))
+           {
+             /* Note that we restore fp and sp here!  */
+             fprintf (file, "\tld.a %s,[%s,%d]\n", fp_str, sp_str, frame_size);
+             restored += frame_size;
+             fp_restored_p = 1;
+           }
+       }
+      else if (!SMALL_INT (size /* frame_size + pretend_size */)
+              || ARC_INTERRUPT_P (fn_type))
+       {
+         fprintf (file, "\tadd %s,%s,%d\n", sp_str, sp_str, frame_size);
+         restored += frame_size;
+       }
+
+      /* These must be done before the return insn because the delay slot
+        does the final stack restore.  */
+      if (ARC_INTERRUPT_P (fn_type))
+       {
+         if (epilogue_delay)
+           {
+             final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+           }
+       }
+
+      /* Emit the return instruction.  */
+      {
+       static int regs[4] = {
+         0, RETURN_ADDR_REGNUM, ILINK1_REGNUM, ILINK2_REGNUM
+       };
+       fprintf (file, "\tj.d %s\n", reg_names[regs[fn_type]]);
+      }
+
+      /* If the only register saved is the return address, we need a
+        nop, unless we have an instruction to put into it.  Otherwise
+        we don't since reloading multiple registers doesn't reference
+        the register being loaded.  */
+
+      if (ARC_INTERRUPT_P (fn_type))
+       fprintf (file, "\tadd %s,%s,16\n", sp_str, sp_str);
+      else if (epilogue_delay != NULL_RTX)
+       {
+         if (frame_pointer_needed && !fp_restored_p)
+           abort ();
+         if (restored < size)
+           abort ();
+         final_scan_insn (XEXP (epilogue_delay, 0), file, 1, -2, 1);
+       }
+      else if (frame_pointer_needed && !fp_restored_p)
+       {
+         if (!SMALL_INT (frame_size))
+           abort ();
+         /* Note that we restore fp and sp here!  */
+         fprintf (file, "\tld.a %s,[%s,%d]\n", fp_str, sp_str, frame_size);
+       }
+      else if (restored < size)
+       {
+         if (!SMALL_INT (size - restored))
+           abort ();
+         fprintf (file, "\tadd %s,%s,%d\n",
+                  sp_str, sp_str, size - restored);
+       }
+      else
+       fprintf (file, "\tnop\n");
+    }
+
+  /* Reset state info for each function.  */
+  current_frame_info = zero_frame_info;
+  arc_compute_function_type (NULL_TREE);
+}
+\f
+/* Define the number of delay slots needed for the function epilogue.
+
+   Interrupt handlers can't have any epilogue delay slots (it's always needed
+   for something else, I think).  For normal functions, we have to worry about
+   using call-saved regs as they'll be restored before the delay slot insn.
+   Functions with non-empty frames already have enough choices for the epilogue
+   delay slot so for now we only consider functions with empty frames.  */
+
+int
+arc_delay_slots_for_epilogue ()
+{
+  if (arc_compute_function_type (current_function_decl) != ARC_FUNCTION_NORMAL)
+    return 0;
+  if (!current_frame_info.initialized)
+    (void) arc_compute_frame_size (get_frame_size ());
+  if (current_frame_info.total_size == 0)
+    return 1;
+  return 0;
+}
+
+/* Return true if TRIAL is a valid insn for the epilogue delay slot.
+   Any single length instruction which doesn't reference the stack or frame
+   pointer or any call-saved register is OK.  SLOT will always be 0.  */
+
+int
+arc_eligible_for_epilogue_delay (trial, slot)
+     rtx trial;
+     int slot;
+{
+  if (slot != 0)
+    abort ();
+
+  if (get_attr_length (trial) == 1
+      /* If registers where saved, presumably there's more than enough
+        possibilities for the delay slot.  The alternative is something
+        more complicated (of course, if we expanded the epilogue as rtl
+        this problem would go away).  */
+      /* ??? Note that this will always be true since only functions with
+        empty frames have epilogue delay slots.  See
+        arc_delay_slots_for_epilogue.  */
+      && current_frame_info.gmask == 0
+      && ! reg_mentioned_p (stack_pointer_rtx, PATTERN (trial))
+      && ! reg_mentioned_p (frame_pointer_rtx, PATTERN (trial)))
+    return 1;
+  return 0;
+}
+\f
+/* PIC */
+
+/* Set up PIC-specific rtl.  This should not cause any insns
+   to be emitted.  */
+
+void
+arc_initialize_pic ()
+{
+  /* nothing to do */
+}
+
+/* Emit special PIC prologues and epilogues.  */
+
+void
+arc_finalize_pic ()
+{
+  /* nothing to do */
+}
+\f
+/* Return true if OP is a shift operator.  */
+
+int
+shift_operator (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  switch (GET_CODE (op))
+    {
+    case ASHIFTRT:
+    case LSHIFTRT:
+    case ASHIFT:
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+/* Output the assembler code for doing a shift.
+   We go to a bit of trouble to generate efficient code as the ARC only has
+   single bit shifts.  This is taken from the h8300 port.  We only have one
+   mode of shifting and can't access individual bytes like the h8300 can, so
+   this is greatly simplified (at the expense of not generating hyper-
+   efficient code).
+
+   This function is not used if the variable shift insns are present.  */
+
+/* ??? We assume the output operand is the same as operand 1.
+   This can be optimized (deleted) in the case of 1 bit shifts.  */
+/* ??? We use the loop register here.  We don't use it elsewhere (yet) and
+   using it here will give us a chance to play with it.  */
+
+char *
+output_shift (operands)
+     rtx *operands;
+{
+  static int loopend_lab;
+  rtx shift = operands[3];
+  enum machine_mode mode = GET_MODE (shift);
+  enum rtx_code code = GET_CODE (shift);
+  char *shift_one;
+
+  if (mode != SImode)
+    abort ();
+
+  switch (code)
+    {
+    case ASHIFT:   shift_one = "asl %0,%0"; break;
+    case ASHIFTRT: shift_one = "asr %0,%0"; break;
+    case LSHIFTRT: shift_one = "lsr %0,%0"; break;
+    default:       abort ();
+    }
+
+  if (GET_CODE (operands[2]) != CONST_INT)
+    {
+      if (optimize)
+       output_asm_insn ("mov lp_count,%2", operands);
+      else
+       output_asm_insn ("mov %4,%2", operands);
+      goto shiftloop;
+    }
+  else
+    {
+      int n = INTVAL (operands[2]);
+
+      /* If the count is negative, make it 0.  */
+      if (n < 0)
+       n = 0;
+      /* If the count is too big, truncate it.
+         ANSI says shifts of GET_MODE_BITSIZE are undefined - we choose to
+        do the intuitive thing.  */
+      else if (n > GET_MODE_BITSIZE (mode))
+       n = GET_MODE_BITSIZE (mode);
+
+      /* First see if we can do them inline.  */
+      if (n <= 8)
+       {
+         while (--n >= 0)
+           output_asm_insn (shift_one, operands);
+       }
+      /* See if we can use a rotate/and.  */
+      else if (n == BITS_PER_WORD - 1)
+       {
+         switch (code)
+           {
+           case ASHIFT :
+             output_asm_insn ("and %0,%0,1\n\tror %0,%0", operands);
+             break;
+           case ASHIFTRT :
+             /* The ARC doesn't have a rol insn.  Use something else.  */
+             output_asm_insn ("asl.f 0,%0\n\tsbc %0,0,0", operands);
+             break;
+           case LSHIFTRT :
+             /* The ARC doesn't have a rol insn.  Use something else.  */
+             output_asm_insn ("asl.f 0,%0\n\tadc %0,0,0", operands);
+             break;
+           }
+       }
+      /* Must loop.  */
+      else
+       {
+         char buf[100];
+
+         if (optimize)
+           output_asm_insn ("mov lp_count,%c2", operands);
+         else
+           output_asm_insn ("mov %4,%c2", operands);
+       shiftloop:
+         if (optimize)
+           {
+             if (flag_pic)
+               sprintf ("lr %%4,[status]\n\tadd %%4,%%4,6\t%s single insn loop start",
+                        ASM_COMMENT_START);
+             else
+               sprintf (buf, "mov %%4,%%%%st(1f)\t%s (single insn loop start) >> 2",
+                        ASM_COMMENT_START);
+             output_asm_insn (buf, operands);
+             output_asm_insn ("sr %4,[lp_start]", operands);
+             output_asm_insn ("add %4,%4,1", operands);
+             output_asm_insn ("sr %4,[lp_end]", operands);
+             output_asm_insn ("nop\n\tnop", operands);
+             if (flag_pic)
+               asm_fprintf (asm_out_file, "\t%s single insn loop\n",
+                            ASM_COMMENT_START);
+             else
+               asm_fprintf (asm_out_file, "1:\t%s single insn loop\n",
+                            ASM_COMMENT_START);
+             output_asm_insn (shift_one, operands);
+           }
+         else 
+           {
+             asm_fprintf (asm_out_file, "1:\t%s begin shift loop\n",
+                          ASM_COMMENT_START);
+             output_asm_insn ("sub.f %4,%4,1", operands);
+             output_asm_insn ("nop", operands);
+             output_asm_insn ("bn.nd 2f", operands);
+             output_asm_insn (shift_one, operands);
+             output_asm_insn ("b.nd 1b", operands);
+             asm_fprintf (asm_out_file, "2:\t%s end shift loop\n",
+                          ASM_COMMENT_START);
+           }
+       }
+    }
+
+  return "";
+}
+\f
+/* Nested function support.  */
+
+/* Emit RTL insns to initialize the variable parts of a trampoline.
+   FNADDR is an RTX for the address of the function's pure code.
+   CXT is an RTX for the static chain value for the function.  */
+
+void
+arc_initialize_trampoline (tramp, fnaddr, cxt)
+     rtx tramp, fnaddr, cxt;
+{
+}
+\f
+/* Set the cpu type and print out other fancy things,
+   at the top of the file.  */
+
+void
+arc_asm_file_start (file)
+     FILE *file;
+{
+  fprintf (file, "\t.cpu %s\n", arc_cpu_string);
+}
+\f
+/* Print operand X (an rtx) in assembler syntax to file FILE.
+   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
+   For `%' followed by punctuation, CODE is the punctuation and X is null.  */
+
+void
+arc_print_operand (file, x, code)
+     FILE *file;
+     rtx x;
+     int code;
+{
+  switch (code)
+    {
+    case '#' :
+      /* Conditional brances.  For now these are equivalent.  */
+    case '*' :
+      /* Unconditional branches.  Output the appropriate delay slot suffix.  */
+      if (!final_sequence || XVECLEN (final_sequence, 0) == 1)
+       {
+         /* There's nothing in the delay slot.  */
+         fputs (".nd", file);
+       }
+      else
+       {
+         rtx jump = XVECEXP (final_sequence, 0, 0);
+         rtx delay = XVECEXP (final_sequence, 0, 1);
+         if (INSN_ANNULLED_BRANCH_P (jump))
+           fputs (INSN_FROM_TARGET_P (delay) ? ".jd" : ".nd", file);
+         else
+           fputs (".d", file);
+       }
+      return;
+    case '?' : /* with leading "." */
+    case '!' : /* without leading "." */
+      /* This insn can be conditionally executed.  See if the ccfsm machinery
+        says it should be conditionalized.  */
+      if (arc_ccfsm_state == 3 || arc_ccfsm_state == 4)
+       {
+         /* Is this insn in a delay slot?  */
+         if (final_sequence && XVECLEN (final_sequence, 0) == 2)
+           {
+             rtx insn = XVECEXP (final_sequence, 0, 1);
+
+             /* If the insn is annulled and is from the target path, we need
+                to inverse the condition test.  */
+             if (INSN_ANNULLED_BRANCH_P (insn))
+               {
+                 if (INSN_FROM_TARGET_P (insn))
+                   fprintf (file, "%s%s",
+                            code == '?' ? "." : "",
+                            arc_condition_codes[ARC_INVERSE_CONDITION_CODE (arc_ccfsm_current_cc)]);
+                 else
+                   fprintf (file, "%s%s",
+                            code == '?' ? "." : "",
+                            arc_condition_codes[arc_ccfsm_current_cc]);
+               }
+             else
+               /* This insn is executed for either path, so don't
+                  conditionalize it at all.  */
+               ; /* nothing to do */
+           }
+         else
+           {
+             /* This insn isn't in a delay slot.  */
+             fprintf (file, "%s%s",
+                      code == '?' ? "." : "",
+                      arc_condition_codes[arc_ccfsm_current_cc]);
+           }
+       }
+      return;
+    case '~' :
+      /* Output a nop if we're between a set of the condition codes,
+        and a conditional branch.  */
+      if (last_insn_set_cc_p)
+       fputs ("nop\n\t", file);
+      return;
+    case 'd' :
+      fputs (arc_condition_codes[get_arc_condition_code (x)], file);
+      return;
+    case 'D' :
+      fputs (arc_condition_codes[ARC_INVERSE_CONDITION_CODE
+                                (get_arc_condition_code (x))],
+            file);
+      return;
+    case 'R' :
+      /* Write second word of DImode or DFmode reference,
+        register or memory.  */
+      if (GET_CODE (x) == REG)
+       fputs (reg_names[REGNO (x)+1], file);
+      else if (GET_CODE (x) == MEM)
+       {
+         fputc ('[', file);
+         /* Handle possible auto-increment.  Since it is pre-increment and
+            we have already done it, we can just use an offset of four.  */
+         /* ??? This is taken from rs6000.c I think.  I don't think it is
+            currently necessary, but keep it around.  */
+         if (GET_CODE (XEXP (x, 0)) == PRE_INC
+             || GET_CODE (XEXP (x, 0)) == PRE_DEC)
+           output_address (plus_constant (XEXP (XEXP (x, 0), 0), 4));
+         else
+           output_address (plus_constant (XEXP (x, 0), 4));
+         fputc (']', file);
+       }
+      else
+       output_operand_lossage ("invalid operand to %R code");
+      return;
+    case 'S' :
+      if ((GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FLAG (x))
+         || GET_CODE (x) == LABEL_REF)
+       {
+         fprintf (file, "%%st(");
+         output_addr_const (file, x);
+         fprintf (file, ")");
+         return;
+       }
+      break;
+    case 'H' :
+    case 'L' :
+      if (GET_CODE (x) == REG)
+       {
+         /* L = least significant word, H = most significant word */
+         if ((TARGET_BIG_ENDIAN != 0) ^ (code == 'L'))
+           fputs (reg_names[REGNO (x)], file);
+         else
+           fputs (reg_names[REGNO (x)+1], file);
+       }
+      else if (GET_CODE (x) == CONST_INT
+              || GET_CODE (x) == CONST_DOUBLE)
+       {
+         rtx first, second;
+
+         split_double (x, &first, &second);
+         fprintf (file, "0x%08lx",
+                  code == 'L' ? INTVAL (first) : INTVAL (second));
+       }
+      else
+       output_operand_lossage ("invalid operand to %H/%L code");
+      return;
+    case 'A' :
+      {
+       REAL_VALUE_TYPE d;
+       char str[30];
+
+       if (GET_CODE (x) != CONST_DOUBLE
+           || GET_MODE_CLASS (GET_MODE (x)) != MODE_FLOAT)
+         abort ();
+       REAL_VALUE_FROM_CONST_DOUBLE (d, x);
+       REAL_VALUE_TO_DECIMAL (d, "%.20e", str);
+       fprintf (file, "%s", str);
+       return;
+      }
+    case 'U' :
+      /* Output a load/store with update indicator if appropriate.  */
+      if (GET_CODE (x) == MEM)
+       {
+         if (GET_CODE (XEXP (x, 0)) == PRE_INC
+             || GET_CODE (XEXP (x, 0)) == PRE_DEC)
+           fputs (".a", file);
+       }
+      else
+       output_operand_lossage ("invalid operand to %U code");
+      return;
+    case 'V' :
+      /* Output cache bypass indicator for a load/store insn.  Volatile memory
+        refs are defined to use the cache bypass mechanism.  */
+      if (GET_CODE (x) == MEM)
+       {
+         if (MEM_VOLATILE_P (x))
+           fputs (".di", file);
+       }
+      else
+       output_operand_lossage ("invalid operand to %V code");
+      return;
+    case 0 :
+      /* Do nothing special.  */
+      break;
+    default :
+      /* Unknown flag.  */
+      output_operand_lossage ("invalid operand output code");
+    }
+
+  switch (GET_CODE (x))
+    {
+    case REG :
+      fputs (reg_names[REGNO (x)], file);
+      break;
+    case MEM :
+      fputc ('[', file);
+      if (GET_CODE (XEXP (x, 0)) == PRE_INC)
+       output_address (plus_constant (XEXP (XEXP (x, 0), 0),
+                                      GET_MODE_SIZE (GET_MODE (x))));
+      else if (GET_CODE (XEXP (x, 0)) == PRE_DEC)
+       output_address (plus_constant (XEXP (XEXP (x, 0), 0),
+                                      - GET_MODE_SIZE (GET_MODE (x))));
+      else
+       output_address (XEXP (x, 0));
+      fputc (']', file);
+      break;
+    case CONST_DOUBLE :
+      /* We handle SFmode constants here as output_addr_const doesn't.  */
+      if (GET_MODE (x) == SFmode)
+       {
+         REAL_VALUE_TYPE d;
+         long l;
+
+         REAL_VALUE_FROM_CONST_DOUBLE (d, x);
+         REAL_VALUE_TO_TARGET_SINGLE (d, l);
+         fprintf (file, "0x%08lx", l);
+         break;
+       }
+      /* Fall through.  Let output_addr_const deal with it.  */
+    default :
+      output_addr_const (file, x);
+      break;
+    }
+}
+
+/* Print a memory address as an operand to reference that memory location.  */
+
+void
+arc_print_operand_address (file, addr)
+     FILE *file;
+     rtx addr;
+{
+  register rtx base, index = 0;
+  int offset = 0;
+
+  switch (GET_CODE (addr))
+    {
+    case REG :
+      fputs (reg_names[REGNO (addr)], file);
+      break;
+    case SYMBOL_REF :
+      if (/*???*/ 0 && SYMBOL_REF_FLAG (addr))
+       {
+         fprintf (file, "%%st(");
+         output_addr_const (file, addr);
+         fprintf (file, ")");
+       }
+      else
+       output_addr_const (file, addr);
+      break;
+    case PLUS :
+      if (GET_CODE (XEXP (addr, 0)) == CONST_INT)
+       offset = INTVAL (XEXP (addr, 0)), base = XEXP (addr, 1);
+      else if (GET_CODE (XEXP (addr, 1)) == CONST_INT)
+       offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);
+      else
+       base = XEXP (addr, 0), index = XEXP (addr, 1);
+      if (GET_CODE (base) != REG)
+       abort ();
+      fputs (reg_names[REGNO (base)], file);
+      if (index == 0)
+       {
+         if (offset != 0)
+           fprintf (file, ",%d", offset);
+       }
+      else if (GET_CODE (index) == REG)
+       fprintf (file, ",%s", reg_names[REGNO (index)]);
+      else if (GET_CODE (index) == SYMBOL_REF)
+       fputc (',', file), output_addr_const (file, index);
+      else
+       abort ();
+      break;
+    case PRE_INC :
+    case PRE_DEC :
+      /* We shouldn't get here as we've lost the mode of the memory object
+        (which says how much to inc/dec by.  */
+      abort ();
+      break;
+    default :
+      output_addr_const (file, addr);
+      break;
+    }
+}
+
+/* Update compare/branch separation marker.  */
+
+static void
+record_cc_ref (insn)
+     rtx insn;
+{
+  last_insn_set_cc_p = current_insn_set_cc_p;
+
+  switch (get_attr_cond (insn))
+    {
+    case COND_SET :
+    case COND_SET_ZN :
+    case COND_SET_ZNC :
+      if (get_attr_length (insn) == 1)
+       current_insn_set_cc_p = 1;
+      else
+       current_insn_set_cc_p = 0;
+      break;
+    default :
+      current_insn_set_cc_p = 0;
+      break;
+    }
+}
+\f
+/* Conditional execution support.
+
+   This is based on the ARM port but for now is much simpler.
+
+   A finite state machine takes care of noticing whether or not instructions
+   can be conditionally executed, and thus decrease execution time and code
+   size by deleting branch instructions.  The fsm is controlled by
+   final_prescan_insn, and controls the actions of PRINT_OPERAND.  The patterns
+   in the .md file for the branch insns also have a hand in this.  */
+
+/* The state of the fsm controlling condition codes are:
+   0: normal, do nothing special
+   1: don't output this insn
+   2: don't output this insn
+   3: make insns conditional
+   4: make insns conditional
+
+   State transitions (state->state by whom, under what condition):
+   0 -> 1 final_prescan_insn, if insn is conditional branch
+   0 -> 2 final_prescan_insn, if the `target' is an unconditional branch
+   1 -> 3 branch patterns, after having not output the conditional branch
+   2 -> 4 branch patterns, after having not output the conditional branch
+   3 -> 0 ASM_OUTPUT_INTERNAL_LABEL, if the `target' label is reached
+          (the target label has CODE_LABEL_NUMBER equal to
+         arc_ccfsm_target_label).
+   4 -> 0 final_prescan_insn, if `target' unconditional branch is reached
+
+   If the jump clobbers the conditions then we use states 2 and 4.
+
+   A similar thing can be done with conditional return insns.
+
+   We also handle separating branches from sets of the condition code.
+   This is done here because knowledge of the ccfsm state is required,
+   we may not be outputting the branch.  */
+
+void
+arc_final_prescan_insn (insn, opvec, noperands)
+     rtx insn;
+     rtx *opvec;
+     int noperands;
+{
+  /* BODY will hold the body of INSN.  */
+  register rtx body = PATTERN (insn);
+
+  /* This will be 1 if trying to repeat the trick (ie: do the `else' part of
+     an if/then/else), and things need to be reversed.  */
+  int reverse = 0;
+
+  /* If we start with a return insn, we only succeed if we find another one. */
+  int seeking_return = 0;
+  
+  /* START_INSN will hold the insn from where we start looking.  This is the
+     first insn after the following code_label if REVERSE is true.  */
+  rtx start_insn = insn;
+
+  /* Update compare/branch separation marker.  */
+  record_cc_ref (insn);
+
+  /* Allow -mdebug-ccfsm to turn this off so we can see how well it does.
+     We can't do this in macro FINAL_PRESCAN_INSN because it's called from
+     final_scan_insn which has `optimize' as a local.  */
+  if (optimize < 2 || TARGET_NO_COND_EXEC)
+    return;
+
+  /* If in state 4, check if the target branch is reached, in order to
+     change back to state 0.  */
+  if (arc_ccfsm_state == 4)
+    {
+      if (insn == arc_ccfsm_target_insn)
+       {
+         arc_ccfsm_target_insn = NULL;
+         arc_ccfsm_state = 0;
+       }
+      return;
+    }
+
+  /* If in state 3, it is possible to repeat the trick, if this insn is an
+     unconditional branch to a label, and immediately following this branch
+     is the previous target label which is only used once, and the label this
+     branch jumps to is not too far off.  Or in other words "we've done the
+     `then' part, see if we can do the `else' part."  */
+  if (arc_ccfsm_state == 3)
+    {
+      if (simplejump_p (insn))
+       {
+         start_insn = next_nonnote_insn (start_insn);
+         if (GET_CODE (start_insn) == BARRIER)
+           {
+             /* ??? Isn't this always a barrier?  */
+             start_insn = next_nonnote_insn (start_insn);
+           }
+         if (GET_CODE (start_insn) == CODE_LABEL
+             && CODE_LABEL_NUMBER (start_insn) == arc_ccfsm_target_label
+             && LABEL_NUSES (start_insn) == 1)
+           reverse = TRUE;
+         else
+           return;
+       }
+      else if (GET_CODE (body) == RETURN)
+        {
+         start_insn = next_nonnote_insn (start_insn);
+         if (GET_CODE (start_insn) == BARRIER)
+           start_insn = next_nonnote_insn (start_insn);
+         if (GET_CODE (start_insn) == CODE_LABEL
+             && CODE_LABEL_NUMBER (start_insn) == arc_ccfsm_target_label
+             && LABEL_NUSES (start_insn) == 1)
+           {
+             reverse = TRUE;
+             seeking_return = 1;
+           }
+         else
+           return;
+        }
+      else
+       return;
+    }
+
+  if (GET_CODE (insn) != JUMP_INSN)
+    return;
+
+  /* This jump might be paralled with a clobber of the condition codes,
+     the jump should always come first.  */
+  if (GET_CODE (body) == PARALLEL && XVECLEN (body, 0) > 0)
+    body = XVECEXP (body, 0, 0);
+
+  if (reverse
+      || (GET_CODE (body) == SET && GET_CODE (SET_DEST (body)) == PC
+         && GET_CODE (SET_SRC (body)) == IF_THEN_ELSE))
+    {
+      int insns_skipped = 0, fail = FALSE, succeed = FALSE;
+      /* Flag which part of the IF_THEN_ELSE is the LABEL_REF.  */
+      int then_not_else = TRUE;
+      /* Nonzero if next insn must be the target label.  */
+      int next_must_be_target_label_p;
+      rtx this_insn = start_insn, label = 0;
+
+      /* Register the insn jumped to.  */
+      if (reverse)
+        {
+         if (!seeking_return)
+           label = XEXP (SET_SRC (body), 0);
+        }
+      else if (GET_CODE (XEXP (SET_SRC (body), 1)) == LABEL_REF)
+       label = XEXP (XEXP (SET_SRC (body), 1), 0);
+      else if (GET_CODE (XEXP (SET_SRC (body), 2)) == LABEL_REF)
+       {
+         label = XEXP (XEXP (SET_SRC (body), 2), 0);
+         then_not_else = FALSE;
+       }
+      else if (GET_CODE (XEXP (SET_SRC (body), 1)) == RETURN)
+       seeking_return = 1;
+      else if (GET_CODE (XEXP (SET_SRC (body), 2)) == RETURN)
+        {
+         seeking_return = 1;
+         then_not_else = FALSE;
+        }
+      else
+       abort ();
+
+      /* See how many insns this branch skips, and what kind of insns.  If all
+        insns are okay, and the label or unconditional branch to the same
+        label is not too far away, succeed.  */
+      for (insns_skipped = 0, next_must_be_target_label_p = FALSE;
+          !fail && !succeed && insns_skipped < MAX_INSNS_SKIPPED;
+          insns_skipped++)
+       {
+         rtx scanbody;
+
+         this_insn = next_nonnote_insn (this_insn);
+         if (!this_insn)
+           break;
+
+         if (next_must_be_target_label_p)
+           {
+             if (GET_CODE (this_insn) == BARRIER)
+               continue;
+             if (GET_CODE (this_insn) == CODE_LABEL
+                 && this_insn == label)
+               {
+                 arc_ccfsm_state = 1;
+                 succeed = TRUE;
+               }
+             else
+               fail = TRUE;
+             break;
+           }
+
+         scanbody = PATTERN (this_insn);
+
+         switch (GET_CODE (this_insn))
+           {
+           case CODE_LABEL:
+             /* Succeed if it is the target label, otherwise fail since
+                control falls in from somewhere else.  */
+             if (this_insn == label)
+               {
+                 arc_ccfsm_state = 1;
+                 succeed = TRUE;
+               }
+             else
+               fail = TRUE;
+             break;
+
+           case BARRIER:
+             /* Succeed if the following insn is the target label.
+                Otherwise fail.  
+                If return insns are used then the last insn in a function 
+                will be a barrier. */
+             next_must_be_target_label_p = TRUE;
+             break;
+
+           case CALL_INSN:
+             /* Can handle a call insn if there are no insns after it.
+                IE: The next "insn" is the target label.  We don't have to
+                worry about delay slots as such insns are SEQUENCE's inside
+                INSN's.  ??? It is possible to handle such insns though.  */
+             if (get_attr_cond (this_insn) == COND_CANUSE)
+               next_must_be_target_label_p = TRUE;
+             else
+               fail = TRUE;
+             break;
+
+           case JUMP_INSN:
+             /* If this is an unconditional branch to the same label, succeed.
+                If it is to another label, do nothing.  If it is conditional,
+                fail.  */
+             /* ??? Probably, the test for the SET and the PC are unnecessary. */
+
+             if (GET_CODE (scanbody) == SET
+                 && GET_CODE (SET_DEST (scanbody)) == PC)
+               {
+                 if (GET_CODE (SET_SRC (scanbody)) == LABEL_REF
+                     && XEXP (SET_SRC (scanbody), 0) == label && !reverse)
+                   {
+                     arc_ccfsm_state = 2;
+                     succeed = TRUE;
+                   }
+                 else if (GET_CODE (SET_SRC (scanbody)) == IF_THEN_ELSE)
+                   fail = TRUE;
+               }
+             else if (GET_CODE (scanbody) == RETURN
+                      && seeking_return)
+               {
+                 arc_ccfsm_state = 2;
+                 succeed = TRUE;
+               }
+             else if (GET_CODE (scanbody) == PARALLEL)
+               {
+                 if (get_attr_cond (this_insn) != COND_CANUSE)
+                   fail = TRUE;
+               }
+             break;
+
+           case INSN:
+             /* We can only do this with insns that can use the condition
+                codes (and don't set them).  */
+             if (GET_CODE (scanbody) == SET
+                 || GET_CODE (scanbody) == PARALLEL)
+               {
+                 if (get_attr_cond (this_insn) != COND_CANUSE)
+                   fail = TRUE;
+               }
+             /* We can't handle other insns like sequences.  */
+             else
+               fail = TRUE;
+             break;
+
+           default:
+             break;
+           }
+       }
+
+      if (succeed)
+       {
+         if ((!seeking_return) && (arc_ccfsm_state == 1 || reverse))
+           arc_ccfsm_target_label = CODE_LABEL_NUMBER (label);
+         else if (seeking_return || arc_ccfsm_state == 2)
+           {
+             while (this_insn && GET_CODE (PATTERN (this_insn)) == USE)
+               {
+                 this_insn = next_nonnote_insn (this_insn);
+                 if (this_insn && (GET_CODE (this_insn) == BARRIER
+                                   || GET_CODE (this_insn) == CODE_LABEL))
+                   abort ();
+               }
+             if (!this_insn)
+               {
+                 /* Oh dear! we ran off the end, give up.  */
+                 insn_extract (insn);
+                 arc_ccfsm_state = 0;
+                 arc_ccfsm_target_insn = NULL;
+                 return;
+               }
+             arc_ccfsm_target_insn = this_insn;
+           }
+         else
+           abort ();
+
+         /* If REVERSE is true, ARM_CURRENT_CC needs to be inverted from
+            what it was.  */
+         if (!reverse)
+           arc_ccfsm_current_cc = get_arc_condition_code (XEXP (SET_SRC (body),
+                                                                0));
+
+         if (reverse || then_not_else)
+           arc_ccfsm_current_cc = ARC_INVERSE_CONDITION_CODE (arc_ccfsm_current_cc);
+       }
+
+      /* Restore recog_operand.  Getting the attributes of other insns can
+        destroy this array, but final.c assumes that it remains intact
+        accross this call; since the insn has been recognized already we
+        call insn_extract direct. */
+      insn_extract (insn);
+    }
+}
+
+/* Record that we are currently outputting label NUM with prefix PREFIX.
+   It it's the label we're looking for, reset the ccfsm machinery.
+
+   Called from ASM_OUTPUT_INTERNAL_LABEL.  */
+
+void
+arc_ccfsm_at_label (prefix, num)
+     char *prefix;
+     int num;
+{
+  if (arc_ccfsm_state == 3 && arc_ccfsm_target_label == num
+      && !strcmp (prefix, "L"))
+    {
+      arc_ccfsm_state = 0;
+      arc_ccfsm_target_insn = NULL_RTX;
+    }
+}
+
+/* See if the current insn, which is a conditional branch, is to be
+   deleted.  */
+
+int
+arc_ccfsm_branch_deleted_p ()
+{
+  if (arc_ccfsm_state == 1 || arc_ccfsm_state == 2)
+    return 1;
+  return 0;
+}
+
+/* Record a branch isn't output because subsequent insns can be
+   conditionalized.  */
+
+void
+arc_ccfsm_record_branch_deleted ()
+{
+  /* Indicate we're conditionalizing insns now.  */
+  arc_ccfsm_state += 2;
+
+  /* If the next insn is a subroutine call, we still need a nop between the
+     cc setter and user.  We need to undo the effect of calling record_cc_ref
+     for the just deleted branch.  */
+  current_insn_set_cc_p = last_insn_set_cc_p;
+}
diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h
new file mode 100644 (file)
index 0000000..d92fbdc
--- /dev/null
@@ -0,0 +1,1643 @@
+/* Definitions of target machine for GNU compiler, for the ARC cpu.
+   Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* ??? This is an old port, and is undoubtedly suffering from bit rot.  */
+
+/* Things to do:
+
+   - PREDICATE_CODES
+   - incscc, decscc?
+   - print active compiler options in assembler output
+*/
+
+/* FIXME: Create elf.h and have svr4.h include it.  */
+#include "svr4.h"
+
+#undef ASM_SPEC
+#undef LINK_SPEC
+#undef STARTFILE_SPEC
+#undef ENDFILE_SPEC
+#undef SIZE_TYPE
+#undef PTRDIFF_TYPE
+#undef WCHAR_TYPE
+#undef WCHAR_TYPE_SIZE
+\f
+/* Print subsidiary information on the compiler version in use.  */
+#define TARGET_VERSION fprintf (stderr, " (arc)")
+
+/* Names to predefine in the preprocessor for this target machine.  */
+#define CPP_PREDEFINES "-Acpu(arc) -Amachine(arc) -D__arc__"
+
+/* Additional flags for the preprocessor.  */
+#define CPP_SPEC "\
+%{!mcpu=*:-D__base__} %{mcpu=base:-D__base__} \
+%{EB:-D__big_endian__} \
+"
+
+/* Pass -mmangle-cpu if we get -mcpu=*.
+   Doing it this way lets one have it on as default with -mcpu=*,
+   but also lets one turn it off with -mno-mangle-cpu.  */
+#define CC1_SPEC "\
+%{mcpu=*:-mmangle-cpu} \
+%{EB:%{EL:%emay not use both -EB and -EL}} \
+%{EB:-mbig-endian} %{EL:-mlittle-endian} \
+"
+
+#define ASM_SPEC "%{v} %{EB} %{EL}"
+
+#define LINK_SPEC "%{v} %{EB} %{EL}"
+
+#define STARTFILE_SPEC "%{!shared:crt0.o%s} crtinit.o%s"
+
+#define ENDFILE_SPEC "crtfini.o%s"
+\f
+/* Run-time compilation parameters selecting different hardware subsets.  */
+
+extern int target_flags;
+
+/* Mangle all user symbols for the specified cpu.
+   ARC's can be shipped in which a collection of cpus are coupled together.
+   Each CPU may be different in some way, and thus we may need to distinguish
+   code compiled for one to ensure it isn't linked with code compiled for
+   another.  */
+#define TARGET_MASK_MANGLE_CPU 1
+#define TARGET_MANGLE_CPU (target_flags & TARGET_MASK_MANGLE_CPU)
+
+#if 0
+/* Mangle libgcc symbols by adding a suffix for the specified cpu.  */
+#define TARGET_MASK_MANGLE_CPU_LIBGCC 2
+#define TARGET_MANGLE_CPU_LIBGCC (target_flags & TARGET_MASK_MANGLE_CPU_LIBGCC)
+#endif
+
+/* Align loops to 32 byte boundaries (cache line size).  */
+#define TARGET_MASK_ALIGN_LOOPS 4
+#define TARGET_ALIGN_LOOPS (target_flags & TARGET_MASK_ALIGN_LOOPS)
+
+/* Big Endian.  */
+#define TARGET_MASK_BIG_ENDIAN 8
+#define TARGET_BIG_ENDIAN (target_flags & TARGET_MASK_BIG_ENDIAN)
+
+/* Turn off conditional execution optimization,
+   so we can see how well it does, or in case it's buggy.  */
+#define TARGET_MASK_NO_COND_EXEC 0x10
+#define TARGET_NO_COND_EXEC (target_flags & TARGET_MASK_NO_COND_EXEC)
+
+/* Macro to define tables used to set the flags.
+   This is a list in braces of pairs in braces,
+   each pair being { "NAME", VALUE }
+   where VALUE is the bits to set or minus the bits to clear.
+   An empty string NAME is used to identify the default VALUE.  */
+
+#define TARGET_SWITCHES \
+{ \
+    { "mangle-cpu",            TARGET_MASK_MANGLE_CPU },               \
+    { "no-mangle-cpu",         -TARGET_MASK_MANGLE_CPU },              \
+/*  { "mangle-cpu-libgcc",     TARGET_MASK_MANGLE_CPU_LIBGCC }, */     \
+/*  { "no-mangle-cpu-libgcc",  -TARGET_MASK_MANGLE_CPU_LIBGCC }, */    \
+    { "align-loops",           TARGET_MASK_ALIGN_LOOPS },              \
+    { "no-align-loops",                -TARGET_MASK_ALIGN_LOOPS },             \
+    { "big-endian",            TARGET_MASK_BIG_ENDIAN },               \
+    { "little-endian",         -TARGET_MASK_BIG_ENDIAN },              \
+    { "no-cond-exec",          TARGET_MASK_NO_COND_EXEC },             \
+    SUBTARGET_SWITCHES                                                 \
+    { "", TARGET_DEFAULT }                                             \
+}
+
+#define TARGET_DEFAULT (0)
+
+#define SUBTARGET_SWITCHES
+
+/* Instruction set characteristics.
+   These are internal macros, set by the appropriate -mcpu= option.  */
+
+/* Non-zero means the cpu has a barrel shifter.  */
+#define TARGET_SHIFTER 0
+
+/* This macro is similar to `TARGET_SWITCHES' but defines names of
+   command options that have values.  Its definition is an
+   initializer with a subgrouping for each command option.
+
+   Each subgrouping contains a string constant, that defines the
+   fixed part of the option name, and the address of a variable. 
+   The variable, type `char *', is set to the variable part of the
+   given option if the fixed part matches.  The actual option name
+   is made by appending `-m' to the specified name.
+
+   Here is an example which defines `-mshort-data-NUMBER'.  If the
+   given option is `-mshort-data-512', the variable `m88k_short_data'
+   will be set to the string `"512"'.
+
+       extern char *m88k_short_data;
+       #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } }  */
+
+extern char *arc_cpu_string;
+extern char *arc_text_string,*arc_data_string,*arc_rodata_string;
+
+#define TARGET_OPTIONS \
+{                                              \
+  { "cpu=",    &arc_cpu_string         },      \
+  { "text=",   &arc_text_string        },      \
+  { "data=",   &arc_data_string        },      \
+  { "rodata=", &arc_rodata_string      },      \
+}
+
+/* Which cpu we're compiling for.  */
+extern int arc_cpu_type;
+
+/* Check if CPU is an extension and set `arc_cpu_type' and `arc_mangle_cpu'
+   appropriately.  The result should be non-zero if the cpu is recognized,
+   otherwise zero.  This is intended to be redefined in a cover file.
+   This is used by arc_init.  */
+#define ARC_EXTENSION_CPU(cpu) 0
+
+/* Sometimes certain combinations of command options do not make
+   sense on a particular target machine.  You can define a macro
+   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
+   defined, is executed once just after all the command options have
+   been parsed.
+
+   Don't use this macro to turn on various extra optimizations for
+   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.  */
+
+extern void arc_init ();
+
+#define OVERRIDE_OPTIONS \
+do {                           \
+  /* These need to be done at start up.  It's convenient to do them here.  */ \
+  arc_init ();                 \
+} while (0)
+\f
+/* Target machine storage layout.  */
+
+/* Define to use software floating point emulator for REAL_ARITHMETIC and
+   decimal <-> binary conversion. */
+#define REAL_ARITHMETIC
+
+/* Define this if most significant bit is lowest numbered
+   in instructions that operate on numbered bit-fields.  */
+#define BITS_BIG_ENDIAN 1
+
+/* Define this if most significant byte of a word is the lowest numbered.  */
+#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN)
+
+/* Define this if most significant word of a multiword number is the lowest
+   numbered.  */
+#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN)
+
+/* Define this to set the endianness to use in libgcc2.c, which can
+   not depend on target_flags.  */
+#ifdef __big_endian__
+#define LIBGCC2_WORDS_BIG_ENDIAN 1
+#else
+#define LIBGCC2_WORDS_BIG_ENDIAN 0
+#endif
+
+/* Number of bits in an addressable storage unit.  */
+#define BITS_PER_UNIT 8
+
+/* Width in bits of a "word", which is the contents of a machine register.
+   Note that this is not necessarily the width of data type `int';
+   if using 16-bit ints on a 68000, this would still be 32.
+   But on a machine with 16-bit registers, this would be 16.  */
+#define BITS_PER_WORD 32
+
+/* Width of a word, in units (bytes).  */
+#define UNITS_PER_WORD 4
+
+/* Define this macro if it is advisable to hold scalars in registers
+   in a wider mode than that declared by the program.  In such cases, 
+   the value is constrained to be within the bounds of the declared
+   type, but kept valid in the wider mode.  The signedness of the
+   extension may differ from that of the type.  */
+#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \
+if (GET_MODE_CLASS (MODE) == MODE_INT          \
+    && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)  \
+{                                              \
+  (MODE) = SImode;                             \
+}
+
+/* Define this macro if the promotion described by `PROMOTE_MODE'
+   should also be done for outgoing function arguments.  */
+#define PROMOTE_FUNCTION_ARGS
+
+/* Likewise, if the function return value is promoted.  */
+#define PROMOTE_FUNCTION_RETURN
+
+/* Width in bits of a pointer.
+   See also the macro `Pmode' defined below.  */
+#define POINTER_SIZE 32
+
+/* Allocation boundary (in *bits*) for storing arguments in argument list.  */
+#define PARM_BOUNDARY 32
+
+/* Boundary (in *bits*) on which stack pointer should be aligned.  */
+#define STACK_BOUNDARY 64
+
+/* ALIGN FRAMES on word boundaries */
+#define ARC_STACK_ALIGN(LOC) (((LOC)+7) & ~7)
+
+/* Allocation boundary (in *bits*) for the code of a function.  */
+#define FUNCTION_BOUNDARY 32
+
+/* Alignment of field after `int : 0' in a structure.  */
+#define EMPTY_FIELD_BOUNDARY 32
+
+/* Every structure's size must be a multiple of this.  */
+#define STRUCTURE_SIZE_BOUNDARY 8
+
+/* A bitfield declared as `int' forces `int' alignment for the struct.  */
+#define PCC_BITFIELD_TYPE_MATTERS 1
+
+/* No data type wants to be aligned rounder than this.  */
+/* This is bigger than currently necessary for the ARC.  If 8 byte floats are
+   ever added it's not clear whether they'll need such alignment or not.  For
+   now we assume they will.  We can always relax it if necessary but the
+   reverse isn't true.  */
+#define BIGGEST_ALIGNMENT 64
+
+/* The best alignment to use in cases where we have a choice.  */
+#define FASTEST_ALIGNMENT 32
+
+/* Make strings word-aligned so strcpy from constants will be faster.  */
+#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
+  ((TREE_CODE (EXP) == STRING_CST      \
+    && (ALIGN) < FASTEST_ALIGNMENT)    \
+   ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make arrays of chars word-aligned for the same reasons.  */
+#define DATA_ALIGNMENT(TYPE, ALIGN)            \
+  (TREE_CODE (TYPE) == ARRAY_TYPE              \
+   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode   \
+   && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Set this nonzero if move instructions will actually fail to work
+   when given unaligned data.  */
+/* On the ARC the lower address bits are masked to 0 as necessary.  The chip
+   won't croak when given an unaligned address, but the insn will still fail
+   to produce the correct result.  */
+#define STRICT_ALIGNMENT 1
+\f
+/* Layout of source language data types.  */
+
+#define SHORT_TYPE_SIZE                16
+#define INT_TYPE_SIZE          32
+#define LONG_TYPE_SIZE         32
+#define LONG_LONG_TYPE_SIZE    64
+#define FLOAT_TYPE_SIZE                32
+#define DOUBLE_TYPE_SIZE       64
+#define LONG_DOUBLE_TYPE_SIZE  64
+
+/* Define this as 1 if `char' should by default be signed; else as 0.  */
+#define DEFAULT_SIGNED_CHAR 1
+
+#define SIZE_TYPE "long unsigned int"
+#define PTRDIFF_TYPE "long int"
+#define WCHAR_TYPE "short unsigned int"
+#define WCHAR_TYPE_SIZE 16
+
+/* Define results of standard character escape sequences.  */
+#define TARGET_BELL 007
+#define TARGET_BS 010
+#define TARGET_TAB 011
+#define TARGET_NEWLINE 012
+#define TARGET_VT 013
+#define TARGET_FF 014
+#define TARGET_CR 015
+\f
+/* Standard register usage.  */
+
+/* Number of actual hardware registers.
+   The hardware registers are assigned numbers for the compiler
+   from 0 to just below FIRST_PSEUDO_REGISTER.
+   All registers that the compiler knows about must be given numbers,
+   even those that are not normally considered general registers.  */
+/* Registers 61, 62, and 63 are not really registers and we needn't treat
+   them as such.  We still need a register for the condition code.  */
+#define FIRST_PSEUDO_REGISTER 62
+
+/* 1 for registers that have pervasive standard uses
+   and are not available for the register allocator.
+
+   0-28  - general purpose registers
+   29    - ilink1 (interrupt link register)
+   30    - ilink2 (interrupt link register)
+   31    - blink (branch link register)
+   32-59 - reserved for extensions
+   60    - LP_COUNT
+   61    - condition code
+
+   For doc purposes:
+   61    - short immediate data indicator (setting flags)
+   62    - long immediate data indicator
+   63    - short immediate data indicator (not setting flags).
+
+   The general purpose registers are further broken down into:
+   0-7   - arguments/results
+   8-15  - call used
+   16-23 - call saved
+   24    - call used, static chain pointer
+   25    - call used, gptmp
+   26    - global pointer
+   27    - frame pointer
+   28    - stack pointer
+
+   By default, the extension registers are not available.  */
+
+#define FIXED_REGISTERS \
+{ 0, 0, 0, 0, 0, 0, 0, 0,      \
+  0, 0, 0, 0, 0, 0, 0, 0,      \
+  0, 0, 0, 0, 0, 0, 0, 0,      \
+  0, 0, 0, 1, 1, 1, 1, 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 for registers not available across function calls.
+   These must include the FIXED_REGISTERS and also any
+   registers that can be used without being saved.
+   The latter must include the registers where values are returned
+   and the register where structure-value addresses are passed.
+   Aside from that, you can include as many other registers as you like.  */
+
+#define CALL_USED_REGISTERS \
+{ 1, 1, 1, 1, 1, 1, 1, 1,      \
+  1, 1, 1, 1, 1, 1, 1, 1,      \
+  0, 0, 0, 0, 0, 0, 0, 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 }
+
+/* If defined, an initializer for a vector of integers, containing the
+   numbers of hard registers in the order in which GNU CC should
+   prefer to use them (from most preferred to least).  */
+#define REG_ALLOC_ORDER \
+{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1,                        \
+  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 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,              \
+  27, 28, 29, 30 }
+
+/* Return number of consecutive hard regs needed starting at reg REGNO
+   to hold something of mode MODE.
+   This is ordinarily the length in words of a value of mode MODE
+   but can be less for certain modes in special long registers.  */
+#define HARD_REGNO_NREGS(REGNO, MODE) \
+((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.  */
+extern unsigned int arc_hard_regno_mode_ok[];
+extern unsigned int arc_mode_class[];
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+((arc_hard_regno_mode_ok[REGNO] & arc_mode_class[MODE]) != 0)
+
+/* A C expression that is nonzero if it is desirable to choose
+   register allocation so as to avoid move instructions between a
+   value of mode MODE1 and a value of mode MODE2.
+
+   If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R,
+   MODE2)' are ever different for any R, then `MODES_TIEABLE_P (MODE1,
+   MODE2)' must be zero.  */
+
+/* Tie QI/HI/SI modes together.  */
+#define MODES_TIEABLE_P(MODE1, MODE2) \
+(GET_MODE_CLASS (MODE1) == MODE_INT            \
+ && GET_MODE_CLASS (MODE2) == MODE_INT         \
+ && GET_MODE_SIZE (MODE1) <= UNITS_PER_WORD    \
+ && GET_MODE_SIZE (MODE2) <= UNITS_PER_WORD)
+\f
+/* Register classes and constants.  */
+
+/* Define the classes of registers for register constraints in the
+   machine description.  Also define ranges of constants.
+
+   One of the classes must always be named ALL_REGS and include all hard regs.
+   If there is more than one class, another class must be named NO_REGS
+   and contain no registers.
+
+   The name GENERAL_REGS must be the name of a class (or an alias for
+   another name such as ALL_REGS).  This is the class of registers
+   that is allowed by "g" or "r" in a register constraint.
+   Also, registers outside this class are allocated only when
+   instructions express preferences for them.
+
+   The classes must be numbered in nondecreasing order; that is,
+   a larger-numbered class must never be contained completely
+   in a smaller-numbered class.
+
+   For any two classes, it is very desirable that there be another
+   class that represents their union.
+
+   It is important that any condition codes have class NO_REGS.
+   See `register_operand'.  */
+
+enum reg_class {
+  NO_REGS, LPCOUNT_REG, GENERAL_REGS, ALL_REGS, LIM_REG_CLASSES
+};
+
+#define N_REG_CLASSES (int) LIM_REG_CLASSES
+
+/* Give names of register classes as strings for dump file.   */
+#define REG_CLASS_NAMES \
+{ "NO_REGS", "LPCOUNT_REG", "GENERAL_REGS", "ALL_REGS" }
+
+/* Define which registers fit in which classes.
+   This is an initializer for a vector of HARD_REG_SET
+   of length N_REG_CLASSES.  */
+
+#define REG_CLASS_CONTENTS \
+{ {0, 0}, {0, 0x10000000}, {0xffffffff, 0xfffffff}, \
+  {0xffffffff, 0x1fffffff} }
+
+/* The same information, inverted:
+   Return the class number of the smallest class containing
+   reg number REGNO.  This could be a conditional expression
+   or could index an array.  */
+extern enum reg_class arc_regno_reg_class[];
+#define REGNO_REG_CLASS(REGNO) \
+(arc_regno_reg_class[REGNO])
+
+/* The class value for index registers, and the one for base regs.  */
+#define INDEX_REG_CLASS GENERAL_REGS
+#define BASE_REG_CLASS GENERAL_REGS
+
+/* Get reg_class from a letter such as appears in the machine description.  */
+#define REG_CLASS_FROM_LETTER(C) \
+((C) == 'l' ? LPCOUNT_REG /* ??? needed? */ \
+ : NO_REGS)
+
+/* These assume that REGNO is a hard or pseudo reg number.
+   They give nonzero only if REGNO is a hard reg of the suitable class
+   or a pseudo reg currently allocated to a suitable hard reg.
+   Since they use reg_renumber, they are safe only once reg_renumber
+   has been allocated, which happens in local-alloc.c.  */
+#define REGNO_OK_FOR_BASE_P(REGNO) \
+((REGNO) < 29 || (unsigned) reg_renumber[REGNO] < 29)
+#define REGNO_OK_FOR_INDEX_P(REGNO) \
+((REGNO) < 29 || (unsigned) reg_renumber[REGNO] < 29)
+
+/* Given an rtx X being reloaded into a reg required to be
+   in class CLASS, return the class of reg to actually use.
+   In general this is just CLASS; but on some machines
+   in some cases it is preferable to use a more restrictive class.  */
+#define PREFERRED_RELOAD_CLASS(X,CLASS) \
+(CLASS)
+
+/* Return the maximum number of consecutive registers
+   needed to represent mode MODE in a register of class CLASS.  */
+#define CLASS_MAX_NREGS(CLASS, MODE) \
+((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* The letters I, J, K, L, M, N, O, P in a register constraint string
+   can be used to stand for particular ranges of immediate operands.
+   This macro defines what the ranges are.
+   C is the letter, and VALUE is a constant value.
+   Return 1 if VALUE is in the range specified by C.  */
+/* 'I' is used for short immediates (always signed).
+   'J' is used for long immediates.
+   'K' is used for any constant up to 64 bits (for 64x32 situations?).  */
+
+/* local to this file */
+#define SMALL_INT(X) ((unsigned) ((X) + 0x100) < 0x200)
+/* local to this file */
+#define LARGE_INT(X) \
+((X) >= (-(HOST_WIDE_INT) 0x7fffffff - 1) \
+ && (X) <= (unsigned HOST_WIDE_INT) 0xffffffff)
+
+#define CONST_OK_FOR_LETTER_P(VALUE, C) \
+((C) == 'I' ? SMALL_INT (VALUE)                \
+ : (C) == 'J' ? LARGE_INT (VALUE)      \
+ : (C) == 'K' ? 1                      \
+ : 0)
+
+/* Similar, but for floating constants, and defining letters G and H.
+   Here VALUE is the CONST_DOUBLE rtx itself.  */
+/* 'G' is used for integer values for the multiplication insns where the
+   operands are extended from 4 bytes to 8 bytes.
+   'H' is used when any 64 bit constant is allowed.  */
+#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
+((C) == 'G' ? arc_double_limm_p (VALUE) \
+ : (C) == 'H' ? 1 \
+ : 0)
+
+/* A C expression that defines the optional machine-dependent constraint
+   letters that can be used to segregate specific types of operands,
+   usually memory references, for the target machine.  It should return 1 if
+   VALUE corresponds to the operand type represented by the constraint letter
+   C.  If C is not defined as an extra constraint, the value returned should
+   be 0 regardless of VALUE.  */
+/* ??? This currently isn't used.  Waiting for PIC.  */
+#if 0
+#define EXTRA_CONSTRAINT(VALUE, C) \
+((C) == 'R' ? (SYMBOL_REF_FLAG (VALUE) || GET_CODE (VALUE) == LABEL_REF) \
+ : 0)
+#endif
+\f
+/* Stack layout and stack pointer usage.  */
+
+/* Define this macro if pushing a word onto the stack moves the stack
+   pointer to a smaller address.  */
+#define STACK_GROWS_DOWNWARD
+
+/* Define this if the nominal address of the stack frame
+   is at the high-address end of the local variables;
+   that is, each additional local variable allocated
+   goes at a more negative offset in the frame.  */
+#define FRAME_GROWS_DOWNWARD
+
+/* Offset within stack frame to start allocating local variables at.
+   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
+   first local allocated.  Otherwise, it is the offset to the BEGINNING
+   of the first local allocated.  */
+#define STARTING_FRAME_OFFSET 0
+
+/* Offset from the stack pointer register to the first location at which
+   outgoing arguments are placed.  */
+#define STACK_POINTER_OFFSET FIRST_PARM_OFFSET (0)
+
+/* Offset of first parameter from the argument pointer register value.  */
+/* 4 bytes for each of previous fp, return address, and previous gp.
+   4 byte reserved area for future considerations.  */
+#define FIRST_PARM_OFFSET(FNDECL) 16
+
+/* A C expression whose value is RTL representing the address in a
+   stack frame where the pointer to the caller's frame is stored.
+   Assume that FRAMEADDR is an RTL expression for the address of the
+   stack frame itself.
+
+   If you don't define this macro, the default is to return the value
+   of FRAMEADDR--that is, the stack frame address is also the address
+   of the stack word that points to the previous frame.  */
+/* FIXME: unfinished */
+/*define DYNAMIC_CHAIN_ADDRESS (FRAMEADDR)*/
+
+/* A C expression whose value is RTL representing the value of the
+   return address for the frame COUNT steps up from the current frame.
+   FRAMEADDR is the frame pointer of the COUNT frame, or the frame
+   pointer of the COUNT - 1 frame if `RETURN_ADDR_IN_PREVIOUS_FRAME'
+   is defined.  */
+/* The current return address is in r31.  The return address of anything
+   farther back is at [%fp,4].  */
+#if 0 /* The default value should work.  */
+#define RETURN_ADDR_RTX(COUNT, FRAME) \
+(((COUNT) == -1)                               \
+ ? gen_rtx (REG, Pmode, 31)                    \
+ : copy_to_reg (gen_rtx (MEM, Pmode,           \
+                        memory_address (Pmode, plus_constant ((FRAME), UNITS_PER_WORD)))))
+#endif
+
+/* Register to use for pushing function arguments.  */
+#define STACK_POINTER_REGNUM 28
+
+/* Base register for access to local variables of the function.  */
+#define FRAME_POINTER_REGNUM 27
+
+/* Base register for access to arguments of the function.  */
+#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
+
+/* Register in which static-chain is passed to a function.  This must
+   not be a register used by the prologue.  */
+#define STATIC_CHAIN_REGNUM 24
+
+/* A C expression which is nonzero if a function must have and use a
+   frame pointer.  This expression is evaluated in the reload pass.
+   If its value is nonzero the function will have a frame pointer.  */
+#define FRAME_POINTER_REQUIRED \
+(current_function_calls_alloca)
+
+/* C statement to store the difference between the frame pointer
+   and the stack pointer values immediately after the function prologue.  */
+#define INITIAL_FRAME_POINTER_OFFSET(VAR) \
+((VAR) = arc_compute_frame_size (get_frame_size ()))
+\f
+/* Function argument passing.  */
+
+/* When a prototype says `char' or `short', really pass an `int'.  */
+#define PROMOTE_PROTOTYPES
+
+/* If defined, the maximum amount of space required for outgoing
+   arguments will be computed and placed into the variable
+   `current_function_outgoing_args_size'.  No space will be pushed
+   onto the stack for each call; instead, the function prologue should
+   increase the stack frame size by this amount.  */
+#define ACCUMULATE_OUTGOING_ARGS
+
+/* Value is the number of bytes of arguments automatically
+   popped when returning from a subroutine call.
+   FUNDECL is the declaration node of the function (as a tree),
+   FUNTYPE is the data type of the function (as a tree),
+   or for a library call it is an identifier node for the subroutine name.
+   SIZE is the number of bytes of arguments passed on the stack.  */
+#define RETURN_POPS_ARGS(DECL, FUNTYPE, SIZE) 0
+
+/* Define a data type for recording info about an argument list
+   during the scan of that argument list.  This data type should
+   hold all necessary information about the function itself
+   and about the args processed so far, enough to enable macros
+   such as FUNCTION_ARG to determine where the next arg should go.  */
+#define CUMULATIVE_ARGS int
+
+/* Initialize a variable CUM of type CUMULATIVE_ARGS
+   for a call to a function whose data type is FNTYPE.
+   For a library call, FNTYPE is 0.  */
+#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT) \
+((CUM) = 0)
+
+/* The number of registers used for parameter passing.  Local to this file.  */
+#define MAX_ARC_PARM_REGS 8
+
+/* 1 if N is a possible register number for function argument passing.  */
+#define FUNCTION_ARG_REGNO_P(N) \
+((unsigned) (N) < MAX_ARC_PARM_REGS)
+
+/* The ROUND_ADVANCE* macros are local to this file.  */
+/* Round SIZE up to a word boundary.  */
+#define ROUND_ADVANCE(SIZE) \
+(((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Round arg MODE/TYPE up to the next word boundary.  */
+#define ROUND_ADVANCE_ARG(MODE, TYPE) \
+((MODE) == BLKmode                             \
+ ? ROUND_ADVANCE (int_size_in_bytes (TYPE))    \
+ : ROUND_ADVANCE (GET_MODE_SIZE (MODE)))
+
+/* Round CUM up to the necessary point for argument MODE/TYPE.  */
+#define ROUND_ADVANCE_CUM(CUM, MODE, TYPE) \
+((((MODE) == BLKmode ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) \
+  > BITS_PER_WORD)     \
+ ? ((CUM) + 1 & ~1)    \
+ : (CUM))
+
+/* Return boolean indicating arg of type TYPE and mode MODE will be passed in
+   a reg.  This includes arguments that have to be passed by reference as the
+   pointer to them is passed in a reg if one is available (and that is what
+   we're given).
+   When passing arguments NAMED is always 1.  When receiving arguments NAMED
+   is 1 for each argument except the last in a stdarg/varargs function.  In
+   a stdarg function we want to treat the last named arg as named.  In a
+   varargs function we want to treat the last named arg (which is
+   `__builtin_va_alist') as unnamed.
+   This macro is only used in this file.  */
+extern int current_function_varargs;
+#define PASS_IN_REG_P(CUM, MODE, TYPE, NAMED) \
+((!current_function_varargs || (NAMED))                                        \
+ && (CUM) < MAX_ARC_PARM_REGS                                          \
+ && ((ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE))                                \
+      + ROUND_ADVANCE_ARG ((MODE), (TYPE))                             \
+      <= MAX_ARC_PARM_REGS)))
+
+/* Determine where to put an argument to a function.
+   Value is zero to push the argument on the stack,
+   or a hard register in which to store the argument.
+
+   MODE is the argument's machine mode.
+   TYPE is the data type of the argument (as a tree).
+    This is null for libcalls where that information may
+    not be available.
+   CUM is a variable of type CUMULATIVE_ARGS which gives info about
+    the preceding args and about the function being called.
+   NAMED is nonzero if this argument is a named parameter
+    (otherwise it is an extra parameter matching an ellipsis).  */
+/* On the ARC the first MAX_ARC_PARM_REGS args are normally in registers
+   and the rest are pushed.  */
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+(PASS_IN_REG_P ((CUM), (MODE), (TYPE), (NAMED))                                \
+ ? gen_rtx (REG, (MODE), ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)))    \
+ : 0)
+
+/* A C expression for the number of words, at the beginning of an
+   argument, must be put in registers.  The value must be zero for
+   arguments that are passed entirely in registers or that are entirely
+   pushed on the stack.
+
+   On some machines, certain arguments must be passed partially in
+   registers and partially in memory.  On these machines, typically the
+   first @var{n} words of arguments are passed in registers, and the rest
+   on the stack.  If a multi-word argument (a @code{double} or a
+   structure) crosses that boundary, its first few words must be passed
+   in registers and the rest must be pushed.  This macro tells the
+   compiler when this occurs, and how many of the words should go in
+   registers.  */
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
+
+/* A C expression that indicates when an argument must be passed by
+   reference.  If nonzero for an argument, a copy of that argument is
+   made in memory and a pointer to the argument is passed instead of
+   the argument itself.  The pointer is passed in whatever way is
+   appropriate for passing a pointer to that type.  */
+/* All aggregates and arguments greater than 8 bytes are passed this way.  */
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) \
+(TYPE                                  \
+ && (AGGREGATE_TYPE_P (TYPE)           \
+     || int_size_in_bytes (TYPE) > 8))
+
+/* A C expression that indicates when it is the called function's
+   responsibility to make copies of arguments passed by reference.
+   If the callee can determine that the argument won't be modified, it can
+   avoid the copy.  */
+/* ??? We'd love to be able to use NAMED here.  Unfortunately, it doesn't
+   include the last named argument so we keep track of the args ourselves.  */
+
+#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
+FUNCTION_ARG_PASS_BY_REFERENCE ((CUM), (MODE), (TYPE), (NAMED))
+
+/* Update the data in CUM to advance over an argument
+   of mode MODE and data type TYPE.
+   (TYPE is null for libcalls where that information may not be available.)  */
+#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
+((CUM) = (ROUND_ADVANCE_CUM ((CUM), (MODE), (TYPE)) \
+         + ROUND_ADVANCE_ARG ((MODE), (TYPE))))
+
+/* If defined, a C expression that gives the alignment boundary, in bits,
+   of an argument with the specified mode and type.  If it is not defined, 
+   PARM_BOUNDARY is used for all arguments.  */
+#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \
+(((TYPE) ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) <= PARM_BOUNDARY \
+ ? PARM_BOUNDARY \
+ : 2 * PARM_BOUNDARY)
+
+/* This macro offers an alternative
+   to using `__builtin_saveregs' and defining the macro
+   `EXPAND_BUILTIN_SAVEREGS'.  Use it to store the anonymous register
+   arguments into the stack so that all the arguments appear to have
+   been passed consecutively on the stack.  Once this is done, you
+   can use the standard implementation of varargs that works for
+   machines that pass all their arguments on the stack.
+
+   The argument ARGS_SO_FAR is the `CUMULATIVE_ARGS' data structure,
+   containing the values that obtain after processing of the named
+   arguments.  The arguments MODE and TYPE describe the last named
+   argument--its machine mode and its data type as a tree node.
+
+   The macro implementation should do two things: first, push onto the
+   stack all the argument registers *not* used for the named
+   arguments, and second, store the size of the data thus pushed into
+   the `int'-valued variable whose name is supplied as the argument
+   PRETEND_SIZE.  The value that you store here will serve as
+   additional offset for setting up the stack frame.
+
+   If the argument NO_RTL is nonzero, it means that the
+   arguments of the function are being analyzed for the second time.
+   This happens for an inline function, which is not actually
+   compiled until the end of the source file.  The macro
+   `SETUP_INCOMING_VARARGS' should not generate any instructions in
+   this case.  */
+
+#define SETUP_INCOMING_VARARGS(ARGS_SO_FAR, MODE, TYPE, PRETEND_SIZE, NO_RTL) \
+arc_setup_incoming_varargs(&ARGS_SO_FAR, MODE, TYPE, &PRETEND_SIZE, NO_RTL)
+\f
+/* Function results.  */
+
+/* Define how to find the value returned by a function.
+   VALTYPE is the data type of the value (as a tree).
+   If the precise function being called is known, FUNC is its FUNCTION_DECL;
+   otherwise, FUNC is 0.  */
+#define FUNCTION_VALUE(VALTYPE, FUNC) gen_rtx (REG, TYPE_MODE (VALTYPE), 0)
+
+/* Define how to find the value returned by a library function
+   assuming the value has mode MODE.  */
+#define LIBCALL_VALUE(MODE) gen_rtx (REG, MODE, 0)
+
+/* 1 if N is a possible register number for a function value
+   as seen by the caller.  */
+/* ??? What about r1 in DI/DF values.  */
+#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
+
+/* A C expression which can inhibit the returning of certain function
+   values in registers, based on the type of value.  A nonzero value says
+   to return the function value in memory, just as large structures are
+   always returned.  Here TYPE will be a C expression of type `tree',
+   representing the data type of the value.  */
+#define RETURN_IN_MEMORY(TYPE) \
+(AGGREGATE_TYPE_P (TYPE) \
+ || int_size_in_bytes (TYPE) > 8 \
+ || TREE_ADDRESSABLE (TYPE))
+
+/* Tell GCC to use RETURN_IN_MEMORY.  */
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* Register in which address to store a structure value
+   is passed to a function, or 0 to use `invisible' first argument.  */
+#define STRUCT_VALUE 0
+\f
+/* Function entry and exit.  */
+
+/* This macro generates the assembly code for function entry.
+   FILE is a stdio stream to output the code to.
+   SIZE is an int: how many units of temporary storage to allocate.
+   Refer to the array `regs_ever_live' to determine which registers
+   to save; `regs_ever_live[I]' is nonzero if register number I
+   is ever used in the function.  This macro is responsible for
+   knowing which registers should not be saved even if used.  */
+#define FUNCTION_PROLOGUE(FILE, SIZE) \
+arc_output_function_prologue (FILE, SIZE)
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+   the stack pointer does not matter.  The value is tested only in
+   functions that have frame pointers.
+   No definition is equivalent to always zero.  */
+#define EXIT_IGNORE_STACK 0
+
+/* This macro generates the assembly code for function exit,
+   on machines that need it.  If FUNCTION_EPILOGUE is not defined
+   then individual return instructions are generated for each
+   return statement.  Args are same as for FUNCTION_PROLOGUE.
+
+   The function epilogue should not depend on the current stack pointer!
+   It should use the frame pointer only.  This is mandatory because
+   of alloca; we also take advantage of it to omit stack adjustments
+   before returning.  */
+#define FUNCTION_EPILOGUE(FILE, SIZE) \
+arc_output_function_epilogue (FILE, SIZE)
+
+/* Epilogue delay slots.  */
+#define DELAY_SLOTS_FOR_EPILOGUE arc_delay_slots_for_epilogue ()
+
+#define ELIGIBLE_FOR_EPILOGUE_DELAY(TRIAL, SLOTS_FILLED) \
+arc_eligible_for_epilogue_delay (TRIAL, SLOTS_FILLED)
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+#define FUNCTION_PROFILER(FILE, LABELNO)
+\f
+/* Trampolines.  */
+/* ??? This doesn't work yet because GCC will use as the address of a nested
+   function the address of the trampoline.  We need to use that address
+   right shifted by 2.  It looks like we'll need PSImode after all. :-(  */
+
+/* Output assembler code for a block containing the constant parts
+   of a trampoline, leaving space for the variable parts.  */
+/* On the ARC, the trampoline is quite simple as we have 32 bit immediate
+   constants.
+
+       mov r24,STATIC
+       j.nd FUNCTION
+*/
+#define TRAMPOLINE_TEMPLATE(FILE) \
+do { \
+  ASM_OUTPUT_INT (FILE, GEN_INT (0x631f7c00)); \
+  ASM_OUTPUT_INT (FILE, const0_rtx); \
+  ASM_OUTPUT_INT (FILE, GEN_INT (0x381f0000)); \
+  ASM_OUTPUT_INT (FILE, const0_rtx); \
+} while (0)
+
+/* Length in units of the trampoline for entering a nested function.  */
+#define TRAMPOLINE_SIZE 16
+
+/* Emit RTL insns to initialize the variable parts of a trampoline.
+   FNADDR is an RTX for the address of the function's pure code.
+   CXT is an RTX for the static chain value for the function.  */
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+do { \
+  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 4)), CXT); \
+  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 12)), FNADDR); \
+  emit_insn (gen_flush_icache (validize_mem (gen_rtx (MEM, SImode, TRAMP)))); \
+} while (0)
+\f
+/* Library calls.  */
+
+/* Generate calls to memcpy, memcmp and memset.  */
+#define TARGET_MEM_FUNCTIONS
+\f
+/* Addressing modes, and classification of registers for them.  */
+
+/* Maximum number of registers that can appear in a valid memory address.  */
+/* The `ld' insn allows 2, but the `st' insn only allows 1.  */
+#define MAX_REGS_PER_ADDRESS 1
+
+/* We have pre inc/dec (load/store with update).  */
+#define HAVE_PRE_INCREMENT
+#define HAVE_PRE_DECREMENT
+
+/* Recognize any constant value that is a valid address.  */
+#define CONSTANT_ADDRESS_P(X) \
+(GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF       \
+ || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST)
+
+/* Nonzero if the constant value X is a legitimate general operand.
+   We can handle any 32 or 64 bit constant.  */
+/* "1" should work since the largest constant should be a 64 bit critter.  */
+/* ??? Not sure what to do for 64x32 compiler.  */
+#define LEGITIMATE_CONSTANT_P(X) 1
+
+/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
+   and check its validity for a certain class.
+   We have two alternate definitions for each of them.
+   The usual definition accepts all pseudo regs; the other rejects
+   them unless they have been allocated suitable hard regs.
+   The symbol REG_OK_STRICT causes the latter definition to be used.
+
+   Most source files want to accept pseudo regs in the hope that
+   they will get allocated to the class that the insn wants them to be in.
+   Source files for reload pass need to be strict.
+   After reload, it makes no difference, since pseudo regs have
+   been eliminated by then.  */
+
+#ifndef REG_OK_STRICT
+
+/* Nonzero if X is a hard reg that can be used as an index
+   or if it is a pseudo reg.  */
+#define REG_OK_FOR_INDEX_P(X) \
+((unsigned) REGNO (X) - 29 >= FIRST_PSEUDO_REGISTER - 29)
+/* Nonzero if X is a hard reg that can be used as a base reg
+   or if it is a pseudo reg.  */
+#define REG_OK_FOR_BASE_P(X) \
+((unsigned) REGNO (X) - 29 >= FIRST_PSEUDO_REGISTER - 29)
+
+#else
+
+/* Nonzero if X is a hard reg that can be used as an index.  */
+#define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
+/* Nonzero if X is a hard reg that can be used as a base reg.  */
+#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+
+#endif
+
+/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
+   that is a valid memory address for an instruction.
+   The MODE argument is the machine mode for the MEM expression
+   that wants to use this address.  */
+/* The `ld' insn allows [reg],[reg+shimm],[reg+limm],[reg+reg],[limm]
+   but the `st' insn only allows [reg],[reg+shimm],[limm].
+   The only thing we can do is only allow the most strict case `st' and hope
+   other parts optimize out the restrictions for `ld'.  */
+
+/* local to this file */
+#define RTX_OK_FOR_BASE_P(X) \
+(REG_P (X) && REG_OK_FOR_BASE_P (X))
+
+/* local to this file */
+#define RTX_OK_FOR_INDEX_P(X) \
+(0 && /*FIXME*/ REG_P (X) && REG_OK_FOR_INDEX_P (X))
+
+/* local to this file */
+/* ??? Loads can handle any constant, stores can only handle small ones.  */
+#define RTX_OK_FOR_OFFSET_P(X) \
+(GET_CODE (X) == CONST_INT && SMALL_INT (INTVAL (X)))
+
+#define LEGITIMATE_OFFSET_ADDRESS_P(MODE, X) \
+(GET_CODE (X) == PLUS                          \
+ && RTX_OK_FOR_BASE_P (XEXP (X, 0))            \
+ && (RTX_OK_FOR_INDEX_P (XEXP (X, 1))          \
+     || RTX_OK_FOR_OFFSET_P (XEXP (X, 1))))
+
+#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                \
+{ if (RTX_OK_FOR_BASE_P (X))                           \
+    goto ADDR;                                         \
+  if (LEGITIMATE_OFFSET_ADDRESS_P ((MODE), (X)))       \
+    goto ADDR;                                         \
+  if (GET_CODE (X) == CONST_INT && LARGE_INT (INTVAL (X))) \
+    goto ADDR;                                         \
+  if (GET_CODE (X) == SYMBOL_REF                       \
+          || GET_CODE (X) == LABEL_REF                 \
+          || GET_CODE (X) == CONST)                    \
+    goto ADDR;                                         \
+  if ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == PRE_INC) \
+      /* We're restricted here by the `st' insn.  */   \
+      && RTX_OK_FOR_BASE_P (XEXP ((X), 0)))            \
+    goto ADDR;                                         \
+}
+
+/* Try machine-dependent ways of modifying an illegitimate address
+   to be legitimate.  If we find one, return the new, valid address.
+   This macro is used in only one place: `memory_address' in explow.c.
+
+   OLDX is the address as it was before break_out_memory_refs was called.
+   In some cases it is useful to look at this to decide what needs to be done.
+
+   MODE and WIN are passed so that this macro can use
+   GO_IF_LEGITIMATE_ADDRESS.
+
+   It is always safe for this macro to do nothing.  It exists to recognize
+   opportunities to optimize the output.  */
+
+#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)
+
+/* Go to LABEL if ADDR (a legitimate address expression)
+   has an effect that depends on the machine mode it is used for.  */
+#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
+{ if (GET_CODE (ADDR) == PRE_DEC)      \
+    goto LABEL;                                \
+  if (GET_CODE (ADDR) == PRE_INC)      \
+    goto LABEL;                                \
+}
+\f
+/* Condition code usage.  */
+
+/* Some insns set all condition code flags, some only set the ZNC flags, and
+   some only set the ZN flags.  */
+
+#define EXTRA_CC_MODES CCZNCmode, CCZNmode
+
+#define EXTRA_CC_NAMES "CCZNC", "CCZN"
+
+/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
+   return the mode to be used for the comparison.  */
+extern enum machine_mode arc_select_cc_mode ();
+#define SELECT_CC_MODE(OP, X, Y) \
+arc_select_cc_mode (OP, X, Y)
+
+/* Return non-zero if SELECT_CC_MODE will never return MODE for a
+   floating point inequality comparison.  */
+#define REVERSIBLE_CC_MODE(MODE) 1 /*FIXME*/
+\f
+/* Costs.  */
+
+/* An insn is define to cost 4 "units", and we work from there.
+   COSTS_N_INSNS (N) is defined as (N) * 4 - 2 so that seems reasonable.
+   Some values are supposed to be defined relative to each other and thus
+   aren't necessarily related to COSTS_N_INSNS.  */
+
+/* Compute the cost of computing a constant rtl expression RTX
+   whose rtx-code is CODE.  The body of this macro is a portion
+   of a switch statement.  If the code is computed here,
+   return it with a return statement.  Otherwise, break from the switch.  */
+/* Small integers are as cheap as registers.  4 byte values can be fetched
+   as immediate constants - let's give that the cost of an extra insn. */
+#define CONST_COSTS(X, CODE, OUTER_CODE) \
+  case CONST_INT :                                             \
+    if (SMALL_INT (INTVAL (X)))                                        \
+      return 0;                                                        \
+    /* fall through */                                         \
+  case CONST :                                                 \
+  case LABEL_REF :                                             \
+  case SYMBOL_REF :                                            \
+    return 4;                                                  \
+  case CONST_DOUBLE :                                          \
+    {                                                          \
+      rtx high, low;                                           \
+      split_double (X, &high, &low);                           \
+      return 4 * (!SMALL_INT (INTVAL (high))                   \
+                 + !SMALL_INT (INTVAL (low)));                 \
+    }
+
+/* Compute the cost of an address.  */
+#define ADDRESS_COST(ADDR) (REG_P (ADDR) ? 1 : arc_address_cost (ADDR))
+
+/* Compute extra cost of moving data between one register class
+   and another.  */
+#define REGISTER_MOVE_COST(CLASS1, CLASS2) 2
+
+/* Compute the cost of moving data between registers and memory.  */
+/* Memory is 3 times as expensive as registers.
+   ??? Is that the right way to look at it?  */
+#define MEMORY_MOVE_COST(MODE) \
+(GET_MODE_SIZE (MODE) <= UNITS_PER_WORD ? 6 : 12)
+
+/* The cost of a branch insn.  */
+/* ??? What's the right value here?  Branches are certainly more
+   expensive than reg->reg moves.  */
+#define BRANCH_COST 2
+
+/* Provide the costs of a rtl expression.  This is in the body of a
+   switch on CODE.  The purpose for the cost of MULT is to encourage
+   `synth_mult' to find a synthetic multiply when reasonable.
+
+   If we need more than 12 insns to do a multiply, then go out-of-line,
+   since the call overhead will be < 10% of the cost of the multiply.  */
+#define RTX_COSTS(X, CODE, OUTER_CODE) \
+  case ASHIFT :                                                \
+  case ASHIFTRT :                                      \
+  case LSHIFTRT :                                      \
+    if (TARGET_SHIFTER)                                        \
+      return COSTS_N_INSNS (1);                                \
+    if (GET_CODE (XEXP ((X), 1)) != CONST_INT)         \
+      return COSTS_N_INSNS (16);                       \
+    return COSTS_N_INSNS (INTVAL (XEXP ((X), 1)));
+
+/* Nonzero if access to memory by bytes is slow and undesirable.
+   For RISC chips, it means that access to memory by bytes is no
+   better than access by words when possible, so grab a whole word
+   and maybe make use of that.  */
+#define SLOW_BYTE_ACCESS 1
+
+/* Define this macro if it is as good or better to call a constant
+   function address than to call an address kept in a register.  */
+/* On the ARC, calling through registers is slow.  */
+#define NO_FUNCTION_CSE
+
+/* Define this macro if it is as good or better for a function to call
+   itself with an explicit address than to call an address kept in a
+   register.  */
+/* On the ARC, calling through registers is slow.  */
+#define NO_RECURSIVE_FUNCTION_CSE
+\f
+/* Section selection.  */
+/* WARNING: These section names also appear in dwarfout.c.  */
+
+/* The names of the text, data, and readonly-data sections are runtime
+   selectable.  */
+
+#define ARC_SECTION_FORMAT             "\t.section %s"
+#define ARC_DEFAULT_TEXT_SECTION       ".text"
+#define ARC_DEFAULT_DATA_SECTION       ".data"
+#define ARC_DEFAULT_RODATA_SECTION     ".rodata"
+
+extern char *arc_text_section,*arc_data_section,*arc_rodata_section;
+
+/* initfini.c uses this in an asm.  */
+#if defined (CRT_INIT) || defined (CRT_FINI)
+#define TEXT_SECTION_ASM_OP    "\t.section .text"
+#else
+#define TEXT_SECTION_ASM_OP    arc_text_section /*"\t.section .text"*/
+#endif
+#define DATA_SECTION_ASM_OP    arc_data_section /*"\t.section .data"*/
+
+#undef CONST_SECTION_ASM_OP
+#define CONST_SECTION_ASM_OP   arc_rodata_section /*"\t.section .rodata"*/
+
+#define BSS_SECTION_ASM_OP     "\t.section .bss"
+
+/* Define this macro if jump tables (for tablejump insns) should be
+   output in the text section, along with the assembler instructions.
+   Otherwise, the readonly data section is used.
+   This macro is irrelevant if there is no separate readonly data section.  */
+/*#define JUMP_TABLES_IN_TEXT_SECTION*/
+
+/* Define this macro if references to a symbol must be treated
+   differently depending on something about the variable or
+   function named by the symbol (such as what section it is in).
+
+   The macro definition, if any, is executed immediately after the
+   rtl for DECL or other node is created.
+   The value of the rtl will be a `mem' whose address is a
+   `symbol_ref'.
+
+   The usual thing for this macro to do is to store a flag in the
+   `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
+   name string in the `symbol_ref' (if one bit is not enough
+   information).  */
+
+/* On the ARC, function addresses are not the same as normal addresses.
+   Branch to absolute address insns take an address that is right-shifted
+   by 2.  We encode the fact that we have a function here, and then emit a
+   special assembler op when outputting the address.  */
+#define ENCODE_SECTION_INFO(DECL) \
+do {                                                   \
+  if (TREE_CODE (DECL) == FUNCTION_DECL)               \
+    SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;   \
+} while (0)
+
+/* Decode SYM_NAME and store the real name part in VAR, sans
+   the characters that encode section info.  Define this macro if
+   ENCODE_SECTION_INFO alters the symbol's name string.  */
+/*#define STRIP_NAME_ENCODING(VAR, SYM_NAME)*/
+
+/* For DWARF.  Marginally different than default so output is "prettier"
+   (and consistent with above).  */
+#define PUSHSECTION_FORMAT "\t%s %s\n"
+
+/* Tell crtstuff.c we're using ELF.  */
+#define OBJECT_FORMAT_ELF
+\f
+/* PIC */
+
+/* The register number of the register used to address a table of static
+   data addresses in memory.  In some cases this register is defined by a
+   processor's ``application binary interface'' (ABI).  When this macro
+   is defined, RTL is generated for this register once, as with the stack
+   pointer and frame pointer registers.  If this macro is not defined, it
+   is up to the machine-dependent files to allocate such a register (if
+   necessary).  */
+#define PIC_OFFSET_TABLE_REGNUM 26
+
+/* Define this macro if the register defined by PIC_OFFSET_TABLE_REGNUM is
+   clobbered by calls.  Do not define this macro if PIC_OFFSET_TABLE_REGNUM
+   is not defined.  */
+/* This register is call-saved on the ARC.  */
+/*#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED*/
+
+/* By generating position-independent code, when two different programs (A
+   and B) share a common library (libC.a), the text of the library can be
+   shared whether or not the library is linked at the same address for both
+   programs.  In some of these environments, position-independent code
+   requires not only the use of different addressing modes, but also
+   special code to enable the use of these addressing modes.
+
+   The FINALIZE_PIC macro serves as a hook to emit these special
+   codes once the function is being compiled into assembly code, but not
+   before.  (It is not done before, because in the case of compiling an
+   inline function, it would lead to multiple PIC prologues being
+   included in functions which used inline functions and were compiled to
+   assembly language.)  */
+
+#define INITIALIZE_PIC arc_initialize_pic ()
+#define FINALIZE_PIC arc_finalize_pic ()
+
+/* A C expression that is nonzero if X is a legitimate immediate
+   operand on the target machine when generating position independent code.
+   You can assume that X satisfies CONSTANT_P, so you need not
+   check this.  You can also assume `flag_pic' is true, so you need not
+   check it either.  You need not define this macro if all constants
+   (including SYMBOL_REF) can be immediate operands when generating
+   position independent code.  */
+/*#define LEGITIMATE_PIC_OPERAND_P(X)*/
+\f
+/* Control the assembler format that we output.  */
+
+/* Output at beginning of assembler file.  */
+extern void arc_asm_file_start ();
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) arc_asm_file_start (FILE)
+
+/* A C statement to output assembler commands which will identify the
+   object file as having been compiled with GNU CC (or another GNU
+   compiler).  */
+#undef ASM_IDENTIFY_GCC
+#define ASM_IDENTIFY_GCC(FILE) /* nothing */
+
+/* Needed because we define ASM_IDENTIFY_GCC.  */
+#define ASM_IDENTIFY_LANGUAGE(FILE) output_lang_identify (FILE)
+
+/* A C string constant describing how to begin a comment in the target
+   assembler language.  The compiler assumes that the comment will
+   end at the end of the line.  */
+#define ASM_COMMENT_START ";"
+
+/* Output to assembler file text saying following lines
+   may contain character constants, extra white space, comments, etc.  */
+#define ASM_APP_ON ""
+
+/* Output to assembler file text saying following lines
+   no longer contain unusual constructs.  */
+#define ASM_APP_OFF ""
+
+/* This is how to output an assembler line defining a `char' constant.  */
+#define ASM_OUTPUT_CHAR(FILE, VALUE) \
+( fprintf (FILE, "\t.byte\t"),                 \
+  output_addr_const (FILE, (VALUE)),           \
+  fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line defining a `short' constant.  */
+#define ASM_OUTPUT_SHORT(FILE, VALUE) \
+( fprintf (FILE, "\t.hword\t"),                        \
+  output_addr_const (FILE, (VALUE)),           \
+  fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line defining an `int' constant.
+   We also handle symbol output here.  Code addresses must be right shifted
+   by 2 because that's how the jump instruction wants them.  */
+#define ASM_OUTPUT_INT(FILE, VALUE) \
+do {                                                                   \
+  fprintf (FILE, "\t.word\t");                                         \
+  if ((GET_CODE (VALUE) == SYMBOL_REF && SYMBOL_REF_FLAG (VALUE))      \
+      || GET_CODE (VALUE) == LABEL_REF)                                        \
+    {                                                                  \
+      fprintf (FILE, "%%st(");                                         \
+      output_addr_const (FILE, (VALUE));                               \
+      fprintf (FILE, ")");                                             \
+    }                                                                  \
+  else                                                                 \
+    output_addr_const (FILE, (VALUE));                                 \
+  fprintf (FILE, "\n");                                                        \
+} while (0)
+
+/* This is how to output an assembler line defining a `float' constant.  */
+#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
+{                                                      \
+  long t;                                              \
+  char str[30];                                                \
+  REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t);            \
+  REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str);       \
+  fprintf (FILE, "\t.word\t0x%lx %s %s\n",             \
+          t, ASM_COMMENT_START, str);                  \
+}
+
+/* This is how to output an assembler line defining a `double' constant.  */
+#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
+{                                                      \
+  long t[2];                                           \
+  char str[30];                                                \
+  REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t);            \
+  REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str);       \
+  fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \
+          t[0], ASM_COMMENT_START, str, t[1]);         \
+}
+
+/* This is how to output an assembler line for a numeric constant byte.  */
+#define ASM_BYTE_OP    ".byte"
+#define ASM_OUTPUT_BYTE(FILE, VALUE)  \
+  fprintf (FILE, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE))
+
+/* The assembler's parentheses characters.  */
+#define ASM_OPEN_PAREN "("
+#define ASM_CLOSE_PAREN ")"
+
+/* This is how to output the definition of a user-level label named NAME,
+   such as the label on a static function or variable NAME.  */
+#define ASM_OUTPUT_LABEL(FILE, NAME) \
+do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+
+/* This is how to output a command to make the user-level label named NAME
+   defined for reference from other files.  */
+#define ASM_GLOBALIZE_LABEL(FILE, NAME) \
+do {                           \
+  fputs ("\t.global\t", FILE); \
+  assemble_name (FILE, NAME);  \
+  fputs ("\n", FILE);          \
+} while (0)
+
+/* A C statement (sans semicolon) to output on FILE an assembler pseudo-op to
+   declare a library function name external.  The name of the library function
+   is given by SYMREF, which has type RTX and is a SYMBOL_REF.  */
+#if 0
+/* On the ARC we want to have libgcc's for multiple cpus in one binary.
+   We can't use `assemble_name' here as that will call ASM_OUTPUT_LABELREF
+   and we'll get another suffix added on if -mmangle-cpu.  */
+extern char *arc_mangle_cpu;
+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, SYMREF) \
+do {                                                   \
+  if (TARGET_MANGLE_CPU_LIBGCC)                                \
+    {                                                  \
+      fprintf (FILE, "\t.rename\t_%s, _%s%s\n",                \
+              XSTR (SYMREF, 0), XSTR (SYMREF, 0),      \
+              arc_mangle_suffix);                      \
+    }                                                  \
+} while (0)
+#endif
+
+/* This is how to output a reference to a user-level label named NAME.
+   `assemble_name' uses this.  */
+/* We mangle all user labels to provide protection from linking code
+   compiled for different cpus.  */
+/* We work around a dwarfout.c deficiency by watching for labels from it and
+   not adding the '_' prefix nor the cpu suffix.  There is a comment in
+   dwarfout.c that says it should be using ASM_OUTPUT_INTERNAL_LABEL.  */
+extern char *arc_mangle_cpu;
+#define ASM_OUTPUT_LABELREF(FILE, NAME) \
+do {                                                   \
+  if ((NAME)[0] == '.' && (NAME)[1] == 'L')            \
+    fprintf (FILE, "%s", NAME);                                \
+  else                                                 \
+    {                                                  \
+      fputc ('_', FILE);                               \
+      if (TARGET_MANGLE_CPU && arc_mangle_cpu != NULL) \
+       fprintf (FILE, "%s_", arc_mangle_cpu);          \
+      fprintf (FILE, "%s", NAME);                      \
+    }                                                  \
+} while (0)
+
+/* This is how to output a definition of an internal numbered label where
+   PREFIX is the class of label and NUM is the number within the class.  */
+#undef ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \
+do {                                           \
+  arc_ccfsm_at_label (PREFIX, NUM);            \
+  fprintf (FILE, ".%s%d:\n", PREFIX, NUM);     \
+} while (0)
+
+/* Store in OUTPUT a string (made with alloca) containing
+   an assembler-name for a local static variable named NAME.
+   LABELNO is an integer which is different for each call.  */
+#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
+( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),   \
+  sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
+
+/* Assembler pseudo-op to equate one value with another.  */
+/* ??? This is needed because dwarfout.c provides a default definition too
+   late for defaults.h (which contains the default definition of ASM_OUTPUT_DEF
+   that we use).  */
+#define SET_ASM_OP ".set"
+
+/* A C statement (sans semicolon) to output an element in the table of
+   global constructors.  */
+#undef ASM_OUTPUT_CONSTRUCTOR
+#define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \
+do {                                   \
+  ctors_section ();                    \
+  fprintf (FILE, "\t.word\t%%st(");    \
+  assemble_name (FILE, NAME);          \
+  fprintf (FILE, ")\n");               \
+} while (0)
+
+/* A C statement (sans semicolon) to output an element in the table of
+   global destructors.  */
+#undef ASM_OUTPUT_DESTRUCTOR
+#define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \
+do {                                   \
+  dtors_section ();                    \
+  fprintf (FILE, "\t.word\t%%st(");    \
+  assemble_name (FILE, NAME);          \
+  fprintf (FILE, ")\n");               \
+} while (0)
+
+/* How to refer to registers in assembler output.
+   This sequence is indexed by compiler's hard-register-number (see above).  */
+#define REGISTER_NAMES \
+{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",               \
+ "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",         \
+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",       \
+ "r24", "r25", "r26", "fp", "sp", "ilink1", "ilink2", "blink", \
+ "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",       \
+ "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",       \
+ "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",       \
+ "r56", "r57", "r58", "r59", "lp_count", "cc"}
+
+/* Entry to the insn conditionalizer.  */
+#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
+arc_final_prescan_insn (INSN, OPVEC, NOPERANDS)
+
+/* A C expression which evaluates to true if CODE is a valid
+   punctuation character for use in the `PRINT_OPERAND' macro.  */
+extern char arc_punct_chars[];
+#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) \
+arc_punct_chars[(unsigned char) (CHAR)]
+
+/* Print operand X (an rtx) in assembler syntax to file FILE.
+   CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
+   For `%' followed by punctuation, CODE is the punctuation and X is null.  */
+#define PRINT_OPERAND(FILE, X, CODE) \
+arc_print_operand (FILE, X, CODE)
+
+/* A C compound statement to output to stdio stream STREAM the
+   assembler syntax for an instruction operand that is a memory
+   reference whose address is ADDR.  ADDR is an RTL expression.
+
+   On some machines, the syntax for a symbolic address depends on
+   the section that the address refers to.  On these machines,
+   define the macro `ENCODE_SECTION_INFO' to store the information
+   into the `symbol_ref', and then check for it here.  */
+#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
+arc_print_operand_address (FILE, ADDR)
+
+/* This is how to output an element of a case-vector that is absolute.  */
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
+do {                                                   \
+  char label[30];                                      \
+  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);     \
+  fprintf (FILE, "\t.word %%st(");                     \
+  assemble_name (FILE, label);                         \
+  fprintf (FILE, ")\n");                               \
+} while (0)
+
+/* This is how to output an element of a case-vector that is relative.  */
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+do {                                                   \
+  char label[30];                                      \
+  ASM_GENERATE_INTERNAL_LABEL (label, "L", VALUE);     \
+  fprintf (FILE, "\t.word %%st(");                     \
+  assemble_name (FILE, label);                         \
+  fprintf (FILE, "-");                                 \
+  ASM_GENERATE_INTERNAL_LABEL (label, "L", REL);       \
+  assemble_name (FILE, label);                         \
+  fprintf (FILE, ")\n");                               \
+} while (0)
+
+/* A C expression to output text to align the location counter in the way
+   that is desirable at the beginning of a loop.  */
+/* On the ARC, align loops to 32 byte boundaries (cache line size)
+   if -malign-loops.  */
+#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
+do { if (TARGET_ALIGN_LOOPS) ASM_OUTPUT_SKIP (FILE, 5); } while (0)
+
+/* This is how to output an assembler line
+   that says to advance the location counter
+   to a multiple of 2**LOG bytes.  */
+#define ASM_OUTPUT_ALIGN(FILE,LOG) \
+do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
+\f
+/* Debugging information.  */
+
+/* Generate DBX and DWARF debugging information.  */
+#define DBX_DEBUGGING_INFO
+#define DWARF_DEBUGGING_INFO
+
+/* Prefer STABS (for now).  */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+/* How to renumber registers for dbx and gdb.  */
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+
+/* Turn off splitting of long stabs.  */
+#define DBX_CONTIN_LENGTH 0
+\f
+/* Miscellaneous.  */
+
+/* Specify the machine mode that this machine uses
+   for the index in the tablejump instruction.  */
+#define CASE_VECTOR_MODE Pmode
+
+/* Define this if the tablejump instruction expects the table
+   to contain offsets from the address of the table.
+   Do not define this if the table should contain absolute addresses.  */
+/* It's not clear what PIC will look like or whether we want to use -fpic
+   for the embedded form currently being talked about.  For now require -fpic
+   to get pc relative switch tables.  */
+/*#define CASE_VECTOR_PC_RELATIVE*/
+
+/* Define if operations between registers always perform the operation
+   on the full register even if a narrower mode is specified.  */
+#define WORD_REGISTER_OPERATIONS
+
+/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
+   will either zero-extend or sign-extend.  The value of this macro should
+   be the code that says which one of the two operations is implicitly
+   done, NIL if none.  */
+#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
+
+/* Specify the tree operation to be used to convert reals to integers.  */
+#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
+
+/* This is the kind of divide that is easiest to do in the general case.  */
+#define EASY_DIV_EXPR TRUNC_DIV_EXPR
+
+/* Max number of bytes we can move from memory to memory
+   in one reasonably fast instruction.  */
+#define MOVE_MAX 4
+
+/* Define this to be nonzero if shift instructions ignore all but the low-order
+   few bits. */
+#define SHIFT_COUNT_TRUNCATED 1
+
+/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
+   is done just by pretending it is already truncated.  */
+#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
+
+/* We assume that the store-condition-codes instructions store 0 for false
+   and some other value for true.  This is the value stored for true.  */
+#define STORE_FLAG_VALUE 1
+
+/* Specify the machine mode that pointers have.
+   After generation of rtl, the compiler makes no further distinction
+   between pointers and any other objects of this machine mode.  */
+/* ??? The arc doesn't have full 32 bit pointers, but making this PSImode has
+   it's own problems (you have to add extendpsisi2 and trucnsipsi2 but how does
+   one do it without getting excess code?).  Try to avoid it.  */
+#define Pmode SImode
+
+/* A function address in a call instruction.  */
+#define FUNCTION_MODE SImode
+
+/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
+   is a valid machine specific attribute for DECL.
+   The attributes in ATTRIBUTES have previously been assigned to TYPE.  */
+extern int arc_valid_machine_attribute ();
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
+arc_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
+
+/* A C expression that returns zero if the attributes on TYPE1 and TYPE2 are
+   incompatible, one if they are compatible, and two if they are
+   nearly compatible (which causes a warning to be generated).  */
+extern int arc_comp_type_attributes ();
+#define COMP_TYPE_ATTRIBUTES(TYPE1, TYPE2) \
+arc_comp_type_attributes (TYPE1, TYPE2)
+
+/* Give newly defined TYPE some default attributes.  */
+extern void arc_set_default_type_attributes ();
+#define SET_DEFAULT_TYPE_ATTRIBUTES(TYPE) \
+arc_set_default_type_attributes (TYPE)
+
+/* Define this if the target system supports the function
+   atexit from the ANSI C standard.  If this is not defined,
+   and INIT_SECTION_ASM_OP is not defined, a default
+   exit function will be provided to support C++.  */
+#define HAVE_ATEXIT
+
+/* alloca should avoid clobbering the old register save area.  */
+/* ??? Not defined in tm.texi.  */
+#define SETJMP_VIA_SAVE_AREA
+\f
+/* Define the information needed to generate branch and scc insns.  This is
+   stored from the compare operation.  Note that we can't use "rtx" here
+   since it hasn't been defined!  */
+extern struct rtx_def *arc_compare_op0, *arc_compare_op1;
+
+/* Define the function that build the compare insn for scc and bcc.  */
+extern struct rtx_def *gen_compare_reg ();
+
+/* Declarations for various fns used in the .md file.  */
+extern char *output_shift ();
+
+/* ARC function types.   */
+enum arc_function_type {
+  ARC_FUNCTION_UNKNOWN, ARC_FUNCTION_NORMAL,
+  /* These are interrupt handlers.  The name corresponds to the register
+     name that contains the return address.  */
+  ARC_FUNCTION_ILINK1, ARC_FUNCTION_ILINK2
+};
+#define ARC_INTERRUPT_P(TYPE) \
+((TYPE) == ARC_FUNCTION_ILINK1 || (TYPE) == ARC_FUNCTION_ILINK2)
+/* Compute the type of a function from its DECL.  */
+enum arc_function_type arc_compute_function_type ();
diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
new file mode 100644 (file)
index 0000000..0894f79
--- /dev/null
@@ -0,0 +1,1630 @@
+;; Machine description of the ARC cpu for GNU C compiler
+;; Copyright (C) 1994, 1997 Free Software Foundation, Inc.
+
+;; This file is part of GNU CC.
+
+;; GNU CC 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.
+
+;; GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+;; the Free Software Foundation, 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;; See file "rtl.def" for documentation on define_insn, match_*, et. al.
+
+;; ??? This is an old port, and is undoubtedly suffering from bit rot.
+\f
+;; Insn type.  Used to default other attribute values.
+
+(define_attr "type"
+  "move,load,store,cmove,unary,binary,compare,shift,mul,uncond_branch,branch,call,call_no_delay_slot,multi,misc"
+  (const_string "binary"))
+
+;; Length (in # of insns, long immediate constants counted too).
+;; ??? There's a nasty interaction between the conditional execution fsm
+;; and insn lengths: insns with shimm values cannot be conditionally executed.
+(define_attr "length" ""
+  (cond [(eq_attr "type" "load")
+        (if_then_else (match_operand 1 "long_immediate_loadstore_operand" "")
+                      (const_int 2) (const_int 1))
+
+        (eq_attr "type" "store")
+        (if_then_else (match_operand 0 "long_immediate_loadstore_operand" "")
+                      (const_int 2) (const_int 1))
+
+        (eq_attr "type" "move,unary,compare")
+        (if_then_else (match_operand 1 "long_immediate_operand" "")
+                      (const_int 2) (const_int 1))
+
+        (eq_attr "type" "binary,mul")
+        (if_then_else (match_operand 2 "long_immediate_operand" "")
+                      (const_int 2) (const_int 1))
+
+        (eq_attr "type" "cmove")
+        (if_then_else (match_operand 2 "register_operand" "")
+                      (const_int 1) (const_int 2))
+
+        (eq_attr "type" "multi") (const_int 2)
+       ]
+
+       (const_int 1)))
+
+;; The length here is the length of a single asm.  Unfortunately it might be
+;; 1 or 2 so we must allow for 2.  That's ok though.  How often will users
+;; lament asm's not being put in delay slots?
+(define_asm_attributes
+  [(set_attr "length" "2")
+   (set_attr "type" "multi")])
+
+;; Condition codes: this one is used by final_prescan_insn to speed up
+;; conditionalizing instructions.  It saves having to scan the rtl to see if
+;; it uses or alters the condition codes.
+
+;; USE: This insn uses the condition codes (eg: a conditional branch).
+;; CANUSE: This insn can use the condition codes (for conditional execution).
+;; SET: All condition codes are set by this insn.
+;; SET_ZN: the Z and N flags are set by this insn.
+;; SET_ZNC: the Z, N, and C flags are set by this insn.
+;; CLOB: The condition codes are set to unknown values by this insn.
+;; NOCOND: This insn can't use and doesn't affect the condition codes.
+
+(define_attr "cond" "use,canuse,set,set_zn,set_znc,clob,nocond"
+  (cond [(and (eq_attr "type" "unary,binary,move")
+             (eq_attr "length" "1"))
+        (const_string "canuse")
+
+        (eq_attr "type" "compare")
+        (const_string "set")
+
+        (eq_attr "type" "cmove,branch")
+        (const_string "use")
+
+        (eq_attr "type" "multi,misc")
+        (const_string "clob")
+        ]
+
+        (const_string "nocond")))
+\f
+;; Delay slots.
+
+(define_attr "in_delay_slot" "false,true"
+  (cond [(eq_attr "type" "uncond_branch,branch,call,call_no_delay_slot,multi")
+        (const_string "false")
+        ]
+
+        (if_then_else (eq_attr "length" "1")
+                      (const_string "true")
+                      (const_string "false"))))
+
+(define_delay (eq_attr "type" "call")
+  [(eq_attr "in_delay_slot" "true")
+   (eq_attr "in_delay_slot" "true")
+   (eq_attr "in_delay_slot" "true")])
+
+(define_delay (eq_attr "type" "branch,uncond_branch")
+  [(eq_attr "in_delay_slot" "true")
+   (eq_attr "in_delay_slot" "true")
+   (eq_attr "in_delay_slot" "true")])
+\f   
+;; Function units of the ARC
+
+;; (define_function_unit {name} {num-units} {n-users} {test}
+;;                       {ready-delay} {issue-delay} [{conflict-list}])
+
+;; 1) A conditional jump cannot immediately follow the insn setting the flags.
+;; This isn't a complete solution as it doesn't come with guarantees.  That
+;; is done in the branch patterns and in arc_print_operand.  This exists to
+;; avoid inserting a nop when we can.
+(define_function_unit "compare" 1 0 (eq_attr "type" "compare") 2 2 [(eq_attr "type" "branch")])
+
+;; 2) References to loaded registers should wait a cycle.
+
+;; Memory with load-delay of 1 (i.e., 2 cycle load).
+(define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 0)
+
+;; Units that take one cycle do not need to be specified.
+\f
+;; Move instructions.
+
+(define_expand "movqi"
+  [(set (match_operand:QI 0 "general_operand" "")
+       (match_operand:QI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (QImode, operands[1]);
+}")
+
+(define_insn "*movqi_insn"
+  [(set (match_operand:QI 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:QI 1 "move_src_operand" "rI,Ji,m,r"))]
+;; ??? Needed?
+  "register_operand (operands[0], QImode)
+   || register_operand (operands[1], QImode)"
+  "@
+   mov%? %0,%1
+   mov%? %0,%1
+   ldb%U1%V1 %0,%1
+   stb%U0%V0 %1,%0"
+  [(set_attr "type" "move,move,load,store")])
+
+;; ??? This may never match since there's no cmpqi insn.
+
+(define_insn "*movqi_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (sign_extend:SI (match_operand:QI 1 "move_src_operand" "rIJi"))
+                      (const_int 0)))
+   (set (match_operand:QI 0 "move_dest_operand" "=r")
+       (match_dup 1))]
+  ""
+  "mov%?.f %0,%1"
+  [(set_attr "type" "move")
+   (set_attr "cond" "set_zn")])
+
+(define_expand "movhi"
+  [(set (match_operand:HI 0 "general_operand" "")
+       (match_operand:HI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (HImode, operands[1]);
+}")
+
+(define_insn "*movhi_insn"
+  [(set (match_operand:HI 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:HI 1 "move_src_operand" "rI,Ji,m,r"))]
+  "register_operand (operands[0], HImode)
+   || register_operand (operands[1], HImode)"
+  "@
+   mov%? %0,%1
+   mov%? %0,%1
+   ldw%U1%V1 %0,%1
+   stw%U0%V0 %1,%0"
+  [(set_attr "type" "move,move,load,store")])
+
+;; ??? Will this ever match?
+
+(define_insn "*movhi_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (sign_extend:SI (match_operand:HI 1 "move_src_operand" "rIJi"))
+                      (const_int 0)))
+   (set (match_operand:HI 0 "move_dest_operand" "=r")
+       (match_dup 1))]
+;; ??? Needed?
+  "register_operand (operands[0], HImode)
+   || register_operand (operands[1], HImode)"
+  "mov%?.f %0,%1"
+  [(set_attr "type" "move")
+   (set_attr "cond" "set_zn")])
+
+(define_expand "movsi"
+  [(set (match_operand:SI 0 "general_operand" "")
+       (match_operand:SI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (SImode, operands[1]);
+}")
+
+(define_insn "*movsi_insn"
+  [(set (match_operand:SI 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:SI 1 "move_src_operand" "rI,GJi,m,r"))]
+  "register_operand (operands[0], SImode)
+   || register_operand (operands[1], SImode)"
+  "@
+   mov%? %0,%1
+   mov%? %0,%S1
+   ld%U1%V1 %0,%1
+   st%U0%V0 %1,%0"
+  [(set_attr "type" "move,move,load,store")])
+
+(define_insn "*movsi_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (match_operand:SI 1 "move_src_operand" "rIJi")
+                      (const_int 0)))
+   (set (match_operand:SI 0 "move_dest_operand" "=r")
+       (match_dup 1))]
+  "register_operand (operands[0], SImode)
+   || register_operand (operands[1], SImode)"
+  "mov%?.f %0,%S1"
+  [(set_attr "type" "move")
+   (set_attr "cond" "set_zn")])
+
+(define_expand "movdi"
+  [(set (match_operand:DI 0 "general_operand" "")
+       (match_operand:DI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (DImode, operands[1]);
+}")
+
+(define_insn "*movdi_insn"
+  [(set (match_operand:DI 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:DI 1 "move_double_src_operand" "r,HK,m,r"))]
+  "register_operand (operands[0], DImode)
+   || register_operand (operands[1], DImode)"
+  "*
+{
+  switch (which_alternative)
+    {
+    case 0 :
+      /* We normally copy the low-numbered register first.  However, if
+        the first register operand 0 is the same as the second register of
+        operand 1, we must copy in the opposite order.  */
+      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+       return \"mov %R0,%R1\;mov %0,%1\";
+      else
+       return \"mov %0,%1\;mov %R0,%R1\";
+    case 1 :
+      return \"mov %0,%L1\;mov %R0,%H1\";
+    case 2 :
+      /* If the low-address word is used in the address, we must load it
+        last.  Otherwise, load it first.  Note that we cannot have
+        auto-increment in that case since the address register is known to be
+        dead.  */
+      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+                            operands [1], 0))
+         return \"ld%V1 %R0,%R1\;ld%V1 %0,%1\";
+      else
+         return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
+    case 3 :
+      return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
+    }
+}"
+  [(set_attr "type" "move,move,load,store")
+   ;; ??? The ld/st values could be 4 if it's [reg,bignum].
+   (set_attr "length" "2,4,2,2")])
+
+;(define_expand "movdi"
+;  [(set (match_operand:DI 0 "general_operand" "")
+;      (match_operand:DI 1 "general_operand" ""))]
+;  ""
+;  "
+;{
+;  /* Flow doesn't understand that this is effectively a DFmode move.
+;     It doesn't know that all of `operands[0]' is set.  */
+;  emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
+;
+;  /* Emit insns that movsi_insn can handle.  */
+;  emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DImode),
+;                      operand_subword (operands[1], 0, 0, DImode)));
+;  emit_insn (gen_movsi (operand_subword (operands[0], 1, 0, DImode),
+;                      operand_subword (operands[1], 1, 0, DImode)));
+;  DONE;
+;}")
+\f
+;; Floating point move insns.
+
+(define_expand "movsf"
+  [(set (match_operand:SF 0 "general_operand" "")
+       (match_operand:SF 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
+  if (GET_CODE (operands[1]) == CONST_DOUBLE)
+    operands[1] = force_const_mem (SFmode, operands[1]);
+#endif
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (SFmode, operands[1]);
+}")
+
+(define_insn "*movsf_insn"
+  [(set (match_operand:SF 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:SF 1 "move_src_operand" "r,E,m,r"))]
+  "register_operand (operands[0], SFmode)
+   || register_operand (operands[1], SFmode)"
+  "@
+   mov%? %0,%1
+   mov%? %0,%1 ; %A1
+   ld%U1%V1 %0,%1
+   st%U0%V0 %1,%0"
+  [(set_attr "type" "move,move,load,store")])
+
+(define_expand "movdf"
+  [(set (match_operand:DF 0 "general_operand" "")
+       (match_operand:DF 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* Everything except mem = const or mem = mem can be done easily.  */
+
+#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
+  if (GET_CODE (operands[1]) == CONST_DOUBLE)
+    operands[1] = force_const_mem (DFmode, operands[1]);
+#endif
+
+  if (GET_CODE (operands[0]) == MEM)
+    operands[1] = force_reg (DFmode, operands[1]);
+}")
+
+(define_insn "*movdf_insn"
+  [(set (match_operand:DF 0 "move_dest_operand" "=r,r,r,m")
+       (match_operand:DF 1 "move_double_src_operand" "r,E,m,r"))]
+  "register_operand (operands[0], DFmode)
+   || register_operand (operands[1], DFmode)"
+  "*
+{
+  switch (which_alternative)
+    {
+    case 0 :
+      /* We normally copy the low-numbered register first.  However, if
+        the first register operand 0 is the same as the second register of
+        operand 1, we must copy in the opposite order.  */
+      if (REGNO (operands[0]) == REGNO (operands[1]) + 1)
+       return \"mov %R0,%R1\;mov %0,%1\";
+      else
+       return \"mov %0,%1\;mov %R0,%R1\";
+    case 1 :
+      return \"mov %0,%L1\;mov %R0,%H1 ; %A1\";
+    case 2 :
+      /* If the low-address word is used in the address, we must load it
+        last.  Otherwise, load it first.  Note that we cannot have
+        auto-increment in that case since the address register is known to be
+        dead.  */
+      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
+                            operands [1], 0))
+       return \"ld%V1 %R0,%R1\;ld%V1 %0,%1\";
+      else
+       return \"ld%V1 %0,%1\;ld%V1 %R0,%R1\";
+    case 3 :
+      return \"st%V0 %1,%0\;st%V0 %R1,%R0\";
+    }
+}"
+  [(set_attr "type" "move,move,load,store")
+   ;; ??? The ld/st values could be 4 if it's [reg,bignum].
+   (set_attr "length" "2,4,2,2")])
+
+;(define_expand "movdf"
+;  [(set (match_operand:DF 0 "general_operand" "")
+;      (match_operand:DF 1 "general_operand" ""))]
+;  ""
+;  "
+;{
+;  /* Flow doesn't understand that this is effectively a DFmode move.
+;     It doesn't know that all of `operands[0]' is set.  */
+;  emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
+;
+;  /* Emit insns that movsi_insn can handle.  */
+;  emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DFmode),
+;                      operand_subword (operands[1], 0, 0, DFmode)));
+;  emit_insn (gen_movsi (operand_subword (operands[0], 1, 0, DFmode),
+;                      operand_subword (operands[1], 1, 0, DFmode)));
+;  DONE;
+;}")
+\f
+;; Load/Store with update instructions.
+;;
+;; Some of these we can get by using pre-decrement or pre-increment, but the
+;; hardware can also do cases where the increment is not the size of the
+;; object.
+;;
+;; In all these cases, we use operands 0 and 1 for the register being
+;; incremented because those are the operands that local-alloc will
+;; tie and these are the pair most likely to be tieable (and the ones
+;; that will benefit the most).
+;;
+;; We use match_operator here because we need to know whether the memory
+;; object is volatile or not.
+
+(define_insn "*loadqi_update"
+  [(set (match_operand:QI 3 "register_operand" "=r,r")
+       (match_operator:QI 4 "load_update_operand"
+        [(match_operand:SI 1 "register_operand" "0,0")
+         (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldb.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*load_zeroextendqisi_update"
+  [(set (match_operand:SI 3 "register_operand" "=r,r")
+       (zero_extend:SI (match_operator:QI 4 "load_update_operand"
+                        [(match_operand:SI 1 "register_operand" "0,0")
+                         (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldb.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*load_signextendqisi_update"
+  [(set (match_operand:SI 3 "register_operand" "=r,r")
+       (sign_extend:SI (match_operator:QI 4 "load_update_operand"
+                        [(match_operand:SI 1 "register_operand" "0,0")
+                         (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldb.x.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*storeqi_update"
+  [(set (match_operator:QI 4 "store_update_operand"
+        [(match_operand:SI 1 "register_operand" "0")
+         (match_operand:SI 2 "short_immediate_operand" "I")])
+       (match_operand:QI 3 "register_operand" "r"))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "stb.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "store")
+   (set_attr "length" "1")])
+
+(define_insn "*loadhi_update"
+  [(set (match_operand:HI 3 "register_operand" "=r,r")
+       (match_operator:HI 4 "load_update_operand"
+        [(match_operand:SI 1 "register_operand" "0,0")
+         (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldw.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*load_zeroextendhisi_update"
+  [(set (match_operand:SI 3 "register_operand" "=r,r")
+       (zero_extend:SI (match_operator:HI 4 "load_update_operand"
+                        [(match_operand:SI 1 "register_operand" "0,0")
+                         (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldw.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*load_signextendhisi_update"
+  [(set (match_operand:SI 3 "register_operand" "=r,r")
+       (sign_extend:SI (match_operator:HI 4 "load_update_operand"
+                        [(match_operand:SI 1 "register_operand" "0,0")
+                         (match_operand:SI 2 "nonmemory_operand" "rI,J")])))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ldw.x.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*storehi_update"
+  [(set (match_operator:HI 4 "store_update_operand"
+        [(match_operand:SI 1 "register_operand" "0")
+         (match_operand:SI 2 "short_immediate_operand" "I")])
+       (match_operand:HI 3 "register_operand" "r"))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "stw.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "store")
+   (set_attr "length" "1")])
+
+(define_insn "*loadsi_update"
+  [(set (match_operand:SI 3 "register_operand" "=r,r")
+       (match_operator:SI 4 "load_update_operand"
+        [(match_operand:SI 1 "register_operand" "0,0")
+         (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ld.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*storesi_update"
+  [(set (match_operator:SI 4 "store_update_operand"
+        [(match_operand:SI 1 "register_operand" "0")
+         (match_operand:SI 2 "short_immediate_operand" "I")])
+       (match_operand:SI 3 "register_operand" "r"))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "st.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "store")
+   (set_attr "length" "1")])
+
+(define_insn "*loadsf_update"
+  [(set (match_operand:SF 3 "register_operand" "=r,r")
+       (match_operator:SF 4 "load_update_operand"
+        [(match_operand:SI 1 "register_operand" "0,0")
+         (match_operand:SI 2 "nonmemory_operand" "rI,J")]))
+   (set (match_operand:SI 0 "register_operand" "=r,r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "ld.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "load,load")
+   (set_attr "length" "1,2")])
+
+(define_insn "*storesf_update"
+  [(set (match_operator:SF 4 "store_update_operand"
+        [(match_operand:SI 1 "register_operand" "0")
+         (match_operand:SI 2 "short_immediate_operand" "I")])
+       (match_operand:SF 3 "register_operand" "r"))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_dup 1) (match_dup 2)))]
+  ""
+  "st.a%V4 %3,[%0,%2]"
+  [(set_attr "type" "store")
+   (set_attr "length" "1")])
+\f
+;; Conditional move instructions.
+
+(define_expand "movsicc"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else (match_operand 1 "comparison_operator" "")
+                     (match_operand:SI 2 "nonmemory_operand" "")
+                     (match_operand:SI 3 "register_operand" "")))]
+  ""
+  "
+{
+  enum rtx_code code = GET_CODE (operands[1]);
+  rtx ccreg = gen_rtx (REG,
+                      SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+                      61);
+
+  operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+}")
+
+;(define_expand "movdicc"
+;  [(set (match_operand:DI 0 "register_operand" "")
+;      (if_then_else (match_operand 1 "comparison_operator" "")
+;                    (match_operand:DI 2 "nonmemory_operand" "")
+;                    (match_operand:DI 3 "register_operand" "")))]
+;  "0 /* ??? this would work better if we had cmpdi */"
+;  "
+;{
+;  enum rtx_code code = GET_CODE (operands[1]);
+;  rtx ccreg = gen_rtx (REG,
+;                     SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+;                     61);
+;
+;  operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+;}")
+
+(define_expand "movsfcc"
+  [(set (match_operand:SF 0 "register_operand" "")
+       (if_then_else (match_operand 1 "comparison_operator" "")
+                     (match_operand:SF 2 "nonmemory_operand" "")
+                     (match_operand:SF 3 "register_operand" "")))]
+  ""
+  "
+{
+  enum rtx_code code = GET_CODE (operands[1]);
+  rtx ccreg = gen_rtx (REG,
+                      SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+                      61);
+
+  operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+}")
+
+;(define_expand "movdfcc"
+;  [(set (match_operand:DF 0 "register_operand" "")
+;      (if_then_else (match_operand 1 "comparison_operator" "")
+;                    (match_operand:DF 2 "nonmemory_operand" "")
+;                    (match_operand:DF 3 "register_operand" "")))]
+;  "0 /* ??? can generate less efficient code if constants involved */"
+;  "
+;{
+;  enum rtx_code code = GET_CODE (operands[1]);
+;  rtx ccreg = gen_rtx (REG,
+;                     SELECT_CC_MODE (code, arc_compare_op0, arc_compare_op1),
+;                     61);
+;
+;  operands[1] = gen_rtx (code, VOIDmode, ccreg, const0_rtx);
+;}")
+
+(define_insn "*movsicc_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (if_then_else (match_operand 1 "comparison_operator" "")
+                     (match_operand:SI 2 "nonmemory_operand" "rJi")
+                     (match_operand:SI 3 "register_operand" "0")))]
+  ""
+  "mov.%d1 %0,%S2"
+  [(set_attr "type" "cmove")])
+
+; ??? This doesn't properly handle constants.
+;(define_insn "*movdicc_insn"
+;  [(set (match_operand:DI 0 "register_operand" "=r,r")
+;      (if_then_else (match_operand 1 "comparison_operator" "")
+;                    (match_operand:DI 2 "nonmemory_operand" "r,Ji")
+;                    (match_operand:DI 3 "register_operand" "0,0")))]
+;  "0"
+;  "*
+;{
+;  switch (which_alternative)
+;    {
+;    case 0 :
+;      /* We normally copy the low-numbered register first.  However, if
+;       the first register operand 0 is the same as the second register of
+;       operand 1, we must copy in the opposite order.  */
+;      if (REGNO (operands[0]) == REGNO (operands[2]) + 1)
+;      return \"mov.%d1 %R0,%R2\;mov.%d1 %0,%2\";
+;      else
+;      return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+;    case 1 :
+;      return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+;    }
+;}"
+;  [(set_attr "type" "cmove,cmove")
+;   (set_attr "length" "2,4")])
+
+(define_insn "*movsfcc_insn"
+  [(set (match_operand:SF 0 "register_operand" "=r,r")
+       (if_then_else (match_operand 1 "comparison_operator" "")
+                     (match_operand:SF 2 "nonmemory_operand" "r,E")
+                     (match_operand:SF 3 "register_operand" "0,0")))]
+  ""
+  "@
+   mov.%d1 %0,%2
+   mov.%d1 %0,%2 ; %A2"
+  [(set_attr "type" "cmove,cmove")])
+
+;(define_insn "*movdfcc_insn"
+;  [(set (match_operand:DF 0 "register_operand" "=r,r")
+;      (if_then_else (match_operand 1 "comparison_operator" "")
+;                    (match_operand:DF 2 "nonmemory_operand" "r,E")
+;                    (match_operand:DF 3 "register_operand" "0,0")))]
+;  "0"
+;  "*
+;{
+;  switch (which_alternative)
+;    {
+;    case 0 :
+;      /* We normally copy the low-numbered register first.  However, if
+;       the first register operand 0 is the same as the second register of
+;       operand 1, we must copy in the opposite order.  */
+;      if (REGNO (operands[0]) == REGNO (operands[2]) + 1)
+;      return \"mov.%d1 %R0,%R2\;mov.%d1 %0,%2\";
+;      else
+;      return \"mov.%d1 %0,%2\;mov.%d1 %R0,%R2\";
+;    case 1 :
+;      return \"mov.%d1 %0,%L2\;mov.%d1 %R0,%H2 ; %A2\";
+;    }
+;}"
+;  [(set_attr "type" "cmove,cmove")
+;   (set_attr "length" "2,4")])
+\f
+;; Zero extension instructions.
+;; ??? We don't support volatile memrefs here, but I'm not sure why.
+
+(define_insn "zero_extendqihi2"
+  [(set (match_operand:HI 0 "register_operand" "=r,r")
+       (zero_extend:HI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   extb%? %0,%1
+   ldb%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendqihi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:HI 0 "register_operand" "=r")
+       (zero_extend:HI (match_dup 1)))]
+  ""
+  "extb%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+
+(define_insn "zero_extendqisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (zero_extend:SI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   extb%? %0,%1
+   ldb%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendqisi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI (match_dup 1)))]
+  ""
+  "extb%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+
+(define_insn "zero_extendhisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (zero_extend:SI (match_operand:HI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   extw%? %0,%1
+   ldw%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*zero_extendhisi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (zero_extend:SI (match_operand:HI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI (match_dup 1)))]
+  ""
+  "extw%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+\f
+;; Sign extension instructions.
+
+(define_insn "extendqihi2"
+  [(set (match_operand:HI 0 "register_operand" "=r,r")
+       (sign_extend:HI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   sexb%? %0,%1
+   ldb.x%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*extendqihi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (sign_extend:SI (match_operand:QI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:HI 0 "register_operand" "=r")
+       (sign_extend:HI (match_dup 1)))]
+  ""
+  "sexb%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+
+(define_insn "extendqisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (sign_extend:SI (match_operand:QI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   sexb%? %0,%1
+   ldb.x%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*extendqisi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (sign_extend:SI (match_operand:QI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI (match_dup 1)))]
+  ""
+  "sexb%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+
+(define_insn "extendhisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (sign_extend:SI (match_operand:HI 1 "nonvol_nonimm_operand" "r,m")))]
+  ""
+  "@
+   sexw%? %0,%1
+   ldw.x%U1 %0,%1"
+  [(set_attr "type" "unary,load")])
+
+(define_insn "*extendhisi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (sign_extend:SI (match_operand:HI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI (match_dup 1)))]
+  ""
+  "sexw%?.f %0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+\f
+;; Arithmetic instructions.
+
+(define_insn "addsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_operand:SI 1 "register_operand" "%r")
+                (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+  ""
+  "add%? %0,%1,%2")
+
+(define_insn "*addsi3_set_cc_insn"
+  [(set (reg:CC 61) (compare:CC
+                    (plus:SI (match_operand:SI 1 "register_operand" "%r")
+                             (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+                    (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_dup 1)
+                (match_dup 2)))]
+  ""
+  "add%?.f %0,%1,%2"
+  [(set_attr "cond" "set")])
+
+(define_insn "adddi3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (plus:DI (match_operand:DI 1 "nonmemory_operand" "%r")
+                (match_operand:DI 2 "nonmemory_operand" "ri")))
+   (clobber (reg:CC 61))]
+  ""
+  "*
+{
+  rtx op2 = operands[2];
+
+  if (GET_CODE (op2) == CONST_INT)
+    {
+      int sign = INTVAL (op2);
+      if (sign < 0)
+       return \"add.f %L0,%L1,%2\;adc %H0,%H1,-1\";
+      else
+       return \"add.f %L0,%L1,%2\;adc %H0,%H1,0\";
+    }
+  else
+    return \"add.f %L0,%L1,%L2\;adc %H0,%H1,%H2\";
+}"
+  [(set_attr "length" "2")])
+
+(define_insn "subsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (minus:SI (match_operand:SI 1 "register_operand" "r")
+                 (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+  ""
+  "sub%? %0,%1,%2")
+
+(define_insn "*subsi3_set_cc_insn"
+  [(set (reg:CC 61) (compare:CC
+                    (minus:SI (match_operand:SI 1 "register_operand" "%r")
+                              (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+                    (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (minus:SI (match_dup 1)
+                 (match_dup 2)))]
+  ""
+  "sub%?.f %0,%1,%2"
+  [(set_attr "cond" "set")])
+
+(define_insn "subdi3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (minus:DI (match_operand:DI 1 "nonmemory_operand" "r")
+                 (match_operand:DI 2 "nonmemory_operand" "ri")))
+   (clobber (reg:CC 61))]
+  ""
+  "*
+{
+  rtx op2 = operands[2];
+
+  if (GET_CODE (op2) == CONST_INT)
+    {
+      int sign = INTVAL (op2);
+      if (sign < 0)
+       return \"sub.f %L0,%L1,%2\;sbc %H0,%H1,-1\";
+      else
+       return \"sub.f %L0,%L1,%2\;sbc %H0,%H1,0\";
+    }
+  else
+    return \"sub.f %L0,%L1,%L2\;sbc %H0,%H1,%H2\";
+}"
+  [(set_attr "length" "2")])
+\f
+;; Boolean instructions.
+;;
+;; We don't define the DImode versions as expand_binop does a good enough job.
+
+(define_insn "andsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (and:SI (match_operand:SI 1 "register_operand" "%r")
+               (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+  ""
+  "and%? %0,%1,%2")
+
+(define_insn "*andsi3_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (and:SI (match_operand:SI 1 "register_operand" "%r")
+                              (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (and:SI (match_dup 1)
+               (match_dup 2)))]
+  ""
+  "and%?.f %0,%1,%2"
+  [(set_attr "cond" "set_zn")])
+
+(define_insn "*bicsi3_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (and:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+               (not:SI (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r"))))]
+  ""
+  "bic%? %0,%1,%2"
+  [(set_attr "length" "1,2,1,2")])
+
+(define_insn "*bicsi3_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (and:SI (match_operand:SI 1 "register_operand" "%r")
+                              (not:SI (match_operand:SI 2 "nonmemory_operand" "rIJ")))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (and:SI (match_dup 1)
+               (not:SI (match_dup 2))))]
+  ""
+  "bic%?.f %0,%1,%2"
+  [(set_attr "cond" "set_zn")])
+
+(define_insn "iorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ior:SI (match_operand:SI 1 "register_operand" "%r")
+               (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+  ""
+  "or%? %0,%1,%2")
+
+(define_insn "*iorsi3_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (ior:SI (match_operand:SI 1 "register_operand" "%r")
+                              (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (ior:SI (match_dup 1)
+               (match_dup 2)))]
+  ""
+  "or%?.f %0,%1,%2"
+  [(set_attr "cond" "set_zn")])
+
+(define_insn "xorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (xor:SI (match_operand:SI 1 "register_operand" "%r")
+               (match_operand:SI 2 "nonmemory_operand" "rIJ")))]
+  ""
+  "xor%? %0,%1,%2")
+
+(define_insn "*xorsi3_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CCZN
+                      (xor:SI (match_operand:SI 1 "register_operand" "%r")
+                              (match_operand:SI 2 "nonmemory_operand" "rIJ"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (xor:SI (match_dup 1)
+               (match_dup 2)))]
+  ""
+  "xor%?.f %0,%1,%2"
+  [(set_attr "cond" "set_zn")])
+
+(define_insn "negsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (neg:SI (match_operand:SI 1 "register_operand" "r")))]
+  ""
+  "sub%? %0,0,%1"
+  [(set_attr "type" "unary")])
+
+(define_insn "*negsi2_set_cc_insn"
+  [(set (reg:CC 61) (compare:CC
+                    (neg:SI (match_operand:SI 1 "register_operand" "r"))
+                    (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (neg:SI (match_dup 1)))]
+  ""
+  "sub%?.f %0,0,%1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set")])
+
+(define_insn "negdi2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (neg:DI (match_operand:DI 1 "register_operand" "r")))
+   (clobber (reg:SI 61))]
+  ""
+  "sub.f %L0,0,%L1\;sbc %H0,0,%H1"
+  [(set_attr "type" "unary")
+   (set_attr "length" "2")])
+
+(define_insn "one_cmplsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (not:SI (match_operand:SI 1 "register_operand" "r")))]
+  ""
+  "xor%? %0,%1,-1"
+  [(set_attr "type" "unary")])
+
+(define_insn "*one_cmplsi2_set_cc_insn"
+  [(set (reg:CCZN 61) (compare:CC
+                      (not:SI (match_operand:SI 1 "register_operand" "r"))
+                      (const_int 0)))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (not:SI (match_dup 1)))]
+  ""
+  "xor%?.f %0,%1,-1"
+  [(set_attr "type" "unary")
+   (set_attr "cond" "set_zn")])
+\f
+;; Shift instructions.
+
+(define_expand "ashlsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (ashift:SI (match_operand:SI 1 "register_operand" "")
+                  (match_operand:SI 2 "nonmemory_operand" "")))]
+  ""
+  "
+{
+  if (! TARGET_SHIFTER)
+    {
+      emit_insn (gen_rtx
+                (PARALLEL, VOIDmode,
+                 gen_rtvec (2,
+                            gen_rtx (SET, VOIDmode, operands[0],
+                                     gen_rtx (ASHIFT, SImode, operands[1], operands[2])),
+                            gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+      DONE;
+    }
+}")
+
+(define_expand "ashrsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (ashiftrt:SI (match_operand:SI 1 "register_operand" "")
+                    (match_operand:SI 2 "nonmemory_operand" "")))]
+  ""
+  "
+{
+  if (! TARGET_SHIFTER)
+    {
+      emit_insn (gen_rtx
+                (PARALLEL, VOIDmode,
+                 gen_rtvec (2,
+                            gen_rtx (SET, VOIDmode, operands[0],
+                                     gen_rtx (ASHIFTRT, SImode, operands[1], operands[2])),
+                            gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+      DONE;
+    }
+}")
+
+(define_expand "lshrsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
+                    (match_operand:SI 2 "nonmemory_operand" "")))]
+  ""
+  "
+{
+  if (! TARGET_SHIFTER)
+    {
+      emit_insn (gen_rtx
+                (PARALLEL, VOIDmode,
+                 gen_rtvec (2,
+                            gen_rtx (SET, VOIDmode, operands[0],
+                                     gen_rtx (LSHIFTRT, SImode, operands[1], operands[2])),
+                            gen_rtx (CLOBBER, VOIDmode, gen_rtx (SCRATCH, SImode, 0)))));
+      DONE;
+    }
+}")
+
+(define_insn "*ashlsi3_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (ashift:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+                  (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+  "TARGET_SHIFTER"
+  "asl%? %0,%1,%2"
+  [(set_attr "type" "shift")
+   (set_attr "length" "1,2,1,2")])
+
+(define_insn "*ashrsi3_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (ashiftrt:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+                    (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+  "TARGET_SHIFTER"
+  "asr%? %0,%1,%2"
+  [(set_attr "type" "shift")
+   (set_attr "length" "1,2,1,2")])
+
+(define_insn "*lshrsi3_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (lshiftrt:SI (match_operand:SI 1 "nonmemory_operand" "r,r,I,J")
+                    (match_operand:SI 2 "nonmemory_operand" "rI,J,r,r")))]
+  "TARGET_SHIFTER"
+  "lsr%? %0,%1,%2"
+  [(set_attr "type" "shift")
+   (set_attr "length" "1,2,1,2")])
+
+(define_insn "*shift_si3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operator:SI 3 "shift_operator"
+                          [(match_operand:SI 1 "register_operand" "0")
+                           (match_operand:SI 2 "nonmemory_operand" "rIJ")]))
+   (clobber (match_scratch:SI 4 "=&r"))]
+  "! TARGET_SHIFTER"
+  "* return output_shift (operands);"
+  [(set_attr "type" "shift")
+   (set_attr "length" "8")])
+\f
+;; Compare instructions.
+;; This controls RTL generation and register allocation.
+
+;; We generate RTL for comparisons and branches by having the cmpxx 
+;; patterns store away the operands.  Then, the scc and bcc patterns
+;; emit RTL for both the compare and the branch.
+
+(define_expand "cmpsi"
+  [(set (reg:CC 61)
+       (compare:CC (match_operand:SI 0 "register_operand" "")
+                   (match_operand:SI 1 "nonmemory_operand" "")))]
+  ""
+  "
+{
+  arc_compare_op0 = operands[0];
+  arc_compare_op1 = operands[1];
+  DONE;
+}")
+
+;; ??? We may be able to relax this a bit by adding a new constant 'K' for 0.
+;; This assumes sub.f 0,symbol,0 is a valid insn.
+;; Note that "sub.f 0,r0,1" is an 8 byte insn.  To avoid unnecessarily
+;; creating 8 byte insns we duplicate %1 in the destination reg of the insn
+;; if it's a small constant.
+
+(define_insn "*cmpsi_cc_insn"
+  [(set (reg:CC 61)
+       (compare:CC (match_operand:SI 0 "register_operand" "r,r,r")
+                   (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+  ""
+  "@
+   sub.f 0,%0,%1
+   sub.f %1,%0,%1
+   sub.f 0,%0,%1"
+  [(set_attr "type" "compare,compare,compare")])
+
+(define_insn "*cmpsi_cczn_insn"
+  [(set (reg:CCZN 61)
+       (compare:CCZN (match_operand:SI 0 "register_operand" "r,r,r")
+                     (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+  ""
+  "@
+   sub.f 0,%0,%1
+   sub.f %1,%0,%1
+   sub.f 0,%0,%1"
+  [(set_attr "type" "compare,compare,compare")])
+
+(define_insn "*cmpsi_ccznc_insn"
+  [(set (reg:CCZNC 61)
+       (compare:CCZNC (match_operand:SI 0 "register_operand" "r,r,r")
+                      (match_operand:SI 1 "nonmemory_operand" "r,I,J")))]
+  ""
+  "@
+   sub.f 0,%0,%1
+   sub.f %1,%0,%1
+   sub.f 0,%0,%1"
+  [(set_attr "type" "compare,compare,compare")])
+
+;; Next come the scc insns.
+
+(define_expand "seq"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (eq:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (EQ, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sne"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ne:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (NE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgt"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (gt:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sle"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (le:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sge"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ge:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "slt"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (lt:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgtu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (gtu:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sleu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (leu:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sgeu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (geu:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "sltu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ltu:SI (match_dup 1) (const_int 0)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_insn "*scc_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operator:SI 1 "comparison_operator" [(reg 61) (const_int 0)]))]
+  ""
+  "mov %0,1\;sub.%D1 %0,%0,%0"
+  [(set_attr "type" "unary")
+   (set_attr "length" "2")])
+
+;; ??? Look up negscc insn.  See pa.md for example.
+(define_insn "*neg_scc_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (neg:SI (match_operator:SI 1 "comparison_operator"
+                [(reg 61) (const_int 0)])))]
+  ""
+  "mov %0,-1\;sub.%D1 %0,%0,%0"
+  [(set_attr "type" "unary")
+   (set_attr "length" "2")])
+
+(define_insn "*not_scc_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (not:SI (match_operator:SI 1 "comparison_operator"
+                [(reg 61) (const_int 0)])))]
+  ""
+  "mov %0,1\;sub.%d1 %0,%0,%0"
+  [(set_attr "type" "unary")
+   (set_attr "length" "2")])
+\f
+;; These control RTL generation for conditional jump insns
+
+(define_expand "beq"
+  [(set (pc)
+       (if_then_else (eq (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (EQ, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bne"
+  [(set (pc)
+       (if_then_else (ne (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (NE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgt"
+  [(set (pc)
+       (if_then_else (gt (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "ble"
+  [(set (pc)
+       (if_then_else (le (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bge"
+  [(set (pc)
+       (if_then_else (ge (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GE, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "blt"
+  [(set (pc)
+       (if_then_else (lt (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LT, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgtu"
+  [(set (pc)
+       (if_then_else (gtu (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GTU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bleu"
+  [(set (pc)
+       (if_then_else (leu (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bgeu"
+  [(set (pc)
+       (if_then_else (geu (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (GEU, arc_compare_op0, arc_compare_op1);
+}")
+
+(define_expand "bltu"
+  [(set (pc)
+       (if_then_else (ltu (match_dup 1) (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "
+{
+  operands[1] = gen_compare_reg (LTU, arc_compare_op0, arc_compare_op1);
+}")
+
+;; Now match both normal and inverted jump.
+
+(define_insn "*branch_insn"
+  [(set (pc)
+       (if_then_else (match_operator 1 "proper_comparison_operator"
+                                     [(reg 61) (const_int 0)])
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "*
+{
+  if (arc_ccfsm_branch_deleted_p ())
+    {
+      arc_ccfsm_record_branch_deleted ();
+      return \"; branch deleted, next insns conditionalized\";
+    }
+  else
+    return \"%~b%d1%# %l0\";
+}"
+  [(set_attr "type" "branch")])
+
+(define_insn "*rev_branch_insn"
+  [(set (pc)
+       (if_then_else (match_operator 1 "proper_comparison_operator"
+                                     [(reg 61) (const_int 0)])
+                     (pc)
+                     (label_ref (match_operand 0 "" ""))))]
+  "REVERSIBLE_CC_MODE (GET_MODE (XEXP (operands[1], 0)))"
+  "*
+{
+  if (arc_ccfsm_branch_deleted_p ())
+    {
+      arc_ccfsm_record_branch_deleted ();
+      return \"; branch deleted, next insns conditionalized\";
+    }
+  else
+    return \"%~b%D1%# %l0\";
+}"
+  [(set_attr "type" "branch")])
+\f
+;; Unconditional and other jump instructions.
+
+(define_insn "jump"
+  [(set (pc) (label_ref (match_operand 0 "" "")))]
+  ""
+  "b%* %l0"
+  [(set_attr "type" "uncond_branch")])
+
+(define_insn "indirect_jump"
+  [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
+  ""
+  "j%* %a0"
+  [(set_attr "type" "uncond_branch")])
+;; Implement a switch statement.
+;; This wouldn't be necessary in the non-pic case if we could distinguish
+;; label refs of the jump table from other label refs.  The problem is that
+;; label refs are output as "%st(.LL42)" but we don't want the %st - we want
+;; the real address since it's the address of the table.
+
+(define_expand "casesi"
+  [(set (match_dup 5)
+       (minus:SI (match_operand:SI 0 "register_operand" "")
+                 (match_operand:SI 1 "nonmemory_operand" "")))
+   (set (reg:CC 61)
+       (compare:CC (match_dup 5)
+                   (match_operand:SI 2 "nonmemory_operand" "")))
+   (set (pc)
+       (if_then_else (gtu (reg:CC 61)
+                          (const_int 0))
+                     (label_ref (match_operand 4 "" ""))
+                     (pc)))
+   (parallel
+    [(set (pc)
+         (mem:SI (plus:SI (mult:SI (match_dup 5)
+                                   (const_int 4))
+                          (label_ref (match_operand 3 "" "")))))
+     (clobber (match_scratch:SI 6 ""))
+     (clobber (match_scratch:SI 7 ""))])]
+  ""
+  "
+{
+  operands[5] = gen_reg_rtx (SImode);
+}")
+
+(define_insn "*casesi_insn"
+  [(set (pc)
+       (mem:SI (plus:SI (mult:SI (match_operand:SI 0 "register_operand" "r")
+                                 (const_int 4))
+                        (label_ref (match_operand 1 "" "")))))
+   (clobber (match_scratch:SI 2 "=r"))
+   (clobber (match_scratch:SI 3 "=r"))]
+  ""
+  "*
+{
+  output_asm_insn (\"mov %2,%1\", operands);
+  if (TARGET_SHIFTER)
+    output_asm_insn (\"asl %3,%0,2\", operands);
+  else
+    output_asm_insn (\"asl %3,%0\;asl %3,%3\", operands);
+  output_asm_insn (\"ld %2,[%2,%3]\", operands);
+  output_asm_insn (\"j.nd %a2\", operands);
+  return \"\";
+}"
+  [(set_attr "type" "uncond_branch")
+   (set_attr "length" "6")])
+
+(define_insn "tablejump"
+  [(set (pc) (match_operand:SI 0 "address_operand" "p"))
+   (use (label_ref (match_operand 1 "" "")))]
+  "0 /* disabled -> using casesi now */"
+  "j%* %a0"
+  [(set_attr "type" "uncond_branch")])
+
+(define_expand "call"
+  ;; operands[1] is stack_size_rtx
+  ;; operands[2] is next_arg_register
+  [(parallel [(call (match_operand:SI 0 "call_operand" "")
+                   (match_operand 1 "" ""))
+            (clobber (reg:SI 31))])]
+  ""
+  "")
+
+(define_insn "*call_via_reg"
+  [(call (mem:SI (match_operand:SI 0 "register_operand" "r"))
+        (match_operand 1 "" ""))
+   (clobber (reg:SI 31))]
+  ""
+  "lr blink,[status]\;j.d %0\;add blink,blink,2"
+  [(set_attr "type" "call_no_delay_slot")
+   (set_attr "length" "3")])
+
+(define_insn "*call_via_label"
+  [(call (mem:SI (match_operand:SI 0 "call_address_operand" ""))
+        (match_operand 1 "" ""))
+   (clobber (reg:SI 31))]
+  ""
+  ; The %~ is necessary in case this insn gets conditionalized and the previous
+  ; insn is the cc setter.
+  "%~bl%!%* %0"
+  [(set_attr "type" "call")
+   (set_attr "cond" "canuse")])
+
+(define_expand "call_value"
+  ;; operand 2 is stack_size_rtx
+  ;; operand 3 is next_arg_register
+  [(parallel [(set (match_operand 0 "register_operand" "=r")
+                  (call (match_operand:SI 1 "call_operand" "")
+                        (match_operand 2 "" "")))
+            (clobber (reg:SI 31))])]
+  ""
+  "")
+
+(define_insn "*call_value_via_reg"
+  [(set (match_operand 0 "register_operand" "=r")
+       (call (mem:SI (match_operand:SI 1 "register_operand" "r"))
+             (match_operand 2 "" "")))
+   (clobber (reg:SI 31))]
+  ""
+  "lr blink,[status]\;j.d %1\;add blink,blink,2"
+  [(set_attr "type" "call_no_delay_slot")
+   (set_attr "length" "3")])
+
+(define_insn "*call_value_via_label"
+  [(set (match_operand 0 "register_operand" "=r")
+       (call (mem:SI (match_operand:SI 1 "call_address_operand" ""))
+             (match_operand 2 "" "")))
+   (clobber (reg:SI 31))]
+  ""
+  ; The %~ is necessary in case this insn gets conditionalized and the previous
+  ; insn is the cc setter.
+  "%~bl%!%* %1"
+  [(set_attr "type" "call")
+   (set_attr "cond" "canuse")])
+\f
+(define_insn "nop"
+  [(const_int 0)]
+  ""
+  "nop"
+  [(set_attr "type" "misc")])
+
+;; Special pattern to flush the icache.
+;; ??? Not sure what to do here.  Some ARC's are known to support this.
+
+(define_insn "flush_icache"
+  [(unspec_volatile [(match_operand 0 "memory_operand" "m")] 0)]
+  ""
+  "* return \"\";"
+  [(set_attr "type" "misc")])
+\f
+;; Split up troublesome insns for better scheduling.
+\f
+;; Peepholes go at the end.
diff --git a/gcc/config/arc/initfini.c b/gcc/config/arc/initfini.c
new file mode 100644 (file)
index 0000000..084e229
--- /dev/null
@@ -0,0 +1,157 @@
+/* .init/.fini section handling + C++ global constructor/destructor handling.
+   This file is based on crtstuff.c, sol2-crti.asm, sol2-crtn.asm.
+
+Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, if you link this file with files
+   compiled with GCC to produce an executable, this does not cause
+   the resulting executable to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.  */
+
+/*  Declare a pointer to void function type.  */
+typedef void (*func_ptr) (void);
+
+#ifdef CRT_INIT
+
+/* NOTE:  In order to be able to support SVR4 shared libraries, we arrange
+   to have one set of symbols { __CTOR_LIST__, __DTOR_LIST__, __CTOR_END__,
+   __DTOR_END__ } per root executable and also one set of these symbols
+   per shared library.  So in any given whole process image, we may have
+   multiple definitions of each of these symbols.  In order to prevent
+   these definitions from conflicting with one another, and in order to
+   ensure that the proper lists are used for the initialization/finalization
+   of each individual shared library (respectively), we give these symbols
+   only internal (i.e. `static') linkage, and we also make it a point to
+   refer to only the __CTOR_END__ symbol in crtfini.o and the __DTOR_LIST__
+   symbol in crtinit.o, where they are defined.  */
+
+static func_ptr __CTOR_LIST__[1] __attribute__ ((section (".ctors")))
+     = { (func_ptr) (-1) };
+
+static func_ptr __DTOR_LIST__[1] __attribute__ ((section (".dtors")))
+     = { (func_ptr) (-1) };
+
+/* Run all the global destructors on exit from the program.  */
+/* Some systems place the number of pointers in the first word of the
+   table.  On SVR4 however, that word is -1.  In all cases, the table is
+   null-terminated.  On SVR4, we start from the beginning of the list and
+   invoke each per-compilation-unit destructor routine in order
+   until we find that null.
+
+   Note that this function MUST be static.  There will be one of these
+   functions in each root executable and one in each shared library, but
+   although they all have the same code, each one is unique in that it
+   refers to one particular associated `__DTOR_LIST__' which belongs to the
+   same particular root executable or shared library file.  */
+
+static void __do_global_dtors ()
+asm ("__do_global_dtors") __attribute__ ((section (".text")));
+
+static void
+__do_global_dtors ()
+{
+  func_ptr *p;
+  for (p = __DTOR_LIST__ + 1; *p; p++)
+    (*p) ();
+}
+
+/* .init section start.
+   This must appear at the start of the .init section.  */
+
+asm ("
+       .section .init\n
+       .global init\n
+       .word 0\n
+init:\n
+       st blink,[sp,4]\n
+       st fp,[sp]\n
+       mov fp,sp\n
+       sub sp,sp,16\n
+");
+
+/* .fini section start.
+   This must appear at the start of the .init section.  */
+
+asm ("
+       .section .fini\n
+       .global fini\n
+       .word 0\n
+fini:\n
+       st blink,[sp,4]\n
+       st fp,[sp]\n
+       mov fp,sp\n
+       sub sp,sp,16\n
+       bl.nd __do_global_dtors
+");
+
+#endif /* CRT_INIT */
+
+#ifdef CRT_FINI
+
+/* Put a word containing zero at the end of each of our two lists of function
+   addresses.  Note that the words defined here go into the .ctors and .dtors
+   sections of the crtend.o file, and since that file is always linked in
+   last, these words naturally end up at the very ends of the two lists
+   contained in these two sections.  */
+
+static func_ptr __CTOR_END__[1] __attribute__ ((section (".ctors")))
+     = { (func_ptr) 0 };
+
+static func_ptr __DTOR_END__[1] __attribute__ ((section (".dtors")))
+     = { (func_ptr) 0 };
+
+/* Run all global constructors for the program.
+   Note that they are run in reverse order.  */
+
+static void __do_global_ctors ()
+asm ("__do_global_ctors") __attribute__ ((section (".text")));
+
+static void
+__do_global_ctors ()
+{
+  func_ptr *p;
+  for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--)
+    (*p) ();
+}
+
+/* .init section end.
+   This must live at the end of the .init section.  */
+
+asm ("
+       .section .init\n
+       bl.nd __do_global_ctors
+       ld blink,[fp,4]\n
+       j.d blink\n
+       ld.a fp,[sp,16]\n
+");
+
+/* .fini section end.
+   This must live at the end of the .fini section.  */
+
+asm ("
+       .section .fini\n
+       ld blink,[fp,4]\n
+       j.d blink\n
+       ld.a fp,[sp,16]\n
+");
+
+#endif /* CRT_FINI */
diff --git a/gcc/config/arc/lib1funcs.asm b/gcc/config/arc/lib1funcs.asm
new file mode 100644 (file)
index 0000000..a2d509a
--- /dev/null
@@ -0,0 +1,273 @@
+; libgcc1 routines for ARC cpu.
+
+/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file with other programs, and to distribute
+those programs without any restriction coming from the use of this
+file.  (The General Public License restrictions do apply in other
+respects; for example, they cover modification of the file, and
+distribution when not linked into another program.)
+
+This file 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, if you link this library with other files,
+   some of which are compiled with GCC, to produce an executable,
+   this library does not by itself cause the resulting executable
+   to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.  */
+
+#ifdef  L_mulsi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___mulsi3
+___mulsi3:
+
+/* This the simple version.
+
+  while (a) 
+    {
+      if (a & 1)
+        r += b;
+      a >>= 1;
+      b <<= 1;
+    }
+*/
+       mov r2,0                ; Accumulate result here.
+.Lloop:
+       sub.f 0,r0,0            ; while (a)
+       nop
+       beq.nd .Ldone
+       and.f 0,r0,1            ; if (a & 1)
+       add.nz r2,r2,r1         ; r += b
+       lsr r0,r0               ; a >>= 1
+       b.d .Lloop
+       lsl r1,r1               ; b <<= 1
+.Ldone:
+       j.d blink
+       mov r0,r2
+#endif
+
+#endif /* L_mulsi3 */
+
+#ifdef  L_umulsidi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___umulsidi3
+___umulsidi3:
+
+/* This the simple version.
+
+  while (a) 
+    {
+      if (a & 1)
+        r += b;
+      a >>= 1;
+      b <<= 1;
+    }
+*/
+       mov r2,0                ; Top part of b.
+       mov r3,0                ; Accumulate result here.
+       mov r4,0
+.Lloop:
+       sub.f 0,r0,0            ; while (a)
+       nop
+       beq.nd .Ldone
+       and.f 0,r0,1            ; if (a & 1)
+       add.nz r4,r4,r1         ; r += b
+       adc.nz r3,r3,r2
+       lsr r0,r0               ; a >>= 1
+       lsl.f r1,r1             ; b <<= 1
+       b.d .Lloop
+       rlc r2,r2
+.Ldone:
+#ifdef __big_endian__
+       mov r1,r4
+       j.d blink
+       mov r0,r3
+#else
+       mov r0,r4
+       j.d blink
+       mov r1,r3
+#endif
+#endif
+
+#endif /* L_umulsidi3 */
+
+#ifdef L_divmod_tools
+
+; Utilities used by all routines.
+
+       .section .text
+       .align 4
+
+; inputs: r0 = numerator, r1 = denominator
+; outputs: positive r0/r1,
+;          r6.bit1 = sign of numerator, r6.bit0 = sign of result
+
+       .global ___divnorm
+___divnorm:
+       mov r6,0                ; keep sign in r6
+       sub.f 0,r0,0            ; is numerator -ve?
+       sub.lt r0,0,r0          ; negate numerator
+       mov.lt r6,3             ; sign is -ve
+       sub.f 0,r1,0            ; is denominator -ve?
+       sub.lt r1,0,r1          ; negate denominator
+       xor.lt r6,r6,1          ; toggle sign
+       j.nd blink
+
+/*
+unsigned long
+udivmodsi4(int modwanted, unsigned long num, unsigned long den)
+{
+  unsigned long bit = 1;
+  unsigned long res = 0;
+
+  while (den < num && bit && !(den & (1L<<31)))
+    {
+      den <<=1;
+      bit <<=1;
+    }
+  while (bit)
+    {
+      if (num >= den)
+       {
+         num -= den;
+         res |= bit;
+       }
+      bit >>=1;
+      den >>=1;
+    }
+  if (modwanted) return num;
+  return res;
+}
+*/
+
+; inputs: r0 = numerator, r1 = denominator
+; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed
+
+       .global ___udivmodsi4
+___udivmodsi4:
+       mov r2,1                ; bit = 1
+       mov r3,0                ; res = 0
+.Lloop1:
+       sub.f 0,r1,r0           ; while (den < num
+       nop
+       bnc.nd .Lloop2
+       sub.f 0,r2,0            ; && bit
+       nop
+       bz.nd .Lloop2
+       lsl.f 0,r1              ; && !(den & (1<<31))
+       nop
+       bc.nd .Lloop2
+       lsl r1,r1               ; den <<= 1
+       b.d .Lloop1
+       lsl r2,r2               ; bit <<= 1
+.Lloop2:
+       sub.f 0,r2,0            ; while (bit)
+       nop
+       bz.nd .Ldivmodend
+       sub.f 0,r0,r1           ; if (num >= den)
+       nop
+       bc.nd .Lshiftdown
+       sub r0,r0,r1            ; num -= den
+       or r3,r3,r2             ; res |= bit
+.Lshiftdown:
+       lsr r2,r2               ; bit >>= 1
+       b.d .Lloop2
+       lsr r1,r1               ; den >>= 1
+.Ldivmodend:
+       mov r1,r0               ; r1 = mod
+       j.d blink
+       mov r0,r3               ; r0 = res
+
+#endif
+
+#ifdef  L_udivsi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___udivsi3
+___udivsi3:
+       mov r7,blink
+       bl.nd ___udivmodsi4
+       j.nd r7
+#endif
+
+#endif /* L_udivsi3 */
+
+#ifdef  L_divsi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___divsi3
+___divsi3:
+       mov r7,blink
+       bl.nd ___divnorm
+       bl.nd ___udivmodsi4
+       and.f 0,r6,1
+       sub.nz r0,0,r0          ; cannot go in delay slot, has limm value
+       j.nd r7
+#endif
+
+#endif /* L_divsi3 */
+
+#ifdef  L_umodsi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___umodsi3
+___umodsi3:
+       mov r7,blink
+       bl.nd ___udivmodsi4
+       j.d r7
+       mov r0,r1
+#endif
+
+#endif /* L_umodsi3 */
+
+#ifdef  L_modsi3
+       .section .text
+       .align 4
+
+#ifdef __base__
+       .cpu base
+       .global ___modsi3
+___modsi3:
+       mov r7,blink
+       bl.nd ___divnorm
+       bl.nd ___udivmodsi4
+       and.f 0,r6,2
+       sub.nz r1,0,r1
+       j.d r7
+       mov r0,r1
+#endif
+
+#endif /* L_modsi3 */
diff --git a/gcc/config/arc/t-arc b/gcc/config/arc/t-arc
new file mode 100644 (file)
index 0000000..d922c27
--- /dev/null
@@ -0,0 +1,72 @@
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = arc/lib1funcs.asm
+LIB1ASMFUNCS = _mulsi3 _umulsidi3 _udivsi3 _divsi3 _umodsi3 _modsi3 _divmod_tools
+
+# We need libgcc routines to be mangled according to which cpu they
+# were compiled for.
+# ??? -mmangle-cpu passed by default for now.
+#LIBGCC2_CFLAGS = -g1 -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -mmangle-cpu
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+       echo '#ifndef __big_endian__' > dp-bit.c
+       echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
+       echo '#endif' >> dp-bit.c
+       cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+       echo '#define FLOAT' > fp-bit.c
+       echo '#ifndef __big_endian__' >> fp-bit.c
+       echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
+       echo '#endif' >> fp-bit.c
+       cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+# .init/.fini section routines
+
+x-crtinit.o: $(srcdir)/config/arc/initfini.c $(GCC_PASSES) $(CONFIG_H)
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+         -DCRT_INIT -finhibit-size-directive -fno-inline-functions \
+         -g0 -c $(srcdir)/config/arc/initfini.c -o $(dir)/crtinit.o
+
+x-crtfini.o: $(srcdir)/config/arc/initfini.c $(GCC_PASSES) $(CONFIG_H)
+       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS) \
+         -DCRT_FINI -finhibit-size-directive -fno-inline-functions \
+         -g0 -c $(srcdir)/config/arc/initfini.c -o $(dir)/crtfini.o
+
+MULTILIB_OPTIONS = EB
+MULTILIB_DIRNAMES = be
+
+# We need our own versions to build multiple copies of crt*.o.
+# ??? Use new support in Makefile.
+
+LIBGCC = stmp-multilib-arc
+INSTALL_LIBGCC = install-multilib-arc
+
+stmp-multilib-arc: stmp-multilib
+       for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
+         dir=`echo $$i | sed -e 's/;.*$$//'`; \
+         flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
+         $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
+           CC="$(CC)" CFLAGS="$(CFLAGS)" \
+           HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+           GCC_CFLAGS="$(GCC_CFLAGS) $${flags}" \
+           INCLUDES="$(INCLUDES)" CRTSTUFF_T_CFLAGS=$(CRTSTUFF_T_CFLAGS) \
+           dir="$${dir}" x-crtinit.o x-crtfini.o; \
+         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+       done
+       touch stmp-multilib-arc
+
+install-multilib-arc: install-multilib
+       for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \
+         dir=`echo $$i | sed -e 's/;.*$$//'`; \
+         rm -f $(libsubdir)/$${dir}/crtinit.o; \
+         $(INSTALL_DATA) $${dir}/crtinit.o $(libsubdir)/$${dir}/crtinit.o; \
+         chmod a-x $(libsubdir)/$${dir}/crtinit.o; \
+         rm -f $(libsubdir)/$${dir}/crtfini.o; \
+         $(INSTALL_DATA) $${dir}/crtfini.o $(libsubdir)/$${dir}/crtfini.o; \
+         chmod a-x $(libsubdir)/$${dir}/crtfini.o; \
+       done
diff --git a/gcc/config/arc/xm-arc.h b/gcc/config/arc/xm-arc.h
new file mode 100644 (file)
index 0000000..ba011e9
--- /dev/null
@@ -0,0 +1,47 @@
+/* Configuration for GNU C-compiler for the ARC processor.
+   Copyright (C) 1994, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* #defines that need visibility everywhere.  */
+#define FALSE 0
+#define TRUE 1
+
+/* This describes the machine the compiler is hosted on.  */
+#define HOST_BITS_PER_CHAR 8
+#define HOST_BITS_PER_SHORT 16
+#define HOST_BITS_PER_INT 32
+#define HOST_BITS_PER_LONG 32
+#define HOST_BITS_PER_LONGLONG 64
+
+/* Doubles are stored in memory with the high order word first.  This
+   matters when cross-compiling.  */
+#define HOST_WORDS_BIG_ENDIAN 1
+
+/* target machine dependencies.
+   tm.h is a symbolic link to the actual target specific file.   */
+#include "tm.h"
+
+/* Arguments to use with `exit'.  */
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
+
+/* If compiled with Sun CC, the use of alloca requires this #include.  */
+#ifndef __GNUC__
+#include "alloca.h"
+#endif
diff --git a/gcc/config/arm/xm-netbsd.h b/gcc/config/arm/xm-netbsd.h
deleted file mode 100644 (file)
index 1c7a656..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Configuration for GCC for ARM running NetBSD as host.  */
-
-#include <arm/xm-arm.h>
-
-/* xm-netbsd.h defines this */
-#ifdef HAVE_VPRINTF
-#undef HAVE_VPRINTF
-#endif
-
-#include <xm-netbsd.h>
diff --git a/gcc/config/i386/crtdll.h b/gcc/config/i386/crtdll.h
new file mode 100644 (file)
index 0000000..c6b219a
--- /dev/null
@@ -0,0 +1,33 @@
+/* Operating system specific defines to be used when targeting GCC for
+   hosting on Windows32, using GNU tools and the Windows32 API Library,
+   as distinct from winnt.h, which is used to build GCC for use with a
+   windows style library and tool set and uses the Microsoft tools.
+   This variant uses CRTDLL.DLL insted of MSVCRTDLL.DLL.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+#undef LIBGCC_SPEC
+#define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lcrtdll"
+
+/* Specify a different entry point when linking a DLL */
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s}"
+
+#undef MATH_LIBRARY
+#define MATH_LIBRARY "-lcrtdll"
diff --git a/gcc/config/i386/osf1-ci.asm b/gcc/config/i386/osf1-ci.asm
new file mode 100644 (file)
index 0000000..a0f0773
--- /dev/null
@@ -0,0 +1,65 @@
+! crti.s for OSF/1, x86; derived from sol2-ci.asm.
+
+!   Copyright (C) 1993, 1998 Free Software Foundation, Inc.
+!   Written By Fred Fish, Nov 1992
+! 
+! This file is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by the
+! Free Software Foundation; either version 2, or (at your option) any
+! later version.
+! 
+! In addition to the permissions in the GNU General Public License, the
+! Free Software Foundation gives you unlimited permission to link the
+! compiled version of this file with other programs, and to distribute
+! those programs without any restriction coming from the use of this
+! file.  (The General Public License restrictions do apply in other
+! respects; for example, they cover modification of the file, and
+! distribution when not linked into another program.)
+! 
+! This file is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+! General Public License for more details.
+! 
+! You should have received a copy of the GNU General Public License
+! along with this program; see the file COPYING.  If not, write to
+! the Free Software Foundation, 59 Temple Place - Suite 330,
+! Boston, MA 02111-1307, USA.
+! 
+!    As a special exception, if you link this library with files
+!    compiled with GCC to produce an executable, this does not cause
+!    the resulting executable to be covered by the GNU General Public License.
+!    This exception does not however invalidate any other reasons why
+!    the executable file might be covered by the GNU General Public License.
+! 
+
+! This file just supplies labeled starting points for the .init and .fini
+! sections.  It is linked in before the values-Xx.o files and also before
+! crtbegin.o.
+       .file   "crti.s"
+       .ident  "GNU C crti.s"
+
+       .section .init
+       .globl  _init
+       .type   _init,@function
+_init:
+
+       .section .fini
+       .globl  _fini
+       .type   _fini,@function
+_fini:
+
+.globl _init_init_routine
+.data
+        .align 4
+        .type    _init_init_routine,@object
+        .size    _init_init_routine,4
+_init_init_routine:
+        .long _init
+.globl _init_fini_routine
+        .align 4
+        .type    _init_fini_routine,@object
+        .size    _init_fini_routine,4
+_init_fini_routine:
+        .long _fini
diff --git a/gcc/config/i386/osf1-cn.asm b/gcc/config/i386/osf1-cn.asm
new file mode 100644 (file)
index 0000000..a10298f
--- /dev/null
@@ -0,0 +1,46 @@
+! crtn.s for OSF/1, x86; derived from sol2-cn.asm.
+
+!   Copyright (C) 1993, 1998 Free Software Foundation, Inc.
+!   Written By Fred Fish, Nov 1992
+! 
+! This file is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by the
+! Free Software Foundation; either version 2, or (at your option) any
+! later version.
+! 
+! In addition to the permissions in the GNU General Public License, the
+! Free Software Foundation gives you unlimited permission to link the
+! compiled version of this file with other programs, and to distribute
+! those programs without any restriction coming from the use of this
+! file.  (The General Public License restrictions do apply in other
+! respects; for example, they cover modification of the file, and
+! distribution when not linked into another program.)
+! 
+! This file is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+! General Public License for more details.
+! 
+! You should have received a copy of the GNU General Public License
+! along with this program; see the file COPYING.  If not, write to
+! the Free Software Foundation, 59 Temple Place - Suite 330,
+! Boston, MA 02111-1307, USA.
+! 
+!    As a special exception, if you link this library with files
+!    compiled with GCC to produce an executable, this does not cause
+!    the resulting executable to be covered by the GNU General Public License.
+!    This exception does not however invalidate any other reasons why
+!    the executable file might be covered by the GNU General Public License.
+! 
+
+! This file just supplies returns for the .init and .fini sections.  It is
+! linked in after all other files.
+
+       .file   "crtn.o"
+       .ident  "GNU C crtn.o"
+
+       .section .init
+       ret    $0x0
+
+       .section .fini
+       ret    $0x0
diff --git a/gcc/config/i386/osf1elf.h b/gcc/config/i386/osf1elf.h
new file mode 100644 (file)
index 0000000..da61e8b
--- /dev/null
@@ -0,0 +1,260 @@
+/* OSF/1 1.3 now is compitable with SVR4, so include sysv4.h, and
+   put difference here.  */
+
+#include <stdio.h>
+#include "i386/sysv4.h"        /* Base i386 target machine definitions */
+#define _sys_siglist sys_siglist
+extern char *sys_siglist[];
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (i386 OSF/1)");
+
+/* WORD_SWITCH_TAKES_ARG defined in svr4 is not correct. We also
+ need an extra -soname */
+#undef WORD_SWITCH_TAKES_ARG
+#define WORD_SWITCH_TAKES_ARG(STR)                    \
+ (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)                 \
+  || !strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
+  || !strcmp (STR, "Tbss") || !strcmp (STR, "soname"))
+
+/* Note, -fpic and -fPIC are equivalent */
+#undef  CPP_SPEC
+#define CPP_SPEC "\
+%{fpic: -D__SHARED__} %{fPIC: %{!fpic: -D__SHARED__}} \
+%{.S:  %{!ansi:%{!traditional:%{!traditional-cpp:%{!ftraditional: -traditional}}}}} \
+%{.S:  -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
+%{.cc: -D__LANGUAGE_C_PLUS_PLUS} \
+%{.cxx:        -D__LANGUAGE_C_PLUS_PLUS} \
+%{.C:  -D__LANGUAGE_C_PLUS_PLUS} \
+%{.m:  -D__LANGUAGE_OBJECTIVE_C} \
+%{!.S: -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}"
+
+/* -mmcount or -mno-mcount should be used with -pg or -p */
+#undef  CC1_SPEC
+#define CC1_SPEC "%{p: %{!mmcount: %{!mno-mcount: -mno-mcount }}} \
+%{!p: %{pg: %{!mmcount: %{!mno-mcount: -mno-mcount }}}}"
+
+/* Note, -D__NO_UNDERSCORES__ -D__ELF__ are provided in the older version of
+   OSF/1 gcc. We keep them here, so that old /usr/include/i386/asm.h works.
+   */
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES \
+  "-D__NO_UNDERSCORES__ -D__ELF__ -DOSF -DOSF1 -Di386 -Dunix -Asystem(xpg4) -Asystem(osf1) -Acpu(i386) -Amachine(i386)"
+
+/* current OSF/1 doesn't provide separate crti.o and gcrti.o (and also, crtn.o
+   and gcrtn.o) for profile.  */
+
+#undef  STARTFILE_SPEC
+#define STARTFILE_SPEC "%{!shared: \
+                         %{!symbolic: \
+                          %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\
+                       crti.o%s \
+                       crtbegin.o%s"
+
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
+
+#undef ASM_SPEC
+#define ASM_SPEC       "%{v*: -v}"
+
+#undef  LINK_SPEC
+#define LINK_SPEC      "%{v*: -v} \
+               %{h*} %{z*} \
+               %{dy:-call_shared} %{dn:-static} \
+               %{static:-static} \
+               %{shared:-shared} \
+               %{call_shared:-call_shared} \
+               %{symbolic:-Bsymbolic -shared -call_shared} \
+               %{!dy: %{!dn: %{!static: %{!shared: %{!symbolic: \
+                       %{noshrlib: -static } \
+                       %{!noshrlib: -call_shared}}}}}}"
+
+#undef MD_EXEC_PREFIX
+#define MD_EXEC_PREFIX "/usr/ccs/gcc/"
+
+#undef  MD_STARTFILE_PREFIX
+#define MD_STARTFILE_PREFIX    "/usr/ccs/lib/"
+
+/* Define this macro meaning that gcc should find the library 'libgcc.a'
+   by hand, rather than passing the argument '-lgcc' to tell the linker
+   to do the search */
+#define LINK_LIBGCC_SPECIAL
+
+/* This goes with LINK_LIBGCC_SPECIAL, we need tell libgcc.a differently */
+#undef  LIBGCC_SPEC
+#define LIBGCC_SPEC "%{!shared:%{!symbolic:libgcc.a%s}}"
+
+/* A C statement to output assembler commands which will identify the object
+  file as having been compile with GNU CC. We don't need or want this for
+  OSF1. */
+#undef ASM_IDENTIFY_GCC
+#define ASM_IDENTIFY_GCC(FILE)
+
+/* Identify the front-end which produced this file.  To keep symbol
+   space down, and not confuse kdb, only do this if the language is
+   not C.  */
+#define ASM_IDENTIFY_LANGUAGE(STREAM)                                   \
+{                                                                       \
+  if (strcmp (lang_identify (), "c") != 0)                              \
+    output_lang_identify (STREAM);                                      \
+}
+
+/* Specify size_t, ptrdiff_t, and wchar_t types.  */
+#undef  SIZE_TYPE
+#undef  PTRDIFF_TYPE
+#undef  WCHAR_TYPE
+#undef  WCHAR_TYPE_SIZE
+
+#define SIZE_TYPE       "long unsigned int"
+#define PTRDIFF_TYPE    "int"
+#define WCHAR_TYPE      "unsigned int"
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+
+/* Turn off long double being 96 bits.  */
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 64
+
+/* Work with OSF/1 profile */
+#define MASK_NO_MCOUNT         000200000000    /* profiling uses mcount_ptr */
+
+#define TARGET_MCOUNT          ((target_flags & MASK_NO_MCOUNT) == 0)
+
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES                                             \
+     { "mcount",               -MASK_NO_MCOUNT},                       \
+     { "no-mcount",             MASK_NO_MCOUNT},
+
+/* This macro generates the assembly code for function entry.
+   FILE is a stdio stream to output the code to.
+   SIZE is an int: how many units of temporary storage to allocate.
+   Refer to the array `regs_ever_live' to determine which registers
+   to save; `regs_ever_live[I]' is nonzero if register number I
+   is ever used in the function.  This macro is responsible for
+   knowing which registers should not be saved even if used.
+
+   We override it here to allow for the new profiling code to go before
+   the prologue and the old mcount code to go after the prologue (and
+   after %ebx has been set up for ELF shared library support).  */
+#if 0
+#define OSF_PROFILE_BEFORE_PROLOGUE                                    \
+  (!TARGET_MCOUNT                                                      \
+   && !current_function_needs_context                                  \
+   && (!flag_pic                                                       \
+       || !frame_pointer_needed                                                \
+       || (!current_function_uses_pic_offset_table                     \
+          && !current_function_uses_const_pool)))
+#else
+#define OSF_PROFILE_BEFORE_PROLOGUE 0
+#endif
+#undef FUNCTION_PROLOGUE
+#define FUNCTION_PROLOGUE(FILE, SIZE)                                  \
+do                                                                     \
+  {                                                                    \
+    char *prefix = "";                 \
+    char *lprefix = LPREFIX;                                           \
+    int labelno = profile_label_no;                                    \
+                                                                       \
+    if (profile_flag && OSF_PROFILE_BEFORE_PROLOGUE)                   \
+      {                                                                        \
+       if (!flag_pic)                          \
+         {                                                             \
+           fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno);  \
+           fprintf (FILE, "\tcall *%s_mcount_ptr\n", prefix);          \
+         }                                                             \
+                                                                       \
+       else                                                            \
+         {                                                             \
+           static int call_no = 0;                                     \
+                                                                       \
+           fprintf (FILE, "\tcall %sPc%d\n", lprefix, call_no);        \
+           fprintf (FILE, "%sPc%d:\tpopl %%eax\n", lprefix, call_no);  \
+           fprintf (FILE, "\taddl $_GLOBAL_OFFSET_TABLE_+[.-%sPc%d],%%eax\n", \
+                    lprefix, call_no++);                               \
+           fprintf (FILE, "\tleal %sP%d@GOTOFF(%%eax),%%edx\n",        \
+                    lprefix, labelno);                                 \
+           fprintf (FILE, "\tmovl %s_mcount_ptr@GOT(%%eax),%%eax\n",   \
+                    prefix);                                           \
+           fprintf (FILE, "\tcall *(%%eax)\n");                        \
+         }                                                             \
+      }                                                                        \
+                                                                       \
+    function_prologue (FILE, SIZE);                                    \
+  }                                                                    \
+while (0)
+
+/* A C statement or compound statement to output to FILE some assembler code to
+   call the profiling subroutine `mcount'.  Before calling, the assembler code
+   must load the address of a counter variable into a register where `mcount'
+   expects to find the address.  The name of this variable is `LP' followed by
+   the number LABELNO, so you would generate the name using `LP%d' in a
+   `fprintf'.
+
+   The details of how the address should be passed to `mcount' are determined
+   by your operating system environment, not by GNU CC.  To figure them out,
+   compile a small program for profiling using the system's installed C
+   compiler and look at the assembler code that results. */
+
+#undef  FUNCTION_PROFILER
+#define FUNCTION_PROFILER(FILE, LABELNO)                               \
+do                                                                     \
+  {                                                                    \
+    if (!OSF_PROFILE_BEFORE_PROLOGUE)                                  \
+      {                                                                        \
+       char *prefix = "";                      \
+       char *lprefix = LPREFIX;                                        \
+       int labelno = LABELNO;                                  \
+                                                                       \
+       /* Note that OSF/rose blew it in terms of calling mcount,       \
+          since OSF/rose prepends a leading underscore, but mcount's   \
+          doesn't.  At present, we keep this kludge for ELF as well    \
+          to allow old kernels to build profiling.  */                 \
+                                                                       \
+       if (flag_pic                                                    \
+           && !current_function_uses_pic_offset_table                  \
+           && !current_function_uses_const_pool)                       \
+         abort ();                                                     \
+                                                                       \
+       if (TARGET_MCOUNT && flag_pic)                                  \
+         {                                                             \
+           fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%edx\n",        \
+                    lprefix, labelno);                                 \
+           fprintf (FILE, "\tcall *%smcount@GOT(%%ebx)\n", prefix);    \
+         }                                                             \
+                                                                       \
+       else if (TARGET_MCOUNT)                                         \
+         {                                                             \
+           fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno);  \
+           fprintf (FILE, "\tcall %smcount\n", prefix);                \
+         }                                                             \
+                                                                       \
+       else if (flag_pic && frame_pointer_needed)                      \
+         {                                                             \
+           fprintf (FILE, "\tmovl 4(%%ebp),%%ecx\n");                  \
+           fprintf (FILE, "\tpushl %%ecx\n");                          \
+           fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%edx\n",        \
+                    lprefix, labelno);                                 \
+           fprintf (FILE, "\tmovl _mcount_ptr@GOT(%%ebx),%%eax\n");    \
+           fprintf (FILE, "\tcall *(%%eax)\n");                        \
+           fprintf (FILE, "\tpopl %%eax\n");                           \
+         }                                                             \
+                                                                       \
+       else if (frame_pointer_needed)                                  \
+         {                                                             \
+           fprintf (FILE, "\tmovl 4(%%ebp),%%ecx\n");                  \
+           fprintf (FILE, "\tpushl %%ecx\n");                          \
+           fprintf (FILE, "\tmovl $%sP%d,%%edx\n", lprefix, labelno);  \
+           fprintf (FILE, "\tcall *_mcount_ptr\n");                    \
+           fprintf (FILE, "\tpopl %%eax\n");                           \
+         }                                                             \
+                                                                       \
+       else                                                            \
+         abort ();                                                     \
+      }                                                                        \
+  }                                                                    \
+while (0)
+
+#if defined (CROSS_COMPILE) && defined (HOST_BITS_PER_INT) && defined (HOST_BITS_PER_LONG) && defined (HOST_BITS_PER_LONGLONG)
+#if (HOST_BITS_PER_INT==32) && (HOST_BITS_PER_LONG==64) && (HOST_BITS_PER_LONGLONG==64)
+#define REAL_ARITHMETIC
+#endif
+#endif
diff --git a/gcc/config/i386/osf1elfgdb.h b/gcc/config/i386/osf1elfgdb.h
new file mode 100644 (file)
index 0000000..af6efa2
--- /dev/null
@@ -0,0 +1,7 @@
+/* Target definitions for GNU compiler for Intel 80386 running OSF/1 1.3+
+   with gas and gdb.  */
+
+/* Use stabs instead of DWARF debug format.  */
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+#include "i386/osf1elf.h"
diff --git a/gcc/config/i386/rtemself.h b/gcc/config/i386/rtemself.h
new file mode 100644 (file)
index 0000000..6486102
--- /dev/null
@@ -0,0 +1,169 @@
+/* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
+   Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Contributed by Eric Youngdale.
+   Modified for stabs-in-ELF by H.J. Lu.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#define LINUX_DEFAULT_ELF
+
+/* A lie, I guess, but the general idea behind linux/ELF is that we are
+   supposed to be outputting something that will assemble under SVr4.
+   This gets us pretty close.  */
+#include <i386/i386.h> /* Base i386 target machine definitions */
+#include <i386/att.h>  /* Use the i386 AT&T assembler syntax */
+#include <linux.h>     /* some common stuff */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (i386 RTEMS with ELF)");
+
+/* The svr4 ABI for the i386 says that records and unions are returned
+   in memory.  */
+#undef DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 1
+
+/* This is how to output an element of a case-vector that is relative.
+   This is only used for PIC code.  See comments by the `casesi' insn in
+   i386.md for an explanation of the expression this outputs. */
+#undef ASM_OUTPUT_ADDR_DIFF_ELT
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+  fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
+
+/* Indicate that jump tables go in the text section.  This is
+   necessary when compiling PIC code.  */
+#define JUMP_TABLES_IN_TEXT_SECTION
+
+/* Copy this from the svr4 specifications... */
+/* Define the register numbers to be used in Dwarf debugging information.
+   The SVR4 reference port C compiler uses the following register numbers
+   in its Dwarf output code:
+       0 for %eax (gnu regno = 0)
+       1 for %ecx (gnu regno = 2)
+       2 for %edx (gnu regno = 1)
+       3 for %ebx (gnu regno = 3)
+       4 for %esp (gnu regno = 7)
+       5 for %ebp (gnu regno = 6)
+       6 for %esi (gnu regno = 4)
+       7 for %edi (gnu regno = 5)
+   The following three DWARF register numbers are never generated by
+   the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
+   believes these numbers have these meanings.
+       8  for %eip    (no gnu equivalent)
+       9  for %eflags (no gnu equivalent)
+       10 for %trapno (no gnu equivalent)
+   It is not at all clear how we should number the FP stack registers
+   for the x86 architecture.  If the version of SDB on x86/svr4 were
+   a bit less brain dead with respect to floating-point then we would
+   have a precedent to follow with respect to DWARF register numbers
+   for x86 FP registers, but the SDB on x86/svr4 is so completely
+   broken with respect to FP registers that it is hardly worth thinking
+   of it as something to strive for compatibility with.
+   The version of x86/svr4 SDB I have at the moment does (partially)
+   seem to believe that DWARF register number 11 is associated with
+   the x86 register %st(0), but that's about all.  Higher DWARF
+   register numbers don't seem to be associated with anything in
+   particular, and even for DWARF regno 11, SDB only seems to under-
+   stand that it should say that a variable lives in %st(0) (when
+   asked via an `=' command) if we said it was in DWARF regno 11,
+   but SDB still prints garbage when asked for the value of the
+   variable in question (via a `/' command).
+   (Also note that the labels SDB prints for various FP stack regs
+   when doing an `x' command are all wrong.)
+   Note that these problems generally don't affect the native SVR4
+   C compiler because it doesn't allow the use of -O with -g and
+   because when it is *not* optimizing, it allocates a memory
+   location for each floating-point variable, and the memory
+   location is what gets described in the DWARF AT_location
+   attribute for the variable in question.
+   Regardless of the severe mental illness of the x86/svr4 SDB, we
+   do something sensible here and we use the following DWARF
+   register numbers.  Note that these are all stack-top-relative
+   numbers.
+       11 for %st(0) (gnu regno = 8)
+       12 for %st(1) (gnu regno = 9)
+       13 for %st(2) (gnu regno = 10)
+       14 for %st(3) (gnu regno = 11)
+       15 for %st(4) (gnu regno = 12)
+       16 for %st(5) (gnu regno = 13)
+       17 for %st(6) (gnu regno = 14)
+       18 for %st(7) (gnu regno = 15)
+*/
+#undef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(n) \
+((n) == 0 ? 0 \
+ : (n) == 1 ? 2 \
+ : (n) == 2 ? 1 \
+ : (n) == 3 ? 3 \
+ : (n) == 4 ? 6 \
+ : (n) == 5 ? 7 \
+ : (n) == 6 ? 5 \
+ : (n) == 7 ? 4 \
+ : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
+ : (-1))
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+
+#undef FUNCTION_PROFILER
+#define FUNCTION_PROFILER(FILE, LABELNO)  \
+{                                                                      \
+  if (flag_pic)                                                                \
+    {                                                                  \
+      fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%edx\n",             \
+              LPREFIX, (LABELNO));                                     \
+      fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n");                   \
+    }                                                                  \
+  else                                                                 \
+    {                                                                  \
+      fprintf (FILE, "\tmovl $%sP%d,%%edx\n", LPREFIX, (LABELNO));     \
+      fprintf (FILE, "\tcall mcount\n");                               \
+    }                                                                  \
+}
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+  
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+   
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+    
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES  "-Di386 -Drtems -D__rtems__ \
+   -Asystem(rtems) -Acpu(i386) -Amachine(i386)"
+
+/* Get perform_* macros to build libgcc.a.  */
+#include "i386/perform.h"
+
+/* A C statement (sans semicolon) to output to the stdio stream
+   FILE the assembler definition of uninitialized global DECL named
+   NAME whose size is SIZE bytes and alignment is ALIGN bytes.
+   Try to use asm_output_aligned_bss to implement this macro.  */
+
+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+  asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC  "crt0.o%s"
+
+#undef ENDFILE_SPEC
+     
diff --git a/gcc/config/i386/t-osf1elf b/gcc/config/i386/t-osf1elf
new file mode 100644 (file)
index 0000000..77c7df1
--- /dev/null
@@ -0,0 +1,18 @@
+# Assemble startup files.
+crti.o: $(srcdir)/config/i386/osf1-ci.asm $(GCC_PASSES)
+       sed -e '/^!/d' <$(srcdir)/config/i386/osf1-ci.asm >crti.s
+       $(GCC_FOR_TARGET) -c -o crti.o crti.s
+crtn.o: $(srcdir)/config/i386/osf1-cn.asm $(GCC_PASSES)
+       sed -e '/^!/d' <$(srcdir)/config/i386/osf1-cn.asm >crtn.s
+       $(GCC_FOR_TARGET) -c -o crtn.o crtn.s
+
+# The pushl in CTOR initialization interferes with frame pointer elimination.
+
+# We need to use -fPIC when we are using gcc to compile the routines in
+# crtstuff.c.  This is only really needed when we are going to use gcc/g++
+# to produce a shared library, but since we don't know ahead of time when
+# we will be doing that, we just always use -fPIC when compiling the
+# routines in crtstuff.c.
+
+CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer
+TARGET_LIBGCC2_CFLAGS = -fPIC
diff --git a/gcc/config/i386/x-osf1elf b/gcc/config/i386/x-osf1elf
new file mode 100644 (file)
index 0000000..1467381
--- /dev/null
@@ -0,0 +1,8 @@
+# Defaults for OSF/1 1.3+
+CC             = $(OLDCC)
+CLIB           = -lld
+INSTALL                = installbsd -c
+OLDCC          = /usr/ccs/gcc/gcc
+X_CFLAGS       = -static
+
+# FIXPROTO_DEFINES = -D_XOPEN_SOURCE
diff --git a/gcc/config/i386/xm-bsd386.h b/gcc/config/i386/xm-bsd386.h
deleted file mode 100644 (file)
index 7a823b9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Configuration for GCC for Intel i386 running BSDI's BSD/386 as host.  */
-
-#include "i386/xm-i386.h"
-
-#define HAVE_STRERROR
-
-/* We have _sys_siglist, but the declaration in <signal.h> conflicts with
-   the declarations in collect2.c so disable the declarations
-   in those files.  */
-
-#define DONT_DECLARE_SYS_SIGLIST
diff --git a/gcc/config/i386/xm-dgux.h b/gcc/config/i386/xm-dgux.h
deleted file mode 100644 (file)
index 5bdb9be..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/* Configuration for GCC for Intel i386 running DG/ux */
-
-/* looks just like sysv4 for now */
-
-#include "i386/xm-i386.h"
-#include "xm-svr4.h"
-
-/* If not compiled with GNU C, use the portable alloca.  */
-#ifndef __GNUC__
-#define USE_C_ALLOCA
-#endif
diff --git a/gcc/config/i386/xm-freebsd.h b/gcc/config/i386/xm-freebsd.h
deleted file mode 100644 (file)
index 007a609..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running FreeBSD as host.  */
-
-#include <i386/xm-i386.h>
-#include <xm-freebsd.h>
diff --git a/gcc/config/i386/xm-gnu.h b/gcc/config/i386/xm-gnu.h
deleted file mode 100644 (file)
index 0b5985f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Configuration for GCC for Intel i386 running GNU as host.  */
-
-#include <i386/xm-i386.h>
-#include <xm-gnu.h>
-
diff --git a/gcc/config/i386/xm-netbsd.h b/gcc/config/i386/xm-netbsd.h
deleted file mode 100644 (file)
index 3a9f324..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running NetBSD as host.  */
-
-#include <i386/xm-i386.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/i386/xm-osf1elf.h b/gcc/config/i386/xm-osf1elf.h
new file mode 100644 (file)
index 0000000..69ca9c1
--- /dev/null
@@ -0,0 +1,6 @@
+/* Configuration for GCC for Intel i386 running OSF/1 1.3.  */
+
+#ifndef HZ
+#include <machine/machtime.h>
+#define HZ DEFAULT_CLK_TCK
+#endif
diff --git a/gcc/config/i386/xm-sysv3.h b/gcc/config/i386/xm-sysv3.h
deleted file mode 100644 (file)
index 72078bb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Intel i386 running System V Release 3.  */
-
-#include "i386/xm-i386.h"
-#include "xm-svr3.h"
diff --git a/gcc/config/i386/xm-winnt.h b/gcc/config/i386/xm-winnt.h
deleted file mode 100644 (file)
index d36d2cd..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Configuration for GNU compiler
-   for an Intel i386 or later processor running Windows NT 3.x.
-   Copyright (C) 1994 Free Software Foundation, Inc.
-   Contributed by Douglas B. Rupp (drupp@cs.washington.edu)
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "winnt/xm-winnt.h"
-#include "i386/xm-i386.h"
diff --git a/gcc/config/i860/xm-fx2800.h b/gcc/config/i860/xm-fx2800.h
deleted file mode 100644 (file)
index f1ab6d8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Alliant FX/2800 running Concentrix 2.x. */
-
-/* vfprintf is not present prior to Concentrix 2.2. Unfortunately, there
-   does not seem to be a cpp symbol that identifies OS revision. Undefine
-   the following if running 2.1 or older.  */
-
-#define HAVE_VPRINTF
diff --git a/gcc/config/m68k/xm-altos3068.h b/gcc/config/m68k/xm-altos3068.h
deleted file mode 100644 (file)
index 294f564..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#define USG
-
-#include "m68k/xm-m68k.h"
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
diff --git a/gcc/config/m68k/xm-amix.h b/gcc/config/m68k/xm-amix.h
deleted file mode 100644 (file)
index 69b4bd1..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Definitions of host machine for GNU compiler.
-   Commodore Amiga A3000UX version.
-
-   Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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 1, or (at your option)
-any later version.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#include "m68k/xm-m68kv.h"     /* Use the System V flavor of m68k host */
-
-#define HAVE_VPRINTF           /* Host has vprintf() in library */
-#define rindex strrchr
-#define index strchr
-
-/* Define FULL_PROTOTYPES for protoize.c, to get <unistd.h> included.
-   We need this file for things like R_OK, not necessarily prototypes. */
-
-#define FULL_PROTOTYPES
-
-#if defined (__GNUC__) && __GNUC__ == 1
-#define alloca __builtin_alloca
-#endif
-
-#if 0 /* I don't want individual ports to be inconsistent about this.
-        I regard fancy_abort as a half-solution and not the right way
-        to do things. --rms.  */
-/* The m88k and mips ports make use of fancy_abort to give possibly helpful
-   abort information rather than just dumping core.  They do it in their
-   tm-* files.  It seems more logical that this is a characteristic of
-   the host machine and not the target machine, so we do it here. */
-
-#define abort fancy_abort      /* give possibly helpful abort info */
-#endif
diff --git a/gcc/config/m68k/xm-aux.h b/gcc/config/m68k/xm-aux.h
deleted file mode 100644 (file)
index 5ac1f46..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef USG
-#define USG
-#endif
-
-#ifndef AUX
-#define AUX
-#endif
-
-#include "m68k/xm-m68k.h"
diff --git a/gcc/config/m68k/xm-hp320.h b/gcc/config/m68k/xm-hp320.h
deleted file mode 100644 (file)
index d724c3a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* USG is needed to prevent trying to use getrusage and getwd.  */
-#define USG
-
-#include "m68k/xm-m68k.h"
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-#define rindex strrchr
-#define index strchr
-
-/* If compiling with HPUX compiler, we are probably using alloca.c,
-   so help it work right.  */
-#ifndef __GNUC__
-#define USE_C_ALLOCA
-#endif
-
-/* Don't try to use sys_siglist.  */
-#define NO_SYS_SIGLIST
diff --git a/gcc/config/m68k/xm-linux.h b/gcc/config/m68k/xm-linux.h
deleted file mode 100644 (file)
index 3b10506..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Motorola m68k running Linux. */
-
-#include <m68k/xm-m68k.h>
-#include <xm-linux.h>
diff --git a/gcc/config/m68k/xm-m68kv.h b/gcc/config/m68k/xm-m68kv.h
deleted file mode 100644 (file)
index ce3cf66..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Host environment for 68000's running System V.  */
-
-#include "m68k/xm-m68k.h"
-
-#define USG
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#define rindex strrchr
-#define index strchr
-
-#ifndef __GNUC__
-#define USE_C_ALLOCA
-#endif
diff --git a/gcc/config/m68k/xm-netbsd.h b/gcc/config/m68k/xm-netbsd.h
deleted file mode 100644 (file)
index 27a33cd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Motorola 68k running NetBSD as host.  */
-
-#include <m68k/xm-m68k.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/m68k/xm-sun3.h b/gcc/config/m68k/xm-sun3.h
deleted file mode 100644 (file)
index eafe716..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Configuration for GCC for Motorola m68k on sun3. */
-
-#define HAVE_POPEN
-
-#include "m68k/xm-m68k.h"
diff --git a/gcc/config/m68k/xm-tower.h b/gcc/config/m68k/xm-tower.h
deleted file mode 100644 (file)
index fcb456f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "m68k/xm-m68k.h"
-#include "xm-svr3.h"
-
-#define HAVE_VPRINTF
diff --git a/gcc/config/mips/elflorion.h b/gcc/config/mips/elflorion.h
deleted file mode 100644 (file)
index 4b7f111..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Definitions of target machine for GNU compiler.  MIPS ORION version with
-   GOFAST floating point library.
-   Copyright (C) 1994 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#define MIPS_CPU_STRING_DEFAULT "orion"
-
-#include "mips/elfl64.h"
diff --git a/gcc/config/mips/nws3250v4.h b/gcc/config/mips/nws3250v4.h
deleted file mode 100644 (file)
index 611effe..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Definitions of target machine for GNU compiler.  Sony RISC NEWS (mips)
-   Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#define MIPS_NEWS
-
-#define CPP_PREDEFINES "\
--Dmips -Dhost_mips -Dsony -Dsonyrisc -Dunix \
--DLANGUAGE_C -DMIPSEB -DSYSTYPE_SYSV \
--Asystem(unix) -Asystem(svr3) -Acpu(mips) -Amachine(mips)"
-
-#define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
-
-#define LIB_SPEC "%{p:-lprof1} %{pg:-lprof1} -lc crtn.o%s values-Xt.o%s"
-
-#define STARTFILE_SPEC "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt1.o%s}}"
-
-#define MACHINE_TYPE "RISC NEWS-OS SVr4"
-
-#include "mips/mips.h"
diff --git a/gcc/config/mips/r3900.h b/gcc/config/mips/r3900.h
new file mode 100644 (file)
index 0000000..c186743
--- /dev/null
@@ -0,0 +1,71 @@
+/* Definitions of MIPS sub target machine for GNU compiler. 
+   Toshiba r3900.  You should include mips.h after this.
+
+   Copyright (C) 1989, 90-6, 1997 Free Software Foundation, Inc.
+   Contributed by Gavin Koch (gavin@cygnus.com).
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#define SUBTARGET_CPP_SPEC "\
+%{!mabi=32: %{!mabi=n32: %{!mabi=64: -D__mips_eabi}}} \
+%{!msingle-float:-D__mips_soft_float} \
+%{mhard-float:%e-mhard-float not supported.} \
+%{msingle-float:%{msoft-float: \
+  %e-msingle-float and -msoft-float can not both be specified.}}"
+
+/* The following is needed because -mips3 and -mips4 set gp64 which in
+   combination with abi=eabi, causes long64 to be set. */
+#define SUBTARGET_CPP_SIZE_SPEC "\
+%{mips3:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
+%{mips4:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
+%{!mips3:%{!mips4:%{!m4650:\
+  -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int}}} "
+
+/* by default (if not mips-something-else) produce code for the r3900 */
+#define SUBTARGET_CC1_SPEC "\
+%{mhard-float:%e-mhard-float not supported.} \
+%{msingle-float:%{msoft-float: \
+  %e-msingle-float and -msoft-float can not both be specified.}}"
+
+#define TARGET_DEFAULT (MASK_SOFT_FLOAT | MASK_MIPS3900)
+#define MIPS_CPU_STRING_DEFAULT "R3900"
+#define MIPS_ISA_DEFAULT 1
+
+#define MULTILIB_DEFAULTS { "EB", "mips1", "msoft-float" }
+
+/* We use the MIPS EABI by default.  */
+#define MIPS_ABI_DEFAULT ABI_EABI
+
+
+/* Debugging */
+
+#define DWARF2_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+
+/* For the 'preferred' cases ("gN" and "ggdbN") we need to tell the 
+   gnu assembler "dwarf-2" */
+   
+#define SUBTARGET_ASM_DEBUGGING_SPEC "\
+%{!mmips-as: \
+  %{g:-gdwarf-2} %{g0:-gdwarf-2} %{g1:-gdwarf-2} %{g2:-gdwarf-2} %{g3:-gdwarf-2} \
+  %{ggdb:-gdwarf-2} %{ggdb0:-gdwarf-2} %{ggdb1:-gdwarf-2} %{ggdb2:-gdwarf-2} %{ggdb3:-gdwarf-2} \
+  %{gdwarf-2*:-gdwarf-2}} \
+%{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \
+%{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \
+%{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3}"
+
diff --git a/gcc/config/mips/xm-iris3.h b/gcc/config/mips/xm-iris3.h
deleted file mode 100644 (file)
index 3d2a59a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "mips/xm-mips.h"
-
-#define USG
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
diff --git a/gcc/config/mips/xm-iris4.h b/gcc/config/mips/xm-iris4.h
deleted file mode 100644 (file)
index e12c226..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "mips/xm-mips.h"
-
-#define USG
-#define HAVE_VPRINTF
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#if 0
-#ifdef __GNUC__
-/* The normal irix compiler requires alloca.h or alloca doesn't work.
-   However, the IRIX compiler doesn't allow alloca to be stored in
-   something like ptr->field = alloca(), so we just use the normal
-   C alloca.  */
-#include <alloca.h>
-#endif
-#endif
diff --git a/gcc/config/mips/xm-netbsd.h b/gcc/config/mips/xm-netbsd.h
deleted file mode 100644 (file)
index b9d3c70..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "mips/xm-mips.h"
-#include "config/xm-netbsd.h"
diff --git a/gcc/config/mips/xm-news.h b/gcc/config/mips/xm-news.h
deleted file mode 100644 (file)
index 9409d7f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/* This file is for the Sony Mips News running "NewsOS Version 5",
-   which is really System V.  */
-#include "mips/xm-sysv.h"
-
-/* Sony has a funny name for this symbol.  */
-#define sys_siglist _sys_siglist
diff --git a/gcc/config/mips/xm-nws3250v4.h b/gcc/config/mips/xm-nws3250v4.h
deleted file mode 100644 (file)
index 34ab631..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#define USG
-
-#include "xm-mips.h"
-
-/* If compiling with mips compiler, we are probably using alloca.c,
-   so help it work right.  */
-#ifndef __GNUC__
-#define USE_C_ALLOCA
-#endif
diff --git a/gcc/config/mips/xm-sysv4.h b/gcc/config/mips/xm-sysv4.h
deleted file mode 100644 (file)
index 490a772..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "mips/xm-sysv.h"
-
-/* SVR4 provides no sys_siglist,
-   but does offer the same data under another name.  */
-#define sys_siglist _sys_siglist
-
-/* There is a declaration in /usr/include/signal.h that conflicts with the
-   declarations in collect2.c and mips-tfile.c, so disable gcc's declarations.
-   This is at least true for CDC's EP/IX 2.1.1.  It is suspected to be true
-   for RISC/OS 5.x also.  */
-#define DONT_DECLARE_SYS_SIGLIST
diff --git a/gcc/config/ns32k/xm-genix.h b/gcc/config/ns32k/xm-genix.h
deleted file mode 100644 (file)
index 76be3b7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Config file for ns32k running system V.  */
-
-#include "ns32k/xm-ns32k.h"
-
-#define USG
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
diff --git a/gcc/config/ns32k/xm-netbsd.h b/gcc/config/ns32k/xm-netbsd.h
deleted file mode 100644 (file)
index 4040751..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Configuration for GCC for ns32k running NetBSD as host.  */
-
-#include <ns32k/xm-ns32k.h>
-
-/* ns32k/xm-ns32k.h defines these macros, but we don't need them */
-#undef memcmp
-#undef memcpy
-#undef memset
-
-#include <xm-netbsd.h>
similarity index 60%
rename from gcc/config/xm-svr3.h
rename to gcc/config/sh/rtems.h
index ac1000fb1cb46f4de24a5ce90eee97ba78165841..5cbdf9bb51aeae56c0273c784a1a4095c13b1100 100644 (file)
@@ -1,5 +1,7 @@
-/* Configuration for GNU C-compiler for hosts running System V Release 3
-   Copyright (C) 1991, 1993 Free Software Foundation, Inc.
+/* Definitions for rtems targetting a SH using elf.
+
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   Contributed by Joel Sherrill (joel@OARcorp.com).
 
 This file is part of GNU CC.
 
@@ -18,16 +20,16 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#define bcopy(src,dst,len) memcpy ((dst),(src),(len))
-#define bzero(dst,len) memset ((dst),0,(len))
-#define bcmp(left,right,len) memcmp ((left),(right),(len))
+#include "sh/elf.h"
+
+/* Specify predefined symbols in preprocessor.  */
 
-#define rindex strrchr
-#define index strchr
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__sh__ -D__ELF__ -Drtems -D__rtems__ \
+  -Asystem(rtems) -Acpu(sh) -Amachine(sh)"
 
-#define USG
-#define HAVE_VPRINTF
+#undef  SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+  { "rtems", 0 },
 
-#ifndef SVR3
-#define SVR3
-#endif
+/* end of sparc/rtems.h */
similarity index 51%
rename from gcc/config/mips/xm-sysv.h
rename to gcc/config/sparc/elf.h
index 170538fb682791e7e345f800018cbd220ad4399e..70cb26a93be83b3eb4ea7c43cb7657bfe407002b 100644 (file)
@@ -1,5 +1,6 @@
-/* Configuration for GNU C-compiler for UMIPS operating system
-   Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler,
+   for SPARC running in an embedded environment using the ELF file format.
+   Copyright (C) 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -18,21 +19,24 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-/*
- *  Notes for compiling gcc on umips (v3.0)
- *     - change the -g in the CFLAGS to a -g3 or take it out all together.
- *     - do not define DBX_DEBUGGING_INFO in tm.h, it doesn't exist (unless
- *     you get one from a bsd system)
- */
+#include "sol2.h"
 
-#define USG
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-Dsparc -D__elf__ -Acpu(sparc) -Amachine(sparc)"
 
-#include "mips/xm-mips.h"
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s"
 
-#define bcopy(a,b,c)   memcpy((b),(a),(c))
-#define bzero(a,b)     memset((a),0,(b))
-#define bcmp(a,b,c)    memcmp((a),(b),(c))
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s crtn.o%s"
 
-#define rindex strrchr
-#define index strchr
+/* Use the default.  */
+#undef LINK_SPEC
 
+/* Don't set the target flags, this is done by the linker script */
+#undef LIB_SPEC
+#define LIB_SPEC ""
+
+/* FIXME: until fixed */
+#undef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE 64
similarity index 58%
rename from gcc/config/i386/xm-sun.h
rename to gcc/config/sparc/hal.h
index d2e714ecf5cddb0a8fbba76130959eb746ebda3e..0222b819e0eb1e7ce57c387caa534f0e40b09b3f 100644 (file)
@@ -1,5 +1,7 @@
-/* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0.
-   Copyright (C) 1988 Free Software Foundation, Inc.
+/* Definitions of target machine for GNU compiler, for HAL 
+   SPARC running Solaris 2 HALOS
+   Copyright 1998 Free Software Foundation, Inc.
+   Contributed by Carol LePage (carolo@hal.com)
 
 This file is part of GNU CC.
 
@@ -18,10 +20,14 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#define USG
+/* Need different command line for assembler */
 
-#include "i386/xm-i386.h"
+#undef ASM_SPEC
+#define ASM_SPEC \
+  "%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -e1 \
+   %{fpic:-K PIC} %{fPIC:-K PIC}"
 
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
+/* Need DWARF for debuggers.  */
+
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
new file mode 100644 (file)
index 0000000..cf6015d
--- /dev/null
@@ -0,0 +1,238 @@
+/* Definitions for 64-bit SPARC running Linux with ELF
+   Copyright 1996, 1997 Free Software Foundation, Inc.
+   Contributed by David S. Miller (davem@caip.rutgers.edu)
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#define LINUX_DEFAULT_ELF
+
+/* This is a v9 only compiler.  -mv8 is not expected to work.  If you want
+   a v8/v9 compiler, this isn't the place to do it.  */
+
+#define SPARC_V9 1     /* See sparc.h.  */
+#define SPARC_ARCH64 1
+
+/* Don't assume anything about the header files. */
+#define NO_IMPLICIT_EXTERN_C
+
+#undef HAVE_ATEXIT
+#define HAVE_ATEXIT
+
+#include <sparc/sysv4.h>
+
+#undef MD_EXEC_PREFIX
+#undef MD_STARTFILE_PREFIX
+
+/* Output at beginning of assembler file.  */
+/* The .file command should always begin the output.  */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE)                                            \
+  do {                                                                  \
+        output_file_directive (FILE, main_input_filename);              \
+        fprintf (FILE, "\t.version\t\"01.01\"\n");                      \
+  } while (0)
+  
+#undef ASM_DEFAULT_SPEC
+#define ASM_DEFAULT_SPEC "-Av9a"
+
+#undef  LIBGCC_SPEC
+#define LIBGCC_SPEC \
+  "%{!shared:-lgcc}"
+
+/* Provide a STARTFILE_SPEC appropriate for Linux.  Here we add
+   the Linux magical crtbegin.o file (see crtstuff.c) which
+   provides part of the support for getting C++ file-scope static
+   object constructed before entering `main'. */
+   
+#undef  STARTFILE_SPEC
+#define STARTFILE_SPEC \
+  "%{!shared: \
+     %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
+   crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
+
+/* Provide a ENDFILE_SPEC appropriate for Linux.  Here we tack on
+   the Linux magical crtend.o file (see crtstuff.c) which
+   provides part of the support for getting C++ file-scope static
+   object constructed before entering `main', followed by a normal
+   Linux "finalizer" file, `crtn.o'.  */
+
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC \
+  "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (sparc64 Linux/ELF)");
+
+/* A v9 compiler with stack-bias, 32 bit integers, 64 bit longs and
+   64 bit pointers, in a Medium/Anywhere code model environment.  */
+
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT \
+  (MASK_V9 + MASK_ARCH64 + MASK_LONG64 + MASK_PTR64 /* + MASK_HARD_QUAD */ \
+   + MASK_STACK_BIAS + MASK_MEDANY + MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "long long unsigned int"
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "long long int"
+  
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+   
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+    
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D__sparc__ -D__sparc__ -D__sparc_v9__ -D__arch64__ -D__ELF__ -Dunix -Dsparc -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(sparc) -Amachine(sparc)"
+
+#undef CPP_SPEC
+#define CPP_SPEC "\
+%{fPIC:-D__PIC__ -D__pic__} \
+%{fpic:-D__PIC__ -D__pic__} \
+%{mint64:-D__INT_MAX__=9223372036854775807LL -D__LONG_MAX__=9223372036854775807LL} \
+%{mlong64:-D__LONG_MAX__=9223372036854775807LL} \
+%{mlittle-endian:-D__LITTLE_ENDIAN__} \
+%{msparclite:-D__sparclite__} \
+%{mv8:-D__sparc_v8__} \
+%{msupersparc:-D__supersparc__ -D__sparc_v8__} \
+%{posix:-D_POSIX_SOURCE} \
+"
+/* We no longer link with libc_p.a or libg.a by default. If you
+ * want to profile or debug the Linux C library, please add
+ * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
+ */
+#undef LIB_SPEC
+#define LIB_SPEC \
+  "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \
+     %{!ggdb:-lc} %{ggdb:-lg}}"
+
+/* Provide a LINK_SPEC appropriate for Linux.  Here we provide support
+   for the special GCC options -static and -shared, which allow us to
+   link things in one of these three modes by applying the appropriate
+   combinations of options at link-time. We like to support here for
+   as many of the other GNU linker options as possible. But I don't
+   have the time to search for those flags. I am sure how to add
+   support for -soname shared_object_name. H.J.
+
+   I took out %{v:%{!V:-V}}. It is too much :-(. They can use
+   -Wl,-V.
+
+   When the -shared link option is used a final link is not being
+   done.  */
+
+/* If ELF is the default format, we should not use /lib/elf. */
+
+#undef  LINK_SPEC
+#define LINK_SPEC "-m elf64_sparc -Y P,/usr/lib %{shared:-shared} \
+  %{!shared: \
+    %{!ibcs: \
+      %{!static: \
+        %{rdynamic:-export-dynamic} \
+        %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.1}} \
+        %{static:-static}}} \
+%{mlittle-endian:-EL} \
+"
+
+/* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
+   It's safe to pass -s always, even if -g is not used. */
+#undef ASM_SPEC
+#define ASM_SPEC "\
+%{V} \
+%{v:%{!V:-V}} \
+%{!Qn:-Qy} \
+%{n} \
+%{T} \
+%{Ym,*} \
+%{Wa,*:%*} \
+-s %{fpic:-K PIC} %{fPIC:-K PIC} \
+%{mlittle-endian:-EL} \
+%(asm_cpu) \
+"
+
+/* Same as sparc.h */
+#undef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+
+/* System V Release 4 uses DWARF debugging info.  Buf DWARF1 doesn't do
+   64-bit anything, so we use DWARF2.  */
+
+#undef DWARF2_DEBUGGING_INFO
+#undef DWARF_DEBUGGING_INFO
+#undef DBX_DEBUGGING_INFO
+#define DWARF2_DEBUGGING_INFO
+#define DBX_DEBUGGING_INFO
+
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+
+#undef ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)              \
+do {                                                                   \
+  fputs ("\t.local\t", (FILE));                \
+  assemble_name ((FILE), (NAME));                                      \
+  putc ('\n', (FILE));                                                 \
+  ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);                 \
+} while (0)
+
+#undef COMMON_ASM_OP
+#define COMMON_ASM_OP "\t.common"
+
+/* This is how to output a definition of an internal numbered label where
+   PREFIX is the class of label and NUM is the number within the class.  */
+
+#undef  ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)     \
+  fprintf (FILE, ".L%s%d:\n", PREFIX, NUM)
+
+/* This is how to output a reference to an internal numbered label where
+   PREFIX is the class of label and NUM is the number within the class.  */
+
+#undef  ASM_OUTPUT_INTERNAL_LABELREF
+#define ASM_OUTPUT_INTERNAL_LABELREF(FILE,PREFIX,NUM)  \
+  fprintf (FILE, ".L%s%d", PREFIX, NUM)
+
+/* This is how to store into the string LABEL
+   the symbol_ref name of an internal numbered label where
+   PREFIX is the class of label and NUM is the number within the class.
+   This is suitable for output with `assemble_name'.  */
+
+#undef  ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)  \
+  sprintf (LABEL, "*.L%s%d", PREFIX, NUM)
+
+/* Stabs doesn't use this, and it confuses a simulator.  */
+/* ??? Need to see what DWARF needs, if anything.  */
+#undef ASM_IDENTIFY_GCC
+#define ASM_IDENTIFY_GCC(FILE)
+
+/* Define the names of various pseudo-ops used by the Sparc/svr4 assembler.
+   ??? If ints are 64 bits then UNALIGNED_INT_ASM_OP (defined elsewhere) is
+   misnamed.  These should all refer to explicit sizes (half/word/xword?),
+   anything other than short/int/long/etc.  */
+
+#define UNALIGNED_DOUBLE_INT_ASM_OP    ".uaxword"
+
+/* DWARF bits.  */
+
+/* Follow Irix 6 and not the Dwarf2 draft in using 64-bit offsets. 
+   Obviously the Dwarf2 folks havn't tried to actually build systems
+   with their spec.  On a 64-bit system, only 64-bit relocs become
+   RELATIVE relocations.  */
+
+/* #define DWARF_OFFSET_SIZE PTR_SIZE */
diff --git a/gcc/config/sparc/sol2-sld.h b/gcc/config/sparc/sol2-sld.h
new file mode 100644 (file)
index 0000000..90c5ca6
--- /dev/null
@@ -0,0 +1,18 @@
+/* Definitions of target machine for GNU compiler, for SPARC running Solaris 2
+   using the system linker.  */
+
+#include "sparc/sol2.h"
+
+/* Disable any support for DWARF and DWARF2 if we are using the system linker.
+   At least up through Solaris 2.6,
+   the system linker does not work with DWARF or DWARF2,
+   since it does not have working support for relocations
+   to unaligned data.  */
+
+#ifdef DWARF2_DEBUGGING_INFO
+#undef DWARF2_DEBUGGING_INFO
+#endif
+
+#ifdef DWARF_DEBUGGING_INFO
+#undef DWARF_DEBUGGING_INFO
+#endif
similarity index 65%
rename from gcc/config/arm/xm-linux.h
rename to gcc/config/sparc/sun4gas.h
index 955379dab164fc628173874ce66034bbf5147679..3cea9560b4fe9bb5d35d73eda99fdb058129d87a 100644 (file)
@@ -1,6 +1,5 @@
-/* Configuration for GCC for Intel i386 running Linux.
-   Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
-   Contributed by H.J. Lu (hjl@nynexst.com)
+/* Definitions of target machine for GNU compiler, for SunOS 4.x with gas
+   Copyright (C) 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -19,6 +18,10 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#include <arm/xm-arm.h>
-#include <xm-linux.h>
+/* gas supports unaligned data.  */
+#define UNALIGNED_DOUBLE_INT_ASM_OP ".uaxword"
+#define UNALIGNED_INT_ASM_OP   ".uaword"
+#define UNALIGNED_SHORT_ASM_OP ".uahalf"
 
+/* defaults.h will define DWARF2_UNWIND_INFO for us.  */
+#undef DWARF2_UNWIND_INFO
diff --git a/gcc/config/sparc/t-elf b/gcc/config/sparc/t-elf
new file mode 100644 (file)
index 0000000..da9df38
--- /dev/null
@@ -0,0 +1,39 @@
+# we need to supply our own assembly versions of libgcc1.c files,
+# since the user may not have native 'cc' available
+
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = sparc/lb1spc.asm
+LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
+
+# crt0 is built elsewhere
+LIBGCC1_TEST =
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+       cat $(srcdir)/config/fp-bit.c > dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+       echo '#define FLOAT' > fp-bit.c
+       cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+
+# MULTILIB_OPTIONS should have msparclite too, but we'd have to make
+# gas build...
+#MULTILIB_OPTIONS = msoft-float mcpu=v8
+MULTILIB_OPTIONS = msoft-float
+#MULTILIB_DIRNAMES = soft v8
+MULTILIB_DIRNAMES = soft
+#MULTILIB_MATCHES = msoft-float=mno-fpu mcpu?v8=mv8
+MULTILIB_MATCHES = msoft-float=mno-fpu
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+
+# Assemble startup files.
+crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crti.o -x assembler $(srcdir)/config/sparc/sol2-ci.asm
+crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crtn.o -x assembler $(srcdir)/config/sparc/sol2-cn.asm
diff --git a/gcc/config/sparc/t-halos b/gcc/config/sparc/t-halos
new file mode 100644 (file)
index 0000000..0bd5496
--- /dev/null
@@ -0,0 +1,2 @@
+# For a native HALOS compile, we need to set -e1 for the assembler
+AS=as -e1
diff --git a/gcc/config/sparc/xm-netbsd.h b/gcc/config/sparc/xm-netbsd.h
deleted file mode 100644 (file)
index 5f11b8d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Configuration for GCC for Sun SPARC running NetBSD as host.  */
-
-#include <sparc/xm-sparc.h>
-#include <xm-netbsd.h>
diff --git a/gcc/config/sparc/xm-pbd.h b/gcc/config/sparc/xm-pbd.h
deleted file mode 100644 (file)
index dad9fdc..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Host environment for the tti "Unicom" PBB 68020 boards */
-
-#include "sparc/xm-sparc.h"
-
-#define USG
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
-
-#ifndef __GNUC__
-#define USE_C_ALLOCA
-#endif
-
similarity index 72%
rename from gcc/config/i386/xm-linux.h
rename to gcc/config/sparc/xm-sp64.h
index 42f097ddc6cc247a3c24b461dad3d6a04e153482..5954affa3b51851addd2966e8cb53b8b084c7f14 100644 (file)
@@ -1,6 +1,5 @@
-/* Configuration for GCC for Intel i386 running Linux.
-   Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
-   Contributed by H.J. Lu (hjl@nynexst.com)
+/* Configuration for GCC for Sparc v9 running 64-bit native.
+   Copyright (C) 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -19,6 +18,8 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
-#include <i386/xm-i386.h>
-#include <xm-linux.h>
+#include <sparc/xm-sparc.h>
 
+/* This describes the machine the compiler is hosted on.  */
+#undef HOST_BITS_PER_LONG
+#define HOST_BITS_PER_LONG 64
diff --git a/gcc/config/v850/lib1funcs.asm b/gcc/config/v850/lib1funcs.asm
new file mode 100644 (file)
index 0000000..d441590
--- /dev/null
@@ -0,0 +1,1271 @@
+/* CYGNUS LOCAL entire file v850/law */
+/* libgcc1 routines for NEC V850.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file with other programs, and to distribute
+those programs without any restriction coming from the use of this
+file.  (The General Public License restrictions do apply in other
+respects; for example, they cover modification of the file, and
+distribution when not linked into another program.)
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, if you link this library with files
+   compiled with GCC to produce an executable, this does not cause
+   the resulting executable to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.  */
+
+#ifdef L_mulsi3
+       .text
+       .globl ___mulsi3
+       .type  ___mulsi3,@function
+
+/*
+ * In order to not deal with negative numbers (mulh is a signed multiply
+ * and we want an unsigned multiply, code the multiplication as a series
+ * of 7 bit multiplies).
+ *
+ * int __mulsi3 (unsigned a, unsigned b)
+ * {
+ *   int i, j;
+ *   int ret = 0;
+ *
+ *   for (i = 0; i < 32; i += 7)
+ *     {
+ *       short a_part = a & 0x7f;
+ *       unsigned b_tmp = b;
+ *       a >>= 7;
+ * 
+ *       for (j = 0; (i+j) < 32; j += 7)
+ *     {
+ *       short b_part = b_tmp & 0x7f;
+ *       ret += (((int)a_part) * ((int)b_part)) << (i+j);
+ *       b_tmp >>= 7;
+ *     }
+ *    }
+ *
+ *   return ret;
+ * }
+ */
+
+___mulsi3:
+       mov 0,r10                       /* total */
+       mov 0,r14                       /* i = 0, index for multiply a's part */
+       movea lo(31),r0,r16             /* upper bounds for loop */
+.L5:
+       mov r7,r13                      /* b_tmp = b */
+       andi 0x7f,r6,r15                /* a_part = (a & 127) */
+       shr 7,r6                        /* a >>= 7 */
+       mov r14,r12                     /* i+j = i */
+.L9:
+       andi 0x7f,r13,r11               /* b_part = (b_tmp & 127) */
+       mulh r15,r11                    /* ((int)a_part) * ((int)b_part) */
+       shr 7,r13                       /* b_tmp >>= 7 */
+       shl r12,r11                     /* (((int)a_part) * ((int)b_part)) << (i+j) */
+       add r11,r10                     /* ret += (((int)a_part) * ((int)b_part)) << (i+j) */
+       add 7,r12                       /* i+j += 7 */
+       cmp r16,r12                     /* i+j < 32 */
+       ble .L9
+
+       add 7,r14                       /* i += 7 */
+       cmp r16,r14                     /* i < 32 */
+       ble .L5
+
+       jmp [r31]                       /* return */
+       .size __mulsi3,.-__mulsi3
+#endif
+
+#ifdef L_udivsi3
+       .global ___udivsi3
+___udivsi3:
+       mov 1,r12
+       mov 0,r10
+       cmp r6,r7
+       bnl .L12
+       movhi hi(-2147483648),r0,r13
+       cmp r0,r7
+       blt .L12
+.L4:
+       shl 1,r7
+       shl 1,r12
+       cmp r6,r7
+       bnl .L12
+       cmp r0,r12
+       be .L8
+       mov r7,r5
+       and r13,r5
+       be .L4
+       br .L12
+.L9:
+       cmp r7,r6
+       bl .L10
+       sub r7,r6
+       or r12,r10
+.L10:
+       shr 1,r12
+       shr 1,r7
+.L12:
+       cmp r0,r12
+       bne .L9
+.L8:
+       jmp [r31]
+       .size __udivsi3,.-__udivsi3
+#endif
+
+#ifdef L_divsi3
+       .text
+       .globl ___divsi3
+       .type  ___divsi3,@function
+___divsi3:
+       add -8,sp
+       st.w r31,4[sp]
+       st.w r22,0[sp]
+       mov 1,r22
+       tst r7,r7
+       bp .L3
+       subr r0,r7
+       subr r0,r22
+.L3:
+       tst r6,r6
+       bp .L4
+       subr r0,r6
+       subr r0,r22
+.L4:
+       jarl ___udivsi3,r31
+       cmp r0,r22
+       bp .L7
+       subr r0,r10
+.L7:
+       ld.w 0[sp],r22
+       ld.w 4[sp],r31
+       add 8,sp
+       jmp [r31]
+       .size __divsi3,.-__divsi3
+#endif
+
+#ifdef  L_umodsi3
+       .text
+       .globl ___umodsi3
+       .type  ___umodsi3,@function
+___umodsi3:
+       add -12,sp
+       st.w r31,8[sp]
+       st.w r7,4[sp]
+       st.w r6,0[sp]
+       jarl ___udivsi3,r31
+       ld.w 4[sp],r7
+       mov r10,r6
+       jarl ___mulsi3,r31
+       ld.w 0[sp],r6
+       subr r6,r10
+       ld.w 8[sp],r31
+       add 12,sp
+       jmp [r31]
+       .size __umodsi3,.-__umodsi3
+#endif /* L_umodsi3 */
+
+#ifdef  L_modsi3
+       .text
+       .globl ___modsi3
+       .type  ___modsi3,@function
+___modsi3:
+       add -12,sp
+       st.w r31,8[sp]
+       st.w r7,4[sp]
+       st.w r6,0[sp]
+       jarl ___divsi3,r31
+       ld.w 4[sp],r7
+       mov r10,r6
+       jarl ___mulsi3,r31
+       ld.w 0[sp],r6
+       subr r6,r10
+       ld.w 8[sp],r31
+       add 12,sp
+       jmp [r31]
+       .size __modsi3,.-__modsi3
+#endif /* L_modsi3 */
+
+#ifdef L_save_2
+       .text
+       .align  2
+       .globl  __save_r2_r29
+       .type   __save_r2_r29,@function
+       /* Allocate space and save registers 2, 20 .. 29 on the stack */
+       /* Called via:  jalr __save_r2_r29,r10 */
+__save_r2_r29:
+       mov     ep,r1
+       addi    -44,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       sst.w   r23,24[ep]
+       sst.w   r22,28[ep]
+       sst.w   r21,32[ep]
+       sst.w   r20,36[ep]
+       sst.w   r2,40[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r2_r29,.-__save_r2_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r2_r29 */
+       .align  2
+       .globl  __return_r2_r29
+       .type   __return_r2_r29,@function
+__return_r2_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       sld.w   24[ep],r23
+       sld.w   28[ep],r22
+       sld.w   32[ep],r21
+       sld.w   36[ep],r20
+       sld.w   40[ep],r2
+       addi    44,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r2_r29,.-__return_r2_r29
+#endif /* L_save_2 */
+
+#ifdef L_save_20
+       .text
+       .align  2
+       .globl  __save_r20_r29
+       .type   __save_r20_r29,@function
+       /* Allocate space and save registers 20 .. 29 on the stack */
+       /* Called via:  jalr __save_r20_r29,r10 */
+__save_r20_r29:
+       mov     ep,r1
+       addi    -40,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       sst.w   r23,24[ep]
+       sst.w   r22,28[ep]
+       sst.w   r21,32[ep]
+       sst.w   r20,36[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r20_r29,.-__save_r20_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r20_r29 */
+       .align  2
+       .globl  __return_r20_r29
+       .type   __return_r20_r29,@function
+__return_r20_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       sld.w   24[ep],r23
+       sld.w   28[ep],r22
+       sld.w   32[ep],r21
+       sld.w   36[ep],r20
+       addi    40,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r20_r29,.-__return_r20_r29
+#endif /* L_save_20 */
+
+#ifdef L_save_21
+       .text
+       .align  2
+       .globl  __save_r21_r29
+       .type   __save_r21_r29,@function
+       /* Allocate space and save registers 21 .. 29 on the stack */
+       /* Called via:  jalr __save_r21_r29,r10 */
+__save_r21_r29:
+       mov     ep,r1
+       addi    -36,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       sst.w   r23,24[ep]
+       sst.w   r22,28[ep]
+       sst.w   r21,32[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r21_r29,.-__save_r21_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r21_r29 */
+       .align  2
+       .globl  __return_r21_r29
+       .type   __return_r21_r29,@function
+__return_r21_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       sld.w   24[ep],r23
+       sld.w   28[ep],r22
+       sld.w   32[ep],r21
+       addi    36,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r21_r29,.-__return_r21_r29
+#endif /* L_save_21 */
+
+#ifdef L_save_22
+       .text
+       .align  2
+       .globl  __save_r22_r29
+       .type   __save_r22_r29,@function
+       /* Allocate space and save registers 22 .. 29 on the stack */
+       /* Called via:  jalr __save_r22_r29,r10 */
+__save_r22_r29:
+       mov     ep,r1
+       addi    -32,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       sst.w   r23,24[ep]
+       sst.w   r22,28[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r22_r29,.-__save_r22_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r22_r29 */
+       .align  2
+       .globl  __return_r22_r29
+       .type   __return_r22_r29,@function
+__return_r22_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       sld.w   24[ep],r23
+       sld.w   28[ep],r22
+       addi    32,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r22_r29,.-__return_r22_r29
+#endif /* L_save_22 */
+
+#ifdef L_save_23
+       .text
+       .align  2
+       .globl  __save_r23_r29
+       .type   __save_r23_r29,@function
+       /* Allocate space and save registers 23 .. 29 on the stack */
+       /* Called via:  jalr __save_r23_r29,r10 */
+__save_r23_r29:
+       mov     ep,r1
+       addi    -28,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       sst.w   r23,24[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r23_r29,.-__save_r23_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r23_r29 */
+       .align  2
+       .globl  __return_r23_r29
+       .type   __return_r23_r29,@function
+__return_r23_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       sld.w   24[ep],r23
+       addi    28,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r23_r29,.-__return_r23_r29
+#endif /* L_save_23 */
+
+#ifdef L_save_24
+       .text
+       .align  2
+       .globl  __save_r24_r29
+       .type   __save_r24_r29,@function
+       /* Allocate space and save registers 24 .. 29 on the stack */
+       /* Called via:  jalr __save_r24_r29,r10 */
+__save_r24_r29:
+       mov     ep,r1
+       addi    -24,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       sst.w   r24,20[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r24_r29,.-__save_r24_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r24_r29 */
+       .align  2
+       .globl  __return_r24_r29
+       .type   __return_r24_r29,@function
+__return_r24_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       sld.w   20[ep],r24
+       addi    24,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r24_r29,.-__return_r24_r29
+#endif /* L_save_24 */
+
+#ifdef L_save_25
+       .text
+       .align  2
+       .globl  __save_r25_r29
+       .type   __save_r25_r29,@function
+       /* Allocate space and save registers 25 .. 29 on the stack */
+       /* Called via:  jalr __save_r25_r29,r10 */
+__save_r25_r29:
+       mov     ep,r1
+       addi    -20,sp,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       sst.w   r25,16[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r25_r29,.-__save_r25_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r25_r29 */
+       .align  2
+       .globl  __return_r25_r29
+       .type   __return_r25_r29,@function
+__return_r25_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       sld.w   16[ep],r25
+       addi    20,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r25_r29,.-__return_r25_r29
+#endif /* L_save_25 */
+
+#ifdef L_save_26
+       .text
+       .align  2
+       .globl  __save_r26_r29
+       .type   __save_r26_r29,@function
+       /* Allocate space and save registers 26 .. 29 on the stack */
+       /* Called via:  jalr __save_r26_r29,r10 */
+__save_r26_r29:
+       mov     ep,r1
+       add     -16,sp
+       mov     sp,ep
+       sst.w   r29,0[ep]
+       sst.w   r28,4[ep]
+       sst.w   r27,8[ep]
+       sst.w   r26,12[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r26_r29,.-__save_r26_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r26_r29 */
+       .align  2
+       .globl  __return_r26_r29
+       .type   __return_r26_r29,@function
+__return_r26_r29:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   0[ep],r29
+       sld.w   4[ep],r28
+       sld.w   8[ep],r27
+       sld.w   12[ep],r26
+       addi    16,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r26_r29,.-__return_r26_r29
+#endif /* L_save_26 */
+
+#ifdef L_save_27
+       .text
+       .align  2
+       .globl  __save_r27_r29
+       .type   __save_r27_r29,@function
+       /* Allocate space and save registers 27 .. 29 on the stack */
+       /* Called via:  jalr __save_r27_r29,r10 */
+__save_r27_r29:
+       add     -12,sp
+       st.w    r29,0[sp]
+       st.w    r28,4[sp]
+       st.w    r27,8[sp]
+       jmp     [r10]
+       .size   __save_r27_r29,.-__save_r27_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r27_r29 */
+       .align  2
+       .globl  __return_r27_r29
+       .type   __return_r27_r29,@function
+__return_r27_r29:
+       ld.w    0[sp],r29
+       ld.w    4[sp],r28
+       ld.w    8[sp],r27
+       add     12,sp
+       jmp     [r31]
+       .size   __return_r27_r29,.-__return_r27_r29
+#endif /* L_save_27 */
+
+#ifdef L_save_28
+       .text
+       .align  2
+       .globl  __save_r28_r29
+       .type   __save_r28_r29,@function
+       /* Allocate space and save registers 28,29 on the stack */
+       /* Called via:  jalr __save_r28_r29,r10 */
+__save_r28_r29:
+       add     -8,sp
+       st.w    r29,0[sp]
+       st.w    r28,4[sp]
+       jmp     [r10]
+       .size   __save_r28_r29,.-__save_r28_r29
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r28_r29 */
+       .align  2
+       .globl  __return_r28_r29
+       .type   __return_r28_r29,@function
+__return_r28_r29:
+       ld.w    0[sp],r29
+       ld.w    4[sp],r28
+       add     8,sp
+       jmp     [r31]
+       .size   __return_r28_r29,.-__return_r28_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_29
+       .text
+       .align  2
+       .globl  __save_r29
+       .type   __save_r29,@function
+       /* Allocate space and save register 29 on the stack */
+       /* Called via:  jalr __save_r29,r10 */
+__save_r29:
+       add     -4,sp
+       st.w    r29,0[sp]
+       jmp     [r10]
+       .size   __save_r29,.-__save_r29
+
+       /* Restore saved register 29, deallocate stack and return to the user */
+       /* Called via:  jr __return_r29 */
+       .align  2
+       .globl  __return_r29
+       .type   __return_r29,@function
+__return_r29:
+       ld.w    0[sp],r29
+       add     4,sp
+       jmp     [r31]
+       .size   __return_r29,.-__return_r29
+#endif /* L_save_28 */
+
+#ifdef L_save_2c
+       .text
+       .align  2
+       .globl  __save_r2_r31
+       .type   __save_r2_r31,@function
+       /* Allocate space and save registers 20 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r2_r31,r10 */
+__save_r2_r31:
+       mov     ep,r1
+       addi    -64,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r23,40[ep]
+       sst.w   r22,44[ep]
+       sst.w   r21,48[ep]
+       sst.w   r20,52[ep]
+       sst.w   r2,56[ep]
+       sst.w   r31,60[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r2_r31,.-__save_r2_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r20_r31 */
+       .align  2
+       .globl  __return_r2_r31
+       .type   __return_r2_r31,@function
+__return_r2_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r23
+       sld.w   44[ep],r22
+       sld.w   48[ep],r21
+       sld.w   52[ep],r20
+       sld.w   56[ep],r2
+       sld.w   60[ep],r31
+       addi    64,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r2_r31,.-__return_r2_r31
+#endif /* L_save_2c */
+
+#ifdef L_save_20c
+       .text
+       .align  2
+       .globl  __save_r20_r31
+       .type   __save_r20_r31,@function
+       /* Allocate space and save registers 20 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r20_r31,r10 */
+__save_r20_r31:
+       mov     ep,r1
+       addi    -60,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r23,40[ep]
+       sst.w   r22,44[ep]
+       sst.w   r21,48[ep]
+       sst.w   r20,52[ep]
+       sst.w   r31,56[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r20_r31,.-__save_r20_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r20_r31 */
+       .align  2
+       .globl  __return_r20_r31
+       .type   __return_r20_r31,@function
+__return_r20_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r23
+       sld.w   44[ep],r22
+       sld.w   48[ep],r21
+       sld.w   52[ep],r20
+       sld.w   56[ep],r31
+       addi    60,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r20_r31,.-__return_r20_r31
+#endif /* L_save_20c */
+
+#ifdef L_save_21c
+       .text
+       .align  2
+       .globl  __save_r21_r31
+       .type   __save_r21_r31,@function
+       /* Allocate space and save registers 21 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r21_r31,r10 */
+__save_r21_r31:
+       mov     ep,r1
+       addi    -56,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r23,40[ep]
+       sst.w   r22,44[ep]
+       sst.w   r21,48[ep]
+       sst.w   r31,52[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r21_r31,.-__save_r21_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r21_r31 */
+       .align  2
+       .globl  __return_r21_r31
+       .type   __return_r21_r31,@function
+__return_r21_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r23
+       sld.w   44[ep],r22
+       sld.w   48[ep],r21
+       sld.w   52[ep],r31
+       addi    56,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r21_r31,.-__return_r21_r31
+#endif /* L_save_21c */
+
+#ifdef L_save_22c
+       .text
+       .align  2
+       .globl  __save_r22_r31
+       .type   __save_r22_r31,@function
+       /* Allocate space and save registers 22 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r22_r31,r10 */
+__save_r22_r31:
+       mov     ep,r1
+       addi    -52,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r23,40[ep]
+       sst.w   r22,44[ep]
+       sst.w   r31,48[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r22_r31,.-__save_r22_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r22_r31 */
+       .align  2
+       .globl  __return_r22_r31
+       .type   __return_r22_r31,@function
+__return_r22_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r23
+       sld.w   44[ep],r22
+       sld.w   48[ep],r31
+       addi    52,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r22_r31,.-__return_r22_r31
+#endif /* L_save_22c */
+
+#ifdef L_save_23c
+       .text
+       .align  2
+       .globl  __save_r23_r31
+       .type   __save_r23_r31,@function
+       /* Allocate space and save registers 23 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r23_r31,r10 */
+__save_r23_r31:
+       mov     ep,r1
+       addi    -48,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r23,40[ep]
+       sst.w   r31,44[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r23_r31,.-__save_r23_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r23_r31 */
+       .align  2
+       .globl  __return_r23_r31
+       .type   __return_r23_r31,@function
+__return_r23_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r23
+       sld.w   44[ep],r31
+       addi    48,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r23_r31,.-__return_r23_r31
+#endif /* L_save_23c */
+
+#ifdef L_save_24c
+       .text
+       .align  2
+       .globl  __save_r24_r31
+       .type   __save_r24_r31,@function
+       /* Allocate space and save registers 24 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r24_r31,r10 */
+__save_r24_r31:
+       mov     ep,r1
+       addi    -44,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r24,36[ep]
+       sst.w   r31,40[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r24_r31,.-__save_r24_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r24_r31 */
+       .align  2
+       .globl  __return_r24_r31
+       .type   __return_r24_r31,@function
+__return_r24_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r24
+       sld.w   40[ep],r31
+       addi    44,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r24_r31,.-__return_r24_r31
+#endif /* L_save_24c */
+
+#ifdef L_save_25c
+       .text
+       .align  2
+       .globl  __save_r25_r31
+       .type   __save_r25_r31,@function
+       /* Allocate space and save registers 25 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r25_r31,r10 */
+__save_r25_r31:
+       mov     ep,r1
+       addi    -40,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r25,32[ep]
+       sst.w   r31,36[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r25_r31,.-__save_r25_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r25_r31 */
+       .align  2
+       .globl  __return_r25_r31
+       .type   __return_r25_r31,@function
+__return_r25_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r25
+       sld.w   36[ep],r31
+       addi    40,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r25_r31,.-__return_r25_r31
+#endif /* L_save_25c */
+
+#ifdef L_save_26c
+       .text
+       .align  2
+       .globl  __save_r26_r31
+       .type   __save_r26_r31,@function
+       /* Allocate space and save registers 26 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r26_r31,r10 */
+__save_r26_r31:
+       mov     ep,r1
+       addi    -36,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r26,28[ep]
+       sst.w   r31,32[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r26_r31,.-__save_r26_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r26_r31 */
+       .align  2
+       .globl  __return_r26_r31
+       .type   __return_r26_r31,@function
+__return_r26_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r26
+       sld.w   32[ep],r31
+       addi    36,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r26_r31,.-__return_r26_r31
+#endif /* L_save_26c */
+
+#ifdef L_save_27c
+       .text
+       .align  2
+       .globl  __save_r27_r31
+       .type   __save_r27_r31,@function
+       /* Allocate space and save registers 27 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r27_r31,r10 */
+__save_r27_r31:
+       mov     ep,r1
+       addi    -32,sp,sp
+       mov     sp,ep
+       sst.w   r29,16[ep]
+       sst.w   r28,20[ep]
+       sst.w   r27,24[ep]
+       sst.w   r31,28[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r27_r31,.-__save_r27_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r27_r31 */
+       .align  2
+       .globl  __return_r27_r31
+       .type   __return_r27_r31,@function
+__return_r27_r31:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   16[ep],r29
+       sld.w   20[ep],r28
+       sld.w   24[ep],r27
+       sld.w   28[ep],r31
+       addi    32,sp,sp
+       mov     r1,ep
+       jmp     [r31]
+       .size   __return_r27_r31,.-__return_r27_r31
+#endif /* L_save_27c */
+
+#ifdef L_save_28c
+       .text
+       .align  2
+       .globl  __save_r28_r31
+       .type   __save_r28_r31,@function
+       /* Allocate space and save registers 28 .. 29, 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r28_r31,r10 */
+__save_r28_r31:
+       addi    -28,sp,sp
+       st.w    r29,16[sp]
+       st.w    r28,20[sp]
+       st.w    r31,24[sp]
+       jmp     [r10]
+       .size   __save_r28_r31,.-__save_r28_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r28_r31 */
+       .align  2
+       .globl  __return_r28_r31
+       .type   __return_r28_r31,@function
+__return_r28_r31:
+       ld.w    16[sp],r29
+       ld.w    20[sp],r28
+       ld.w    24[sp],r31
+       addi    28,sp,sp
+       jmp     [r31]
+       .size   __return_r28_r31,.-__return_r28_r31
+#endif /* L_save_28c */
+
+#ifdef L_save_29c
+       .text
+       .align  2
+       .globl  __save_r29_r31
+       .type   __save_r29_r31,@function
+       /* Allocate space and save registers 29 & 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r29_r31,r10 */
+__save_r29_r31:
+       addi    -24,sp,sp
+       st.w    r29,16[sp]
+       st.w    r31,20[sp]
+       jmp     [r10]
+       .size   __save_r29_r31,.-__save_r29_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r29_r31 */
+       .align  2
+       .globl  __return_r29_r31
+       .type   __return_r29_r31,@function
+__return_r29_r31:
+       ld.w    16[sp],r29
+       ld.w    20[sp],r31
+       addi    24,sp,sp
+       jmp     [r31]
+       .size   __return_r29_r31,.-__return_r29_r31
+#endif /* L_save_29c */
+
+#ifdef L_save_31c
+       .text
+       .align  2
+       .globl  __save_r31
+       .type   __save_r31,@function
+       /* Allocate space and save register 31 on the stack */
+       /* Also allocate space for the argument save area */
+       /* Called via:  jalr __save_r29_r31,r10 */
+__save_r31:
+       addi    -20,sp,sp
+       st.w    r31,16[sp]
+       jmp     [r10]
+       .size   __save_r31,.-__save_r31
+
+       /* Restore saved registers, deallocate stack and return to the user */
+       /* Called via:  jr __return_r31 */
+       .align  2
+       .globl  __return_r31
+       .type   __return_r31,@function
+__return_r31:
+       ld.w    16[sp],r31
+       addi    20,sp,sp
+       jmp     [r31]
+       .size   __return_r29_r31,.-__return_r29_r31
+#endif /* L_save_31c */
+
+#ifdef L_save_varargs
+       .text
+       .align  2
+       .globl  __save_r6_r9
+       .type   __save_r6_r9,@function
+       /* Save registers 6 .. 9 on the stack for variable argument functions */
+       /* Called via:  jalr __save_r6_r9,r10 */
+__save_r6_r9:
+       mov     ep,r1
+       mov     sp,ep
+       sst.w   r6,0[ep]
+       sst.w   r7,4[ep]
+       sst.w   r8,8[ep]
+       sst.w   r9,12[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_r6_r9,.-__save_r6_r9
+#endif /* L_save_varargs */
+
+#ifdef L_save_interrupt
+       .text
+       .align  2
+       .globl  __save_interrupt
+       .type   __save_interrupt,@function
+       /* Save registers r1, r5 on stack and load up with expected values */
+       /* Note, 12 bytes of stack have already been allocated. */
+       /* Called via:  jalr __save_interrupt,r10 */
+__save_interrupt:
+       st.w    ep,0[sp]
+       st.w    gp,4[sp]
+       st.w    r1,8[sp]
+       movhi   hi(__ep),r0,ep
+       movea   lo(__ep),ep,ep
+       movhi   hi(__gp),r0,gp
+       movea   lo(__gp),gp,gp
+       jmp     [r10]
+       .size   __save_interrupt,.-__save_interrupt
+
+       /* Restore saved registers, deallocate stack and return from the interrupt */
+       /* Called via:  jr __return_interupt */
+       .align  2
+       .globl  __return_interrupt
+       .type   __return_interrupt,@function
+__return_interrupt:
+       ld.w    0[sp],ep
+       ld.w    4[sp],gp
+       ld.w    8[ep],r1
+       ld.w    12[ep],r10
+       add     12,sp
+       reti
+       .size   __return_interrupt,.-__return_interrupt
+#endif /* L_save_interrupt */
+
+#ifdef L_save_all_interrupt
+       .text
+       .align  2
+       .globl  __save_all_interrupt
+       .type   __save_all_interrupt,@function
+       /* Save all registers except for those saved in __save_interrupt */
+       /* allocate enough stack for all of the registers & 16 bytes of space */
+       /* Called via:  jalr __save_all_interrupt,r10 */
+__save_all_interrupt:
+       addi    -120,sp,sp
+       mov     ep,r1
+       mov     sp,ep
+       sst.w   r31,116[ep]
+       sst.w   r2,112[ep]
+       sst.w   gp,108[ep]
+       sst.w   r6,104[ep]
+       sst.w   r7,100[ep]
+       sst.w   r8,96[ep]
+       sst.w   r9,92[ep]
+       sst.w   r11,88[ep]
+       sst.w   r12,84[ep]
+       sst.w   r13,80[ep]
+       sst.w   r14,76[ep]
+       sst.w   r15,72[ep]
+       sst.w   r16,68[ep]
+       sst.w   r17,64[ep]
+       sst.w   r18,60[ep]
+       sst.w   r19,56[ep]
+       sst.w   r20,52[ep]
+       sst.w   r21,48[ep]
+       sst.w   r22,44[ep]
+       sst.w   r23,40[ep]
+       sst.w   r24,36[ep]
+       sst.w   r25,32[ep]
+       sst.w   r26,28[ep]
+       sst.w   r27,24[ep]
+       sst.w   r28,20[ep]
+       sst.w   r29,16[ep]
+       mov     r1,ep
+       jmp     [r10]
+       .size   __save_all_interrupt,.-__save_all_interrupt
+
+       .globl  __restore_all_interrupt
+       .type   __restore_all_interrupt,@function
+       /* Restore all registers saved in __save_all_interrupt */
+       /* & deallocate the stack space */
+       /* Called via:  jalr __restore_all_interrupt,r10 */
+__restore_all_interrupt:
+       mov     ep,r1
+       mov     sp,ep
+       sld.w   116[ep],r31
+       sld.w   112[ep],r2
+       sld.w   108[ep],gp
+       sld.w   104[ep],r6
+       sld.w   100[ep],r7
+       sld.w   96[ep],r8
+       sld.w   92[ep],r9
+       sld.w   88[ep],r11
+       sld.w   84[ep],r12
+       sld.w   80[ep],r13
+       sld.w   76[ep],r14
+       sld.w   72[ep],r15
+       sld.w   68[ep],r16
+       sld.w   64[ep],r17
+       sld.w   60[ep],r18
+       sld.w   56[ep],r19
+       sld.w   52[ep],r20
+       sld.w   48[ep],r21
+       sld.w   44[ep],r22
+       sld.w   40[ep],r23
+       sld.w   36[ep],r24
+       sld.w   32[ep],r25
+       sld.w   28[ep],r26
+       sld.w   24[ep],r27
+       sld.w   20[ep],r28
+       sld.w   16[ep],r29
+       mov     r1,ep
+       addi    120,sp,sp
+       jmp     [r10]
+       .size   __restore_all_interrupt,.-__restore_all_interrupt
+#endif /* L_save_all_interrupt */
+/* END CYGNUS LOCAL */
diff --git a/gcc/config/v850/t-v850 b/gcc/config/v850/t-v850
new file mode 100644 (file)
index 0000000..5203441
--- /dev/null
@@ -0,0 +1,54 @@
+# CYGNUS LOCAL entire file v850/law
+CROSS_LIBGCC1 = libgcc1-asm.a
+LIB1ASMSRC = v850/lib1funcs.asm
+LIB1ASMFUNCS   = _mulsi3 \
+                 _divsi3 \
+                 _udivsi3 \
+                 _modsi3 \
+                 _umodsi3 \
+                 _save_2 \
+                 _save_20 \
+                 _save_21 \
+                 _save_22 \
+                 _save_23 \
+                 _save_24 \
+                 _save_25 \
+                 _save_26 \
+                 _save_27 \
+                 _save_28 \
+                 _save_29 \
+                 _save_2c \
+                 _save_20c \
+                 _save_21c \
+                 _save_22c \
+                 _save_23c \
+                 _save_24c \
+                 _save_25c \
+                 _save_26c \
+                 _save_27c \
+                 _save_28c \
+                 _save_29c \
+                 _save_31c \
+                 _save_varargs \
+                 _save_interrupt \
+                 _save_all_interrupt
+       
+
+# These are really part of libgcc1, but this will cause them to be
+# built correctly, so...
+
+LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c
+
+dp-bit.c: $(srcdir)/config/fp-bit.c
+       echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
+       echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
+       echo '#endif'           >> dp-bit.c
+       cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+
+fp-bit.c: $(srcdir)/config/fp-bit.c
+       echo '#define FLOAT' > fp-bit.c
+       echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
+       echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
+       echo '#endif'           >> fp-bit.c
+       cat $(srcdir)/config/fp-bit.c >> fp-bit.c
+#END CYGNUS LOCAL
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
new file mode 100644 (file)
index 0000000..6435d40
--- /dev/null
@@ -0,0 +1,1942 @@
+/* Subroutines for insn-output.c for NEC V850 series
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Contributed by Jeff Law (law@cygnus.com).
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <stdio.h>
+#include <ctype.h>
+#include "config.h"
+#include "rtl.h"
+#include "regs.h"
+#include "hard-reg-set.h"
+#include "real.h"
+#include "insn-config.h"
+#include "conditions.h"
+#include "insn-flags.h"
+#include "output.h"
+#include "insn-attr.h"
+#include "flags.h"
+#include "recog.h"
+#include "expr.h"
+#include "tree.h"
+#include "obstack.h"
+
+/* True if the current function has anonymous arguments.  */
+int current_function_anonymous_args;
+
+/* Information about the various small memory areas.  */
+struct small_memory_info small_memory[ (int)SMALL_MEMORY_max ] =
+{
+  /* name      value           max             physical max */
+  { "tda",     (char *)0,      0,              256 },
+  { "sda",     (char *)0,      0,              65536 },
+  { "zda",     (char *)0,      0,              32768 },
+};
+
+/* True if we don't need to check any more if the current
+   function is an interrupt handler */
+static int v850_interrupt_cache_p = FALSE;
+
+/* Whether current function is an interrupt handler.  */
+static int v850_interrupt_p = FALSE;
+
+\f
+/* Sometimes certain combinations of command options do not make
+   sense on a particular target machine.  You can define a macro
+   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
+   defined, is executed once just after all the command options have
+   been parsed.
+
+   Don't use this macro to turn on various extra optimizations for
+   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.  */
+
+void
+override_options ()
+{
+  int i;
+  extern int atoi ();
+
+  /* Parse -m{s,t,z}da=nnn switches */
+  for (i = 0; i < (int)SMALL_MEMORY_max; i++)
+    {
+      if (small_memory[i].value)
+       {
+         if (!isdigit (*small_memory[i].value))
+           error ("%s=%s is not numeric.",
+                  small_memory[i].name,
+                  small_memory[i].value);
+         else
+           {
+             small_memory[i].max = atoi (small_memory[i].value);
+             if (small_memory[i].max > small_memory[i].physical_max)
+               error ("%s=%s is too large.",
+                  small_memory[i].name,
+                  small_memory[i].value);
+           }
+       }
+    }
+}
+
+\f
+/* Output assembly code for the start of the file.  */
+
+void
+asm_file_start (file)
+     FILE *file;
+{
+  output_file_directive (file, main_input_filename);
+}
+\f
+
+/* Return an RTX to represent where a value with mode MODE will be returned
+   from a function.  If the result is 0, the argument is pushed.  */
+
+rtx
+function_arg (cum, mode, type, named)
+     CUMULATIVE_ARGS *cum;
+     enum machine_mode mode;
+     tree type;
+     int named;
+{
+  rtx result = 0;
+  int size, align;
+
+  if (TARGET_GHS && !named)
+    return NULL_RTX;
+
+  if (mode == BLKmode)
+    size = int_size_in_bytes (type);
+  else
+    size = GET_MODE_SIZE (mode);
+
+  if (type)
+    align = TYPE_ALIGN (type) / BITS_PER_UNIT;
+  else
+    align = size;
+
+  cum->nbytes = (cum->nbytes + align - 1) &~(align - 1);
+
+  if (cum->nbytes > 4 * UNITS_PER_WORD)
+    return 0;
+
+  if (type == NULL_TREE
+      && cum->nbytes + size > 4 * UNITS_PER_WORD)
+    return 0;
+
+  switch (cum->nbytes / UNITS_PER_WORD)
+    {
+    case 0:
+      result = gen_rtx (REG, mode, 6);
+      break;
+    case 1:
+      result = gen_rtx (REG, mode, 7);
+      break;
+    case 2:
+      result = gen_rtx (REG, mode, 8);
+      break;
+    case 3:
+      result = gen_rtx (REG, mode, 9);
+      break;
+    default:
+      result = 0;
+    }
+
+  return result;
+}
+
+\f
+/* Return the number of words which must be put into registers
+   for values which are part in registers and part in memory.  */
+
+int
+function_arg_partial_nregs (cum, mode, type, named)
+     CUMULATIVE_ARGS *cum;
+     enum machine_mode mode;
+     tree type;
+     int named;
+{
+  int size, align;
+
+  if (TARGET_GHS && !named)
+    return 0;
+
+  if (mode == BLKmode)
+    size = int_size_in_bytes (type);
+  else
+    size = GET_MODE_SIZE (mode);
+
+  if (type)
+    align = TYPE_ALIGN (type) / BITS_PER_UNIT;
+  else
+    align = size;
+
+  cum->nbytes = (cum->nbytes + align - 1) &~(align - 1);
+
+  if (cum->nbytes > 4 * UNITS_PER_WORD)
+    return 0;
+
+  if (cum->nbytes + size <= 4 * UNITS_PER_WORD)
+    return 0;
+
+  if (type == NULL_TREE
+      && cum->nbytes + size > 4 * UNITS_PER_WORD)
+    return 0;
+
+  return (4 * UNITS_PER_WORD - cum->nbytes) / UNITS_PER_WORD;
+}
+
+\f
+/* Return the high and low words of a CONST_DOUBLE */
+
+static void
+const_double_split (x, p_high, p_low)
+     rtx x;
+     HOST_WIDE_INT *p_high;
+     HOST_WIDE_INT *p_low;
+{
+  if (GET_CODE (x) == CONST_DOUBLE)
+    {
+      long t[2];
+      REAL_VALUE_TYPE rv;
+
+      switch (GET_MODE (x))
+       {
+       case DFmode:
+         REAL_VALUE_FROM_CONST_DOUBLE (rv, x);
+         REAL_VALUE_TO_TARGET_DOUBLE (rv, t);
+         *p_high = t[1];       /* since v850 is little endian */
+         *p_low = t[0];        /* high is second word */
+         return;
+
+       case SFmode:
+         REAL_VALUE_FROM_CONST_DOUBLE (rv, x);
+         REAL_VALUE_TO_TARGET_SINGLE (rv, *p_high);
+         *p_low = 0;
+         return;
+
+       case VOIDmode:
+       case DImode:
+         *p_high = CONST_DOUBLE_HIGH (x);
+         *p_low  = CONST_DOUBLE_LOW (x);
+         return;
+       }
+    }
+
+  fatal_insn ("const_double_split got a bad insn:", x);
+}
+
+\f
+/* Return the cost of the rtx R with code CODE.  */
+
+static int
+const_costs_int (value, zero_cost)
+     HOST_WIDE_INT value;
+     int zero_cost;
+{
+  if (CONST_OK_FOR_I (value))
+      return zero_cost;
+  else if (CONST_OK_FOR_J (value))
+    return 1;
+  else if (CONST_OK_FOR_K (value))
+    return 2;
+  else
+    return 4;
+}
+
+int
+const_costs (r, c)
+     rtx r;
+     enum rtx_code c;
+{
+  HOST_WIDE_INT high, low;
+
+  switch (c)
+    {
+    case CONST_INT:
+      return const_costs_int (INTVAL (r), 0);
+
+    case CONST_DOUBLE:
+      const_double_split (r, &high, &low);
+      if (GET_MODE (r) == SFmode)
+       return const_costs_int (high, 1);
+      else
+       return const_costs_int (high, 1) + const_costs_int (low, 1);
+
+    case SYMBOL_REF:
+    case LABEL_REF:
+    case CONST:
+      return 2;
+
+    case HIGH:
+      return 1;
+
+    default:
+      return 4;
+    }
+}
+
+\f
+/* Print operand X using operand code CODE to assembly language output file
+   FILE.  */
+
+void
+print_operand (file, x, code)
+     FILE *file;
+     rtx x;
+     int code;
+{
+  HOST_WIDE_INT high, low;
+
+  switch (code)
+    {
+    case 'b':
+    case 'B':
+      switch (code == 'b' ? GET_CODE (x) : reverse_condition (GET_CODE (x)))
+       {
+         case NE:
+           fprintf (file, "bne");
+           break;
+         case EQ:
+           fprintf (file, "be");
+           break;
+         case GE:
+           fprintf (file, "bge");
+           break;
+         case GT:
+           fprintf (file, "bgt");
+           break;
+         case LE:
+           fprintf (file, "ble");
+           break;
+         case LT:
+           fprintf (file, "blt");
+           break;
+         case GEU:
+           fprintf (file, "bnl");
+           break;
+         case GTU:
+           fprintf (file, "bh");
+           break;
+         case LEU:
+           fprintf (file, "bnh");
+           break;
+         case LTU:
+           fprintf (file, "bl");
+           break;
+         default:
+           abort ();
+       }
+      break;
+      switch (GET_CODE (x))
+       {
+         case NE:
+           fprintf (file, "be");
+           break;
+         case EQ:
+           fprintf (file, "bne");
+           break;
+         case GE:
+           fprintf (file, "blt");
+           break;
+         case GT:
+           fprintf (file, "bgt");
+           break;
+         case LE:
+           fprintf (file, "ble");
+           break;
+         case LT:
+           fprintf (file, "blt");
+           break;
+         case GEU:
+           fprintf (file, "bnl");
+           break;
+         case GTU:
+           fprintf (file, "bh");
+           break;
+         case LEU:
+           fprintf (file, "bnh");
+           break;
+         case LTU:
+           fprintf (file, "bl");
+           break;
+         default:
+           abort ();
+       }
+      break;
+    case 'F':                  /* high word of CONST_DOUBLE */
+      if (GET_CODE (x) == CONST_INT)
+       fprintf (file, "%d", (INTVAL (x) >= 0) ? 0 : -1);
+      else if (GET_CODE (x) == CONST_DOUBLE)
+       {
+         const_double_split (x, &high, &low);
+         fprintf (file, "%ld", (long) high);
+       }
+      else
+       abort ();
+      break;
+    case 'G':                  /* low word of CONST_DOUBLE */
+      if (GET_CODE (x) == CONST_INT)
+       fprintf (file, "%ld", (long) INTVAL (x));
+      else if (GET_CODE (x) == CONST_DOUBLE)
+       {
+         const_double_split (x, &high, &low);
+         fprintf (file, "%ld", (long) low);
+       }
+      else
+       abort ();
+      break;
+    case 'L':
+      fprintf (file, "%d\n", INTVAL (x) & 0xffff);
+      break;
+    case 'M':
+      fprintf (file, "%d", exact_log2 (INTVAL (x)));
+      break;
+    case 'O':
+      if (special_symbolref_operand (x, VOIDmode))
+        {
+          char* name;
+
+         if (GET_CODE (x) == SYMBOL_REF)
+           name = XSTR (x, 0);
+         else if (GET_CODE (x) == CONST)
+           name = XSTR (XEXP (XEXP (x, 0), 0), 0);
+         else
+           abort ();
+
+          if (ZDA_NAME_P (name))
+            fprintf (file, "zdaoff");
+          else if (SDA_NAME_P (name))
+            fprintf (file, "sdaoff");
+          else if (TDA_NAME_P (name))
+            fprintf (file, "tdaoff");
+          else
+            abort();
+        }
+      else
+        abort();
+      break;
+    case 'P':
+      if (special_symbolref_operand (x, VOIDmode))
+        output_addr_const (file, x);
+      else
+        abort();
+      break;
+    case 'Q':
+      if (special_symbolref_operand (x, VOIDmode))
+        {
+          char* name;
+
+         if (GET_CODE (x) == SYMBOL_REF)
+           name = XSTR (x, 0);
+         else if (GET_CODE (x) == CONST)
+           name = XSTR (XEXP (XEXP (x, 0), 0), 0);
+         else
+           abort ();
+
+          if (ZDA_NAME_P (name))
+            fprintf (file, "r0");
+          else if (SDA_NAME_P (name))
+            fprintf (file, "gp");
+          else if (TDA_NAME_P (name))
+            fprintf (file, "ep");
+          else
+            abort();
+        }
+      else
+        abort();
+      break;
+    case 'R':          /* 2nd word of a double.  */
+      switch (GET_CODE (x))
+       {
+         case REG:
+           fprintf (file, reg_names[REGNO (x) + 1]);
+           break;
+         case MEM:
+           print_operand_address (file,
+                                  XEXP (adj_offsettable_operand (x, 4), 0));
+           break;
+       }
+      break;
+    case 'S':
+      {
+        /* if it's a referance to a TDA variable, use sst/sld vs. st/ld */
+        if (GET_CODE (x) == MEM && ep_memory_operand (x, GET_MODE (x)))
+          fputs ("s", file);
+
+        break;
+      }
+    case 'W':                  /* print the instruction suffix */
+      switch (GET_MODE (x))
+       {
+       default:
+         abort ();
+
+       case QImode: fputs (".b", file); break;
+       case HImode: fputs (".h", file); break;
+       case SImode: fputs (".w", file); break;
+       case SFmode: fputs (".w", file); break;
+       }
+      break;
+    case '.':                  /* register r0 */
+      fputs (reg_names[0], file);
+      break;
+    default:
+      switch (GET_CODE (x))
+       {
+       case MEM:
+         if (GET_CODE (XEXP (x, 0)) == CONST_INT)
+           output_address (gen_rtx (PLUS, SImode,
+                                    gen_rtx (REG, SImode, 0),
+                                    XEXP (x, 0)));
+         else
+           output_address (XEXP (x, 0));
+         break;
+
+       case REG:
+         fputs (reg_names[REGNO (x)], file);
+         break;
+       case SUBREG:
+         fputs (reg_names[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)], file);
+         break;
+       case CONST_INT:
+       case SYMBOL_REF:
+       case CONST:
+       case LABEL_REF:
+       case CODE_LABEL:
+         print_operand_address (file, x);
+         break;
+       default:
+         abort ();
+       }
+      break;
+
+    }
+}
+
+\f
+/* Output assembly language output for the address ADDR to FILE.  */
+
+void
+print_operand_address (file, addr)
+     FILE *file;
+     rtx addr;
+{
+  switch (GET_CODE (addr))
+    {
+    case REG:
+      fprintf (file, "0[");
+      print_operand (file, addr, 0);
+      fprintf (file, "]");
+      break;
+    case LO_SUM:
+      if (GET_CODE (XEXP (addr, 0)) == REG)
+       {
+         /* reg,foo */
+         fprintf (file, "lo(");
+         print_operand (file, XEXP (addr, 1), 0);
+         fprintf (file, ")[");
+         print_operand (file, XEXP (addr, 0), 0);
+         fprintf (file, "]");
+       }
+      break;
+    case PLUS:
+      if (GET_CODE (XEXP (addr, 0)) == REG
+         || GET_CODE (XEXP (addr, 0)) == SUBREG)
+       {
+         /* reg,foo */
+         print_operand (file, XEXP (addr, 1), 0);
+         fprintf (file, "[");
+         print_operand (file, XEXP (addr, 0), 0);
+         fprintf (file, "]");
+       }
+      else
+       {
+         print_operand (file, XEXP (addr, 0), 0);
+         fprintf (file, "+");
+         print_operand (file, XEXP (addr, 1), 0);
+       }
+      break;
+    case SYMBOL_REF:
+      if (ENCODED_NAME_P (XSTR (addr, 0)))
+        {
+          char* name = XSTR (addr, 0);
+          char* off_name;
+          char* reg_name;
+
+          if (ZDA_NAME_P (name))
+            {
+              off_name = "zdaoff";
+              reg_name = "r0";
+            }
+          else if (SDA_NAME_P (name))
+            {
+              off_name = "sdaoff";
+              reg_name = "gp";
+            }
+          else if (TDA_NAME_P (name))
+            {
+              off_name = "tdaoff";
+              reg_name = "ep";
+            }
+          else
+            abort();
+
+          fprintf (file, "%s(", off_name);
+          output_addr_const (file, addr);
+          fprintf (file, ")[%s]", reg_name);
+        }
+      else
+        output_addr_const (file, addr);
+      break;
+    case CONST:
+      if (special_symbolref_operand (addr, VOIDmode))
+        {
+          char* name = XSTR (XEXP (XEXP (addr, 0), 0), 0);
+          char* off_name;
+          char* reg_name;
+
+          if (ZDA_NAME_P (name))
+            {
+              off_name = "zdaoff";
+              reg_name = "r0";
+            }
+          else if (SDA_NAME_P (name))
+            {
+              off_name = "sdaoff";
+              reg_name = "gp";
+            }
+          else if (TDA_NAME_P (name))
+            {
+              off_name = "tdaoff";
+              reg_name = "ep";
+            }
+          else
+            abort();
+
+          fprintf (file, "%s(", off_name);
+          output_addr_const (file, addr);
+          fprintf (file, ")[%s]", reg_name);
+        }
+      else
+        output_addr_const (file, addr);
+      break;
+    default:
+      output_addr_const (file, addr);
+      break;
+    }
+}
+
+\f
+/* Return appropriate code to load up a 1, 2, or 4 integer/floating
+   point value.  */
+
+char *
+output_move_single (operands)
+     rtx *operands;
+{
+  rtx dst = operands[0];
+  rtx src = operands[1];
+
+  if (REG_P (dst))
+    {
+      if (REG_P (src))
+       return "mov %1,%0";
+
+      else if (GET_CODE (src) == CONST_INT)
+       {
+         HOST_WIDE_INT value = INTVAL (src);
+
+         if (CONST_OK_FOR_J (value))           /* signed 5 bit immediate */
+           return "mov %1,%0";
+
+         else if (CONST_OK_FOR_K (value))      /* signed 16 bit immediate */
+           return "movea lo(%1),%.,%0";
+
+         else if (CONST_OK_FOR_L (value))      /* upper 16 bits were set */
+           return "movhi hi(%1),%.,%0";
+
+         else                                  /* random constant */
+           return "movhi hi(%1),%.,%0\n\tmovea lo(%1),%0,%0";
+       }
+
+      else if (GET_CODE (src) == CONST_DOUBLE && GET_MODE (src) == SFmode)
+       {
+         HOST_WIDE_INT high, low;
+
+         const_double_split (src, &high, &low);
+         if (CONST_OK_FOR_J (high))            /* signed 5 bit immediate */
+           return "mov %F1,%0";
+
+         else if (CONST_OK_FOR_K (high))       /* signed 16 bit immediate */
+           return "movea lo(%F1),%.,%0";
+
+         else if (CONST_OK_FOR_L (high))       /* upper 16 bits were set */
+           return "movhi hi(%F1),%.,%0";
+
+         else                                  /* random constant */
+           return "movhi hi(%F1),%.,%0\n\tmovea lo(%F1),%0,%0";
+       }
+
+      else if (GET_CODE (src) == MEM)
+       return "%S1ld%W1 %1,%0";
+
+      else if (special_symbolref_operand (src, VOIDmode))
+       return "movea %O1(%P1),%Q1,%0";
+
+      else if (GET_CODE (src) == LABEL_REF
+              || GET_CODE (src) == SYMBOL_REF
+              || GET_CODE (src) == CONST)
+       return "movhi hi(%1),%.,%0\n\tmovea lo(%1),%0,%0";
+
+      else if (GET_CODE (src) == HIGH)
+       return "movhi hi(%1),%.,%0";
+
+      else if (GET_CODE (src) == LO_SUM)
+       {
+         operands[2] = XEXP (src, 0);
+         operands[3] = XEXP (src, 1);
+         return "movea lo(%3),%2,%0";
+       }
+    }
+
+  else if (GET_CODE (dst) == MEM)
+    {
+      if (REG_P (src))
+       return "%S0st%W0 %1,%0";
+
+      else if (GET_CODE (src) == CONST_INT && INTVAL (src) == 0)
+       return "%S0st%W0 %.,%0";
+
+      else if (GET_CODE (src) == CONST_DOUBLE
+              && CONST0_RTX (GET_MODE (dst)) == src)
+       return "%S0st%W0 %.,%0";
+    }
+
+  fatal_insn ("output_move_single:", gen_rtx (SET, VOIDmode, dst, src));
+  return "";
+}
+
+\f
+/* Return appropriate code to load up an 8 byte integer or floating point value */
+
+char *
+output_move_double (operands)
+    rtx *operands;
+{
+  enum machine_mode mode = GET_MODE (operands[0]);
+  rtx dst = operands[0];
+  rtx src = operands[1];
+
+  if (register_operand (dst, mode)
+      && register_operand (src, mode))
+    {
+      if (REGNO (src) + 1 == REGNO (dst))
+       return "mov %R1,%R0\n\tmov %1,%0";
+      else
+       return "mov %1,%0\n\tmov %R1,%R0";
+    }
+
+  /* Storing 0 */
+  if (GET_CODE (dst) == MEM
+      && ((GET_CODE (src) == CONST_INT && INTVAL (src) == 0)
+         || (GET_CODE (src) == CONST_DOUBLE && CONST_DOUBLE_OK_FOR_G (src))))
+    return "st.w %.,%0\n\tst.w %.,%R0";
+
+  if (GET_CODE (src) == CONST_INT || GET_CODE (src) == CONST_DOUBLE)
+    {
+      HOST_WIDE_INT high_low[2];
+      int i;
+      rtx xop[10];
+
+      if (GET_CODE (src) == CONST_DOUBLE)
+       const_double_split (src, &high_low[1], &high_low[0]);
+      else
+       {
+         high_low[0] = INTVAL (src);
+         high_low[1] = (INTVAL (src) >= 0) ? 0 : -1;
+       }
+
+      for (i = 0; i < 2; i++)
+       {
+         xop[0] = gen_rtx (REG, SImode, REGNO (dst)+i);
+         xop[1] = GEN_INT (high_low[i]);
+         output_asm_insn (output_move_single (xop), xop);
+       }
+
+      return "";
+    }
+
+  if (GET_CODE (src) == MEM)
+    {
+      int ptrreg = -1;
+      int dreg = REGNO (dst);
+      rtx inside = XEXP (src, 0);
+
+      if (GET_CODE (inside) == REG)
+       ptrreg = REGNO (inside);
+      else if (GET_CODE (inside) == SUBREG)
+       ptrreg = REGNO (SUBREG_REG (inside)) + SUBREG_WORD (inside);
+      else if (GET_CODE (inside) == PLUS)
+       ptrreg = REGNO (XEXP (inside, 0));
+      else if (GET_CODE (inside) == LO_SUM)
+       ptrreg = REGNO (XEXP (inside, 0));
+
+      if (dreg == ptrreg)
+       return "ld.w %R1,%R0\n\tld.w %1,%0";
+    }
+
+  if (GET_CODE (src) == MEM)
+    return "ld.w %1,%0\n\tld.w %R1,%R0";
+  
+  if (GET_CODE (dst) == MEM)
+    return "st.w %1,%0\n\tst.w %R1,%R0";
+
+  return "mov %1,%0\n\tmov %R1,%R0";
+}
+
+\f
+/* Return true if OP is a valid short EP memory reference */
+
+int
+ep_memory_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  rtx addr, op0, op1;
+  int max_offset;
+  int mask;
+
+  if (GET_CODE (op) != MEM)
+    return FALSE;
+
+  switch (GET_MODE (op))
+    {
+    default:
+      return FALSE;
+
+    case QImode:
+      max_offset = 128;
+      mask = 0;
+      break;
+
+    case HImode:
+      max_offset = 256;
+      mask = 1;
+      break;
+
+    case SImode:
+    case SFmode:
+      max_offset = 256;
+      mask = 3;
+      break;
+    }
+
+  addr = XEXP (op, 0);
+  if (GET_CODE (addr) == CONST)
+    addr = XEXP (addr, 0);
+
+  switch (GET_CODE (addr))
+    {
+    default:
+      break;
+
+    case SYMBOL_REF:
+      return TDA_NAME_P (XSTR (addr, 0));
+
+    case REG:
+      return REGNO (addr) == EP_REGNUM;
+
+    case PLUS:
+      op0 = XEXP (addr, 0);
+      op1 = XEXP (addr, 1);
+      if (GET_CODE (op1) == CONST_INT
+         && INTVAL (op1) < max_offset
+         && (INTVAL (op1) & mask) == 0)
+       {
+         if (GET_CODE (op0) == REG && REGNO (op0) == EP_REGNUM)
+           return TRUE;
+
+         if (GET_CODE (op0) == SYMBOL_REF && TDA_NAME_P (XSTR (op0, 0)))
+           return TRUE;
+       }
+      break;
+    }
+
+  return FALSE;
+}
+
+/* Return true if OP is either a register or 0 */
+
+int
+reg_or_0_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) == CONST_INT)
+    return INTVAL (op) == 0;
+
+  else if (GET_CODE (op) == CONST_DOUBLE)
+    return CONST_DOUBLE_OK_FOR_G (op);
+
+  else if (GET_CODE (op) == REG)
+    return TRUE;
+
+  else if (GET_CODE (op) == SUBREG)
+    {
+      do {
+       op = SUBREG_REG (op);
+      } while (GET_CODE (op) == SUBREG);
+
+      if (GET_CODE (op) == MEM && !reload_completed)
+       return TRUE;
+
+      else if (GET_CODE (op) == REG)
+       return TRUE;
+    }
+
+  return FALSE;
+}
+
+/* Return true if OP is either a register or a signed five bit integer */
+
+int
+reg_or_int5_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) == CONST_INT)
+    return CONST_OK_FOR_J (INTVAL (op));
+
+  else if (GET_CODE (op) == REG)
+    return TRUE;
+
+  else if (GET_CODE (op) == SUBREG)
+    {
+      do {
+       op = SUBREG_REG (op);
+      } while (GET_CODE (op) == SUBREG);
+
+      if (GET_CODE (op) == MEM && !reload_completed)
+       return TRUE;
+
+      else if (GET_CODE (op) == REG)
+       return TRUE;
+    }
+
+  return FALSE;
+}
+
+/* Return true if OP is a valid call operand.  */
+
+int
+call_address_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  /* Only registers are valid call operands if TARGET_LONG_CALLS.  */
+  if (TARGET_LONG_CALLS)
+    return GET_CODE (op) == REG;
+  return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG);
+}
+
+int
+special_symbolref_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) == SYMBOL_REF)
+    return ENCODED_NAME_P (XSTR (op, 0));
+
+  else if (GET_CODE (op) == CONST)
+    return (GET_CODE (XEXP (op, 0)) == PLUS
+           && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF
+           && ENCODED_NAME_P (XSTR (XEXP (XEXP (op, 0), 0), 0))
+           && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT
+           && CONST_OK_FOR_K (INTVAL (XEXP (XEXP (op, 0), 1))));
+
+  return FALSE;
+}
+
+int
+movsi_source_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  /* Some constants, as well as symbolic operands
+     must be done with HIGH & LO_SUM patterns.  */
+  if (CONSTANT_P (op)
+      && GET_CODE (op) != HIGH
+      && !(GET_CODE (op) == CONST_INT
+           && (CONST_OK_FOR_J (INTVAL (op))
+               || CONST_OK_FOR_K (INTVAL (op))
+               || CONST_OK_FOR_L (INTVAL (op)))))
+    return special_symbolref_operand (op, mode);
+  else
+    return general_operand (op, mode);
+}
+
+int
+power_of_two_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  if (GET_CODE (op) != CONST_INT)
+    return 0;
+
+  if (exact_log2 (INTVAL (op)) == -1)
+    return 0;
+  return 1;
+}
+
+int
+not_power_of_two_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  unsigned int mask;
+
+  if (mode == QImode)
+    mask = 0xff;
+  else if (mode == HImode)
+    mask = 0xffff;
+  else if (mode == SImode)
+    mask = 0xffffffff; 
+  else
+    return 0;
+
+  if (GET_CODE (op) != CONST_INT)
+    return 0;
+
+  if (exact_log2 (~INTVAL (op) & mask) == -1)
+    return 0;
+  return 1;
+}
+
+\f
+/* Substitute memory references involving a pointer, to use the ep pointer,
+   taking care to save and preserve the ep.  */
+
+static void
+substitute_ep_register (first_insn, last_insn, uses, regno, p_r1, p_ep)
+     rtx first_insn;
+     rtx last_insn;
+     int uses;
+     int regno;
+     rtx *p_r1;
+     rtx *p_ep;
+{
+  rtx reg = gen_rtx (REG, Pmode, regno);
+  rtx insn;
+  int i;
+
+  if (!*p_r1)
+    {
+      regs_ever_live[1] = 1;
+      *p_r1 = gen_rtx (REG, Pmode, 1);
+      *p_ep = gen_rtx (REG, Pmode, 30);
+    }
+
+  if (TARGET_DEBUG)
+    fprintf (stderr, "Saved %d bytes (%d uses of register %s) in function %s, starting as insn %d, ending at %d\n",
+            2 * (uses - 3), uses, reg_names[regno],
+            IDENTIFIER_POINTER (DECL_NAME (current_function_decl)),
+            INSN_UID (first_insn), INSN_UID (last_insn));
+
+  if (GET_CODE (first_insn) == NOTE)
+    first_insn = next_nonnote_insn (first_insn);
+
+  last_insn = next_nonnote_insn (last_insn);
+  for (insn = first_insn; insn && insn != last_insn; insn = NEXT_INSN (insn))
+    {
+      if (GET_CODE (insn) == INSN)
+       {
+         rtx pattern = single_set (insn);
+
+         /* Replace the memory references.  */
+         if (pattern)
+           {
+             rtx *p_mem;
+
+             if (GET_CODE (SET_DEST (pattern)) == MEM
+                 && GET_CODE (SET_SRC (pattern)) == MEM)
+               p_mem = (rtx *)0;
+
+             else if (GET_CODE (SET_DEST (pattern)) == MEM)
+               p_mem = &SET_DEST (pattern);
+
+             else if (GET_CODE (SET_SRC (pattern)) == MEM)
+               p_mem = &SET_SRC (pattern);
+
+             else
+               p_mem = (rtx *)0;
+
+             if (p_mem)
+               {
+                 rtx addr = XEXP (*p_mem, 0);
+
+                 if (GET_CODE (addr) == REG && REGNO (addr) == regno)
+                   *p_mem = change_address (*p_mem, VOIDmode, *p_ep);
+
+                 else if (GET_CODE (addr) == PLUS
+                          && GET_CODE (XEXP (addr, 0)) == REG
+                          && REGNO (XEXP (addr, 0)) == regno
+                          && GET_CODE (XEXP (addr, 1)) == CONST_INT
+                          && ((unsigned)INTVAL (XEXP (addr, 1))) < 256
+                          && (GET_MODE (*p_mem) != QImode
+                              || ((unsigned)INTVAL (XEXP (addr, 1))) < 128))
+                   *p_mem = change_address (*p_mem, VOIDmode,
+                                            gen_rtx (PLUS, Pmode,
+                                                     *p_ep, XEXP (addr, 1)));
+               }
+           }
+       }
+    }
+
+  /* Optimize back to back cases of ep <- r1 & r1 <- ep.  */
+  insn = prev_nonnote_insn (first_insn);
+  if (insn && GET_CODE (insn) == INSN
+      && GET_CODE (PATTERN (insn)) == SET
+      && SET_DEST (PATTERN (insn)) == *p_ep
+      && SET_SRC (PATTERN (insn)) == *p_r1)
+    delete_insn (insn);
+  else
+    emit_insn_before (gen_rtx (SET, Pmode, *p_r1, *p_ep), first_insn);
+
+  emit_insn_before (gen_rtx (SET, Pmode, *p_ep, reg), first_insn);
+  emit_insn_before (gen_rtx (SET, Pmode, *p_ep, *p_r1), last_insn);
+}
+
+\f
+/* In rare cases, correct code generation requires extra machine
+   dependent processing between the second jump optimization pass and
+   delayed branch scheduling.  On those machines, define this macro
+   as a C statement to act on the code starting at INSN.
+
+   On the 850, we use it to implement the -mep mode to copy heavily used
+   pointers to ep to use the implicit addressing */
+
+void v850_reorg (start_insn)
+     rtx start_insn;
+{
+  struct {
+    int uses;
+    rtx first_insn;
+    rtx last_insn;
+  } regs[FIRST_PSEUDO_REGISTER];
+
+  int i;
+  int use_ep = FALSE;
+  rtx r1 = NULL_RTX;
+  rtx ep = NULL_RTX;
+  rtx insn;
+  rtx pattern;
+
+  /* If not ep mode, just return now */
+  if (!TARGET_EP)
+    return;
+
+  for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+    {
+      regs[i].uses = 0;
+      regs[i].first_insn = NULL_RTX;
+      regs[i].last_insn = NULL_RTX;
+    }
+
+  for (insn = start_insn; insn != NULL_RTX; insn = NEXT_INSN (insn))
+    {
+      switch (GET_CODE (insn))
+       {
+         /* End of basic block */
+       default:
+         if (!use_ep)
+           {
+             int max_uses = -1;
+             int max_regno = -1;
+
+             for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+               {
+                 if (max_uses < regs[i].uses)
+                   {
+                     max_uses = regs[i].uses;
+                     max_regno = i;
+                   }
+               }
+
+             if (max_uses > 3)
+               substitute_ep_register (regs[max_regno].first_insn,
+                                       regs[max_regno].last_insn,
+                                       max_uses, max_regno, &r1, &ep);
+           }
+
+         use_ep = FALSE;
+         for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+           {
+             regs[i].uses = 0;
+             regs[i].first_insn = NULL_RTX;
+             regs[i].last_insn = NULL_RTX;
+           }
+         break;
+
+       case NOTE:
+         break;
+
+       case INSN:
+         pattern = single_set (insn);
+
+         /* See if there are any memory references we can shorten */
+         if (pattern)
+           {
+             rtx src = SET_SRC (pattern);
+             rtx dest = SET_DEST (pattern);
+             rtx mem;
+
+             if (GET_CODE (dest) == MEM && GET_CODE (src) == MEM)
+               mem = NULL_RTX;
+
+             else if (GET_CODE (dest) == MEM)
+               mem = dest;
+
+             else if (GET_CODE (src) == MEM)
+               mem = src;
+
+             else
+               mem = NULL_RTX;
+
+             if (mem && ep_memory_operand (mem, GET_MODE (mem)))
+               use_ep = TRUE;
+
+             else if (!use_ep && mem
+                      && GET_MODE_SIZE (GET_MODE (mem)) <= UNITS_PER_WORD)
+               {
+                 rtx addr = XEXP (mem, 0);
+                 int regno = -1;
+                 int short_p;
+
+                 if (GET_CODE (addr) == REG)
+                   {
+                     short_p = TRUE;
+                     regno = REGNO (addr);
+                   }
+
+                 else if (GET_CODE (addr) == PLUS
+                          && GET_CODE (XEXP (addr, 0)) == REG
+                          && GET_CODE (XEXP (addr, 1)) == CONST_INT
+                          && ((unsigned)INTVAL (XEXP (addr, 1))) < 256
+                          && (GET_MODE (mem) != QImode
+                              || ((unsigned)INTVAL (XEXP (addr, 1))) < 128))
+                   {
+                     short_p = TRUE;
+                     regno = REGNO (XEXP (addr, 0));
+                   }
+
+                 else
+                   short_p = FALSE;
+
+                 if (short_p)
+                   {
+                     regs[regno].uses++;
+                     regs[regno].last_insn = insn;
+                     if (!regs[regno].first_insn)
+                       regs[regno].first_insn = insn;
+                   }
+               }
+
+             /* Loading up a register in the basic block zaps any savings
+                for the register */
+             if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG)
+               {
+                 enum machine_mode mode = GET_MODE (dest);
+                 int word = 0;
+                 int regno;
+                 int endregno;
+
+                 while (GET_CODE (dest) == SUBREG)
+                   {
+                     word = SUBREG_WORD (dest);
+                     dest = SUBREG_REG (dest);
+                   }
+
+                 regno = REGNO (dest) + word;
+                 endregno = regno + HARD_REGNO_NREGS (regno, mode);
+
+                 if (!use_ep)
+                   {
+                     /* See if we can use the pointer before this
+                        modification.  */
+                     int max_uses = -1;
+                     int max_regno = -1;
+
+                     for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+                       {
+                         if (max_uses < regs[i].uses)
+                           {
+                             max_uses = regs[i].uses;
+                             max_regno = i;
+                           }
+                       }
+
+                     if (max_uses > 3
+                         && max_regno >= regno
+                         && max_regno < endregno)
+                       {
+                         substitute_ep_register (regs[max_regno].first_insn,
+                                                 regs[max_regno].last_insn,
+                                                 max_uses, max_regno, &r1, &ep);
+
+                         /* Since we made a substitution, zap all remembered
+                            registers.  */
+                         for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+                           {
+                             regs[i].uses = 0;
+                             regs[i].first_insn = NULL_RTX;
+                             regs[i].last_insn = NULL_RTX;
+                           }
+                       }
+                   }
+
+                 for (i = regno; i < endregno; i++)
+                   {
+                     regs[i].uses = 0;
+                     regs[i].first_insn = NULL_RTX;
+                     regs[i].last_insn = NULL_RTX;
+                   }
+               }
+           }
+       }
+    }
+}
+
+\f
+/* # of registers saved by the interrupt handler.  */
+#define INTERRUPT_FIXED_NUM 4
+
+/* # of bytes for registers saved by the interrupt handler.  */
+#define INTERRUPT_FIXED_SAVE_SIZE (4 * INTERRUPT_FIXED_NUM)
+
+/* # of registers saved in register parameter area.  */
+#define INTERRUPT_REGPARM_NUM 4
+/* # of words saved for other registers.  */
+#define INTERRUPT_ALL_SAVE_NUM \
+  (30 - INTERRUPT_FIXED_NUM + INTERRUPT_REGPARM_NUM)
+
+#define INTERRUPT_ALL_SAVE_SIZE (4 * INTERRUPT_ALL_SAVE_NUM)
+
+int
+compute_register_save_size (p_reg_saved)
+     long *p_reg_saved;
+{
+  int size = 0;
+  int i;
+  int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+  int call_p = regs_ever_live[31];
+  long reg_saved = 0;
+
+  /* Count the return pointer if we need to save it.  */
+  if (profile_flag && !call_p)
+    regs_ever_live[31] = call_p = 1;
+  /* Count space for the register saves.  */
+  if (interrupt_handler)
+    {
+      for (i = 0; i <= 31; i++)
+       switch (i)
+         {
+         default:
+           if (regs_ever_live[i] || call_p)
+             {
+               size += 4;
+               reg_saved |= 1L << i;
+             }
+           break;
+
+           /* We don't save/restore r0 or the stack pointer */
+         case 0:
+         case STACK_POINTER_REGNUM:
+           break;
+
+           /* For registers with fixed use, we save them, set them to the
+              appropriate value, and then restore them.
+              These registers are handled specially, so don't list them
+              on the list of registers to save in the prologue.  */
+         case 1:               /* temp used to hold ep */
+         case 5:               /* gp */
+         case 10:              /* temp used to call interrupt save/restore */
+         case EP_REGNUM:       /* ep */
+           size += 4;
+           break;
+         }
+    }
+
+  else
+    for (i = 0; i <= 31; i++)
+      if (regs_ever_live[i] && ((! call_used_regs[i]) || i == 31))
+       {
+         size += 4;
+         reg_saved |= 1L << i;
+       }
+
+  if (p_reg_saved)
+    *p_reg_saved = reg_saved;
+
+  return size;
+}
+
+int
+compute_frame_size (size, p_reg_saved)
+     int size;
+     long *p_reg_saved;
+{
+  extern int current_function_outgoing_args_size;
+
+  return (size
+         + compute_register_save_size (p_reg_saved)
+         + current_function_outgoing_args_size);
+}
+
+\f
+void
+expand_prologue ()
+{
+  unsigned int i;
+  int offset;
+  unsigned int size = get_frame_size ();
+  unsigned int actual_fsize;
+  unsigned int init_stack_alloc = 0;
+  rtx save_regs[32];
+  rtx save_all;
+  int num_save;
+  int default_stack;
+  int code;
+  int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+  long reg_saved = 0;
+
+  actual_fsize = compute_frame_size (size, &reg_saved);
+
+  /* Save/setup global registers for interrupt functions right now */
+  if (interrupt_handler)
+    {
+      emit_insn (gen_save_interrupt ());
+      actual_fsize -= INTERRUPT_FIXED_SAVE_SIZE;
+      if (((1L << 31) & reg_saved) != 0)
+       actual_fsize -= INTERRUPT_ALL_SAVE_SIZE;
+    }
+
+  /* Save arg registers to the stack if necessary.  */
+  else if (current_function_anonymous_args)
+    {
+      if (TARGET_PROLOG_FUNCTION)
+       emit_insn (gen_save_r6_r9 ());
+      else
+       {
+         offset = 0;
+         for (i = 6; i < 10; i++)
+           {
+             emit_move_insn (gen_rtx (MEM, SImode,
+                                      plus_constant (stack_pointer_rtx,
+                                                     offset)),
+                             gen_rtx (REG, SImode, i));
+             offset += 4;
+           }
+       }
+    }
+
+  /* Identify all of the saved registers */
+  num_save = 0;
+  default_stack = 0;
+  for (i = 1; i < 31; i++)
+    {
+      if (((1L << i) & reg_saved) != 0)
+       save_regs[num_save++] = gen_rtx (REG, Pmode, i);
+    }
+
+  /* If the return pointer is saved, the helper functions also allocate
+     16 bytes of stack for arguments to be saved in.  */
+  if (((1L << 31) & reg_saved) != 0)
+    {
+      save_regs[num_save++] = gen_rtx (REG, Pmode, 31);
+      default_stack = 16;
+    }
+
+  /* See if we have an insn that allocates stack space and saves the particular
+     registers we want to.  */
+  save_all = NULL_RTX;
+  if (TARGET_PROLOG_FUNCTION && num_save > 0 && actual_fsize >= default_stack)
+    {
+      int alloc_stack = (4 * num_save) + default_stack;
+      int unalloc_stack = actual_fsize - alloc_stack;
+      int save_func_len = 4;
+      int save_normal_len;
+
+      if (unalloc_stack)
+       save_func_len += CONST_OK_FOR_J (unalloc_stack) ? 2 : 4;
+
+      /* see if we would have used ep to save the stack */
+      if (TARGET_EP && num_save > 3 && (unsigned)actual_fsize < 255)
+       save_normal_len = (3 * 2) + (2 * num_save);
+      else
+       save_normal_len = 4 * num_save;
+
+      save_normal_len += CONST_OK_FOR_J (actual_fsize) ? 2 : 4;
+
+      /* Don't bother checking if we don't actually save any space.
+        This happens for instance if one register is saved and additional
+        stack space is allocated.  */
+      if (save_func_len < save_normal_len)
+       {
+         save_all = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc (num_save + 2));
+         XVECEXP (save_all, 0, 0) = gen_rtx (SET, VOIDmode,
+                                             stack_pointer_rtx,
+                                             gen_rtx (PLUS, Pmode,
+                                                      stack_pointer_rtx,
+                                                      GEN_INT (-alloc_stack)));
+
+         XVECEXP (save_all, 0, num_save+1)
+           = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, Pmode, 10));
+
+         offset = - default_stack;
+         for (i = 0; i < num_save; i++)
+           {
+             XVECEXP (save_all, 0, i+1)
+               = gen_rtx (SET, VOIDmode,
+                          gen_rtx (MEM, Pmode,
+                                   plus_constant (stack_pointer_rtx, offset)),
+                                   save_regs[i]);
+             offset -= 4;
+           }
+
+         code = recog (save_all, NULL_RTX, NULL_PTR);
+         if (code >= 0)
+           {
+             rtx insn = emit_insn (save_all);
+             INSN_CODE (insn) = code;
+             actual_fsize -= alloc_stack;
+
+             if (TARGET_DEBUG)
+               fprintf (stderr, "Saved %d bytes via prologue function (%d vs. %d) for function %s\n",
+                        save_normal_len - save_func_len,
+                        save_normal_len, save_func_len,
+                        IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+           }
+         else
+           save_all = NULL_RTX;
+       }
+    }
+
+  /* If no prolog save function is available, store the registers the old fashioned
+     way (one by one). */
+  if (!save_all)
+    {
+      /* Special case interrupt functions that save all registers for a call.  */
+      if (interrupt_handler && ((1L << 31) & reg_saved) != 0)
+       emit_insn (gen_save_all_interrupt ());
+
+      else
+       {
+         /* If the stack is too big, allocate it in chunks so we can do the
+            register saves.  We use the register save size so we use the ep
+            register.  */
+         if (actual_fsize && !CONST_OK_FOR_K (-actual_fsize))
+           init_stack_alloc = compute_register_save_size (NULL);
+         else
+           init_stack_alloc = actual_fsize;
+
+         /* Save registers at the beginning of the stack frame */
+         offset = init_stack_alloc - 4;
+
+         if (init_stack_alloc)
+           emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                  stack_pointer_rtx,
+                                  GEN_INT (-init_stack_alloc)));
+
+         /* Save the return pointer first.  */
+         if (num_save > 0 && REGNO (save_regs[num_save-1]) == 31)
+           {
+             emit_move_insn (gen_rtx (MEM, SImode,
+                                      plus_constant (stack_pointer_rtx,
+                                                     offset)),
+                             save_regs[--num_save]);
+             offset -= 4;
+           }
+
+         for (i = 0; i < num_save; i++)
+           {
+             emit_move_insn (gen_rtx (MEM, SImode,
+                                      plus_constant (stack_pointer_rtx,
+                                      offset)),
+                             save_regs[i]);
+             offset -= 4;
+           }
+       }
+    }
+
+  /* Allocate the rest of the stack that was not allocated above (either it is
+     > 32K or we just called a function to save the registers and needed more
+     stack.  */
+  if (actual_fsize > init_stack_alloc)
+    {
+      int diff = actual_fsize - init_stack_alloc;
+      if (CONST_OK_FOR_K (diff))
+       emit_insn (gen_addsi3 (stack_pointer_rtx,
+                              stack_pointer_rtx,
+                              GEN_INT (-diff)));
+      else
+       {
+         rtx reg = gen_rtx (REG, Pmode, 12);
+         emit_move_insn (reg, GEN_INT (-diff));
+         emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, reg));
+       }
+    }
+
+  /* If we need a frame pointer, set it up now.  */
+  if (frame_pointer_needed)
+    emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+}
+\f
+
+void
+expand_epilogue ()
+{
+  unsigned int i;
+  int offset;
+  unsigned int size = get_frame_size ();
+  long reg_saved = 0;
+  unsigned int actual_fsize = compute_frame_size (size, &reg_saved);
+  unsigned int init_stack_free = 0;
+  rtx restore_regs[32];
+  rtx restore_all;
+  int num_restore;
+  int default_stack;
+  int code;
+  int interrupt_handler = v850_interrupt_function_p (current_function_decl);
+
+  /* Eliminate the initial stack stored by interrupt functions.  */
+  if (interrupt_handler)
+    {
+      actual_fsize -= INTERRUPT_FIXED_SAVE_SIZE;
+      if (((1L << 31) & reg_saved) != 0)
+       actual_fsize -= INTERRUPT_ALL_SAVE_SIZE;
+    }
+
+  /* Cut off any dynamic stack created.  */
+  if (frame_pointer_needed)
+    emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx);
+
+  /* Identify all of the saved registers */
+  num_restore = 0;
+  default_stack = 0;
+  for (i = 1; i < 31; i++)
+    {
+      if (((1L << i) & reg_saved) != 0)
+       restore_regs[num_restore++] = gen_rtx (REG, Pmode, i);
+    }
+
+  /* If the return pointer is saved, the helper functions also allocate
+     16 bytes of stack for arguments to be saved in.  */
+  if (((1L << 31) & reg_saved) != 0)
+    {
+      restore_regs[num_restore++] = gen_rtx (REG, Pmode, 31);
+      default_stack = 16;
+    }
+
+  /* See if we have an insn that restores the particular registers we
+     want to.  */
+  restore_all = NULL_RTX;
+  if (TARGET_PROLOG_FUNCTION && num_restore > 0 && actual_fsize >= default_stack
+      && !interrupt_handler)
+    {
+      int alloc_stack = (4 * num_restore) + default_stack;
+      int unalloc_stack = actual_fsize - alloc_stack;
+      int restore_func_len = 4;
+      int restore_normal_len;
+
+      if (unalloc_stack)
+       restore_func_len += CONST_OK_FOR_J (unalloc_stack) ? 2 : 4;
+
+      /* see if we would have used ep to restore the registers */
+      if (TARGET_EP && num_restore > 3 && (unsigned)actual_fsize < 255)
+       restore_normal_len = (3 * 2) + (2 * num_restore);
+      else
+       restore_normal_len = 4 * num_restore;
+
+      restore_normal_len += (CONST_OK_FOR_J (actual_fsize) ? 2 : 4) + 2;
+
+      /* Don't bother checking if we don't actually save any space.  */
+      if (restore_func_len < restore_normal_len)
+       {
+         restore_all = gen_rtx (PARALLEL, VOIDmode,
+                                rtvec_alloc (num_restore + 2));
+         XVECEXP (restore_all, 0, 0) = gen_rtx (RETURN, VOIDmode);
+         XVECEXP (restore_all, 0, 1)
+           = gen_rtx (SET, VOIDmode, stack_pointer_rtx,
+                      gen_rtx (PLUS, Pmode,
+                               stack_pointer_rtx,
+                               GEN_INT (alloc_stack)));
+
+         offset = alloc_stack - 4;
+         for (i = 0; i < num_restore; i++)
+           {
+             XVECEXP (restore_all, 0, i+2)
+               = gen_rtx (SET, VOIDmode,
+                          restore_regs[i],
+                          gen_rtx (MEM, Pmode,
+                                   plus_constant (stack_pointer_rtx, offset)));
+             offset -= 4;
+           }
+
+         code = recog (restore_all, NULL_RTX, NULL_PTR);
+         if (code >= 0)
+           {
+             rtx insn;
+
+             actual_fsize -= alloc_stack;
+             if (actual_fsize)
+               {
+                 if (CONST_OK_FOR_K (actual_fsize))
+                   emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                          stack_pointer_rtx,
+                                          GEN_INT (actual_fsize)));
+                 else
+                   {
+                     rtx reg = gen_rtx (REG, Pmode, 12);
+                     emit_move_insn (reg, GEN_INT (actual_fsize));
+                     emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                            stack_pointer_rtx,
+                                            reg));
+                   }
+               }
+
+             insn = emit_jump_insn (restore_all);
+             INSN_CODE (insn) = code;
+
+             if (TARGET_DEBUG)
+               fprintf (stderr, "Saved %d bytes via epilogue function (%d vs. %d) in function %s\n",
+                        restore_normal_len - restore_func_len,
+                        restore_normal_len, restore_func_len,
+                        IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+           }
+         else
+           restore_all = NULL_RTX;
+       }
+    }
+
+  /* If no epilog save function is available, restore the registers the
+     old fashioned way (one by one). */
+  if (!restore_all)
+    {
+      /* If the stack is large, we need to cut it down in 2 pieces.  */
+      if (actual_fsize && !CONST_OK_FOR_K (-actual_fsize))
+       init_stack_free = 4 * num_restore;
+      else
+       init_stack_free = actual_fsize;
+
+      /* Deallocate the rest of the stack if it is > 32K or if extra stack
+        was allocated for an interrupt handler that makes a call.  */
+      if (actual_fsize > init_stack_free || (interrupt_handler && actual_fsize))
+       {
+         int diff = actual_fsize - ((interrupt_handler) ? 0 : init_stack_free);
+         if (CONST_OK_FOR_K (diff))
+           emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                  stack_pointer_rtx,
+                                  GEN_INT (diff)));
+         else
+           {
+             rtx reg = gen_rtx (REG, Pmode, 12);
+             emit_move_insn (reg, GEN_INT (diff));
+             emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                    stack_pointer_rtx,
+                                    reg));
+           }
+       }
+
+      /* Special case interrupt functions that save all registers
+        for a call.  */
+      if (interrupt_handler && ((1L << 31) & reg_saved) != 0)
+       emit_insn (gen_restore_all_interrupt ());
+      else
+       {
+         /* Restore registers from the beginning of the stack frame */
+         offset = init_stack_free - 4;
+
+         /* Restore the return pointer first.  */
+         if (num_restore > 0 && REGNO (restore_regs[num_restore-1]) == 31)
+           {
+             emit_move_insn (restore_regs[--num_restore],
+                             gen_rtx (MEM, SImode,
+                                      plus_constant (stack_pointer_rtx,
+                                                     offset)));
+             offset -= 4;
+           }
+
+         for (i = 0; i < num_restore; i++)
+           {
+             emit_move_insn (restore_regs[i],
+                             gen_rtx (MEM, SImode,
+                                      plus_constant (stack_pointer_rtx,
+                                                     offset)));
+
+             offset -= 4;
+           }
+
+         /* Cut back the remainder of the stack.  */
+         if (init_stack_free)
+           emit_insn (gen_addsi3 (stack_pointer_rtx,
+                                  stack_pointer_rtx,
+                                  GEN_INT (init_stack_free)));
+       }
+
+      /* And return or use reti for interrupt handlers.  */
+      if (interrupt_handler)
+       emit_jump_insn (gen_restore_interrupt ());
+      else if (actual_fsize)
+       emit_jump_insn (gen_return_internal ());
+      else
+       emit_jump_insn (gen_return ());
+    }
+
+  current_function_anonymous_args = 0;
+  v850_interrupt_cache_p = FALSE;
+  v850_interrupt_p = FALSE;
+}
+
+\f
+/* Update the condition code from the insn.  */
+
+void
+notice_update_cc (body, insn)
+     rtx body;
+     rtx insn;
+{
+  switch (get_attr_cc (insn))
+    {
+    case CC_NONE:
+      /* Insn does not affect CC at all.  */
+      break;
+
+    case CC_NONE_0HIT:
+      /* Insn does not change CC, but the 0'th operand has been changed.  */
+      if (cc_status.value1 != 0
+         && reg_overlap_mentioned_p (recog_operand[0], cc_status.value1))
+       cc_status.value1 = 0;
+      break;
+
+    case CC_SET_ZN:
+      /* Insn sets the Z,N flags of CC to recog_operand[0].
+        V,C is in an unusable state.  */
+      CC_STATUS_INIT;
+      cc_status.flags |= CC_OVERFLOW_UNUSABLE | CC_NO_CARRY;
+      cc_status.value1 = recog_operand[0];
+      break;
+
+    case CC_SET_ZNV:
+      /* Insn sets the Z,N,V flags of CC to recog_operand[0].
+        C is in an unusable state.  */
+      CC_STATUS_INIT;
+      cc_status.flags |= CC_NO_CARRY;
+      cc_status.value1 = recog_operand[0];
+      break;
+
+    case CC_COMPARE:
+      /* The insn is a compare instruction.  */
+      CC_STATUS_INIT;
+      cc_status.value1 = SET_SRC (body);
+      break;
+
+    case CC_CLOBBER:
+      /* Insn doesn't leave CC in a usable state.  */
+      CC_STATUS_INIT;
+      break;
+    }
+}
+
+\f
+/* Return nonzero if ATTR is a valid attribute for DECL.
+   ATTRIBUTES are any existing attributes and ARGS are the arguments
+   supplied with ATTR.
+
+   Supported attributes:
+
+   interrupt_handler or interrupt: output a prologue and epilogue suitable
+   for an interrupt handler.  */
+
+int
+v850_valid_machine_decl_attribute (decl, attributes, attr, args)
+     tree decl;
+     tree attributes;
+     tree attr;
+     tree args;
+{
+  if (args != NULL_TREE)
+    return 0;
+
+  if (is_attribute_p ("interrupt_handler", attr)
+      || is_attribute_p ("interrupt", attr))
+    return TREE_CODE (decl) == FUNCTION_DECL;
+
+  return 0;
+}
+
+\f
+/* Return nonzero if FUNC is an interrupt function as specified
+   by the "interrupt" attribute.  */
+
+int
+v850_interrupt_function_p (func)
+     tree func;
+{
+  tree a;
+  int ret = 0;
+
+  if (v850_interrupt_cache_p)
+    return v850_interrupt_p;
+
+  if (TREE_CODE (func) != FUNCTION_DECL)
+    return 0;
+
+  a = lookup_attribute ("interrupt_handler", DECL_MACHINE_ATTRIBUTES (func));
+  if (a != NULL_TREE)
+    ret = 1;
+
+  else
+    {
+      a = lookup_attribute ("interrupt", DECL_MACHINE_ATTRIBUTES (func));
+      ret = a != NULL_TREE;
+    }
+
+  /* Its not safe to trust global variables until after function inlining has
+     been done.  */
+  if (reload_completed | reload_in_progress)
+    v850_interrupt_p = ret;
+
+  return ret;
+}
+
+\f
+extern struct obstack *saveable_obstack;
+
+v850_encode_data_area (decl)
+     tree decl;
+{
+  char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0);
+  int len = strlen (str);
+  char *newstr;
+
+  /* In the Cygnus sources we actually do something; this is just
+     here to make merges easier.  */
+  return;
+}
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
new file mode 100644 (file)
index 0000000..2a05aef
--- /dev/null
@@ -0,0 +1,1406 @@
+/* CYGNUS LOCAL entire file/law */
+/* Definitions of target machine for GNU compiler. 
+   NEC V850 series
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Contributed by Jeff Law (law@cygnus.com).
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "svr4.h"
+
+#undef ASM_SPEC
+#undef ASM_FINAL_SPEC
+#undef LIB_SPEC
+#undef ENDFILE_SPEC
+#undef LINK_SPEC
+#undef STARTFILE_SPEC
+
+/* Names to predefine in the preprocessor for this target machine.  */
+
+#define CPP_PREDEFINES "-D__v850__ -D__v851__ -D__v850"
+
+
+/* Run-time compilation parameters selecting different hardware subsets.  */
+
+extern int target_flags;
+
+/* Target flags bits, see below for an explanation of the bits.  */
+#define MASK_GHS               0x00000001
+#define MASK_LONG_CALLS                0x00000002
+#define MASK_EP                        0x00000004
+#define MASK_PROLOG_FUNCTION   0x00000008
+#define MASK_DEBUG             0x40000000
+
+/* Macros used in the machine description to test the flags.  */
+
+/* The GHS calling convention support doesn't really work,
+   mostly due to a lack of documentation.  Outstanding issues:
+
+     * How do varargs & stdarg really work.  How to they handle
+     passing structures (if at all).
+
+     * Doubles are normally 4 byte aligned, except in argument
+     lists where they are 8 byte aligned.  Is the alignment
+     in the argument list based on the first parameter,
+     first stack parameter, etc etc.
+
+     * Passing/returning of large structures probably isn't the same
+     as GHS.  We don't have enough documentation on their conventions
+     to be compatable.
+
+     * Tests of SETUP_INCOMING_VARARGS need to be made runtime checks
+     since it depends on TARGET_GHS.  */
+#define TARGET_GHS (target_flags & MASK_GHS)
+/* Don't do PC-relative calls, instead load the address of the target
+   function into a register and perform a register indirect call.  */
+#define TARGET_LONG_CALLS (target_flags & MASK_LONG_CALLS)
+
+/* Whether to optimize space by using ep (r30) for pointers with small offsets
+   in basic blocks.  */
+#define TARGET_EP (target_flags & MASK_EP)
+
+/* Whether to call out-of-line functions to save registers or not.  */
+#define TARGET_PROLOG_FUNCTION (target_flags & MASK_PROLOG_FUNCTION)
+
+/* General debug flag */
+#define TARGET_DEBUG (target_flags & MASK_DEBUG)
+
+/* Macro to define tables used to set the flags.
+   This is a list in braces of pairs in braces,
+   each pair being { "NAME", VALUE }
+   where VALUE is the bits to set or minus the bits to clear.
+   An empty string NAME is used to identify the default VALUE.  */
+
+#define TARGET_SWITCHES                                                        \
+  {{ "ghs",                     MASK_GHS },                            \
+   { "no-ghs",                 -MASK_GHS },                            \
+   { "long-calls",              MASK_LONG_CALLS },                     \
+   { "no-long-calls",          -MASK_LONG_CALLS },                     \
+   { "ep",                      MASK_EP },                             \
+   { "no-ep",                  -MASK_EP },                             \
+   { "prolog-function",                 MASK_PROLOG_FUNCTION },                \
+   { "no-prolog-function",     -MASK_PROLOG_FUNCTION },                \
+   { "space",                   MASK_EP | MASK_PROLOG_FUNCTION },      \
+   { "debug",                   MASK_DEBUG },                          \
+   { "",                        TARGET_DEFAULT}}
+
+#ifndef TARGET_DEFAULT
+#define TARGET_DEFAULT 0
+#endif
+
+/* Information about the various small memory areas.  */
+struct small_memory_info {
+  char *name;
+  char *value;
+  long max;
+  long physical_max;
+};
+
+enum small_memory_type {
+  /* tiny data area, using EP as base register */
+  SMALL_MEMORY_TDA = 0,
+  /* small data area using dp as base register */
+  SMALL_MEMORY_SDA,
+  /* zero data area using r0 as base register */
+  SMALL_MEMORY_ZDA,
+  SMALL_MEMORY_max
+};
+
+extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
+
+/* This macro is similar to `TARGET_SWITCHES' but defines names of
+   command options that have values.  Its definition is an
+   initializer with a subgrouping for each command option.
+
+   Each subgrouping contains a string constant, that defines the
+   fixed part of the option name, and the address of a variable.  The
+   variable, type `char *', is set to the variable part of the given
+   option if the fixed part matches.  The actual option name is made
+   by appending `-m' to the specified name.
+
+   Here is an example which defines `-mshort-data-NUMBER'.  If the
+   given option is `-mshort-data-512', the variable `m88k_short_data'
+   will be set to the string `"512"'.
+
+          extern char *m88k_short_data;
+          #define TARGET_OPTIONS \
+           { { "short-data-", &m88k_short_data } } */
+
+#define TARGET_OPTIONS                                                 \
+{                                                                      \
+  { "tda=",    &small_memory[ (int)SMALL_MEMORY_TDA ].value },         \
+  { "tda-",    &small_memory[ (int)SMALL_MEMORY_TDA ].value },         \
+  { "sda=",    &small_memory[ (int)SMALL_MEMORY_SDA ].value },         \
+  { "sda-",    &small_memory[ (int)SMALL_MEMORY_SDA ].value },         \
+  { "zda=",    &small_memory[ (int)SMALL_MEMORY_ZDA ].value },         \
+  { "zda-",    &small_memory[ (int)SMALL_MEMORY_ZDA ].value },         \
+}
+
+/* Print subsidiary information on the compiler version in use.  */
+
+#define TARGET_VERSION fprintf (stderr, " (NEC V850)");
+
+/* Sometimes certain combinations of command options do not make
+   sense on a particular target machine.  You can define a macro
+   `OVERRIDE_OPTIONS' to take account of this.  This macro, if
+   defined, is executed once just after all the command options have
+   been parsed.
+
+   Don't use this macro to turn on various extra optimizations for
+   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.  */
+#define OVERRIDE_OPTIONS override_options ()
+
+
+/* Show we can debug even without a frame pointer.  */
+#define CAN_DEBUG_WITHOUT_FP
+
+/* Some machines may desire to change what optimizations are
+   performed for various optimization levels.   This macro, if
+   defined, is executed once just after the optimization level is
+   determined and before the remainder of the command options have
+   been parsed.  Values set in this macro are used as the default
+   values for the other command line options.
+
+   LEVEL is the optimization level specified; 2 if `-O2' is
+   specified, 1 if `-O' is specified, and 0 if neither is specified.
+
+   You should not use this macro to change options that are not
+   machine-specific.  These should uniformly selected by the same
+   optimization level on all supported machines.  Use this macro to
+   enable machine-specific optimizations.
+
+   *Do not examine `write_symbols' in this macro!* The debugging
+   options are not supposed to alter the generated code. */
+
+#define OPTIMIZATION_OPTIONS(LEVEL)                                    \
+{                                                                      \
+  if (LEVEL)                                                           \
+    target_flags |= (MASK_EP | MASK_PROLOG_FUNCTION);                  \
+}
+
+\f
+/* Target machine storage layout */
+
+/* Define this if most significant bit is lowest numbered
+   in instructions that operate on numbered bit-fields.
+   This is not true on the NEC V850.  */
+#define BITS_BIG_ENDIAN 0
+
+/* Define this if most significant byte of a word is the lowest numbered.  */
+/* This is not true on the NEC V850.  */
+#define BYTES_BIG_ENDIAN 0
+
+/* Define this if most significant word of a multiword number is lowest
+   numbered.
+   This is not true on the NEC V850.  */
+#define WORDS_BIG_ENDIAN 0
+
+/* Number of bits in an addressable storage unit */
+#define BITS_PER_UNIT 8
+
+/* Width in bits of a "word", which is the contents of a machine register.
+   Note that this is not necessarily the width of data type `int';
+   if using 16-bit ints on a 68000, this would still be 32.
+   But on a machine with 16-bit registers, this would be 16.  */
+#define BITS_PER_WORD          32
+
+/* Width of a word, in units (bytes).  */
+#define UNITS_PER_WORD         4
+
+/* Width in bits of a pointer.
+   See also the macro `Pmode' defined below.  */
+#define POINTER_SIZE           32
+
+/* Define this macro if it is advisable to hold scalars in registers
+   in a wider mode than that declared by the program.  In such cases,
+   the value is constrained to be within the bounds of the declared
+   type, but kept valid in the wider mode.  The signedness of the
+   extension may differ from that of the type.
+
+   Some simple experiments have shown that leaving UNSIGNEDP alone
+   generates the best overall code.  */
+
+#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)  \
+  if (GET_MODE_CLASS (MODE) == MODE_INT \
+      && GET_MODE_SIZE (MODE) < 4)      \
+    { (MODE) = SImode; }
+
+/* Allocation boundary (in *bits*) for storing arguments in argument list.  */
+#define PARM_BOUNDARY          32
+
+/* The stack goes in 32 bit lumps.  */
+#define STACK_BOUNDARY                 32
+
+/* Allocation boundary (in *bits*) for the code of a function.
+   16 is the minimum boundary; 32 would give better performance.  */
+#define FUNCTION_BOUNDARY 16
+
+/* No data type wants to be aligned rounder than this.  */
+#define BIGGEST_ALIGNMENT      32
+
+/* Alignment of field after `int : 0' in a structure.  */
+#define EMPTY_FIELD_BOUNDARY 32
+
+/* No structure field wants to be aligned rounder than this.  */
+#define BIGGEST_FIELD_ALIGNMENT 32
+
+/* Define this if move instructions will actually fail to work
+   when given unaligned data.  */
+#define STRICT_ALIGNMENT 1
+
+/* Define this as 1 if `char' should by default be signed; else as 0.
+
+   On the NEC V850, loads do sign extension, so make this default. */
+#define DEFAULT_SIGNED_CHAR 1
+
+/* Define results of standard character escape sequences.  */
+#define TARGET_BELL 007
+#define TARGET_BS 010
+#define TARGET_TAB 011
+#define TARGET_NEWLINE 012
+#define TARGET_VT 013
+#define TARGET_FF 014
+#define TARGET_CR 015
+\f
+/* Standard register usage.  */
+
+/* Number of actual hardware registers.
+   The hardware registers are assigned numbers for the compiler
+   from 0 to just below FIRST_PSEUDO_REGISTER.
+
+   All registers that the compiler knows about must be given numbers,
+   even those that are not normally considered general registers.  */
+
+#define FIRST_PSEUDO_REGISTER 34
+
+/* 1 for registers that have pervasive standard uses
+   and are not available for the register allocator.  */
+
+#define FIXED_REGISTERS \
+  { 1, 1, 0, 1, 1, 0, 0, 0, \
+    0, 0, 0, 0, 0, 0, 0, 0, \
+    0, 0, 0, 0, 0, 0, 0, 0, \
+    0, 0, 0, 0, 0, 0, 1, 0, \
+    1, 1}
+
+/* 1 for registers not available across function calls.
+   These must include the FIXED_REGISTERS and also any
+   registers that can be used without being saved.
+   The latter must include the registers where values are returned
+   and the register where structure-value addresses are passed.
+   Aside from that, you can include as many other registers as you
+   like.  */
+
+#define CALL_USED_REGISTERS \
+  { 1, 1, 0, 1, 1, 1, 1, 1, \
+    1, 1, 1, 1, 1, 1, 1, 1, \
+    1, 1, 1, 1, 0, 0, 0, 0, \
+    0, 0, 0, 0, 0, 0, 1, 1, \
+    1, 1}
+
+/* List the order in which to allocate registers.  Each register must be
+   listed once, even those in FIXED_REGISTERS.
+
+   On the 850, we make the return registers first, then all of the volatile
+   registers, then the saved registers in reverse order to better save the
+   registers with an out of line function , and finnally the fixed
+   registers.  */
+
+#define REG_ALLOC_ORDER                                                        \
+{                                                                      \
+  10, 11,                              /* return registers */          \
+  12, 13, 14, 15, 16, 17, 18, 19,      /* scratch registers */         \
+   6,  7,  8,  9, 31,                  /* argument registers */        \
+  29, 28, 27, 26, 25, 24, 23, 22,      /* saved registers */           \
+  21, 20,  2,                                                          \
+   0,  1,  3,  4,  5, 30, 32, 33       /* fixed registers */           \
+}
+
+/* Return number of consecutive hard regs needed starting at reg REGNO
+   to hold something of mode MODE.
+
+   This is ordinarily the length in words of a value of mode MODE
+   but can be less for certain modes in special long registers.  */
+
+#define HARD_REGNO_NREGS(REGNO, MODE)   \
+  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* Value is 1 if hard register REGNO can hold a value of machine-mode
+   MODE.  */
+
+#define HARD_REGNO_MODE_OK(REGNO, MODE) \
+ ((((REGNO) & 1) == 0) || (GET_MODE_SIZE (MODE) <= 4))
+
+/* Value is 1 if it is a good idea to tie two pseudo registers
+   when one has mode MODE1 and one has mode MODE2.
+   If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
+   for any hard reg, then this must be 0 for correct output.  */
+#define MODES_TIEABLE_P(MODE1, MODE2) \
+  (MODE1 == MODE2 || GET_MODE_SIZE (MODE1) <= 4 && GET_MODE_SIZE (MODE2) <= 4)
+
+\f
+/* Define the classes of registers for register constraints in the
+   machine description.  Also define ranges of constants.
+
+   One of the classes must always be named ALL_REGS and include all hard regs.
+   If there is more than one class, another class must be named NO_REGS
+   and contain no registers.
+
+   The name GENERAL_REGS must be the name of a class (or an alias for
+   another name such as ALL_REGS).  This is the class of registers
+   that is allowed by "g" or "r" in a register constraint.
+   Also, registers outside this class are allocated only when
+   instructions express preferences for them.
+
+   The classes must be numbered in nondecreasing order; that is,
+   a larger-numbered class must never be contained completely
+   in a smaller-numbered class.
+
+   For any two classes, it is very desirable that there be another
+   class that represents their union.  */
+   
+enum reg_class {
+  NO_REGS, GENERAL_REGS, ALL_REGS, LIM_REG_CLASSES
+};
+
+#define N_REG_CLASSES (int) LIM_REG_CLASSES
+
+/* Give names of register classes as strings for dump file.   */
+
+#define REG_CLASS_NAMES \
+{ "NO_REGS", "GENERAL_REGS", "ALL_REGS", "LIM_REGS" }
+
+/* Define which registers fit in which classes.
+   This is an initializer for a vector of HARD_REG_SET
+   of length N_REG_CLASSES.  */
+
+#define REG_CLASS_CONTENTS                     \
+{  0x00000000,         /* No regs      */      \
+   0xffffffff,         /* GENERAL_REGS */      \
+   0xffffffff,         /* ALL_REGS     */      \
+}
+
+/* The same information, inverted:
+   Return the class number of the smallest class containing
+   reg number REGNO.  This could be a conditional expression
+   or could index an array.  */
+
+#define REGNO_REG_CLASS(REGNO)  GENERAL_REGS
+
+/* The class value for index registers, and the one for base regs.  */
+
+#define INDEX_REG_CLASS NO_REGS
+#define BASE_REG_CLASS  GENERAL_REGS
+
+/* Get reg_class from a letter such as appears in the machine description.  */
+
+#define REG_CLASS_FROM_LETTER(C) (NO_REGS)
+
+/* Macros to check register numbers against specific register classes.  */
+
+/* These assume that REGNO is a hard or pseudo reg number.
+   They give nonzero only if REGNO is a hard reg of the suitable class
+   or a pseudo reg currently allocated to a suitable hard reg.
+   Since they use reg_renumber, they are safe only once reg_renumber
+   has been allocated, which happens in local-alloc.c.  */
+#define REGNO_OK_FOR_BASE_P(regno) \
+  ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
+
+#define REGNO_OK_FOR_INDEX_P(regno) 0
+
+/* Given an rtx X being reloaded into a reg required to be
+   in class CLASS, return the class of reg to actually use.
+   In general this is just CLASS; but on some machines
+   in some cases it is preferable to use a more restrictive class.  */
+
+#define PREFERRED_RELOAD_CLASS(X,CLASS)  (CLASS)
+
+/* Return the maximum number of consecutive registers
+   needed to represent mode MODE in a register of class CLASS.  */
+
+#define CLASS_MAX_NREGS(CLASS, MODE)   \
+  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* The letters I, J, K, L, M, N, O, P in a register constraint string
+   can be used to stand for particular ranges of immediate operands.
+   This macro defines what the ranges are.
+   C is the letter, and VALUE is a constant value.
+   Return 1 if VALUE is in the range specified by C.  */
+
+#define INT_7_BITS(VALUE) ((unsigned) (VALUE) + 0x40 < 0x80)
+#define INT_8_BITS(VALUE) ((unsigned) (VALUE) + 0x80 < 0x100)
+#define CONST_OK_FOR_I(VALUE) ((VALUE) == 0)
+#define CONST_OK_FOR_J(VALUE) ((unsigned) (VALUE) + 0x10 < 0x20)
+#define CONST_OK_FOR_K(VALUE) ((unsigned) (VALUE) + 0x8000 < 0x10000)
+#define CONST_OK_FOR_L(VALUE) \
+  (((unsigned) ((int) (VALUE) >> 16) + 0x8000 < 0x10000) \
+   && CONST_OK_FOR_I ((VALUE & 0xffff)))
+#define CONST_OK_FOR_M(VALUE) ((unsigned)(VALUE) < 0x10000)
+
+#define CONST_OK_FOR_N(VALUE) ((unsigned) VALUE >= 0 && (unsigned) VALUE <= 31) /* 5 bit signed immediate in shift instructions */
+#define CONST_OK_FOR_O(VALUE) 0
+#define CONST_OK_FOR_P(VALUE) 0
+
+#define CONST_OK_FOR_LETTER_P(VALUE, C)  \
+  ((C) == 'I' ? CONST_OK_FOR_I (VALUE) : \
+   (C) == 'J' ? CONST_OK_FOR_J (VALUE) : \
+   (C) == 'K' ? CONST_OK_FOR_K (VALUE) : \
+   (C) == 'L' ? CONST_OK_FOR_L (VALUE) : \
+   (C) == 'M' ? CONST_OK_FOR_M (VALUE) : \
+   (C) == 'N' ? CONST_OK_FOR_N (VALUE) : \
+   (C) == 'O' ? CONST_OK_FOR_O (VALUE) : \
+   (C) == 'P' ? CONST_OK_FOR_P (VALUE) : \
+   0)
+
+/* Similar, but for floating constants, and defining letters G and H.
+   Here VALUE is the CONST_DOUBLE rtx itself. 
+     
+  `G' is a zero of some form.  */
+
+#define CONST_DOUBLE_OK_FOR_G(VALUE)                                   \
+  ((GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT                    \
+    && (VALUE) == CONST0_RTX (GET_MODE (VALUE)))                       \
+   || (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_INT                   \
+       && CONST_DOUBLE_LOW (VALUE) == 0                                        \
+       && CONST_DOUBLE_HIGH (VALUE) == 0))
+
+#define CONST_DOUBLE_OK_FOR_H(VALUE) 0
+
+#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)                         \
+  ((C) == 'G'   ? CONST_DOUBLE_OK_FOR_G (VALUE)                                \
+   : (C) == 'H' ? CONST_DOUBLE_OK_FOR_H (VALUE)                                \
+   : 0)
+
+\f
+/* Stack layout; function entry, exit and calling.  */
+
+/* Define this if pushing a word on the stack
+   makes the stack pointer a smaller address.  */
+
+#define STACK_GROWS_DOWNWARD
+
+/* Define this if the nominal address of the stack frame
+   is at the high-address end of the local variables;
+   that is, each additional local variable allocated
+   goes at a more negative offset in the frame.  */
+
+#define FRAME_GROWS_DOWNWARD
+
+/* Offset within stack frame to start allocating local variables at.
+   If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
+   first local allocated.  Otherwise, it is the offset to the BEGINNING
+   of the first local allocated.  */
+
+#define STARTING_FRAME_OFFSET 0
+
+/* Offset of first parameter from the argument pointer register value.  */
+/* Is equal to the size of the saved fp + pc, even if an fp isn't
+   saved since the value is used before we know.  */
+
+#define FIRST_PARM_OFFSET(FNDECL) 0
+
+/* Specify the registers used for certain standard purposes.
+   The values of these macros are register numbers.  */
+
+/* Register to use for pushing function arguments.  */
+#define STACK_POINTER_REGNUM 3
+
+/* Base register for access to local variables of the function.  */
+#define FRAME_POINTER_REGNUM 32
+
+/* On some machines the offset between the frame pointer and starting
+   offset of the automatic variables is not known until after register
+   allocation has been done (for example, because the saved registers
+   are between these two locations).  On those machines, define
+   `FRAME_POINTER_REGNUM' the number of a special, fixed register to
+   be used internally until the offset is known, and define
+   `HARD_FRAME_POINTER_REGNUM' to be actual the hard register number
+   used for the frame pointer.
+
+   You should define this macro only in the very rare circumstances
+   when it is not possible to calculate the offset between the frame
+   pointer and the automatic variables until after register
+   allocation has been completed.  When this macro is defined, you
+   must also indicate in your definition of `ELIMINABLE_REGS' how to
+   eliminate `FRAME_POINTER_REGNUM' into either
+   `HARD_FRAME_POINTER_REGNUM' or `STACK_POINTER_REGNUM'.
+
+   Do not define this macro if it would be the same as
+   `FRAME_POINTER_REGNUM'. */
+#define HARD_FRAME_POINTER_REGNUM 29
+
+/* Base register for access to arguments of the function.  */
+#define ARG_POINTER_REGNUM 33
+
+/* Register in which static-chain is passed to a function.  */
+#define STATIC_CHAIN_REGNUM 5
+
+/* Value should be nonzero if functions must have frame pointers.
+   Zero means the frame pointer need not be set up (and parms
+   may be accessed via the stack pointer) in functions that seem suitable.
+   This is computed in `reload', in reload1.c.  */
+#define FRAME_POINTER_REQUIRED 0
+
+/* If defined, this macro specifies a table of register pairs used to
+   eliminate unneeded registers that point into the stack frame.  If
+   it is not defined, the only elimination attempted by the compiler
+   is to replace references to the frame pointer with references to
+   the stack pointer.
+
+   The definition of this macro is a list of structure
+   initializations, each of which specifies an original and
+   replacement register.
+
+   On some machines, the position of the argument pointer is not
+   known until the compilation is completed.  In such a case, a
+   separate hard register must be used for the argument pointer.
+   This register can be eliminated by replacing it with either the
+   frame pointer or the argument pointer, depending on whether or not
+   the frame pointer has been eliminated.
+
+   In this case, you might specify:
+        #define ELIMINABLE_REGS  \
+        {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
+         {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
+         {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
+
+   Note that the elimination of the argument pointer with the stack
+   pointer is specified first since that is the preferred elimination. */
+
+#define ELIMINABLE_REGS                                                        \
+{{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM },                       \
+ { FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM },                  \
+ { ARG_POINTER_REGNUM,  STACK_POINTER_REGNUM },                        \
+ { ARG_POINTER_REGNUM,   HARD_FRAME_POINTER_REGNUM }}                  \
+
+/* A C expression that returns non-zero if the compiler is allowed to
+   try to replace register number FROM-REG with register number
+   TO-REG.  This macro need only be defined if `ELIMINABLE_REGS' is
+   defined, and will usually be the constant 1, since most of the
+   cases preventing register elimination are things that the compiler
+   already knows about. */
+
+#define CAN_ELIMINATE(FROM, TO) \
+ ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1)
+
+/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'.  It
+   specifies the initial difference between the specified pair of
+   registers.  This macro must be defined if `ELIMINABLE_REGS' is
+   defined. */
+
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET)                   \
+{                                                                      \
+  if ((FROM) == FRAME_POINTER_REGNUM)                                  \
+    (OFFSET) = get_frame_size () + current_function_outgoing_args_size;        \
+  else if ((FROM) == ARG_POINTER_REGNUM)                               \
+   (OFFSET) = compute_frame_size (get_frame_size (), (long *)0);       \
+  else                                                                 \
+    abort ();                                                          \
+}
+
+/* A guess for the V850.  */
+#define PROMOTE_PROTOTYPES 1
+
+/* Keep the stack pointer constant throughout the function.  */
+#define ACCUMULATE_OUTGOING_ARGS
+
+/* Value is the number of bytes of arguments automatically
+   popped when returning from a subroutine call.
+   FUNDECL is the declaration node of the function (as a tree),
+   FUNTYPE is the data type of the function (as a tree),
+   or for a library call it is an identifier node for the subroutine name.
+   SIZE is the number of bytes of arguments passed on the stack.  */
+
+#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
+
+\f
+/* Define a data type for recording info about an argument list
+   during the scan of that argument list.  This data type should
+   hold all necessary information about the function itself
+   and about the args processed so far, enough to enable macros
+   such as FUNCTION_ARG to determine where the next arg should go.  */
+
+#define CUMULATIVE_ARGS struct cum_arg
+struct cum_arg { int nbytes; };
+
+/* Define where to put the arguments to a function.
+   Value is zero to push the argument on the stack,
+   or a hard register in which to store the argument.
+
+   MODE is the argument's machine mode.
+   TYPE is the data type of the argument (as a tree).
+    This is null for libcalls where that information may
+    not be available.
+   CUM is a variable of type CUMULATIVE_ARGS which gives info about
+    the preceding args and about the function being called.
+   NAMED is nonzero if this argument is a named parameter
+    (otherwise it is an extra parameter matching an ellipsis).  */
+
+struct rtx_def *function_arg();
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+  function_arg (&CUM, MODE, TYPE, NAMED)
+
+#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
+  function_arg_partial_nregs (&CUM, MODE, TYPE, NAMED)
+
+/* Initialize a variable CUM of type CUMULATIVE_ARGS
+   for a call to a function whose data type is FNTYPE.
+   For a library call, FNTYPE is 0.  */
+
+#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME,INDIRECT)      \
+ ((CUM).nbytes = 0)
+
+/* Update the data in CUM to advance over an argument
+   of mode MODE and data type TYPE.
+   (TYPE is null for libcalls where that information may not be available.)  */
+
+#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)   \
+ ((CUM).nbytes += ((MODE) != BLKmode                   \
+  ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD      \
+  : (int_size_in_bytes (TYPE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD))
+
+/* When a parameter is passed in a register, stack space is still
+   allocated for it.  */
+#define REG_PARM_STACK_SPACE(DECL) (!TARGET_GHS ? 16 : 0)
+
+/* Define this if the above stack space is to be considered part of the
+   space allocated by the caller.  */
+#define OUTGOING_REG_PARM_STACK_SPACE
+
+extern int current_function_anonymous_args;
+/* Do any setup necessary for varargs/stdargs functions.  */
+#define SETUP_INCOMING_VARARGS(CUM, MODE, TYPE, PAS, SECOND) \
+  current_function_anonymous_args = (!TARGET_GHS ? 1 : 0);
+
+#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED)         \
+  ((TYPE) && int_size_in_bytes (TYPE) > 8)
+#define FUNCTION_ARG_CALLEE_COPIES(CUM, MODE, TYPE, NAMED) \
+  ((TYPE) && int_size_in_bytes (TYPE) > 8)
+
+/* 1 if N is a possible register number for function argument passing.  */
+
+#define FUNCTION_ARG_REGNO_P(N) (N >= 6 && N <= 9)
+
+/* Define how to find the value returned by a function.
+   VALTYPE is the data type of the value (as a tree).
+   If the precise function being called is known, FUNC is its FUNCTION_DECL;
+   otherwise, FUNC is 0.   */
+   
+#define FUNCTION_VALUE(VALTYPE, FUNC) \
+  gen_rtx (REG, TYPE_MODE (VALTYPE), 10)
+
+/* Define how to find the value returned by a library function
+   assuming the value has mode MODE.  */
+
+#define LIBCALL_VALUE(MODE) \
+  gen_rtx (REG, MODE, 10)
+
+/* 1 if N is a possible register number for a function value.  */
+
+#define FUNCTION_VALUE_REGNO_P(N) ((N) == 10)
+
+/* Return values > 8 bytes in length in memory.  */
+#define DEFAULT_PCC_STRUCT_RETURN 0
+#define RETURN_IN_MEMORY(TYPE)  \
+  (int_size_in_bytes (TYPE) > 8 || TYPE_MODE (TYPE) == BLKmode)
+
+/* Register in which address to store a structure value
+   is passed to a function.  On the V850 it's passed as
+   the first parameter.  */
+
+#define STRUCT_VALUE 0
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+   the stack pointer does not matter.  The value is tested only in
+   functions that have frame pointers.
+   No definition is equivalent to always zero.  */
+
+#define EXIT_IGNORE_STACK 1
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+
+#define FUNCTION_PROFILER(FILE, LABELNO) ;
+
+#define TRAMPOLINE_TEMPLATE(FILE)                      \
+  do {                                                 \
+    fprintf (FILE, "\tjarl .+4,r12\n");                        \
+    fprintf (FILE, "\tld.w 12[r12],r5\n");             \
+    fprintf (FILE, "\tld.w 16[r12],r12\n");            \
+    fprintf (FILE, "\tjmp [r12]\n");                   \
+    fprintf (FILE, "\tnop\n");                         \
+    fprintf (FILE, "\t.long 0\n");                     \
+    fprintf (FILE, "\t.long 0\n");                     \
+  } while (0)
+
+/* Length in units of the trampoline for entering a nested function.  */
+
+#define TRAMPOLINE_SIZE 24
+
+/* Emit RTL insns to initialize the variable parts of a trampoline.
+   FNADDR is an RTX for the address of the function's pure code.
+   CXT is an RTX for the static chain value for the function.  */
+
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
+{                                                                      \
+  emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 16)),  \
+                (CXT));                                                \
+  emit_move_insn (gen_rtx (MEM, SImode, plus_constant ((TRAMP), 20)),  \
+                (FNADDR));                                             \
+}
+
+/* Addressing modes, and classification of registers for them.  */
+
+\f
+/* 1 if X is an rtx for a constant that is a valid address.  */
+
+#define CONSTANT_ADDRESS_P(X)   \
+  (GET_CODE (X) == CONST_INT                           \
+   && CONST_OK_FOR_K (INTVAL (X)))
+
+/* Maximum number of registers that can appear in a valid memory address.  */
+
+#define MAX_REGS_PER_ADDRESS 1
+
+/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
+   and check its validity for a certain class.
+   We have two alternate definitions for each of them.
+   The usual definition accepts all pseudo regs; the other rejects
+   them unless they have been allocated suitable hard regs.
+   The symbol REG_OK_STRICT causes the latter definition to be used.
+
+   Most source files want to accept pseudo regs in the hope that
+   they will get allocated to the class that the insn wants them to be in.
+   Source files for reload pass need to be strict.
+   After reload, it makes no difference, since pseudo regs have
+   been eliminated by then.  */
+
+#ifndef REG_OK_STRICT
+
+/* Nonzero if X is a hard reg that can be used as an index
+   or if it is a pseudo reg.  */
+#define REG_OK_FOR_INDEX_P(X) 0
+/* Nonzero if X is a hard reg that can be used as a base reg
+   or if it is a pseudo reg.  */
+#define REG_OK_FOR_BASE_P(X) 1
+#define REG_OK_FOR_INDEX_P_STRICT(X) 0
+#define REG_OK_FOR_BASE_P_STRICT(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+#define STRICT 0
+
+#else
+
+/* Nonzero if X is a hard reg that can be used as an index.  */
+#define REG_OK_FOR_INDEX_P(X) 0
+/* Nonzero if X is a hard reg that can be used as a base reg.  */
+#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
+#define STRICT 1
+
+#endif
+
+/* A C expression that defines the optional machine-dependent
+   constraint letters that can be used to segregate specific types of
+   operands, usually memory references, for the target machine.
+   Normally this macro will not be defined.  If it is required for a
+   particular target machine, it should return 1 if VALUE corresponds
+   to the operand type represented by the constraint letter C.  If C
+   is not defined as an extra constraint, the value returned should
+   be 0 regardless of VALUE.
+
+   For example, on the ROMP, load instructions cannot have their
+   output in r0 if the memory reference contains a symbolic address.
+   Constraint letter `Q' is defined as representing a memory address
+   that does *not* contain a symbolic address.  An alternative is
+   specified with a `Q' constraint on the input and `r' on the
+   output.  The next alternative specifies `m' on the input and a
+   register class that does not include r0 on the output.  */
+
+#define EXTRA_CONSTRAINT(OP, C)                                                \
+ ((C) == 'Q'   ? ep_memory_operand (OP, GET_MODE (OP))                 \
+  : (C) == 'R' ? special_symbolref_operand (OP, VOIDmode)              \
+  : (C) == 'S' ? (GET_CODE (OP) == SYMBOL_REF && ! ZDA_NAME_P (XSTR (OP, 0))) \
+  : (C) == 'T' ? 0                                                     \
+  : (C) == 'U' ? 0                                                      \
+  : 0)
+\f
+/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
+   that is a valid memory address for an instruction.
+   The MODE argument is the machine mode for the MEM expression
+   that wants to use this address.
+
+   The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
+   except for CONSTANT_ADDRESS_P which is actually
+   machine-independent.  */
+
+/* Accept either REG or SUBREG where a register is valid.  */
+  
+#define RTX_OK_FOR_BASE_P(X)                                           \
+  ((REG_P (X) && REG_OK_FOR_BASE_P (X))                                        \
+   || (GET_CODE (X) == SUBREG && REG_P (SUBREG_REG (X))                        \
+       && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
+
+#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                                \
+do {                                                                   \
+  if (RTX_OK_FOR_BASE_P (X)) goto ADDR;                                        \
+  if (CONSTANT_ADDRESS_P (X)                                           \
+      && (MODE == QImode || INTVAL (X) % 2 == 0))                      \
+    goto ADDR;                                                         \
+  if (GET_CODE (X) == LO_SUM                                           \
+      && GET_CODE (XEXP (X, 0)) == REG                                 \
+      && REG_OK_FOR_BASE_P (XEXP (X, 0))                               \
+      && CONSTANT_P (XEXP (X, 1))                                      \
+      && (GET_CODE (XEXP (X, 1)) != CONST_INT                          \
+         || ((MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0)         \
+             && CONST_OK_FOR_K (INTVAL (XEXP (X, 1)))))                \
+      && GET_MODE_SIZE (MODE) <= GET_MODE_SIZE (word_mode))            \
+    goto ADDR;                                                         \
+  if (special_symbolref_operand (X, MODE)                              \
+      && (GET_MODE_SIZE (MODE) <= GET_MODE_SIZE (word_mode)))          \
+     goto ADDR;                                                                \
+  if (GET_CODE (X) == PLUS                                             \
+      && CONSTANT_ADDRESS_P (XEXP (X, 1))                              \
+      && (MODE == QImode || INTVAL (XEXP (X, 1)) % 2 == 0)             \
+      && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR;                   \
+} while (0)
+
+\f
+/* Try machine-dependent ways of modifying an illegitimate address
+   to be legitimate.  If we find one, return the new, valid address.
+   This macro is used in only one place: `memory_address' in explow.c.
+
+   OLDX is the address as it was before break_out_memory_refs was called.
+   In some cases it is useful to look at this to decide what needs to be done.
+
+   MODE and WIN are passed so that this macro can use
+   GO_IF_LEGITIMATE_ADDRESS.
+
+   It is always safe for this macro to do nothing.  It exists to recognize
+   opportunities to optimize the output.   */
+
+#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)  {}
+
+/* Go to LABEL if ADDR (a legitimate address expression)
+   has an effect that depends on the machine mode it is used for.  */
+
+#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)  {}
+
+/* Nonzero if the constant value X is a legitimate general operand.
+   It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
+
+#define LEGITIMATE_CONSTANT_P(X)                                       \
+  (GET_CODE (X) == CONST_DOUBLE                                                \
+   || !(GET_CODE (X) == CONST                                          \
+       && GET_CODE (XEXP (X, 0)) == PLUS                               \
+       && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF               \
+       && GET_CODE (XEXP (XEXP (X, 0), 1)) == CONST_INT                \
+       && ! CONST_OK_FOR_K (INTVAL (XEXP (XEXP (X, 0), 1)))))
+
+/* In rare cases, correct code generation requires extra machine
+   dependent processing between the second jump optimization pass and
+   delayed branch scheduling.  On those machines, define this macro
+   as a C statement to act on the code starting at INSN.  */
+
+#define MACHINE_DEPENDENT_REORG(INSN) v850_reorg (INSN)
+
+\f
+/* Tell final.c how to eliminate redundant test instructions.  */
+
+/* Here we define machine-dependent flags and fields in cc_status
+   (see `conditions.h').  No extra ones are needed for the vax.  */
+
+/* Store in cc_status the expressions
+   that the condition codes will describe
+   after execution of an instruction whose pattern is EXP.
+   Do not alter them if the instruction would not alter the cc's.  */
+
+#define CC_OVERFLOW_UNUSABLE 0x200
+#define CC_NO_CARRY CC_NO_OVERFLOW
+#define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc(EXP, INSN)
+
+/* A part of a C `switch' statement that describes the relative costs
+   of constant RTL expressions.  It must contain `case' labels for
+   expression codes `const_int', `const', `symbol_ref', `label_ref'
+   and `const_double'.  Each case must ultimately reach a `return'
+   statement to return the relative cost of the use of that kind of
+   constant value in an expression.  The cost may depend on the
+   precise value of the constant, which is available for examination
+   in X, and the rtx code of the expression in which it is contained,
+   found in OUTER_CODE.
+
+   CODE is the expression code--redundant, since it can be obtained
+   with `GET_CODE (X)'. */
+
+#define CONST_COSTS(RTX,CODE,OUTER_CODE)                               \
+  case CONST_INT:                                                      \
+  case CONST_DOUBLE:                                                   \
+  case CONST:                                                          \
+  case SYMBOL_REF:                                                     \
+  case LABEL_REF:                                                      \
+    {                                                                  \
+      int _zxy = const_costs(RTX, CODE);                               \
+      return (_zxy) ? COSTS_N_INSNS (_zxy) : 0;                                \
+    }
+
+/* A crude cut at RTX_COSTS for the V850.  */
+
+/* Provide the costs of a rtl expression.  This is in the body of a
+   switch on CODE. 
+
+   There aren't DImode MOD, DIV or MULT operations, so call them
+   very expensive.  Everything else is pretty much a costant cost.  */
+
+#define RTX_COSTS(RTX,CODE,OUTER_CODE)                                 \
+  case MOD:                                                            \
+  case DIV:                                                            \
+    return 60;                                                         \
+  case MULT:                                                           \
+    return 20;
+
+/* All addressing modes have the same cost on the V850 series.  */
+#define ADDRESS_COST(ADDR) 1
+
+/* Nonzero if access to memory by bytes or half words is no faster
+   than accessing full words.  */
+#define SLOW_BYTE_ACCESS 1
+
+/* Define this if zero-extension is slow (more than one real instruction).  */
+#define SLOW_ZERO_EXTEND 
+
+/* According expr.c, a value of around 6 should minimize code size, and
+   for the V850 series, that's our primary concern.  */
+#define MOVE_RATIO 6
+
+/* Indirect calls are expensive, never turn a direct call
+   into an indirect call.  */
+#define NO_FUNCTION_CSE
+
+/* A list of names for sections other than the standard two, which are
+   `in_text' and `in_data'.  You need not define this macro on a
+   system with no other sections (that GCC needs to use).  */
+#undef EXTRA_SECTIONS
+#define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, in_ctors, in_dtors
+
+/* One or more functions to be defined in `varasm.c'.  These
+   functions should do jobs analogous to those of `text_section' and
+   `data_section', for your additional sections.  Do not define this
+   macro if you do not define `EXTRA_SECTIONS'. */
+#undef EXTRA_SECTION_FUNCTIONS
+#define EXTRA_SECTION_FUNCTIONS                                                \
+CONST_SECTION_FUNCTION                                                 \
+CTORS_SECTION_FUNCTION                                                 \
+DTORS_SECTION_FUNCTION                                                 \
+                                                                       \
+void                                                                   \
+sdata_section ()                                                       \
+{                                                                      \
+  if (in_section != in_sdata)                                          \
+    {                                                                  \
+      fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP);            \
+      in_section = in_sdata;                                           \
+    }                                                                  \
+}                                                                      \
+                                                                       \
+void                                                                   \
+tdata_section ()                                                       \
+{                                                                      \
+  if (in_section != in_tdata)                                          \
+    {                                                                  \
+      fprintf (asm_out_file, "%s\n", TDATA_SECTION_ASM_OP);            \
+      in_section = in_tdata;                                           \
+    }                                                                  \
+}                                                                      \
+                                                                       \
+void                                                                   \
+zdata_section ()                                                       \
+{                                                                      \
+  if (in_section != in_zdata)                                          \
+    {                                                                  \
+      fprintf (asm_out_file, "%s\n", ZDATA_SECTION_ASM_OP);            \
+      in_section = in_zdata;                                           \
+    }                                                                  \
+}
+
+#define TEXT_SECTION_ASM_OP "\t.section .text"
+#define DATA_SECTION_ASM_OP "\t.section .data"
+#define BSS_SECTION_ASM_OP "\t.section .bss"
+#define SDATA_SECTION_ASM_OP "\t.section .sdata,\"aw\""
+#define SBSS_SECTION_ASM_OP "\t.section .sbss,\"aw\""
+#define ZDATA_SECTION_ASM_OP "\t.section .zdata,\"aw\""
+#define ZBSS_SECTION_ASM_OP "\t.section .zbss,\"aw\""
+#define TDATA_SECTION_ASM_OP "\t.section .tdata,\"aw\""
+
+/* A C statement or statements to switch to the appropriate section
+   for output of EXP.  You can assume that EXP is either a `VAR_DECL'
+   node or a constant of some sort.  RELOC indicates whether the
+   initial value of EXP requires link-time relocations.  Select the
+   section by calling `text_section' or one of the alternatives for
+   other sections.
+
+   Do not define this macro if you put all read-only variables and
+   constants in the read-only data section (usually the text section).  */
+#undef SELECT_SECTION
+#define SELECT_SECTION(EXP, RELOC)                                     \
+do {                                                                   \
+  if (TREE_CODE (EXP) == VAR_DECL)                                     \
+    {                                                                  \
+      if (!TREE_READONLY (EXP) || TREE_SIDE_EFFECTS (EXP)              \
+         || !DECL_INITIAL (EXP)                                        \
+         || (DECL_INITIAL (EXP) != error_mark_node                     \
+             && !TREE_CONSTANT (DECL_INITIAL (EXP))))                  \
+       data_section ();                                                \
+      else                                                             \
+       const_section ();                                               \
+    }                                                                  \
+  else if (TREE_CODE (EXP) == STRING_CST)                              \
+    {                                                                  \
+      if (! flag_writable_strings)                                     \
+       const_section ();                                               \
+      else                                                             \
+       data_section ();                                                \
+    }                                                                  \
+                                                                       \
+  else                                                                 \
+    const_section ();                                                  \
+                                                                       \
+} while (0)
+
+/* A C statement or statements to switch to the appropriate section
+   for output of RTX in mode MODE.  You can assume that RTX is some
+   kind of constant in RTL.  The argument MODE is redundant except in
+   the case of a `const_int' rtx.  Select the section by calling
+   `text_section' or one of the alternatives for other sections.
+
+   Do not define this macro if you put all constants in the read-only
+   data section.  */
+/* #define SELECT_RTX_SECTION(MODE, RTX) */
+
+/* Output at beginning/end of assembler file.  */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) asm_file_start(FILE)
+
+#define ASM_COMMENT_START "#"
+
+/* Output to assembler file text saying following lines
+   may contain character constants, extra white space, comments, etc.  */
+
+#define ASM_APP_ON "#APP\n"
+
+/* Output to assembler file text saying following lines
+   no longer contain unusual constructs.  */
+
+#define ASM_APP_OFF "#NO_APP\n"
+
+/* This is how to output an assembler line defining a `double' constant.
+   It is .double or .float, depending.  */
+
+#define ASM_OUTPUT_DOUBLE(FILE, VALUE)                 \
+do { char dstr[30];                                    \
+     REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);   \
+     fprintf (FILE, "\t.double %s\n", dstr);           \
+   } while (0)
+
+
+/* This is how to output an assembler line defining a `float' constant.  */
+#define ASM_OUTPUT_FLOAT(FILE, VALUE)                  \
+do { char dstr[30];                                    \
+     REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);   \
+     fprintf (FILE, "\t.float %s\n", dstr);            \
+   } while (0)
+
+/* This is how to output an assembler line defining an `int' constant.  */
+
+#define ASM_OUTPUT_INT(FILE, VALUE)            \
+( fprintf (FILE, "\t.long "),                  \
+  output_addr_const (FILE, (VALUE)),           \
+  fprintf (FILE, "\n"))
+
+/* Likewise for `char' and `short' constants.  */
+
+#define ASM_OUTPUT_SHORT(FILE, VALUE)          \
+( fprintf (FILE, "\t.hword "),                 \
+  output_addr_const (FILE, (VALUE)),           \
+  fprintf (FILE, "\n"))
+
+#define ASM_OUTPUT_CHAR(FILE, VALUE)           \
+( fprintf (FILE, "\t.byte "),                  \
+  output_addr_const (FILE, (VALUE)),           \
+  fprintf (FILE, "\n"))
+
+/* This is how to output an assembler line for a numeric constant byte.  */
+#define ASM_OUTPUT_BYTE(FILE, VALUE)  \
+  fprintf (FILE, "\t.byte 0x%x\n", (VALUE))
+
+/* Define the parentheses used to group arithmetic operations
+   in assembler code.  */
+
+#define ASM_OPEN_PAREN "("
+#define ASM_CLOSE_PAREN ")"
+
+/* This says how to output the assembler to define a global
+   uninitialized but not common symbol.
+   Try to use asm_output_bss to implement this macro.  */
+
+#define ASM_OUTPUT_BSS(FILE, DECL, NAME, SIZE, ROUNDED) \
+  asm_output_bss ((FILE), (DECL), (NAME), (SIZE), (ROUNDED))
+
+/* This is how to output the definition of a user-level label named NAME,
+   such as the label on a static function or variable NAME.  */
+
+#define ASM_OUTPUT_LABEL(FILE, NAME)   \
+  do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
+
+/* This is how to output a command to make the user-level label named NAME
+   defined for reference from other files.  */
+
+#define ASM_GLOBALIZE_LABEL(FILE, NAME)        \
+  do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
+
+/* This is how to output a reference to a user-level label named NAME.
+   `assemble_name' uses this.  */
+
+#undef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(FILE, NAME)                  \
+  do {                                            \
+  char* real_name;                                \
+  STRIP_NAME_ENCODING (real_name, (NAME));        \
+  fprintf (FILE, "_%s", real_name);               \
+  } while (0)           
+
+/* Store in OUTPUT a string (made with alloca) containing
+   an assembler-name for a local static variable named NAME.
+   LABELNO is an integer which is different for each call.  */
+
+#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
+( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),   \
+  sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))
+
+/* This is how we tell the assembler that two symbols have the same value.  */
+
+#define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
+  do { assemble_name(FILE, NAME1);      \
+       fputs(" = ", FILE);              \
+       assemble_name(FILE, NAME2);      \
+       fputc('\n', FILE); } while (0)
+
+
+/* How to refer to registers in assembler output.
+   This sequence is indexed by compiler's hard-register-number (see above).  */
+
+#define REGISTER_NAMES                                                 \
+{  "r0",  "r1",  "r2",  "sp",  "gp",  "r5",  "r6" , "r7",              \
+   "r8",  "r9", "r10", "r11", "r12", "r13", "r14", "r15",              \
+  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",              \
+  "r24", "r25", "r26", "r27", "r28", "r29",  "ep", "r31",              \
+  ".fp", ".ap"}
+
+#define ADDITIONAL_REGISTER_NAMES                                      \
+{ { "zero",    0 },                                                    \
+  { "hp",      2 },                                                    \
+  { "r3",      3 },                                                    \
+  { "r4",      4 },                                                    \
+  { "tp",      5 },                                                    \
+  { "fp",      29 },                                                   \
+  { "r30",     30 },                                                   \
+  { "lp",      31} }
+
+/* Print an instruction operand X on file FILE.
+   look in v850.c for details */
+
+#define PRINT_OPERAND(FILE, X, CODE)  print_operand(FILE,X,CODE)
+
+#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
+  ((CODE) == '.')
+
+/* Print a memory operand whose address is X, on file FILE.
+   This uses a function in output-vax.c.  */
+
+#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
+
+#define ASM_OUTPUT_REG_PUSH(FILE,REGNO)
+#define ASM_OUTPUT_REG_POP(FILE,REGNO)
+
+/* This is how to output an element of a case-vector that is absolute.  */
+
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
+  asm_fprintf (FILE, "\t%s .L%d\n", ".long", VALUE)
+
+/* This is how to output an element of a case-vector that is relative.  */
+
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+  fprintf (FILE, "\t%s .L%d-.L%d\n", ".long", VALUE, REL)
+
+#define ASM_OUTPUT_ALIGN(FILE,LOG)     \
+  if ((LOG) != 0)                      \
+    fprintf (FILE, "\t.align %d\n", (LOG))
+
+/* We don't have to worry about dbx compatability for the v850.  */
+#define DEFAULT_GDB_EXTENSIONS 1
+
+/* Use stabs debugging info by default.  */
+#undef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+#define DBX_REGISTER_NUMBER(REGNO) REGNO
+
+/* Define to use software floating point emulator for REAL_ARITHMETIC and
+   decimal <-> binary conversion. */
+#define REAL_ARITHMETIC
+
+/* Specify the machine mode that this machine uses
+   for the index in the tablejump instruction.  */
+#define CASE_VECTOR_MODE Pmode
+
+/* Define this if the case instruction drops through after the table
+   when the index is out of range.  Don't define it if the case insn
+   jumps to the default label instead.  */
+#define CASE_DROPS_THROUGH
+
+#define WORD_REGISTER_OPERATIONS
+
+/* Byte and short loads sign extend the value to a word.  */
+#define LOAD_EXTEND_OP(MODE) SIGN_EXTEND
+
+/* Specify the tree operation to be used to convert reals to integers.  */
+#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
+
+/* This flag, if defined, says the same insns that convert to a signed fixnum
+   also convert validly to an unsigned one.  */
+#define FIXUNS_TRUNC_LIKE_FIX_TRUNC
+
+/* This is the kind of divide that is easiest to do in the general case.  */
+#define EASY_DIV_EXPR TRUNC_DIV_EXPR
+
+/* Max number of bytes we can move from memory to memory
+   in one reasonably fast instruction.  */
+#define MOVE_MAX       4
+
+/* Define if shifts truncate the shift count
+   which implies one can omit a sign-extension or zero-extension
+   of a shift count.  */
+#define SHIFT_COUNT_TRUNCATED 1
+
+/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
+   is done just by pretending it is already truncated.  */
+#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
+
+#define STORE_FLAG_VALUE 1
+
+/* Specify the machine mode that pointers have.
+   After generation of rtl, the compiler makes no further distinction
+   between pointers and any other objects of this machine mode.  */
+#define Pmode SImode
+
+/* A function address in a call instruction
+   is a byte address (for indexing purposes)
+   so give the MEM rtx a byte's mode.  */
+#define FUNCTION_MODE QImode
+
+/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
+   is a valid machine specific attribute for DECL.
+   The attributes in ATTRIBUTES have previously been assigned to DECL.  */
+#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
+v850_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
+
+/* Tell compiler we have {ZDA,TDA,SDA} small data regions */
+#define HAVE_ZDA 1
+#define HAVE_SDA 1
+#define HAVE_TDA 1
+
+/* Tell compiler we want to support GHS pragmas */
+#define HANDLE_GHS_PRAGMA
+
+/* The assembler op to to start the file.  */
+
+#define FILE_ASM_OP "\t.file\n"
+
+/* Enable the register move pass to improve code.  */
+#define ENABLE_REGMOVE_PASS
+
+
+/* Implement ZDA, TDA, and SDA */
+
+#define EP_REGNUM 30   /* ep register number */
+
+#define ENCODE_SECTION_INFO(DECL)                                      \
+do {                                                                   \
+  if ((TREE_STATIC (DECL) || DECL_EXTERNAL (DECL))                     \
+      && TREE_CODE (DECL) == VAR_DECL)                                 \
+    v850_encode_data_area (DECL);                                      \
+} while (0)
+
+#define ZDA_NAME_FLAG_CHAR '@'
+#define TDA_NAME_FLAG_CHAR '%'
+#define SDA_NAME_FLAG_CHAR '&'
+
+#define ZDA_NAME_P(NAME) (*(NAME) == ZDA_NAME_FLAG_CHAR)
+#define TDA_NAME_P(NAME) (*(NAME) == TDA_NAME_FLAG_CHAR)
+#define SDA_NAME_P(NAME) (*(NAME) == SDA_NAME_FLAG_CHAR)
+
+#define ENCODED_NAME_P(SYMBOL_NAME)    \
+  (ZDA_NAME_P (SYMBOL_NAME)            \
+   || TDA_NAME_P (SYMBOL_NAME)         \
+   || SDA_NAME_P (SYMBOL_NAME))
+
+#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
+     (VAR) = (SYMBOL_NAME) + (ENCODED_NAME_P (SYMBOL_NAME) || *(SYMBOL_NAME) == '*')
+
+/* Define this if you have defined special-purpose predicates in the
+   file `MACHINE.c'.  This macro is called within an initializer of an
+   array of structures.  The first field in the structure is the name
+   of a predicate and the second field is an array of rtl codes.  For
+   each predicate, list all rtl codes that can be in expressions
+   matched by the predicate.  The list should have a trailing comma.  */
+
+#define PREDICATE_CODES                                                        \
+{ "ep_memory_operand",         { MEM }},                               \
+{ "reg_or_0_operand",          { REG, SUBREG, CONST_INT, CONST_DOUBLE }}, \
+{ "reg_or_int5_operand",       { REG, SUBREG, CONST_INT }},            \
+{ "call_address_operand",      { REG, SYMBOL_REF }},                   \
+{ "movsi_source_operand",      { LABEL_REF, SYMBOL_REF, CONST_INT,     \
+                                 CONST_DOUBLE, CONST, HIGH, MEM,       \
+                                 REG, SUBREG }},                       \
+{ "special_symbolref_operand", { SYMBOL_REF }},                        \
+{ "power_of_two_operand",      { CONST_INT }},                         \
+{ "not_power_of_two_operand",  { CONST_INT }},
+
+extern void override_options ();
+extern void asm_file_start ();
+extern int function_arg_partial_nregs ();
+extern int const_costs ();
+extern void print_operand ();
+extern void print_operand_address ();
+extern char *output_move_double ();
+extern char *output_move_single ();
+extern int ep_operand ();
+extern int reg_or_0_operand ();
+extern int reg_or_int5_operand ();
+extern int call_address_operand ();
+extern int movsi_source_operand ();
+extern int power_of_two_operand ();
+extern int not_power_of_two_operand ();
+extern void v850_reorg ();
+extern int compute_register_save_size ();
+extern int compute_frame_size ();
+extern void expand_prologue ();
+extern void expand_epilogue ();
+extern void notice_update_cc ();
+extern int v850_valid_machine_decl_attribute ();
+extern int v850_interrupt_function_p ();
+/* END CYGNUS LOCAL */
diff --git a/gcc/config/v850/v850.md b/gcc/config/v850/v850.md
new file mode 100644 (file)
index 0000000..30ebf87
--- /dev/null
@@ -0,0 +1,1852 @@
+;; CYGNUS LOCAL entire file/law
+;; GCC machine description for NEC V850
+;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+
+;;   Contributed by Jeff Law (law@cygnus.com).
+
+;; This file is part of GNU CC.
+
+;; GNU CC 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.
+
+;; GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+;; the Free Software Foundation, 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;; The original PO technology requires these to be ordered by speed,
+;; so that assigner will pick the fastest.
+
+;; See file "rtl.def" for documentation on define_insn, match_*, et. al.
+
+;; The V851 manual states that the instruction address space is 16M;
+;; the various branch/call instructions only have a 22bit offset (4M range).
+;;
+;; One day we'll probably need to handle calls to targets more than 4M
+;; away.
+
+;; The size of instructions in bytes.
+
+(define_attr "length" ""
+  (const_int 200))
+
+;; Types of instructions (for scheduling purposes).
+
+(define_attr "type" "load,mult,other"
+  (const_string "other"))
+
+;; Condition code settings.
+;; none - insn does not affect cc
+;; none_0hit - insn does not affect cc but it does modify operand 0
+;;     This attribute is used to keep track of when operand 0 changes.
+;;     See the description of NOTICE_UPDATE_CC for more info.
+;; set_znv - sets z,n,v to useable values; c is unknown.
+;; set_zn  - sets z,n to usable values; v,c is unknown.
+;; compare - compare instruction
+;; clobber - value of cc is unknown
+(define_attr "cc" "none,none_0hit,set_zn,set_znv,compare,clobber"
+  (const_string "clobber"))
+\f
+;; Function units for the V850.  As best as I can tell, there's
+;; a traditional memory load/use stall as well as a stall if
+;; the result of a multiply is used too early.
+;;
+(define_function_unit "memory" 1 0 (eq_attr "type" "load") 2 0)
+(define_function_unit "mult"   1 0 (eq_attr "type" "mult") 2 0)
+
+\f
+;; ----------------------------------------------------------------------
+;; MOVE INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+;; movqi
+
+(define_expand "movqi"
+  [(set (match_operand:QI 0 "general_operand" "")
+       (match_operand:QI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, QImode)
+      && !reg_or_0_operand (operand1, QImode))
+    operands[1] = copy_to_mode_reg (QImode, operand1);
+}")
+
+(define_insn "*movqi_internal"
+  [(set (match_operand:QI 0 "general_operand" "=r,r,r,Q,r,m,m")
+       (match_operand:QI 1 "general_operand" "Jr,n,Q,Ir,m,r,I"))]
+  "register_operand (operands[0], QImode)
+   || reg_or_0_operand (operands[1], QImode)"
+  "* return output_move_single (operands);"
+  [(set_attr "length" "2,4,2,2,4,4,4")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,load,other,load,other,other")])
+
+;; movhi
+
+(define_expand "movhi"
+  [(set (match_operand:HI 0 "general_operand" "")
+       (match_operand:HI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, HImode)
+      && !reg_or_0_operand (operand1, HImode))
+    operands[1] = copy_to_mode_reg (HImode, operand1);
+}")
+
+(define_insn "*movhi_internal"
+  [(set (match_operand:HI 0 "general_operand" "=r,r,r,Q,r,m,m")
+       (match_operand:HI 1 "general_operand" "Jr,n,Q,Ir,m,r,I"))]
+  "register_operand (operands[0], HImode)
+   || reg_or_0_operand (operands[1], HImode)"
+  "* return output_move_single (operands);"
+  [(set_attr "length" "2,4,2,2,4,4,4")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,load,other,load,other,other")])
+
+;; movsi and helpers
+
+(define_insn "*movsi_high"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (high:SI (match_operand 1 "" "")))]
+  ""
+  "movhi hi(%1),%.,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")
+   (set_attr "type" "other")])
+
+(define_insn "*movsi_lo"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (lo_sum:SI (match_operand:SI 1 "register_operand" "r")
+                  (match_operand:SI 2 "immediate_operand" "i")))]
+  ""
+  "movea lo(%2),%1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")
+   (set_attr "type" "other")])
+
+(define_expand "movsi"
+  [(set (match_operand:SI 0 "general_operand" "")
+       (match_operand:SI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, SImode)
+      && !reg_or_0_operand (operand1, SImode))
+    operands[1] = copy_to_mode_reg (SImode, operand1);
+
+  /* Some constants, as well as symbolic operands
+     must be done with HIGH & LO_SUM patterns.  */
+  if (CONSTANT_P (operands[1])
+      && GET_CODE (operands[1]) != HIGH
+      && !special_symbolref_operand (operands[1], VOIDmode)
+      && !(GET_CODE (operands[1]) == CONST_INT
+          && (CONST_OK_FOR_J (INTVAL (operands[1]))
+              || CONST_OK_FOR_K (INTVAL (operands[1]))
+              || CONST_OK_FOR_L (INTVAL (operands[1])))))
+    {
+      rtx high;
+      rtx temp;
+
+      if (reload_in_progress || reload_completed)
+        temp = operands[0];
+      else
+       temp = gen_reg_rtx (SImode);
+
+      emit_insn (gen_rtx (SET, SImode, temp,
+                          gen_rtx (HIGH, SImode, operand1)));
+      emit_insn (gen_rtx (SET, SImode, operand0,
+                          gen_rtx (LO_SUM, SImode, temp, operand1)));
+      DONE;
+    }
+}")
+
+(define_insn "*movsi_internal"
+  [(set (match_operand:SI 0 "general_operand" "=r,r,r,r,Q,r,r,m,m")
+       (match_operand:SI 1 "movsi_source_operand" "Jr,K,L,Q,Ir,m,R,r,I"))]
+  "register_operand (operands[0], SImode)
+   || reg_or_0_operand (operands[1], SImode)"
+  "* return output_move_single (operands);"
+  [(set_attr "length" "2,4,4,2,2,4,4,4,4")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,other,load,other,load,other,other,other")])
+
+(define_expand "movdi"
+  [(set (match_operand:DI 0 "general_operand" "")
+       (match_operand:DI 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, DImode)
+      && !reg_or_0_operand (operand1, DImode))
+    operands[1] = copy_to_mode_reg (DImode, operand1);
+}")
+
+(define_insn "*movdi_internal"
+  [(set (match_operand:DI 0 "general_operand" "=r,r,r,r,r,m,m,r")
+       (match_operand:DI 1 "general_operand" "Jr,K,L,i,m,r,IG,iF"))]
+  "register_operand (operands[0], DImode)
+   || reg_or_0_operand (operands[1], DImode)"
+  "* return output_move_double (operands);"
+  [(set_attr "length" "4,8,8,16,8,8,8,16")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,other,other,load,other,other,other")])
+
+(define_expand "movsf"
+  [(set (match_operand:SF 0 "general_operand" "")
+       (match_operand:SF 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, SFmode)
+      && !reg_or_0_operand (operand1, SFmode))
+    operands[1] = copy_to_mode_reg (SFmode, operand1);
+}")
+
+(define_insn "*movsf_internal"
+  [(set (match_operand:SF 0 "general_operand" "=r,r,r,r,r,Q,r,m,m,r")
+       (match_operand:SF 1 "general_operand" "Jr,K,L,n,Q,Ir,m,r,IG,iF"))]
+  "register_operand (operands[0], SFmode)
+   || reg_or_0_operand (operands[1], SFmode)"
+  "* return output_move_single (operands);"
+  [(set_attr "length" "2,4,4,8,2,2,4,4,4,8")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,other,other,load,other,load,other,other,other")])
+
+(define_expand "movdf"
+  [(set (match_operand:DF 0 "general_operand" "")
+       (match_operand:DF 1 "general_operand" ""))]
+  ""
+  "
+{
+  /* One of the ops has to be in a register or 0 */
+  if (!register_operand (operand0, DFmode)
+      && !reg_or_0_operand (operand1, DFmode))
+    operands[1] = copy_to_mode_reg (DFmode, operand1);
+}")
+
+(define_insn "*movdf_internal"
+  [(set (match_operand:DF 0 "general_operand" "=r,r,r,r,r,m,m,r")
+       (match_operand:DF 1 "general_operand" "Jr,K,L,i,m,r,IG,iF"))]
+  "register_operand (operands[0], DFmode)
+   || reg_or_0_operand (operands[1], DFmode)"
+  "* return output_move_double (operands);"
+  [(set_attr "length" "4,8,8,16,8,8,8,16")
+   (set_attr "cc" "none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit,none_0hit")
+   (set_attr "type" "other,other,other,other,load,other,other,other")])
+
+\f
+;; ----------------------------------------------------------------------
+;; TEST INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_tst1"
+  [(set (cc0) (zero_extract:SI (match_operand:QI 0 "memory_operand" "m")
+                               (const_int 1)
+                               (match_operand:QI 1 "const_int_operand" "n")))]
+  ""
+  "tst1 %1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "tstsi"
+  [(set (cc0) (match_operand:SI 0 "register_operand" "r"))]
+  ""
+  "cmp %.,%0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "set_znv")])
+
+(define_insn "cmpsi"
+  [(set (cc0)
+       (compare:SI (match_operand:SI 0 "register_operand" "r,r")
+                   (match_operand:SI 1 "reg_or_int5_operand" "r,J")))]
+  ""
+  "@
+  cmp %1,%0
+  cmp %1,%0"
+  [(set_attr "length" "2,2")
+   (set_attr "cc" "compare")])
+\f
+;; ----------------------------------------------------------------------
+;; ADD INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "addsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,&r")
+       (plus:SI (match_operand:SI 1 "register_operand" "%0,r,r")
+                (match_operand:SI 2 "nonmemory_operand" "rJ,K,r")))]
+  ""
+  "@
+   add %2,%0
+   addi %2,%1,%0
+   mov %1,%0\;add %2,%0"
+  [(set_attr "length" "2,4,6")
+   (set_attr "cc" "set_zn")])
+
+;; ----------------------------------------------------------------------
+;; SUBTRACT INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "subsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (minus:SI (match_operand:SI 1 "register_operand" "0,r")
+                 (match_operand:SI 2 "register_operand" "r,0")))]
+  ""
+  "@
+  sub %2,%0
+  subr %1,%0"
+  [(set_attr "length" "2,2")
+   (set_attr "cc" "set_zn")])
+
+(define_insn "negsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (neg:SI (match_operand:SI 1 "register_operand" "0")))]
+  ""
+  "subr %.,%0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "set_zn")])
+
+;; ----------------------------------------------------------------------
+;; MULTIPLY INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_expand "mulhisi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (mult:SI
+         (sign_extend:SI (match_operand:HI 1 "register_operand" ""))
+         (sign_extend:SI (match_operand:HI 2 "nonmemory_operand" ""))))]
+  ""
+  "")
+
+(define_insn "*mulhisi3_internal1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mult:SI
+         (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
+         (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
+  ""
+  "mulh %2,%0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none_0hit")
+   (set_attr "type" "mult")])
+
+(define_insn "*mulhisi3_internal2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (mult:SI
+         (sign_extend:SI (match_operand:HI 1 "register_operand" "%0,r"))
+         (sign_extend:SI (match_operand 2 "const_int_operand" "J,K"))))]
+  ""
+  "@
+   mulh %2,%0
+   mulhi %2,%1,%0"
+  [(set_attr "length" "2,4")
+   (set_attr "cc" "none_0hit,none_0hit")
+   (set_attr "type" "mult")])
+
+\f
+;; ----------------------------------------------------------------------
+;; AND INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_clr1_1"
+  [(set (match_operand:QI 0 "memory_operand" "=m")
+       (subreg:QI
+         (and:SI (subreg:SI (match_dup 0) 0)
+                 (match_operand:QI 1 "not_power_of_two_operand" "")) 0))]
+  ""
+  "*
+{
+  rtx xoperands[2];
+  xoperands[0] = operands[0];
+  xoperands[1] = GEN_INT (~INTVAL (operands[1]) & 0xff);
+  output_asm_insn (\"clr1 %M1,%0\", xoperands);
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_clr1_2"
+  [(set (match_operand:HI 0 "memory_operand" "=m")
+       (subreg:HI
+         (and:SI (subreg:SI (match_dup 0) 0)
+                 (match_operand:HI 1 "not_power_of_two_operand" "")) 0))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (~INTVAL (operands[1]) & 0xffff);
+
+  rtx xoperands[2];
+  xoperands[0] = gen_rtx (MEM, QImode,
+                         plus_constant (XEXP (operands[0], 0), log2 / 8));
+  xoperands[1] = GEN_INT (log2 % 8);
+  output_asm_insn (\"clr1 %1,%0\", xoperands);
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_clr1_3"
+  [(set (match_operand:SI 0 "memory_operand" "=m")
+       (and:SI (match_dup 0)
+               (match_operand:SI 1 "not_power_of_two_operand" "")))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (~INTVAL (operands[1]) & 0xffffffff);
+
+  rtx xoperands[2];
+  xoperands[0] = gen_rtx (MEM, QImode,
+                         plus_constant (XEXP (operands[0], 0), log2 / 8));
+  xoperands[1] = GEN_INT (log2 % 8);
+  output_asm_insn (\"clr1 %1,%0\", xoperands);
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "andsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (and:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+               (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+  ""
+  "@
+  and %2,%0
+  and %.,%0
+  andi %2,%1,%0"
+  [(set_attr "length" "2,2,4")
+   (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; OR INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_set1_1"
+  [(set (match_operand:QI 0 "memory_operand" "=m")
+       (subreg:QI (ior:SI (subreg:SI (match_dup 0) 0)
+                          (match_operand 1 "power_of_two_operand" "")) 0))]
+  ""
+  "set1 %M1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_set1_2"
+  [(set (match_operand:HI 0 "memory_operand" "=m")
+       (subreg:HI (ior:SI (subreg:SI (match_dup 0) 0)
+                          (match_operand 1 "power_of_two_operand" "")) 0))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (INTVAL (operands[1]));
+
+  if (log2 < 8)
+    return \"set1 %M1,%0\";
+  else
+    {
+      rtx xoperands[2];
+      xoperands[0] = gen_rtx (MEM, QImode,
+                             plus_constant (XEXP (operands[0], 0), log2 / 8));
+      xoperands[1] = GEN_INT (log2 % 8);
+      output_asm_insn (\"set1 %1,%0\", xoperands);
+    }
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_set1_3"
+  [(set (match_operand:SI 0 "memory_operand" "=m")
+       (ior:SI (match_dup 0)
+               (match_operand 1 "power_of_two_operand" "")))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (INTVAL (operands[1]));
+
+  if (log2 < 8)
+    return \"set1 %M1,%0\";
+  else
+    {
+      rtx xoperands[2];
+      xoperands[0] = gen_rtx (MEM, QImode,
+                             plus_constant (XEXP (operands[0], 0), log2 / 8));
+      xoperands[1] = GEN_INT (log2 % 8);
+      output_asm_insn (\"set1 %1,%0\", xoperands);
+    }
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "iorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (ior:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+               (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+  ""
+  "@
+  or %2,%0
+  or %.,%0
+  ori %2,%1,%0"
+  [(set_attr "length" "2,2,4")
+   (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; XOR INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "*v850_not1_1"
+  [(set (match_operand:QI 0 "memory_operand" "=m")
+       (subreg:QI (xor:SI (subreg:SI (match_dup 0) 0)
+                          (match_operand 1 "power_of_two_operand" "")) 0))]
+  ""
+  "not1 %M1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_not1_2"
+  [(set (match_operand:HI 0 "memory_operand" "=m")
+       (subreg:HI (xor:SI (subreg:SI (match_dup 0) 0)
+                          (match_operand 1 "power_of_two_operand" "")) 0))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (INTVAL (operands[1]));
+
+  if (log2 < 8)
+    return \"not1 %M1,%0\";
+  else
+    {
+      rtx xoperands[2];
+      xoperands[0] = gen_rtx (MEM, QImode,
+                             plus_constant (XEXP (operands[0], 0), log2 / 8));
+      xoperands[1] = GEN_INT (log2 % 8);
+      output_asm_insn (\"not1 %1,%0\", xoperands);
+    }
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "*v850_not1_3"
+  [(set (match_operand:SI 0 "memory_operand" "=m")
+       (xor:SI (match_dup 0)
+               (match_operand 1 "power_of_two_operand" "")))]
+  ""
+  "*
+{
+  int log2 = exact_log2 (INTVAL (operands[1]));
+
+  if (log2 < 8)
+    return \"not1 %M1,%0\";
+  else
+    {
+      rtx xoperands[2];
+      xoperands[0] = gen_rtx (MEM, QImode,
+                             plus_constant (XEXP (operands[0], 0), log2 / 8));
+      xoperands[1] = GEN_INT (log2 % 8);
+      output_asm_insn (\"not1 %1,%0\", xoperands);
+    }
+  return \"\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+(define_insn "xorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (xor:SI (match_operand:SI 1 "register_operand" "%0,0,r")
+               (match_operand:SI 2 "nonmemory_operand" "r,I,M")))]
+  ""
+  "@
+  xor %2,%0
+  xor %.,%0
+  xori %2,%1,%0"
+  [(set_attr "length" "2,2,4")
+   (set_attr "cc" "set_znv")])
+\f
+;; ----------------------------------------------------------------------
+;; NOT INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+(define_insn "one_cmplsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (not:SI (match_operand:SI 1 "register_operand" "r")))]
+  ""
+  "not %1,%0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "set_znv")])
+\f
+;; -----------------------------------------------------------------
+;; BIT FIELDS
+;; -----------------------------------------------------------------
+;; Is it worth defining insv and extv for the V850 series?!?
+
+;; -----------------------------------------------------------------
+;; Scc INSTRUCTIONS
+;; -----------------------------------------------------------------
+
+(define_insn "sle"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (le:SI (cc0) (const_int 0)))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+    return 0;
+
+  return \"setf le,%0\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sleu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (leu:SI (cc0) (const_int 0)))]
+  ""
+  "setf nh,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sge"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (ge:SI (cc0) (const_int 0)))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+    return 0;
+
+  return \"setf ge,%0\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sgeu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (geu:SI (cc0) (const_int 0)))]
+  ""
+  "setf nl,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "slt"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (lt:SI (cc0) (const_int 0)))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+    return 0;
+
+  return \"setf lt,%0\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sltu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (ltu:SI (cc0) (const_int 0)))]
+  ""
+  "setf l,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sgt"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (gt:SI (cc0) (const_int 0)))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0)
+    return 0;
+
+  return \"setf gt,%0\";
+}"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sgtu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (gtu:SI (cc0) (const_int 0)))]
+  ""
+  "setf h,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "seq"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (eq:SI (cc0) (const_int 0)))]
+  ""
+  "setf z,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+(define_insn "sne"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (ne:SI (cc0) (const_int 0)))]
+  ""
+  "setf nz,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "none_0hit")])
+
+\f
+;; ----------------------------------------------------------------------
+;; JUMP INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+;; Conditional jump instructions
+
+(define_expand "ble"
+  [(set (pc)
+       (if_then_else (le (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bleu"
+  [(set (pc)
+       (if_then_else (leu (cc0)
+                          (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bge"
+  [(set (pc)
+       (if_then_else (ge (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bgeu"
+  [(set (pc)
+       (if_then_else (geu (cc0)
+                          (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "blt"
+  [(set (pc)
+       (if_then_else (lt (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bltu"
+  [(set (pc)
+       (if_then_else (ltu (cc0)
+                          (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bgt"
+  [(set (pc)
+       (if_then_else (gt (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bgtu"
+  [(set (pc)
+       (if_then_else (gtu (cc0)
+                          (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "beq"
+  [(set (pc)
+       (if_then_else (eq (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_expand "bne"
+  [(set (pc)
+       (if_then_else (ne (cc0)
+                         (const_int 0))
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "")
+
+(define_insn "*branch_normal"
+  [(set (pc)
+       (if_then_else (match_operator 1 "comparison_operator"
+                                     [(cc0) (const_int 0)])
+                     (label_ref (match_operand 0 "" ""))
+                     (pc)))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0
+      && (GET_CODE (operands[1]) == GT
+         || GET_CODE (operands[1]) == GE
+         || GET_CODE (operands[1]) == LE
+         || GET_CODE (operands[1]) == LT))
+    return 0;
+
+  if (get_attr_length (insn) == 2)
+    return \"%b1 %l0\";
+  else
+    return \"%B1 .+6\;jr %l0\";
+}"
+ [(set (attr "length")
+    (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+                     (const_int 256))
+                 (const_int 2)
+                 (const_int 6)))
+  (set_attr "cc" "none")])
+
+(define_insn "*branch_invert"
+  [(set (pc)
+       (if_then_else (match_operator 1 "comparison_operator"
+                                     [(cc0) (const_int 0)])
+                     (pc)
+                     (label_ref (match_operand 0 "" ""))))]
+  ""
+  "*
+{
+  if ((cc_status.flags & CC_OVERFLOW_UNUSABLE) != 0
+      && (GET_CODE (operands[1]) == GT
+         || GET_CODE (operands[1]) == GE
+         || GET_CODE (operands[1]) == LE
+         || GET_CODE (operands[1]) == LT))
+    return 0;
+  if (get_attr_length (insn) == 2)
+    return \"%B1 %l0\";
+  else
+    return \"%b1 .+6\;jr %l0\";
+}"
+ [(set (attr "length")
+    (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+                     (const_int 256))
+                 (const_int 2)
+                 (const_int 6)))
+  (set_attr "cc" "none")])
+
+;; Unconditional and other jump instructions.
+
+(define_insn "jump"
+  [(set (pc)
+       (label_ref (match_operand 0 "" "")))]
+  ""
+  "*
+{
+  if (get_attr_length (insn) == 2)
+    return \"br %0\";
+  else
+    return \"jr %0\";
+}"
+ [(set (attr "length")
+    (if_then_else (lt (abs (minus (match_dup 0) (pc)))
+                     (const_int 256))
+                 (const_int 2)
+                 (const_int 4)))
+  (set_attr "cc" "none")])
+
+(define_insn "indirect_jump"
+  [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
+  ""
+  "jmp %0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none")])
+
+(define_insn "tablejump"
+  [(set (pc) (match_operand:SI 0 "register_operand" "r"))
+   (use (label_ref (match_operand 1 "" "")))]
+  ""
+  "jmp  %0"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none")])
+
+;; Call subroutine with no return value.
+
+(define_expand "call"
+  [(call (match_operand:QI 0 "general_operand" "")
+        (match_operand:SI 1 "general_operand" ""))]
+  ""
+  "
+{
+  if (! call_address_operand (XEXP (operands[0], 0))
+      || TARGET_LONG_CALLS)
+    XEXP (operands[0], 0) = force_reg (SImode, XEXP (operands[0], 0));
+  emit_call_insn (gen_call_internal (XEXP (operands[0], 0), operands[1]));
+  DONE;
+}")
+
+(define_insn "call_internal"
+  [(call (mem:QI (match_operand:SI 0 "call_address_operand" "S,r"))
+        (match_operand:SI 1 "general_operand" "g,g"))
+   (clobber (reg:SI 31))]
+  ""
+  "@
+  jarl %0,r31
+  jarl .+4,r31\\n\\tadd 4,r31\\n\\tjmp %0"
+  [(set_attr "length" "4,8")])
+
+;; Call subroutine, returning value in operand 0
+;; (which must be a hard register).
+
+(define_expand "call_value"
+  [(set (match_operand 0 "" "")
+       (call (match_operand:QI 1 "general_operand" "")
+             (match_operand:SI 2 "general_operand" "")))]
+  ""
+  "
+{
+  if (! call_address_operand (XEXP (operands[1], 0))
+      || TARGET_LONG_CALLS)
+    XEXP (operands[1], 0) = force_reg (SImode, XEXP (operands[1], 0));
+  emit_call_insn (gen_call_value_internal (operands[0],
+                                          XEXP (operands[1], 0),
+                                          operands[2]));
+  DONE;
+}")
+
+(define_insn "call_value_internal"
+  [(set (match_operand 0 "" "=r,r")
+       (call (mem:QI (match_operand:SI 1 "call_address_operand" "S,r"))
+             (match_operand:SI 2 "general_operand" "g,g")))
+   (clobber (reg:SI 31))]
+  ""
+  "@
+  jarl %1,r31
+  jarl .+4,r31\\n\\tadd 4,r31\\n\\tjmp %1"
+  [(set_attr "length" "4,8")])
+
+(define_insn "nop"
+  [(const_int 0)]
+  ""
+  "nop"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none")])
+\f
+;; ----------------------------------------------------------------------
+;; EXTEND INSTRUCTIONS
+;; ----------------------------------------------------------------------
+
+
+(define_insn "zero_extendhisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI
+        (match_operand:HI 1 "register_operand" "r")))]
+  ""
+  "andi 65535,%1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "set_znv")])
+
+(define_insn "zero_extendqisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI
+        (match_operand:QI 1 "register_operand" "r")))]
+  ""
+  "andi 255,%1,%0"
+  [(set_attr "length" "4")
+   (set_attr "cc" "set_znv")])
+
+;;- sign extension instructions
+
+(define_expand "extendhisi2"
+  [(set (match_dup 2)
+        (ashift:SI (match_operand:HI 1 "register_operand" "")
+                   (const_int 16)))
+   (set (match_operand:SI 0 "register_operand" "")
+        (ashiftrt:SI (match_dup 2)
+                     (const_int 16)))]
+  ""
+  "
+{
+  operands[1] = gen_lowpart (SImode, operands[1]);
+  operands[2] = gen_reg_rtx (SImode);
+}")
+
+(define_expand "extendqisi2"
+  [(set (match_dup 2)
+        (ashift:SI (match_operand:QI 1 "register_operand" "")
+                   (const_int 24)))
+   (set (match_operand:SI 0 "register_operand" "")
+        (ashiftrt:SI (match_dup 2)
+                     (const_int 24)))]
+  ""
+  "
+{
+  operands[1] = gen_lowpart (SImode, operands[1]);
+  operands[2] = gen_reg_rtx (SImode);
+}")
+\f
+;; ----------------------------------------------------------------------
+;; SHIFTS
+;; ----------------------------------------------------------------------
+
+(define_insn "ashlsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (ashift:SI
+        (match_operand:SI 1 "register_operand" "0,0")
+        (match_operand:QI 2 "nonmemory_operand" "r,N")))]
+  ""
+  "@
+  shl %2,%0
+  shl %2,%0"
+  [(set_attr "length" "4,2")
+   (set_attr "cc" "set_znv")])
+
+(define_insn "lshrsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (lshiftrt:SI
+        (match_operand:SI 1 "register_operand" "0,0")
+        (match_operand:QI 2 "nonmemory_operand" "r,J")))]
+  ""
+  "@
+  shr %2,%0
+  shr %2,%0"
+  [(set_attr "length" "4,2")
+   (set_attr "cc" "set_znv")])
+
+(define_insn "ashrsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (ashiftrt:SI
+        (match_operand:SI 1 "register_operand" "0,0")
+        (match_operand:SI 2 "nonmemory_operand" "r,N")))]
+  ""
+  "@
+  sar %2,%0
+  sar %2,%0"
+  [(set_attr "length" "4,2")
+   (set_attr "cc" "set_znv")])
+
+;; ----------------------------------------------------------------------
+;; PROLOGUE/EPILOGUE
+;; ----------------------------------------------------------------------
+(define_expand "prologue"
+  [(const_int 0)]
+  ""
+  "expand_prologue (); DONE;")
+
+(define_expand "epilogue"
+  [(return)]
+  ""
+  "
+{
+  /* Try to use the trivial return first.  Else use the
+     full epilogue.  */
+  if (0)
+    emit_jump_insn (gen_return ());
+  else
+    expand_epilogue ();
+  DONE;
+}")
+
+(define_insn "return"
+  [(return)]
+  "reload_completed && compute_frame_size (get_frame_size (), (long *)0) == 0"
+  "jmp [r31]"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none")])
+
+(define_insn "return_internal"
+  [(return)
+   (use (reg:SI 31))]
+  ""
+  "jmp [r31]"
+  [(set_attr "length" "2")
+   (set_attr "cc" "none")])
+
+
+\f
+;; ----------------------------------------------------------------------
+;; HELPER INSTRUCTIONS for saving the prologue and epilog registers
+;; ----------------------------------------------------------------------
+
+;; Save r2, r20-r29, r31, and create 16 byte register call area
+(define_insn "save_r2_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -64)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 2))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 20))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -56))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -60))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r2_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r20-r29, r31, and create 16 byte register call area
+(define_insn "save_r20_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -60)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 20))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -56))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r20_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r21-r29, r31, and create 16 byte register call area
+(define_insn "save_r21_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -56)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r21_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r22-r29, r31, and create 16 byte register call area
+(define_insn "save_r22_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -52)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r22_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r23-r29, r31, and create 16 byte register call area
+(define_insn "save_r23_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -48)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r23_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r24-r29, r31, and create 16 byte register call area
+(define_insn "save_r24_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -44)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r24_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r25-r29, r31, and create 16 byte register call area
+(define_insn "save_r25_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -40)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r25_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r26-r29, r31, and create 16 byte register call area
+(define_insn "save_r26_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -36)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r26_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r27-r29, r31, and create 16 byte register call area
+(define_insn "save_r27_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -32)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r27_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r28-r29, r31, and create 16 byte register call area
+(define_insn "save_r28_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -28)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r28_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r29, r31, and create 16 byte register call area
+(define_insn "save_r29_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -24)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 29))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r29_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r31, and create 16 byte register call area
+(define_insn "save_r31"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -20)))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 31))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r31,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r2, r20-r29
+(define_insn "save_r2_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -44)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 2))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 20))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r2_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r20-r29
+(define_insn "save_r20_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -40)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 20))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r20_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r21-r29
+(define_insn "save_r21_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -36)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 21))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r21_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r22-r29
+(define_insn "save_r22_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -32)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 22))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r22_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r23-r29
+(define_insn "save_r23_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -28)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 23))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r23_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r24-r29
+(define_insn "save_r24_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -24)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 24))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r24_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r25-r29
+(define_insn "save_r25_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -20)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 25))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r25_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r26-r29
+(define_insn "save_r26_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -16)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 26))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r26_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r27-r29
+(define_insn "save_r27_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -12)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 27))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r27_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r28-r29
+(define_insn "save_r28_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -8)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 28))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r28_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r29
+(define_insn "save_r29"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -4)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 29))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r29,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Initialize an interrupt function.  Do not depend on TARGET_PROLOG_FUNCTION.
+(define_insn "save_interrupt"
+  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -16)))
+   (set (mem:SI (reg:SI 3)) (reg:SI 30))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 10))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 5))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 1))]
+  ""
+  "add -16,sp\;st.w r10,12[sp]\;jarl __save_interrupt,r10"
+  [(set_attr "length" "12")
+   (set_attr "cc" "clobber")])
+
+;; Save all registers except for the registers saved in save_interrupt when
+;; an interrupt function makes a call.
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
+;; all of memory.  This blocks insns from being moved across this point.
+;; This is needed because the rest of the compiler is not reading to handle
+;; insns this compilcated
+
+(define_insn "save_all_interrupt"
+  [(unspec_volatile [(const_int 0)] 0)]
+  ""
+  "jarl __save_all_interrupt,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r2, r20-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r2_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 64)))
+   (set (reg:SI 2) (mem:SI (plus:SI (reg:SI 3) (const_int 60))))
+   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 56))))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r2_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r20-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r20_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 60)))
+   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 56))))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r20_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r21-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r21_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 56)))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r21_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r22-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r22_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 52)))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r22_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r23-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r23_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 48)))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r23_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r24-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r24_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 44)))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r24_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r25-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r25_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 40)))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r25_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r26-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r26_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 36)))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r26_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r27-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r27_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 32)))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r27_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r28-r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r28_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 28)))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r28_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r29, r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r29_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 24)))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r29_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r31, eliminate 16 byte register call area, and return to user
+(define_insn "restore_r31"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 20)))
+   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r31"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r2, r20-r29, and return to user
+(define_insn "restore_r2_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 48)))
+   (set (reg:SI 2) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
+   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r2_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r20-r29, and return to user
+(define_insn "restore_r20_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 44)))
+   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r20_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r21-r29, and return to user
+(define_insn "restore_r21_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 40)))
+   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r21_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r22-r29, and return to user
+(define_insn "restore_r22_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 36)))
+   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r22_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r23-r29, and return to user
+(define_insn "restore_r23_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 32)))
+   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r23_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r24-r29, and return to user
+(define_insn "restore_r24_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 28)))
+   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r24_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r25-r29, and return to user
+(define_insn "restore_r25_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 24)))
+   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r25_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r26-r29, and return to user
+(define_insn "restore_r26_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 20)))
+   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r26_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r27-r29, and return to user
+(define_insn "restore_r27_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 16)))
+   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r27_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r28-r29, and return to user
+(define_insn "restore_r28_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 12)))
+   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r28_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r29, and return to user
+(define_insn "restore_r29"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 8)))
+   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
+  "TARGET_PROLOG_FUNCTION"
+  "jr __return_r29"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore r1, r5, r10, and return from the interrupt
+(define_insn "restore_interrupt"
+  [(return)
+   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 16)))
+   (set (reg:SI 30) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
+   (set (reg:SI 10) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
+   (set (reg:SI 5)  (mem:SI (plus:SI (reg:SI 3) (const_int 4))))
+   (set (reg:SI 1)  (mem:SI (reg:SI 3)))]
+  ""
+  "jr __return_interrupt"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Restore all registers saved when an interrupt function makes a call.
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
+;; all of memory.  This blocks insns from being moved across this point.
+;; This is needed because the rest of the compiler is not reading to handle
+;; insns this compilcated
+
+(define_insn "restore_all_interrupt"
+  [(unspec_volatile [(const_int 0)] 1)]
+  ""
+  "jarl __restore_all_interrupt,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+
+;; Save r6-r9 for a variable argument function
+(define_insn "save_r6_r9"
+  [(set (mem:SI (reg:SI 3)) (reg:SI 6))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int 4))) (reg:SI 7))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int 8))) (reg:SI 8))
+   (set (mem:SI (plus:SI (reg:SI 3) (const_int 12))) (reg:SI 9))
+   (clobber (reg:SI 10))]
+  "TARGET_PROLOG_FUNCTION"
+  "jarl __save_r6_r9,r10"
+  [(set_attr "length" "4")
+   (set_attr "cc" "clobber")])
+;; END CYGNUS LOCAL
similarity index 77%
rename from gcc/config/a29k/xm-unix.h
rename to gcc/config/v850/xm-v850.h
index 206d8fdc41d082475407abe46f87e329081eee09..2d67cf81788210c1fbe25ef48e186b17b52c24a9 100644 (file)
@@ -1,5 +1,7 @@
-/* Configuration for GNU C-compiler for AMD Am29000 processor. 
-   Copyright (C) 1987, 1988, 1993 Free Software Foundation, Inc.
+/* CYGNUS LOCAL entire file v850/law */
+/* Configuration for NEC V850. 
+   Copyright (C) 1996 Free Software Foundation, Inc.
+   Contributed by Cygnus Support.
 
 This file is part of GNU CC.
 
@@ -29,15 +31,21 @@ Boston, MA 02111-1307, USA.  */
 #define HOST_BITS_PER_LONG 32
 #define HOST_BITS_PER_LONGLONG 64
 
-#define HOST_WORDS_BIG_ENDIAN
-
-/* target machine dependencies.
-   tm.h is a symbolic link to the actual target specific file.   */
-#include "tm.h"
-
 /* Arguments to use with `exit'.  */
 #define SUCCESS_EXIT_CODE 0
 #define FATAL_EXIT_CODE 33
 
-/* Ultra is V7, which is closest to USG.  */
-#define USG
+#ifdef __v850__
+#ifndef __STDC__
+extern char *malloc (), *realloc (), *calloc ();
+#else
+extern void *malloc (), *realloc (), *calloc ();
+#endif
+extern void free ();
+#endif
+
+/* target machine dependencies.
+   tm.h is a symbolic link to the actual target specific file.   */
+
+#include "tm.h"
+/* END CYGNUS LOCAL */
diff --git a/gcc/config/vax/x-vax b/gcc/config/vax/x-vax
deleted file mode 100644 (file)
index bb58a6a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# If compiling GCC with the Unix assembler, -J will handle a large function.
-# With GAS, it should have no effect.
-X_CPPFLAGS = -J
diff --git a/gcc/config/vax/xm-vaxv.h b/gcc/config/vax/xm-vaxv.h
deleted file mode 100644 (file)
index 18a1d73..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Config file for Vax running system V.  */
-
-#define USG
-
-#define bcopy(a,b,c) memcpy (b,a,c)
-#define bzero(a,b) memset (a,0,b)
-#define bcmp(a,b,c) memcmp (a,b,c)
diff --git a/gcc/config/xm-alloca.h b/gcc/config/xm-alloca.h
new file mode 100644 (file)
index 0000000..3dbdc37
--- /dev/null
@@ -0,0 +1,4 @@
+/* If not compiled with GNU C, use the portable alloca.  */
+#ifndef __GNUC__
+#define USE_C_ALLOCA
+#endif
diff --git a/gcc/config/xm-freebsd.h b/gcc/config/xm-freebsd.h
deleted file mode 100644 (file)
index f73c9aa..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Configuration for GNU C-compiler for hosts running FreeBSD.
-   Copyright (C) 1994, 1995 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines machine-independent things specific to a host
-   running FreeBSD.  This file should not be specified as $xm_file itself;
-   instead $xm_file should be CPU/xm-freebsd.h, which should include both
-   CPU/xm-CPU.h and this file xm-freebsd.h.  */
-   
-/* FreeBSD has strerror.  */
-#define HAVE_STRERROR
-
-/* We have _sys_siglist, but the declaration in <signal.h> conflicts with
-   the declarations in collect2.c and mips-tfile.c, so disable the declarations
-   in those files.  */
-
-#define DONT_DECLARE_SYS_SIGLIST
diff --git a/gcc/config/xm-linux.h b/gcc/config/xm-linux.h
deleted file mode 100644 (file)
index 88b558c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Configuration for GCC for Intel i386 running Linux.
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
-   Contributed by H.J. Lu (hjl@nynexst.com)
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#undef  HAVE_VPRINTF
-#define HAVE_VPRINTF
-
-#undef  HAVE_STRERROR
-#define HAVE_STRERROR
-
-#undef  HAVE_POPEN
-#define HAVE_POPEN
-
-#undef  POSIX
-#define POSIX
-
-#undef  DONT_DECLARE_SYS_SIGLIST
-#define DONT_DECLARE_SYS_SIGLIST
-
-/* We do have one, but I'd like to use the one come with gcc since
-   we have been doing that for a long time with USG defined.  H.J. */
-#define NO_STAB_H
-
-#undef BSTRING
-#define BSTRING
-#undef bcmp
-#undef bcopy
-#undef bzero
-#undef index
-#undef rindex
diff --git a/gcc/config/xm-netbsd.h b/gcc/config/xm-netbsd.h
deleted file mode 100644 (file)
index 00000ce..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Configuration for GNU C-compiler for hosts running NetBSD.
-   Copyright (C) 1995 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines machine-independent things specific to a host
-   running NetBSD.  This file should not be specified as $xm_file itself;
-   instead $xm_file should be CPU/xm-netbsd.h, which should include both
-   CPU/xm-CPU.h and this file xm-netbsd.h.  */
-   
-#define HAVE_STRERROR
-#define HAVE_VPRINTF
diff --git a/gcc/config/xm-siglist.h b/gcc/config/xm-siglist.h
new file mode 100644 (file)
index 0000000..d6133d6
--- /dev/null
@@ -0,0 +1,6 @@
+/* Some systems provide no sys_siglist, but do offer the same data under
+   another name.  */
+
+#define sys_siglist _sys_siglist
+#undef SYS_SIGLIST_DECLARED
+#define SYS_SIGLIST_DECLARED
diff --git a/gcc/config/xm-std32.h b/gcc/config/xm-std32.h
new file mode 100644 (file)
index 0000000..c52782e
--- /dev/null
@@ -0,0 +1,34 @@
+/* Configuration for GNU C-compiler for standard 32-bit host machine.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* #defines that need visibility everywhere.  */
+#define FALSE 0
+#define TRUE 1
+
+/* This describes the machine the compiler is hosted on.  */
+#define HOST_BITS_PER_CHAR 8
+#define HOST_BITS_PER_SHORT 16
+#define HOST_BITS_PER_INT 32
+#define HOST_BITS_PER_LONG 32
+#define HOST_BITS_PER_LONGLONG 64
+
+/* Arguments to use with `exit'.  */
+#define SUCCESS_EXIT_CODE 0
+#define FATAL_EXIT_CODE 33
diff --git a/gcc/config/xm-svr4.h b/gcc/config/xm-svr4.h
deleted file mode 100644 (file)
index 3008432..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Configuration for GNU C-compiler for hosts running System V Release 4
-   Copyright (C) 1988 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#define bcopy(src,dst,len) memcpy ((dst),(src),(len))
-#define bzero(dst,len) memset ((dst),0,(len))
-#define bcmp(left,right,len) memcmp ((left),(right),(len))
-
-#define rindex strrchr
-#define index strchr
-
-#define USG
-#define HAVE_VPRINTF
-
-#define POSIX
-
-/* SVR4 provides no sys_siglist,
-   but does offer the same data under another name.  */
-#define sys_siglist _sys_siglist
diff --git a/gcc/configure b/gcc/configure
deleted file mode 100755 (executable)
index b318152..0000000
+++ /dev/null
@@ -1,4911 +0,0 @@
-#! /bin/sh
-
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12 
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
-  --with-gnu-ld           arrange to work with GNU ld."
-ac_help="$ac_help
-  --with-gnu-as           arrange to work with GNU as."
-ac_help="$ac_help
-  --with-stabs            arrange to use stabs instead of host debug format."
-ac_help="$ac_help
-  --with-elf              arrange to use ELF instead of host debug format."
-ac_help="$ac_help
-  --with-local-prefix=DIR specifies directory to put local include."
-ac_help="$ac_help
-  --with-gxx-include-dir=DIR
-                          specifies directory to put g++ header files."
-ac_help="$ac_help
-  --enable-c-cpplib       Use cpplib for C."
-ac_help="$ac_help
-  --enable-threads        enable thread usage for target GCC.
-  --enable-threads=LIB    use LIB thread package for target GCC."
-
-# Initialize some variables set by options.
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
-exec_prefix=NONE
-host=NONE
-no_create=
-nonopt=NONE
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-target=NONE
-verbose=
-x_includes=NONE
-x_libraries=NONE
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
-ac_prev=
-for ac_option
-do
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  case "$ac_option" in
-  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) ac_optarg= ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case "$ac_option" in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir="$ac_optarg" ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build="$ac_optarg" ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file="$ac_optarg" ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir="$ac_optarg" ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    eval "enable_${ac_feature}=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_${ac_feature}='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix="$ac_optarg" ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he)
-    # 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 << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
-  --cache-file=FILE       cache test results in FILE
-  --help                  print this message
-  --no-create             do not create output files
-  --quiet, --silent       do not print \`checking...' messages
-  --version               print the version of autoconf that created configure
-Directory and file names:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [same as prefix]
-  --bindir=DIR            user executables in DIR [EPREFIX/bin]
-  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
-  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
-  --datadir=DIR           read-only architecture-independent data in DIR
-                          [PREFIX/share]
-  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
-                          [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
-  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
-  --includedir=DIR        C header files in DIR [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
-  --infodir=DIR           info documentation in DIR [PREFIX/info]
-  --mandir=DIR            man documentation in DIR [PREFIX/man]
-  --srcdir=DIR            find the sources in DIR [configure dir or ..]
-  --program-prefix=PREFIX prepend PREFIX to installed program names
-  --program-suffix=SUFFIX append SUFFIX to installed program names
-  --program-transform-name=PROGRAM
-                          run sed PROGRAM on installed program names
-EOF
-    cat << EOF
-Host type:
-  --build=BUILD           configure for building on BUILD [BUILD=HOST]
-  --host=HOST             configure for HOST [guessed]
-  --target=TARGET         configure for TARGET [TARGET=HOST]
-Features and packages:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --x-includes=DIR        X include files are in DIR
-  --x-libraries=DIR       X library files are in DIR
-EOF
-    if test -n "$ac_help"; then
-      echo "--enable and --with options recognized:$ac_help"
-    fi
-    exit 0 ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host="$ac_optarg" ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir="$ac_optarg" ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir="$ac_optarg" ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir="$ac_optarg" ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir="$ac_optarg" ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir="$ac_optarg" ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir="$ac_optarg" ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir="$ac_optarg" ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix="$ac_optarg" ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix="$ac_optarg" ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix="$ac_optarg" ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name="$ac_optarg" ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir="$ac_optarg" ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir="$ac_optarg" ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site="$ac_optarg" ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir="$ac_optarg" ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir="$ac_optarg" ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target="$ac_optarg" ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.12"
-    exit 0 ;;
-
-  -with-* | --with-*)
-    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_${ac_package}='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
-    # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    eval "with_${ac_package}=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes="$ac_optarg" ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries="$ac_optarg" ;;
-
-  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
-    ;;
-
-  *)
-    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
-      echo "configure: warning: $ac_option: invalid host type" 1>&2
-    fi
-    if test "x$nonopt" != xNONE; then
-      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
-    fi
-    nonopt="$ac_option"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
-do
-  case "$ac_arg" in
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c) ;;
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
-  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
-  esac
-done
-
-# NLS nuisances.
-# Only set these to C if already set.  These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=tree.c
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_prog=$0
-  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
-  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
-  else
-    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
-  fi
-fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    echo "loading site script $ac_site_file"
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  echo "loading cache $cache_file"
-  . $cache_file
-else
-  echo "creating cache $cache_file"
-  > $cache_file
-fi
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='       '
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
-else
-  ac_n= ac_c='\c' ac_t=
-fi
-
-
-
-
-native_prefix=/usr
-remove=rm
-hard_link=ln
-symbolic_link='ln -s'
-copy=cp
-
-# Check for additional parameters
-
-# With GNU ld
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval="$with_gnu_ld"
-  gnu_ld=yes
-else
-  gnu_ld=no
-fi
-
-
-# With GNU as
-# Check whether --with-gnu-as or --without-gnu-as was given.
-if test "${with_gnu_as+set}" = set; then
-  withval="$with_gnu_as"
-  gas=yes
-else
-  gas=no
-fi
-
-
-# With stabs
-# Check whether --with-stabs or --without-stabs was given.
-if test "${with_stabs+set}" = set; then
-  withval="$with_stabs"
-  stabs=yes
-else
-  stabs=no
-fi
-
-
-# With ELF
-# Check whether --with-elf or --without-elf was given.
-if test "${with_elf+set}" = set; then
-  withval="$with_elf"
-  elf=yes
-else
-  elf=no
-fi
-
-
-# Specify the local prefix
-# Check whether --with-local-prefix or --without-local-prefix was given.
-if test "${with_local_prefix+set}" = set; then
-  withval="$with_local_prefix"
-  local_prefix=$with_local_prefix
-else
-  local_prefix=/usr/local
-fi
-
-
-# Default local prefix if it is empty
-if [ x$local_prefix = x ]; then
-       local_prefix=/usr/local
-fi
-
-# Specify the g++ header file directory
-# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
-if test "${with_gxx_include_dir+set}" = set; then
-  withval="$with_gxx_include_dir"
-  gxx_include_dir=$with_gxx_include_dir
-else
-  gxx_include_dir='${prefix}/include/g++'
-fi
-
-
-# Default g++ header file directory if it is empty
-if [ x$gxx_include_dir = x ]; then
-       gxx_include_dir='${prefix}/include/g++'
-fi
-
-# Enable use of cpplib for C.
-# Check whether --enable-c-cpplib or --disable-c-cpplib was given.
-if test "${enable_c_cpplib+set}" = set; then
-  enableval="$enable_c_cpplib"
-  if [ x$enable_c_cpplib != xno ]; then
-  extra_c_objs="${extra_c_objs} cpplib.o cppexp.o cpphash.o cpperror.o"
-  extra_c_flags=-DUSE_CPPLIB=1
-fi
-fi
-
-
-# Enable threads
-# Pass with no value to take the default
-# Pass with a value to specify a thread package
-# Check whether --enable-threads or --disable-threads was given.
-if test "${enable_threads+set}" = set; then
-  enableval="$enable_threads"
-  if [ x$enable_threads = xno ]; then
-       enable_threads=''
-fi
-else
-  enable_threads=''
-fi
-
-
-# Check if a valid thread package
-case x${enable_threads} in
-       x | xno)
-               # No threads
-               thread_file='single'
-               ;;
-       xyes)
-               # default
-               thread_file=''
-               ;;
-       xdecosf1 | xirix | xmach | xos2 | xposix | xpthreads | xsingle | \
-       xsolaris | xwin32)
-               thread_file=$enable_threads
-               ;;
-       *)
-               echo "$enable_threads is an unknown thread package" 1>&2
-               exit 1
-               ;;
-esac
-
-# Determine the host, build, and target systems
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
-
-
-# Do some error checking and defaulting for the host and target type.
-# The inputs are:
-#    configure --host=HOST --target=TARGET --build=BUILD NONOPT
-#
-# The rules are:
-# 1. You are not allowed to specify --host, --target, and nonopt at the
-#    same time.
-# 2. Host defaults to nonopt.
-# 3. If nonopt is not specified, then host defaults to the current host,
-#    as determined by config.guess.
-# 4. Target and build default to nonopt.
-# 5. If nonopt is not specified, then target and build default to host.
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-case $host---$target---$nonopt in
-NONE---*---* | *---NONE---* | *---*---NONE) ;;
-*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
-esac
-
-
-# Make sure we can run config.sub.
-if $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:713: checking host system type" >&5
-
-host_alias=$host
-case "$host_alias" in
-NONE)
-  case $nonopt in
-  NONE)
-    if host_alias=`$ac_config_guess`; then :
-    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-    fi ;;
-  *) host_alias=$nonopt ;;
-  esac ;;
-esac
-
-host=`$ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:734: checking target system type" >&5
-
-target_alias=$target
-case "$target_alias" in
-NONE)
-  case $nonopt in
-  NONE) target_alias=$host_alias ;;
-  *) target_alias=$nonopt ;;
-  esac ;;
-esac
-
-target=`$ac_config_sub $target_alias`
-target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$target" 1>&6
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:752: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
-  case $nonopt in
-  NONE) build_alias=$host_alias ;;
-  *) build_alias=$nonopt ;;
-  esac ;;
-esac
-
-build=`$ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
-
-test "$host_alias" != "$target_alias" &&
-  test "$program_prefix$program_suffix$program_transform_name" = \
-    NONENONEs,x,x, &&
-  program_prefix=${target_alias}-
-
-
-# Find some useful tools
-for ac_prog in mawk gawk nawk awk
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:781: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_AWK="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-AWK="$ac_cv_prog_AWK"
-if test -n "$AWK"; then
-  echo "$ac_t""$AWK" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-test -n "$AWK" && break
-done
-
-# Extract the first word of "flex", so it can be a program name with args.
-set dummy flex; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:812: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$LEX"; then
-  ac_cv_prog_LEX="$LEX" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_LEX="flex"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex"
-fi
-fi
-LEX="$ac_cv_prog_LEX"
-if test -n "$LEX"; then
-  echo "$ac_t""$LEX" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$LEXLIB"
-then
-  case "$LEX" in
-  flex*) ac_lib=fl ;;
-  *) ac_lib=l ;;
-  esac
-  echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:845: checking for yywrap in -l$ac_lib" >&5
-ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-l$ac_lib  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 853 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char yywrap();
-
-int main() {
-yywrap()
-; return 0; }
-EOF
-if { (eval echo configure:864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LEXLIB="-l$ac_lib"
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:887: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
-  rm -f conftestdata
-  ac_cv_prog_LN_S="ln -s"
-else
-  ac_cv_prog_LN_S=ln
-fi
-fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
-  echo "$ac_t""yes" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:910: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_RANLIB="ranlib"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
-  echo "$ac_t""$RANLIB" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-for ac_prog in 'bison -y' byacc
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:941: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_YACC="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-YACC="$ac_cv_prog_YACC"
-if test -n "$YACC"; then
-  echo "$ac_t""$YACC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-test -n "$YACC" && break
-done
-test -n "$YACC" || YACC="yacc"
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:981: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    # Account for people who put trailing slashes in PATH elements.
-    case "$ac_dir/" in
-    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
-    *)
-      # OSF1 and SCO ODT 3.0 have their own names for install.
-      for ac_prog in ginstall installbsd scoinst install; do
-        if test -f $ac_dir/$ac_prog; then
-         if test $ac_prog = install &&
-            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
-           # AIX install.  It has an incompatible calling convention.
-           # OSF/1 installbsd also uses dspmsg, but is usable.
-           :
-         else
-           ac_cv_path_install="$ac_dir/$ac_prog -c"
-           break 2
-         fi
-       fi
-      done
-      ;;
-    esac
-  done
-  IFS="$ac_save_IFS"
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL="$ac_cv_path_install"
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL="$ac_install_sh"
-  fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Find the native compiler
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1035: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1064: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  ac_prog_rejected=no
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-       continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# -gt 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    set dummy "$ac_dir/$ac_word" "$@"
-    shift
-    ac_cv_prog_CC="$@"
-  fi
-fi
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1112: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext <<EOF
-#line 1122 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:1126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
-  else
-    ac_cv_prog_cc_cross=yes
-  fi
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
-  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1146: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1151: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1160: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
-else
-  ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
-  ac_test_CFLAGS="${CFLAGS+set}"
-  ac_save_CFLAGS="$CFLAGS"
-  CFLAGS=
-  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1175: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
-  ac_cv_prog_cc_g=yes
-else
-  ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
-  if test "$ac_test_CFLAGS" = set; then
-    CFLAGS="$ac_save_CFLAGS"
-  elif test $ac_cv_prog_cc_g = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-O2"
-  fi
-else
-  GCC=
-  test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1203: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftestmake <<\EOF
-all:
-       @echo 'ac_maketemp="${MAKE}"'
-EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
-  eval ac_cv_prog_make_${ac_make}_set=yes
-else
-  eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftestmake
-fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  SET_MAKE=
-else
-  echo "$ac_t""no" 1>&6
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1231: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    # This must be in double quotes, not single quotes, because CPP may get
-  # substituted into the Makefile and "${CC-cc}" will confuse make.
-  CPP="${CC-cc} -E"
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp.
-  cat > conftest.$ac_ext <<EOF
-#line 1246 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -E -traditional-cpp"
-  cat > conftest.$ac_ext <<EOF
-#line 1263 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1269: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-  ac_cv_prog_CPP="$CPP"
-fi
-  CPP="$ac_cv_prog_CPP"
-else
-  ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-for ac_hdr in stddef.h string.h strings.h stdlib.h time.h unistd.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1295: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 1300 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1305: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-
-echo $ac_n "checking whether malloc must be declared""... $ac_c" 1>&6
-echo "configure:1333: checking whether malloc must be declared" >&5
-if eval "test \"`echo '$''{'gcc_cv_decl_needed_malloc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 1338 "configure"
-#include "confdefs.h"
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int main() {
-char *(*pfn) = (char *(*)) malloc
-; return 0; }
-EOF
-if { (eval echo configure:1359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  gcc_cv_decl_needed_malloc=no
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  gcc_cv_decl_needed_malloc=yes
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$gcc_cv_decl_needed_malloc" 1>&6
-if test $gcc_cv_decl_needed_malloc = yes; then
-  gcc_tr_decl=NEED_DECLARATION_`echo malloc | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $gcc_tr_decl 1
-EOF
-
-fi
-
-echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6
-echo "configure:1381: checking whether realloc must be declared" >&5
-if eval "test \"`echo '$''{'gcc_cv_decl_needed_realloc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 1386 "configure"
-#include "confdefs.h"
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int main() {
-char *(*pfn) = (char *(*)) realloc
-; return 0; }
-EOF
-if { (eval echo configure:1407: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  gcc_cv_decl_needed_realloc=no
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  gcc_cv_decl_needed_realloc=yes
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$gcc_cv_decl_needed_realloc" 1>&6
-if test $gcc_cv_decl_needed_realloc = yes; then
-  gcc_tr_decl=NEED_DECLARATION_`echo realloc | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $gcc_tr_decl 1
-EOF
-
-fi
-
-echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6
-echo "configure:1429: checking whether free must be declared" >&5
-if eval "test \"`echo '$''{'gcc_cv_decl_needed_free'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 1434 "configure"
-#include "confdefs.h"
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int main() {
-char *(*pfn) = (char *(*)) free
-; return 0; }
-EOF
-if { (eval echo configure:1455: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  gcc_cv_decl_needed_free=no
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  gcc_cv_decl_needed_free=yes
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$gcc_cv_decl_needed_free" 1>&6
-if test $gcc_cv_decl_needed_free = yes; then
-  gcc_tr_decl=NEED_DECLARATION_`echo free | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $gcc_tr_decl 1
-EOF
-
-fi
-
-
-# File extensions
-manext='.1'
-objext='.o'
-
-
-
-build_xm_file=
-build_broken_install=
-build_install_headers_dir=install-headers-tar
-build_exeext=
-host_xm_file=
-host_xmake_file=
-host_truncate_target=
-
-# Decode the host machine, then the target machine.
-# For the host machine, we save the xm_file variable as host_xm_file;
-# then we decode the target machine and forget everything else
-# that came from the host machine.
-for machine in $build $host $target; do
-
-       out_file=
-       xmake_file=
-       tmake_file=
-       extra_headers=
-       extra_passes=
-       extra_parts=
-       extra_programs=
-       extra_objs=
-       extra_host_objs=
-       extra_gcc_objs=
-       float_format=
-       # Set this to force installation and use of collect2.
-       use_collect2=
-       # Set this to override the default target model.
-       target_cpu_default=
-       # Set this to force use of install.sh.
-       broken_install=
-       # Set this to control which fixincludes program to use.
-       fixincludes=fixincludes
-       # Set this to control how the header file directory is installed.
-       install_headers_dir=install-headers-tar
-       # Set this to a non-empty list of args to pass to cpp if the target
-       # wants its .md file passed through cpp.
-       md_cppflags=
-       # Set this if directory names should be truncated to 14 characters.
-       truncate_target=
-       # Set this if gdb needs a dir command with `dirname $out_file`
-       gdb_needs_out_file_path=
-       # Set this if the build machine requires executables to have a
-       # file name suffix.
-       exeext=
-
-       # Set default cpu_type, tm_file and xm_file so it can be updated in
-       # each machine entry.
-       cpu_type=`echo $machine | sed 's/-.*$//'`
-       case $machine in
-       alpha*-*-*)
-               cpu_type=alpha
-               ;;
-       arm*-*-*)
-               cpu_type=arm
-               ;;
-       c*-convex-*)
-               cpu_type=convex
-               ;;
-       i[3456]86-*-*)
-               cpu_type=i386
-               ;;
-       hppa*-*-*)
-               cpu_type=pa
-               ;;
-       m68000-*-*)
-               cpu_type=m68k
-               ;;
-       mips*-*-*)
-               cpu_type=mips
-               ;;
-       powerpc*-*-*)
-               cpu_type=rs6000
-               ;;
-       pyramid-*-*)
-               cpu_type=pyr
-               ;;
-       sparc*-*-*)
-               cpu_type=sparc
-               ;;
-       esac
-
-       tm_file=${cpu_type}/${cpu_type}.h
-       xm_file=${cpu_type}/xm-${cpu_type}.h
-       
-       case $machine in
-       # Support site-specific machine types.
-       *local*)
-               cpu_type=`echo $machine | sed -e 's/-.*//'`
-               rest=`echo $machine | sed -e "s/$cpu_type-//"`
-               xm_file=${cpu_type}/xm-$rest.h
-               tm_file=${cpu_type}/$rest.h
-               if [ -f $srcdir/config/${cpu_type}/x-$rest ] ; \
-               then xmake_file=${cpu_type}/x-$rest; \
-               else true; \
-               fi
-               if [ -f $srcdir/config/${cpu_type}/t-$rest ] ; \
-               then tmake_file=${cpu_type}/t-$rest; \
-               else true; \
-               fi
-               ;;
-       1750a-*-*)
-               ;;
-       a29k-*-bsd* | a29k-*-sym1*)
-               tm_file="${tm_file} a29k/unix.h"
-               xm_file=a29k/xm-unix.h
-               xmake_file=a29k/x-unix
-               use_collect2=yes
-               ;;
-       a29k-*-udi | a29k-*-coff)
-               tm_file="${tm_file} dbxcoff.h a29k/udi.h"
-               tmake_file=a29k/t-a29kbare
-               ;;
-       a29k-*-vxworks*)
-               tm_file="${tm_file} dbxcoff.h a29k/udi.h a29k/vx29k.h"
-               tmake_file=a29k/t-vx29k
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       a29k-*-*)                       # Default a29k environment.
-               use_collect2=yes
-               ;;
-       alpha*-*-linux-gnuecoff*)
-               tm_file="${tm_file} alpha/linux.h"
-               xm_file="${xm_file} alpha/xm-linux.h"
-               target_cpu_default="MASK_GAS"
-               gas=no
-               xmake_file=none
-               fixincludes=Makefile.in
-               gas=yes gnu_ld=yes
-               ;;
-       alpha*-*-linux-gnu*)
-               tm_file="${tm_file} alpha/linux.h alpha/elf.h"
-               xm_file="${xm_file} alpha/xm-linux.h"
-               target_cpu_default="MASK_GAS"
-               gas=no
-               tmake_file="t-linux alpha/t-linux"
-               xmake_file=none
-               fixincludes=Makefile.in
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               gas=yes gnu_ld=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='posix'
-               fi
-               ;;
-       alpha*-dec-osf[456789]*)
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas != xyes ]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               broken_install=yes
-               use_collect2=yes
-               # Some versions of OSF4 (specifically X4.0-9 296.7) have
-               # a broken tar, so we use cpio instead.
-               case $machine in
-                 alpha*-dec-osf4*)
-                   install_headers_dir=install-headers-cpio
-                   ;;
-               esac
-               ;;
-       alpha*-dec-osf[23]*)
-               tm_file="${tm_file} alpha/osf2or3.h"
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas != xyes ]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               broken_install=yes
-               use_collect2=yes
-               ;;
-       alpha*-dec-osf1.2)
-               tm_file="${tm_file} alpha/osf12.h"
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas != xyes ]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               broken_install=yes
-               use_collect2=yes
-               ;;
-       alpha*-*-osf*)
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas != xyes ]
-               then
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               broken_install=yes
-               use_collect2=yes
-               ;;
-       alpha*-*-winnt3*)
-               tm_file="${tm_file} alpha/win-nt.h"
-               target_cpu_default=MASK_WINDOWS_NT
-               xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h"
-               tmake_file=t-libc-ok
-               xmake_file=winnt/x-winnt
-               extra_host_objs=oldnames.o
-               extra_gcc_objs="spawnv.o oldnames.o"
-               fixincludes=fixinc.winnt
-               if [ x$gnu_ld != xyes ]
-               then
-                       extra_programs=ld.exe
-               fi
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               ;;
-       alpha*-dec-vms*)
-               tm_file=alpha/vms.h
-               xm_file="${xm_file} alpha/xm-vms.h"
-               tmake_file=alpha/t-vms
-               fixincludes=Makefile.in
-               ;;
-       arm-*-coff* | armel-*-coff*)
-               tm_file=arm/coff.h
-               tmake_file=arm/t-bare
-               ;;
-       arm-*-riscix1.[01]*)            # Acorn RISC machine (early versions)
-               tm_file=arm/riscix1-1.h
-               use_collect2=yes
-               ;;
-       arm-*-riscix*)                  # Acorn RISC machine
-               if [ x$gas = xyes ]
-               then
-                   tm_file=arm/rix-gas.h
-               else
-                   tm_file=arm/riscix.h
-               fi
-               xmake_file=arm/x-riscix
-               tmake_file=arm/t-riscix
-               use_collect2=yes
-               ;;
-       arm-semi-aout | armel-semi-aout)
-               tm_file=arm/semi.h
-               tmake_file=arm/t-semi
-               fixincludes=Makefile.in # There is nothing to fix
-               ;;
-       arm-semi-aof | armel-semi-aof)
-               tm_file=arm/semiaof.h
-               tmake_file=arm/t-semiaof
-               fixincludes=Makefile.in # There is nothing to fix
-               ;;
-       arm-*-netbsd*)
-               tm_file=arm/netbsd.h
-               xm_file=arm/xm-netbsd.h
-               tmake_file=arm/t-netbsd
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               use_collect2=yes
-               ;;
-       arm-*-linux-gnuaout*)           # ARM Linux
-               cpu_type=arm
-               xm_file=arm/xm-linux.h
-               xmake_file=x-linux
-               tm_file=arm/linux-gas.h
-               tmake_file=arm/t-linux
-               fixincludes=Makefile.in
-               broken_install=yes
-               gnu_ld=yes
-               ;;
-       arm-*-aout)
-               tm_file=arm/aout.h
-               ;;
-       c1-convex-*)                    # Convex C1
-               target_cpu_default=1
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       c2-convex-*)                    # Convex C2
-               target_cpu_default=2
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       c32-convex-*)
-               target_cpu_default=4
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       c34-convex-*)
-               target_cpu_default=8
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       c38-convex-*)
-               target_cpu_default=16           
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       clipper-intergraph-clix*)
-               tm_file="${tm_file} svr3.h clipper/clix.h"
-               xm_file=clipper/xm-clix.h
-               xmake_file=clipper/x-clix
-               extra_headers=va-clipper.h
-               extra_parts="crtbegin.o crtend.o"
-               install_headers_dir=install-headers-cpio
-               broken_install=yes
-               ;;
-       dsp16xx-*)
-               ;;
-       elxsi-elxsi-*)
-               use_collect2=yes
-               ;;
-# This hasn't been upgraded to GCC 2.
-#      fx80-alliant-*)                 # Alliant FX/80
-#              ;;
-       h8300-*-*)
-               float_format=i32
-               ;;
-       hppa1.1-*-pro*)
-               tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h"
-               xm_file=pa/xm-papro.h
-               tmake_file=pa/t-pro
-               ;;
-       hppa1.1-*-osf*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-osf.h"
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       hppa1.1-*-rtems*)
-               tm_file="pa/pa-pro.h ${tm_file} pa/pa-pro-end.h libgloss.h pa/rtems.h"
-               xm_file=pa/xm-papro.h
-               tmake_file=pa/t-pro
-               ;;
-       hppa1.0-*-osf*)
-               tm_file="${tm_file} pa/pa-osf.h"
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       hppa1.1-*-bsd*)
-               target_cpu_default=1
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       hppa1.0-*-bsd*)
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       hppa1.0-*-hpux7*)
-               tm_file="pa/pa-oldas.h ${tm_file} pa/pa-hpux7.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.0-*-hpux8.0[0-2]*)
-               tm_file="${tm_file} pa/pa-hpux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               else
-                       tm_file="pa/pa-oldas.h ${tm_file}"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.1-*-hpux8.0[0-2]*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-hpux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               else
-                       tm_file="pa/pa-oldas.h ${tm_file}"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.1-*-hpux8*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-hpux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.0-*-hpux8*)
-               tm_file="${tm_file} pa/pa-hpux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.1-*-hpux10*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.0-*-hpux10*)
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux10.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.1-*-hpux*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.0-*-hpux*)
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hpux9.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.1-*-hiux*)
-               target_cpu_default=1
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa1.0-*-hiux*)
-               tm_file="${tm_file} pa/pa-hpux.h pa/pa-hiux.h"
-               xm_file=pa/xm-pahpux.h
-               xmake_file=pa/x-pa-hpux
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} pa/pa-gas.h"
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               ;;
-       hppa*-*-lites*)
-               target_cpu_default=1
-               use_collect2=yes
-               fixincludes=Makefile.in
-               ;;
-       i370-*-mvs*)
-               ;;
-       i[3456]86-ibm-aix*)             # IBM PS/2 running AIX
-                if [ x$gas = xyes ]
-               then
-                       tm_file=i386/aix386.h
-                       extra_parts="crtbegin.o crtend.o"
-                       tmake_file=i386/t-crtstuff
-               else
-                       tm_file=i386/aix386ng.h
-                       use_collect2=yes
-               fi
-               xm_file=i386/xm-aix.h
-               xmake_file=i386/x-aix
-               broken_install=yes
-               ;;
-       i486-ncr-sysv4*)                # NCR 3000 - i486 running system V.4
-               xm_file=i386/xm-sysv4.h
-               xmake_file=i386/x-ncr3000
-               if [ x$stabs = xyes -a x$gas = xyes ]
-               then
-                       tm_file=i386/sysv4gdb.h
-               else
-                       tm_file=i386/sysv4.h
-               fi
-               extra_parts="crtbegin.o crtend.o"
-               tmake_file=i386/t-crtpic
-               ;;
-       i[3456]86-next-*)
-               tm_file=i386/next.h
-               xm_file=i386/xm-next.h
-               tmake_file=i386/t-next
-               xmake_file=i386/x-next
-               extra_objs=nextstep.o
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='mach'
-               fi
-               ;;
-       i[3456]86-sequent-bsd*)                 # 80386 from Sequent
-               use_collect2=yes
-               if [ x$gas = xyes ]
-               then
-                       tm_file=i386/seq-gas.h
-               else
-                       tm_file=i386/sequent.h
-               fi
-               ;;
-       i[3456]86-sequent-ptx1*)
-               xm_file=i386/xm-sysv3.h
-               xmake_file=i386/x-sysv3
-               tm_file=i386/seq-sysv3.h
-               tmake_file=i386/t-crtstuff
-               fixincludes=fixinc.ptx
-               extra_parts="crtbegin.o crtend.o"
-               install_headers_dir=install-headers-cpio
-               broken_install=yes
-               ;;
-       i[3456]86-sequent-ptx2* | i[3456]86-sequent-sysv3*)
-               xm_file=i386/xm-sysv3.h
-               xmake_file=i386/x-sysv3
-               tm_file=i386/seq2-sysv3.h
-               tmake_file=i386/t-crtstuff
-               extra_parts="crtbegin.o crtend.o"
-               fixincludes=fixinc.ptx
-               install_headers_dir=install-headers-cpio
-               broken_install=yes
-               ;;
-       i[3456]86-sequent-ptx4* | i[3456]86-sequent-sysv4*)
-               xm_file=i386/xm-sysv4.h
-               xmake_file=x-svr4
-               tm_file=i386/ptx4-i.h
-               tmake_file=t-svr4
-               extra_parts="crtbegin.o crtend.o"
-               fixincludes=fixinc.ptx
-               install_headers_dir=install-headers-cpio
-               broken_install=yes
-               ;;
-       i386-sun-sunos*)                # Sun i386 roadrunner
-               xm_file=i386/xm-sun.h
-               tm_file=i386/sun.h
-               use_collect2=yes
-               ;;
-       i[3456]86-*-aout*)
-               tm_file=i386/i386-aout.h
-               tmake_file=i386/t-i386bare
-               ;;
-       i[3456]86-*-bsdi* | i[345]86-*-bsd386*)
-               tm_file=i386/bsd386.h
-               xm_file=i386/xm-bsd386.h
-#              tmake_file=t-libc-ok
-               ;;
-       i[3456]86-*-bsd*)
-               tm_file=i386/386bsd.h
-               xm_file=i386/xm-bsd386.h
-#              tmake_file=t-libc-ok
-# Next line turned off because both 386BSD and BSD/386 use GNU ld.
-#              use_collect2=yes
-               ;;
-       i[3456]86-*-freebsdelf*)
-               tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h"
-               xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
-               tmake_file=i386/t-freebsd
-               gas=yes
-               gnu_ld=yes
-               stabs=yes
-               ;;
-       i[3456]86-*-freebsd*)
-               tm_file=i386/freebsd.h
-               xm_file=i386/xm-freebsd.h
-               # On FreeBSD, the headers are already ok.
-               fixincludes=Makefile.in
-               tmake_file=i386/t-freebsd
-               ;;
-       i[3456]86-*-netbsd*)
-               tm_file=i386/netbsd.h
-               xm_file=i386/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               ;;
-       i[3456]86-*-coff*)
-               tm_file=i386/i386-coff.h
-               tmake_file=i386/t-i386bare
-               ;;
-       i[3456]86-*-isc*)               # 80386 running ISC system
-               xm_file=i386/xm-isc.h
-               case $machine in
-                 i[345]86-*-isc[34]*)
-                   xmake_file=i386/x-isc3
-                   ;;
-                 *)
-                   xmake_file=i386/x-isc
-                   ;;
-               esac
-                if [ x$gas = xyes -a x$stabs = xyes ]
-               then
-                       tm_file=i386/iscdbx.h
-                       tmake_file=i386/t-svr3dbx
-                       extra_parts="svr3.ifile svr3z.ifile"
-               else
-                       tm_file=i386/isccoff.h
-                       tmake_file=i386/t-crtstuff
-                       extra_parts="crtbegin.o crtend.o"
-               fi
-               install_headers_dir=install-headers-cpio
-               broken_install=yes
-               ;;
-       i[3456]86-*-linux-gnuoldld*)    # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers
-               xmake_file=x-linux-aout
-               tmake_file="t-linux-aout i386/t-crtstuff"
-               tm_file=i386/linux-oldld.h
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               ;;
-       i[3456]86-*-linux-gnuaout*)             # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h         # with a.out format
-               xmake_file=x-linux-aout
-               tmake_file="t-linux-aout i386/t-crtstuff"
-               tm_file=i386/linux-aout.h
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               ;;
-       i[3456]86-*-linux-gnulibc1)
-               xm_file=i386/xm-linux.h # Intel 80386's running Linux
-               xmake_file=x-linux      # with ELF format using the
-               tm_file=i386/linux.h    # Linux C library 5
-               tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='single'
-               fi
-               ;;
-       i[3456]86-*-linux-gnu*)         # Intel 80386's running Linux
-               xm_file=i386/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux      # aka Linux C library 6
-               tm_file=i386/linux.h
-               tmake_file="t-linux i386/t-crtstuff"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='posix'
-               fi
-               ;;
-       i[3456]86-*-gnu*)
-               ;;
-       i[3456]86-go32-msdos | i[3456]86-*-go32*)
-               xm_file=i386/xm-go32.h
-               tm_file=i386/go32.h
-               tmake_file=i386/t-go32
-               ;;
-       i[3456]86-moss-msdos* | i[3456]86-*-moss*)
-               tm_file=i386/moss.h
-               tmake_file=t-libc-ok
-               fixincludes=Makefile.in
-               gnu_ld=yes
-               gas=yes
-               ;;
-       i[3456]86-*-lynxos*)
-               if [ x$gas = xyes ]
-               then
-                       tm_file=i386/lynx.h
-               else
-                       tm_file=i386/lynx-ng.h
-               fi
-               xm_file=i386/xm-lynx.h
-               tmake_file=i386/t-i386bare
-               xmake_file=x-lynx
-               ;;
-       i[3456]86-*-mach*)
-               tm_file=i386/mach.h
-#              tmake_file=t-libc-ok
-               use_collect2=yes
-               ;;
-       i[3456]86-*-osfrose*)           # 386 using OSF/rose
-                if [ x$elf = xyes ]
-               then
-                       tm_file=i386/osfelf.h
-                       use_collect2=
-               else
-                       tm_file=i386/osfrose.h
-                       use_collect2=yes
-               fi
-               xm_file=i386/xm-osf.h
-               xmake_file=i386/x-osfrose
-               tmake_file=i386/t-osf
-               extra_objs=halfpic.o
-               ;;
-       i[345]86-go32-rtems*)
-               cpu_type=i386
-               xm_file=i386/xm-go32.h
-               tm_file=i386/go32-rtems.h
-               tmake_file="i386/t-go32 t-rtems"
-               ;;
-       i[345]86-*-rtems*)
-               cpu_type=i386
-               tm_file=i386/rtems.h
-               tmake_file="i386/t-i386bare t-rtems"
-               ;;
-       i[3456]86-*-sco3.2v5*)          # 80386 running SCO Open Server 5
-               xm_file=i386/xm-sco5.h
-               xmake_file=i386/x-sco5
-               fixincludes=fixinc.sco
-               broken_install=yes
-               tm_file=i386/sco5.h
-               tmake_file=i386/t-sco5
-               extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
-               ;;
-       i[3456]86-*-sco3.2v4*)          # 80386 running SCO 3.2v4 system
-               xm_file=i386/xm-sco.h
-               xmake_file=i386/x-sco4
-               fixincludes=fixinc.sco
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-                if [ x$stabs = xyes ]
-               then
-                       tm_file=i386/sco4dbx.h
-                       tmake_file=i386/t-svr3dbx
-                       extra_parts="svr3.ifile svr3z.rfile"
-               else
-                       tm_file=i386/sco4.h
-                       tmake_file=i386/t-crtstuff
-                       extra_parts="crtbegin.o crtend.o"
-               fi
-               truncate_target=yes
-               ;;
-       i[3456]86-*-sco*)               # 80386 running SCO system
-               xm_file=i386/xm-sco.h
-               xmake_file=i386/x-sco
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-                if [ x$stabs = xyes ]
-               then
-                       tm_file=i386/scodbx.h
-                       tmake_file=i386/t-svr3dbx
-                       extra_parts="svr3.ifile svr3z.rfile"
-               else
-                       tm_file=i386/sco.h
-                       extra_parts="crtbegin.o crtend.o"
-                       tmake_file=i386/t-crtstuff
-               fi
-               truncate_target=yes
-               ;;
-       i[3456]86-*-solaris2*)
-               xm_file=i386/xm-sysv4.h
-               if [ x$stabs = xyes ]
-               then
-                       tm_file=i386/sol2dbg.h
-               else
-                       tm_file=i386/sol2.h
-               fi
-               tmake_file=i386/t-sol2
-               extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o"
-               xmake_file=x-svr4
-               fixincludes=fixinc.svr4
-               broken_install=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='solaris'
-               fi
-               ;;
-       i[3456]86-*-sysv4*)             # Intel 80386's running system V.4
-               xm_file=i386/xm-sysv4.h
-               tm_file=i386/sysv4.h
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               tmake_file=i386/t-crtpic
-               xmake_file=x-svr4
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       i[3456]86-*-sysv*)              # Intel 80386's running system V
-               xm_file=i386/xm-sysv3.h
-               xmake_file=i386/x-sysv3
-               if [ x$gas = xyes ]
-               then
-                       if [ x$stabs = xyes ]
-                       then
-                               tm_file=i386/svr3dbx.h
-                               tmake_file=i386/t-svr3dbx
-                               extra_parts="svr3.ifile svr3z.rfile"
-                       else
-                               tm_file=i386/svr3gas.h
-                               extra_parts="crtbegin.o crtend.o"
-                               tmake_file=i386/t-crtstuff
-                       fi
-               else
-                       tm_file=i386/sysv3.h
-                       extra_parts="crtbegin.o crtend.o"
-                       tmake_file=i386/t-crtstuff
-               fi
-               ;;
-       i386-*-vsta)                    # Intel 80386's running VSTa kernel
-               xm_file=i386/xm-vsta.h
-               tm_file=i386/vsta.h
-               tmake_file=i386/t-vsta
-               xmake_file=i386/x-vsta
-               ;;
-       i[3456]86-*-pe | i[3456]86-*-cygwin32)
-               xm_file="${xm_file} i386/xm-cygwin32.h"
-               tmake_file=i386/t-cygwin32
-               tm_file=i386/cygwin32.h
-               xmake_file=i386/x-cygwin32
-               extra_objs=winnt.o
-               fixincludes=Makefile.in
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               exeext=.exe
-               ;;
-       i[3456]86-*-mingw32)
-               tm_file=i386/mingw32.h
-               xm_file="${xm_file} i386/xm-mingw32.h"
-               tmake_file=i386/t-cygwin32
-               extra_objs=winnt.o
-               xmake_file=i386/x-cygwin32
-               fixincludes=Makefile.in
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               exeext=.exe
-               ;;
-       i[3456]86-*-winnt3*)
-               tm_file=i386/win-nt.h
-               out_file=i386/i386.c
-               xm_file=i386/xm-winnt.h
-               xmake_file=winnt/x-winnt
-               tmake_file=i386/t-winnt
-               extra_host_objs="winnt.o oldnames.o"
-               extra_gcc_objs="spawnv.o oldnames.o"
-               fixincludes=fixinc.winnt
-               if [ x$gnu_ld != xyes ]
-               then
-                       extra_programs=ld.exe
-               fi
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               ;;
-       i[3456]86-dg-dgux)
-               xm_file=i386/xm-dgux.h
-               out_file=i386/dgux.c
-               tm_file=i386/dgux.h
-               tmake_file=i386/t-dgux
-               xmake_file=i386/x-dgux
-               fixincludes=fixinc.dgux
-               install_headers_dir=install-headers-cpio
-              ;;
-       i860-alliant-*)         # Alliant FX/2800
-               tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h"
-               xm_file="${xm_file} i860/xm-fx2800.h"
-               xmake_file=i860/x-fx2800
-               tmake_file=i860/t-fx2800
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       i860-*-bsd*)
-               tm_file="${tm_file} i860/bsd.h"
-               if [ x$gas = xyes ]
-               then
-                       tm_file="${tm_file} i860/bsd-gas.h"
-               fi
-               use_collect2=yes
-               ;;
-       i860-*-mach*)
-               tm_file="${tm_file} i860/mach.h"
-               tmake_file=t-libc-ok
-               ;;
-       i860-*-osf*)                    # Intel Paragon XP/S, OSF/1AD
-               tm_file="${tm_file} svr3.h i860/paragon.h"
-               xm_file="${xm_file} xm-svr3.h"
-               tmake_file=t-osf
-               broken_install=yes
-               ;;
-       i860-*-sysv3*)
-               tm_file="${tm_file} svr3.h i860/sysv3.h"
-               xm_file="${tm_file} xm-svr3.h"
-               xmake_file=i860/x-sysv3
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       i860-*-sysv4*)
-               tm_file="${tm_file} svr4.h i860/sysv4.h"
-               xm_file="${xm_file} xm-svr3.h"
-               xmake_file=i860/x-sysv4
-               tmake_file=t-svr4
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       i960-wrs-vxworks5 | i960-wrs-vxworks5.0*)
-               tm_file="${tm_file} i960/vx960.h"
-               tmake_file=i960/t-vxworks960
-               use_collect2=yes
-               ;;
-       i960-wrs-vxworks5*)
-               tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h"
-               tmake_file=i960/t-vxworks960
-               use_collect2=yes
-               ;;
-       i960-wrs-vxworks*)
-               tm_file="${tm_file} i960/vx960.h"
-               tmake_file=i960/t-vxworks960
-               use_collect2=yes
-               ;;
-       i960-*-coff*)
-               tm_file="${tm_file} dbxcoff.h i960/i960-coff.h libgloss.h"
-               tmake_file=i960/t-960bare
-               use_collect2=yes
-               ;;
-       i960-*-rtems)
-               tmake_file="i960/t-960bare t-rtems"
-               tm_file="${tm_file} dbxcoff.h i960/rtems.h"
-               use_collect2=yes
-               ;;
-       i960-*-*)                       # Default i960 environment.
-               use_collect2=yes
-               ;;
-       m32r-*-elf*)
-               extra_parts="crtinit.o crtfini.o"
-               ;;
-       m68000-convergent-sysv*)
-               tm_file=m68k/ctix.h
-               xm_file=m68k/xm-3b1.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68000-hp-bsd*)                 # HP 9000/200 running BSD
-               tm_file=m68k/hp2bsd.h
-               xmake_file=m68k/x-hp2bsd
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68000-hp-hpux*)                # HP 9000 series 300
-               xm_file=m68k/xm-hp320.h
-               if [ x$gas = xyes ]
-               then
-                       xmake_file=m68k/x-hp320g
-                       tm_file=m68k/hp310g.h
-               else
-                       xmake_file=m68k/x-hp320
-                       tm_file=m68k/hp310.h
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68000-sun-sunos3*)
-               tm_file=m68k/sun2.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68000-sun-sunos4*)
-               tm_file=m68k/sun2o4.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68000-att-sysv*)
-               xm_file=m68k/xm-3b1.h
-               if [ x$gas = xyes ]
-               then
-                       tm_file=m68k/3b1g.h
-               else
-                       tm_file=m68k/3b1.h
-               fi
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-apple-aux*)                # Apple Macintosh running A/UX
-               xm_file=m68k/xm-aux.h
-               tmake_file=m68k/t-aux
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               extra_headers=math-68881.h
-               extra_parts="crt1.o mcrt1.o maccrt1.o crt2.o crtn.o"
-               tm_file=
-               if [ "$gnu_ld" = yes ]
-               then
-                       tm_file="${tm_file} m68k/auxgld.h"
-               else
-                       tm_file="${tm_file} m68k/auxld.h"
-               fi
-               if [ "$gas" = yes ]
-               then
-                       tm_file="${tm_file} m68k/auxgas.h"
-               else
-                       tm_file="${tm_file} m68k/auxas.h"
-               fi
-               tm_file="${tm_file} m68k/a-ux.h"
-               ;;
-       m68k-apollo-*)
-               tm_file=m68k/apollo68.h
-               xmake_file=m68k/x-apollo68
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-altos-sysv*)                  # Altos 3068
-               if [ x$gas = xyes ]
-               then
-                       tm_file=m68k/altos3068.h
-                       xm_file=m68k/xm-altos3068.h
-               else
-                       echo "The Altos is supported only with the GNU assembler" 1>&2
-                       exit 1
-               fi
-               extra_headers=math-68881.h
-               ;;
-       m68k-bull-sysv*)                # Bull DPX/2
-               if [ x$gas = xyes ]
-               then
-                       if [ x$stabs = xyes ]
-                       then
-                               tm_file=m68k/dpx2cdbx.h
-                       else
-                               tm_file=m68k/dpx2g.h
-                       fi
-               else
-                       tm_file=m68k/dpx2.h
-               fi
-               xm_file=m68k/xm-m68kv.h
-               xmake_file=m68k/x-dpx2
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-atari-sysv4*)              # Atari variant of V.4.
-               tm_file=m68k/atari.h
-               xm_file=m68k/xm-atari.h
-               tmake_file=t-svr4
-               extra_parts="crtbegin.o crtend.o"
-               extra_headers=math-68881.h
-               ;;
-       m68k-motorola-sysv*)
-               tm_file=m68k/mot3300.h
-               xm_file=m68k/xm-mot3300.h
-               if [ x$gas = xyes ]
-               then
-                       xmake_file=m68k/x-mot3300-gas
-                       if [ x$gnu_ld = xyes ]
-                       then
-                               tmake_file=m68k/t-mot3300-gald
-                       else
-                               tmake_file=m68k/t-mot3300-gas
-                               use_collect2=yes
-                       fi
-               else
-                       xmake_file=m68k/x-mot3300
-                       if [ x$gnu_ld = xyes ]
-                       then
-                               tmake_file=m68k/t-mot3300-gld
-                       else
-                               tmake_file=m68k/t-mot3300
-                               use_collect2=yes
-                       fi
-               fi
-               gdb_needs_out_file_path=yes
-               extra_parts="crt0.o mcrt0.o"
-               extra_headers=math-68881.h
-               ;;
-       m68k-ncr-sysv*)                 # NCR Tower 32 SVR3
-               tm_file=m68k/tower-as.h
-               xm_file=m68k/xm-tower.h
-               xmake_file=m68k/x-tower
-               extra_parts="crtbegin.o crtend.o"
-               extra_headers=math-68881.h
-               ;;
-        m68k-plexus-sysv*)
-               tm_file=m68k/plexus.h
-               xm_file=m68k/xm-plexus.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-tti-*)
-               tm_file=m68k/pbb.h
-               xm_file=m68k/xm-m68kv.h
-               extra_headers=math-68881.h
-               ;;
-       m68k-crds-unos*)
-               xm_file=m68k/xm-crds.h
-               xmake_file=m68k/x-crds
-               tm_file=m68k/crds.h
-               broken_install=yes
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-cbm-sysv4*)                # Commodore variant of V.4.
-               tm_file=m68k/amix.h
-               xm_file=m68k/xm-amix.h
-               xmake_file=m68k/x-amix
-               tmake_file=t-svr4
-               extra_parts="crtbegin.o crtend.o"
-               extra_headers=math-68881.h
-               ;;
-       m68k-ccur-rtu)
-               tm_file=m68k/ccur-GAS.h
-               xmake_file=m68k/x-ccur
-               extra_headers=math-68881.h
-               use_collect2=yes
-               broken_install=yes
-               ;;
-       m68k-hp-bsd4.4*)                # HP 9000/3xx running 4.4bsd
-               tm_file=m68k/hp3bsd44.h
-               xmake_file=m68k/x-hp3bsd44
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-hp-bsd*)                   # HP 9000/3xx running Berkeley Unix
-               tm_file=m68k/hp3bsd.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-isi-bsd*)
-               if [ x$with_fp = xno ]
-               then
-                       tm_file=m68k/isi-nfp.h
-               else
-                       tm_file=m68k/isi.h
-               fi
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-hp-hpux7*) # HP 9000 series 300 running HPUX version 7.
-               xm_file=m68k/xm-hp320.h
-               if [ x$gas = xyes ]
-               then
-                       xmake_file=m68k/x-hp320g
-                       tm_file=m68k/hp320g.h
-               else
-                       xmake_file=m68k/x-hp320
-                       tm_file=m68k/hpux7.h
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-hp-hpux*)  # HP 9000 series 300
-               xm_file=m68k/xm-hp320.h
-               if [ x$gas = xyes ]
-               then
-                       xmake_file=m68k/x-hp320g
-                       tm_file=m68k/hp320g.h
-               else
-                       xmake_file=m68k/x-hp320
-                       tm_file=m68k/hp320.h
-               fi
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-sun-mach*)
-               tm_file=m68k/sun3mach.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-sony-newsos3*)
-               if [ x$gas = xyes ]
-               then
-                       tm_file=m68k/news3gas.h
-               else
-                       tm_file=m68k/news3.h
-               fi
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-sony-bsd* | m68k-sony-newsos*)
-               if [ x$gas = xyes ]
-               then
-                       tm_file=m68k/newsgas.h
-               else
-                       tm_file=m68k/news.h
-               fi
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-next-nextstep2*)
-               tm_file=m68k/next21.h
-               xm_file=m68k/xm-next.h
-               tmake_file=m68k/t-next
-               xmake_file=m68k/x-next
-               extra_objs=nextstep.o
-               extra_headers=math-68881.h
-               use_collect2=yes
-                ;;
-       m68k-next-nextstep3*)
-               tm_file=m68k/next.h
-               xm_file=m68k/xm-next.h
-               tmake_file=m68k/t-next
-               xmake_file=m68k/x-next
-               extra_objs=nextstep.o
-               extra_headers=math-68881.h
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='mach'
-               fi
-               ;;
-       m68k-sun-sunos3*)
-               if [ x$with_fp = xno ]
-               then
-                       tm_file=m68k/sun3n3.h
-               else
-                       tm_file=m68k/sun3o3.h
-               fi
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-sun-sunos*)                        # For SunOS 4 (the default).
-               if [ x$with_fp = xno ]
-               then
-                       tm_file=m68k/sun3n.h
-               else
-                       tm_file=m68k/sun3.h
-               fi
-               xm_file=m68k/xm-sun3.h
-               use_collect2=yes
-               extra_headers=math-68881.h
-               ;;
-       m68k-wrs-vxworks*)
-               tm_file=m68k/vxm68k.h
-               tmake_file=m68k/t-vxworks68
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-aout*)
-               tmake_file=m68k/t-m68kbare
-               tm_file="m68k/m68k-aout.h libgloss.h"
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-coff*)
-               tmake_file=m68k/t-m68kbare
-               tm_file="m68k/m68k-coff.h dbx.h libgloss.h"
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-lynxos*)
-               if [ x$gas = xyes ]
-               then
-                       tm_file=m68k/lynx.h
-               else
-                       tm_file=m68k/lynx-ng.h
-               fi
-               xm_file=m68k/xm-lynx.h
-               xmake_file=x-lynx
-               tmake_file=m68k/t-lynx
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-netbsd*)
-               tm_file=m68k/netbsd.h
-               xm_file=m68k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               ;;
-       m68k-*-sysv3*)                  # Motorola m68k's running system V.3
-               xm_file=m68k/xm-m68kv.h
-               xmake_file=m68k/x-m68kv
-               extra_parts="crtbegin.o crtend.o"
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-sysv4*)                  # Motorola m68k's running system V.4
-               tm_file=m68k/m68kv4.h
-               xm_file=m68k/xm-m68kv.h
-               tmake_file=t-svr4
-               extra_parts="crtbegin.o crtend.o"
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-linux-gnuaout*)          # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with a.out format
-               xmake_file=x-linux
-               tm_file=m68k/linux-aout.h
-               tmake_file="t-linux-aout m68k/t-linux-aout"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               extra_headers=math-68881.h
-               gnu_ld=yes
-               ;;
-       m68k-*-linux-gnulibc1)          # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with ELF format using the
-               xmake_file=x-linux      # Linux C library 5
-               tm_file=m68k/linux.h
-               tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               extra_headers=math-68881.h
-               gnu_ld=yes
-               ;;
-       m68k-*-linux-gnu*)                      # Motorola m68k's running Linux
-               xm_file=m68k/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux      # aka the Linux C library 6.
-               tm_file=m68k/linux.h
-               tmake_file="t-linux m68k/t-linux"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               extra_headers=math-68881.h
-               gnu_ld=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='posix'
-               fi
-               ;;
-       m68k-*-psos*)
-               tmake_file=m68k/t-m68kbare
-               tm_file=m68k/m68k-psos.h
-               extra_headers=math-68881.h
-               ;;
-       m68k-*-rtems*)
-               tmake_file="m68k/t-m68kbare t-rtems"
-               tm_file=m68k/rtems.h
-               extra_headers=math-68881.h
-               ;;
-
-       m88k-dg-dgux*)
-               case $machine in
-                 m88k-dg-dguxbcs*)
-                   tm_file=m88k/dguxbcs.h
-                   tmake_file=m88k/t-dguxbcs
-                   ;;
-                 *)
-                   tm_file=m88k/dgux.h
-                   tmake_file=m88k/t-dgux
-                   ;;
-               esac
-               extra_parts="crtbegin.o bcscrtbegin.o crtend.o m88kdgux.ld"
-               broken_install=yes
-               xmake_file=m88k/x-dgux
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=m88k/t-dgux-gas
-               fi
-               fixincludes=fixinc.dgux
-               ;;
-       m88k-dolphin-sysv3*)
-               tm_file=m88k/dolph.h
-               extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
-               xmake_file=m88k/x-dolph
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=m88k/t-m88k-gas
-               fi
-               ;;
-       m88k-tektronix-sysv3)
-               tm_file=m88k/tekXD88.h
-               extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
-               xmake_file=m88k/x-tekXD88
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=m88k/t-m88k-gas
-               fi
-               ;;
-       m88k-*-aout*)
-               tm_file=m88k/m88k-aout.h
-               ;;
-       m88k-*-coff*)
-               tm_file=m88k/m88k-coff.h
-               tmake_file=m88k/t-bug
-               ;;
-       m88k-*-luna*)
-               tm_file=m88k/luna.h
-               extra_parts="crtbegin.o crtend.o"
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=m88k/t-luna-gas
-               else
-                       tmake_file=m88k/t-luna
-               fi
-               ;;
-       m88k-*-sysv3*)
-               tm_file=m88k/sysv3.h
-               extra_parts="crtbegin.o crtend.o"
-               xm_file=m88k/xm-sysv3.h
-               xmake_file=m88k/x-sysv3
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=m88k/t-m88k-gas
-               fi
-               ;;
-       m88k-*-sysv4*)
-               tm_file=m88k/sysv4.h
-               extra_parts="crtbegin.o crtend.o"
-               xmake_file=m88k/x-sysv4
-               tmake_file=m88k/t-sysv4
-               ;;
-       mips-sgi-irix6*)                # SGI System V.4., IRIX 6
-               tm_file=mips/iris6.h
-               xm_file=mips/xm-iris6.h
-               broken_install=yes
-               fixincludes=fixinc.irix
-               xmake_file=mips/x-iris6
-               tmake_file=mips/t-iris6
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='irix'
-               fi
-               ;;
-       mips-sgi-irix5cross64)          # Irix5 host, Irix 6 target, cross64
-               tm_file=mips/cross64.h
-               xm_file=mips/xm-iris5.h
-               broken_install=yes
-               fixincludes=Makefile.in
-               xmake_file=mips/x-iris
-               tmake_file=mips/t-cross64
-               # See comment in mips/iris[56].h files.
-               use_collect2=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='irix'
-               fi
-               ;;
-        mips-sni-sysv4)
-               if [ x$gas = xyes ]
-               then
-                       if [ x$stabs = xyes ]
-                       then
-                               tm_file=mips/iris5gdb.h
-                       else
-                               tm_file=mips/sni-gas.h
-                       fi
-               else
-                       tm_file=mips/sni-svr4.h
-               fi
-                xm_file=mips/xm-sysv.h
-                xmake_file=mips/x-sni-svr4
-                tmake_file=mips/t-mips-gas
-                if [ x$gnu_ld != xyes ]
-                then
-                        use_collect2=yes
-                fi
-                broken_install=yes
-                ;;
-       mips-sgi-irix5*)                # SGI System V.4., IRIX 5
-               if [ x$gas = xyes ]
-               then
-                       tm_file=mips/iris5gas.h
-                       if [ x$stabs = xyes ]
-                       then
-                               tm_file="${tm_file} dbx.h"
-                       fi
-               else
-                       tm_file=mips/iris5.h
-               fi
-               xm_file=mips/xm-iris5.h
-               broken_install=yes
-               fixincludes=fixinc.irix
-               xmake_file=mips/x-iris
-               # mips-tfile doesn't work yet
-               tmake_file=mips/t-mips-gas
-               # See comment in mips/iris5.h file.
-               use_collect2=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='irix'
-               fi
-               ;;
-       mips-sgi-irix4loser*)           # Mostly like a MIPS.
-               tm_file=mips/iris4loser.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-iris4.h
-               broken_install=yes
-               xmake_file=mips/x-iris
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='irix'
-               fi
-               ;;
-       mips-sgi-irix4*)                # Mostly like a MIPS.
-               tm_file=mips/iris4.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-iris4.h
-               broken_install=yes
-               xmake_file=mips/x-iris
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='irix'
-               fi
-               ;;
-       mips-sgi-*)                     # Mostly like a MIPS.
-               tm_file=mips/iris3.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-iris3.h
-               broken_install=yes
-               xmake_file=mips/x-iris3
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               ;;
-       mips-dec-osfrose*)              # Decstation running OSF/1 reference port with OSF/rose.
-               tm_file=mips/osfrose.h
-               xmake_file=mips/x-osfrose
-               tmake_file=mips/t-osfrose
-               extra_objs=halfpic.o
-               use_collect2=yes
-               ;;
-       mips-dec-osf*)                  # Decstation running OSF/1 as shipped by DIGITAL
-               tm_file=mips/dec-osf1.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xmake_file=mips/x-dec-osf1
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       tmake_file=mips/t-ultrix
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               ;;
-       mips-dec-bsd*)                  # Decstation running 4.4 BSD
-              tm_file=mips/dec-bsd.h
-              fixincludes=
-             if [ x$gas = xyes ]
-             then
-                       tmake_file=mips/t-mips-gas
-             else
-                       tmake_file=mips/t-ultrix
-                       extra_passes="mips-tfile mips-tdump"
-             fi
-             if [ x$gnu_ld != xyes ]
-             then
-                       use_collect2=yes
-             fi
-             ;;
-       mips-dec-netbsd*)                  # Decstation running NetBSD
-               tm_file=mips/netbsd.h
-               xm_file=mips/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               if [ x$prefix = xNONE ]; then
-                       prefix=$native_prefix
-               fi
-               prefix=$native_prefix
-               ;;
-       mips-sony-bsd* | mips-sony-newsos*)     # Sony NEWS 3600 or risc/news.
-               tm_file=mips/news4.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               xmake_file=mips/x-sony
-               ;;
-       mips-sony-sysv*)                # Sony NEWS 3800 with NEWSOS5.0.
-                                       # That is based on svr4.
-               # t-svr4 is not right because this system doesn't use ELF.
-               tm_file=mips/news5.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-news.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               ;;
-       mips-tandem-sysv4*)             # Tandem S2 running NonStop UX
-               tm_file=mips/svr4-t.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-sysv4.h
-               xmake_file=mips/x-sysv
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-                       extra_parts="crtbegin.o crtend.o"
-               else
-                       tmake_file=mips/t-mips
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-ultrix* | mips-dec-mach3)        # Decstation.
-               tm_file=mips/ultrix.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xmake_file=mips/x-ultrix
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       tmake_file=mips/t-ultrix
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               ;;
-       mips-*-riscos[56789]bsd*)
-               tm_file=mips/bsd-5.h    # MIPS BSD 4.3, RISC-OS 5.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-bsd-gas
-               else
-                       tmake_file=mips/t-bsd
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-bsd* | mips-*-riscosbsd* | mips-*-riscos[1234]bsd*)
-               tm_file=mips/bsd-4.h    # MIPS BSD 4.3, RISC-OS 4.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-bsd-gas
-               else
-                       tmake_file=mips/t-bsd
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-riscos[56789]sysv4*)
-               tm_file=mips/svr4-5.h   # MIPS System V.4., RISC-OS 5.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-sysv4.h
-               xmake_file=mips/x-sysv
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-svr4-gas
-               else
-                       tmake_file=mips/t-svr4
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-sysv4* | mips-*-riscos[1234]sysv4* | mips-*-riscossysv4*)
-               tm_file=mips/svr4-4.h   # MIPS System V.4. RISC-OS 4.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-sysv.h
-               xmake_file=mips/x-sysv
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-svr4-gas
-               else
-                       tmake_file=mips/t-svr4
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-riscos[56789]sysv*)
-               tm_file=mips/svr3-5.h   # MIPS System V.3, RISC-OS 5.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-sysv.h
-               xmake_file=mips/x-sysv
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-svr3-gas
-               else
-                       tmake_file=mips/t-svr3
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-sysv* | mips-*-riscos*sysv*)
-               tm_file=mips/svr3-4.h   # MIPS System V.3, RISC-OS 4.0
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               xm_file=mips/xm-sysv.h
-               xmake_file=mips/x-sysv
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-svr3-gas
-               else
-                       tmake_file=mips/t-svr3
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-riscos[56789]*)          # Default MIPS RISC-OS 5.0.
-               tm_file=mips/mips-5.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               broken_install=yes
-               ;;
-       mips-*-gnu*)
-               ;;
-       mipsel-*-ecoff*)
-               tm_file=mips/ecoffl.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               tmake_file=mips/t-ecoff
-               ;;
-       mips-*-ecoff*)
-               tm_file=mips/ecoff.h
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               tmake_file=mips/t-ecoff
-               broken_install=yes
-               ;;
-       mipsel-*-elf*)
-               tm_file="mips/elfl.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips-*-elf*)
-               tm_file="mips/elf.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips64el-*-elf*)
-               tm_file="mips/elfl64.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips64orionel-*-elf*)
-               tm_file="mips/elflorion.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips64-*-elf*)
-               tm_file="mips/elf64.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips64orion-*-elf*)
-               tm_file="mips/elforion.h libgloss.h"
-               tmake_file=mips/t-ecoff
-               ;;
-       mips64orion-*-rtems*)
-               tm_file=mips/rtems64.h
-               tmake_file="mips/t-ecoff t-rtems"
-               ;;
-       mips-*-*)                               # Default MIPS RISC-OS 4.0.
-               if [ x$stabs = xyes ]; then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               if [ x$gas = xyes ]
-               then
-                       tmake_file=mips/t-mips-gas
-               else
-                       extra_passes="mips-tfile mips-tdump"
-               fi
-               if [ x$gnu_ld != xyes ]
-               then
-                       use_collect2=yes
-               fi
-               ;;
-       mn10200-*-*)
-               cpu_type=mn10200
-               tm_file="mn10200/mn10200.h"
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               use_collect2=no
-               ;;
-       mn10300-*-*)
-               cpu_type=mn10300
-               tm_file="mn10300/mn10300.h"
-               if [ x$stabs = xyes ]
-               then
-                       tm_file="${tm_file} dbx.h"
-               fi
-               use_collect2=no
-               ;;
-       ns32k-encore-bsd*)
-               tm_file=ns32k/encore.h
-               use_collect2=yes
-               ;;
-       ns32k-sequent-bsd*)
-               tm_file=ns32k/sequent.h
-               use_collect2=yes
-               ;;
-       ns32k-tek6100-bsd*)
-               tm_file=ns32k/tek6100.h
-               broken_install=yes
-               use_collect2=yes
-               ;;
-       ns32k-tek6200-bsd*)
-               tm_file=ns32k/tek6200.h
-               broken_install=yes
-               use_collect2=yes
-               ;;
-# This has not been updated to GCC 2.
-#      ns32k-ns-genix*)
-#              xm_file=ns32k/xm-genix.h
-#              xmake_file=ns32k/x-genix
-#              tm_file=ns32k/genix.h
-#              broken_install=yes
-#              use_collect2=yes
-#              ;;
-       ns32k-merlin-*)
-               tm_file=ns32k/merlin.h
-               use_collect2=yes
-               ;;
-       ns32k-pc532-mach*)
-               tm_file=ns32k/pc532-mach.h
-               use_collect2=yes
-               ;;
-       ns32k-pc532-minix*)
-               tm_file=ns32k/pc532-min.h
-               xm_file=ns32k/xm-pc532-min.h
-               use_collect2=yes
-               ;;
-       ns32k-pc532-netbsd*)
-               tm_file=ns32k/netbsd.h
-               xm_file=ns32k/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               ;;
-        pdp11-*-bsd)
-               tm_file="${tm_file} pdp11/2bsd.h"
-                ;;
-        pdp11-*-*)
-               ;;
-       pyramid-*-*)
-               cpu_type=pyr
-               xmake_file=pyr/x-pyr
-               use_collect2=yes
-               ;;
-       romp-*-aos*)
-               use_collect2=yes
-               ;;
-       romp-*-mach*)
-               xmake_file=romp/x-mach
-               use_collect2=yes
-               ;;
-       powerpc-*-sysv* | powerpc-*-elf*)
-               tm_file=rs6000/sysv4.h
-               xm_file=rs6000/xm-sysv4.h
-               extra_headers=ppc-asm.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
-               fi
-               xmake_file=rs6000/x-sysv4
-               ;;
-       powerpc-*-eabiaix*)
-               tm_file=rs6000/eabiaix.h
-               tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-       powerpc-*-eabisim*)
-               tm_file=rs6000/eabisim.h
-               tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-       powerpc-*-eabi*)
-               tm_file=rs6000/eabi.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
-               fi
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-       powerpc-*-rtems*)
-               tm_file=rs6000/rtems.h
-               if [ x$gas = xyes ]
-               then
-                    tmake_file="rs6000/t-ppcgas t-rtems rs6000/t-ppccomm"
-               else
-                    tmake_file="rs6000/t-ppc t-rtems rs6000/t-ppccomm"
-               fi
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-       powerpc-*-linux-gnu*)
-               tm_file=rs6000/linux.h
-               xm_file=rs6000/xm-sysv4.h
-               out_file=rs6000/rs6000.c
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcos t-linux rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc t-linux rs6000/t-ppccomm"
-               fi
-               xmake_file=x-linux
-               fixincludes=Makefile.in
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               extra_headers=ppc-asm.h
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='posix'
-               fi
-               ;;
-        powerpc-*-vxworks*)
-                cpu_type=rs6000
-                xm_file=rs6000/xm-sysv4.h
-                tm_file=rs6000/vxppc.h
-                tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               extra_headers=ppc-asm.h
-                ;;
-       powerpcle-*-sysv* | powerpcle-*-elf*)
-               tm_file=rs6000/sysv4le.h
-               xm_file=rs6000/xm-sysv4.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
-               fi
-               xmake_file=rs6000/x-sysv4
-               extra_headers=ppc-asm.h
-               ;;
-       powerpcle-*-eabisim*)
-               tm_file=rs6000/eabilesim.h
-               tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-       powerpcle-*-eabi*)
-               tm_file=rs6000/eabile.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcgas rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
-               fi
-               fixincludes=Makefile.in
-               extra_headers=ppc-asm.h
-               ;;
-        powerpcle-*-winnt* )
-                tm_file=rs6000/win-nt.h
-                tmake_file=rs6000/t-winnt
-#               extra_objs=pe.o
-               fixincludes=Makefile.in
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               extra_headers=ppc-asm.h
-               ;;
-       powerpcle-*-pe | powerpcle-*-cygwin32)
-               tm_file=rs6000/cygwin32.h
-               xm_file=rs6000/xm-cygwin32.h
-               tmake_file=rs6000/t-winnt
-               xmake_file=rs6000/x-cygwin32
-#              extra_objs=pe.o
-               fixincludes=Makefile.in
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='win32'
-               fi
-               exeext=.exe
-               extra_headers=ppc-asm.h
-               ;;
-       powerpcle-*-solaris2*)
-               tm_file=rs6000/sol2.h
-               xm_file=rs6000/xm-sysv4.h
-               if [ x$gas = xyes ]
-               then
-                       tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
-               else
-                       tmake_file="rs6000/t-ppc rs6000/t-ppccomm"
-               fi
-               xmake_file=rs6000/x-sysv4
-               fixincludes=fixinc.svr4
-               extra_headers=ppc-asm.h
-               ;;
-       rs6000-ibm-aix3.[01]*)
-               tm_file=rs6000/aix31.h
-               xmake_file=rs6000/x-aix31
-               use_collect2=yes
-               ;;
-       rs6000-ibm-aix3.2.[456789]* | powerpc-ibm-aix3.2.[456789]*)
-               tm_file=rs6000/aix3newas.h
-               if [ x$host != x$target ]
-               then
-                       tmake_file=rs6000/t-xnewas
-               else
-                       tmake_file=rs6000/t-newas
-               fi
-               use_collect2=yes
-               ;;
-       rs6000-ibm-aix[456789].* | powerpc-ibm-aix[456789].*)
-               tm_file=rs6000/aix41.h
-               if [ x$host != x$target ]
-               then
-                       tmake_file=rs6000/t-xnewas
-               else
-                       tmake_file=rs6000/t-newas
-               fi
-               xmake_file=rs6000/x-aix31
-               use_collect2=yes
-               ;;
-       rs6000-ibm-aix*)
-               use_collect2=yes
-               ;;
-       rs6000-bull-bosx)
-               use_collect2=yes
-               ;;
-       rs6000-*-mach*)
-               tm_file=rs6000/mach.h
-               xm_file=rs6000/xm-mach.h
-               xmake_file=rs6000/x-mach
-               use_collect2=yes
-               ;;
-       rs6000-*-lynxos*)
-               tm_file=rs6000/lynx.h
-               xm_file=rs6000/xm-lynx.h
-               tmake_file=rs6000/t-rs6000
-               xmake_file=rs6000/x-lynx
-               use_collect2=yes
-               ;;
-       sh-*-elf*)
-               tm_file=sh/elf.h
-               float_format=sh
-               ;;
-       sh-*-*)
-               float_format=sh
-               ;;
-       sparc-tti-*)
-               tm_file=sparc/pbd.h
-               xm_file=sparc/xm-pbd.h
-               ;;
-       sparc-wrs-vxworks* | sparclite-wrs-vxworks*)
-               tm_file=sparc/vxsparc.h
-               tmake_file=sparc/t-vxsparc
-               use_collect2=yes
-               ;;
-       sparc-*-aout*)
-               tmake_file=sparc/t-sparcbare
-               tm_file="sparc/aout.h libgloss.h"
-               ;;
-       sparc-*-netbsd*)
-               tm_file=sparc/netbsd.h
-               xm_file=sparc/xm-netbsd.h
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               ;;
-       sparc-*-bsd*)
-               tm_file=sparc/bsd.h
-               ;;
-       sparc-*-linux-gnuaout*)         # Sparc's running Linux, a.out
-               xm_file=sparc/xm-linux.h
-               tm_file=sparc/linux-aout.h
-               xmake_file=x-linux
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               ;;
-       sparc-*-linux-gnulibc1*)                 # Sparc's running Linux
-               xm_file=sparc/xm-linux.h # with ELF format using the
-               xmake_file=x-linux       # Linux C library 5.
-               tm_file=sparc/linux.h
-               tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               ;;
-       sparc-*-linux-gnu*)                      # Sparc's running Linux
-               xm_file=sparc/xm-linux.h # with ELF format using glibc 2
-               xmake_file=x-linux       # aka the Linux C library 6.
-               tm_file=sparc/linux.h
-               tmake_file="t-linux sparc/t-linux"
-               extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-               fixincludes=Makefile.in #On Linux, the headers are ok already.
-               broken_install=yes
-               gnu_ld=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='posix'
-               fi
-               ;;
-       sparc-*-lynxos*)
-               if [ x$gas = xyes ]
-               then
-                       tm_file=sparc/lynx.h
-               else
-                       tm_file=sparc/lynx-ng.h
-               fi
-               xm_file=sparc/xm-lynx.h
-               tmake_file=sparc/t-sunos41
-               xmake_file=x-lynx
-               ;;
-       sparc-*-rtems*)
-               tmake_file="sparc/t-sparcbare t-rtems"
-               tm_file=sparc/rtems.h
-               ;;
-       sparc-*-solaris2*)
-               tm_file=sparc/sol2.h
-               xm_file=sparc/xm-sol2.h
-               tmake_file=sparc/t-sol2
-               xmake_file=sparc/x-sysv4
-               extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
-               fixincludes=fixinc.svr4
-               broken_install=yes
-               if [ x$enable_threads = xyes ]; then
-                       thread_file='solaris'
-               fi
-               ;;
-       sparc-*-sunos4.0*)
-               tm_file=sparc/sunos4.h
-               tmake_file=sparc/t-sunos40
-               use_collect2=yes
-               ;;
-       sparc-*-sunos4*)
-               tm_file=sparc/sunos4.h
-               tmake_file=sparc/t-sunos41
-               use_collect2=yes
-               ;;
-       sparc-*-sunos3*)
-               tm_file=sparc/sun4o3.h
-               use_collect2=yes
-               ;;
-       sparc-*-sysv4*)
-               tm_file=sparc/sysv4.h
-               xm_file=sparc/xm-sysv4.h
-               tmake_file=t-svr4
-               xmake_file=sparc/x-sysv4
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-       sparc-*-vxsim*)
-               xm_file=sparc/xm-sol2.h
-               tm_file=sparc/vxsim.h
-               tmake_file=sparc/t-vxsparc
-               xmake_file=sparc/x-sysv4
-               ;;
-       sparclet-*-aout*)
-               tm_file="sparc/splet.h libgloss.h"
-               tmake_file=sparc/t-splet
-               ;;
-       sparclite-*-coff*)
-               tm_file="sparc/litecoff.h libgloss.h"
-               tmake_file=sparc/t-sparclite
-               ;;
-       sparclite-*-aout*)
-               tm_file="sparc/lite.h aoutos.h libgloss.h"
-               tmake_file=sparc/t-sparclite
-               ;;
-       sparc64-*-aout*)
-               tmake_file=sparc/t-sp64
-               tm_file=sparc/sp64-aout.h
-               ;;
-       sparc64-*-elf*)
-               tmake_file=sparc/t-sp64
-               tm_file=sparc/sp64-elf.h
-               extra_parts="crtbegin.o crtend.o"
-               ;;
-# This hasn't been upgraded to GCC 2.
-#      tahoe-harris-*)                 # Harris tahoe, using COFF.
-#              tm_file=tahoe/harris.h
-#              ;;
-#      tahoe-*-bsd*)                   # tahoe running BSD
-#              ;;
-# This hasn't been upgraded to GCC 2.
-#      tron-*-*)
-#              cpu_type=gmicro
-#              use_collect2=yes
-#              ;;
-       vax-*-bsd*)                     # vaxen running BSD
-               use_collect2=yes
-               float_format=vax
-               ;;
-       vax-*-sysv*)                    # vaxen running system V
-               tm_file="${tm_file} vax/vaxv.h"
-               xm_file="${tm_file} vax/xm-vaxv.h"
-               float_format=vax
-               ;;
-       vax-*-netbsd*)
-               tm_file="${tm_file} netbsd.h vax/netbsd.h"
-               xm_file="${xm_file} xm-netbsd.h"
-               # On NetBSD, the headers are already okay.
-               fixincludes=Makefile.in
-               tmake_file=t-netbsd
-               float_format=vax
-               ;;
-       vax-*-ultrix*)                  # vaxen running ultrix
-               tm_file="${tm_file} vax/ultrix.h"
-               use_collect2=yes
-               float_format=vax
-               ;;
-       vax-*-vms*)                     # vaxen running VMS
-               xm_file=vax/xm-vms.h
-               tm_file=vax/vms.h
-               float_format=vax
-               ;;
-       vax-*-*)                        # vax default entry
-               float_format=vax
-               ;;
-       we32k-att-sysv*)
-               xm_file="${xm_file} xm-svr3"
-               use_collect2=yes
-               ;;
-       *)
-               echo "Configuration $machine not supported" 1>&2
-               exit 1
-               ;;
-       esac
-
-       case $machine in
-       *-*-linux-gnu*)
-               ;; # Existing Linux/GNU systems do not use the GNU setup.
-       *-*-gnu*)
-               # On the GNU system, the setup is just about the same on
-               # each different CPU.  The specific machines that GNU
-               # supports are matched above and just set $cpu_type.
-               xm_file=${cpu_type}/xm-gnu.h
-               tm_file=${cpu_type}/gnu.h
-               extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
-               # GNU always uses ELF.
-               elf=yes
-               # GNU tools are the only tools.
-               gnu_ld=yes
-               gas=yes
-               # On GNU, the headers are already okay.
-               fixincludes=Makefile.in
-               xmake_file=x-linux      # These details are the same as Linux.
-               tmake_file=t-gnu        # These are not.
-               ;;
-       *-*-sysv4*)
-               fixincludes=fixinc.svr4
-               xmake_try_sysv=x-sysv
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               ;;
-       *-*-sysv*)
-               broken_install=yes
-               install_headers_dir=install-headers-cpio
-               ;;
-       esac
-
-       # Distinguish i[3456]86
-       # Also, do not run mips-tfile on MIPS if using gas.
-       # Process --with-cpu= for PowerPC/rs6000
-       target_cpu_default2=
-       case $machine in
-       i486-*-*)
-               target_cpu_default2=1
-               ;;
-       i586-*-*)
-               target_cpu_default2=2
-               ;;
-       i686-*-*)
-               target_cpu_default2=3
-               ;;
-       alpha*-*-*)
-               case $machine in
-                       alphaev56*)
-                               target_cpu_default2="MASK_CPU_EV5|MASK_BYTE_OPS"
-                               ;;
-                       alphaev5*)
-                               target_cpu_default2="MASK_CPU_EV5"
-                               ;;
-               esac
-                               
-               if [ x$gas = xyes ]
-               then
-                       if [ x$target_cpu_default2 = x ]
-                       then
-                               target_cpu_default2="MASK_GAS"
-                       else
-                               target_cpu_default2="${target_cpu_default2}|MASK_GAS"
-                       fi
-               fi
-               ;;
-       mips*-*-ecoff* | mips*-*-elf*)
-               if [ x$gas = xyes ]
-               then
-                       if [ x$gnu_ld = xyes ]
-                       then
-                               target_cpu_default2=20
-                       else
-                               target_cpu_default2=16
-                       fi
-               fi
-               ;;
-       mips*-*-*)
-               if [ x$gas = xyes ]
-               then
-                       target_cpu_default2=16
-               fi
-               ;;
-       powerpc*-*-* | rs6000-*-*)
-               case "x$with_cpu" in
-                       x)
-                               ;;
-
-                       xcommon | xpower | xpower2 | xpowerpc | xrios \
-                         | xrios1 | xrios2 | xrsc | xrsc1 \
-                         | x601 | x602 | x603 | x603e | x604 | x604e | x620 \
-                         | x403 | x505 | x801 | x821 | x823 | x860)
-                               target_cpu_default2="'\"$with_cpu\"'"
-                               ;;
-
-                       xyes | xno)
-                               echo "--with-cpu must be passed a value" 1>&2
-                               exit 1
-                               ;;
-
-                       *)
-                               echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
-                               exit 1
-                               ;;
-               esac
-               ;;
-       sparc*-*-*)
-               case ".$with_cpu" in
-                       .)
-                               target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`"
-                               ;;
-                       .supersparc | .ultrasparc | .v7 | .v8)
-                               target_cpu_default2="TARGET_CPU_$with_cpu"
-                               ;;
-                       *)
-                               echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2
-                               exit 1
-                               ;;
-               esac
-               ;;
-       esac
-
-       if [ x$target_cpu_default2 != x ]
-       then
-               if [ x$target_cpu_default != x ]
-               then
-                       target_cpu_default="(${target_cpu_default}|${target_cpu_default2})"
-               else
-                       target_cpu_default=$target_cpu_default2
-               fi
-       fi
-
-       # No need for collect2 if we have the GNU linker.
-       case x$gnu_ld in
-       xyes)
-               use_collect2=
-               ;;
-       esac
-
-# Save data on machine being used to compile GCC in build_xm_file.
-# Save data on host machine in vars host_xm_file and host_xmake_file.
-       if [ x$pass1done = x ]
-       then
-               if [ x"$xm_file" = x ]
-               then build_xm_file=$cpu_type/xm-$cpu_type.h
-               else build_xm_file=$xm_file
-               fi
-               build_broken_install=$broken_install
-               build_install_headers_dir=$install_headers_dir
-               build_exeext=$exeext
-               pass1done=yes
-       else
-               if [ x$pass2done = x ]
-               then
-                       if [ x"$xm_file" = x ]
-                       then host_xm_file=$cpu_type/xm-$cpu_type.h
-                       else host_xm_file=$xm_file
-                       fi
-                       if [ x"$xmake_file" = x ]
-                       then xmake_file=$cpu_type/x-$cpu_type
-                       fi
-                       host_xmake_file="$xmake_file"
-                       host_truncate_target=$truncate_target
-                       host_extra_gcc_objs=$extra_gcc_objs
-                       host_extra_objs=$extra_host_objs
-                       pass2done=yes
-               fi
-       fi
-done
-
-extra_objs="${host_extra_objs} ${extra_objs}"
-
-# Default the target-machine variables that were not explicitly set.
-if [ x"$tm_file" = x ]
-then tm_file=$cpu_type/$cpu_type.h; fi
-
-if [ x$extra_headers = x ]
-then extra_headers=; fi
-
-if [ x"$xm_file" = x ]
-then xm_file=$cpu_type/xm-$cpu_type.h; fi
-
-md_file=$cpu_type/$cpu_type.md
-
-if [ x$out_file = x ]
-then out_file=$cpu_type/$cpu_type.c; fi
-
-if [ x"$tmake_file" = x ]
-then tmake_file=$cpu_type/t-$cpu_type
-fi
-
-if [ x$float_format = x ]
-then float_format=i64
-fi
-
-# Say what files are being used for the output code and MD file.
-echo "Using \`$srcdir/config/$out_file' to output insns."
-echo "Using \`$srcdir/config/$md_file' as machine description file."
-
-count=a
-for f in $tm_file; do
-       count=${count}x
-done
-if [ $count = ax ]; then
-       echo "Using \`$srcdir/config/$tm_file' as target machine macro file."
-else
-       echo "Using the following target machine macro files:"
-       for f in $tm_file; do
-               echo "  $srcdir/config/$f"
-       done
-fi
-
-count=a
-for f in $host_xm_file; do
-       count=${count}x
-done
-if [ $count = ax ]; then
-       echo "Using \`$srcdir/config/$host_xm_file' as host machine macro file."
-else
-       echo "Using the following host machine macro files:"
-       for f in $host_xm_file; do
-               echo "  $srcdir/config/$f"
-       done
-fi
-
-if [ "$host_xm_file" != "$build_xm_file" ]; then
-       count=a
-       for f in $build_xm_file; do
-               count=${count}x
-       done
-       if [ $count = ax ]; then
-               echo "Using \`$srcdir/config/$build_xm_file' as build machine macro file."
-       else
-               echo "Using the following build machine macro files:"
-               for f in $build_xm_file; do
-                       echo "  $srcdir/config/$f"
-               done
-       fi
-fi
-
-if [ x$thread_file = x ]
-then thread_file='single'
-fi
-
-# Set up the header files.
-# $links is the list of header files to create.
-# $vars is the list of shell variables with file names to include.
-# config2.h is the old config.h.  It is included by the new config.h which
-# created from config.in.  The goal is to simplify the transition to autoconf.
-vars="host_xm_file tm_file xm_file build_xm_file"
-links="config2.h tm.h tconfig.h hconfig.h"
-
-rm -f config.bak
-if [ -f config.status ]; then mv -f config.status config.bak; fi
-
-# Make the links.
-while [ -n "$vars" ]
-do
-       # set file to car of files, files to cdr of files
-       set $vars; var=$1; shift; vars=$*
-       set $links; link=$1; shift; links=$*
-
-       rm -f $link
-
-       # Define TARGET_CPU_DEFAULT if the system wants one.
-       # This substitutes for lots of *.h files.
-       if [ x$target_cpu_default != x -a $link = tm.h ]
-       then
-               echo "#define TARGET_CPU_DEFAULT $target_cpu_default" >>$link
-       fi
-
-       for file in `eval echo '$'$var`; do
-               echo "#include \"$file\"" >>$link
-       done
-done
-
-# Truncate the target if necessary
-if [ x$host_truncate_target != x ]; then
-       target=`echo $target | sed -e 's/\(..............\).*/\1/'`
-fi
-
-# Get the version number from the toplevel
-version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < ${srcdir}/version.c`
-
-# Are we using gcc as the native compiler?
-case $host in
-*linux*)       # All Linux's use gcc as the native compiler.
-       if [ x$prefix = xNONE ]; then
-               prefix=$native_prefix
-       fi
-       ;;
-esac
-
-# Get an absolute path to the GCC top-level source directory
-holddir=`pwd`
-cd $srcdir
-topdir=`pwd`
-cd $holddir
-
-# Conditionalize the makefile for this host machine.
-# Make-host contains the concatenation of all host makefile fragments
-# [there can be more than one].  This file is built by configure.frag.
-host_overrides=Make-host
-dep_host_xmake_file=
-for f in .. ${host_xmake_file}
-do
-       if [ -f ${srcdir}/config/$f ]
-       then
-               dep_host_xmake_file="${dep_host_xmake_file} ${srcdir}/config/$f"
-       fi
-done
-
-# Conditionalize the makefile for this target machine.
-# Make-target contains the concatenation of all host makefile fragments
-# [there can be more than one].  This file is built by configure.frag.
-target_overrides=Make-target
-dep_tmake_file=
-for f in .. ${tmake_file}
-do
-       if [ -f ${srcdir}/config/$f ]
-       then
-               dep_tmake_file="${dep_tmake_file} ${srcdir}/config/$f"
-       fi
-done
-
-# If the host doesn't support symlinks, modify CC in
-# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
-# Otherwise, we can use "CC=$(CC)".
-rm -f symtest.tem
-if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
-then
-       cc_set_by_configure="\$(CC)"
-       stage_prefix_set_by_configure="\$(STAGE_PREFIX)"
-else
-       cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`"
-       stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`"
-fi
-rm -f symtest.tem
-
-out_object_file=`basename $out_file .c`.o
-
-tm_file_list=
-for f in $tm_file; do
-       tm_file_list="${tm_file_list} \$(srcdir)/config/$f"
-done
-
-host_xm_file_list=
-for f in $host_xm_file; do
-       host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f"
-done
-
-build_xm_file_list=
-for f in $build_xm_file; do
-       build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f"
-done
-
-# Define macro CROSS_COMPILE in compilation
-# if this is a cross-compiler.
-# Also use all.cross instead of all.internal
-# and add cross-make to Makefile.
-cross_overrides="/dev/null"
-if [ x$host != x$target ]
-then
-       cross_defines="CROSS=-DCROSS_COMPILE"
-       cross_overrides="${topdir}/cross-make"
-fi
-
-# When building gcc with a cross-compiler, we need to fix a few things.
-# This must come after cross-make as we want all.build to override
-# all.cross.
-build_overrides="/dev/null"
-if [ x$build != x$host ]
-then
-       build_overrides="${topdir}/build-make"
-fi
-
-# Expand extra_headers to include complete path.
-# This substitutes for lots of t-* files.
-extra_headers_list=
-if [ "x$extra_headers" = x ]
-then true
-else
-       # Prepend ${srcdir}/ginclude/ to every entry in extra_headers.
-       for file in $extra_headers;
-       do
-               extra_headers_list="${extra_headers_list} \$(srcdir)/ginclude/${file}"
-       done
-fi
-
-# Add a definition of USE_COLLECT2 if system wants one.
-# Also tell toplev.c what to do.
-# This substitutes for lots of t-* files.
-if [ x$use_collect2 = x ]
-then
-       will_use_collect2=
-       maybe_use_collect2=
-else
-       will_use_collect2="ld"
-       maybe_use_collect2="-DUSE_COLLECT2"
-fi
-
-# NEED TO CONVERT
-# Set MD_DEPS if the real md file is in md.pre-cpp.
-# Set MD_CPP to the cpp to pass the md file through.  Md files use ';'
-# for line oriented comments, so we must always use a GNU cpp.  If
-# building gcc with a cross compiler, use the cross compiler just
-# built.  Otherwise, we can use the cpp just built.
-md_file_sub=
-if [ "x$md_cppflags" = x ]
-then
-       md_file_sub=$srcdir/config/$md_file
-else
-       md_file=md
-fi
-
-# If we have gas in the build tree, make a link to it.
-if [ -f ../gas/Makefile ]; then
-       rm -f as; $symbolic_link ../gas/as.new as 2>/dev/null
-fi
-
-# If we have ld in the build tree, make a link to it.
-if [ -f ../ld/Makefile ]; then
-       if [ x$use_collect2 = x ]; then
-               rm -f ld; $symbolic_link ../ld/ld.new ld 2>/dev/null
-       else
-               rm -f collect-ld; $symbolic_link ../ld/ld.new collect-ld 2>/dev/null
-       fi
-fi
-
-# Figure out what language subdirectories are present.
-subdirs=
-for lang in ${srcdir}/*/config-lang.in ..
-do
-       case $lang in
-       ..) ;;
-       # The odd quoting in the next line works around
-       # an apparent bug in bash 1.12 on linux.
-       ${srcdir}/[*]/config-lang.in) ;;
-       *) subdirs="$subdirs `echo $lang | sed -e 's,^.*/\([^/]*\)/config-lang.in$,\1,'`" ;;
-       esac
-done
-
-# Make empty files to contain the specs and options for each language.
-# Then add #include lines to for a compiler that has specs and/or options.
-
-lang_specs_files=
-lang_options_files=
-rm -f specs.h options.h
-touch specs.h options.h
-for subdir in . $subdirs
-do
-       if [ -f $srcdir/$subdir/lang-specs.h ]; then
-               echo "#include \"$subdir/lang-specs.h\"" >>specs.h
-               lang_specs_files="$lang_specs_files $srcdir/$subdir/lang-specs.h"
-       fi
-       if [ -f $srcdir/$subdir/lang-options.h ]; then
-               echo "#include \"$subdir/lang-options.h\"" >>options.h
-               lang_options_files="$lang_options_files $srcdir/$subdir/lang-options.h"
-       fi
-done
-
-# These (without "all_") are set in each config-lang.in.
-# `language' must be a single word so is spelled singularly.
-all_languages=
-all_boot_languages=
-all_compilers=
-all_stagestuff=
-all_diff_excludes=
-all_outputs=Makefile
-# List of language makefile fragments.
-all_lang_makefiles=
-all_headers=
-all_lib2funcs=
-
-# Add the language fragments.
-# Languages are added via two mechanisms.  Some information must be
-# recorded in makefile variables, these are defined in config-lang.in.
-# We accumulate them and plug them into the main Makefile.
-# The other mechanism is a set of hooks for each of the main targets
-# like `clean', `install', etc.
-
-language_fragments="Make-lang"
-language_hooks="Make-hooks"
-oldstyle_subdirs=
-
-for s in .. $subdirs
-do
-       if [ $s != ".." ]
-       then
-               language=
-               boot_language=
-               compilers=
-               stagestuff=
-               diff_excludes=
-               headers=
-               outputs=
-               lib2funcs=
-               . ${srcdir}/$s/config-lang.in
-               if [ "x$language" = x ]
-               then
-                       echo "${srcdir}/$s/config-lang.in doesn't set \$language." 1>&2
-                       exit 1
-               fi
-               all_lang_makefiles="$all_lang_makefiles ${srcdir}/$s/Make-lang.in ${srcdir}/$s/Makefile.in"
-               all_languages="$all_languages $language"
-               if [ "x$boot_language" = xyes ]
-               then
-                       all_boot_languages="$all_boot_languages $language"
-               fi
-               all_compilers="$all_compilers $compilers"
-               all_stagestuff="$all_stagestuff $stagestuff"
-               all_diff_excludes="$all_diff_excludes $diff_excludes"
-               all_headers="$all_headers $headers"
-               all_outputs="$all_outputs $outputs"
-               if [ x$outputs = x ]
-               then
-                       oldstyle_subdirs="$oldstyle_subdirs $s"
-               fi
-               all_lib2funcs="$all_lib2funcs $lib2funcs"
-       fi
-done
-
-# Since we can't use `::' targets, we link each language in
-# with a set of hooks, reached indirectly via lang.${target}.
-
-rm -f Make-hooks
-touch Make-hooks
-target_list="all.build all.cross start.encap rest.encap \
-       info dvi \
-       install-normal install-common install-info install-man \
-       uninstall distdir \
-       mostlyclean clean distclean extraclean maintainer-clean \
-       stage1 stage2 stage3 stage4"
-for t in $target_list
-do
-       x=
-       for l in .. $all_languages
-       do
-               if [ $l != ".." ]; then
-                       x="$x $l.$t"
-               fi
-       done
-       echo "lang.$t: $x" >> Make-hooks
-done
-
-# If we're not building in srcdir, create .gdbinit.
-
-if [ ! -f Makefile.in ]; then
-       echo "dir ." > .gdbinit
-       echo "dir ${srcdir}" >> .gdbinit
-       if [ x$gdb_needs_out_file_path = xyes ]
-       then
-               echo "dir ${srcdir}/config/"`dirname ${out_file}` >> .gdbinit
-       fi
-       if [ "x$subdirs" != x ]; then
-               for s in $subdirs
-               do
-                       echo "dir ${srcdir}/$s" >> .gdbinit
-               done
-       fi
-       echo "source ${srcdir}/.gdbinit" >> .gdbinit
-fi
-
-# Process the language and host/target makefile fragments.
-${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xmake_file" "$dep_tmake_file"
-
-# Substitute configuration variables
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Echo that links are built
-if [ x$host = x$target ]
-then
-       str1="native "
-else
-       str1="cross-"
-       str2=" from $host"
-fi
-
-if [ x$host != x$build ]
-then
-       str3=" on a $build system"
-fi
-
-if [ "x$str2" != x ] || [ "x$str3" != x ]
-then
-       str4=
-fi
-
-echo "Links are now set up to build a ${str1}compiler for ${target}$str4" 1>&2
-
-if [ "x$str2" != x ] || [ "x$str3" != x ]
-then
-       echo " ${str2}${str3}." 1>&2
-fi
-
-# Configure the subdirectories
-# AC_CONFIG_SUBDIRS($subdirs)
-
-# Create the Makefile
-# and configure language subdirectories
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
-DEFS=-DHAVE_CONFIG_H
-
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
-do
-  case "\$ac_option" in
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
-    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.12"
-    exit 0 ;;
-  -help | --help | --hel | --he | --h)
-    echo "\$ac_cs_usage"; exit 0 ;;
-  *) echo "\$ac_cs_usage"; exit 1 ;;
-  esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "$all_outputs config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@target@%$target%g
-s%@target_alias@%$target_alias%g
-s%@target_cpu@%$target_cpu%g
-s%@target_vendor@%$target_vendor%g
-s%@target_os@%$target_os%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@AWK@%$AWK%g
-s%@LEX@%$LEX%g
-s%@LEXLIB@%$LEXLIB%g
-s%@LN_S@%$LN_S%g
-s%@RANLIB@%$RANLIB%g
-s%@YACC@%$YACC%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@CC@%$CC%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@CPP@%$CPP%g
-s%@manext@%$manext%g
-s%@objext@%$objext%g
-s%@subdirs@%$subdirs%g
-s%@all_languages@%$all_languages%g
-s%@all_boot_languages@%$all_boot_languages%g
-s%@all_compilers@%$all_compilers%g
-s%@all_lang_makefiles@%$all_lang_makefiles%g
-s%@all_stagestuff@%$all_stagestuff%g
-s%@all_diff_excludes@%$all_diff_excludes%g
-s%@all_lib2funcs@%$all_lib2funcs%g
-s%@all_headers@%$all_headers%g
-s%@extra_passes@%$extra_passes%g
-s%@extra_programs@%$extra_programs%g
-s%@extra_parts@%$extra_parts%g
-s%@extra_c_objs@%$extra_c_objs%g
-s%@extra_c_flags@%$extra_c_flags%g
-s%@extra_objs@%$extra_objs%g
-s%@host_extra_gcc_objs@%$host_extra_gcc_objs%g
-s%@extra_headers_list@%$extra_headers_list%g
-s%@dep_host_xmake_file@%$dep_host_xmake_file%g
-s%@dep_tmake_file@%$dep_tmake_file%g
-s%@out_file@%$out_file%g
-s%@out_object_file@%$out_object_file%g
-s%@md_file@%$md_file%g
-s%@tm_file_list@%$tm_file_list%g
-s%@build_xm_file_list@%$build_xm_file_list%g
-s%@host_xm_file_list@%$host_xm_file_list%g
-s%@lang_specs_files@%$lang_specs_files%g
-s%@lang_options_files@%$lang_options_files%g
-s%@thread_file@%$thread_file%g
-s%@version@%$version%g
-s%@local_prefix@%$local_prefix%g
-s%@gxx_include_dir@%$gxx_include_dir%g
-s%@fixincludes@%$fixincludes%g
-s%@build_install_headers_dir@%$build_install_headers_dir%g
-s%@build_exeext@%$build_exeext%g
-s%@float_format@%$float_format%g
-s%@will_use_collect2@%$will_use_collect2%g
-s%@maybe_use_collect2@%$maybe_use_collect2%g
-s%@cc_set_by_configure@%$cc_set_by_configure%g
-s%@stage_prefix_set_by_configure@%$stage_prefix_set_by_configure%g
-/@target_overrides@/r $target_overrides
-s%@target_overrides@%%g
-/@host_overrides@/r $host_overrides
-s%@host_overrides@%%g
-s%@cross_defines@%$cross_defines%g
-/@cross_overrides@/r $cross_overrides
-s%@cross_overrides@%%g
-/@build_overrides@/r $build_overrides
-s%@build_overrides@%%g
-/@language_fragments@/r $language_fragments
-s%@language_fragments@%%g
-/@language_hooks@/r $language_hooks
-s%@language_hooks@%%g
-
-CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
-  if test $ac_beg -gt 1; then
-    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-  else
-    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-  fi
-  if test ! -s conftest.s$ac_file; then
-    ac_more_lines=false
-    rm -f conftest.s$ac_file
-  else
-    if test -z "$ac_sed_cmds"; then
-      ac_sed_cmds="sed -f conftest.s$ac_file"
-    else
-      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
-    fi
-    ac_file=`expr $ac_file + 1`
-    ac_beg=$ac_end
-    ac_end=`expr $ac_end + $ac_max_sed_cmds`
-  fi
-done
-if test -z "$ac_sed_cmds"; then
-  ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"$all_outputs"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
-  esac
-
-  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-    # The file is in a subdirectory.
-    test ! -d "$ac_dir" && mkdir "$ac_dir"
-    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dir_suffix.
-    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
-  else
-    ac_dir_suffix= ac_dots=
-  fi
-
-  case "$ac_given_srcdir" in
-  .)  srcdir=.
-      if test -z "$ac_dots"; then top_srcdir=.
-      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
-  *) # Relative path.
-    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-    top_srcdir="$ac_dots$ac_given_srcdir" ;;
-  esac
-
-  case "$ac_given_INSTALL" in
-  [/$]*) INSTALL="$ac_given_INSTALL" ;;
-  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-  esac
-
-  echo creating "$ac_file"
-  rm -f "$ac_file"
-  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-  case "$ac_file" in
-  *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
-  *) ac_comsub= ;;
-  esac
-
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
-ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
-ac_uB='\([     ]\)%\1#\2define\3'
-ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
-  CONFIG_HEADERS="config.h:config.in"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
-  esac
-
-  echo creating $ac_file
-
-  rm -f conftest.frag conftest.in conftest.out
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h.  And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
-rm -f conftest.tail
-while :
-do
-  ac_lines=`grep -c . conftest.vals`
-  # grep -c gives empty output for an empty file on some AIX systems.
-  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
-  # Write a limited-size here document to conftest.frag.
-  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
-  echo 'CEOF
-  sed -f conftest.frag conftest.in > conftest.out
-  rm -f conftest.in
-  mv conftest.out conftest.in
-' >> $CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
-  rm -f conftest.vals
-  mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
-  rm -f conftest.frag conftest.h
-  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
-  cat conftest.in >> conftest.h
-  rm -f conftest.in
-  if cmp -s $ac_file conftest.h 2>/dev/null; then
-    echo "$ac_file is unchanged"
-    rm -f conftest.h
-  else
-    # Remove last slash and all that follows it.  Not all systems have dirname.
-      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-      # The file is in a subdirectory.
-      test ! -d "$ac_dir" && mkdir "$ac_dir"
-    fi
-    rm -f $ac_file
-    mv conftest.h $ac_file
-  fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-host='${host}'
-build='${build}'
-target='${target}'
-target_alias='${target_alias}'
-srcdir='${srcdir}'
-subdirs='${subdirs}'
-oldstyle_subdirs='${oldstyle_subdirs}'
-symbolic_link='${symbolic_link}'
-program_transform_set='${program_transform_set}'
-program_transform_name='${program_transform_name}'
-dep_host_xmake_file='${dep_host_xmake_file}'
-host_xmake_file='${host_xmake_file}'
-dep_tmake_file='${dep_tmake_file}'
-tmake_file='${tmake_file}'
-thread_file='${thread_file}'
-version='${version}'
-local_prefix='${local_prefix}'
-build_install_headers_dir='${build_install_headers_dir}'
-build_exeext='${build_exeext}'
-gdb_needs_out_file_path='${gdb_needs_out_file_path}'
-SET_MAKE='${SET_MAKE}'
-build_broken_install='${build_broken_install}'
-target_list='${target_list}'
-target_overrides='${target_overrides}'
-host_overrides='${host_overrides}'
-cross_defines='${cross_defines}'
-cross_overrides='${cross_overrides}'
-build_overrides='${build_overrides}'
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-. $srcdir/configure.lang
-case x$CONFIG_HEADERS in
-xconfig.h:config.in)
-echo > cstamp-h ;;
-esac
-
-exit 0
-EOF
-chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
diff --git a/gcc/cp/ChangeLog.1 b/gcc/cp/ChangeLog.1
new file mode 100644 (file)
index 0000000..024a4e6
--- /dev/null
@@ -0,0 +1,9451 @@
+Sun Nov 26 14:47:42 1995  Richard Kenner  <kenner@mole.gnu.ai.mit.edu>
+
+       * Version 2.7.2 released.
+
+Mon Nov 20 14:05:00 1995  Mike Stump  <mrs@cygnus.com>
+
+       * g++.c (pfatal_with_name): Add missing third argument to concat.
+
+Thu Oct 26 13:59:54 1995  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (expand_aggr_init): Handle cv qualifiers on the object's
+       type.
+
+Sat Nov 11 08:25:55 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Version 2.7.1 released.
+
+Thu Nov  2 17:02:47 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (convert_harshness): Handle references to arrays.
+
+Fri Oct 27 14:20:21 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * typeck.c (comp_target_types): Check multi-level pointer
+       conversions in both directions.
+
+Tue Oct 17 21:39:05 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * parse.y (explicit_instantiation): Fix 'extern template' with no
+       return type.
+
+Mon Oct 16 14:35:20 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * parse.y (explicit_instantiation): Support automatic instantiation
+       of constructors.
+       (named_class_head_*): Support out-of-class definition of nested
+       types.
+
+Wed Oct 11 12:20:56 1995  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (envelope_add_decl): New routine.  Fix so that
+       methods are hidden in the same way that other members are.
+       (dfs_pushdecls): Cleanup and move functionality out of line,
+       into envelope_add_decl. 
+
+Tue Oct 10 15:46:01 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (mark_addressable): Only call assemble_external if we
+       have started the output file.
+
+Tue Oct 10 11:27:18 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * decl.c (start_function): Fix earlier cv-quals change.
+
+Mon Oct  9 23:53:05 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (complex_direct_notype_declarator): Only push the class if
+       we are not already in the class.
+
+Mon Oct  9 11:22:03 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
+       Update olddecl's attributes too.
+       (grokdeclarator): #if 0 out call to build_decl_attribute_variant.
+       * typeck.c (common_type): Call merge_machine_type_attributes.
+
+Fri Oct  6 14:44:27 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (mark_addressable): Add missing call to
+       assemble_external.
+
+Wed Oct  4 15:06:39 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (store_parm_decls): Make sure the unwinder start comes
+       before the exception specification start.
+       * except.c (expand_exception_blocks): Make sure the unwinder end
+       comes after the terminate protected catch clause region and after
+       the end of the exception specification region.
+
+Wed Oct  4 12:47:02 1995  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * lex.c (real_yylex): Fix identifier case for linemode.
+       (handle_sysv_pragma): Don't abort when we see a pragma we don't
+       recognize.
+
+Tue Oct  3 14:09:46 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (store_parm_decls): Add a call to start_eh_unwinder.
+       * except.c (init_exception_processing): __throw doesn't take any
+       arguments.
+       (expand_builtin_throw): Likewise.  Always use Pmode, instead of SImode
+       for all pointers.  Use expand_builtin_return_addr to unwind the
+       first level off the stack.
+       (do_unwind): Always use Pmode, instead of SImode for all pointers.
+       (expand_exception_blocks): Add a call to end_eh_unwinder.
+       (start_eh_unwinder, end_eh_unwinder): New routines to build machine
+       independent stack unwinders for function/method calls.
+       
+Mon Oct  2 17:20:42 1995  Mike Stump  <mrs@cygnus.com>
+
+       * tree.c (unsave_expr_now): Make sure we process the argument list
+       of any called functions.  Fixes incorrect code generation for
+       cleanups.
+
+Mon Oct  2 13:04:16 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (get_member_function_from_ptrfunc): Save function if it
+       needs it.  Cures core dump on things like (this->*(f()))().
+
+Sat Sep 23 22:51:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_function): Conform to gcc cv-quals convention (no
+       expression has a cv-qualified type) in RESULT_DECLs.
+       * method.c (make_thunk): Likewise.
+
+Fri Sep 22 10:21:13 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (pushtag): Add in the namespace name for the tag.
+
+Thu Sep 21 13:11:13 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (maybe_base_class_list, base_class_list, base_class,
+       base_class_access_list): Make sure we see the typenames for base
+       classes.
+       * lex.c (see_typename): Instead of failing to see a typename when
+       there is no next token, perfer a typename, and get the next token.
+
+Wed Sep 20 12:35:27 1995  Michael Meissner  <meissner@cygnus.com>
+
+       * decl.c (init_decl_processing): Add __builtin_expect.
+
+Tue Sep 19 16:48:11 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (cp_convert_to_pointer): Don't allow leftover conversions to
+       or from pointer to member functions, they must all be handled before
+       this point.
+
+Fri Sep 15 17:14:47 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (resolve_offset_ref): Fix wording of non-static member
+       being referenced as a static.
+
+Fri Sep 15 12:39:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_indirect_ref): Only bash pointer if we actually
+       call build_expr_type_conversion.
+
+Thu Sep 14 18:24:56 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_expr_type_conversion): Handle conversion from
+       reference.
+       * typeck.c (build_indirect_ref): Avoid infinite recursion.
+
+Thu Sep 14 17:23:28 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (expand_start_early_try_stmts): New routine to start a try
+       block at the start of the function, for function-try-blocks.
+       * cp-tree.h (expand_start_early_try_stmts): Declare it.
+       * parse.y (function_try_block): Use it, instead of doing it here, as
+       we don't want to include rtl.h here, as that conflicts with RETURN
+       in the parser.
+
+Wed Sep 13 18:32:24 1995  Mike Stump  <mrs@cygnus.com>
+
+       * lex.c (reinit_parse_for_block): Support saving inline
+       function-try-blocks, uses peekyylex.
+       * parse.y (eat_saved_input): New rule, permit the parser to see that
+       END_OF_SAVED_INPUT is ok, as it can see this when parsing the
+       handlers of a function-try-block.
+       (fndef): Use it.
+       (component_decl): Make sure TRY and RETURN can come after fn.def2.
+       * spew.c (peekyylex): New routine to peek at what will come next.
+
+Wed Sep 13 16:52:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (comptypes): Tighten up comparisons of template type
+       parms.
+
+       * decl.c (duplicate_decls): Turn off whining about virtual functions
+       redeclared inline for now.
+
+Wed Sep 13 11:13:40 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (store_in_parms): New routine to put things before we
+       put base inits.
+       * cp-tree.h (store_in_parms): Declare it.
+       * decl.c (store_parm_decls): Use it to makr sure the starting of the
+       eh spec comes before base inits.
+       (finish_function): Use sequences instead of the obsolete
+       reorder_insns.
+       * parse.y (fndef): Enhance readability and maintainability.  Update
+       to include function_try_block syntax.
+       (function_try_block): Add.
+
+Tue Sep 12 17:43:07 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * call.c (convert_harshness): Use comptypes, not ==, to check if
+       TYPE and PARMTYPE are equivalent on a function type.
+
+Tue Sep 12 17:31:33 1995  Douglas Rupp  <drupp@cs.washington.edu>
+
+       * Make-lang.in (cc1plus) : Removed unnecessary $(exeext).
+
+Mon Sep 11 23:24:07 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Never allocate storage for thrown pointer
+       to objects.
+
+Mon Sep 11 19:36:45 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_catch_block): Pointers to objects come
+       back from catch matching already dereferenced, don't dereference
+       again.
+
+Mon Sep 11 15:46:28 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Only decay the throw expression, don't do
+       any default conversions.  This is so that one can throw and catch
+       characters, and not have them match integers.
+
+Mon Sep 11 13:46:45 1995  Mike Stump  <mrs@cygnus.com>
+
+       * error.c (dump_aggr_type): Deal with anonymous unions that don't
+       have a TYPE_NAME.
+
+Fri Sep  8 20:40:27 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * lex.c (handle_sysv_pragma): Deal with getting a comma from yylex.
+
+Fri Sep  8 15:51:41 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_end_eh_spec): Handle empty EH specifications.
+
+Fri Sep  8 15:27:22 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cp-tree.h (expand_start_eh_spec): Declare new routine.
+       (expand_end_eh_spec): Likewise.
+       * decl.c (store_parm_decls): Call expand_start_eh_spec to process
+       exception specifications.
+       * except.c (expand_leftover_cleanups): Remove unused parameter.
+       (expand_end_catch_block): Likewise.
+       (expand_exception_blocks): Likewise.
+       (expand_start_eh_spec): New routine to mark the start of an
+       exception specification region.
+       (expand_end_eh_spec): New routine to mark the end of an exception
+       specification region.
+       (expand_exception_blocks): Call expand_end_eh_spec to process
+       exception specifications.
+
+Fri Sep  8 14:40:48 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * lex.c (do_identifier):  Use global binding in preference of
+       dead for local variable.
+
+Wed Sep  6 19:32:59 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cp-tree.h (build_exception_variant): Remove used first argument.
+       * decl.c (duplicate_decls): Likewise.
+       (grokfndecl): Likewise.
+       (revert_static_member_fn): Likewise.
+       * decl2.c (grok_method_quals): Likewise.
+       * tree.c (build_exception_variant): Likewise.
+       * typeck.c (common_type): Likewise.
+       * decl2.c (grokclassfn): After changing the type, call
+       build_exception_variant, if necessary.
+
+Tue Sep  5 15:56:27 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Run cleanups for the throw expression.
+
+Wed Aug 30 15:24:38 1995  Stephen L. Favor  <sfavor@tigger.intecom.com>
+
+       * except.c (expand_builtin_throw): Moved gen_label_rtx calls beyond
+       the store_parm_decls call which does initialization in the emit_*
+       code concerning label numbering.
+       
+Thu Aug 31 09:01:07 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_internal_throw): Let the frontend be responsible
+       for managing all frontend EH parameters, the backend routine only
+       needs to deal with backend values.  type and value are no longer
+       passed to __throw.
+       (init_exception_processing): Likewise.
+       (expand_start_all_catch): Likewise.
+       (expand_end_all_catch): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_end_catch_block): Likewise.
+       (expand_builtin_throw): Likewise.
+       (expand_throw): Likewise.
+       
+Tue Aug 29 15:04:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cp-tree.h (DECL_REAL_CONTEXT): Give the real declaration context
+       for a decl.
+       * decl.c (cp_finish_decl): Use it.
+
+Tue Aug 29 10:30:27 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_internal_throw): Oops, almost forgot type and
+       value are now trees.
+
+Mon Aug 28 17:57:45 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       Fix the attribute handling to make sure they get noted before we
+       create the function's RTL, in case they can affect that.
+       * decl.c (grokfndecl): New arg ATTRLIST.  Run
+       cplus_decl_attributes before creating the decl's rtl.
+       (grokdeclarator): New arg ATTRLIST, passed down into grokfndecl.
+       (shadow_tag, groktypename, start_decl, start_method): Pass a
+       NULL_TREE to grokdeclarator's new last arg.
+       * decl2.c (grokfield): New arg ATTRLIST, passed into grokdeclarator.
+       (grokbitfield, grokoptypename): Pass a NULL_TREE to
+       grokdeclarator's new last arg.
+       * except.c (expand_start_catch_block): Likewise.
+       * pt.c (process_template_parm, end_template_decl,
+       do_function_instantiation): Likewise.
+       * cp-tree.h (grokfield): Add arg.
+       (grokdeclarator): Move the prototype from here...
+       * decl.h: ...to here.
+       * lex.c (cons_up_default_function): Pass NULL_TREE to grokfield
+       ATTRLIST argument.
+       * parse.y: Create a list for the grokfield arg where appropriate,
+       and pass it down instead of calling cplus_decl_attributes.
+
+Mon Aug 28 15:07:24 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Always allow turning on exception handling.  Allow cross
+       compilations to use EH.
+
+Thu Aug 24 17:39:24 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (saved_pc, saved_throw_type, saved_throw_value): Use
+       trees, instead of rtxs, and don't depend on using special machine
+       dependent registers.
+       (expand_internal_throw): Likewise.
+       (init_exception_processing): Likewise.
+       (expand_start_all_catch): Likewise.
+       (expand_end_all_catch): Likewise.
+       (expand_start_catch_block): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_end_catch_block): Likewise.
+       (expand_builtin_throw): Likewise.
+       (expand_throw): Likewise.
+
+Wed Aug 23 17:25:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (build_expr_type_conversion): Handle conversions to
+       reference types.
+
+Wed Aug 23 15:33:59 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (do_unwind): Work around backend bug with -fpic.
+
+Tue Aug 22 17:20:07 1995  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl2.c (flag_new_for_scope):  Add a new mode that follows ANSI
+       for-scoping, but supports (and warns about) old programs.
+       Make the new mode (with value 1) the default.
+       (lang_f_options):  The on-value for flag_new_for_scope is now 2.
+       * cp-tree.h (DECL_DEAD_FOR_LOCAL, DECL_ERROR_REPORTED): New macros
+       (DECL_SHADOWED_FOR_VAR):  Likewise.
+       * decl.c (struct binding_level):  New fields dead_vars_from_for
+       and is_for_scope.
+       (note_level_for_for):  New function.
+       (poplevel):  Special processing if is_for_scope.
+       (pushdecl):  Warn if for-scope variable shadows local.
+       * lex.c (do_identifier):  Handle old (non-ANSI) for scoping,
+       and warn if conflicts.
+       * parse.y (FOR):  Call note_level_for_for.
+
+Mon Aug 21 10:28:31 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (import_export_inline): Class interface hackery does not
+       apply to synthesized methods.
+
+Sun Aug 20 16:29:00 1995  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (virtual_context): Find the right context more often.
+       Solves a `recoverable compiler error, fixups for virtual function'
+       problem.
+
+Sun Aug 20 13:53:24 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_all_catch): Ensure that we always transfer
+       control to the right EH handler, by rethrowing the end label on the
+       region, instead of hoping we are nested and falling through.
+       (expand_leftover_cleanups): Likewise.
+       (end_protect): Since we now rethrow the end label, put a
+       nop after it, so that outer regions are recognized.
+       * init.c (build_vec_delete_1): New routine to handle most of vector
+       deleting, all code moved here from build_vec_delete.
+       (build_array_eh_cleanup): Use build_vec_delete_1 to do all the real
+       work.
+       (expand_vec_init): If the array needs partial destructing, setup an
+       EH region to handle it.
+       (build_vec_delete): Move lots of code to build_vec_delete_1, use
+       build_vec_delete_1 to do the grunt work.
+       
+Sat Aug 19 14:25:33 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       Handle decl attributes properly for function definitions without
+       previous attribute-loaded declarations.
+       * decl.c (start_function): New arg ATTRS.  Add a call to
+       cplus_decl_attributes with it before we create the RTL.
+       * cp-tree.h (start_function): Update prototype.
+       * parse.y (fn.def1): Pass ATTRS into start_function instead of
+       trying to call cplus_decl_attributes too late.  Pass a NULL_TREE
+       for other use.
+       * decl2.c (finish_file): Pass NULL_TREE as fourth arg to
+       start_function.
+       * method.c (synthesize_method): Likewise.
+       * except.c (expand_builtin_throw): Likewise for start on __throw.
+
+Sat Aug 19 13:36:08 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (set_rtti_entry): Turn on -fvtable-thunk -frtti support.
+       This changes -fvtable-thunks vtable layout, so a recompile will be
+       necessary, if you use -fvtable-thunks.
+       (get_vtable_entry): Use n, instead of i to be consistent with the
+       rest of the compiler.
+       (get_vtable_entry_n): Likewise.
+       (add_virtual_function): Add a slot for the tdesc, if -fvtable-thunks
+       are being used.
+       (finish_struct_1): Likewise.
+       (skip_rtti_stuff): New routine to collapse similar code from many
+       different parts of the compiler.  I think I got them all.
+       (modify_one_vtable): Use it.
+       (fixup_vtable_deltas1): Likewise.
+       (override_one_vtable): Likewise.
+       * decl2.c (mark_vtable_entries): Likewise.
+       * tree.c (debug_binfo): Likewise.
+       * search.c (expand_upcast_fixups): Likewise.
+       (get_abstract_virtuals_1): Likewise.  Use virtuals, instead of tmp to
+       consistent with the rest of the compiler.
+       (get_abstract_virtuals): Likewise.
+       * cp-tree.h (skip_rtti_stuff): New routine, declare it.
+       * gc.c (build_headof): Support -fvtable-thunk and -frtti together.
+       (build_typeid): Likewise.
+       (build_classof): Remove old style way of doing rtti.  Remove support
+       for `classof' and `headof'.
+       * gxx.gperf: Likewise.
+       * hash.h: Likewise.
+       * parse.y: Likewise.
+
+Fri Aug 18 17:31:58 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_function): Clear ctor_label and dtor_label.
+
+       * class.c (finish_struct_1): Fix handling of access decls.
+
+Tue Aug 15 19:21:54 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_struct): Only do minimal processing here, so it
+       can be used for class template definitions, as well.
+       (finish_struct_1): New function with the rest of the code.
+
+Tue Aug 15 09:46:16 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (prepare_fresh_vtable): On second though, always build the
+       offset (see Aug 10 change), unless -fvtable-thunks is given.  It
+       does this by calling the new routine set_rtti_entry.
+       (finish_struct): Likewise.
+       (set_rtti_entry): New routine to update the rtti information at the
+       start of the vtable.
+
+Mon Aug 14 12:21:22 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * error.c (dump_decl, case IDENTIFIER_NODE): Only work on a dtor
+       if it's declared in the C++ language spec.
+       (dump_function_decl): Likewise.
+       (dump_function_name): Likewise.
+       (ident_fndecl): Make sure we got something back from lookup_name.
+       * decl.c (start_function): Likewise.
+
+Fri Aug 11 16:52:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Don't call build_new when calling a
+       constructor without an instance.
+
+Thu Aug 10 20:00:17 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (prepare_fresh_vtable): Always build the offset to the
+       complete object, as it doesn't cost much.  This allows dynamic_cast
+       to void * to work when -frtti isn't given.
+       (finish_struct): Likewise.
+
+Thu Aug 10 16:31:28 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (build_eh_type): Split out some functionality to new
+       routine named build_eh_type_type.
+       (build_eh_type_type): New routine.
+       (expand_start_catch_block): Use build_eh_type_type, as we never want
+       the dynamic type of the catch parameter, just the static type.
+       Fixes core dumps when -frtti is used and one catchs pointers to
+       classes.
+
+Thu Aug 10 14:55:29 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_builtin_throw): Since we now use normal calling
+       conventions for __throw, we have to remove the first layer off the
+       stack, so that the next context we search for handlers is the outer
+       context instead of the context that had the call to __throw, if we
+       don't immediately find the desired context.
+
+Tue Aug  8 17:44:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * tree.c (cp_expand_decl_cleanup): Returns int, not tree.
+       * cp-tree.h: Update.
+
+       * parse.y (template_type_parm): Add support for `typename'.
+
+Tue Aug  8 12:06:31 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_internal_throw): New internal routine to throw a
+       value.
+       (expand_end_all_catch, expand_leftover_cleanups): All throwers
+       changed to use `expand_internal_throw' instead of jumping to throw
+       label.
+       (expand_end_catch_block, expand_throw): Likewise.
+       (throw_label): Removed.
+       (expand_builtin_throw): Changed so that EH parameters are passed by
+       normal function call conventions.  Completes Aug 4th work.
+
+Fri Aug  4 17:17:08 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cp-tree.h (expand_builtin_throw): Declare it.
+       * decl2.c (finish_file): Call expand_builtin_throw.
+       * except.c (make_first_label): Remove.
+       (init_exception_processing): Don't use a LABEL_REF for throw_label,
+       instead use a SYMBOL_REF, this is so that we don't use LABEL_REFs in
+       other functions that don't really appear in those functions.  This
+       solves a problem where cc1plus consumed exponential amounts of
+       memory when -Wall was used.
+       (expand_end_all_catch, expand_leftover_cleanups,
+       expand_end_catch_block, expand_throw): Change all uses of
+       throw_label to match new style.
+       (do_unwind): Rename parameter to inner_throw_label, as it is now
+       different from throw_label.  Also, assume that our caller will wrap
+       the passed label with a LABEL_REF, if needed.
+       (expand_builtin_throw): Make external, change so that the generated
+       throw is now a real function.
+       (expand_exception_blocks): Never generate throw code inside another
+       function.
+
+Fri Aug  4 12:20:02 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (grokdeclarator): Move checking of mutable const objects
+       and mutable static objects down, as we might decide during parsing
+       to unset staticp or constp (for example, when const is part of the
+       object being pointed to).
+
+Thu Aug  3 17:13:43 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (output_exception_table_entry): Enhance portability to
+       weird machines.
+       (emit_exception_table): Likewise.
+
+Thu Aug  3 16:41:38 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (build_ptrmemfunc): Handle casting of pointer to
+       non-virtual member functions.
+
+Wed Aug  2 11:58:25 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_typeid): Strip cv qualifiers so that const T&, T&, T
+       and const T all match.
+
+Wed Aug  2 11:25:33 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (build_eh_type): Strip cv qualifiers so that const T&,
+       T&, T and const T all match.
+
+Tue Aug  1 14:20:16 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Fix up comments, cleanup code and eliminate exceptNode,
+       exceptStack, exceptstack, push_except_stmts, pop_except_stmts,
+       new_except_stack, push_last_insn, pop_last_insn, insn_save_node and
+       InsnSave.  Also, numerous speed improvements, and correctness
+       improvements.  Double faulting in all situations should now be
+       handled correctly.
+       (expand_start_all_catch): Instead of having many terminate protected
+       regions, just have one.
+       (expand_start_catch_block): No longer have to protect
+       false_label_rtx, as it isn't used for EH region marking.
+       (expand_end_catch_block): Expand out EH cleanups here by using
+       expand_leftover_cleanups.
+       (expand_end_all_catch): Use sequences instead of playing with insn
+       links directly.
+       (expand_exception_blocks): Likewise.  Also protect all catch clauses
+       with one terminate region.
+
+Mon Jul 31 13:24:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (report_type_mismatch): Don't talk about an object
+       parameter for non-methods.
+
+Sun Jul 30 13:13:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_struct): Catch private and protected members of
+       anonymous unions here.
+       * decl2.c (finish_anon_union): And here.
+       * parse.y: Instead of here.
+
+       * errfn.c (ARGSLIST): Support passing four args.
+       * error.c (cv_as_string): New function.
+       (cp_printers): Add it.
+       * call.c (build_method_call): Report 'const' at end of pseudo-decl.
+
+       * method.c (report_type_mismatch): Deal with a bad_arg of 0.
+
+       * init.c (expand_aggr_init): Handle volatile objects, too.
+
+Sat Jul 29 13:42:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (struct binding_level): Keep list of incomplete decls.
+       (print_binding_level): Use list_length to count them.
+       (pushdecl): Build up the list.
+       (hack_incomplete_structures): Walk it and prune completed decls.
+
+Fri Jul 28 15:26:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (comp_target_types): Don't check const and volatile for
+       function types.
+       (comp_ptr_ttypes_real): Likewise.
+
+Thu Jul 27 15:40:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (comp_target_types): Fix.
+
+Thu Jul 27 15:10:48 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cp-tree.h (unsave_expr_now, build_unsave_expr,
+       cp_expand_decl_cleanup): Declare new routines.
+       * decl.c (cp_finish_decl, store_parm_decls,
+       hack_incomplete_structures): Change all cals from
+       expand_decl_cleanup to cp_expand_decl_cleanup.
+       * gc.c (protect_value_from_gc): Likewise.
+       * expr.c (cplus_expand_expr): Handle UNSAVE_EXPRs.
+       * tree.c (unsave_expr): New routine to build an UNSAVE_EXPR.
+       (unsave_expr_now): Backend routine used by tree expander.
+       (cp_expand_decl_cleanup): Wrap second argument in an UNSAVE_EXPR to
+       work around a limitation in the backend.  The backend uses the
+       cleanups multiple times, on disjoint control flows, so we cannot
+       pass unsaved SAVE_EXPRs to the backend.
+       * tree.def (UNSAVE_EXPR): New tree code.
+       * typeck.c (c_expand_return): Move goto/return code up inside
+       conditional, as we don't always want to do this, we only want to do
+       this when we don't otherwise finish with this control flow.
+
+Thu Jul 27 10:38:43 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (typespec): Only complain about typeof if we're not
+       getting it from a system header.
+
+Thu Jul 27 10:26:23 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       Clean up prefix attribute handling.
+       * parse.y (reserved_declspecs): Link prefix attributes with declspecs.
+       (declmods): Likewise.
+       (all rules that reference typed_declspecs and declmods): Call
+       split_specs_attrs or strip_attrs to separate declspecs and attrs.
+       (lang_extdef): Delete resetting of prefix_attributes.
+       (template_def, notype_declarator rule): Use NULL_TREE for
+       prefix_attributes.
+       (condition): Use NULL_TREE for prefix_attributes.
+       (setattrs): Deleted.
+       (nomods_initdcl0): Set prefix_attributes to NULL_TREE.
+       (component_decl): Delete resetting of prefix_attributes.
+       (component_decl_1, notype_components rule): Use NULL_TREE for
+       prefix_attributes.
+       (simple_stmt): Delete resetting of prefix_attributes.
+
+Mon Jul 24 13:37:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (convert_harshness): Deal with reference conversions before
+       others.  Actually do array->pointer decay.  Call comp_target_types
+       with pointer types rather than their targets.
+
+       * typeck.c (comp_target_types): Avoid assigning D const * to B *.
+
+Mon Jul 24 08:54:46 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * pt.c (to_be_restored): Move decl to global scope.
+
+Sat Jul 22 12:22:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_decl): Put back clearing of DECL_IN_AGGR_P.
+
+Fri Jul 21 17:09:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grokdeclarator): Downgrade error about 'extern int A::i'
+       to pedwarn.
+
+       * pt.c (instantiate_template): Also avoid instantiation if the
+       function has already been declared to be a specialization.
+
+       * decl2.c (check_classfn): Ignore cname argument, and return the
+       matching function.
+
+       * decl.c (start_decl): Handle declarations of member functions
+       outside of the class (i.e. specialization declarations).
+
+Thu Jul 20 10:34:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_struct): Don't mess with the type of bitfields.
+
+       * various.c: s/TYPE_POINTER_TO/build_pointer_type/.
+
+Thu Jul 20 01:43:10 1995  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (expand_aggr_init): Assume LOOKUP_ONLYCONVERTING if init
+       is not a parameter list (TREE_LIST).
+       (expand_default_init): If LOOKUP_ONLYCONVERTING is set, then set
+       LOOKUP_NO_CONVERSION so that we don't allow two-level conversions,
+       but don't set it otherwise.
+
+Wed Jul 19 20:32:01 1995  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (expand_default_init): Don't allow two-level conversions
+       during construction.
+
+Wed Jul 19 18:06:37 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_headof): The type of dyncasting to a pointer to cv
+       void, should be pointer to cv void.
+
+Wed Jul 19 17:25:43 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_dynamic_cast): Allow casting in const.
+
+Wed Jul 19 16:34:27 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (build_const_cast): If we are passed error_mark_node,
+       return it.
+
+Wed Jul 19 15:24:48 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * class.c (push_nested_class): Make sure TYPE is non-nil.
+
+       * cvt.c (type_promotes_to): Watch for error_mark_node on the
+       incoming TYPE.
+
+Wed Jul 19 13:23:12 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
+
+       * cp-tree.h (SIGTABLE_VT_OFF_NAME): Renamed from SIGTABLE_OFFSET_NAME.
+       (SIGTABLE_VB_OFF_NAME): New macro.
+       (vt_off_identifier): Renamed from offset_identifier.
+       (vb_off_identifier): Added extern declaration.
+
+       * decl.c (vt_off_identifier): Renamed from offset identifier.
+       (vb_off_identifier): New variable to hold the identifier for the
+       sigtable field vb_off.
+       (init_decl_processing): Initialize vb_off_identifier.
+       Renamed vt_off_identifier from offset_identifier.
+       * sig.c (build_signature_method_call): Renamed offset_identifier and
+       local variable offset to vt_off_identifer and vt_off, respecitively.
+       * sig.c (build_signature_table_constructor): Renamed offset to vt_off.
+
+       * decl.c (init_decl_processing): Add vb_off field to
+       sigtable_entry_type.  Reorder fields so that pfn gets properly
+       aligned at a 64 bit boundary on the Alpha.
+       * sig.c (build_signature_table_constructor): Build the constructor
+       according to the new layout.  Set the vb_off field to -1 for now.
+
+       * decl.c (init_decl_processing): Align sigtable_entry_type on word
+       boundaries instead of double word boundaries to save space.
+
+Tue Jul 18 16:58:37 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (cp_convert): Always call build_cplus_new for a ctor.
+
+Tue Jul 18 14:24:53 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (opt.component_decl_list): Only forbid private/protected
+       in anonymous unions.  We need to make this know when the type is
+       defined for an object, to not give the error.
+
+Mon Jul 17 14:22:44 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (opt.component_decl_list): Don't allow access control
+       as private or protected for union members.
+
+Sun Jul 16 14:01:00 1995  Jim Wilson  <wilson@chestnut.cygnus.com>
+
+       * lex.c (check_newline): For 'p' case, move goto skipline line to
+       before end brace for 'pragma'.
+
+Fri Jul  7 13:55:58 1995  Mike Stump  <mrs@cygnus.com>
+
+       * g++.1: Tiny updates.
+
+Fri Jul  7 13:05:20 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (cp_finish_decl): Only destruct local static variables if
+       they are constructed, and only construct the first time control
+       passes completely through its declaration (if not initialized with a
+       constant-expression).
+       (expand_static_init): Likewise.
+
+Wed Jul  5 14:05:04 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * typeck.c (comptypes, case OFFSET_REF): If either offset basetype
+       is a TEMPLATE_TYPE_PARM, give a match.
+
+Fri Jun 30 15:42:57 1995  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (build_overload_value): Handle encoding of null pointer
+       constants (or any pointer with a constant numeric value) for
+       templates.
+
+Fri Jun 30 13:45:51 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * call.c (convert_harshness): Add QUAL_CODE when we're faced with
+       const vs non-const for void conversions.
+
+Fri Jun 30 10:19:52 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_all_catch): Fix problem with finding an
+       outer nested try block when there is no code to separate it from an
+       inner try block.
+
+Fri Jun 30 02:22:26 1995  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (dfs_pushdecls): Consume 2 or 3 orders of magnitude less
+       memory please when virtual bases are used.
+
+Thu Jun 29 19:03:47 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (build_vbase_path): Avoid testing things that cannot be
+       null to see if they are null.
+       * cvt.c (convert_pointer_to_vbase): Remove code that doesn't work.
+       * decl.c (finish_function): Pass a type into the new
+       convert_pointer_to_vbase instead of a binfo.
+       * search.c (convert_pointer_to_vbase): Rewritten to use get_vbase
+       and convert_pointer_to_real.
+       (expand_indirect_vtbls_init): Use convert_pointer_to_vbase instead
+       of the more cryptic call to get_vbase.
+
+Thu Jun 29 09:35:05 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (BOOL_TYPE_SIZE): Fix broken SLOW_BYTE_ACCESS check.
+
+Thu Jun 29 03:43:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (instantiate_template): Don't strip 'this' twice.
+
+       * pt.c (coerce_template_parms): Allow null pointer constants.
+
+       * decl.c (revert_static_member_fn): But only if DECL_ARGUMENTS is
+       set.
+
+Wed Jun 28 18:39:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (revert_static_member_fn): Also remove 'this' from
+       DECL_ARGUMENTS.
+       * decl2.c (check_classfn): Don't revert this function until we get a
+       match.
+
+Wed Jun 28 14:07:27 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (component_decl): Clear PREFIX_ATTRIBUTES here.
+
+Wed Jun 28 11:05:13 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_file): Handle global vector news.
+       * init.c (build_new): Encode vector news so that later we will know
+       how many elements there are.
+
+Mon Jun 26 13:38:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * expr.c (cplus_expand_expr): Don't mess with temp slots.
+
+       * decl2.c (warn_if_unknown_interface): Don't crash if tinst_for_decl
+       returns null.
+
+       * decl2.c (check_classfn): Use revert_static_member_fn.
+       * decl.c (revert_static_member_fn): Diagnose static member functions
+       declared const or volatile.
+
+       * decl2.c (grokfield): Check for missing default args here, too.
+       (check_default_args): Function to do the checking.
+       * decl.c (pushdecl): Use it.
+
+       * decl.c (pushdecl): Don't warn about shadowing a member of `this'
+       if there is no `this'.
+
+Sun Jun 25 11:34:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Downgrade 'called before definition'
+       to a warning, as it ought to go away after Monterey.
+
+Sat Jun 24 14:18:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (coerce_template_parms): Don't do extra checking on pointer
+       to member arguments.
+
+       * class.c (finish_struct): const and reference members don't prevent
+       a class from being an aggregate.
+
+       * class.c (finish_struct): Signatures are always aggregates.
+
+Fri Jun 23 17:20:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (check_classfn): Improve error message.
+
+       * pt.c (tsubst): Handle PROMOTE_PROTOTYPES.
+
+Thu Jun 22 01:50:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (comptypes): Don't ignore method quals.
+
+       * class.c (finish_struct): Non-abstract virtuals are always USED.
+
+       * decl.c (build_ptrmemfunc_type): The underlying union type isn't
+       IS_AGGR_TYPE, either.
+       * class.c (finish_struct): Use CLASSTYPE_NON_AGGREGATE instead.
+       * cp-tree.h: Likewise.
+
+       * cp-tree.h (lang_type): Add aggregate.
+       (CLASSTYPE_AGGREGATE): New macro.
+       (TYPE_NON_AGGREGATE_CLASS): Likewise.
+       * class.c (finish_struct): Determine whether a class is an
+       aggregate.
+       * decl.c (cp_finish_decl): Check TYPE_NON_AGGREGATE_CLASS instead of
+       TYPE_NEEDS_CONSTRUCTING.
+       * typeck2.c (digest_init): Check TYPE_NON_AGGREGATE_CLASS for
+       subobjects, too.
+
+       * pt.c (tsubst, PARM_TYPE): Propagate DECL_ARTIFICIAL.
+
+       * decl.c (start_function): For pre-parsed functions, layout all of
+       the parm decls again.
+       (grokvardecl): TREE_PUBLIC depends on DECL_THIS_EXTERN, not
+       DECL_EXTERNAL.
+
+       * pt.c (coerce_template_parms): Improve checking for invalid
+       template parms.
+
+Wed Jun 21 12:01:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Forbid declaration of a static member
+       with the same name as its enclosing class.
+
+Mon Jun 19 10:28:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_function): Clear current_class_decl.
+
+       * typeck.c (build_conditional_expr): Use convert (boolean_type_node
+       instead of truthvalue_conversion.
+
+       * class.c (finish_struct): A data member with the same name as the
+       class doesn't suppress constructors.
+
+Fri Jun 16 18:11:39 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
+
+       * decl.c (start_function): If current_class_decl is a signature
+       pointer, don't dereference it but set C_C_D to current_class_decl.
+
+Fri Jun 16 17:06:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (duplicate_decls): Complain about virtual functions
+       redeclared to be inline.
+
+Fri Jun 16 13:20:38 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (get_unique_name): New routine to name unnamed namespaces.
+       (push_namespace): Use get_unique_name for naming unnamed namespaces.
+
+Thu Jun 15 15:00:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y: Call cplus_decl_attributes with prefix_attributes where
+       appropriate.
+
+Wed Jun 14 19:24:49 1995  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (get_vbase): New routine to switch hierarchies from the
+       CLASSTYPE_VBASECLASSES to the normal one.
+       (expand_indirect_vtbls_init): Use get_vbase to figure out how we
+       want to convert to a vbase pointer.
+
+Mon Jun 12 17:50:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (instantiate_class_template): Add the new instantiation to
+       template_classes.
+       (do_pending_expansions): Call instantiate_member_templates on all of
+       the classes in template_classes.
+
+Mon Jun 12 12:36:59 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (complete_array_type): Fill in the TYPE_DOMAIN of our
+       TYPE_MAIN_VARIANT if it is not filled in.
+       * init.c (build_delete): If the TYPE_DOMAIN is not set, give an
+       error instead of core dumping.
+
+Mon Jun 12 10:41:40 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (can_convert): Also check for distance > 0.
+       (can_convert_arg): Likewise.
+       (user_harshness): Likewise.
+
+Fri Jun  9 19:17:21 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * g++.c (MATH_LIBRARY): Provide default.
+       (main): Always link with the math library if we link with libstdc++.
+
+       * decl.c (start_function): Complain about redefinition of a function
+       even when the pending_inline version is compiled after the other
+       version.
+
+Thu Jun  8 15:44:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * gc.c (build_dynamic_cast): Build up a reference to a parameter of
+       aggregate type.
+
+Wed Jun  7 15:31:57 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (build_vec_delete): Resolve an offset ref before we try to
+       use it.
+
+Wed Jun  7 14:19:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): If the class lacks a constructor or
+       assignment operator, return error_mark_node.
+       (common_type): Use build_cplus_array_type.
+
+Tue Jun  6 09:41:27 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (dont_allow_type_definitions): New variable set when types
+       cannot be defined.
+       (finish_struct): Use it.
+       * cp-tree.h (dont_allow_type_definitions): Define it.
+       * parse.y (primary, handler_seq): Set it.
+
+Mon Jun  5 18:49:38 1995  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (build_opfncall): Use DECL_CHAIN, not TREE_CHAIN for
+       results from lookup_fnfields.  Always give warning/error on bad
+       code.
+
+Mon Jun  5 11:39:37 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (member_init_ok_or_else): Don't allow initialization of
+       an ancestor's member from within a constructor.
+
+Mon Jun  5 11:20:34 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
+
+       * sig.c (build_signature_table_constructor): Use DECL_CONTEXT
+       instead of DECL_CLASS_CONTEXT for calculating the vfield offset so
+       abstract virtual functions are handled correctly.
+
+       * sig.c (build_signature_table_constructor): Store the correct
+       delta in signature table entries.  It does not yet work for
+       classes with virtual base classes as implementations of signatures.
+       (build_signature_method_call): Add the delta to the object_ptr
+       before generating the function call.
+
+       * call.c (build_method_call): Make instance_ptr the signature
+       pointer itself instead of dereferencing the optr.
+       * sig.c (build_signature_method_call): Dereference the optr for the
+       direct and virtual calls.
+
+       * sig.c (build_signature_table_constructor): Make the tag for
+       default implementations -1 instead of 2.
+       (build_signature_method_call): Change the generated conditional
+       expression correspondingly.
+
+       * sig.c (build_signature_pointer_constructor): Deleted the sorry
+       message that said we can't handle multiple inheritance for
+       implementations of signatures
+       (build_signature_method_call): Use the offset from the sigtable
+       entry instead of the vptr field from the signature pointer for
+       building a virtual function call.
+
+       * class.c (build_vfn_ref): Deleted signature specific code, we don't
+       call this function anymore from build_signature_method_call.
+
+       * cp-tree.h (SIGNATURE_VPTR_NAME): Deleted.  We use the right vptr
+       field in the object now instead of in the signature pointer/ref. 
+       (build_vptr_ref): Deleted extern declaration.
+       * sig.c (build_vptr_ref): Deleted.
+       (build_signature_pointer_or_reference_type): Deleted construction of
+       the vptr field.
+       (build_signature_pointer_constructor): Deleted initialization of/
+       assignment to the vptr field.
+
+       * sig.c (build_signature_table_constructor): Convert the signature
+       table entry fields to their correct types.
+
+       * sig.c (build_signature_table_constructor): Don't call digest_init
+       for the fields of a sigtable entry, it's wasted time.
+
+       * sig.c (build_signature_table_constructor): Correctly set the
+       offset and index fields of a sigtable entry.  Build the constructor
+       the way digest_init does, digest_init can't handle initializing an
+       anonymous union inside a struct.
+       (build_signature_method_call): Use the index field instead of the
+       delta field to get the vtable index.
+
+       * decl.c (init_decl_processing): Fix number of fields for building
+       sigtable_entry_type.
+
+       * cp-tree.h (tag_identifier, offset_identifier): Added extern decls.
+       (SIGTABLE_CODE_NAME): Renamed to SIGTABLE_TAG_NAME.
+       (SIGTABLE_PFN_NAME): Deleted, we'll use VTABLE_PFN_NAME instead.
+       * decl.c (tag_identifier, offset_identifier): New variables to
+       hold the identifiers for the sigtable fields tag and offset.
+       (init_decl_processing): Initialize these variables.
+       (init_decl_processing): Use these variables to build the
+       sigtable_entry_type structure.  Rename the code and offset fields
+       to tag and delta, respectively; add offset and index fields. Changed
+       types of fields from short_integer_type_node to delta_type_node.
+       * sig.c (build_signature_table_constructor): Rename code and offset
+       to tag and delta, respectively.
+       (build_signature_method_call): Likewise.  Use above variables.
+
+Thu Jun  1 17:03:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (lookup_name_real): Don't try to look anything up in an
+       erroneous object.
+
+Fri Jun  2 10:30:14 1995  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (build_overload_int): New routine.  Break out
+       functionality from build_overload_value so we can reuse it.
+       (build_overload_value): Handle pointer to member functions as value
+       parameters for templates.
+       (build_overload_identifier): Since template parameters are shared
+       among all instantiations, we have to substitute in the real types
+       in TREE_TYPE (parm).
+       pt.c (coerce_template_parms): Likewise.
+       (push_template_decls): Likewise.
+       (grok_template_type): Deleted as template parameters are shared
+       among all instantiations.
+
+Wed May 31 19:10:32 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (grokdeclarator): Always give errors on constant overflow
+       for array indices.
+
+Wed May 31 11:39:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (commonparms): Don't abort if simple_cst_equal returns < 0.
+       (build_c_cast): Don't tack on a NON_LVALUE_EXPR when casting to
+       reference type.
+       (build_indirect_ref): Fix check for *&.
+
+Fri Jun 16 06:54:03 1995  Mike Stump  <mrs@cygnus.com>
+
+       * Version 2.7.0 released.
+
+Fri Jun 16 15:07:29 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Make-lang.in (DEMANGLER_PROG): Add LIBS.
+
+Thu Jun 15 15:00:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (define_function): Don't set DECL_INTERFACE_KNOWN.
+
+Wed Jun  7 20:00:31 1995  Mike Stump  <mrs@cygnus.com>
+
+       * *.[chy]: Change all callers of finish_decl to cp_finish_decl.
+       * decl.c (finish_decl): New routine to handle call backs from the
+       mid end (declare_hidden_char_array).
+
+Wed Jun  7 19:02:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_function): Handle setting C_C_D here.
+       (set_C_C_D): Removed.
+       (struct saved_scope): Remove class_decl.
+       (push_to_top_level): Don't save current_class_decl.
+       (pop_from_top_level): Don't restore current_class_decl or C_C_D.
+       (struct cp_function): Add C_C_D.
+       (push_cp_function_context): Save C_C_D.
+       (pop_cp_function_context): Restore C_C_D.
+
+Fri Jun  2 11:05:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (set_C_C_D): New function.  suspend_momentary before
+       building C_C_D.
+       (pop_from_top_level): Call it.
+       (start_function): Likewise.
+       (pop_cp_function_context): Likewise.
+
+       * class.c, cp-tree.h, decl.c, decl2.c, parse.y: Lose all references
+       to current_vtable_decl, CLASSTYPE_INST_VAR and CLASSTYPE_VTBL_PTR.
+
+       * decl.c (push_cp_function_context): Save current_class_decl.
+       (pop_cp_function_context): Restore current_class_decl and set C_C_D.
+       (pop_from_top_level): Don't use CLASSTYPE_INST_VAR to set C_C_D.
+       (start_function): Likewise.
+
+       * class.c (popclass): Don't mess with current_class_decl,
+       current_vtable_decl, or C_C_D.
+
+Mon May 29 12:45:10 1995  Paul Eggert  <eggert@twinsun.com>
+
+       * Make-lang.in (c++.mostlyclean): Remove $(DEMANGLER_PROG).
+
+Wed May 24 15:55:18 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * decl.c (duplicate_decls): Check simple_cst_equal result against 0.
+       * decl2.c (finish_anon_union): Likewise.
+       * method.c (largest_union_member): Likewise.
+
+Wed May 24 14:41:11 1995  H.J. Lu  <hjl@nynexst.com>
+
+       * Make-lang.in (cxxmain.o): Replace single quotes with backslashes.
+
+Mon May 22 17:38:48 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Make-lang.in (g++, g++-cross, cc1plus, DEMANGLER_PROG):
+       Use $@ instead of output name so works even if have .exe.
+       (cxxmain.o): Use cp if ln -s fails.
+       (c++.install-man): Use $(exeext) in executable names.
+       (c++.mostlyclean, stage[1-4]): Use $(objext) in object file names.
+       * Makefile.in (../cc1plus): Use $(exeext) in name of executable.
+
+Wed May 24 01:39:03 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): parms can be null, duh.
+
+Tue May 23 01:32:09 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): If convert_arguments failed, just bail.
+
+Fri May 19 10:31:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (convert_force): Pass LOOKUP_NORMAL to cp_convert.
+
+       * tree.c (copy_to_permanent): Oops.
+
+Fri May 19 10:01:07 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-tree.h (break_out_target_exprs): Add decl.
+
+Thu May 18 13:02:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_function): Move *all* interface handling stuff after
+       the pushdecl.
+
+       * tree.c (mapcar): Renamed from make_deep_copy and generalized.
+       (perm_manip): Return t if permanent, otherwise 0.
+       (copy_to_permanent): Use them.
+       (bot_manip): Helper for break_out_target_exprs.
+       (break_out_target_exprs): New function.  Uses mapcar.
+
+       * typeck.c (convert_arguments): Use it.
+
+       * method.c (hack_identifier): Use convert_from_reference to
+       dereference a reference.
+
+Wed May 17 17:54:54 1995  Mike Stump  <mrs@cygnus.com>
+
+       * call.c (convert_harshness): Move reference bashing before pointer
+       to member bashing.
+
+Wed May 17 16:57:53 1995  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (convert_to_reference): Only complain, if complaints are
+       wanted.
+       * typeck.c (build_function_call_real): Likewise.  If
+       LOOKUP_SPECULATIVELY is set and something won't work, return
+       NULL_TREE.
+       * cvt.c (cp_convert): Likewise.  Pass flags down to build_method_call.
+       (convert): Pass LOOKUP_NORMAL to cp_convert.
+       * typeck.c (convert_for_assignment): Likewise.
+       (convert_force): Pass LOOKUP_COMPLAIN to cp_convert.
+       (convert_arguments): Get out early if we get an error_mark_node.
+       (convert_for_initialization): Use cp_convert instead of convert so
+       that we can pass flags down.
+       * cp-tree.h (LOOKUP_SPECULATIVELY): Added documentation.
+
+Wed May 17 01:43:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck2.c (store_init_value): Don't take the MAIN_VARIANT of the
+       decl type.
+
+       * class.c (finish_struct): Don't complain about a class with no
+       user-defined constructors but with a member that has no default
+       constructor, as this is OK for aggregates.
+
+       * expr.c (cplus_expand_expr, NEW_EXPR): If this is an explicit
+       constructor call, mark slot addressable.
+
+Tue May 16 18:37:51 1995  Douglas Rupp  <drupp@cs.washington.edu>
+
+       * g++.c: Changed WINNT to _WIN32.
+
+Tue May 16 12:40:16 1995  Jason Merrill  <jason@lisa.cygnus.com>
+
+       * lex.c (handle_sysv_pragma): Don't use token_buffer.
+
+Tue May 16 12:05:26 1995  Mike Stump  <mrs@cygnus.com>
+
+       * call.c (resolve_scope_to_name): Add initial semantic support for
+       namespaces.
+       * class.c (finish_struct): Likewise.
+       * cp-tree.h (NAMESPACE_LEVEL): Likewise.
+       * cvt.c (build_up_reference, convert_to_reference): Likewise. 
+       * decl.c (binding_level::namespace_p, suspend_binding_level): Likewise.
+       (resume_binding_level, toplevel_bindings_p): Likewise
+       (namespace_bindings_p, declare_namespace_level): Likewise.
+       (resume_level, push_namespace, pop_namespace): Likewise.
+       (pop_everything, pushtag, duplicate_decls, pushdecl): Likewise.
+       (implicitly_declare, lookup_namespace_name): Likewise.
+       (lookup_name_real, start_decl, make_temporary_for_reference): Likewise.
+       (obscure_complex_init, finish_decl, expand_static_init): Likewise.
+       (grokvardecl, grokdeclarator, parmlist_is_exprlist): Likewise.
+       (store_parm_decls, hack_incomplete_structures): Likewise.
+       * decl2.c (get_temp_name, finish_anon_union): Likewise.
+       (current_namespace, push_namespace, pop_namespace): Likewise.
+       (do_namespace_alias, do_toplevel_using_decl): Likewise.
+       (do_class_using_decl): Likewise.
+       * error.c (dump_decl): Likewise.
+       * init.c (build_member_call, build_offset_ref): Likewise.
+       * lex.c (identifier_type): Likewise.
+       * parse.y (lang_extdef, using_decl, extdef): Likewise.
+       (component_decl_1, nested_name_specifier_1): Likewise.
+       * spew.c (yylex): Likewise.
+       * tree.def (NAMESPACE_DECL): Likewise.
+
+Tue May 16 11:55:35 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (push_overloaded_decl): Return the new decl even if it
+       can't be pushed.
+
+Tue May 16 11:00:37 1995  Jason Merrill  <jason@lisa.cygnus.com>
+
+       * typeck.c (decay_conversion): Split out from default_conversion.
+       (default_conversion): Call it.
+       (build_binary_op): Likewise.
+       (build_binary_op_nodefault): Use decay_conversion for truth ops.
+
+Mon May 15 12:47:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (warn_extern_redeclared_static): This is a pedwarn.
+       (duplicate_decls): Always use the old decl's linkage info.  Don't
+       play with linkage of consts.
+       (pushdecl): Don't play with linkage of consts.
+       (redeclaration_error_message): Don't complain about an old public
+       decl and a new non-public decl here.
+       (grokvardecl): Handle linkage of consts here.
+       (grokdeclarator): An 'extern inline' is public.  Pass constp to
+       grokvardecl.
+       (start_function): Wait until after the pushdecl to do some linkage
+       stuff.
+
+       * decl2.c (import_export_vtable): Make duplicates weak rather than
+       static if supported.
+       (import_export_inline): Likewise.
+       * pt.c (do_pending_expansions): Likewise.
+
+       * class.c (build_vbase_path): flag_assume_nonnull_objects only
+       affects reference conversion.
+
+       * init.c (emit_base_init): Build up an RTL_EXPR and add it to
+       rtl_expr_chain.
+       * decl.c, decl2.c: s/base_init_insns/base_init_expr/.
+
+Tue May 16 07:06:28 1995  Paul Eggert  <eggert@twinsun.com>
+
+       * method.c (numeric_output_need_bar): Renamed from misspelling.
+
+       * typeck.c (build_ptrmemfunc): Fix misspellings in messages.
+
+Sun May 14 10:26:22 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * lang-options.h, lang-specs.h: New files.
+
+Thu May 11 00:31:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (default_conversion): Don't check for BLKmode before
+       pulling out the decl_constant_value.
+
+       * decl.c (start_function): Clear named_labels and shadowed_labels.
+
+       * typeck.c (build_function_call_real): Also synthesize methods here.
+
+Wed May 10 00:55:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_file): Synthesize exported methods before the
+       reconsider loop.
+
+       * parse.y: Move declaration of flag_new_for_scope to file scope.
+
+Tue May  9 19:10:33 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c: Add flag_new_for_scope for new -ffor-scope flag.
+       * parse.y (FOR): Conditionalize the pushing and poping of scope for
+       the for-init-statement upon the new flag_new_for_scope.
+       * parse.y (try_block): Simplify and use compstmt.
+
+Mon May  8 12:41:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (define_function): Mark function decl artificial.
+
+Sun May  7 00:51:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (simple_stmt, FOR): Put back push/pop for condition scope.
+
+       * decl2.c (grokclassfn): DECLs don't have cv-qualified types.
+       * tree.c (build_cplus_method_type): Likewise.
+
+       * cp-tree.h (SET_DECL_ARTIFICIAL): Just set DECL_ARTIFICIAL to 1.
+
+       * typeck.c (build_function_call_real): If convert_arguments failed,
+       just bail.
+       (convert_arguments): If one of the arguments is error_mark_node,
+       just bail.
+
+Sat May  6 02:39:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (duplicate_decls): Don't check DECL_NOT_REALLY_EXTERN for
+       decls that don't include it.
+
+Fri May  5 14:23:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (duplicate_decls): Decls that have DECL_INTERFACE_KNOWN or
+       DECL_NOT_REALLY_EXTERN set aren't extern decls.
+
+       * typeck.c (build_indirect_ref): Don't call default_conversion for a
+       parameter of reference_type.
+       * cvt.c (convert_from_reference): Just use build_indirect_ref.
+
+       * pt.c (do_type_instantiation): Only instantiate member functions
+       that actually come from templates.
+
+Fri May  5 09:46:05 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y: Generalized cleanup of poplevels, and compound statements
+       and compound statements in try blocks.  Rewritten `for' rule so that
+       the scope of variables declared in the for clause is shortened to
+       span just to the end of the statement, instead of the whole
+       containing block.
+
+Fri May  5 00:37:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (convert_harshness): Handle pointers to members better.
+
+Thu May  4 16:00:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (delete_sanity): Do access control here.
+       * init.c (build_delete): Instead of here.
+
+       * Make-lang.in: Build c++filt.
+
+Wed May  3 02:59:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (cplus_decl_attributes): If we just modified a TYPE_DECL,
+       update our IDENTIFIER_TYPE_VALUE.
+
+Fri Apr 28 07:58:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * lex.c (cons_up_default_function): Fix linkage of #pragma
+       implemented functions.
+
+Thu Apr 27 16:56:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (build_overload_name): Simplify and fix repeated type
+       folding.
+
+       * decl.c (grokdeclarator): Prohibit pointers to void or reference
+       members.
+
+Thu Apr 27 09:49:07 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck2.c (process_init_constructor): Make sure initializers are
+       fully digested.
+
+Thu Apr 27 01:11:55 1995  Jason Merrill  <jason@python.cygnus.com>
+
+       * lex.c (cons_up_default_function): Always defer synthesis.
+
+Thu Apr 27 00:20:37 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (mark_inline_for_output): Don't play with pending_inline
+       stuff.
+
+Wed Apr 26 17:48:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (user_harshness): New function; like build_type_conversion,
+       but doesn't actually build anything.
+       (compute_conversion_costs): Use it instead of build_type_conversion.
+
+Wed Apr 26 17:11:25 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_function_call_real): Improve error message for
+       calling a non-function.
+
+       * method.c (hack_identifier): Lose check for calling a data member.
+
+Wed Apr 26 16:59:13 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck2.c (build_functional_cast): Remove very old cruft.
+       Seems like good code is generated without it.
+
+Wed Apr 26 00:47:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (do_build_assign_ref): Fix handling of anonymous unions.
+       (do_build_copy_constructor): Likewise.
+
+       * parse.y (simple_stmt, SWITCH): Call {push,pop}_switch.
+
+       * decl.c (push_switch): New function.
+       (pop_switch): Likewise.
+       (define_case_label): Check for jumping over initialization.
+
+       * call.c (build_method_call): Check for an inline function being
+       called before its definition has been seen.
+       * typeck.c (build_function_call_real): Likewise.
+
+       * decl.c (duplicate_decls): Check for a function being redeclared
+       inline after its address has been taken.
+
+       * typeck.c (build_conditional_expr): Handle related class lvalues.
+
+Tue Apr 25 13:20:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (do_pending_expansions): Don't expand unused templates.
+
+       * parse.y (component_decl): Accept a lone semicolon.
+
+Tue Apr 25 00:25:56 1995  Jason Merrill  <jason@rtl.cygnus.com>
+
+       * call.c (build_method_call): Don't allow an RTL_EXPR to serve as the
+       object parameter anymore.
+
+       * expr.c (cplus_expand_expr): Don't create RTL_EXPRs with no insns.
+
+Mon Apr 24 12:35:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (simple_stmt, decl case): Clear prefix_attributes.
+       (lang_extdef): Likewise.
+
+       * parse.y (maybe_parmlist): New rule for use in declarators where
+       this could either be a list of expressions or parameters.  Calls
+       suspend_momentary before deciding which.
+       (direct_after_type_declarator): Use it.
+       (complex_direct_notype_declarator): Use it.
+
+       * pt.c (tsubst): Propagate attributes const and noreturn.
+
+       * typeck.c (build_modify_expr): If warn_synth, call build_opfncall
+       before doing the default thing.
+
+Thu Apr 27 21:49:36 1995  Doug Evans  <dje@cygnus.com>
+
+       * typeck.c (common_type): Call lookup_attribute instead of
+       value_member.
+
+Tue Apr 25 18:07:43 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Make-lang.in: Change "realclean" to "maintainer-clean".
+
+Sun Apr 23 12:32:38 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_file): Fix broken linked list handling.
+
+Fri Apr 21 18:08:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_base_struct): Don't set TYPE_HAS_COMPLEX_*_REF
+       as often.
+       (finish_struct): Likewise.
+
+       * various: Use TYPE_HAS_TRIVIAL_* instead of TYPE_HAS_COMPLEX_*.
+
+       * cp-tree.h (TYPE_HAS_TRIVIAL_INIT_REF): New macro.
+       (TYPE_HAS_TRIVIAL_ASSIGN_REF): New macro.
+
+Fri Apr 21 15:52:22 1995  Jason Merrill  <jason@python.cygnus.com>
+
+       * typeck.c (c_expand_return): Only expand a returned TARGET_EXPR if
+       it is of the same type as the return value.
+
+Fri Apr 21 03:01:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_file): Reconsider if synthesizing a method wrote
+       out its assembly.
+
+       * typeck.c (convert_for_initialization): Don't call a trivial copy
+       constructor.
+
+       * typeck2.c (store_init_value): Only abort if the type has a
+       non-trivial copy constructor.
+
+       * typeck.c (c_expand_return): If we're returning in a register and
+       the return value is a TARGET_EXPR, expand it.  Only do
+       expand_aggr_init if we're returning in memory.
+       (expand_target_expr): Function to expand a TARGET_EXPR.
+       (build_modify_expr): Use it.
+
+       * tree.c (build_cplus_new): Layout the slot.
+
+       * expr.c (cplus_expand_expr): Use expand_call to expand the call
+       under a NEW_EXPR, so the target is not discarded.
+
+Thu Apr 20 14:59:31 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_dynamic_cast): Tighten error checking.
+
+Thu Apr 20 11:23:54 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * expr.c (cplus_expand_expr): Only abort if the returned target is
+       different from what we expected if the type has a non-trivial copy
+       constructor.
+
+       * decl2.c (cplus_decl_attributes): Attributes applied to a template
+       really apply to the template's result.
+
+       * tree.c (lvalue_p): Check IS_AGGR_TYPE instead of TREE_ADDRESSABLE
+       to decide whether to consider a CALL_EXPR an lvalue.
+
+       * class.c (finish_struct_bits): Only set TREE_ADDRESSABLE if the
+       type has a non-trivial copy constructor.
+
+       * decl.c (start_function): If interface_known, unset
+       DECL_NOT_REALLY_EXTERN on the function.
+
+Wed Apr 19 16:53:13 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (do_function_instantiation): Handle explicit instantiation of
+       member functions.
+       (do_type_instantiation): Handle 'inline template class foo<int>',
+       meaning just spit out the vtable.
+
+       * lex.c (cons_up_default_function): Set DECL_NOT_REALLY_EXTERN on
+       the consed functions.
+
+       * decl2.c (import_export_inline): Set DECL_INTERFACE_KNOWN.
+
+Wed Apr 19 16:28:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * call.c, class.c, decl2.c, gc.c, init.c, parse.y, pt.c, search.c,
+       typeck.c: Include output.h.
+
+Wed Apr 19 14:57:21 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
+
+       * call.c (build_method_call): Allow a signature member functions to
+       be called from a default implementation.
+
+Wed Apr 19 10:21:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c (finish_repo): Remember what directory we are in.
+
+       * search.c (expand_upcast_fixups): Don't mess with abort_fndecl.
+
+       * repo.c: Use obstacks instead of fixed-size buffers.  Don't spit
+       out the second copy of the symbol name.  Don't remember COLLECT_GCC.
+
+Wed Apr 19 02:32:40 1995  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (virtual_context): New function to get the virtual
+       context of a function.
+       (expand_upcast_fixups): New function to generate runtime vtables.
+       (fixup_virtual_upcast_offsets): Likewise.
+       (expand_indirect_vtbls_init): Use fixup_virtual_upcast_offsets to
+       ensure that the this offsets for upcasts from virtual bases into
+       other virtual bases or non-virtual bases are correct at construction
+       time and destruction time.
+       * class.c (fixup_vtable_deltas): Modify to fixup all offsets in all
+       vtables in all virtual bases, instead of just one vtable in each
+       virtual base.
+       (fixup_vtable_deltas1): Likewise.
+
+Tue Apr 18 03:57:35 1995  Michael Meissner  <meissner@cygnus.com>
+
+       * Makefile.in (lex.o): Add dependency on c-pragma.h.
+
+       * lex.c (handle_sysv_pragma): Use NULL_PTR and NULL_TREE as
+       appropriate, instead of 0.
+
+Mon Apr 17 12:28:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (pushdecl): Use decls_match, not duplicate_decls, for
+       comparing local and global decls.
+
+Fri Apr 14 01:46:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (convert_arguments): Only prohibit passing to ... of
+       types with non-trivial copy constructors.
+
+       * repo.c (repo_template_used): Don't try to mess with no id.
+
+Fri Apr 14 23:32:50 1995  Per Bothner  <bothner@rtl.cygnus.com>
+
+       * decl.c (duplicate_decls):  Use cp_warning_at for redundant-decls.
+
+Thu Apr 13 15:37:42 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-tree.h (current_tinst_level): Delete declaration, since it's
+       static inside pt.c.
+
+       * typeck.c (build_modify_expr): Catch incompatible array assignment.
+
+       * parse.y (attribute_list, attrib): Rewrite actions to feed the
+       right stuff to decl_attributes.
+
+Thu Apr 13 11:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * search.c (dfs_debug_mark): Check for magic virtual like
+       import_export_vtable.
+
+       * typeck.c (build_binary_op_nodefault): Don't call cp_pedwarn with
+       four args.
+
+Wed Apr 12 12:02:57 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (finish_file): Move prevtable pass before needs_messing_up
+       decision.
+
+Tue Apr 11 11:20:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_decl): If we're writing out a static data member of
+       a class, we want the debug info for that class.
+
+       * gc.c (build_t_desc): Check linkage of a class properly.
+
+       * class.c (finish_struct): Set the 'headof' offset for the main
+       vtable properly.
+       (prepare_fresh_vtable): Fix typeinfo pointer here.
+       (modify_one_vtable): Instead of here.
+
+Mon Apr 10 12:15:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c (repo_get_id): New function to return the interesting
+       identifier for a repo entity.
+       (repo_template_used): Use it.
+       (repo_template_instantiated): Mark the id as chosen.
+       (init_repo): Record whether or not the id was chosen.
+       (finish_repo): Note if an id was newly chosen.
+
+       * pt.c (do_function_instantiation): Call repo_template_instantiated.
+       (do_type_instantiation): Likewise.  Don't diagnose multiple
+       instantiation.
+
+       * decl2.c (finish_file): Use DECL_NOT_REALLY_EXTERN when deciding
+       whether or not to synthesize a method.
+
+       Undo these changes:
+       * class.c (finish_vtbls): build more vtables if flag_rtti is on.
+       * class.c (modify_all_direct_vtables): ditto.
+       * init.c (expand_direct_vtbls_init): expand more vtables if
+       flag_rtti is on.
+
+Sat Apr  8 17:45:41 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_headof): Use ptrdiff_type_node instead of
+       integer_type_node on pointer arithmetic.
+
+Sat Apr  8 11:57:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): Undo previous change.
+
+Thu Apr  6 01:23:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Makefile.in (compiler): Remove ../cc1plus before rebuilding it.
+
+       * repo.c (get_base_filename): Put the .rpo file in the directory
+       with the object file, not the source.
+
+       * typeck.c (build_conditional_expr): Handle pmf's better.
+
+       * repo.c (finish_repo): Also use ASM_OUTPUT_LABELREF to print out
+       the name of the symbol.
+
+Wed Apr  5 15:24:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c (open_repo_file): Make repo filename DOS-compliant.
+       (*): Also write a new repo file if some previously-used
+       templates are no longer used.  Only remember the identifier.
+
+       * lex.c (cons_up_default_function): If this function belongs to a
+       template class, call repo_template_used for it.
+
+       * repo.c (repo_template_used): Using a class means using its vtable,
+       if any.
+       (finish_repo): Likewise.
+
+       * typeck.c (build_modify_expr): Only wrap TARGET_EXPRs in RTL_EXPRs
+       if the type has a complex copy constructor.
+
+       * decl2.c (lang_decode_option): -frepo implies
+       -fno-implicit-templates.
+
+       * decl.c (start_function): Clear current_{base,member}_init_list.
+
+       * lex.c (init_lex): Also unset *_eq if ! flag_operator_names.
+
+Tue Apr  4 16:11:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (struct cp_function): Add {base,member}_init_list.
+       (push_cp_function_context): Save current_{base,member}_init_list.
+       (pop_cp_function_context): Restore them.
+
+Mon Apr  3 16:55:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c (get_base_filename): Take filename parm, fix logic bug.
+
+       * typeck.c (build_compound_expr): Do not warn about a compound expr
+       in which the first expression has no side effects.
+       (build_x_compound_expr): Warn here instead.
+       (build_conditional_expr): Don't warn about a conditional expression
+       between an enum and the type it promotes to.
+
+       * init.c (build_new): Handle initialization of arrays of builtins
+       properly.
+
+Mon Apr  3 15:08:04 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * repo.c: Include config.h to get definitions of bcopy and rindex
+       on systems that don't have them (e.g., SVR4).
+
+Mon Apr  3 14:41:55 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_table): Pass NULL_TREE instead of init to
+       finish_decl so that it won't try and do error checking on the
+       initializer.
+
+Mon Apr  3 10:45:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c (get_base_filename): Analyze COLLECT_GCC_OPTIONS to
+       determine whether this compile used -c -o.
+       (open_repo_file): Use get_base_filename.  Remove the extension.
+       (finish_repo): Spit out the values of main_input_filename,
+       COLLECT_GCC and COLLECT_GCC_OPTIONS.
+
+       * parse.y (structsp): Add TYPENAME_KEYWORD complex_type_name.
+
+Sun Apr  2 23:43:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * search.c (compute_access): Don't try to do access control on
+       nested types.
+
+Fri Mar 31 10:14:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * repo.c: New file to handle things repo.
+
+       * pt.c (instantiate_template): Call repo_template_used if the
+       definition is accessible.
+       (mark_function_instantiated): Split out from
+       do_function_instantiation.
+       (mark_class_instantiated): Split out from do_type_instantiation.
+
+       * parse.y (template_instantiate_once): Call repo_template_used.
+
+       * lex.c (lang_init): Call init_repo.
+
+       * decl2.c: Handle flag_use_repository.
+       (finish_file): Call finish_repo.
+
+       * decl.c (start_method): Call repo_template_used if this is a
+       template method.
+
+       * Makefile.in (CXX_OBJS): Add repo.o.
+       (repo.o): Add dependencies.
+
+       * Make-lang.in (CXX_SRCS): Add repo.c.
+
+       * decl.c (start_function): If DECL_INTERFACE_KNOWN and
+       DECL_NOT_REALLY_EXTERN are both set, unset DECL_EXTERNAL.
+
+       * typeck.c (build_binary_op_nodefault): Identify the invalid operand
+       types used.
+
+       * decl.c (duplicate_decls): Propagate DECL_NOT_REALLY_EXTERN.
+
+Thu Mar 30 17:54:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Tidy up use of build_type
+       and result_type.  When checking for comparison between signed
+       and unsigned, use result_type rather than the (possibly shortened)
+       type of op0.  Also, don't warn about equality comparison of a
+       signed operand to an unsigned constant that fits in the signed
+       type.
+
+       * method.c (do_build_copy_constructor): Reverse
+       current_base_init_list after we've built it up.
+
+Thu Mar 30 14:35:18 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (build_throw): Never warn about the value of throw not
+       being used.
+
+Thu Mar 30 13:16:54 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_catch_block): Check for bad catch parameter
+       declarations.
+
+Thu Mar 30 13:06:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_function): Only set DECL_NOT_REALLY_EXTERN if
+       DECL_EXTERNAL is not already set.
+
+Thu Mar 30 11:26:24 1995  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (emit_thunk): Let poplevel know that the last level is
+       for a function so it can create a BLOCK_NODE and set DECL_INITIAL.
+
+Thu Mar 30 11:15:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (import_export_inline): Don't set DECL_NOT_REALLY_EXTERN
+       here.
+
+       * decl.c (grokdeclarator): OK, don't abort if we see a decl with
+       METHOD_TYPE.
+       (finish_function): Set DECL_EXTERNAL and DECL_NOT_REALLY_EXTERN on
+       all deferred inlines.
+
+Wed Mar 29 19:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cp-tree.h (DECL_THIS_INLINE): New macro.
+       (DECL_NOT_REALLY_EXTERN): New macro.
+       (DECL_THIS_STATIC): New macro.
+
+       * decl.c: Lose all references to current_extern_inline.  Break
+       inline semantics into DECL_INLINE for actual inlining and
+       DECL_THIS_INLINE for the linkage wierdness.  Use DECL_THIS_STATIC.
+       * decl2.c: Use DECL_NOT_REALLY_EXTERN to indicate that we want to
+       emit an inline here.  Associated changes.
+       * lex.c: Likewise.
+       * pt.c: Likewise.
+       * typeck.c: Likewise.
+
+       * call.c (build_method_call): Don't bother trying to handle inlines
+       specially.
+       * cvt.c (convert_to_aggr): Likewise.
+
+       * pt.c (do_function_instantiation): Handle instantiation of
+       public inlines, too.
+
+Wed Mar 29 16:04:25 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (init_exception_processing): Change the interface for
+       __throw_type_match and add decl for new rtti matching routine
+       __throw_type_match_rtti.
+       (build_eh_type): New routine to build a run time descriptor for the
+       expression given. 
+       (expand_start_catch_block): Update to use new calling convention for
+       the matcher.
+       (expand_throw): Update to use build_eh_type.
+
+Mon Mar 27 07:14:33 1995  Warner Losh  <imp@village.org>
+
+       * g++.c: Removed __NetBSD__ from conditional.
+       Declare strerror if HAVE_STRERROR is defined; otherwise
+       declare sys_errlist and sys_nerr.
+       (my_strerror): New function.
+
+Tue Mar 28 14:16:35 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * search.c (get_binfo): Don't try to be so clever.
+
+       * tree.c (copy_to_permanent): Also suspend_momentary().
+
+       * cvt.c (cp_convert_to_pointer): Hand off to convert_fn_pointer even
+       if the types are the same.
+
+       * decl.c (start_function): Handle extern inlines more like C++ says
+       we should.
+
+       * init.c (build_member_call): Hand constructor calls off to
+       build_functional_cast.
+
+       * typeck2.c (build_functional_cast): Use DECL_NESTED_TYPENAME to get
+       the name of the type.
+
+Tue Mar 28 13:13:56 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Check for the decl returned by
+       grokfndecl to be null before using build_decl_attribute_variant.
+
+Mon Mar 27 18:04:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (build_new): Use build_pointer_type instead of
+       TYPE_POINTER_TO.
+
+Fri Mar 24 12:11:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_conditional_expr): Handle pmfs.
+       (convert_for_assignment): Fix pmf support.
+
+       * cvt.c (convert_fn_ptr): Support !flag_vtable_thunks.
+       (cp_convert_to_pointer): Handle pmfs.
+       (cp_convert): Pass pmfs to cp_convert_to_pointer.
+
+       * typeck.c (common_type): Handle inheritance for pmfs.
+
+       * typeck2.c (build_m_component_ref): Do access control.
+
+       * typeck.c (comp_target_types): Check for conversion to void *
+       before checking trickier conversions.
+
+       * decl.c (duplicate_decls): Propagate DECL_ABSTRACT_VIRTUAL_P.
+
+       * pt.c (push_tinst_level): Complain if template instantiation depth
+       is greater than max_tinst_depth.
+
+       * typeck.c (common_type): Assume that we can call common_type to
+       unify the target type of a pointer.
+
+Thu Mar 23 00:48:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_file): Don't synthesize methods at
+       finish_vtable_prevardecl time.  Do synthesize methods that are not
+       used, but are public and not external.
+
+       * cvt.c (build_type_conversion): Only give an error if for_sure.
+
+       * typeck.c (comp_target_types): Only support pointer conversions if
+       nptrs > 0.
+
+Wed Mar 22 19:30:15 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (build_new): Catch use of an initializer list where it
+       shouldn't be.
+
+Wed Mar 22 16:21:07 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_new): Wrap alloc_expr in an RTL_EXPR if nelts is
+       non-constant.
+
+       * decl2.c: temp_name_counter is now public.
+
+       * decl.c (struct cp_function): Add temp_name_counter field.
+       (push_cp_function_context): Save it.
+       (pop_cp_function_context): Restore it.
+
+       * typeck.c (common_type): Handle unifying function types, and unify
+       unmatched things to void* with a compiler_error, rather than
+       silently like before.
+
+Wed Mar 22 15:10:34 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_prevtable_vardecl, finish_vtable_vardecl): Revert
+       Brendan's last change and fix latent problem that causes TD entries
+       to not come out when the things that need them has yet to be
+       expanded.
+
+Wed Mar 22 15:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault, comparison ops): Update type0
+       and type1, since we might have changed op0 or op1.
+
+Wed Mar 22 13:33:45 1995  Jason Merrill  <jason@python.cygnus.com>
+
+       * typeck.c (common_type): Don't mess up templates.
+
+Wed Mar 22 04:56:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (common_type): Handle ptms properly.  Also handle 
+       T* -> void*.
+       (build_binary_op_nodefault): New variable build_type controls what
+       type is given to the expression when it is created.  Set this to
+       boolean_type_node for comparison ops instead of using result_type.
+       (comp_target_types): Allow T * -> void *.
+
+       * cvt.c (cp_convert_to_pointer): Do access control when converting
+       ptms, too.
+
+Tue Mar 21 17:25:06 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (extern_lang_string): Catch use of linkage specs that
+       aren't all naming the same language.
+
+       * class.c (finish_struct): Delete accidental duplicate code.
+
+Tue Mar 21 14:00:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Disable pedwarns about
+       comparing functions and incomplete types.
+
+       * decl.c (finish_function): Only unset current_function_decl if
+       !nested.
+       (duplicate_decls): Last change went too far; we only want to stop
+       checking for value/reference ambiguity.
+
+Tue Mar 21 01:26:39 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_generic_desc): Zap the DECL_SIZE so that we can lay it
+       out fresh, as the new type may be larger.
+
+Mon Mar 20 19:01:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * expr.c (extract_init): Try to expand the RTL for the
+       initialization and figure out what it will look like so we can avoid
+       run-time initialization.  Disabled for now.
+       (extract_scalar_init): Helper for scalar initialization.
+       (extract_aggr_init): Helper for aggregate initialization.
+
+       * decl.c (duplicate_decls): Don't complain about ambiguous
+       declarations.
+       (obscure_complex_init): Now returns a tree.  Call extract_init if
+       we're optimizing and this is a toplevel decl.
+       (finish_decl): Update accordingly.
+
+       * lex.c (check_newline): If we're just changing files (not pushing
+       or popping), update input_file_stack->name.
+
+Mon Mar 20 17:55:04 1995  Mike Stump  <mrs@cygnus.com>
+
+       * pt.c (type_unification): Only TEMPLATE_DECLs are handled right now
+       in the transitive unification code.
+
+Mon Mar 20 16:07:50 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (shadow_tag): Don't allow inline, virtual, or explicit on
+       non-functions.
+       (grokdeclarator): Don't allow friends to be defined in local classes.
+
+Sat Mar 18 04:03:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_prevtable_vardecl): Use DECL_DECLARED_STATIC
+       rather than DECL_SAVED_INSNS to decide whether or not this method
+       was declared inline.
+
+       * method.c (synthesize_method): Turn off DECL_INLINE if
+       function_cannot_inline_p thinks we're too large.
+
+       * typeck.c (build_indirect_ref): Use build_expr_type_conversion.
+
+Fri Mar 17 17:47:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (instantiate_type): Handle pmfs.
+
+       * typeck.c (convert_for_assignment): Check types when assigning one
+       pmf to another.
+
+       * decl.c (define_label): Fix logic for printing out the name of the
+       label in an error message.
+
+       * error.c (dump_expr): Support ARRAY_REF.
+
+Fri Mar 17 17:43:02 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl2.c (finish_vtable_vardecl): Call build_t_desc here.
+       (finish_prevtable_vardecl): Instead of here.
+
+Fri Mar 17 14:40:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (expand_static_init): Also use expand_aggr_init if the
+       initializer is a TREE_LIST.     
+       (grokdeclarator): Only pedwarn about extra qualification if -pedantic.
+
+       * pt.c (unify): Fix unification of return type.
+
+       * expr.c (fixup_result_decl): Use store_expr, rather than
+       emit_move_insn, to move the return value into the place where
+       callers will expect it.
+
+Thu Mar 16 22:05:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_offset_ref): Call assmble_external on functions.
+       * typeck.c (build_component_ref): Likewise.
+
+Thu Mar 16 20:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (struct saved_scope): Add members base_init_list and
+       member_init_list.
+       (push_to_top_level): Save current_base_init_list and
+       current_member_init_list to them.
+       (pop_from_top_level): Put it back.
+
+Thu Mar 16 19:21:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (instantiate_template): Call assemble_external.  
+
+Thu Mar 16 18:07:54 1995  Brendan Kehoe  <brendan@phydeaux.cygnus.com>
+
+       * class.c: Include rtl.h, to get NULL_RTX.
+       (finish_struct): Also zero out DECL_SAVED_INSNS, to avoid problems
+       on hosts with different sizes for each part of the union.
+       * tree.c: Also include rtl.h.
+       (layout_basetypes): Same change for DECL_SAVED_INSNS.
+
+Thu Mar 16 13:57:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (unify): Fix array domain unification for 64-bit targets.
+
+       * decl2.c (finish_file): Push bizarre type decl before walking the
+       vtables the first time.
+       (walk_vtables): OK, don't set prev to vars if the vardecl_fn messed
+       with TREE_CHAIN (prev).
+
+       * init.c (emit_base_init): Use convert_pointer_to_real instead of
+       convert_pointer_to when converting to a direct base.
+
+Wed Mar 15 20:26:29 1995  Mike Stump  <mrs@cygnus.com>
+
+       * pt.c (type_unification): Handle transitive unification better.
+
+Wed Mar 15 13:56:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (walk_vtables): Always set prev to vars.
+       (mark_vtable_entries): Call assemble_external on the vtable entries.
+
+       * class.c (finish_struct): Set the vtable's size to NULL_TREE before
+       calling layout_decl, so that it gets updated properly.
+
+       Finally re-enable dynamic synthesis.  This time it works.
+       * method.c (synthesize_method): Pass decl_function_context (fndecl)
+       to {push,pop}_cp_function_context.
+       * decl.c (push_cp_function_context): Now takes a tree argument.
+       (pop_cp_function_context): Likewise.
+       * call.c (build_method_call): Enable synthesis.
+       * lex.c (cons_up_default_function): Likewise.
+
+Tue Mar 14 19:14:19 1995  Doug Evans  <dje@chestnut.cygnus.com>
+
+       * parse.y (setattrs): Chain onto prefix_attributes rather than
+       setting it.
+
+Wed Mar 15 13:00:00 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (pushdecl): Check if the type of the VAR_DECL is an
+       error_mark_node before trying to read TYPE_LANG_SPECIFIC. 
+
+Mon Mar 13 21:00:28 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator, case ARRAY_REF): Wrap the exp with fold,
+       and convert the size and integer_one_node to the index type.
+
+Mon Mar 13 08:01:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (get_member_function_from_ptrfunc): Save the instance
+       argument, and tack it onto the front of the COND_EXPR to make the
+       semantics come out right.  Grab the instance argument from
+       '*instance_ptrptr', rather than having it passed in separately.
+       
+       * various: Change various consed-up comparison operations to have
+       boolean type.  Remove the instance argument in calls to
+       get_member_function_from_ptrfunc.
+
+       * error.c (dump_expr): Dump true and false as "true" and "false".
+
+       * decl2.c (finish_file): Also set DECL_STATIC_FUNCTION_P on the
+       global init function.
+
+       * decl.c (finish_function): Only set DECL_EXTERNAL here if the
+       inline function is public.
+
+Sat Mar 11 00:58:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (is_friend): Be more careful about checking
+       DECL_CLASS_CONTEXT on non-member functions.
+
+       * decl2.c (finish_vtable_vardecl): Don't bother calling
+       assemble_external here.
+       (prune_vtable_vardecl): New function that just splices out the
+       vtable decl from the top-level decls.
+       (import_export_inline): Unset DECL_EXTERNAL at first.
+       (finish_file): Don't bother calling assemble_external here.  Do
+       splice out all of the vtables.
+
+Fri Mar 10 14:42:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_function): If we're not emitting the function yet,
+       call assemble_external for it.
+
+       * decl2.c (finish_prevtable_vardecl): Don't call mark_vtable_entries
+       here.
+       (finish_vtable_vardecl): Don't do the linkage deduction thing here.
+       Also don't splice out the current vtable if it is unused.
+       (finish_file): Move the second walk_vtables and the synthesis check
+       inside the 'reconsider' loop.  Move thunk emission after the
+       'reconsider' loop.
+
+Thu Mar  9 16:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * pt.c (tsubst): Don't bother calling cp_build_type_variant, since it
+       was passing bogus values for readonly and volatile from the original
+       template decl, not the resultant type of the tsubst call.
+
+       * class.c (duplicate_tag_error): Use cp_error_at to point out the
+       previous definition of the tag.
+
+Thu Mar  9 10:46:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_function): Clear base_init_insns and protect_list.
+       (struct cp_function): Add base_init_insns field.
+       (push_cp_function_context): Also save base_init_insns.
+       (pop_cp_function_context): Also restore base_init_insns.
+
+Wed Mar  8 13:31:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (member_init_ok_or_else): Check for initializing a static
+       member here.
+       (emit_base_init): Instead of here.
+
+Tue Mar  7 16:03:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Disable synthesis as needed.
+       * lex.c (cons_up_default_function): Likewise.
+
+Tue Mar  7 10:14:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y: New rules to allow attributes in a prefix position.
+       (prefix_attributes): New variable.  Pass it into cplus_decl_attributes.
+       (setattr): New rule.
+       (reserved_declspecs, declmods): Catch attributes here.
+       * decl2.c (cplus_decl_attributes): Add PREFIX_ATTRIBUTES argument.
+       * decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
+       descendent typedef.
+       (grokdeclarator): Added code to support machine attributes.
+       * Makefile.in (stamp-parse): Expect 5 shift/reduce failures.
+
+Mon Mar  6 15:07:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Don't synthesize methods outside of a
+       function.
+
+       Make base initialization more re-entrant so that synthesis on the
+       fly will work (and, eventually, template instantation on the fly).
+       * init.c (sort_member_init): Don't bother with members that can't be
+       initialized.  Reorganize a bit.  Don't initialize base members here.
+       (sort_base_init): New function, like sort_member_init, but for base
+       classes.  Steals some code from emit_base_init.
+       (emit_base_init): Simplify.  Call sort_{member,base}_init before
+       doing any initialization, so we don't have to save
+       current_{member,base}_init_list in push_cp_function_context.
+       (expand_aggr_vbase_init_1): Adjust for sort_base_init.
+       (expand_aggr_vbase_init): Simplify.
+       * decl.c (struct cp_function): Add protect_list field.
+       (push_cp_function_context): Also save protect_list.
+       (pop_cp_function_context): Also restore protect_list.
+       * call.c (build_method_call): Enable synthesis at point of call.
+       * lex.c (cons_up_default_function): Likewise.
+
+       * parse.y: Turn -ansi checks back into -pedantic checks.
+
+       * init.c (build_new): Fix -fcheck-new for array new.
+
+Sat Mar  4 15:55:42 1995  Fergus Henderson  <fjh@cs.mu.oz.au>
+
+       * typeck.c (build_compound_expr): warn if left-hand operand of
+       comma expression has no side-effects.
+
+Fri Mar  3 15:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (primary): Change 'object qualified_id *' rules to 'object
+       overqualified_id *'.
+
+Fri Mar  3 12:48:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (unary_expr): Catch doing sizeof an overloaded function.
+       Make the error look the same as the one we issue in c_sizeof.
+
+       * typeck.c (build_binary_op_nodefault): Give an error for trying
+       to compare a pointer-to-member to `void *'.
+
+Fri Mar  3 11:28:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_unary_op): Handle bool increment with smoke and
+       mirrors here, rather than in expand_increment where it belongs,
+       because Kenner doesn't agree with me.
+
+Fri Mar  3 00:08:10 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokparms): Catch a PARM_DECL being used for a default
+       argument as well.
+
+Thu Mar  2 20:05:54 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * init.c (build_new): Don't allow new on a function type.
+
+       * parse.y (primary): Avoid a crash when seeing if the arg is of
+       the same type as that given for the typespec in an explicit dtor call.
+
+Thu Mar  2 00:49:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_function): Change test for calling
+       mark_inline_for_output.
+
+Wed Mar  1 11:23:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): Complain if
+       build_default_binary_type_conversion fails.
+
+       * init.c (expand_default_init): Handle arguments of unknown type
+       properly.
+
+       * cvt.c (build_expr_type_conversion): Only complain about ambiguity
+       if 'complain'.
+       * various: Pass 'complain'.
+
+       * typeck.c (comptypes): Be more picky about comparing UPTs.
+
+Wed Mar  1 11:03:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): If declarator is null, say that the
+       type used has an incomplete type.
+
+Wed Mar  1 10:06:20 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (instantiate_template): Copy the template arguments to the
+       permanent_obstack.  Also use simple_cst_equal to compare them when
+       looking for a previous instantiation.
+
+       * tree.c (make_deep_copy): Support copying INTEGER_TYPEs (assuming
+       they are array domain types).
+
+Tue Feb 28 23:24:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cp-tree.h: Define WANT_* constants for passing to
+       build_expr_type_conversion.
+       * cvt.c (build_expr_type_conversion): New function to build
+       conversion to one of a group of suitable types.
+       (build_default_binary_type_conversion): Use it.
+       * decl2.c (grok_array_decl): Likewise.
+       * typeck.c (build_unary_op): Likewise.
+       (build_array_ref): Tidy up a bit.
+       (build_binary_op): Likewise.
+
+Tue Feb 28 19:57:31 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't allow decl of an argument as `void'.
+
+Tue Feb 28 17:23:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (typed_declspecs1): Add 'typespec reserved_typespecquals
+       reserved_declspecs' rule.
+
+       * parse.y (expr_or_declarator): Remove notype_qualified_id rule.
+       (direct_notype_declarator): Likewise.
+       (complex_direct_notype_declarator): Add notype_qualified_id rule.
+
+       * lex.c (real_yylex): Handle :> digraph properly.
+
+Tue Feb 28 12:26:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Check if it's a friend, not if it's
+       non-virtual, that's being initialized.  Move the check up to
+       before FRIENDP would get cleared.  Catch an unnamed var/field
+       being declared void.  Say just `field' instead of `structure field'
+       in the error message.  Only go for the operator name if DECLARATOR
+       is non-null.
+
+Tue Feb 28 00:08:01 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (start_function): Complain about abstract return type.
+       (grokdeclarator): Complain about declaring constructors and
+       destructors to be const or volatile.  Complain about declaring
+       destructors to be static.
+
+       * pt.c (uses_template_parms): Handle pmfs.
+
+       * decl.c (grokdeclarator): Don't call variable_size for array bounds
+       that only depend on template constant parameters.
+
+Mon Feb 27 15:38:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * error.c (dump_decl): Only look to see if it's a vtable if we
+       actually have a name to check out.
+
+Mon Feb 27 13:37:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (convert_to_aggr): Lose misleading shortcut.
+
+Sun Feb 26 17:27:32 1995  Doug Evans  <dje@canuck.cygnus.com>
+
+       * decl.c (set_nested_typename): Always set DECL_IGNORED_P,
+       not just for dwarf.
+
+Sun Feb 26 00:10:18 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't allow a static member to be
+       declared `register'.
+
+       * init.c (make_friend_class): Move up to a pedwarn for the warning
+       about a class declaring friends with itself.
+
+       * decl.c (grokdeclarator): You can't do `volatile friend class foo'
+       or `inline friend class foo'.  Only try to make a friend out of
+       TYPE if we didn't already reset it to integer_type_node.
+
+Sat Feb 25 22:32:03 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't allow initialization of a
+       non-virtual function.
+
+       * decl.c (start_function): Do a pedwarn if we're changing `main'
+       to have an int return type.
+
+Sat Feb 25 00:02:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): Handle simple assignment from
+       TARGET_EXPRs by building up an RTL_EXPR to force expansion.  Whew.
+
+Fri Feb 24 18:27:14 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Also don't allow virtual outside of a
+       class decl for a scope method definition performed at global binding.
+
+       * init.c (build_offset_ref): Don't allow creation of an OFFSET_REF
+       of a bitfield.
+
+       * decl.c (grokdeclarator): Don't allow a const to be declared mutable.
+
+       * typeck.c (build_binary_op): Return an error_mark_node if either
+       one of the args turned into an error_mark_node when we tried to
+       use default_conversion.
+
+       * typeck.c (build_unary_op): Forbid using postfix -- on a bool.
+
+       * decl.c (grokdeclarator): Allow `signed' and `unsigned' to be
+       used on `__wchar_t'.
+
+Fri Feb 24 13:59:53 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (end_protect_partials): Do it the right way.
+
+Wed Feb 22 15:42:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Upgrade warning about
+       comparing distinct pointer types to pedwarn.
+
+       * typeck2.c (digest_init): Cope with extra braces.
+
+       * typeck.c (build_binary_op_nodefault): Use tree_int_cst_sgn instead
+       of INT_CST_LT (..., interger_zero_node).
+
+Wed Feb 22 14:45:52 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * except.c [!TRY_NEW_EH] (end_protect_partials): Define dummy
+       function for systems that don't have EH.
+
+Tue Feb 21 19:18:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (can_convert_arg): Like can_convert, but takes an arg as
+       well.
+
+       * pt.c (type_unification): Allow implicit conversions for parameters
+       that do not depend on template parameters.
+
+Tue Feb 21 18:43:48 1995  Douglas Rupp  <drupp@cs.washington.edu>
+
+       * Make-lang.in, config-lang.in: ($exeext): New macro.
+       * Make-lang.in: Try a "cp" if "ln" fails.
+       * cp-tree.h (decl_attributes): Added argument.
+       * decl2.c (cplus_decl_attribute): Add arg to decl_attributes.
+       * cp/g++.c: Added #ifdefs for sys/file.h and process.h for NT.
+       Modified spawnvp to have to correct number of arguments for OS/2, NT.
+
+Tue Feb 21 18:36:55 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (finish_function): Add calls to end_protect_partials to end
+       the exception region that protects constructors so that partially
+       constructed objects can be partially destructed when the constructor
+       throws an exception.
+       * init.c (perform_member_init, sort_member_init, emit_base_init):
+       Added support for partially constructed objects.
+       * init.c (build_partial_cleanup_for): New routine to do partial
+       cleanups of a base class.
+       * decl2.c (finish_file): Move the emitting of the exception table
+       down, after we emit all code that might have exception regions in
+       them.
+       * except.c (end_protect_partials, might_have_exceptions_p): New
+       routines.
+       (emit_exception_table): Always output table if called.
+       * cp-tree.h (protect_list, end_protect_partials,
+       might_have_exceptions_p, emit_exception_table): Added.
+
+Tue Feb 21 16:05:59 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * gc.c (build_typeid): Pass a NULL_TREE, not the bogus, unused
+       address of a local variable.
+       * class.c (build_vfn_ref): Only try to build the PLUS_EXPR if we
+       were given a non-null PTR_TO_INSTPTR.
+
+Tue Feb 21 01:53:18 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (duplicate_decls): Always lay out the merged decl.
+
+       * decl2.c (finish_vtable_vardecl): Don't do vtable hack on templates.
+       (finish_prevtable_vardecl): Likewise.
+
+       * method.c (synthesize_method): Set interface_{unknown,only}
+       according to the settings for our class, not the file where it comes
+       from.
+
+Sat Feb 18 12:26:48 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Handle systems that define __i386__ but not __i386.
+
+Fri Feb 17 15:31:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (reparse_decl_as_expr): Support being called without a
+       type argument.
+
+       * parse.y (primary): Add '(' expr_or_declarator ')'.  Adds 4 r/r
+       conflicts.  Sigh.
+
+Fri Feb 17 12:02:06 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (template_def, fndef, fn.def1, return_init, condition,
+       initdcl0, initdcl, notype_initdcl0, nomods_initdcl0,
+       component_decl_1, after_type_component_declarator0,
+       notype_component_declarator0, after_type_component_declarator,
+       notype_component_declarator, after_type_component_declarator,
+       full_parm, maybe_raises, exception_specification_opt): Fix up,
+       include exception_specification_opt maybeasm maybe_attribute and
+       maybe_init if missing.  Rename maybe_raises to
+       exception_specification_opt to match draft wording.  Use maybe_init
+       to simplify rules.
+
+Fri Feb 17 01:54:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_new): Set TREE_NO_UNUSED_WARNING on COMPOUND_EXPRs
+       built for news of scalar types.
+
+Thu Feb 16 17:48:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Update code for warning
+       about signed/unsigned comparisons from C frontend.  Realize that the
+       code in the C frontend is, if anything, even more bogus.  Fix it.
+       (build_binary_op): Undo default_conversion if it wasn't useful.
+
+       * typeck.c (build_unary_op, ADDR_EXPR): Lose bogus special case for
+       PRE*CREMENT_EXPR.
+
+       * decl2.c (import_export_vtable): Don't try the vtable hack
+       if the class doesn't have any real non-inline virtual functions.
+       (finish_vtable_vardecl): Don't bother trying to find a non-inline
+       virtual function in a non-polymorphic class.
+       (finish_prevtable_vardecl): Likewise.
+
+       * decl2.c (import_export_vtable): Use and set DECL_INTERFACE_KNOWN.
+
+       * cp-tree.h (DECL_INTERFACE_KNOWN): Use DECL_LANG_FLAG_5.
+
+       * init.c (expand_virtual_init): Always call assemble_external.
+
+       * class.c (build_vfn_ref): Always call assemble_external.
+       (build_vtable): Always call import_export_vtable.
+       (prepare_fresh_vtable): Likewise.
+       (add_virtual_function): Don't bother setting TREE_ADDRESSABLE.
+
+Thu Feb 16 03:28:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_struct): Use TYPE_{MIN,MAX}_VALUE to determine
+       whether an enumerated type fits in a bitfield.
+
+Wed Feb 15 15:38:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (grow_method): Update method_vec after growing the class
+       obstack.
+
+Wed Feb 15 13:42:59 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (handler_seq): Push a level for the catch parameters.
+
+Wed Feb 15 12:42:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (emit_base_init): Update BINFO_INHERITANCE_CHAIN on my
+       bases, in case they've been clobbered.
+
+Wed Feb 15 12:07:29 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (finish_base_struct): Set up BINFO_INHERITANCE_CHAIN here,
+       so that one day it will always be valid.
+       * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
+
+       * cp-tree.h (copy_binfo): Removed, unused.
+       * tree.c (copy_binfo): Likewise.
+
+Wed Feb 15 00:05:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_new): Save the allocation before calling
+       expand_vec_init on it.
+
+       * decl.c (finish_enum): The TYPE_PRECISION of the enum type mush
+       match the TYPE_PRECISION of the underlying type for constant folding
+       to work.
+
+Tue Feb 14 15:31:25 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (push_eh_entry, expand_start_all_catch,
+       expand_leftover_cleanups, expand_end_catch_block): Keep track of
+       the context in which the exception region occurs.
+       (build_exception_table): If the region was not output, don't output
+       the entry in the eh table for it.
+
+Tue Feb 14 02:15:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (expand_default_init): Only use a previous constructor call
+       if it's a call to our constructor.  Does the word "Duh" mean
+       anything to you?
+
+       * decl.c (grokparms): Fine, just don't call
+       convert_for_initialization at all.  OK?  Happy now?
+
+Mon Feb 13 02:23:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Make sure that the class
+       method vector has a second element before returning it.
+
+       * decl.c (grokparms): Don't strip REFERENCE_TYPE before calling
+       convert_for_initialization.
+
+Sun Feb 12 03:57:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): Compare function name to
+       constructor_name (current_class_type) instead of current_class_name.
+
+       * decl.c (grokparms): Don't do anything with the return value of
+       convert_for_initialization.
+
+       * error.c (dump_decl): Also dump_readonly_or_volatile on the decl.
+
+       * decl.c (duplicate_decls): Tweak error message.
+
+       * typeck.c (build_const_cast): Implement checking.
+       (build_reinterpret_cast): Implement some checking.
+
+       * cp-tree.h (CONV_FORCE_TEMP): Require a new temporary when
+       converting to the same aggregate type.
+       (CONV_STATIC_CAST): Include it.
+       (CONV_C_CAST): Likewise.
+       * cvt.c (convert_force): Use CONV_C_CAST instead of CONV_OLD_CONVERT.
+       (cp_convert): Only force a new temporary if CONV_FORCE_TEMP.
+
+Fri Feb 10 16:18:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_c_cast): Use non_lvalue to tack something on
+       where necessary.
+
+       * decl.c (auto_function): Now a function.
+       * except.c (init_exception_processing): terminate, unexpected,
+       set_terminate, and set_unexpected have C++ linkage.
+
+       * typeck.c (build_unary_op, TRUTH_NOT_EXPR): Use convert instead of
+       truthvalue_conversion for converting to bool, as it handles
+       user-defined conversions properly.
+       (condition_conversion): Likewise.
+
+       * except.c (expand_throw): Don't call convert_to_reference.
+       Pass the correct parameters to build_new.
+
+       * method.c (do_build_assign_ref): Don't use access control when
+       converting to a base reference here.
+       (do_build_copy_constructor): Or here.
+
+       * init.c (build_new): Unset TREE_READONLY on the dereferenced
+       pointer before assigning to it.
+
+       * decl.c (maybe_build_cleanup): Don't bother stripping const here.
+
+       * decl2.c (delete_sanity): You can now delete pointer to const.
+
+Fri Feb 10 13:28:38 1995  Jason Merrill  <jason@python.cygnus.com>
+
+       * decl.c (finish_function): Don't rely on actual parameters being
+       evaluated left-to-right.
+       * except.c (expand_end_catch_block): Likewise.
+
+Fri Feb 10 00:52:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * tree.c (real_lvalue_p): Like lvalue_p, but class temps aren't
+       considered lvalues.
+       * cvt.c (convert_to_reference): Use real_lvalue_p instead of
+       lvalue_p.
+
+       * cvt.c (build_type_conversion_1): Don't call convert on aggregate
+       types.
+       (convert_to_reference): Fix erroneous text substitution.
+
+       * typeck2.c (initializer_constant_valid_p): Update from C frontend.
+       Add new argument to all callers.
+
+       * typeck.c (convert_arguments): Check for error_mark_node before
+       trying to do anything with the actual parameter.
+
+       * typeck.c (condition_conversion): Build up a CLEANUP_POINT_EXPR and
+       fold it.
+       (bool_truthvalue_conversion): Remove.  Fix all callers to call
+       truthvalue_conversion instead.
+       (various): Fold CLEANUP_POINT_EXPRs.
+
+       * parse.y (conditions): Call condition_conversion rather than
+       building up a CLEANUP_POINT_EXPR.
+
+       * pt.c (end_template_decl): Don't warn_if_unknown_interface here
+       under -falt-external-templates.
+
+Thu Feb  9 05:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_new): Complain about new of const type without
+       initializer.  Other cleanup.
+
+       * call.c (compute_conversion_costs): Don't call
+       build_type_conversion with a reference type; convert to the target
+       type and check its lvaluetude.
+       * cvt.c (convert_to_reference): Likewise.
+
+       * cvt.c (build_type_conversion_1): There will never be any need to
+       dereference references here now.
+
+Thu Feb  9 00:37:47 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_builtin_throw): Make sure we only `use' the
+       value of return_val_rtx.
+
+Wed Feb  8 15:45:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (structsp): Don't complain about declaring a type being
+       defined to be a friend.
+
+       * decl2.c (warn_if_unknown_interface): Note the template in question
+       and the point of instantiation, for -falt-external-templates.
+       * lex.c (reinit_parse_for_method): Pass the decl to
+       warn_if_unknown_interface.
+       * pt.c (instantiate_template): Likewise.
+       (end_template_decl): Likewise.
+
+       * decl.c (set_nested_typename): Set IDENTIFIER_TYPE_VALUE on the
+       nested name again, to make local classes work a bit better.
+
+       * typeck.c (build_function_call_real): Dereference reference after
+       checking for incomplete type.
+
+       * init.c (build_new): Accept new of const and volatile types.
+
+Wed Feb  8 14:04:16 1995  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Fix error message.
+
+Wed Feb  8 03:16:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (convert_for_initialization): Do bash arrays when
+       converting to a reference to non-array.
+
+Tue Feb  7 15:50:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (cp_convert): Don't call convert_to_reference, or
+       automatically dereference references.  Do pass reference conversions
+       to cp_convert_to_pointer.
+       (cp_convert_to_pointer): Support references.
+
+       * call.c (build_method_call): Don't build up a reference to the
+       parameter here; let build_overload_call handle that.
+
+       * typeck.c (build_c_cast): Call convert_to_reference directly if
+       converting to a reference type.
+       * method.c (do_build_copy_constructor): Likewise.
+       * method.c (do_build_copy_constructor): Likewise.
+       (do_build_assign_ref): Likewise.
+
+       * call.c (build_method_call): Dereference a returned reference.
+       * typeck.c (build_function_call_real): Likewise.
+
+       * decl.c (xref_basetypes): Check for unions with basetypes here.
+       (xref_tag): Instead of here.
+
+       * pt.c (process_template_parm): Template type parm decls are
+       artificial.
+
+Mon Feb  6 04:32:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y (typed_declspecs): Add missing semicolon.
+       (do_xref_defn): Resurrect.
+       (named_class_head_sans_basetype): Move template specialization
+       definition cases to named_class_head_sans_basetype_defn.
+
+       * decl2.c (grokfield): Call pushdecl_class_level after setting the
+       TYPE_NAME, not before.
+
+Sun Feb  5 02:50:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (convert_harshness): Don't call sorry here.  Don't allow
+       conversions between function pointer types if pedantic.
+
+       * pt.c (overload_template_name): Pass globalize=1 to xref_tag.
+
+       * lex.c (cons_up_default_function): Use the full name for the return
+       type of op=.
+
+       * decl.c (set_nested_typename): Don't worry about anonymous types,
+       as they already have a unique name.
+       (pushdecl): Remove redundant set_nested_typename
+       (xref_tag): Split out base handling into xref_basetypes.
+
+       * cp-tree.h (TYPE_INCOMPLETE): New macro; TEMPLATE_TYPE_PARMs are
+       not considered incomplete even though their definition is unknown.
+
+       * decl.c (xref_defn_tag): Lose.
+       (xref_tag): xref_next_defn = ! globalize.
+       (pushdecl): Don't set DECL_NESTED_TYPENAME on artificial decls.  The
+       ones that should have it set will have it set by pushtag.
+       (pushdecl_class_level): Likewise.
+       (pushtag): Tidy up a bit.
+       (set_nested_typename): Push a decl for the nested typename from
+       here, rather than from xref_defn_tag.
+
+       * parse.y (do_xref): Lose.
+       (named_class_head): If we see 'class foo:' we know it's a
+       definition, so don't worry about base lists for non-definitions.
+
+       * pt.c (push_template_decls): Template parm decls are artificial.
+
+       * decl.c (duplicate_decls): Restore check for qualifier
+       disagreement for non-functions.
+       (decls_match): Remove check for qualifier disagreement.
+
+Fri Feb  3 14:58:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grok_reference_init): Convert initializer from
+       reference.
+       * typeck.c (convert_for_initialization): Likewise.
+
+       * decl.c (duplicate_decls): Propagate DECL_NESTED_TYPENAME.
+
+       * cvt.c (cp_convert): Don't convert to the same class type by just
+       tacking on a NOP_EXPR.
+       (convert_to_reference): Use comp_target_types instead of comptypes
+       so that we don't allow conversions two levels down.
+
+Thu Feb  2 15:07:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (build_vbase_path): Bash types to make the backend happy.
+       * cvt.c (build_up_reference): Bash the types bashed by
+       build_vbase_path to be reference types instead of pointer types.
+       (convert_to_reference): Likewise.
+
+       * typeck.c (build_c_cast): Don't strip NOPs if we're converting to a
+       reference type.
+
+       * parse.y (structsp): Put back error for 'struct B: public A;'.
+
+Wed Feb  1 23:02:06 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Add support for mips systems that don't define __mips
+       but do define mips, like Ultrix.
+
+Wed Feb  1 22:39:07 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Add support for exception handling on the Alpha.
+
+Wed Feb  1 10:12:14 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_file): Fix bug in Jan 31st change.
+
+Tue Jan 31 16:59:15 1995  Gerald Baumgartner  <gb@lorenzo.cs.purdue.edu>
+
+       * sig.c (build_signature_pointer_or_reference_type): Don't set
+       IS_AGGR_TYPE for signature pointers/reference so expand_default_init
+       doesn't expect to find a copy constructor.
+       * call.c (build_method_call): Treat signature pointers/reference
+       as if IS_AGGR_TYPE were set.
+
+Tue Jan 31 13:28:56 1995  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (get_typeid): Pawn off error messages to build_t_desc.
+       (build_t_desc): Inform the user here if they try and build
+       with -frtti and don't include <typeinfo.h>.
+
+       * decl2.c (finish_prevtable_vardecl): Support rescanning.
+       (finish_file): Move finish_prevtable_vardecl up to before the global
+       initializers are done as tdecls are initialized in the global
+       initializer.  Also Pick up any new tdecls or vtables needed by
+       synthesized methods.
+
+       * class.c (finish_struct): Simplify.  We have to do rtti scanning at
+       end, so we might as well do all of it there.
+
+Tue Jan 31 05:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Fix -fthis-is-variable for 32-bit
+       targets, too.
+
+Tue Jan 31 00:11:04 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_prevtable_vardecl): New routine, mostly split from
+       finish_vtable_vardecl.  It has the first half functionality from
+       that routine.
+       * decl2.c (finish_vtable_vardecl): Update to not include stuff not
+       in  finish_prevtable_vardecl.
+       * decl2.c (finish_file): Call finish_prevtable_vardecl.
+       * gc.c (build_generic_desc): Allow it to be called when not at the
+       global binding layer, but behave as if we were.
+       (build_t_desc): Rearrange a bit so that it really works and is
+       easier to follow.
+       * class.c (finish_struct): Don't decide on tdecls here, as we have
+       to wait until the end of the file in general to decide whether or
+       not they come out.
+
+Mon Jan 30 01:00:40 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_delete): Check access to operator delete before
+       calling the destructor.
+       * method.c (build_opfncall, DELETE_EXPR): build_method is allowed to
+       return error_mark_node.
+       * call.c (build_method_call): Use the one-argument op delete even if
+       it's an error.
+
+       * init.c (build_new): Fix -fthis-is-variable support.
+       * call.c (build_method_call): Likewise.
+
+       * call.c (convert_harshness): Make conversion from a pointer to bool
+       worse than conversion to another pointer.
+
+Sat Jan 28 16:46:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (build_new): Check new return value if -fcheck-new.
+
+       * lex.c (check_newline): Clear end_of_file when we're done, too.
+
+Sat Jan 28 10:38:39 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_vtable_vardecl): Make rtti TD tables follow
+       vtables whereever they go.
+
+       * gc.c (build_t_desc): Remove old way of setting it up, as it wasn't
+       right.
+
+Sat Jan 28 09:10:44 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (finish_vtable_vardecl): Now set the
+       interface/implementation of vtables on the first virtual function,
+       if one exists, otherwise we use the old method.  This is a major win
+       in terms of cutting down the size of objects and executables in
+       terms of text space and data space.  Now most of the savings that
+       #pragma interface/implementation gives is automatic in a fair number
+       of cases.
+
+Sat Jan 28 04:57:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grokdeclarator): Discard the template parameters in a
+       template constructor declaration so that the function is always
+       named constructor_name (ctype).
+
+       * lex.c (check_newline): Use ungetc to put back the character before
+       calling HANDLE_PRAGMA.
+
+Fri Jan 27 17:23:47 1995  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (check_classfn): If the cname is T<int> and fn_name is T,
+       make sure we still match them.
+
+Fri Jan 27 16:32:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y: Add END_OF_LINE token.
+
+       * lex.c (check_newline): Set linemode when we see a # directive, and
+       unset it when we're done.  Turn all 'return's into 'goto skipline'.
+       Fix all uses of '\n', since we won't see it anymore.  Put back the
+       character we read before checking for a sysv or target pragma.
+       (real_yylex): If we see an EOF in linemode, return END_OF_LINE.
+       (handle_sysv_pragma): Don't look at the input stream; quit when we
+       see an END_OF_LINE token.
+
+       * input.c (getch): Return EOF if we're in line mode and at the end
+       of a line.
+       (put_back): Don't put back an EOF.
+
+Thu Jan 26 19:26:34 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Do the newing of the exception object
+       before we load the type descriptor or the address so that we don't
+       wipe any of the values out.
+
+Thu Jan 26 19:20:00 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (init_exception_processing): Don't use r12 on the rs6000.
+
+Tue Jan 24 16:36:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grokparms): Don't try to build up a reference at this point.
+
+       * typeck2.c (build_functional_cast): Don't assume that a NOP_EXPR
+       will suffice to convert from integer_zero_node.
+
+Wed Jan 25 15:02:09 1995  David S. Miller  <davem@nadzieja.rutgers.edu>
+
+       * class.c (instantiate_type): Change error message text.
+       * typeck2.c (store_init_value): Likewise.
+
+Mon Jan 23 21:57:14 1995  Mike Stump  <mrs@cygnus.com>
+
+       * pt.c (tsubst): When we copy a node, don't forget to copy
+       TREE_CHAIN, we use it later.
+
+Mon Jan 23 03:33:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (convert_for_assignment): Initialize variable before use.
+
+Fri Jan 20 01:17:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * g++.c (main): Link with both libstdc++ and libg++ if called as
+       something ending with "g++", otherwise only libstdc++.  Move -lm to
+       the end of the line.
+
+Thu Jan 19 15:43:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Don't mess with 'this' before calling
+       compute_conversion_costs.
+
+Wed Jan 18 15:40:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * search.c (get_matching_virtual): Give line number for previous
+       declaration.
+
+       * call.c (convert_harshness): Handle conversions to references
+       better.
+
+       * cvt.c (build_up_reference): OK, handle {MIN,MAX}_EXPR *properly*.
+
+Wed Jan 18 15:21:38 1995  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (instantiate_type): Use DECL_CHAIN to walk lists instead,
+       as the TREE_CHAIN for methods will take us to the next differently
+       named function, DECL_CHAIN won't.
+
+Wed Jan 18 14:26:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * tree.c (lvalue_p): Handle {MIN,MAX}_EXPR.
+
+       * decl2.c (lang_decode_option): -Wall implies -Wparentheses.
+       warn_parentheses defaults to 0.
+
+       * decl.c (grokparms): Put back call to require_instantiated_type.
+
+Tue Jan 17 19:56:15 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (exception_section): Use the data section on the rs6000.
+       Change calling convention for named_section.
+
+Wed Jan 17 18:20:57 1994  Fergus Henderson <fjh@munta.cs.mu.oz.au>
+
+       * cp-tree.h : Make if (x=0) warn with wall
+       * parse.y : Make if (x=0) warn with wall
+
+Tue Jan 17 14:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (BOOL_TYPE_SIZE): BITS_PER_WORD if SLOW_BYTE_ACCESS,
+       BITS_PER_UNIT otherwise.
+
+       * search.c (get_matching_virtual): Don't check the binfo if the
+       types are the same.
+
+       * cvt.c (cp_convert): Just call truthvalue_conversion to convert to
+       bool.
+
+Mon Jan 16 13:28:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * various: Use boolean_type_node, boolean_true_node,
+       boolean_false_node.
+
+       * search.c (get_matching_virtual): Allow covariant returns that
+       don't require pointer adjustment.
+
+       * typeck.c (build_conditional_expr): Don't call default_conversion
+       on ifexp.
+
+       * cvt.c (build_up_reference): Handle MIN_EXPR and MAX_EXPR.
+
+       * decl.c (grokdeclarator): Upgrade warning about &const to pedwarn.
+
+Sun Jan 15 22:17:32 1995  David Binderman  <dcb@lovat.fmrco.COM>
+
+       * pt.c (do_function_instantiation): Free targs once we're done.
+
+Sun Jan 15 22:17:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (BOOL_TYPE_SIZE): Defaults to BITS_PER_WORD.
+       (init_decl_processing): Use BOOL_TYPE_SIZE instead of CHAR_TYPE_SIZE
+       for bool.
+
+Sat Jan 14 05:33:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_file): We need to mess up if there are any
+       variables in the list, not just if there is one with a constructor.
+
+Fri Jan 13 14:42:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
+       (finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
+       (finish_function): Trust rest_of_compilation.
+
+       * decl2.c (finish_file): Also call functions designated as static
+       constructors/destructors.
+
+       * decl.c (grokdeclarator): Allow access decls of operator functions.
+       (grokparms): Only do convert_for_initialization if the initializer
+       has a type.
+       (duplicate_decls): Put back push_obstacks_nochange call.
+
+       * lex.c (real_yylex): Downgrade complaint about the escape sequence
+       being too large from pedwarn to warning.
+
+       * decl.c (grokdeclarator): Don't complain about long long in system
+       headers.
+
+       * lex.c (real_yylex): Handle digraphs.
+
+Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (init_decl_processing): -f{no-,}strict-prototype only
+       affects C linkage declarations now.
+
+       * typeck.c (comp_target_types): Grok simple contravariant conversions.
+       (common_type): t1 and t2 are interchangeable.
+
+       * various: Test return value of comp_target_types differently in
+       different places; it now returns -1 for a contravariant conversion
+       (which is fine in symmetric cases).
+
+       (common_type): Prefer long double to double even when
+       they have the same precision.
+
+       * decl.c (grokparms): Call convert_for_initialization to check
+       default arguments.
+
+       * init.c (build_new): void_type_node has a size (of 0).
+
+       * decl.c (decls_match): Also check for agreement of TREE_READONLY
+       and TREE_THIS_VOLATILE.
+       (push_class_level_binding): Properly handle shadowing of
+       nested tags by fields.
+
+       * search.c (dfs_pushdecls): Likewise.
+
+       * decl2.c (finish_file): Don't second-guess self-initialization.
+
+       * cvt.c (convert_to_reference): Work with expr directly, rather than
+       a copy.
+
+       * decl.c (push_overloaded_decl): Only shadow artificial TYPE_DECLs.
+
+       * init.c (add_friend): Downgrade duplicate friend message from
+       pedwarn to warning.
+
+       * decl.c (duplicate_decls): Push obstacks before calling common_type.
+
+Thu Jan 12 17:15:21 1995  Michael Ben-Gershon  <mybg@cs.huji.ac.il>
+
+       * except.c (push_eh_entry): set LABEL_PRESERVE_P flag for
+       exception table labels.
+       (expand_start_all_catch): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_end_catch_block): Likewise.
+       * except.c (make_first_label): new function.
+       (expand_start_all_catch): add a call to make_first_label() before
+       using a label as a jump destination.
+       (expand_end_all_catch): Likewise.
+       (expand_leftover_cleanups): Likewise.
+       (expand_end_catch_block): Likewise.
+       (expand_builtin_throw): Likewise.
+       (expand_throw): Likewise.
+       * except.c: Add ARM processor support for exception handling.
+
+Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       (complete_array_type): Copy code from C frontend.
+
+       * lex.c (real_yylex): Don't multiply the length of a wide string
+       literal by WCHAR_BYTES.
+
+       * decl.c (pushdecl): Check for redeclaration of wchar_t here.
+       (duplicate_decls): Instead of here.
+       (define_label): Complain about a label named wchar_t.
+       (grokdeclarator): Complain about declarations of
+       operator-function-ids as non-functions.
+
+       * typeck.c (unary_complex_lvalue): Also wrap prefix -- and ++ in
+       COMPOUND_EXPRs.
+       (build_unary_op): Wrap unary plus in a NON_LVALUE_EXPR.
+
+       * lex.c (real_yylex): Don't skip whitespace when reading the next
+       character after ->.
+
+Wed Jan 11 16:32:49 1995  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Allow cc1plus to be built with native compiler on rs6000.
+       (expand_start_all_catch): Add assemble_external calls for various
+       routines we call.
+       (expand_leftover_cleanups): Likewise.
+       (expand_start_catch_block): Likewise.
+       (do_unwind): Likewise.
+       (expand_builtin_throw): Likewise.
+
+Wed Jan 11 01:05:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (pushtag): Only look for a previous decl in the current
+       binding level.  Use explicit global scope in DECL_NESTED_TYPENAME.
+
+       * gxx.gperf: Add __signature__ and __sigof__ keywords.
+
+       * decl2.c (lang_decode_option): -ansi does not set flag_no_asm.  It
+       does set flag_no_gnu_keywords and flag_operator_names.
+
+       * lex.c (init_lex): 'overload' is not a keyword unless -traditional.
+       Unset extension keywords if -fno-gnu-keywords.
+       Allow operator names ('bitand') if -foperator-names.
+       Never unset 'asm'; -fno-asm only affects 'typeof'.
+
+       * decl.c (lookup_name_real): The got_object special lookup only
+       applies to types.
+
+Tue Jan 10 18:07:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * spew.c (yylex): Also use DECL_NESTED_TYPENAME if got_object is set.
+
+       * parse.y (primary): Unset got_object after all rules that use the
+       'object' nonterminal.
+       (object): Set got_object.
+
+       * lex.h: Declare got_object.
+
+       * decl.c (lookup_name_real): Also lookup names in the context of an
+       object specified.
+
+Tue Jan 10 14:30:30 1995  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (get_member_function_from_ptrfunc): Use ptrdiff_type_node
+       for things that have to be added to pointers, not size_type.  Cures
+       problems with pointer to members on Alphas.
+       (build_binary_op_nodefault): Likewise.
+       (get_delta_difference_: Likewise.
+       (build_ptrmemfunc): Likewise.
+
+Tue Jan 10 01:49:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (pushtag): Stick the new decl in TYPE_NAME before pushing
+       it.
+
+       * typeck.c (build_component_ref): Don't build up a COMPONENT_REF
+       when dealing with overloaded member functions; just act like
+       build_offset_ref.
+       (commonparms): Remove misleading comment.
+
+       * decl.c (duplicate_decls): Complain about repeated default
+       arguments here.
+       (redeclaration_error_message): Instead of here.
+       (pushdecl): Complain about missing default arguments here.
+       (grokparms): Instead of here.
+       (lookup_name_current_level): Also match on DECL_ASSEMBLER_NAME.
+       (grok_reference_init): Do not complain about missing initializer if
+       declared 'extern'.
+
+       * search.c (lookup_field): Don't return a TYPE_DECL if there is a
+       function alternative and want_type is not set.
+
+Mon Jan  9 18:16:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (pushtag): Don't set TYPE_NAME to an identifier.  Do push
+       the decl when the type has no TYPE_NAME.
+       (lookup_nested_type): Don't assume that type has TYPE_NAME set.
+       (lookup_name_real): Call lookup_field with want_type =
+       prefer_type.
+
+       * search.c (lookup_field): Handle want_type properly in the presence
+       of fields with the same name.
+
+       * decl.c (set_nested_typename): Set nested name for file-scope types
+       to include leading ::.
+       (pushdecl): Set the nested typename if the decl doesn't have one,
+       rather than if the type's canonical decl doesn't have one.
+
+Mon Jan  9 03:44:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (convert_for_assignment): Complain about contravariance
+       violation here.
+       (comp_target_types): Instead of here.
+       (build_unary_op): resolve_offset_ref before checking for a valid
+       type.
+
+       * spew.c (yylex): Decrement looking_for_typename after we see a
+       _DEFN.
+
+       * decl.c (pushdecl): Don't install an artificial TYPE_DECL in
+       IDENTIFIER_LOCAL_VALUE if we already have a decl with that name.
+
+       * typeck.c (convert_for_assignment): Converting pointers to bool
+       does not need a cast.
+
+Sun Jan  8 18:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (instantiate_type): Initialize nsubsts parm.
+
+       * pt.c (do_function_instantiation): Likewise.
+
+Sat Jan  7 14:37:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (tsubst): Use TREE_STATIC instead of DECL_INLINE &&
+       DECL_SAVED_INSNS to determine whether or not we've seen a definition
+       of this function.
+       (instantiate_template): Likewise.
+
+       * call.c (convert_harshness): Allow const reference binding when
+       called from the overloading code, but not when called from
+       can_convert (since it isn't a conversion).
+       (convert_harshness): Put back some disabled code.
+
+Fri Jan  6 14:10:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (convert_harshness): There is no implicit conversion from
+       void* to other pointer types (unless the parameter is (void*)0).
+       (convert_harshness): Non-lvalues do not convert to reference types.
+
+       * class.c (finish_struct_methods): Still set
+       TYPE_HAS_{INT,REAL}_CONVERSION.
+
+       * call.c (can_convert): Don't use aggregate initialization.
+
+       * cp-tree.h: Declare lookup_conversions.
+
+Thu Jan  5 21:08:00 1995  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (simple_stmt): Fix duplicate case value error messages to
+       be more readable.
+
+Wed Jan  4 16:44:19 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (build_type_conversion): Total rewrite to use
+       convert_harshness instead of reproducing conversion logic here.  Now
+       much shorter.
+
+       * call.c (convert_harshness): Support conversions to bool.
+       (can_convert): Checks whether a conversion is less harsh
+       than USER_CODE, for build_type_conversion.
+
+       * search.c (add_conversions): Function for passing to dfs_walk which
+       adds all the type conversion operators in the current type to a list.
+       (lookup_conversions): Calls dfs_walk with add_conversions and return
+       the list.
+       (dfs_walk): Don't require a qfn.
+
+       * cp-tree.h: Lose CLASSTYPE_CONVERSIONS hackery.
+       (CLASSTYPE_FIRST_CONVERSION): Points to elt 1 of CLASSTYPE_METHOD_VEC.
+
+       * class.c (finish_struct_bits): Lose CLASSTYPE_CONVERSIONS hackery.
+       (grow_method): A separate function for building onto the growing
+       method vector.
+       (finish_struct_methods): Use it.  Put all type conversion operators
+       right after the constructors.  Perhaps we should sort the methods
+       alphabetically?
+
+Mon Jan  2 14:42:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Lose another misleading shortcut.
+
+Fri Dec 30 17:57:30 1994  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_bltn_desc): Handle bool as a built-in type.
+
+Fri Dec 30 14:20:21 1994  Mike Stump  <mrs@cygnus.com>
+
+       * tree.c (layout_vbasetypes): Ensure that we don't loose alignment
+       on the complete type because of small virtual bases.
+
+Fri Dec 30 12:22:29 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (n_incomplete): Bump n_incomplete up to int to match C
+       front end.
+       (pushdecl): Also count decls pushed that are of a type being defined
+       as incomplete things.
+       * class.c (finish_struct): Move hack_incomplete_structures up to
+       just after we set it as not being defined, so that the decls we
+       build for RTTI don't count as incomplete.
+
+Thu Dec 29 18:20:57 1994  Mike Stump  <mrs@cygnus.com>
+
+       * pt.c (tsubst): Fix problem with defining constructors in templated
+       classes with virtual bases.
+
+Wed Dec 28 08:31:00 1994  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (TYPEID): Strip top-level cv-qualifiers on typeid
+       expressions.
+       * gc.c (build_typeid): Likewise.
+
+Thu Dec 22 17:26:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (build_up_reference): Fix breakage introduced on Nov 29,
+       don't assert on complex AGGR inits.
+
+Thu Dec 22 14:32:31 1994  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (build_overload_value): Handle pointer to members as
+       template arguments.
+
+Thu Dec 22 13:09:07 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (unary_complex_lvalue): Don't call sorry if we know how
+       to do take the address of a data member for a pointer to data
+       member.
+
+Thu Dec 22 10:04:19 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (grokdeclarator): Use the typedef name for linkage if the
+       type doesn't otherwise have a name.
+
+       * decl2.c (grokfield): Likewise.
+
+       * class.c (finish_struct): Since we reuse the TYPE_DECL for the
+       DECL_NAME of enums, structs and classes, we have to avoid trying to
+       put it in the TYPE_FIELDS again.
+
+Wed Dec 21 11:07:05 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (check_classfn): Ignore this parameter on static functions
+       when checking to see if we match.
+
+Tue Dec 20 17:47:02 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (unary_complex_lvalue): Handle address of non-left most
+       pointers to members by calling get_delta_difference.
+
+Mon Dec 19 22:40:53 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (check_classfn): Don't use decls_match yet, as it modifies
+       static functions to early.
+
+Thu Dec 19 22:37:48 1994  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (make_thunk): Handle encoding of positive thunk offsets.
+
+Sat Dec 17 13:29:50 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Make-lang.in (.PHONY): Tell GNU make C++ and c++ are phony targets.
+
+Thu Dec 15 16:32:12 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (check_classfn): Use decls_match to check if this has
+       already been declared, as the DECL_ASSEMBLER_NAME may have been
+       changed via asm("new_name").
+       * decl.c (decls_match): Make public.
+
+Thu Dec 15 15:17:55 1994  Mike Stump  <mrs@cygnus.com>
+
+       * *.[chy] (expand_aggr_init) Add fourth argument to handle
+       distinction between = init and (init) style of initializations.
+       * *.[chy] (finish_decl): Add fifth argument to to handle
+       distinction between = init and (init) style of initializations.
+
+Tue Dec 13 19:16:05 1994  Mike Stump  <mrs@cygnus.com>
+
+       Fix some random `explicit' bugs.
+
+       * cvt.c (convert_to_reference): Add third parameter to
+       convert_force.
+       (convert_force): Likewise.
+       * call.c (build_method_call): Likewise.
+       * decl2.c (setup_vtbl_ptr): Likewise.
+       * init.c (expand_virtual_init): Likewise.
+       (build_member_call): Likewise.
+       (build_delete): Likewise.
+       (build_vbase_delete): Likewise.
+       * typeck.c (build_component_addr): Likewise.
+       (build_c_cast): Likewise.
+       (build_modify_expr): Likewise.
+       * cp-tree.h (CONV_NONCONVERTING): Likewise. Add so that we can
+       distinguish the context in which the conversion appears.  Add thrid
+       argument to build_c_cast.
+       * cvt.c (cp_convert): Pass whether or not we want to consider
+       non-converting constructors down to build_method_call.
+       * decl2.c (reparse_absdcl_as_casts): Add third argument to
+       build_c_cast.
+       * gc.c (build_m_desc): Likewise.
+       * init.c (build_new): Likewise.
+       * parse.y (expr_no_commas): Likewise.
+       (primary): Likewise.
+       * typeck.c (build_x_function_call): Likewise.
+       (build_static_cast): Likewise.
+       (build_reinterpret_cast): Likewise.
+       (build_const_cast): Likewise.
+       (build_c_cast): Likewise.
+       (build_ptrmemfunc): Likewise.
+       * typeck2.c (build_functional_cast): Likewise.
+       * init.c (expand_aggr_init): Added LOOKUP_ONLYCONVERTING to
+       expand_aggr_init_1 as inits are converted to the destination type.
+
+Tue Dec 13 16:18:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * Make-lang.in (cc1plus): Depends on c-pragma.o.
+
+       * Makefile.in (OBJ{DEP,}S): Add ../c-pragma.o.
+
+       * lex.c (check_newline): If the #pragma is not recognized by g++,
+       try machine-specific ones too.
+       (handle_sysv_pragma): Copied from c-lex.c.
+
+Mon Dec 12 23:53:06 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Fix Dec 6th change, build_new likes a
+       reference better.
+
+Mon Dec 12 18:01:00 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_binary_op): Lose checks on TYPE_PTRMEMFUNC_P with
+       IS_AGGR_TYPE, since now they will not both be set on the same type.
+
+       * pt.c (do_pending_expansions): Don't clear TREE_PUBLIC on
+       instantiations controlled by -fexternal-templates.
+
+       * decl.c (duplicate_decls): Don't complain about different values of
+       __attribute__ ((const)) and ((noreturn)).
+
+Fri Dec  9 18:17:37 1994  Doug Evans  <dje@cygnus.com>
+
+       * Makefile.in (BISONFLAGS): Delete --yacc.
+       (PARSE_H): Depend on $(PARSE_C), for parallel makes.
+       (PARSE_C): Undo last patch.
+
+Fri Dec  2 10:44:36 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Makefile.in (BISONFLAGS): Add --yacc so that output winds up in
+       y.tab.c.
+
+Thu Dec  8 17:39:46 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (finish_decl): Don't call obscure_complex_init for decls
+       of indeterminate size.
+
+Wed Dec  7 16:49:22 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (obscure_complex_init): Function to tweak the decl to
+       prevent expand_decl from tring to initialize it.
+       (finish_decl): Use it rather than writing the same code in three
+       different places.
+
+       * parse.y (bad_parm): Stop trying to support parms without types.
+
+Wed Dec  7 12:06:56 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (grokfield): Make asm specs on static member functions
+       work.
+
+Tue Dec  6 15:43:20 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_throw): Make a copy of the thrown object.
+
+Tue Dec  6 14:16:34 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * parse.y: : has lower precedence than =.
+
+Tue Dec  6 12:46:17 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (pushdecl): Use DECL_NAME of VAR_DECLs to avoid namespace
+       manglings.
+       (grokvardecl): Add namespace into variable name.
+
+Tue Dec  6 11:26:55 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (current_namespace_id): New routine to transform a simple
+       name into a name in a namespace.
+       * decl.c (grokdeclarator): Use it.
+       * decl2.c (get_namespace_id): Find the name of the current
+       namespace.
+       (push_namespace, pop_namespace): Complete out missing
+       functionality.
+
+Mon Dec  5 17:11:51 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * class.c (finish_struct): Don't use LONG_LONG_TYPE_SIZE, as it may
+       not be defined.  Fix warning message for enums and restore warning
+       for non-enums.
+
+       * decl2.c (push_namespace): Dummy function.
+       (pop_namespace): Likewise.
+       (do_namespace_alias): Likewise.
+       (do_using_decl): Likewise.
+       (do_using_directive): Likewise.
+
+       * parse.y: New token NSNAME for namespace names.
+       (extdef): Add namespace, using definitions.
+       (using_decl): New rule for using declarations.
+       (any_id): New rule for identifiers with any degree of scoping.
+       (identifier): Add NSNAME.
+       (notype_identifier): Likewise.
+       (component_decl): Add using_decl.
+       (nested_name_specifier): Add NSNAME SCOPE.
+
+       * typeck.c (convert_for_assignment): Handle conversions between
+       enums and bool.
+
+       * decl.c (duplicate_decls): Only propagate DECL_MAIN_VARIANT on
+       FUNCTION_DECLs.
+
+Mon Dec  5 13:03:16 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (finish_struct): Give an error if one tries to declare a
+       bit-field's size greater than a long long, as the backend will dump.
+       It is not an error to declare an enum bit-field greater than its
+       precision.  Warn if an enum bit-field is too small to hold all
+       its values.
+
+Mon Dec  5 11:41:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (convert_for_assignment): Use cp_convert instead of
+       convert so that we don't get static casts.
+
+Sun Dec  4 11:59:01 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (cp_convert): Don't complain about int->enum conversion if
+       we are doing static casts.
+
+Fri Dec  2 18:32:41 1994  Mike Stump  <mrs@cygnus.com>
+
+       * error.c (dump_expr): Do something more intelligent with SAVE_EXPRs
+       when dumping expressions in error messages.
+
+Fri Dec  2 17:04:27 1994  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (build_dynamic_cast): Change interface to libg++, ensure that
+       the return type is the right type, and make references work.
+
+Fri Dec  2 16:36:43 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (poplevel): Don't be confused by function-scope
+       declarations of non-nested functions.
+       (duplicate_decls): Propagate DECL_MAIN_VARIANT.
+       (pushdecl): Use duplicate_decls to copy info from old decl into new
+       function-scope one rather than doing it here.
+
+       * decl2.c (mark_inline_for_output): Deal with the DECL_MAIN_VARIANT
+       of this decl, in case this is a function-scope declaration.
+
+       * decl.c (finish_enum): Make sure that the type has the right
+       precision when we call fixup_*_type.
+
+Tue Nov 29 19:12:07 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (build_up_reference): Strip superfluous NOP_EXPRs; we do
+       want to build up references to rvalues if possible.
+       (cp_convert): Stick on a NOP_EXPR when converting to the same type.
+
+Tue Nov 29 11:28:59 1994  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (maybe_raises): Handle throw ().
+       * parse.y (ansi_raise_identifier): grok type-ids in exception
+       specifications.
+       * tree.c (build_exception_variant): Use list compare to check if
+       two exception specifications match.
+       * decl.c (duplicate_decls, bad_specifiers): Enhance wording on error
+       messages.
+       * call.c (build_method_call): Remove TREE_RAISES.
+       * cvt.c (convert_to_aggr): Likewise.
+       * typeck.c (build_function_call_real, convert_arguments): Likewise.
+       * init.c (expand_aggr_init_1): Likewise.
+
+Tue Nov 29 09:50:39 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Add support for m68k and mips exception handling
+       support.
+
+Tue Nov 29 08:48:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_end_all_catch): Throw into outer context, if we
+       fall off end of catch handlers.
+
+Mon Nov 28 16:44:41 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Makefile.in: Make is easier to decide where parse.[ch] will be
+       built.
+
+Thu Nov 17 20:11:24 1994  Doug Evans  <dje@cygnus.com>
+
+       * cp/Make-lang.in (CXX_INSTALL_NAME) Use program_transform_name.
+       (GXX_INSTALL_NAME) Likewise.
+       (CXX_CROSS_NAME) Use program_transform_cross_name.
+       (GXX_CROSS_NAME) Likewise.
+       (c++.install-man): Use program_transform_name on g++.1.
+       (c++.uninstall): Likewise.
+
+Mon Nov 28 13:53:03 1994  Mike Stump  <mrs@cygnus.com>
+
+       * parse.y (THROW): Fix precedence of throw expressions.
+
+Mon Nov 28 13:15:16 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (build_unary_op): Allow promotions from bool to int on
+       unary ~.
+
+Sun Nov 27 00:16:21 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (build_overload_name): Use DECL_ASSEMBLER_NAME for
+       classes when appropriate.
+       (build_overload_nested_name): When dealing with a function context,
+       use ASM_FORMAT_PRIVATE_NAME to tweak the name of the function to
+       avoid conflicts between local classes of the same name.
+
+Wed Nov 23 17:59:42 1994  Mike Stump  <mrs@cygnus.com>
+
+       * gxx.gperf, parse.y, lex.h, hash.h, lex.c (init_lex), delc.c
+       (duplicate_decls, grokdeclarator), cp-tree.h: Add support for
+       `explicit'.
+       * cvt.c (convert_to_reference, cp_convert, build_type_conversion_1,
+       build_type_conversion): Use LOOKUP_ONLYCONVERTING in
+       build_method_calls so that non-converting constructors are not used.
+       * call.c (build_method_call): If we shouldn't use a non-converting
+       constructor, then don't.
+
+Wed Nov 23 14:46:56 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_method_call): Don't try to synthesize methods yet.
+
+Tue Nov 22 12:45:21 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (push_template_decls): Create CONST_DECLs for template
+       constant parameters, not VAR_DECLs.
+
+Sat Nov 19 15:28:31 1994  Jim Wilson  <wilson@chestnut.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Can shorten shift only if
+       shift count is less than size in bits of arg0.
+
+Thu Nov 17 15:30:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       * gxx.gperf, hash.h, lex.c (init_lex, real_yylex), parse.y: Add new
+       ANSI keywords and, and_eq, bitand, bitor, explicit, namespace, not,
+       not_eq, or, or_eq, typename, using, xor, xor_eq to g++.  Still need
+       to add support for explicit, namespace, typename, and using, support
+       for the rest is already in.
+
+Fri Nov  4 19:04:18 1994  Mike Stump  <mrs@cygnus.com>
+
+       * gc.c (get_bad_cast_node): New routine to support compile time
+       throws of bad_cast.
+       * gc.c (build_dynamic_cast): Support throwing of bad_cast at compile
+       time.
+
+Fri Nov  4 11:12:00 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Add hppa support.
+
+Fri Nov  4 10:50:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Add rs6000 support.
+
+Thu Nov  3 14:24:23 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (do_unwind): Add i[34]86 support.
+
+Thu Nov  3 00:10:46 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (do_pending_expansions): Unset TREE_PUBLIC on implicit
+       instantiations.
+
+Wed Nov  2 15:08:24 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * decl.c (finish_function): Emit types used in method parameters
+       into symbol table.
+
+Wed Nov  2 15:05:47 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (process_template_parm): Allow pointer to member function
+       template parameter types.
+       (uses_template_parms): Handle pointer to member function
+       CONSTRUCTORs.
+
+       * g++.c (main): Cast first argument of bzero to (char *).
+       Pass -lstdc++ instead of -lg++ unless we are invoked as 'g++'.
+
+Mon Oct 31 14:50:48 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * gc.c (build_dynamic_cast): rewrite to make it work.
+       * class.c (finish_vtbls): build more vtables if flag_rtti is on.
+       * class.c (modify_all_direct_vtables): ditto.
+       * init.c (expand_direct_vtbls_init): expand more vtables if
+       flag_rtti is on.
+       * decl.c (init_type_desc): add default return.
+
+Tue Oct 25 17:13:09 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * tree.c (debug_binfo): get rid of the initial size entry of
+       vtable.
+       * cp-tree.h: change flag_dossier to flag rtti, define type
+       descriptor type nodes.
+       * decl.c (init_type_desc): new function to initialize type
+       descriptor type nodes.
+       * decl.c (record_builtin_type): change flag_dossier to flag_rtti.
+       * lex.c (init_lex): ditto.
+       * decl.c : change variable flag_dossier to flag_rtti.
+       * decl.c (duplicate_decls): get rid initial size entry of vtable.
+       * decl.c (hack_incomplete_structures): take out assert 164.
+       * search.c (get_abstract_virtuals_1): ditto.
+       * search.c (dfs_init_vbase_pointers): change CLASSTYPE_DOSSIER to
+       CLASSTYPE_RTTI.
+       * parse.y: ditto.
+       * class.c (prepare_fresh_vtable): for virtual bases, get right
+       offset.
+       * class.c (add_virtual_function): change flag_dossier to
+       flag_rtti.
+       * class.c (modify_one_vtable): modify the right rtti entry.
+       * class.c (override_one_vtable): get rid of size entry.
+       * class.c (finish_struct): change flag_dossier to flag_rtti, and
+       build extra vtables, build type descriptors for polymorphic
+       classes.
+       * gc.c (build_headof): make headof() works correctly with new
+       rtti.
+       * gc.c (build_typeid): make this function work with new rtti.
+       * gc.c (get_typeid): make this function work with new rtti.
+       * gc.c (build_bltn_desc): new function for new rtti.
+       * gc.c (build_user_desc): ditto.
+       * gc.c (build_class_desc): ditto.
+       * gc.c (build_ptr_desc): ditto.
+       * gc.c (build_attr_desc): ditto.
+       * gc.c (build_func_desc): ditto.
+       * gc.c (build_ptmf_desc): ditto.
+       * gc.c (build_ptmd_desc): ditto.
+       * gc.c (build_t_desc): ditto.
+       * gc.c : comment out old build_t_desc, build_i_desc, build_m_desc.
+
+Tue Oct 25 13:37:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (convert_harshness): Check for TREE_UNSIGNED differences
+       after checking for integral conversions.
+
+Wed Nov 30 19:13:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Version 2.6.3 released.
+
+Thu Nov 17 10:56:50 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck2.c (build_m_component_ref): Check the basetype of the
+       member pointer against the main variant of the object type.
+
+Mon Nov 14 14:21:52 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (convert_to_reference): Make sure that the original expr
+       gets its type back when converting a reference.
+
+       * method.c (build_overload_name): Clear numeric_outputed_need_bar here.
+       (build_decl_overload): Instead of here.
+
+Tue Nov  8 17:11:24 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (cp_convert): Don't build a TARGET_EXPR if we're not in a
+       function.
+
+       * typeck.c (convert_for_initialization): Handle initialization from
+       a TARGET_EXPR.
+
+Sun Nov  6 01:34:24 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (lookup_nested_type_by_name): Fix list-walking logic.
+       (tsubst): When replacing a TEMPLATE_TYPE_PARM, propagate
+       TYPE_READONLY and TYPE_VOLATILE from the argument.
+       (unify): When unifying with a TEMPLATE_TYPE_PARM, remove cv-quals
+       present in parm from arg.
+       (type_unification): Strip REFERENCE_TYPE from the argument type.
+       (unify): Don't strip REFERENCE_TYPE from the argument type.
+
+Sat Nov  5 22:42:15 1994  Greg McGary  <gkm@magilla.cichlid.com>
+
+       * pt.c (do_type_instantiation): Check to see if there's a
+       IDENTIFIER_TEMPLATE on a class before calling
+       instantiate_member_templates().
+
+Sat Nov 12 06:35:42 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Version 2.6.2 released.
+
+Thu Nov  3 18:48:19 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * Makefile.in (spew.o, lex.o, pt.o):
+       Depend on $(srcdir)/parse.h, not parse.h.
+
+Tue Nov  1 19:19:41 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Version 2.6.1 released.
+
+Sun Oct 23 13:19:55 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c: Declare flag_access_control.
+       (struct lang_f_options): Add access-control.
+       * expr.c (cplus_expand_expr, NEW_EXPR): Unset flag_access_control
+       for the call to expand_aggr_init to copy the object out of the
+       pcc_struct_return slot.
+       * search.c (compute_access): if (!flag_access_control) return
+       access_public.
+
+Fri Oct 21 00:32:54 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * lex.c (cons_up_default_function): Don't try to defer method
+       synthesis now.
+
+       * decl.c (init_decl_processing): Use __pure_virtual for abort_fndecl
+       instead of abort, since the OSF/1 dynamic linker doesn't like to see
+       relocation entries for abort.
+
+       * tree.c (array_type_nelts_total): Use sizetype, not
+       integer_type_node.
+       (array_type_nelts_top): Likewise.
+
+Thu Oct 20 15:48:27 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (grokdeclarator): Added handling for catch parameters
+       (CATCHPARM).
+       * except.c (expand_start_catch_block): Use the new CATCHPARM context
+       instead of NORMAL.
+       * except.c (expand_throw): Don't let convert_to_reference complain
+       about what we are doing.
+
+Thu Oct 20 12:55:24 1994  Jim Wilson  <wilson@cygnus.com>
+
+       * method.c (emit_thunk): Call instantiate_virtual_regs.
+
+Wed Oct 19 14:15:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_exception_blocks): Make sure throw code doesn't
+       get put in function that won't be output.
+
+Mon Oct 17 18:03:15 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (init_decl_processing): Make alloca a builtin.
+
+Thu Oct 27 21:10:25 1994  Craig Burley  <craig@burley>
+
+       * g++.c (main): Only decrement "added" and set "library" to
+       NULL when "library" != NULL (just like 940829 fix).
+
+Mon Oct 17 15:56:11 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (expand_start_catch_block): Make sure the false label
+       gets onto the permanent obstack, as it is used for the exception
+       table.
+
+Fri Oct 14 18:54:48 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (modify_one_vtable): Since the DECL_CONTEXT of fndecl can
+       be set just below, use current_fndecl instead.
+
+Fri Oct 14 15:12:22 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * init.c (expand_aggr_vbase_init_1): Don't call expand_aggr_init_1
+       with LOOKUP_SPECULATIVELY.
+       (expand_default_init): Abort if build_method_call returns NULL_TREE.
+
+       * typeck.c (build_modify_expr): Don't just build a MODIFY_EXPR if
+       the rhs is a TARGET_EXPR.
+
+       * parse.y (left_curly): Anonymous types are not affected by #pragma
+       interface/implementation.
+
+       * method.c (synthesize_method): Don't call setup_vtbl_ptr for the
+       default constructor if it isn't needed.
+
+       * lex.c (cons_up_default_function): Do synthesize methods for
+       anonymous types if necessary.
+
+Thu Oct 13 17:44:55 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (build_decl_overload): Set numeric_outputed_need_bar to 0.
+
+Wed Oct 12 13:27:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * typeck.c (build_modify_expr): Understand how to copy an aggregate.
+
+       * init.c (expand_default_init): Likewise.  Also remove some of the
+       crufty code that assumes methods will not be synthesized properly.
+
+       * lex.c (cons_up_default_function): If the containing type has no
+       name, these functions should never need to be called, so just
+       declare them.
+
+       * lex.c (real_yylex): Use HOST_BITS_PER_WIDE_INT to determine the
+       bitmask for lexing character constants.
+
+       * call.c (build_method_call): Disable code that tries to do tricky
+       stuff with a default parameter that is a constructor call, but
+       actually does other tricky stuff that breaks things.
+
+Wed Oct 12 16:14:01 1994  Benoit Belley  <belley@cae.ca>
+
+       * decl.c (finish_enum): Disable code which forces enums to be signed,
+       since this conflicts with their use as bitfields. type_promotes_to
+       handles promotion of enums of underlying unsigned types to signed
+       integer types.
+
+Wed Oct 12 13:24:03 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * cvt.c (type_promotes_to): Also promote enums to long if
+       appropriate.
+
+       * typeck.c (default_conversion): Don't expect type_promotes_to to
+       return a main variant.
+
+Wed Oct 12 12:19:45 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_scoped_method_call): Don't lose side effects in the
+       object expression when calling a non-existent destructor.
+
+Fri Sep  2 19:05:21 1994  Rohan Lenard  <rjl@iassf.easams.com.au>
+
+       * call.c (build_scoped_method_call): Remove erroneous error message
+       when destructor call is written as a scoped call.
+
+Tue Oct 11 23:48:31 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * various: Cast pointer arguments to bzero and bcopy to char *.
+
+Tue Oct 11 19:34:32 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (get_derived_offset): Added a type parameter to limit how
+       far up the CLASSTYPE_VFIELD_PARENT chain we search.
+       * class.c (modify_one_vtable, fixup_vtable_deltas): When forming the
+       offset to put into the vtable for the this parameter, make sure we
+       don't offset from a parent of the DECL_CONTEXT of the function.
+
+Tue Oct 11 16:10:52 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * pt.c (do_function_instantiation): Set DECL_EXTERNAL and
+       TREE_STATIC when setting DECL_INTERFACE_KNOWN.
+       (do_type_instantiation): Likewise.
+
+       * lex.c (cons_up_default_function): Set DECL_INTERFACE_KNOWN,
+       DECL_EXTERNAL and TREE_STATIC as appropriate.
+
+       * decl2.c (finish_file): Also synthesize methods that don't have
+       DECL_EXTERNAL set.  Set interface_unknown before doing so.
+
+       * decl.c (start_function): If DECL_INTERFACE_KNOWN is set on the
+       function decl, don't muck with TREE_PUBLIC and DECL_EXTERNAL.
+
+Mon Oct 10 00:56:53 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * lex.c (cons_up_default_function): Mark methods in a template class
+       as template instances.  Store the values of interface_unknown and
+       interface_only for do_pending_inlines.
+       (do_pending_inlines): Use them.
+
+       * decl2.c (finish_file): If we haven't seen a definition of a
+       function declared static, make the decl non-PUBLIC so compile_file
+       can give an error.
+
+Sun Oct  9 02:42:29 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * method.c (do_build_copy_constructor): Handle anonymous unions.
+       (do_build_assign_ref): Likewise.
+       (largest_union_member): Move from lex.c.
+
+Sat Oct  8 14:59:43 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       Re-implement g++'s vague linkage independent of TREE_PUBLIC.
+       * pt.c (instantiate_member_templates): Lose redundant
+       -fexternal-templates handling.
+       (tsubst): Set TREE_PUBLIC and DECL_EXTERNAL on new decls.  Don't set
+       TREE_STATIC or DECL_INTERFACE_KNOWN.
+       (do_pending_expansions): Predicate on DECL_INTERFACE_KNOWN instead
+       of DECL_EXTERNAL for explicit instantiations.
+       (do_function_instantiation): Do the new thing.
+       (do_type_instantiation): Likewise.
+       (instantiate_template): Deal with member templates defined in a .cc
+       file with -fexternal-templates.
+       * except.c (expand_exception_blocks): Use DECL_LINKAGE_KNOWN to
+       decide whether to stick builtin_throw here.
+       * decl2.c (import_export_inline): Predicate on DECL_INTERFACE_KNOWN
+       rather than TREE_PUBLIC.  Generally fix rules.
+       (finish_file): Use DECL_INITIAL to determine whether or not a method
+       has been synthesized, rather than TREE_ASM_WRITTEN.
+       * decl.c (warn_extern_redeclared_static): Use DECL_PUBLIC instead of
+       TREE_PUBLIC.
+       (pushdecl): Likewise.
+       (duplicate_decls): Likewise.  Deal with DECL_DECLARED_STATIC and
+       DECL_INTERFACE_KNOWN. 
+       (redeclaration_error_message): Fix checking for conflicting linkage.
+       (define_function): Set DECL_INTERFACE_KNOWN.
+       (grokfndecl): Function decls are PUBLIC until we are sure about
+       their linkage.  Set DECL_DECLARED_STATIC as needed.
+       (start_function): Deal with linkage.  Move pushdecl after linkage
+       magic.
+       (finish_function): Don't set TREE_ASM_WRITTEN on discarded inlines.
+       * cp-tree.h (lang_decl_flags): Add interface_known and
+       declared_static.
+       (DECL_INTERFACE_KNOWN): New macro.
+       (DECL_DECLARED_STATIC): New macro.
+       (DECL_PUBLIC): New macro.
+
+       Clean up bogus use of TREE_PUBLIC.
+       * class.c (alter_access): Fix mistaken use of TREE_PUBLIC (it
+       doesn't correspond to TREE_PROTECTED and TREE_PRIVATE).
+       * init.c (do_friend): Don't arbitrarily set TREE_PUBLIC.
+
+Wed Oct  5 13:44:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * call.c (build_overload_call_real): Don't immediately do
+       array->pointer conversion.
+
+       * pt.c (type_unification): If not passing to a reference, strip
+       cv-quals.  Also handle array->pointer conversion.
+
+Tue Oct  4 17:45:37 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't warn about applying const to a
+       const typedef or template type parameter.
+
+       * decl2.c (finish_file): Also synthesize methods after walking the
+       vtables.  Ugly ugly ugly.
+
+Mon Oct  3 15:02:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * various: Remove lingering remnants of old exception handling code.
+
+       * decl2.c (finish_file): Synthesize methods before walking the
+       vtables, so that the vtables get emitted as needed.
+
+       * decl.c (shadow_tag): Remove obsolete code for pushing tags and
+       dealing with exceptions.
+
+Mon Oct  3 13:05:27 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>
+
+       * Make-lang.in (g++-cross): Depend upon version.o and $(LIBDEPS).
+
+Mon Oct  3 02:59:28 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl2.c (finish_file): Fix inline handling.
+
+Sun Oct  2 00:21:56 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       * decl.c (grokdeclarator): Handle redundant scope even better.
+       ({push,pop}_cp_function_context): Take toplev parameter.
+
+       * method.c (synthesize_method): Pass toplev parameter to
+       {push,pop}_cp_function_context depending on decl_function_context
+       (fndecl).
+
+       * typeck.c (build_x_unary_op): Unary & on OFFSET_REFs is always the
+       built-in version.
+
+       * method.c (synthesize_method): Don't be confused by __in_chrg
+       parameter.
+
+       * class.c (popclass): Set C_C_D like start_function does.
+
+       * decl.c (grokdeclarator): Handle redundant scope better.
+
+       * parse.y (expr_or_declarator): Add '(' expr_or_declarator ')' rule.
+       (direct_notype_declarator): Likewise.
+       (complex_direct_notype_declarator): Remove it here.
+
+Sat Oct  1 21:42:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (resolve_offset_ref): Fix types used in resolving .*
+       expressions.
+
+Sat Oct  1 15:18:49 1994  Jason Merrill  <jason@phydeaux.cygnus.com>
+
+       Beginnings of work to synthesize methods only when needed.
+       * call.c (build_method_call): Synthesize methods as necessary
+       (currently never necessary).
+       * class.c (popclass): Don't try to set C_C_D here, as it'll end up
+       on the wrong obstack.
+       * decl.c (push_cp_function_context): Mostly copied from
+       push_c_function_context.
+       (pop_cp_function_context): Similarly.
+       (finish_function): Reverse order of poplevel and pop_nested_class so
+       that current_class_decl is restored properly.  
+       (start_function): Likewise.
+       (finish_function): Add parameter 'nested'.  Don't call
+       permanent_allocation if (nested).
+       * various: Pass extra parameter to finish_function.     
+       * decl2.c (finish_file): Reorganize end-of-file inline handling,
+       synthesizing methods as necessary.
+       * lex.c (cons_up_default_function): Call mark_inline_for_output.
+       Only synthesize methods immediately if #pragma implementation
+       (currently disabled).
+       (do_pending_inlines): Call synthesize_method.
+       * method.c (synthesize_method): New function; all method synthesis
+       goes through here.  Calls do_build_assign_ref and
+       do_build_copy_constructor.
+       (build_default_constructor): Remove.
+       (build_dtor): Likewise.
+       (build_assign_ref): Rename to do_build_assign_ref and remove stuff
+       done by synthesize_method.
+       (build_copy_constructor): Similarly.
+
+Thu Sep 29 16:58:52 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (c_expand_return): Use magic so the backend can fixup the
+       assignment into the return register, so cleanups won't clobber it.
+
+Thu Sep 29 13:08:50 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (hack_identifier): Don't call assemble_external for
+       template decls.
+
+       * decl.c (finish_decl): Also end temporary allocation if the decl in
+       question has a type of error_mark_node.
+
+Wed Sep 28 21:45:00 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (build_modify_expr): When optimizing ?: on lhs, make sure
+       that if the ?: was a reference type, that the subparts will be also.
+
+Wed Sep 28 16:14:04 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * except.c (register_exception_table): Use Pmode, not PTRmode.
+
+Fri Sep 23 13:54:27 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (do_pending_inlines): Do method synthesis after the
+       pending_inlines have been reversed.
+
+Thu Sep 22 12:53:03 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl2.c (finish_file):  Fix Brendan's fix:  Only call
+       register_exception_table if there is a non-empty exception table.
+
+Thu Sep 22 12:03:46 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl2.c (finish_file): Only do register_exception_table if
+       -fhandle-exceptions is being used.
+
+Wed Sep 21 19:01:51 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * except.c (output_exception_table_entry):  Simplify
+       by using assemble_integer.
+       (build_exception_table):  Change to return a count.
+       Cleanup to use standard macros, instead of hard-wired
+       sparc asm format.  Don't make __EXCEPTION_TABLE__ global.
+       (register_exception_table):  New function.  Generate call to builtin.
+       * decl2.c (finish_file):  Call register_exception_table.
+       * cp-tree.h (build_exception_table):  Fix prototype.
+
+Wed Sep 21 13:20:42 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * tree.c (break_out_calls): Don't try to duplicate the DECL_INITIAL.
+
+       * decl2.c (delete_sanity): Give an error at trying to delete a
+       function.
+
+Wed Sep 21 11:47:10 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (cons_up_default_function): Mark synthesized destructors
+       inline.
+
+       * decl.c (duplicate_decls): Ignore redeclarations of wchar_t as
+       something other than __wchar_t, complaining if -pedantic and not in
+       a system header.
+
+Tue Sep 20 09:43:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (xref_tag): Set up BINFO_INHERITANCE_CHAIN on base binfos
+       here.
+
+       * typeck.c (build_modify_expr): Require complete type after checking
+       for error_mark_node.
+
+       * call.c (build_method_call): Print parmtypes when complaining of
+       ambiguous call.
+
+       * typeck.c (build_modify_expr): Handle assignment to array from
+       non-array.
+
+       * decl.c (lookup_name_real): Deal with got_scope == error_mark_node.
+
+       * call.c (build_method_call): Don't bother with the exact match.
+
+Mon Sep 19 00:51:39 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (expand_aggr_init): If we munge the type of the variable,
+       also munge the type of the initializer.
+
+       * decl.c (grokdeclarator): Use <= when comparing to RID_LAST_MODIFIER.
+       (init_decl_processing): Push artificial declaration of wchar_t so
+       people don't have to declare it before they can use it.
+
+       * error.c (cp_line_of): return lineno in lieu of 0.
+
+       * typeck.c (convert_for_assignment): Handle conversion of pmfs to
+       int and bool.
+       (build_component_ref): Fold the COMPONENT_REF in case it can be
+       reduced.
+
+       * typeck2.c (store_init_value): Don't pedwarn about non-constant
+       bracketed initializers for automatic variables.
+
+Sun Sep 18 10:12:12 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_decl): Don't say `typedef enum foo foo'.
+
+       * decl.c (start_decl): Don't set TREE_PUBLIC on template decls just
+       because they're affected by #pragma i/i.  We'll deal with that when
+       they get instantiated.
+
+       * typeck.c (build_unary_op): Clean up cruft in ADDR_EXPR case.
+
+       * class.c (instantiate_type): Set TREE_CONSTANT on instantiated
+       ADDR_EXPRs if appropriate.
+
+       * decl.c (build_ptrmemfunc_type): Unset IS_AGGR_TYPE on pmf types.
+
+       * typeck.c (build_ptrmemfunc): Handle &overloaded_method as an
+       initializer properly.
+       * typeck2.c (digest_init): Likewise.
+
+       * tree.c (cp_build_type_variant): Like c_build_type_variant, except
+       it uses build_cplus_array_type.
+       * *.c: Use cp_build_type_variant instead of c_build_type_variant.
+
+       * pt.c (do_type_instantiation): Don't try to instantiate nested
+       enums.
+
+Tue Sep 13 10:56:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_up_reference): Handle preincrement and predecrement
+       properly.
+
+Tue Sep 13 09:51:59 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (finish_decl): Only lay out the rtl for DECL if it is, in
+       fact, static.
+
+Mon Sep 12 14:40:30 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (finish_decl): Lay out the rtl for DECL before doing
+       grok_reference_init, in case it's static.
+
+Mon Sep 12 12:45:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Don't synthesize constructors if the
+       class has a field with the same name as the class.  Don't die on
+       classes with no constructors or destructors.  Don't die if the head
+       and tail of the class are in different files.
+
+       * decl.c (grokdeclarator): Don't treat a function pointer field
+       with the same name as the class as a constructor.
+
+Fri Sep  9 13:17:00 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_c_cast): Pull constant values out of their
+       variables here.
+
+       * decl.c (duplicate_decls): Only propagate DECL_CHAIN in
+       FUNCTION_DECLs and TEMPLATE_DECLs.
+
+Thu Sep  8 10:07:48 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (duplicate_decls): Propagate DECL_CHAIN in all DECLs that
+       have it.
+
+       * pt.c (unify): REALs and INTEGERs only unify with their own genus.
+       (instantiate_member_templates): Don't muck with DECL_EXTERNAL and
+       TREE_PUBLIC unless -fexternal-templates.
+
+Wed Sep  7 13:17:10 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (do_type_instantiation): Call instantiate_member_templates.
+       Deal with specializations.
+       (tsubst): Don't stick the mangled name in DECL_NAME for function
+       instantiations.  Don't push them, either.
+
+       * decl2.c (grokfield): Move code for generating the
+       DECL_ASSEMBLER_NAME for static members from here.
+       * method.c (build_static_name): To here.
+       * decl.c (grokvardecl): Call build_static_name.
+       (duplicate_decls): Keep old DECL_ASSEMBLER_NAME.
+
+Mon Sep  5 12:49:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): if -Wsynth, warn when selecting
+       synthesized op= over user-supplied one cfront would select.
+       * decl2.c (lang_decode_option): Handle -Wsynth.
+
+Fri Sep  2 15:11:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (finish_enum): Overhaul to fix several bugs.
+       (start_enum): Disable useless code.
+
+Thu Sep  1 16:04:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (c_expand_return): Warn about returning a reference to a
+       temporary.
+       (convert_arguments): Increment argument counter when using default
+       arguments, too.
+
+Wed Aug 31 14:29:22 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (finish_decl): If the type of decl is error_mark_node,
+       don't bother trying to do anything.
+
+       * typeck.c (convert_for_initialization): If the rhs contains a
+       constructor call, pretend the lhs type needs to be constructed.
+
+       * init.c (expand_default_init): If we stick the object inside the
+       initializer, mark the initializer used.
+
+Tue Aug 30 13:50:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (build_assign_ref): return *this;
+       (build_assign_ref): Fix base assignment order.
+       (build_copy_constructor): Fix member init order.
+
+Mon Aug 29 13:54:39 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * g++.c (main): Remember to clear out SAW_SPECLANG after we see
+       its argument.
+
+Sat Aug 27 09:36:03 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (build_copy_constructor): Also copy virtual bases.
+
+Fri Aug 26 17:05:15 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (do_pending_inlines): Clear out pending_inlines before doing
+       any synthesis.  Also first set deja_vu on all pending_inlines.
+
+       * method.c (build_assign_ref): Use build_member_call to invoke base
+       operator=, rather than build_modify_expr.  And use
+       build_reference_type instead of TYPE_REFERENCE_TO.
+       (build_copy_constructor): Use TYPE_NESTED_NAME to identify the
+       basetype.
+
+       * decl2.c (grokfield): Don't complain about undefined local class
+       methods.
+
+       * class.c (finish_struct): Don't try to synthesize methods here.
+       * lex.c (do_pending_inlines): Instead, synthesize them here.
+       (init_lex): Initialize synth_obstack.
+       (cons_up_default_function): Stick synthesis request on
+       pending_inlines.
+
+Fri Aug 26 12:24:14 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * call.c (build_method_call) [PCC_STATIC_STRUCT_RETURN]: Also
+       accept an RTL_EXPR in what we're about to use for the instance,
+       since anything which would end up with pcc_struct_return set
+       inside cplus_expand_expr.
+
+       * cp-tree.h (cons_up_default_function): Note change of prototype.
+
+Thu Aug 25 23:05:30 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * class.c (finish_struct): Undid change from Aug 21 testing
+       CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
+       * parse.y (left_curly): Likewise, undid change from Aug 21.
+       * decl.c (xref_tag): Undid change from Aug 21, set
+       CLASSTYPE_INTERFACE correctly, and added comments.
+
+Thu Aug 25 00:36:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Rework approach to synthesized methods; don't go through the parser
+       anymore.
+       * class.c (finish_struct): Use new synthesis approach.
+       * lex.c (cons_up_default_function): Now just creates declaration,
+       not code.
+       (largest_union_member): #if 0 out.
+       (default_assign_ref_body): Likewise.
+       (default_copy_constructor_body): Likewise.
+       * method.c (build_default_constructor): New function to synthesize X().
+       (build_copy_constructor): Synthesize X(X&).
+       (build_assign_ref): Synthesize X::operator=(X&).
+       (build_dtor): Synthesize ~X().
+
+       * error.c (cp_line_of): If we're dealing with an artificial
+       TYPE_DECL, look at the type instead.
+
+Wed Aug 24 11:11:50 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (sort_member_init): Check warn_reorder.
+       * decl2.c (lang_decode_option): Handle -W{no-,}reorder.
+
+       * cp-tree.h (CLASSTYPE_SOURCE_LINE): New macro.
+       * error.c (cp_line_of): Use CLASSTYPE_SOURCE_LINE for aggregates.
+       * class.c (finish_struct): Set CLASSTYPE_SOURCE_LINE.
+
+Tue Aug 23 09:28:35 1994  Mike Stump  <mrs@cygnus.com>
+
+       * error.c (dump_decl): Improve wording, so that error messages
+       dont't read template<, class foo>...
+
+Mon Aug 22 15:30:51 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (label_colon): Also match a TYPENAME as a label name,
+       since they may have declared a class by that name but have also
+       tried to have a local label under the same name.
+
+       * pt.c (coerce_template_parms): Call cp_error, not cp_error_at,
+       for the message so they know at what point it was instantiated.
+
+Sun Aug 21 23:07:35 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
+       CLASSTYPE_VTABLE_NEEDS_WRITING for signatures up to left_curly time.
+       * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
+       CLASSTYPE_VTABLE_NEEDS_WRITING for signatures down to left_curly time.
+       * parse.y (left_curly): New final resting place for setting
+       CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING for signatures.
+
+       * class.c (finish_struct): Don't test for function/field name
+       conflicts in signatures, since all the fields are compiler-constructed.
+
+Fri Aug 19 14:04:47 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * method.c (build_overload_nested_name): in qualified name
+       mangling, the template with value instantiation will have numeric
+       at end and may mixed with the name length of next nested level.
+       Add a '_' in between.
+       * method.c (build_overload_name): ditto.
+       * method.c (build_overload_identifier): ditto.
+
+Thu Aug 18 16:24:43 1994  Mike Stump  <mrs@cygnus.com>
+
+       * error.c (dump_decl): Handle NULL args.
+
+Thu Sep 29 16:15:36 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>
+
+       * g++.c: Rework last change so it's done like collect.c (and 
+       gcc.c).
+
+Wed Sep 14 10:17:27 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>
+
+       * g++.c: Include <sys/errno.h> in case `errno' is a macro
+       as permitted by ANSI C.
+
+Thu Aug 18 12:48:09 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
+       CLASSTYPE_VTABLE_NEEDS_WRITING up to left_curly time.
+       * decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
+       CLASSTYPE_VTABLE_NEEDS_WRITING down to left_curly time.
+       * parse.y (left_curly): New final resting place for setting
+       CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
+
+Thu Aug 11 11:32:42 1994  H.J. Lu  <hjl@nynexst.com>
+
+       * g++.c (main): Only decrement "added" and set "library" to
+         NULL when "library" != NULL.
+
+Sat Aug 13 00:14:52 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't set TREE_PUBLIC on a function decl
+       just because its class has a known interface.
+       (decls_match): Deal with new format of template parms.
+
+       * lex.c (cons_up_default_function): Don't play with TREE_PUBLIC and
+       DECL_EXTERNAL here.
+
+Fri Aug 12 01:55:15 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (pushtag): SET_DECL_ARTIFICIAL on gratuitous typedefs.
+       (xref_defn_tag): Likewise.
+       (pushdecl): Only allow artificial typedefs to be shadowed.
+
+       * init.c (emit_base_init): Pass the right binfos to
+       expand_aggr_init_1.
+
+       * class.c (delete_duplicate_fields_1): Make it work right.
+       (finish_struct): Catch function/field name conflict.
+
+       * decl2.c (check_classfn): Pass the function to cp_error, not just
+       the name.
+
+       * init.c (sort_member_init): Warn when order of member initializers
+       does not match order of member declarations.
+       (emit_base_init): Call expand_aggr_init_1 with LOOKUP_PROTECT.
+
+       * error.c (dump_expr): Handle lists of functions.
+
+       * decl.c (start_function): #pragma interface only affects functions
+       that would otherwise be static.
+       (finish_decl): Don't warn about an unused variable if it has both
+       constructor and destructor, since the 'resource allocation is
+       initialization' idiom is relatively common.
+
+       * typeck.c (comp_target_types): Don't handle TEMPLATE_TYPE_PARMs.
+       (comp_target_parms): Likewise.
+       (compparms): Never consider default parms.
+       (common_base_type): Don't choose a virtual baseclass if there is a
+       more derived class in common.
+       (build_conditional_expr): If pedantic, pedwarn about conversion to
+       common base in conditional expr.
+
+       * class.c (instantiate_type): Handle template instantiation better.
+
+       * typeck.c (convert_arguments): Don't try to get tricky and convert
+       to int directly when PROMOTE_PROTOTYPES is set, as it breaks
+       user-defined conversions.
+
+       * lex.c (check_for_missing_semicolon): Also give error at end of
+       file.
+
+       * call.c (build_method_call): Don't promote arrays to pointers here.
+
+       * typeck.c (convert_arguments): Don't require the actual parameter
+       to be of a complete type if the formal parameter is a reference.
+
+Thu Aug 11 15:21:40 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Soften 'static' on member function error
+       to pedwarn.
+
+       * init.c (build_new): Don't automatically save rval.
+       (build_offset_ref): Do field lookup with proper basetype_path.
+
+Thu Aug 11 12:46:54 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * errfn.c (cp_silent): Declare to mark when we should avoid
+       emitting warnings and errors.
+       (cp_error): Check it.
+       (cp_warning): Likewise.
+       (cp_pedwarn): Likewise.
+       (cp_compiler_error): Likewise.
+       (cp_error_at): Likewise.
+       (cp_warning_at): Likewise.
+       (cp_pedwarn_at): Likewise.
+       * call.c (compute_conversion_costs): Set CP_SILENT when we start
+       out, and make sure we turn it off before we leave.
+
+Thu Aug 11 00:02:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (grok_array_decl): Try computing *(A+B) if neither
+       argument is obviously an array.
+
+Wed Aug 10 15:32:04 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (c_expand_start_case): Do cleanups here.
+
+       * parse.y (xcond): Do bool conversion here, too.
+       (simple_stmt, SWITCH case): Don't do cleanups here.
+
+       * decl.c (duplicate_decls): Don't treat builtins that have been
+       explicitly declared specially.
+
+Tue Aug  9 01:16:09 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * tree.c (make_deep_copy): Support copying pointer, reference,
+       function, array, offset and method types.
+
+       * decl.c (init_decl_processing): Mark exit and abort as
+       BUILT_IN_NONANSI so that duplicate_decls is kinder about
+       redeclaration.
+       (duplicate_decls): Don't give two errors for redeclaring a C
+       function with the same parms but a different return type.
+
+       * parse.y (paren_cond_or_null): Do cleanup and bool conversion here.
+       (condition): Instead of here.
+       (simple_stmt, SWITCH case): Also do cleanup here.
+
+       * decl2.c (finish_anon_union): Only break out FIELD_DECLs.
+
+       * call.c (build_method_call): Don't throw away the side effects of
+       the object in a call to a non-existent constructor.
+       * parse.y (primary): Likewise.
+
+       * method.c (build_decl_overload): Oop.
+
+       * decl2.c (lang_decode_option): Deal with flag_no_nonansi_builtin,
+       warn about uselessness of specifying -fansi-overloading.
+
+       * method.c (build_decl_overload): Treat any non-member new with one
+       parameter as __builtin_new.
+
+       * decl.c (init_decl_processing): Setup built-in meanings of exit,
+       _exit and abort.
+
+Mon Aug  8 15:03:30 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_readonly_or_volatile): Put a space between const and
+       volatile if both apply.
+
+       * init.c (perform_member_init): Clean up after this initialization.
+       (emit_base_init): Clean up after each base init, not after all have
+       been done.
+       (expand_aggr_vbase_init_1): Clean up after this init.
+
+Sun Aug  7 14:55:05 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Deal with destroying references.
+
+       * parse.y (condition): Do bool_truthvalue_conversion here.
+       (paren_expr_or_null): And here.
+       (simple_if): Not here.
+       (simple_stmt): Or here.
+
+Sat Aug  6 22:29:45 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (paren_expr_or_null): Wrap the expression in a
+       CLEANUP_POINT_EXPR.
+       (condition): Likewise.
+
+Sat Aug  6 19:46:37 1994  Rohan Lenard  <rjl@easams.com.au>
+
+       * call.c (build_scoped_method_call): Fix error message when
+       destructor call refers to a nonexistent type.
+
+Sat Apr 16 22:43:30 1993  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * lex.h (rid): Deleted RID_RAISES, it's never used.
+       Moved RID_PUBLIC, RID_PRIVATE, RID_PROTECTED, RID_EXCEPTION,
+       RID_TEMPLATE and RID_SIGNATURE to the end of the enumeration,
+       they don't need to be touched in `grokdeclarator.'
+       (RID_LAST_MODIFIER): Defined macro to be RID_MUTABLE.
+
+       * decl.c (grokdeclarator): Use RID_LAST_MODIFIER instead of
+       RID_MAX as loop limit for finding declaration specifiers.
+
+Sat Apr  3 21:59:07 1993  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * lex.c (debug_yytranslate): Moved to parse.y since it needs to
+       access `yytname,' which is static in parse.c.
+
+Fri Apr  2 23:36:57 1993  Gerald Baumgarnter  <gb@cs.purdue.edu>
+
+       * cp-tree.h (GNU_xref_ref): Fixed typo in extern declaration, it
+       was `GNU_xref_def' instead of `GNU_xref_ref.'
+
+Fri Aug  5 14:20:16 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (do_function_instantiation): Don't set TREE_PUBLIC and
+       DECL_EXTERNAL on 'extern' instantiations; wait until EOF to do that.
+       (do_type_instantiation): Likewise.
+
+       * decl2.c (import_export_inline): Decides at EOF what an inline's
+       linkage should be.
+       (finish_file): Call it.
+
+       * decl.c (start_function): Don't rely on the settings of TREE_PUBLIC
+       and DECL_EXTERNAL from do_*_instantiation.  Only set
+       DECL_DEFER_OUTPUT on inlines whose linkage might actually change.
+       (finish_function): Use DECL_DEFER_OUTPUT to decide which inlines to
+       mark for later consideration, rather than DECL_FUNCTION_MEMBER_P.
+
+Fri Aug  5 01:12:20 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (get_class_offset_1, get_class_offset): New routine to
+       find the offset of the class where a virtual function is defined,
+       from the complete type.
+       * class.c (modify_one_vtable, fixup_vtable_deltas): Use
+       get_class_offset instead of virtual_offset as get_class_offset will
+       always provide the right answer.
+       * tree.c (virtual_offset): Remove.  It only ever worked some of the
+       time.
+
+Tue Aug  2 12:44:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Put back unary_complex_lvalue call
+       that I thought was redundant.
+
+       * typeck.c (c_expand_return): Fix a case I missed before.
+
+Sun Jul 31 17:54:02 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (unify): Strip cv-quals from template type arguments (when
+       'const T*' is matched to 'const char*', that does not mean that T is
+       'const char').
+
+Fri Jul 29 01:03:06 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (do_type_instantiation): Instantiate nested TAGS, not
+       typedefs.  Third time's the charm?
+
+       * parse.y (template_parm): Support default template parms.
+       * pt.c (process_template_parm): Likewise.
+       (end_template_parm_list): Likewise.
+       (coerce_template_parms): Likewise.
+       (mangle_class_name_for_template): Likewise.
+       (push_template_decls): Likewise.
+       (unify): Likewise.
+       * method.c (build_overload_identifier): Likewise.
+       * error.c (dump_decl): Likewise.
+
+Wed Jul 27 17:47:00 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (do_type_instantiation): Only instantiate nested *classes*.
+
+Tue Jul 26 13:22:40 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (note_debug_info_needed): Also emit debugging information
+       for the types of fields.
+
+Mon Jul 25 00:34:44 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (lookup_template_class): Pass 'template' to
+       coerce_template_parms instead of 'in_decl', since it's a more
+       meaningful context.
+
+       * typeck.c (c_expand_return): Make sure any cleanups for the return
+       expression get run.
+       (build_c_cast): Use CONVERT_EXPR for conversion to void.
+
+       * pt.c (do_type_instantiation): Also instantiate nested types.
+
+       * typeck.c (convert_for_assignment): Don't die when comparing
+       pointers with different levels of indirection.
+
+       * decl.c (grokdeclarator): The sub-call to grokdeclarator for
+       class-local typedefs sets DECL_ARGUMENTS, so we need to clear it
+       out.
+
+       * decl2.c (finish_anon_union): Don't die if the union has no
+       members.
+
+       * decl.c (grokdeclarator): Undo changes to declspecs when we're done
+       so that 'typedef int foo, bar;' will work.
+
+       * decl2.c (finish_file): Don't call expand_aggr_init for
+       non-aggregates.
+
+Mon Jul 25 00:03:10 1994  Teemu Torma  <tot@trema.fi>
+
+       * decl.c (finish_function): We can't inline constructors and
+       destructors under some conditions with -fpic, but don't unset
+       DECL_INLINE.
+
+Mon Jul 25 00:03:10 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_object_ref): Make sure 'datum' is a valid object.
+
+Sun Jul 24 14:19:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Don't set DECL_FIELD_BITPOS on
+       non-fields.
+       (finish_struct_methods): Use copy_assignment_arg_p.
+
+       * cvt.c (cp_convert): If expr is an OFFSET_REF, resolve it instead
+       of giving an error.
+
+       * typeck.c (build_binary_op_nodefault): Don't set result_type if we
+       don't know how to compare the operands.
+
+       * decl.c (grokdeclarator): Avoid seg fault when someone uses '__op'
+       as a declarator-id in their program.  Like the Linux headers do.
+       Arrgh.
+
+       * tree.c (lvalue_p): Treat calls to functions returning objects by
+       value as lvalues again.
+
+       * typeck.c (build_component_addr): Use convert_force to convert the
+       pointer in case the component type is also a private base class.
+
+       * search.c (get_matching_virtual): Fix bogus warning of overloaded
+       virtual.
+
+       * pt.c (overload_template_name): Set DECL_ARTIFICIAL on the created
+       TYPE_DECL to fix bogus shadowing warnings.
+
+Fri Jul 22 01:15:32 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (expand_aggr_init_1): const and volatile mismatches do not
+       prevent a TARGET_EXPR from initializing an object directly.
+
+Tue Jul 19 17:55:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_up_reference): Allow building up references to
+       `this', don't warn about making references to artificial variables
+       (like `this').
+
+       * tree.c (lvalue_p): `this' is not an lvalue.
+
+       * call.c (build_method_call): Accept using a typedef name (or
+       template type parameter) for explicit destructor calls.
+
+Thu Jul 14 09:42:23 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Version 2.6.0 released.
+
+Wed Jul 13 03:57:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (hack_identifier): Put back old code so lists of
+       non-functions will be handled properly.
+
+       * cp-tree.h (TYPE_NEEDS_CONSTRUCTING): #if 0 out; this macro is now
+       defined in the language-independent tree.h.
+
+       * tree.c (count_functions): Avoid bogus warning when compiling this
+       function.
+
+Mon Jul 11 18:37:20 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_reference_init): Always save the initializer of a
+       reference.
+
+Fri Jul  8 17:41:46 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (cplus_expand_expr_stmt): Wrap statement expressions inside
+       CLEANUP_POINT_EXPRs so that the stack slots can be reused.
+       (disabled for now)
+
+Fri Jul  8 12:59:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (hack_identifier): Fix for new overloading.
+
+       * typeck.c (build_binary_op_nodefault): Don't mess with division by
+       zero.
+
+Fri Jul  8 13:20:28 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * decl2.c (finish_file): Only call walk_sigtables, if
+       flag_handle_signatures is turned on, don't waste time otherwise.
+
+Fri Jul  8 02:27:41 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (push_overloaded_decl): Don't create overloads of one when
+       shadowing a class type.
+       * typeck.c (build_x_function_call): Complain about overloads of one.
+
+       * decl.c (grokdeclarator): Don't try to treat a char* as a tree.
+       (grokdeclarator): Fix setting of TREE_STATIC.
+       (start_decl): Clear DECL_IN_AGGR_P after calling duplicate_decls.
+
+Thu Jul  7 22:20:46 1994  Gerald Baumgartner  <gb@andros.cygnus.com>
+
+       * cp-tree.h (walk_sigtables): Created extern declaration.
+       * decl2.c (walk_sigtables): Created function, patterned after
+       walk_vtables, even though we only need it to write out sigtables.
+       (finish_sigtable_vardecl): Created function.
+       (finish_vtable_vardecl): Changed 0 to NULL_PTR.
+       (finish_file): Call walk_sigtables.
+
+       * sig.c (build_signature_table_constructor): Mark class member
+       function pointed to from signature table entry as addressable.
+
+Thu Jul  7 13:39:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_decl): Check new decl of static member variable
+       against the declaration in the class here.
+       (grokvardecl): Instead of here.
+
+       * class.c (prepare_fresh_vtable): Call import_export_vtable if not
+       -fvtable-thunks.
+       (build_vtable): Likewise.
+
+       * decl2.c (import_export_vtable): Move logic for deciding the
+       interface of a template class from here.
+       (import_export_template): To here.
+       (finish_vtable_vardecl): Call import_export_template before
+       import_export_vtable.
+
+Wed Jul  6 20:25:48 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c (init_exception_processing): Setup interim_eh_hook to
+       call lang_interim_eh. 
+       * except.c (do_unwind): Propagate throw object value across
+       stack unwinding.
+       * except.c (saved_throw_value): Used to hold the value of the object
+       being thrown.  It is always a reference to the real value.
+       * except.c (expand_start_catch_block): Add handling for the
+       value of the exception object.
+       * except.c (expand_start_catch_block): Add handler for the handler,
+       so that throws inside the handler go to the outer block.
+       * except.c (expand_end_catch_block): Likewise.
+       * parse.y (handler_args): Use parm instead, as the other doesn't yet
+       handle references correctly.
+
+Wed Jul  6 17:55:32 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl2.c (mark_vtable_entries):  If -ftable-thunks, set the
+       vtable entry properly to abort.
+
+Tue Jul  5 14:07:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Downgrade division by zero
+       errors to warnings.
+
+       * call.c (build_overload_call_real): Handle fnname being a list of
+       functions.
+       * typeck.c (build_x_function_call): Pass list of functions to
+       build_overload_call, not just the name.
+       * tree.c (count_functions): Complain when called for invalid
+       argument.
+
+       * decl.c (grokdeclarator): Fix settings of TREE_STATIC, TREE_PUBLIC
+       and DECL_EXTERNAL on static members and initialized const members.
+       * decl2.c (grokfield): Reflect this change.
+
+Fri Jul  1 09:35:51 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (init): ANSI C++ does not forbid { }.
+
+Thu Jun 30 00:35:22 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (lang_decode_option): Set warn_nonvdtor along with -Wall.
+       warn_nonvdtor defaults to off.
+
+       * class.c (instantiate_type): Use comptypes rather than relying on 
+       types to satisfy ==.
+
+       * decl.c (start_function): Set DECL_DEFER_OUTPUT on all inlines that
+       might be static.
+
+       * tree.c (build_cplus_new): Never build WITH_CLEANUP_EXPRs.
+
+       * decl.c (grok_reference_init): Deal with ADDR_EXPRs of TARGET_EXPRs.
+
+       * cvt.c (cp_convert): Pass 0 to with_cleanup_p arg of
+       build_cplus_new.
+
+Wed Jun 29 22:31:09 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (finish_file): Maybe consider static inlines multiple
+       times, in case they reference each other.
+
+Tue Jun 28 11:58:38 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * class.c (finish_struct): Don't `cons_up_default_function's
+       for signatures.
+       (finish_struct): Handle an empty method_vec correctly.
+
+       * decl.c (grokdeclarator): Don't warn about a signature being
+       empty in a signature pointer declaration if we only saw a
+       forward declaration of the signature.  Changed `warning's into
+       `cp_warning's.
+
+       * sig.c (build_sigtable): Don't die if a null signature table
+       constructor is returned.
+       (build_signature_pointer_constructor): If the signature table
+       constructor is null, the _sptr field is set to a null pointer
+       and cast to the appropriate type.  Make copies of all null
+       pointers so that the type null_pointer_node doesn't get changed.
+       (build_signature_table_constructor): Added comments.
+
+       * sig.c (build_signature_pointer_constructor): Complain if we
+       try to assign to/initialize a signature pointer/reference of
+       an undefined signature.
+
+Mon Jun 27 14:05:16 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * typeck2.c (store_init_value): Don't be pedantic about
+       non-constant initializers of signature tables/pointers/references.
+
+Fri Jun 24 16:49:41 1994  Gerald Baumgartner  <gb@cs.purdue.edu>
+
+       * decl.c (grokdeclarator): If we are grokking an opaque typedef
+       in a signature, don't complain about it begin static.
+
+Wed Jun 29 16:44:45 1994  Mike Stump  <mrs@cygnus.com>
+
+       Fixes a problem of the this pointer being wrong in virtual calls to
+       methods that are not overridden in more derived classes.
+
+       * class.c (fixup_vtable_delta): New routine.  It will fixup the
+       delta entries in vtables, wheever they need updating.
+       * class.c (finish_struct): Call the new routine for all virtual
+       bases, as they can have different offsets, than those used in base
+       classes that we derive our vtable from.
+
+Tue Jun 28 23:49:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_binary_op): Use the types before default
+       conversions in the error message.
+
+       * *.c: Use c_build_type_variant instead of build_type_variant where
+       the type might be an array.
+
+       * call.c (build_method_call): Call build_type_variant and
+       build_reference_type in the right order.
+       * decl.c (record_builtin_type): Likewise.
+
+Wed Jun 29 16:58:53 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Call build_type_variant and
+       build_reference_type in the right order.
+       * decl.c (record_builtin_type): Likewise.
+
+Tue Jun 28 23:49:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_binary_op): Use the types before default
+       conversions in the error message.
+
+       * *.c: Use c_build_type_variant instead of build_type_variant where
+       the type might be an array.
+
+Sat Jun 25 11:50:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): Try UDC's before doing the
+       reinterpret_cast thang, though.
+
+Fri Jun 24 01:24:01 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (c_expand_return): Don't USE the return value location
+       after we've expanded the jump.
+
+       * decl2.c (finish_file): Make sure DECL_SAVED_INSNS is not 0 before
+       trying to write out an inline.
+
+       * cvt.c (build_up_reference): Also do address adjustment when the
+       target type uses MI.
+       (convert_to_reference): Try UDCs only after built-in conversions.
+       (build_type_conversion_1): Don't play games with the argument to the
+       method.
+       (build_type_conversion): #if 0 out code for binding to reference.
+
+Thu Jun 23 00:22:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (finish_file): Use TREE_SYMBOL_REFERENCED to decide
+       whether to emit inlines.
+
+       * decl.c (grokdeclarator): Set explicit_int for decls that just
+       specify, say, 'long'.
+
+       * init.c (do_friend): Do overload C functions (or call pushdecl,
+       anyaway).
+
+Wed Jun 22 13:40:49 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_up_reference): Don't call readonly_error.
+       (convert_to_reference): Propagate const and volatile from expr to
+       its type.
+
+       * tree.c (lvalue_p): Random CALL_EXPRs are not lvalues.
+
+       * cvt.c (build_up_reference): Break out WITH_CLEANUP_EXPR when
+       creating a temporary.
+       (convert_to_reference): Lose excessive and incorrect trickiness.
+       (cp_convert): Call build_cplus_new with with_cleanup_p set.
+
+       * typeck2.c (build_functional_cast): Likewise.
+
+Tue Jun 21 17:38:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): signed, unsigned, long and short all
+       imply 'int'.
+
+       * decl.c (grokdeclarator): Allow "this is a type" syntax.
+       (grok_reference_init): Simplify and fix.
+
+Sun Jun 19 17:08:48 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): pedwarn about a typedef that specifies no
+       type.
+
+Sat Jun 18 04:16:50 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_function): Move TREE_PUBLIC and DECL_EXTERNAL
+       tinkering to after call to pushdecl.
+
+Fri Jun 17 14:48:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Handle destructors for non-aggregate
+       types properly.
+
+Thu Jun 16 16:48:05 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Make sure that the name given for the
+       destructor matches the constructor_name of the instance.
+
+       * pt.c (do_function_instantiation): A non-extern instantiation
+       overrides a later extern one.
+       (do_type_instantiation): Likewise.
+
+Wed Jun 15 19:34:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (expand_aggr_init): Use TYPE_MAIN_VARIANT to get the
+       unqualified array type.
+
+       * cp-tree.h (EMPTY_CONSTRUCTOR_P): Tests whether NODE is a
+       CONSTRUCTOR with no elements.
+
+       * decl.c (various): Lose empty_init_node.
+       (finish_decl): Use EMPTY_CONSTRUCTOR_P, do the empty CONSTRUCTOR
+       thing depending on the value of DECL_COMMON instead of
+       flag_conserve_space, do the empty CONSTRUCTOR thing for types that
+       don't have constructors, don't treat a real empty CONSTRUCTOR
+       specially.
+
+       * typeck2.c (process_init_constructor): Don't treat empty_init_node
+       specially.
+
+Wed Jun 15 19:05:25 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (override_one_vtable): Don't forget to merge in an old
+       overrider when we wanted to reuse a vtable, but couldn't.
+
+Wed Jun 15 15:03:16 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_decl): Put statics in common again.
+
+       * decl.c (grokdeclarator): Return NULL_TREE for an error rather than
+       setting the type to error_mark_node.
+
+       * typeck.c (build_modify_expr): Build up a COMPOUND_EXPR for enum
+       bitfield assignments.
+
+Tue Jun 14 12:23:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_op_properties): Const objects can be passed by value.
+
+Mon Jun 13 03:10:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (import_export_vtable): Force implicit instantiations to
+       be interface_only when -fno-implicit-templates.
+
+       * decl.c (duplicate_decls): Redeclaring a class template name is an
+       error.
+
+       * pt.c (end_template_decl): Call GNU_xref_decl for class templates.
+       * xref.c (GNU_xref_decl): Support templates.
+
+Sat Jun 11 17:09:05 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_op_properties): Split out checking for whether this
+       function should suppress the default assignment operator.
+       * decl2.c (grok_function_init): Likewise.
+       (copy_assignment_arg_p): New function do do just that.
+       Now considers virtual assignment operators that take a base as an
+       argument to count as copy assignment operators.
+
+       * search.c (dfs_debug_mark): Lose checks for DWARF_DEBUG and
+       TREE_ASM_WRITTEN, as they are redundant.
+
+       * pt.c (end_template_decl): Don't try to set DECL_CLASS_CONTEXT on a
+       decl that has no LANG_SPECIFIC part.
+       (do_type_instantiation): Force the debugging information for this
+       type to be emitted.
+
+       * decl.c (start_decl): Clear up uses of various types of templates
+       (say sorry for static data members, rather than "invalid template"). 
+       (expand_static_init): Fix initialization of static data members of
+       template classes.
+
+Fri Jun 10 00:41:19 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Set DECL_CONTEXT on static data members.
+
+       * g++.c (main): Use -xc++-cpp-output for .i files.
+
+       * pt.c (tsubst): Give meaningful error about declaring template for
+       a copy constructor which was not declared in the class template.
+       (do_type_instantiation): Explicit instantiation before the class
+       template is an error.
+       (instantiate_template): Don't die if tsubst returns error_mark_node.
+
+Thu Jun  9 19:04:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Don't synthesize the copy assignment operator if the one in a base
+       class is pure virtual.
+       * cp-tree.h (TYPE_HAS_ABSTRACT_ASSIGN_REF): New macro to indicate
+       whether the type has a pure virtual copy assignment operator.
+       * class.c (finish_base_struct): Don't generate the copy assignment
+       operator if a base class has a pure virtual one.
+       * decl.c (grok_op_properties): Add disabled code to set
+       TYPE_HAS_ABSTRACT_ASSIGN_REF with comment pointing to where it is
+       actually set.
+       * decl2.c (grok_function_init): Set TYPE_HAS_ABSTRACT_ASSIGN_REF.
+
+       * decl2.c (import_export_vtable): Always treat template
+       instantiations as if write_virtuals >= 2, and treat implicit
+       instantiations as external if -fno-implicit-templates.
+       (finish_file): Output all pending inlines if
+       flag_keep_inline_functions.
+
+Wed Jun  8 20:48:02 1994  Mike Stump  <mrs@cygnus.com>
+
+       * tree.c (layout_vbasetypes): Align virtual base classes inside
+       complete objects, so that we don't core dump on machines such as
+       SPARCs when we access members that require larger than normal
+       alignments, such as a double.  Also, we bump up the total alignment
+       on the complete type, as necessary.
+
+Wed Jun  8 16:18:14 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * gxxint.texi (Free Store): New section with code for examining
+       cookie.
+       (Limitations of g++): Remove operator delete entry, since it is no
+       longer accurate.  Fix access control entry.
+
+       * typeck.c (build_unary_op): Pedwarn about taking the address of or
+       incrementing a cast to non-reference type.
+       (build_modify_expr): Use convert instead of convert_force again.
+
+       * search.c (get_base_distance): Use IS_AGGR_TYPE_CODE to check for
+       class type, not == RECORD_TYPE.
+
+       * decl.c (grokdeclarator): Cope with grokfndecl returning NULL_TREE.
+
+       * typeck2.c (report_case_error): #if 0 out.
+       * lex.c (real_yylex): Lose RANGE.
+       * parse.y: Likewise.
+
+Tue Jun  7 18:17:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (simple_stmt, case ranges): Use ELLIPSIS instead of RANGE.
+
+Mon Jun  6 19:39:57 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_c_cast): Don't shortcut conversions to the same
+       type.  Don't replace consts with their values here, since that's now
+       done in cp_convert.
+
+       * cvt.c (cp_convert): When converting to bool, take
+       integer_zero_node to false_node and all other INTEGER_CSTs to
+       true_node.
+       (build_type_conversion): Don't complain about multiple conversions
+       to float if we're not really converting.
+
+Fri Jun  3 02:10:56 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Implement 'extern template class A<int>;' syntax for suppressing
+       specific implicit instantiations.
+       * cp-tree.h: Update prototypes for do_*_instantiation.
+       * pt.c (do_pending_expansions): Don't compile 'extern' explicit
+       instantiations.
+       (do_function_instantiation): Set DECL_EXTERNAL on 'extern' explicit
+       instantiations.
+       (do_type_instantiation): Likewise.
+       * parse.y (explicit_instantiation): Support 'extern template class
+       A<int>;' syntax.
+       * decl.c (start_function): Don't modify the settings of TREE_PUBLIC
+       and DECL_EXTERNAL on explicit instantiations.
+
+       * cvt.c (cp_convert): Replace constants with their values before
+       converting.
+       (cp_convert): Consistently use 'e' instead of 'expr'.
+
+Thu Jun  2 03:53:30 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck2.c (build_x_arrow): Resolve OFFSET_REFs first.
+
+Wed Jun  1 18:57:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck2.c (digest_init): Handle initializing a pmf with an
+       overloaded method.
+       * typeck.c (build_ptrmemfunc): Handle overloaded methods.
+
+       * decl.c (pushtag): Use build_decl to make TYPE_DECLs.
+       (xref_defn_tag): Likewise.
+       * pt.c (process_template_parm): Likewise.
+       (lookup_template_class): Likewise.
+       (push_template_decls): Likewise.
+       (instantiate_class_template): Likewise.
+       (create_nested_upt): Likewise.
+       * class.c (finish_struct): Don't try to set DECL_CLASS_CONTEXT on
+       TYPE_DECLs.
+
+       * typeck.c (convert_arguments): Make sure type is not NULL before
+       checking its TREE_CODE.
+
+Wed Jun  1 17:40:39 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (get_derived_offset): New routine.
+       * class.c (finish_base_struct): Make sure we set BINFO_VTABLE and
+       BINFO_VIRTUALS when we choose a new base class to inherit from.
+       * class.c (modify_one_vtable): Use get_derived_offset to get the
+       offset to the most base class subobject that we derived this binfo
+       from.
+       * class.c (finish_struct): Move code to calculate the
+       DECL_FIELD_BITPOS of the vfield up, as we need might need it for
+       new calls to get_derived_offset in modify_one_vtable.
+
+Wed Jun  1 16:50:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_member_call): Use build_pointer_type instead of
+       TYPE_POINTER_TO.
+
+Wed Jun  1 11:11:15 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (grokdeclarator): Make sure we have a DNAME set before we
+       try to use it in an error.
+
+Wed Jun  1 09:48:49 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (convert_arguments, convert_for_initialization): Don't
+       strip NOP_EXPRs, when we are converting to a reference.
+
+Wed Jun  1 01:11:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_modify_expr): Don't dereference references when
+       initializing them.
+
+       * decl2.c (grokfield): Don't check for grokdeclarator returning
+       error_mark_node any more.
+
+       * decl.c (grokfndecl): Return NULL_TREE instead of error_mark_node.
+       (start_method): Return void_type_node instead of error_mark_node.
+
+       * typeck.c (build_modify_expr): Resolve offset refs earlier.
+
+Tue May 31 16:06:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Resolve OFFSET_REFs in the object.
+
+       * typeck.c (build_modify_expr): Dereference references before trying
+       to assign to them.
+
+       * call.c (build_method_call): Don't confuse type conversion
+       operators with constructors.
+       * typeck2.c (build_functional_cast): Just call build_c_cast if there
+       was only one parameter.
+       * method.c (build_typename_overload): Don't set
+       IDENTIFIER_GLOBAL_VALUE on these identifiers.
+       * decl.c (grok_op_properties): Warn about defining a type conversion
+       operator that converts to a base class (or reference to it).
+       * cvt.c (cp_convert): Don't try to use a type conversion operator
+       when converting to a base class.
+       (build_type_conversion_1): Don't call constructor_name_full on an
+       identifier.
+       * cp-tree.h (DERIVED_FROM_P): Should be self-explanatory.
+
+       * decl.c (start_decl): Don't complain that error_mark_node is an
+       incomplete type.
+       (finish_decl): Check for type == error_mark_node.
+
+Mon May 30 23:38:55 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_function): Set DECL_DEFER_OUTPUT on implicit
+       instantiations and inline members.
+
+       * spew.c (yylex): Set looking_for_template if the next token is a '<'.
+
+       * lex.h: Declare looking_for_template.
+
+       * decl.c (lookup_name_real): Use looking_for_template to arbitrate
+       between type and template interpretations of an identifier.
+
+Sat May 28 04:07:40 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (instantiate_template): Zero out p if we found a
+       specialization.
+
+       * decl.c (grokdeclarator): Elucidate warning.
+       (grokdeclarator): If pedantic AND -ansi, complain about long long.
+
+       Make explicit instantiation work reasonably.  It is now appropriate
+       to deprecate the use of -fexternal-templates.
+       * pt.c (instantiate_template): Set DECL_TEMPLATE_SPECIALIZATION or
+       DECL_IMPLICIT_INSTANTIATION on fndecl as appropriate.
+       (end_template_instantiation): Reflect changes in USE_TEMPLATE
+       semantics.
+       (do_pending_expansions): if (!flag_implicit_templates) DECIDE(0);
+       (do_function_instantiation): Don't set EXPLICIT_INST if
+       flag_external_templates is set.  Do set TREE_PUBLIC and DECL_EXTERN
+       appropriately otherwise.
+       (do_type_instantiation): Set interface info for class.  Set
+       TREE_PUBLIC and DECL_EXTERN for methods.  Do none of this if
+       flag_external_templates is set.
+       * parse.y: Reflect changes in USE_TEMPLATE semantics.
+       * decl2.c: New flag flag_implicit_templates determines whether or
+       not implicit instantiations get emitted.  This flag currently
+       defaults to true, and must be true for -fexternal-templates to work.
+       (finish_file): Consider flag_implement_inlines when
+       setting DECL_EXTERNAL.  Consider flag_implicit_templates when
+       deciding whether or not to emit a static copy.
+       * decl.c (start_function): Set TREE_PUBLIC and DECL_EXTERNAL
+       properly for template instantiations.
+       (start_method): Set DECL_IMPLICIT_INSTANTIATION on methods of a
+       template class.
+       * cp-tree.h (CLASSTYPE_USE_TEMPLATE): Change semantics.
+       (DECL_USE_TEMPLATE): Parallel macro for FUNCTION and VAR_DECLs.
+       (various others): Accessor macros for the above.
+
+Fri May 27 13:57:40 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Division by constant zero is
+       an error.
+
+Fri May 27 13:50:15 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (override_one_vtable): Don't modify things we don't own.
+
+Fri May 27 01:42:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (finish_decl): Don't postpone processing the initializer of
+       a decl with DECL_EXTERNAL set, and do call rest_of_compilation for a
+       PUBLIC const at toplevel.
+       (grokdeclarator): pedwarn about initializing non-const or
+       non-integral statics in the class body.
+
+       * decl.c (pushtag): Don't try to set DECL_CLASS_CONTEXT on a
+       TYPE_DECL.
+
+       * call.c (convert_harshness): Dereference reference on rhs before
+       proceeding, properly grok passing const things to non-const
+       references.
+
+       * typeck.c (build_unary_op): Soften error about taking the address
+       of main() to a pedwarn.
+
+       * lex.c (default_copy_constructor_body): Unambiguously specify base
+       classes (i.e. A((const class ::A&)_ctor_arg) ).
+       (default_assign_ref_body): Likewise.
+
+Thu May 26 13:13:55 1994  Gerald Baumgartner  <gb@mexican.cygnus.com>
+
+       * decl2.c (grokfield): Don't complain about local signature
+       method declaration without definition.
+
+       * call.c (convert_harshness): If `type' is a signature pointer
+       and `parmtype' is a pointer to a signature, just return 0.  We
+       don't really convert in this case; it's a result of making the
+       `this' parameter of a signature method a signature pointer.
+
+       * call.c (build_method_call): Distinguish calling the default copy
+       constructor of a signature pointer/reference from a signature
+       member function call.
+
+Thu May 26 12:56:25 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (grokfield): Don't set TREE_PUBLIC on member function
+       declarations.
+
+       * decl.c (duplicate_decls): A previous function declaration as
+       static overrides a subsequent non-static definition.
+       (grokdeclarator): Don't set TREE_PUBLIC on inline method
+       declarations.
+
+Wed May 25 14:36:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Handle initialization of static const
+       members.
+       (finish_decl): Likewise.
+
+       * decl2.c (grokfield): Allow initialization of static const members
+       even when pedantic.
+
+       * decl2.c (grokfield): Deal with grokdeclarator returning
+       error_mark_node.
+
+       * decl.c (grok_ctor_properties): Return 0 for A(A) constructor.
+       (grokfndecl): Check the return value of grok_ctor_properties.
+       (start_method): Likewise.
+
+       * parse.y (absdcl): Expand type_quals inline.
+
+Tue May 24 19:10:32 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (pushtag): Use IS_AGGR_TYPE rather than checking for a
+       RECORD_TYPE.
+
+Tue May 24 18:09:16 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * cp-tree.h (VTABLE_NAME_FORMAT):  If flag_vtable_thunks,
+       always use "__vt_%s".
+       * decl2.c (finish_vtable_vardecl):  Don't consider abstract virtuals
+       when looking for a "sentinal" method (to decide on emitting vtables).
+       * decl2.c (finish_file):  Scan all decls for thunks that need
+       to be emitted.
+       * decl2.c (finish_vtable_vardecl):  Don't bother calling emit_thunk.
+       * method.c (make_thunk):  Use a more meaningful label.  If there
+       exists a matching top-level THUNK_DECL re-use it;  otherwise
+       create a new THUNK_DECL (and declare it).
+       * method.c (emit_thunk):  Make thunk external/public depending
+       on the underlying method.
+
+Tue May 24 00:22:04 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (tsubst): Use lookup_name_nonclass to find guiding decls, not
+       lookup_name.
+
+       * call.c (build_overload_call_real): Don't immediately pick a
+       function which matches perfectly.
+
+       * decl.c (grokdeclarator): Use c_build_type_variant for arrays.
+       (grokdeclarator): Warn about, and throw away, cv-quals attached to a
+       reference (like 'int &const j').
+
+       * typeck.c (convert_arguments): Don't mess with i for methods.
+       * call.c (build_method_call): Pass the function decl to
+       convert_arguments.
+
+       * typeck.c (comp_ptr_ttypes_real): New function.  Implements the
+       checking for which multi-level pointer conversions are allowed.
+       (comp_target_types): Call it.
+       (convert_for_assignment): Check const parity on the ultimate target
+       type, too.  And make those warnings pedwarns.
+
+Mon May 23 14:11:24 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_char): Use TARGET_* for character constants.
+
+Mon May 23 13:03:03 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * tree.c (debug_no_list_hash): Make static.
+
+       * decl.c (decls_match): Say the types don't match if newdecl ends up
+       with a null type, after we've checked if olddecl does.
+       (pushdecl): Check if the decls themselves match before looking for
+       an extern redeclared as static, to avoid inappropriate and incorrect
+       warnings.
+
+Fri May 20 14:04:34 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Make warning about duplicate short, etc.
+       a pedwarn.
+
+       * typeck.c (build_c_cast): Casting to function or method type is an
+       error.
+
+       * class.c (finish_struct): Make warning for anonymous class with no
+       instances a pedwarn.
+
+       * Makefile.in (stamp-parse): Expect a s/r conflict.
+
+       * typeck.c (build_modify_expr): pedwarn about using a non-lvalue
+       cast as an lvalue.
+
+Thu May 19 12:08:48 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (type_promotes_to): Make sure bool promotes to int rather
+       than unsigned on platforms where sizeof(char)==sizeof(int).
+
+Wed May 18 14:27:06 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_c_cast): Tack on a NOP_EXPR when casting to
+       another variant.
+       (build_modify_expr): Don't strip NOP_EXPRs, and don't get tricky
+       and treat them as lvalues.
+
+       * decl.c (shadow_tag): Do complain about forward declarations of
+       enums and empty declarations.
+       * parse.y: Don't complain about forward declarations of enums and
+       empty declarations.
+
+       * typeck.c (convert_for_assignment): Complain about changing
+       the signedness of a pointer's target type.
+
+       * parse.y (stmt): Move duplicated code for checking case values from
+       here.
+       * decl2.c (check_cp_case_value): To here.  And add a call to
+       constant_expression_warning.
+
+       * typeck.c (convert_for_assignment): Don't complain about assigning
+       a negative value to bool.
+
+       * decl.c (init_decl_processing): Make bool unsigned.
+
+       * class.c (finish_struct): Allow bool bitfields.
+
+Wed May 18 12:35:27 1994  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>
+
+       * Make-lang.in (c++.install-man): Get g++.1 from $(srcdir)/cp.
+
+Wed May 18 03:28:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_type_conversion): Lose special handling of
+       truthvalues.
+
+       * search.c (dfs_pushdecls): Improve shadowing warning.
+
+Tue May 17 13:34:46 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_delete): Throw away const and volatile on `this'.
+
+       * decl.c (finish_enum): Put the constants in TYPE_VALUES again,
+       rather than the enumerators.
+       (pushtag): s/cdecl/c_decl/g
+
+Mon May 16 23:04:01 1994  Stephen R. van den Berg  <berg@pool.informatik.rwth-aachen.de>
+
+       * cp/typeck.c (common_type): Attribute merging.
+       (comp_types): Utilise COMP_TYPE_ATTRIBUTES macro.
+
+       * cp/parse.y: Revamp attribute parsing.
+
+Mon May 16 01:40:34 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (shadow_tag): Also check for inappropriate use of auto and
+       register.
+
+       * method.c (build_overload_name): Clarify that the illegal case is a
+       pointer or reference to array of unknown bound.
+
+       * error.c (dump_type_prefix): Print references to arrays properly.
+
+       * typeck.c (various): Be more helpful in pointer
+       comparison diagnostics.
+
+       * tree.c (lvalue_p): MODIFY_EXPRs are lvalues again.  Isn't this
+       fun?
+
+       * parse.y: Also catch an error after valid stmts.
+
+       * search.c (dfs_init_vbase_pointers): Don't abort because `this' is
+       const.
+
+       * typeck.c (convert_for_initialization): If call to
+       convert_to_reference generated a diagnostic, print out the parm
+       number and function decl if any.
+
+       * errfn.c (cp_thing): Check atarg1 to determine whether or not we're
+       specifying a line, not atarg.
+
+       * tree.c (build_cplus_method_type): Always make `this' const.
+
+       * decl2.c (grokclassfn): If -fthis-is-variable and this function is
+       a constructor or destructor, make `this' non-const.
+
+       * typeck.c (build_modify_expr): Don't warn specially about
+       assignment to `this' here anymore, since it will be caught by the
+       usual machinery.
+
+       * various: Disallow specific GNU extensions (variable-size arrays,
+       etc.) when flag_ansi is set, not necessarily when pedantic is set,
+       so that people can compile with -pedantic-errors for tighter const
+       checking and such without losing desirable extensions.
+
+       * typeck2.c (build_functional_cast): Call build_method_call with
+       LOOKUP_PROTECT.
+       (process_init_constructor): Only process FIELD_DECLs.
+
+       * decl.c (finish_decl): Also force static consts with no explicit
+       initializer that need constructing into the data segment.
+
+       * init.c (build_delete): Undo last patch, as it interferes with
+       automatic cleanups.
+
+Sat May 14 01:59:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c, class.h, cp-tree.h, cvt.c, decl2.c: Lose old overloading
+       code.
+
+       * init.c (build_delete): pedwarn about using plain delete to delete
+       an array.
+
+Fri May 13 16:45:07 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (comp_target_types): Be more helpful in contravariance
+       warnings, and make them pedwarns.
+
+       * decl.c (grokdeclarator): Use decl_context to decide whether or not
+       this is an access declaration.
+
+       * class.c (finish_struct_bits): Set TYPE_HAS_INT_CONVERSION if it
+       has a conversion to enum or bool, too.
+
+Fri May 13 16:31:27 1994  Mike Stump  <mrs@cygnus.com>
+
+       * method.c (emit_thunk):  Make declaration for
+       current_call_is_indirect local (needed for hppa).
+
+Fri May 13 16:16:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (uses_template_parms): Grok BOOLEAN_TYPE.
+       (tsubst): Likewise.
+
+Fri May 13 16:23:32 1994  Mike Stump  <mrs@cygnus.com>
+
+       * pt.c (tsubst): If there is already a function for this expansion,
+       use it.
+       * pt.c (instantiate_template): Likewise.
+
+Fri May 13 10:30:42 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * parse.y (implicitly_scoped_stmt, simple_stmt case): Use
+       kept_level_p for MARK_ENDS argument to expand_end_bindings, to avoid
+       generating debug info for unemitted symbols on some systems.
+
+       * cp-tree.h (build_static_cast, build_reinterpret_cast,
+       build_const_cast): Add declarations.
+
+Fri May 13 09:50:31 1994  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (expand_indirect_vtbls_init): Fix breakage from Apr 27
+       fix.  We now try get_binfo, and if that doesn't find what we want,
+       we go back to the old method, which still sometimes fails.
+
+Fri May 13 01:43:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (initdcl): Call cplus_decl_attributes on the right
+       variable.
+       * decl2.c (cplus_decl_attributes): Don't call decl_attributes for
+       void_type_node.
+
+       * typeck.c (build_binary_op_nodefault): Change result_type for
+       comparison ops to bool.
+       (build_binary_op): Convert args of && and || to bool.
+       * cvt.c (build_default_binary_type_conversion): Convert args of &&
+       and || to bool.
+       (build_default_unary_type_conversion): Convert arg of ! to bool.
+       (type_promotes_to): bool promotes to int.
+
+Fri May 13 01:43:18 1994  Mike Stump  <mrs@cygnus.com>
+
+       Implement the new builtin `bool' type.
+       * typeck.c (build_binary_op_nodefault): Convert args of && and || to
+       bool.
+       (build_unary_op): Convert arg of ! to bool.
+       * parse.y: Know true and false.  Use bool_truthvalue_conversion.
+       * method.c (build_overload_value): Know bool.
+       (build_overload_name): Likewise.
+       * lex.c (init_lex): Set up RID_BOOL.
+       * gxx.gperf: Add bool, true, false.
+       * error.c (*): Know bool.
+       * decl.c (init_decl_processing): Set up bool, true, false.
+       * cvt.c (cp_convert): Handle conversion to bool.
+       (build_type_conversion): Likewise.
+       * *.c: Accept bool where integers and enums are accepted (use
+       INTEGRAL_CODE_P macro).
+
+Thu May 12 19:13:54 1994  Richard Earnshaw  <rwe11@cl.cam.ac.uk>
+
+       * g++.c: Use #ifdef for __MSDOS__, not #if.
+
+Thu May 12 18:05:18 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl2.c (lang_f_options): Handle -fshort-temps.  -fshort-temps
+       gives old behavior , and destroys temporaries earlier.  Default
+       behavior now conforms to the ANSI working paper.
+
+Thu May 12 14:45:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_modify_expr): Understand MODIFY_EXPR as an lvalue.
+       Use convert_force to convert the result of a recursive call when we
+       are dealing with a NOP_EXPR.  Don't automatically wrap MODIFY_EXPRs
+       in COMPOUND_EXPRs any more.
+       (various): Lose pedantic_lvalue_warning.
+       (unary_complex_lvalue): Understand MODIFY_EXPR.
+
+       * cvt.c (convert_to_reference): Allow DECL to be error_mark_node if
+       we don't know what we're initializing.
+
+Wed May 11 01:59:36 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): Modify to use convtype parameter.
+       Only create temporaries when initializing a reference, not when
+       casting.
+       (cp_convert): New main function.
+       (convert): Call cp_convert.
+       * cvt.c, decl.c, typeck.c: Fix calls to convert_to_reference.
+       * cp-tree.h (CONV_*): New constants used by conversion code for
+       selecting conversions to perform.
+
+       * tree.c (lvalue_p): MODIFY_EXPRs are no longer lvalues.
+
+       * typeck.c (build_{static,reinterpret,const_cast): Stubs that just
+       call build_c_cast.
+       * parse.y: Add {static,reinterpret,const}_cast.
+       * gxx.gperf: Likewise.
+
+       * typeck.c (common_type): Allow methods with basetypes of different
+       UPTs.
+       (comptypes): Deal with UPTs.
+       (build_modify_expr): Wrap all MODIFY_EXPRs in a COMPOUND_EXPR.
+
+       * pt.c (end_template_decl): Check for multiple definitions of member
+       templates.
+
+       * call.c (build_method_call): Complain about calling an abstract
+       virtual from a constructor.
+
+       * typeck.c (pointer_int_sum): Check for the integer operand being 0
+       after checking the validity of the pointer operand.
+
+       * typeck2.c (digest_init): Pedwarn about string initializer being
+       too long.
+
+Tue May 10 12:10:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (push_overloaded_decl): Only throw away a builtin if the
+       decl in question is the artificial one.
+
+       * parse.y (simple_stmt, switch): Use implicitly_scoped_stmt because
+       expand_{start,end}_case cannot happen in the middle of a block.
+
+       * cvt.c (build_type_conversion_1): Use convert again.
+
+Tue May 10 11:52:04 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * typeck2.c (digest_init): Make sure we check for signed and
+       unsigned chars as well when warning about string initializers.
+
+       * init.c (emit_base_init): Check if there's a DECL_NAME on the
+       member before trying to do an initialization for it.
+
+Tue May 10 11:34:37 1994  Mike Stump  <mrs@cygnus.com>
+
+       * except.c: Don't do anything useful when cross compiling.
+
+Tue May 10 03:04:13 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (duplicate_decls): Fix up handling of builtins yet again.
+       (push_overloaded_decl): Likewise.
+
+       * cvt.c (convert): Don't look for void type conversion.
+
+Mon May  9 18:05:41 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (do_friend): Only do a pushdecl for friends, not
+       pushdecl_top_level.
+
+Mon May  9 13:36:34 1994  Jim Wilson  <wilson@sphagnum.cygnus.com>
+
+       * decl.c (lookup_name_current_level): Put empty statement after
+       the label OUT to make the code valid C.
+
+Mon May  9 12:20:57 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_binary_op_nodefault): Only complain about
+       comparing void * and a function pointer if void * is smaller.
+
+Sun May  8 01:29:13 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (lookup_name_current_level): Move through temporary binding
+       levels.
+
+       * parse.y (already_scoped_stmt): Revive.
+       (simple_stmt): Use it again.
+
+       * decl.c (poplevel): Always call poplevel recursively if we're
+       dealing with a temporary binding level.
+
+Sat May  7 10:52:28 1994  Mike Stump  <mrs@cygnus.com>
+
+       * decl.c (finish_decl): Make sure we run cleanups for initial values
+       of decls.  Cures memory leak.
+       * decl.c (expand_static_init): Likewise for static variables.
+       * decl2.c (finish_file): Likewise for globals.
+
+Sat May  7 03:57:44 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (commonparms): Don't complain about redefining default
+       args.
+
+       * decl.c (duplicate_decls): Don't complain twice about conflicting
+       function decls.
+       (decls_match): Don't look at default args.
+       (redeclaration_error_message): Complain about redefining default
+       args.
+
+       * call.c (build_overload_call_real): Also deal with guiding
+       declarations coming BEFORE the template decl.
+
+       * pt.c (unify): Allow different parms to have different
+       cv-qualifiers.
+       (unify): Allow trivial conversions on non-template parms.
+
+Fri May  6 03:53:23 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (tsubst): Support OFFSET_TYPEs.
+       (unify): Likewise.
+
+       * decl2.c (finish_decl_parsing): Call push_nested_class with a type.
+
+       * init.c (build_offset_ref): Fix error message.
+       * search.c (lookup_field): Likewise.
+
+       * call.c (build_scoped_method_call): Pass binfo to
+       build_method_call.
+       * typeck.c (build_object_ref): Likewise.
+
+       * typeck2.c (binfo_or_else): Don't return a _TYPE.
+
+       * class.c (finish_struct): Don't complain about re-use of inherited
+       names or shadowing of type decls.
+       * decl.c (pushdecl_class_level): Likewise.
+
+       * decl.c (finish_enum): Set the type of all the enums.
+
+       * class.c (finish_struct): Don't get confused by access decls.
+
+       * cp-tree.h (TYPE_MAIN_DECL): New macro to get the _DECL for a
+       _TYPE.  You can stop using TYPE_NAME for that now.
+
+       * parse.y: Lose doing_explicit (check $0 instead).
+       * gxx.gperf: 'template' now has a RID.
+       * lex.h (rid): Likewise.
+       * lex.c (init_lex): Set up the RID for 'template'.
+
+       * parse.y (type_specifier_seq): typed_typespecs or
+       nonempty_type_quals.  Use it.
+       (handler_args): Fix bogus syntax.
+       (raise_identifier{,s}, optional_identifier): Lose.
+       * except.c (expand_start_catch_block): Use grokdeclarator to parse
+       the catch variable.
+       (init_exception_processing): The second argument to
+       __throw_type_match is ptr_type_node.
+
+       Fri May  6 07:18:54 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ change propagated from c-decl.c of snapshot 940429 ]
+       * cp/decl.c (finish_decl): Setting asmspec_tree should not
+       zero out the old RTL.
+
+Fri May  6 01:25:38 1994  Mike Stump  <mrs@cygnus.com>
+
+       Add alpha exception handling support to the compiler.
+       Quick and dirty backend in except.c.
+
+       * cp/*:  Remove most remnants of old exception handling support.
+       * decl.c (finish_function): Call expand_exception_blocks to put
+       the exception hanlding blocks at the end of the function.
+       * dec.c (hack_incomplete_structures): Make sure expand_decl_cleanup
+       comes after expand_decl_init.
+       * except.c: Reimplementation.
+       * expr.c (cplus_expand_expr): Handle THROW_EXPRs.
+       * lex.c (init_lex): Always have catch, try and throw be reserved
+       words, so that we may always parse exception handling.
+       * parse.y: Cleanup to support new interface into exception handling.
+       * tree.def (THROW_EXPR): Add.
+
+Thu May  5 17:35:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (simple_stmt, for loops): Use implicitly_scoped_stmt.
+       (various): Lose .kindof_pushlevel and partially_scoped_stmt.
+
+Thu May  5 16:17:27 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * parse.y (already_scoped_stmt): move expand_end_binding() to
+       fix the unmatched LBB/LBE in stabs.
+
+Thu May  5 14:36:17 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (set_nested_typename): Set TREE_MANGLED on the new
+       identifiers.
+       (pushdecl): Check TREE_MANGLED.
+       (xref_tag): Likewise.
+       * cp-tree.h (TREE_MANGLED): This identifier is a
+       DECL_NESTED_TYPENAME (named to allow for future use to denote
+       mangled function names as well).
+
+       Implement inconsistency checking specified in [class.scope0].
+       * decl.c (lookup_name_real): Don't set ICV here after all.
+       (finish_enum): Also set the type of the enumerators themselves.
+       (build_enumerator): Put the CONST_DECL in the list instead of its
+       initial value.
+       (pushdecl_class_level): Check inconsistent use of a name in the
+       class body.
+       * class.c (finish_struct): Check inconsistent use of a name in the
+       class body.  Don't set DECL_CONTEXT on types here anymore.
+       * parse.y (qualified_type_name): Note that the identifier has now
+       been used (as a type) in the class body.
+       * lex.c (do_identifier): Note that the identifier has now been used
+       (as a constant) in the class body.
+       * error.c (dump_decl): Print type and enum decls better.
+
+Thu May  5 09:35:35 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * typeck.c (build_modify_expr): Warn about assignment to `this'.
+
+Wed May  4 15:55:49 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_delete): Use the global operator delete when
+       requested.
+
+       * decl.c (lookup_name_real): If we find the type we're looking in a
+       base class while defining a class, set IDENTIFIER_CLASS_VALUE for
+       the type.
+
+       * class.c (finish_struct): Remove a couple of dependencies on
+       language linkage.
+
+       * decl.c (pushtag): Classes do nest in extern "C" blocks.
+       (pushdecl): Only set DECL_NESTED_TYPENAME on the canonical one for
+       the type.
+       (pushtag): Remove another dependency on the language linkage.
+
+       * lex.c (cons_up_default_function): Don't set DECL_CLASS_CONTEXT to
+       a const-qualified type.
+
+       * decl.c (push_overloaded_decl): Throw away built-in decls here.
+       (duplicate_decls): Instead of here.
+
+Wed May  4 15:27:40 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * typeck.c (get_member_function_from_ptrfunc):  Do The Right
+       Thing (I hope) if we're using thunks.
+
+Wed May  4 13:52:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (specialization): aggr template_type_name ';'.
+       (named_class_head_sans_basetype): Use it.
+       (explicit_instantiation): Likewise.
+       (tmpl.2): Revert.
+
+       * cvt.c (build_type_conversion_1): Use convert_for_initialization,
+       rather than convert, to do conversions after the UDC.
+
+       * cp-tree.h (SHARED_MEMBER_P): This member is shared between all
+       instances of the class.
+
+       * search.c (lookup_field): If the entity found by two routes is the
+       same, it's not ambiguous.
+
+Wed May  4 12:10:00 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (lookup_name_real):  Check for a NULL TREE_VALUE,
+       to prevent the compiler from crashing ...
+
+Wed May  4 11:19:45 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): If we don't have an object, check
+       basetype_path to figure out where to look up the function.
+
+       * typeck.c (convert_for_initialization): Pass TYPE_BINFO (type) to
+       build_method_call in case exp is NULL_TREE.
+
+Tue May  3 16:02:53 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       Give a vtable entries a unique named type, for the sake of gdb.
+       * class.c (build_vtable_entry):  The addres of a thunk now has
+       type vtable_entry_type, not ptr_type_node.
+       * method.c (make_thunk):  Fix type of THUNK_DECL.
+       * class.c (add_virtual_function, override_one_vtable):  Use
+       vfunc_ptr_type_node, instead of ptr_type_node.
+       * cp-tree.h (vfunc_ptr_type_node):  New macro.
+       * decl.c (init_decl_processing):  Make vtable_entry_type
+       be a unique type of pointer to a unique function type.
+
+Tue May  3 09:20:44 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (do_explicit): Sets doing_explicit to 1.
+       (explicit_instantiation): Use do_explicit rather than TEMPLATE
+       directly, add "do_explicit error" rule.
+       (datadef): Set doing_explicit to 0 after an explicit instantiation.
+       (tmpl.2): Don't instantiate if we see a ';' unless we're doing an
+       explicit instantiation.
+       (named_class_head_sans_basetype): Remove aggr template_type_name
+       ';' again.
+
+Mon May  2 23:17:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (lookup_nested_tag): Lose.
+
+       * decl2.c (grokfield): Set DECL_CONTEXT on TYPE_DECLs.
+       (lookup_name_nonclass): Lose.
+
+       * decl.c (poplevel_class): Add force parameter.
+       (lookup_name_real): Fix handling of explicit scoping which specifies
+       a class currently being defined.  Add 'nonclass' argument.
+       (lookup_name, lookup_name_nonclass): Shells for lookup_name_real.
+
+       * class.c (finish_struct): Don't unset IDENTIFIER_CLASS_VALUEs here.
+       (popclass): Force clearing of IDENTIFIER_CLASS_VALUEs if we're being
+       called from finish_struct.
+
+Mon May  2 19:06:21 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (init_decl_processing), cp-tree.h:  Removed memptr_type.
+       (It seeems redundant, given build_ptrmemfunc_type.)
+       * typeck.c (get_member_function_from_ptrfunc), gc.c (build_headof,
+       build_classof):  Use vtable_entry_type instead of memptr_type.
+       * method.c (emit_thunk):  Call poplevel with functionbody==0
+       to prevent DECL_INITIAL being set to a BLOCK.
+
+Mon May  2 15:02:11 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (named_class_head_sans_basetype): Add "aggr
+       template_type_name ';'" rule for forward declaration of
+       specializations.
+
+Mon May  2 15:02:11 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (instantiate_type): Deal with pmf's.
+
+       * Make-lang.in (cc1plus): Don't depend on OBJS or BC_OBJS, since
+       stamp-objlist does.
+
+       * Makefile.in (../cc1plus): Depend on OBJDEPS.
+       (OBJDEPS): Dependency version of OBJS.
+
+Mon May  2 12:51:31 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * search.c (dfs_debug_mark): unmark TYPE_DECL_SUPPRESS_DEBUG, not
+       DECL_IGNORED_P.
+
+Fri Apr 29 12:29:56 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Clear out memory of local tags.  And
+       typedefs.
+
+       * decl2.c (grokclassfn): Don't set DECL_CONTEXT to a cv-qualified
+       type.
+       * search.c (get_matching_virtual): Be more helpful in error message.
+
+       * *: Use DECL_ARTIFICIAL (renamed from DECL_SYNTHESIZED).
+
+       * lex.c (default_assign_ref_body): Expect TYPE_NESTED_NAME to work.
+       (default_copy_constructor_body): Likewise.
+
+       * class.c (finish_struct): Don't gratuitously create multiple decls
+       for nested classes.
+
+Thu Apr 28 23:39:38 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Avoid clobbering the arg types of other functions when reverting
+       static member functions.
+       * decl.c (revert_static_member_fn): Rearrange arguments, don't
+       require values for 'fn' and 'argtypes', add warning to comment
+       above.
+       (decls_match): Rearrange arguments in call to rsmf.
+       (grok_op_properties): Don't pass values for fn and argtypes.
+       * pt.c (instantiate_template): Don't pass values for fn and argtypes.
+
+Thu Apr 28 16:29:11 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Make-lang.in (cc1plus): Depend on stamp-objlist.
+       * Makefile.in (BC_OBJS): Delete.
+       (OBJS): Cat ../stamp-objlist to get language independent files.
+       Include ../c-common.o.
+       (../cc1plus): Delete reference to BC_OBJS.
+
+Thu Apr 28 02:12:08 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (compute_access): No really, deal with static members
+       properly.  Would I lie to you?
+
+       Implement lexical hiding of function declarations.
+       * pt.c (tsubst): Use lookup_name to look for function decls to guide
+       instantiation.
+       * method.c (build_opfncall): Use lookup_name_nonclass to look for
+       non-member functions.
+       * init.c (do_friend): Use lookup_name_nonclass to look for
+       functions.
+       * error.c (ident_fndecl): Use lookup_name to look for functions.
+       * decl2.c (lookup_name_nonclass): New function, skips over
+       CLASS_VALUE.
+       * decl.c (struct binding_level): Lose overloads_shadowed field.
+       (poplevel): Don't deal with overloads_shadowed.
+       (push_overloaded_decl): Do lexical hiding for functions.
+       * class.c (instantiate_type): Don't check non-members if we have
+       members with the same name.
+       * call.c (build_method_call): Use lookup_name_nonclass instead of
+       IDENTIFIER_GLOBAL_VALUE to check for non-member functions.
+       (build_overload_call_real): Likewise.
+
+       * decl.c (duplicate_decls): Check for ambiguous overloads here.
+       (push_overloaded_decl): Instead of here.
+       
+       * decl.c (pushdecl): Back out Chip's last change.
+
+       * decl.c (grok_op_properties): operators cannot be static members.
+
+       * cp-tree.h (DECL_SYNTHESIZED): DECL_SOURCE_LINE == 0
+       (SET_DECL_SYNTHESIZED): DECL_SOURCE_LINE = 0
+       * lex.c (cons_up_default_function): Use SET_DECL_SYNTHESIZED.
+
+       * method.c (do_inline_function_hair): Don't put friends of local
+       classes into global scope, either.
+
+       * typeck2.c (build_functional_cast): Don't look for a function call
+       interpretation.
+
+Thu Apr 28 15:19:46 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cp-tree.h: disable use of backend EH.
+
+Wed Apr 27 21:01:24 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Make-lang.in (c++.distdir): mkdir tmp/cp first.
+       * Makefile.in (INCLUDES): Move definition to same place as
+       parent makefile.
+       (ALLOCA): Define.
+       (OLDAR_FLAGS): Delete.
+       (OLDCC): Define.
+       (DIR): Delete.
+       (CLIB): Define.
+       (####site): Delete.
+       (SUBDIR_USE_ALLOCA): Don't use ALLOCA if compiling with gcc.
+
+Wed Apr 27 19:10:04 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * decl.c (xref_tag): not to use strstr(), it's not available on
+       all platforms.
+
+Wed Apr 27 18:10:12 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Resolve yet another class/pmf confusion.
+
+       * call.c (build_overload_call_real): Don't take the single-function
+       shortcut if we're dealing with an overloaded operator.
+
+Wed Apr 27 17:35:37 1994  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (get_base_distance): Search the virtual base class
+       binfos, incase someone wants to convert to a real virtual base
+       class.
+       * search.c (expand_indirect_vtbls_init): Use convert_pointer_to_real
+       instead of convert_pointer_to, as it now will work.
+
+Wed Apr 27 15:36:49 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): Don't complain about casting away
+       const and volatile.
+
+       * typeck.c (build_unary_op): References are too lvalues.
+
+Wed Apr 27 13:58:05 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (override_one_vtable): We have to prepare_fresh_vtable
+       before we modify it, not after, also, we cannot reuse an old vtable,
+       once we commit to a new vtable.  Implement ambiguous overrides in
+       virtual bases as abstract.  Hack until we make the class
+       ill-formed.
+
+Wed Apr 27 01:17:08 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (unary_expr): Expand new_placement[opt] and
+       new_initializer[opt] inline.
+
+       * search.c (lookup_fnfields): Don't throw away the inheritance
+       information here, either.
+       (compute_access): Handle static members properly.
+
+       * init.c (build_member_call): Always set basetype_path, and pass it
+       to lookup_fnfields.
+
+       * search.c (lookup_field): Deal properly with the case where
+       xbasetype is a chain of binfos; don't throw away the inheritance
+       information.
+       (compute_access): protected_ok always starts out at 0.
+
+       * init.c (resolve_offset_ref): Don't cast `this' to the base type
+       until we've got our basetype_path.
+
+       * cp-tree.h (IS_OVERLOAD_TYPE): aggregate or enum.
+
+       * cvt.c (build_up_reference): Use build_pointer_type rather than
+       TYPE_POINTER_TO.
+
+       * call.c (convert_harshness_ansi): Call type_promotes_to for reals
+       as well.
+
+       * cvt.c (type_promotes_to): Retain const and volatile, add
+       float->double promotion.
+
+       * decl.c (grokdeclarator): Don't bash references to arrays into
+       references to pointers in function parms.  Use type_promotes_to.
+
+Tue Apr 26 23:44:36 1994  Mike Stump  <mrs@cygnus.com>
+
+       Finish off Apr 19th work.
+
+       * class.c (finish_struct_bits): Rename has_abstract_virtuals to
+       might_have_abstract_virtuals.
+       * class.c (strictly_overrides, override_one_vtable,
+       merge_overrides): New routines to handle virtual base overrides.
+       * class.c (finish_struct): Call merge_overrides to handle overrides
+       in virtual bases.
+
+Tue Apr 26 12:45:53 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_function_call): Call build_function_call_real with
+       LOOKUP_NORMAL.
+
+       * *: Don't deal with TYPE_EXPRs.
+
+       * tree.c (lvalue_p): If the type of the expression is a reference,
+       it's an lvalue.
+
+       * cvt.c (convert_to_reference): Complain about passing const
+       lvalues to non-const references.
+       (convert_from_reference): Don't arbitrarily throw away const and
+       volatile on the target type.
+
+       * parse.y: Simplify and fix rules for `new'.
+
+       * decl.c (grok_op_properties): operator void is illegal.
+
+Mon Apr 25 02:36:28 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (components): Anonymous bitfields can still have declspecs.
+
+       * decl.c (pushdecl): Postpone handling of function templates like we
+       do C functions.
+
+       * search.c (expand_indirect_vtbls_init): Fix infinite loop when
+       convert_pointer_to fails.
+
+       * call.c (compute_conversion_costs_ansi): A user-defined conversion
+       by itself is better than that UDC followed by standard conversions.
+       Don't treat integers and reals specially.
+
+       * cp-tree.h: Declare flag_ansi.
+
+       * typeck.c (c_expand_return): pedwarn on return in void function
+       even if the expression is of type void.
+       (build_c_cast): Don't do as much checking for casts to void.
+       (build_modify_expr): pedwarn about array assignment if this code
+       wasn't generated by the compiler.
+
+       * tree.c (lvalue_p): A comma expression is an lvalue if its second
+       operand is.
+
+       * typeck.c (default_conversion): Move code for promoting enums and
+       ints from here.
+       * cvt.c (type_promotes_to): To here.
+       * call.c (convert_harshness_ansi): Use type_promotes_to.  Also fix
+       promotion semantics for reals.
+
+Sun Apr 24 16:52:51 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Make-lang.in (c++.install-common): Check for g++-cross.
+       * Makefile.in: Remove Cygnus cruft.
+       (config.status): Delete.
+       (RTL_H): Define.
+       (TREE_H): Use complete pathname, some native makes have minimal
+       VPATH support.
+       (*.o): Use complete pathname to headers in parent dir.
+       (doc, info, dvi): Delete.
+
+Sun Apr 24 16:52:51 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * Make-lang.in (c++.install-common): Check for g++-cross.
+       * Makefile.in: Remove Cygnus cruft.
+       (config.status): Delete.
+       (RTL_H): Define.
+       (TREE_H): Use complete pathname, some native makes have minimal
+       VPATH support.
+       (*.o): Use complete pathname to headers in parent dir.
+       (doc, info, dvi): Delete.
+
+Sun Apr 24 00:47:49 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (pushdecl): Avoid redundant warning on redeclaring function
+       with different return type.
+       (decls_match): Compare return types strictly.
+
+Fri Apr 22 12:55:42 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (build_type_conversion): Do try to convert through other
+       pointers.  This will fail if the class defines multiple pointer
+       conversions.
+
+       * error.c (dump_type_prefix): Print out pointers to arrays properly.
+       (dump_type_suffix): Likewise.  (was 'int *[]', now 'int (*)[]')
+
+       * typeck.c (build_unary_op): Disallow ++/-- on pointers to
+       incomplete type.
+
+       * decl.c (duplicate_decls): Check mismatched TREE_CODES after
+       checking for shadowing a builtin.  If we're redeclaring a builtin
+       function, bash the old decl to avoid an ambiguous overload.
+
+       * cvt.c (convert_to_reference): Don't force arrays to decay here.
+
+       * tree.c (lvalue_p): A MODIFY_EXPR is an lvalue.
+
+       * decl.c (duplicate_decls): Don't assume that the decls will have
+       types.
+
+       Mon Apr 18 11:35:32 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940318 snapshot ]
+       * c-decl.c (pushdecl): Warn if type mismatch with another external decl
+       in a global scope.
+
+       Fri Apr 22 06:38:56 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp/typeck2.c (signature_error): Use cp_error for "%T".
+
+       Mon Apr 18 11:59:59 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940415 snapshot ]
+       * cp/decl.c (duplicate_decls, pushdecl, builtin_function):
+       Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.
+
+       Mon Apr 18 11:55:18 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940409 snapshot ]
+       * cp/decl.c (duplicate_decls): Put new type in same obstack as
+       old ones, or permanent if old ones in different obstacks.
+
+       Mon Apr 18 11:48:49 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940401 snapshot ]
+       * cp/parse.y (attrib): Handle string args as expressions,
+       merging the two rules.  `mode' attribute now takes a string arg.
+       Delete the rule for an identifier as arg.
+
+       Mon Apr 18 11:24:00 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940312 snapshot ]
+       * cp/typeck.c (pointer_int_sum): Multiplication should be done signed.
+       (pointer_diff): Likewise the division.
+
+       Sun Mar  6 19:43:39 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940304 snapshot ]
+       * cp/decl.c (finish_decl): Issue warning for large objects,
+       if requested.
+
+       Sat Feb 19 22:20:32 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940218 snapshot ]
+       * cp/parse.y (attrib): Handle attribute ((section ("string"))).
+       * cp/decl.c (duplicate_decls): Merge section name into new decl.
+
+       Tue Feb  8 09:49:17 1994  Chip Salzenberg  <chip@fin.uucp>
+
+       [ cp/* changes propagated from c-* changes in 940206 snapshot ]
+       * cp/typeck.c (signed_or_unsigned_type): Check for any
+       INTEGRAL_TYPE_P not just INTEGER_TYPE.
+
+       Mon Dec  6 13:35:31 1993  Norbert Kiesel  (norbert@i3.INformatik.rwth-aachen.DE)
+
+       * cp/decl.c (finish_enum): Start from 0 when determining precision
+       for short enums.
+
+       Fri Dec  3 17:07:58 1993  Ralph Campbell  (ralphc@pyramid.COM)
+
+       * cp/parse.y (unary_expr): Look at $1 for tree_code rather than
+       casting $$.
+
+       Wed Nov 17 19:22:09 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp/typeck.c (build_binary_op_nodefault): Propagate code
+       from C front-end to optimize unsigned short division.
+       (build_conditional_expr): Fix bug in "1 ? 42 : (void *) 8".
+
+       Wed Nov 17 19:17:18 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp/call.c (convert_harshness_ansi): Given an (e.g.) char
+       constant, prefer 'const char &' to 'int'.
+
+       Wed Feb  3 13:11:48 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp/class.c (finish_struct_methods):  Handle multiple
+       constructors in fn_fields list.
+
+Fri Apr 22 12:48:10 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * class.c (finish_struct): use TYPE_DECL_SUPPRESS_DEBUG to flag
+       types not to be dumped in stabs, like types in #pragma interface.
+       * decl.c (init_decl_processing): use TYPE_DECL_SUPPRESS_DEBUG to
+       mark unknown type.
+
+Fri Apr 22 03:27:26 1994  Doug Evans  <dje@cygnus.com>
+
+       * Language directory reorganization.
+       See parent makefile.
+
+Thu Apr 21 18:27:57 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * cp-tree.h (THUNK_DELTA):  It is normally negative, so
+       use signed .i variant of frame_size rather than unsigned .u.
+       * cp-tree.h (VTABLE_NAME_FORMAT):  If flag_vtable_thunks,
+       use "VT" rather than "vt" due to binary incompatibility.
+       * class.c (get_vtable_name):  Use strlen of VTABLE_NAME_FORMAT,
+       rather than sizeof, since it is now an expression.
+       * class.c (modify_one_vtable):  Modify to skip initial element
+       containing a count of the vtable.
+
+Thu Apr 21 00:09:02 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (check_newline): Force interface_unknown on main input file.
+
+       * pt.c (do_pending_expansions): Always emit functions that have been
+       explicitly instantiated.
+       (do_function_instantiation): Set DECL_EXPLICITLY_INSTANTIATED.
+       (do_type_instantiation): Set CLASSTYPE_VTABLE_NEEDS_WRITING and
+       DECL_EXPLICITLY_INSTANTIATED on all my methods.
+       * parse.y (explicit_instantiation): Call do_type_instantiation for
+       types.
+       * decl2.c (finish_vtable_vardecl): Call import_export_vtable.
+       * decl.c (start_function): Don't set DECL_EXTERNAL on a function
+       that has been explicitly instantiated.
+       * cp-tree.h (DECL_EXPLICITLY_INSTANTIATED): Alias for
+       DECL_LANG_FLAG_4.
+       * class.c: Move import_export_vtable to decl2.c, and comment out all
+       uses.
+
+Wed Apr 20 16:51:06 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (process_next_inline): Don't muck with DECL_INLINE.
+       (do_pending_inlines): Likewise.
+
+Tue Apr 19 22:25:41 1994  Mike Stump  <mrs@cygnus.com>
+
+       Reimplement vtable building, and most vtable pointer setting.
+       Allows for earier maintenance, easier understandability, and most
+       importantly, correct semantics.
+
+       * class.c (build_vtable): Removed unneeded
+       SET_BINFO_VTABLE_PATH_MARKED.
+       * class.c (prepare_fresh_vtable): Likewise.  Added argument.
+       * class.c (modify_vtable_entry): General cleanup.
+       * class.c (related_vslot, is_normal, modify_other_vtable_entries,
+       modify_vtable_entries): Removed.
+       * class.c (add_virtual_function): General cleanup.
+       * class.c (finish_base_struct): Setup BINFO_VTABLE and
+       BINFO_VIRTUALS as early as we can, so that modify_all_vtables can
+       work.
+       * class.c (finish_vtbls): New routine, mostly from
+       unmark_finished_struct.
+       * class.c (overrides): New routine.
+       * class.c (modify_one_vtable): New routine, mostly from
+       modify_other_vtable_entries and modify_vtable_entries.
+       * class.c (modify_all_direct_vtables, modify_all_indirect_vtables,
+       modify_all_vtables): New routines.
+       * class.c (finish_struct): Added arguemnt to prepare_fresh_vtable
+       call.  General cleanup on how pending_hard_virtuals are handled.
+       General cleanup on modifying vtables.  Use finish_vtbls, instead of
+       unmark_finished_struct.
+       * cp-tree.h (init_vtbl_ptrs, expand_direct_vtbls_init,
+       get_first_matching_virtual, get_matching_virtual,
+       expand_vbase_vtables_init,  expand_indirect_vtbls_init): Update.
+       * cvt.c (convert_pointer_to_real): cleanup error message.
+       * decl.c (grokfndecl): General cleanup.
+       * decl.c (finish_function): Change init_vtbl_ptrs call to
+       expand_direct_vtbls_init.  Change expand_vbase_vtables_init call to
+       expand_indirect_vtbls_init.
+       * init.c (expand_virtual_init): Remove unneeded argument.
+       * init.c (init_vtbl_ptrs): Rename to expand_direct_vtbls_init, added
+       two arguments to make more general.  Made more general.  Now can be
+       used for vtable pointer initialization from virtual bases.
+       * init.c (emit_base_init): Change expand_vbase_vtables_init call to
+       expand_indirect_vtbls_init.  Change init_vtbl_ptrs call to
+       expand_direct_vtbls_init.
+       * init.c (expand_virtual_init): General cleanup.
+       * init.c (expand_default_init): Change expand_vbase_vtables_init
+       call to expand_indirect_vtbls_init.
+       * init.c (expand_recursive_init_1): Change expand_vbase_vtables_init
+       call to expand_indirect_vtbls_init.
+       * init.c (expand_recursive_init): Change expand_vbase_vtables_init
+       call to expand_indirect_vtbls_init.
+       * search.c (get_first_matching_virtual): Rename to
+       get_matching_virtual.  General cleanup and remove setting of
+       DECL_CONTEXT.  That is now done in a cleaner way in
+       modify_vtable_entry and add_virtual_function.
+       * search.c (expand_vbase_vtables_init): Rename to
+       expand_indirect_vtbls_init.  General cleanup.  Use
+       expand_direct_vtbls_init to do hard work.  Ensures that _all_ vtable
+       pointers from virtual bases are set up.
+       * search.c (bfs_unmark_finished_struct, unmark_finished_struct):
+       Removed.
+
+       * *.[chy]: Remove support for VTABLE_USES_MASK.
+
+Tue Apr 19 12:51:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): Use NOP_EXPRs to switch between
+       reference and pointer types instead of bashing the types directly.
+
+       * call.c (build_overload_call_real): Use the TREE_CODE to determine
+       whether the function is overloaded or not, rather than
+       TREE_OVERLOADED.
+       * *: Remove all uses of TREE_OVERLOADED.
+
+       * decl.c (grokdeclarator): Only complain about initializing const
+       fields when -ansi or -pedantic.
+
+Tue Apr 19 12:42:42 1994  Doug Evans  <dje@canuck.cygnus.com>
+
+       * cp-tree.h (THUNK_DELTA): frame_size is now a union.
+
+Mon Apr 18 00:17:13 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Do overloading on a block-by-block basis, not function-by-function.
+       * decl.c: Lose overloads_to_forget.
+       (struct binding_level): Add overloads_shadowed field.
+       (poplevel): Restore overloads_shadowed.
+       (push_overloaded_decl): Use overloads_shadowed instead of
+       overloads_to_forget.
+       (finish_function): Don't look at overloads_to_forget.
+
+       Copy enum_overflow logic from c-decl.c.
+       * decl.c (start_enum): Initialize enum_overflow.
+       (build_enumerator): Use enum_overflow.  Also use current_scope().
+
+       * search.c (current_scope): Move Brendan's comment from
+       build_enumerator here.
+
+       * typeck.c (convert_for_assignment): Change warnings to pedwarns for
+       discarding const/volatile.
+
+Sat Apr 16 01:18:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (comp_target_parms): Accept TEMPLATE_TYPE_PARMs on the rhs.
+       (comp_target_types): Likewise.
+
+       * decl.c (lookup_name): Don't unset got_scope here.
+
+       * spew.c (yylex): Only replace yylval with the TYPE_NESTED_NAME if
+       got_scope != NULL_TREE.
+
+Fri Apr 15 16:36:33 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Horrible kludge to prevent templates from being instantiated by
+       their base classes.
+       * parse.y (template_instantiate_once): Unset TYPE_BEING_DEFINED
+       before we get to left_curly.
+       * pt.c (instantiate_class_template): Set TYPE_BEING_DEFINED.
+
+       * error.c (dump_decl): If it's a typedef, print out the name of the
+       decl, not just the underlying type.
+
+       * decl.c (pushdecl): If the old duplicate decl was a TYPE_DECL,
+       update the IDENTIFIER_TYPE_VALUE of its name.
+
+       * decl2.c (finish_file): When processing the initializer for a
+       static member, pretend that the dummy function is a member of the
+       same class.
+
+Fri Apr 15 15:56:35 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * class.c (build_vtable_entry): revert Apr 4 change.
+       * decl2.c (mark_vtable_entries): replace pure virtual function
+       decl with abort's.
+
+Fri Apr 15 13:49:33 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_conditional_expr): Pedwarn on pointer/integer
+       mismatch, and don't pedwarn on 0/function pointer mismatch.
+
+       * typeck2.c (digest_init): Lose code for special handling of unions.
+       (process_init_constructor): Since they're handled just fine here.
+       Pedwarn on excess elements.
+
+       * decl2.c (grokfield): Complain about local class method declaration
+       without definition.
+
+Fri Apr 15 13:19:40 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * method.c (emit_thunk):  Add extern declaration for
+       current_call_is_indirect (needed for hppa).
+
+Thu Apr 14 16:12:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Improve local class support; allow classes in different blocks to
+       have the same name.
+       * decl.c (pushtag): Support local classes better.
+       (pushdecl_nonclass_level): New function for pushing mangled decls of
+       nested types into the appropriate scope.
+       (xref_defn_tag): Use pushdecl_nonclass_level instead of
+       pushdecl_top_level. 
+       (grokfndecl): Don't mess with IDENTIFIER_GLOBAL_VALUE for local
+       class methods.
+       * method.c (do_inline_function_hair): Likewise.
+
+       * class.c (finish_struct): It is legal for a class with no
+       constructors to have nonstatic const and reference members.
+
+Thu Apr 14 07:15:11 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * decl.c (push_overloaded_decl): Avoid giving errors about
+       built-ins, since duplicate_decls will have given warnings/errors
+       for them.
+
+Thu Apr 14 03:45:12 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): Warn about casting pointer type to
+       reference type when this is probably not what they wanted.
+
+Wed Apr 13 13:12:35 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (finish_decl):  Don't mindlessly set TREE_USED for
+       static consts any more (toplev.c has now been modified to
+       not emit warnings if they are unused).
+
+Wed Apr 13 00:22:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_op_properties): If op new/delete get here with
+       METHOD_TYPEs, do a revert_static_member_fn.
+
+       * cp-tree.h (IDENTIFIER_CLASS_TYPE_VALUE): Lose.
+       * init.c (is_aggr_typedef): Don't look at
+       IDENTIFIER_CLASS_TYPE_VALUE.
+       (get_aggr_from_typedef): Likewise.
+       (get_type_value): Likewise.
+       * call.c (build_scoped_method_call): Don't rely on overloaded
+       template names having IDENTIFIER_CLASS_VALUE set.
+
+       * parse.y (component_decl_1, fn.def2): Revert rules for
+       constructors.
+       (component_decl_1, fn.def2): Use $1 instead of $$, since $$ is being
+       clobbered.
+
+       * decl.c (start_function): Only warn about `void main()' if pedantic
+       || warn_return_type.
+
+Tue Apr 12 02:14:17 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Clean up overloading of the template name.
+       * class.c (pushclass): overload the template name whenever pushing
+       into the scope of a template class, not just if it is
+       uninstantiated.
+       (popclass): Correspondingly.
+       * search.c (push_class_decls): Don't overload_template_name.
+       * pt.c (overload_template_name): Don't set IDENTIFIER_LOCAL_VALUE or
+       DECL_CONTEXT on things.
+       * parse.y (left_curly): Don't overload_template_name.
+       * class.c (finish_struct): Don't undo_template_name_overload.
+
+       * method.c (build_opfncall): Only pass one argument to global op
+       delete.
+
+       * call.c (build_method_call): Use TYPE_VEC_DELETE_TAKES_SIZE to
+       decide how many arguments to use for vec delete.
+
+       * decl.c (grok_op_properties): Be consistent in modifying
+       current_class_type.
+       (grokdeclarator): Only complain about function decls with no return
+       type if we're being pedantic.
+
+Mon Apr 11 00:10:53 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       Add support for operator new [] and operator delete [].
+
+       * tree.def: Add VEC_NEW_EXPR and VEC_DELETE_EXPR.
+       * ptree.c (print_lang_type): Indicate vec new/delete.
+       * parse.y: Support vec new/delete.
+       * method.c (build_decl_overload): Deal with vec new/delete.
+       (build_opfncall): Likewise.
+       * lex.c (init_lex): Set up values of ansi_opname and opname_tab for
+       vec new/delete.  vec new uses "__vn", and vec delete uses "__vd".
+       * init.c (init_init_processing): Set up BIVN and BIVD.
+       (do_friend): Don't clean up after mistaken setting of TREE_GETS_NEW,
+       since it doesn't happen any more.
+       (build_new): Support vec new.  Always call something.
+       (build_x_delete): Support vec delete.
+       (build_vec_delete): Lose dtor_dummy argument, add use_global_delete,
+       and pass it to build_x_delete.
+       * decl2.c (delete_sanity): Don't change behavior by whether or not
+       the type has a destructor.  Pass use_global_delete to
+       build_vec_delete.
+       (coerce_delete_type): Make sure that the type returned has a first
+       argument of ptr_type_node.
+       * decl.c (init_decl_processing): Also declare the global vec
+       new/delete.
+       (grokdeclarator): Also force vec new/delete to be static.
+       (grok_op_properties): Note presence of vec new/delete, and play with
+       their args.  If vec delete takes the optional size_t argument, set
+       TYPE_VEC_DELETE_TAKES_SIZE.
+       * cp-tree.h (TYPE_GETS_{REG,VEC}_DELETE): New macros to simplify
+       checking for one delete or the other.
+       (lang_type): gets_new and gets_delete are now two bits long.  The
+       low bit is for the non-array version.  Lose gets_placed_new.
+       (TYPE_VEC_DELETE_TAKES_SIZE): New macro indicating that the vec
+       delete defined by this class wants to know how much space it is
+       deleting.
+       (TYPE_VEC_NEW_USES_COOKIE): New macro to indicate when vec new must
+       add a header containing the number of elements in the vector; i.e.
+       when the elements need to be destroyed or vec delete wants to know
+       the size.
+       * class.c (finish_struct_methods): Also check for overloading vec
+       delete.
+       * call.c (build_method_call): Also delete second argument for vec
+       delete.
+
+       * decl.c (grokdeclarator): Correct complaints again.
+       (grokdeclarator): Fix segfault on null declarator.
+       (decls_match): Also accept redeclaration with no arguments if both
+       declarations were in C context.  Bash TREE_TYPE (newdecl) here.
+       (duplicate_decls): Instead of here.
+
+       * parse.y (nested_name_specifier_1): Lose rules for dealing with
+       syntax errors nicely, since they break parsing of 'const i;'.
+
+       * decl.c (lookup_name): if (got_scope == current_class_type)
+       val = IDENTIFIER_CLASS_VALUE (name).
+
+       * search.c (lookup_nested_tag): Look in enclosing classes, too.
+
+       * spew.c (yylex): Only look one character ahead when checking for a
+       SCOPE.
+
+       * lex.c (check_newline): Read first nonwhite char before
+       incrementing lineno.
+
+       * decl.c (grokdeclarator): Don't claim that typedefs are variables
+       in warning.
+
+       * parse.y: Divide up uses of unqualified_id into
+       notype_unqualified_id and unqualified_id, so that TYPENAME can be
+       used as an identifier after an object.
+
+       * class.c (push_nested_class): Don't push into non-class scope.
+
+       * decl.c (grokdeclarator): If an identifier could be a type
+       conversion operator, but has no associated type, it's not a type
+       conversion operator.
+
+       * pt.c (unify): Check for equality of constants better.
+
+       * decl.c (grokdeclarator): Don't complain about access decls.
+
+Sun Apr 10 02:39:55 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): pedwarn about data definitions without
+       types here.
+
+       * parse.y (datadef): Don't pedwarn about decls without types here,
+       since that is valid for functions.
+       (fn.def2, component_decl): Support constructors with declmods again.
+       (nomods_initdecls): For decls without any mods, so that we don't try
+       to get declspecs from some arbitrary $0.
+
+       * search.c (lookup_field): Use cp_error.
+
+       * parse.y (nested_name_specifier_1): Don't check aggr/non-aggr type
+       here; it breaks destructors for non-aggr types.
+
+       * decl.c (lookup_name): Only look for TYPE_DECLs in base classes of
+       a type being defined, like the comment says.
+       If got_scope is not an aggregate, just return NULL_TREE.
+
+       * pt.c (create_nested_upt): Kung's code for creating types nested
+       within uninstantiated templates now lives here (it used to live in
+       hack_more_ids).  It needs to be expanded.
+
+       * parse.y: Stop calling see_typename so much.
+
+       * decl.c (lookup_name): Deal with TTPs and UPTs.
+
+       * lex.c (real_yylex): Don't set looking_for_typename just because we
+       saw a 'new'.
+       (dont_see_typename): #if 0 out.
+
+       * spew.c (yylex): Increment looking_for_typename if the next
+       character is SCOPE, rather than setting it to 1; this way, the value
+       from seeing an aggr specifier will not be lost.  This kinda relies
+       on looking_for_typename never being < 0, which is now true.
+
+       * parse.y (nested_name_specifier_1): Accept TEMPLATE_TYPE_PARMs,
+       too.
+       (named_class_head_sans_basetype): Accept template types, too.  Oops.
+
+Fri Apr  8 16:39:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (reparse_decl_as_expr1): Handle SCOPE_REFs.
+
+       * parse.y: Lose START_DECLARATOR.
+
+       * search.c (lookup_nested_tag): New function to scan CLASSTYPE_TAGS
+       for a class.
+
+       * parse.y: Simplify fn.def2 and component_decl.  Support 'enum
+       A::foo' syntax.  Catch invalid scopes better.
+
+       * parse.y, lex.c: lose TYPENAME_COLON.
+
+       * decl2.c (groktypefield): #if 0 out.
+
+       * decl.c (lookup_name): If the type denoted by got_scope is
+       currently being defined, look in CLASSTYPE_TAGS rather than FIELDS.
+
+       * class.c (push_nested_class): Don't try to push into
+       error_mark_node.
+
+Fri Apr  8 07:26:36 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * Makefile.in (stamp-parse): Update count of conflicts to 33.
+
+Thu Apr  7 17:47:53 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       A saner implementation of nested types that treats template types
+       no differently from non-template types.  There are still some
+       shortcomings of our system; most notably, it is difficult to look
+       for a nested type that is hidden by another name, because of the way
+       we keep track of hidden types.  But this shouldn't be a problem for
+       just about anyone.  Perhaps lookup_field should be fixed up a bit.
+
+       * spew.c: Moved handling of nested types/scoping from the lexer
+       into the parser.  Removed variable template_type_seen_before_scope.
+       Removed functions frob_identifier, hack_more_ids, and various cruft
+       that was #if 0'd out in the past, reducing the size of the file from
+       1146 lines to 450 lines.  We can't quite do away with spew.c yet,
+       though; we still need it for do_aggr () and checking for SCOPE after
+       the current identifier.  And setting lastiddecl.
+
+       * parse.y: Moved handling of nested types/scoping from the lexer
+       into the parser, using a new global variable `got_scope'.  Reduced
+       the number of states by 53.  Implemented all uses of explicit global
+       scope.  Removed terminals SCOPED_TYPENAME and SCOPED_NAME.  Removed
+       nonterminals tmpl.1, scoped_base_class, id_scope, typename_scope,
+       scoped_typename.  Added nonterminals nested_type,
+       qualified_type_name, complete_type_name, qualified_id, ptr_to_mem,
+       nested_name_specifier, global_scope, overqualified_id, type_name.
+       Changed many others.  Added 9 new reduce/reduce conflicts, which are
+       nested type parallels of 9 that were already in the grammar for
+       non-nested types.  Eight of the now 33 conflicts should be removed
+       in the process of resolving the late binding between variable and
+       function decls.
+
+       * gxxint.texi (Parser): Update.
+
+       * cp-tree.h (IS_AGGR_TYPE_CODE): Add UNINSTANTIATED_P_TYPE.
+
+       * lex.h: Add decl for got_scope.
+
+       * lex.c (see_typename): Claim to be the lexer when calling
+       lookup_name.
+
+       * decl.c (lookup_name): When called from the lexer, look at
+       got_scope and looking_at_typename; otherwise don't.
+
+Thu Apr  7 22:05:47 1994  Mike Stump  <mrs@cygnus.com>
+
+       31th Cygnus<->FSF merge.
+
+Thu Apr  7 17:47:53 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (mark_vtable_entries): Call this to mark all the
+       entries in the vtable addressable.
+       (finish_decl_parsing): Handle SCOPE_REFs.
+
+       * decl.c (decls_match): Always call compparms with strict == 1.
+       Handle the special case of C function redecl here.
+       (duplicate_decls): Only keep the old type if the new decl takes no
+       arguments.
+
+       * typeck.c (compparms): Also allow t1 to be ... if strict == 0.
+
+Thu Apr  7 16:17:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (build_vtable_entry): Fix breakage introduced Apr 5
+       17:48:41.
+
+Wed Apr  6 16:05:10 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * init.c (build_virtual_init), search.c (build_vbase_vtables_init),
+       ch-tree.h:  Every place these functions were called, the result was
+       immediately passed to expand_expr_stmt.  Reduce redundancy by
+       calling expand_expr_init *inside* these functions.  These
+       makes for a simpler interface, and we don't have to build
+       compound expressions.  Hence, rename these function to:
+       expand_virtual_init and expand_vbase_vtables_init respectively.
+       * init.c, decl.c:  Change callers of these functions.
+       * init.c, cp-tree.h (expand_virtual_init):  Make static.
+
+       * decl2.c (finish_file): Check TREE_PUBLIC||TREE_ADDRESSABLE
+       rather than DECL_SAVED_INSNS before emitting inlines.
+
+Wed Apr  6 13:06:39 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * spew.c (init_spew): #if 0 out stuff used by arbitrate_lookup.
+
+       * decl.c (duplicate_decls): If this is a new declaration of an
+       extern "C" function, keep the type (for the argtypes).
+       (redeclaration_error_message): Don't check DECL_LANGUAGE here.
+       (decls_match): Call compparms with a value of strict dependent on
+       the value of strict_prototypes for DECL_LANGUAGE (oldecl).
+
+       * typeck.c (compparms): ... is only equivalent to non-promoting
+       parms if we're not being strict.
+
+       * parse.y (empty_parms): Don't check flag_ansi || pedantic here.
+
+       * decl.c (init_decl_processing): if (flag_ansi || pedantic)
+       strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;
+
+       * decl2.c (grok_function_init): Don't set DECL_INITIAL on pure
+       virtuals.
+
+Tue Apr  5 17:48:41 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       Support for implementing vtables with thunks.
+       * tree.def (THUNK_DECL):  New TREE_CODE.
+       * cp-tree.h (FNADDR_FROM_VTABLE_ENTRY), tree.c
+       (fnaddr_from_vtable_entry):  Handle flag_vtable_thunks case.
+       * cp-tree.h (memptr_type):  New variable.
+       * class.c (build_vtable_entry):  Build thunk if necessary.
+       * class.c (build_vfn_ref):  If using thunks, don't need
+       to add delta field from vtable (there is none!).
+       * decl.c: Add memptr_type as well as vtable_entry_type.
+       If using thunks, the latter is just ptr_type_node.
+       * gc.c, typeck.c:  Use memptr_typeChange, not vtable_entry_type.
+       * decl2.c (finish_vtable_vardecl):  Handle thunks.
+       * expr.c (cplus_expand_expr):  Support THUNK_DECL.
+
+       * decl.c (grokdeclarator):  Set DECL_THIS_EXTERN if "extern".
+       * decl.c (start_function):  Set current_extern_inline based on
+       DECL_THIS_EXTERN, not TREE_PUBLIC.
+       * decl.c (finish_function):  Call mark_inline_for_output if needed,
+
+       Improve intelligence about when to emit inlines.
+       * cp-tree.h (lang_decl_flags):  New field saved_inline.
+       * cp-tree.h (DECL_SAVED_INLINE):  New macro.
+       * class.c (add_virtual_function):  Don't set TREE_ADDRESSABLE.
+       * decl.h, decl.c (pending_addressable_inlines):  Removed.
+       * decl2.c (pending_addressable_inlines):  Renamed to saved_inlines.
+       * decl2.c (mark_inline_for_output):  Do nothing if
+       DECL_SAVED_INLINE;  otherwise set it (and add to saved_inlines list).
+       * decl2.c (finish_vtable_vardecl):  SET_CLASSTYPE_INTERFACE_KNOWN
+       and set CLASSTYPE_INTERFACE_ONLY if there is a non-inline virtual.
+       * decl2.c (finish_file):  Writing out inlines later, so we can
+       also handle the ones needed for vtbales.
+       * decl2.c (write_vtable_entries, finish_vtable_typedecl):  Removed.
+
+       * cp-tree.h, class.c, decl2.c, search.c:  Remove -fvtable-hack
+       and flag_vtable_hack.  Use -fvtable-thunks and flag_vtable_thunks
+       instead.  (The rationale is that these optimizations both break binary
+       compatibility, but should become the default in a future release.)
+
+Wed Apr  6 10:53:56 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (modify_vtable_entries): Never reset the DECL_CONTEXT
+       of a fndecl, as we might not be from that vfield.
+
+Tue Apr  5 17:43:35 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * class.c (add_virtual_function): fix bug for pure virtual, so
+       that DECL_VINDEX of the dummy decl copied won't be error.
+       (see also Apr 4 change)
+
+Tue Apr  5 17:23:45 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * typeck.c (c_expand_return):  Before checking that we're not
+       returning the address of a local, make sure it's a VAR_DECL.
+       (And don't worry about it being a TREE_LIST.)
+
+Tue Apr  5 13:26:42 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (YYDEBUG): Always define.
+       * lex.c (YYDEBUG): Likewise.
+
+Mon Apr  4 11:28:17 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * class.c (finish_struct): backup out the change below, put the
+       new change for the same purpose. The change below breaks code.
+
+       * class.c (finish_struct): if pure virtual, copy node and make
+       RTL point to abort, then put in virtual table.
+       * decl2.c (grok_function_iit): reinstate Mar 31 change.
+
+Sat Apr  2 03:12:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_new): pedwarn about newing const and volatile
+       types.
+
+       * tree.c (get_identifier_list): Only do the special handling
+       thing if we're dealing with the main variant of the record type.
+
+       * cvt.c (convert_to_reference): When converting between
+       compatible reference types, use the pointer conversion machinery.
+       Don't just blindly overwrite the old type.
+
+Fri Apr  1 17:14:42 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): When looking at global functions,
+       be sure to use instance_ptr for the first argument, not some version
+       of it that has been cast to a base class.  Also do this before
+       comparing candidates.
+
+Thu Mar 31 19:50:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Constructors can be called for
+       const objects.
+
+Thu Mar 31 16:20:16 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * decl2.c (grok_func_init): do not abort as rtl for pur virtual
+       fucntions. They can be defined somewhere else.
+
+Sat Jan 23 23:23:26 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)
+
+       * decl.c (init_decl_processing): Declare __builtin_return_address
+       and __builtin_frame_address for C++ as well.
+
+Thu Mar 31 12:35:49 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck2.c (store_init_value): Integral constant variables are
+       always constant, even when doing -fpic.
+
+Sat Jan 23 23:23:26 1994  Stephen R. van den Berg  (berg@pool.informatik.rwth-aachen.de)
+
+       * decl.c (redeclaration_error_message): Pass the types to
+       comptypes.
+
+Wed Mar 30 21:29:25 1994  Mike Stump  <mrs@cygnus.com>
+
+       Cures incorrect errors about pure virtuals in a class, when they
+       have been overridden in a derived class.
+
+       * search.c (get_abstract_virtuals): Reimplement.
+       * search.c (get_abstract_virtuals_1): New routine.
+
+Wed Mar 30 14:10:04 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (push_template_decls): Make the pushed level pseudo
+       global.
+
+       * parse.y (extdefs): Don't pop everything if the current binding
+       level is pseudo_global.
+
+       * decl.c (pop_everything): Stop on reaching a pseudo-global
+       binding level.
+
+       * cp-tree.h (DECL_FUNCTION_MEMBER_P): Change to more reliable test.
+
+       * decl.c (duplicate_decls): Only copy DECL_SOURCE_{FILE_LINE} if
+       the old decl actually had an initializer.
+
+       * {various}: Clean up gcc -W complaints.
+
+       * cp-tree.h (DECL_FUNCTION_MEMBER_P): Currently defined to be
+       (DECL_CONTEXT (NODE) != NULL_TREE).
+
+       * parse.y (lang_extdef): Call pop_everything if necessary.
+
+       * decl.c (pop_everything): New function for popping binding
+       levels left over after a syntax error.
+       (pushdecl): Use DECL_FUNCTION_MEMBER_P to decide whether or not
+       a function is a member.
+
+Wed Mar 30 14:20:50 1994  Mike Stump  <mrs@cygnus.com>
+
+       Cures calling a more base base class function, when a more derived
+       base class member should be called in some MI situations.
+
+       * search.c (make_binfo): Use more the more specialized base
+       binfos from the binfo given as the second argument to make_binfo,
+       instead of the unspecialized ones from the TYPE_BINFO.
+       * class.c (finish_base_struct): Likewise, update callers.
+       * search.c (dfs_get_vbase_types): Likewise.
+       * tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
+       * decl.c (xref_tag): Use NULL_TREE instead of 0.
+       * lex.c (make_lang_type): Likewise.
+
+Wed Mar 30 14:10:04 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (pushdecl): If pushing a C-linkage function, only do a
+       push_overloaded_decl.
+       (duplicate_decls): Standard overloading does not shadow built-ins.
+
+Tue Mar 29 00:54:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (end_template_decl): Don't call push_overloaded_decl.
+
+       * init.c (do_friend): Don't call push_overloaded_decl.
+
+       * decl.c (pushdecl): Call push_overloaded_decl for functions and
+       function templates.
+       (duplicate_decls): functions and function templates are not
+       duplicates, but don't complain about calling this function to
+       compare them.
+       (push_overloaded_decl): Don't deal with linkage.  Call
+       duplicate_decls.
+       (redeclaration_error_message): Deal with linkage.
+
+       * decl.c (start_function): If push_overloaded_decl returns an
+       older version of the function, deal with it.
+
+       * decl.c (start_function): Be sure only to push_overloaded_decl
+       for non-members.
+
+       * decl.c (grokfndecl): Put back clearing of DECL_CHAIN for
+       methods.
+       (start_function): Lose broken and redundant code for checking old
+       decl.
+
+       * init.c (add_friend): Give line numbers of both friend decls
+       when warning about re-friending.
+
+       * pt.c (tsubst): Use comptypes rather than == to compare the
+       types of the method as declared and as defined, since default
+       parameters may be different.
+
+       * call.c (build_method_call): Use brendan's candidate printing
+       routine.
+
+       * decl.c (start_method): Methods defined in the class body are
+       inline whether or not it's a template class.
+
+Mon Mar 28 16:39:26 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (initdcl0): Add "extern" to current_declspecs if
+       have_extern_spec && ! used_extern_spcec.
+
+       * tree.c (really_overloaded_fn): A fn with more than one
+       overload.
+
+       * pt.c (end_template_decl): Use really_overloaded_fn.
+
+       * decl.c (duplicate_decls): When smashing a decl into a previous
+       definition, keep the old file and line.
+       Don't deal with overloaded functions.
+       Lose old code for checking arg types of functions.
+       Check for overloaded C functions.
+       (pushdecl): Deal with overloaded functions.
+       (start_decl): Expect pushdecl to return an appropriate function decl.
+       (start_function): Likewise.
+       (push_overloaded_decl): Don't check for overloaded C functions.
+
+       * *.c: Stop using DECL_OVERLOADED, it being archaic.
+       TREE_OVERLOADED should probably go, too.
+
+Mon Mar 28 14:00:45 1994  Ron Guilmette  <rfg@netcom.com>
+
+       * typeck.c (comp_target_types): Call comp_target_parms with
+       strict == 1.
+
+Sun Mar 27 00:07:45 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (empty_parms): Don't parse () as (...) in extern "C"
+       sections if we're compiling with -ansi or -pedantic.
+
+       * decl.c (decls_match): Don't treat (int) and (int&) as matching.
+
+       * decl2.c (grokfield): Don't pedwarn twice about initializing
+       field.
+
+       * decl.c (push_overloaded_decl): Warn about shadowing
+       constructor.
+       (redeclaration_error_message): Don't allow 'int a; int a;'
+
+       * cvt.c (build_up_reference): Only check for valid upcast if
+       LOOKUP_PROTECT is set, not just any flag.
+
+Fri Mar 25 01:22:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (check_newline): When we see a #pragma implementation,
+       also set it for the main input file.
+
+       * init.c (build_new): Convert array size argument to size_t.
+
+       * parse.y (primary): If we're doing a parenthesized type-id, call
+       groktypename before passing it to build_new.
+
+       * call.c (build_method_call): Deal properly with const and
+       volatile for instances of reference type.
+
+       * decl.c (store_return_init): Change 'if (pedantic) error' to 'if
+       (pedantic) pedwarn'.
+
+       * decl.c (grokdeclarator): Don't complain about putting `static'
+       and `inline' on template function decls.
+
+Thu Mar 24 23:18:19 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Preserve const & volatile on
+       `this'.
+
+Thu Mar 24 16:21:52 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (build_new, build_vec_delete): Use global new and delete
+       for arrays. 
+       * decl2.c (delete_sanity): Likewise.
+
+Thu Mar 24 02:10:46 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): If i is an lvalue,
+       (int &)i -> *(int*)&i, as per 5.2.8p9 of the latest WP.
+       (convert_force): Call convert_to_reference with LOOKUP_COMPLAIN.
+
+Wed Mar 23 17:45:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (duplicate_decls): Also propagate DECL_TEMPLATE_MEMBERS
+       and DECL_TEMPLATE_INSTANTIATIONS.
+
+       * init.c (build_new): Handle array typedefs properly.
+
+Wed Mar 23 18:23:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       30th Cygnus<->FSF merge.
+
+Wed Mar 23 00:46:24 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (modify_vtable_entries): Avoid running off the end of the
+       virtuals list when processing a virtual destructor.
+       * class.c (get_vtable_entry): Likewise.
+
+Wed Mar 23 00:23:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (duplicate_decls): If two template decls don't match,
+       just return 0.
+
+Tue Mar 22 23:49:41 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (convert_for_assignment): Don't pedwarn about
+       converting function pointer to void *.
+
+Tue Mar 22 22:23:19 1994  Mike Stump  <mrs@cygnus.com>
+
+       Major revamp of pointer to member functions.  Cures major
+       nonfunctionality when used in casts, and MI situations.
+
+       * cvt.c (convert_force): Update call site of build_ptrmemfunc.
+       * typeck.c (convert_for_assignment): Likewise.
+       * typeck2.c (digest_init): Likewise.
+       * typeck2.c (process_init_constructor): Simplify by moving code into
+       digest_init.
+       * typeck2.c (digest_init): Do default_conversions on init value, if
+       we are processing pointer to member functions.
+       * class.c (get_vfield_offset): Now non-static.  Convert bit offset
+       into byte offset.
+       * cp-tree.h (get_vfield_offset): Likewise.
+       * typeck.c (get_member_function_from_ptrfunc): Convert down to right
+       instance, before fetching vtable pointer.
+       * typeck.c (get_delta_difference): New routine.
+       * typeck.c (build_ptrmemfunc): Revamp to handle casting better, also
+       get vtable pointer out of right subobject.
+
+Tue Mar 22 17:56:48 1994  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (get_binfo): Return NULL instead of aborting, when
+       passed a UNION_TYPE.
+
+Tue Mar 22 12:44:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       These patches implement handling of redefinition/redeclaration of
+       templates.
+
+       * typeck.c (comptypes): Simplify.  All TEMPLATE_TYPE_PARMs are
+       considered compatible.
+
+       * parse.y (template_def): Pass defn argument to end_template_decl.
+
+       * pt.c (end_template_decl): Add defn argument.  Check for
+       redefinition.  Simplify.
+
+       * error.c (OB_UNPUT): New macro, to remove mistakes.
+       (aggr_variety): Subroutine of dump_aggr_type.
+
+       * decl.c (decls_match): Support templates.
+       (duplicate_decls): No longer static.  Don't try to lay out template
+       decls.
+       (pushdecl): Simplify.
+
+       * cp-tree.h (DECL_TEMPLATE_MEMBERS): Use DECL_SIZE instead of
+       DECL_INITIAL.
+
+Mon Mar 21 11:46:55 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_decl): Support class template decls.
+       (dump_type): Don't adorn template type parms.
+
+       * decl.c (duplicate_decls): Save DECL_TEMPLATE_INFO from old decl
+       if it was a definition.
+       (redeclaration_error_message): Do the cp_error thang, and reject
+       redefinition of templates.
+
+Mon Mar 21 19:36:06 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (grokdeclarator):  Set TREE_PUBLIC for METHOD_TYPE
+       in FIELD context, when appropriate.  Also,
+       CLASSTYPE_INTERFACE_ONLY is irrelevant to setting TREE_PUBLIC.
+       Also, simplify check for bogus return specifiers.
+
+Mon Mar 21 11:46:55 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (after_type_declarator1): Expand type_quals.
+       (notype_declarator1): Likewise.
+       (absdcl1): Likewise.
+
+Sat Mar 19 01:05:17 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Treat class-local typedefs like static
+       members; i.e. 'typedef int f();' means that f is a function type,
+       not a method type.
+
+       * parse.y (decl): Change direct_* back to *.
+       (type_id): Change direct_abstract_declarator to absdcl.
+       (direct_declarator, direct_initdecls, direct_initdcl0): Remove again.
+
+Fri Mar 18 12:47:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       These two patches fix crashes on instantiating a template inside a
+       function with C linkage or containing labels.
+
+       * class.c (current_lang_stacksize): No longer static.
+
+       * decl.c (struct saved_scope): Add lang_base, lang_stack,
+       lang_name, lang_stacksize, and named_labels.
+       (push_to_top_level): Save them.
+       (pop_from_top_level): Restore them.
+
+       * gxxint.texi (Parser): Update.
+
+       These two patches finish moving the task of expr/declarator
+       ambiguity resolution from the lexer to the parser, and add one more
+       r/r conflict.  START_DECLARATOR can now be nuked.
+
+       * parse.y (decl): Add "direct_" in typespec X rules.
+       (direct_declarator): New nonterminal for
+       direct_after_type_declarator and direct_notype_declarator.
+       (direct_initdecls): Like initdecls, but uses direct_initdcl0.
+       (direct_initdcl0): Like initdcl0, but uses direct_declarator.
+       (named_parm): Add typespec direct_declarator rule.
+
+       * spew.c (yylex): #if 0 out START_DECLARATOR insertion.
+
+       These two patches disable some excessive cleverness on the part of
+       g++; a non-class declaration always hides a class declaration in the
+       same scope, and g++ was trying to unhide it depending on the
+       enclosing expression.
+
+       * spew.c (arbitrate_lookup): #if 0 out.
+
+       * decl.c (lookup_name): Never call arbitrate_lookup.
+
+       * parse.y (complex_notype_declarator1): Add '*'
+       complex_notype_declarator1 and '&' complex_notype_declarator1 rules.
+
+       * parse.y (complex_direct_notype_declarator): Restore id_scope
+       see_typename TYPENAME rule, remove all other rules beginning with
+       those tokens.
+       (notype_unqualified_id): Add '~' see_typename IDENTIFIER rule.
+
+Thu Mar 17 17:30:01 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       These changes fix the compiler's handling of the functional cast/
+       object declaration ambiguities in section 6.8 of the ARM.  They also
+       add 11 reduce/reduce conflicts.  Sigh.
+
+       * parse.y: Add precedence decls for OPERATOR and '~'.
+       (notype_unqualified_id): New nonterminal, encompasses all of the
+       ANSI unqualified-id nonterminal except TYPENAMEs.
+       (expr_or_declarator): New nonterminal to delay parsing of code like
+       `int (*a)'.
+       (primary): Use notype_unqualified_id.
+       (decl): Add typespec initdecls ';' and typespec declarator ';'
+       rules.
+       (initdcl0): Deal with the above.
+       (complex_notype_declarator1): A notype_declarator that is not also
+       an expr_or_declarator.
+       (complex_direct_notype_declarator): A direct_notype_declarator that
+       doesn't conflict with expr_or_declarator.  Use
+       notype_unqualified_id.  Remove id_scope see_typename TYPENAME rule.
+       (functional_cast): New nonterminal, for the three functional cast
+       rules.  So that they can be moved after
+       complex_direct_notype_declarator.
+       (see_typename): Don't accept type_quals any more.
+
+       * decl2.c (reparse_decl_as_expr): New function to deal with parse
+       nodes for code like `int (*a)++;'.      
+       (reparse_decl_as_expr1): Recursive subroutine of the above.
+       (finish_decl_parsing): New function to deal with parse nodes for
+       code like `int (*a);'.  See the difference?
+
+Thu Mar 17 12:16:10 1994  Mike Stump  <mrs@cygnus.com>
+
+       These changes break binary compatibility in code with classes
+       that use virtual bases.
+
+       * search.c (dfs_get_vbase_types): Simplify and correct to make
+       sure virtual bases are initialized in dfs ordering.
+       * search.c (get_vbase_types): Simplify and make readable.
+
+Thu Mar 17 12:01:10 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y: s/ typename / type_id /g
+
+Wed Mar 16 17:42:52 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * parse.y (typespec): add SCOPE TYPENAME for global scoped 
+       type. e.g. ::B x.
+
+       * decl.c (complete_array_type): fix a bug that in -pendantic
+       mode even there's no initializer, it will continue to build
+       default index.
+
+Wed Mar 16 17:43:07 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (direct_notype_declarator): Add PTYPENAME rule, remove
+       all of the scoped PTYPENAME rules.
+
+Wed Mar 16 16:39:02 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (build_offset_ref): The value of A::typedef_name is
+       always the TYPE_DECL, and never an error.
+
+Tue Mar 15 20:02:35 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (get_base_distance_recursive): Two binfos can only
+       represent the same object if they are both via_virtual.
+
+       * class.c (finish_base_struct): Check vbases for ambiguity, too.
+
+       * search.c (get_vbase_types): Accept binfo argument, too.
+
+Tue Mar 15 19:22:05 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * decl.c (complete_array_type): complete TYPE_DOMAIN of the 
+       initializer also, because back-end requires it.
+
+Tue Mar 15 15:33:31 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_expr): Support member functions (which show up as
+       OFFSET_REFs).
+
+Mon Mar 14 16:24:36 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (build_new): Set the return type of multidimensional
+       news correctly.
+
+Fri Mar 11 15:35:39 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * call.c (build_method_call): if basetype not equal to type
+       of the instance, use the type of the instance in building
+       destructor.
+
+Thu Mar 10 17:07:10 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * parse.y (direct_notype_declarator): add push_nested_type for
+       'template_type SCOPED_NAME' rule.
+
+Tue Mar  8 00:19:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (parm): Add typed_declspec1 {absdcl, epsilon} rules.
+
+Sat Mar  5 04:47:48 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (regcast_or_absdcl): New nonterminal to implement late
+       reduction of constructs like `int ((int)(int)(int))'.
+       (cast_expr): Use it.
+       (sub_cast_expr): Everything that can come after a cast.
+       (typed_declspecs1): typed_declspecs that are not typed_typespecs.
+       (direct_after_type_declarator): Lose PAREN_STAR_PAREN rule.
+       (direct_abstract_declarator): Replace '(' parmlist ')' rule with
+       '(' complex_parmlist ')' and regcast_or_absdcl.
+       (parmlist): Split
+       (complex_parmlist): Parmlists that are not also typenames.
+       (parms_comma): Enabler.
+       (named_parm): A parm that is not also a typename.  Use declarator
+       rather than dont_see_typename abs_or_notype_decl.  Expand
+       typed_declspecs inline.
+       (abs_or_notype_decl): Lose.
+       (dont_see_typename): Comment out.
+       (bad_parm): Break out abs_or_notype_decl into two rules.
+
+Fri Mar  4 18:22:39 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl2.c (reparse_decl_as_casts): New function to change parse
+       nodes for `(int)(int)(int)' from "function taking int and returning
+       function taking int and returning function taking int" to "... cast
+       to int, cast to int, cast to int".
+
+       * decl2.c (reparse_decl_as_expr): Recursive function to change
+       parse nodes for `A()()' from "function returning function returning
+       A" to "A().operator()".
+
+       * parse.y (primary): Replace `typespec LEFT_RIGHT' rule with
+       `typespec fcast_or_absdcl' rule.
+       (fcast_or_absdcl): New nonterminal to implement late reduction of
+       constructs like `A()()()()'.
+       (typename): Replace `typespec absdcl1' rule with
+       `typespec direct_abstract_declarator' rule.
+       (direct_abstract_declarator): Replace `LEFT_RIGHT type_quals' rule
+       with `fcast_or_absdcl type_quals' rule.
+
+Fri Mar  4 16:18:03 1994  Mike Stump  <mrs@cygnus.com>
+
+       * tree.c (lvalue_p): Improve OFFSET_REF handling, so that it
+       matches Section 5.5.
+
+Fri Mar  4 14:01:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * error.c (dump_type_prefix): Don't print basetype twice for
+       pmfs.
+
+Fri Mar  4 13:24:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       * typeck.c (convert_arguments): Handle setHandler(A::handlerFn)
+       so that it is like setHandler(&A::handlerFn).  Cures an `invalid
+       lvalue in unary `&''.
+
+Fri Mar  4 11:15:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * gxxint.texi (Copying Objects): New section discussing default
+       op= problems with virtual inheritance.
+
+       * decl2.c (grokoptypename): Just does grokdeclarator and
+       build_typename_overload, since the parser can't call grokdeclarator
+       directly.
+
+       * method.c (build_typename_overload): Set IDENTIFIER_GLOBAL_VALUE
+       and TREE_TYPE on generated identifiers.
+
+       * decl.c (grokdeclarator): Don't deal with TYPE_EXPRs anymore.
+
+       * parse.y (parm): Convert `const char *' to `__opPCc' here.
+
+       * error.c (dump_decl): Say sorry rather than my_friendly_aborting
+       if we can't figure out what to do.
+       (dump_type*): Likewise.
+
+       * typeck2.c (build_m_component_ref): 'component' is an expr, not
+       a decl.  Also move the IS_AGGR_TYPE check after the stripping of
+       REFERENCE_TYPE.
+
+Fri Mar  4 04:46:05 1994  Mike Stump  <mrs@cygnus.com>
+
+       * call.c (build_method_call): Handle b->setHandler(A::handlerFn)
+       so that it is like b->setHandler(&A::handlerFn).  Cures an `invalid
+       lvalue in unary `&''.
+
+Thu Mar  3 12:38:15 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y: Add precedence specification for START_DECLARATOR.
+       (type_quals): Move before primary.
+       (typename): Move before typed_declspecs, add 'typespec absdcl1' rule.
+
+       * decl2.c (grokoptypename): Lose.
+
+       * decl.c (grokdeclarator): Parse TYPE_EXPRs in the initial scan,
+       rather than waiting until later.
+
+Wed Mar  2 14:12:23 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (unary_expr): Use 'typename' in 'new' rules, rather
+       than expanding it inline.
+       (typename): Expand empty option of (former) absdcl inline.
+       (abs_or_notype_decl): Likewise.
+       (absdcl): Lose empty rule.
+       (conversion_declarator): New nonterminal for 'typename' of 'operator
+       typename'.
+       (operator_name): Use it instead of absdcl.
+
+       * parse.y: Add precedence declarations for SCOPED_TYPENAME,
+       TYPEOF, and SIGOF.
+       (typed_declspecs): Accept typed_typespecs, rather than typespec
+       directly.  Add rules with reserved_typespecquals.
+       (reserved_declspecs): Don't accept typespecqual_reserved at the
+       beginning of the list.  The typed_declspecs rule will deal with this
+       omission.
+       (declmods): Accept nonempty_type_quals, rather than TYPE_QUAL
+       directly.
+
+       * parse.y (direct_notype_declarator,
+       direct_after_type_declarator, direct_abstract_declarator): Split up
+       the declarator1 nonterminals to match the draft standard and avoid
+       ambiguities.
+       (new_type_id, new_declarator, direct_new_declarator,
+       new_member_declarator): New nonterminals to implement the subset of
+       'typename' allowed in new expressions.
+       (unary_expr): Use new_type_id instead of typename.
+       (after_type_declarator1, absdcl1): Fix semantics of member pointers.
+       (abs_member_declarator, after_type_member_declarator): Lose.
+
+       * parse.y (absdcl1): Don't require parens around
+       abs_member_declarator.
+       (abs_member_declarator): Lose see_typename from rules.
+       (after_type_member_declarator): Likewise.
+
+       * tree.c (get_identifier_list): New function, containing code
+       previously duplicated in get_decl_list and list_hash_lookup_or_cons.
+       (get_decl_list): Use it.
+       (list_hash_lookup_or_cons): Likewise.
+
+       * parse.y (typed_declspecs, declmods): It's not necessary to hash
+       the declspecs on class_obstack, so don't.  This way typed_typespecs
+       can reduce to typed_declspecs.
+
+Wed Mar  2 14:29:18 1994  Jason Merrill <jason@cygnus.com>
+
+       * cvt.c (build_up_reference): If we aren't checking visibility,
+       also allow base->derived conversions.
+
+Mon Feb 28 15:14:29 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * typeck.c (build_c_cast): Remove bogus hack when converting
+       to a reference type.
+
+       * cp-tree.h (lang_decl::vbase_init_list, DECL_VBASE_INIT_LIST):
+       Removed, not used.
+       (lang_stype::methods, lang_decl::next_method): New fields.
+       (CLASSTYPE_METHODS, DECL_NEXT_METHOD):  New macros.
+       * decl.c (duplicate_decls):  Preserve DECL_NEXT_METHOD.
+
+       * cp-tree.h, decl2.c (flag_vtable_hack):  New flag.
+       * decl2.c (finish_vtable_vardecl):  If flag_vtable_hack,
+       and  !CLASSTYPE_INTERFACE_KNOWN, try to use the presence of
+       a non-inline virtual function to control emitting of vtables.
+       * class.c (finish_struct):  Build CLASSTYPE_METHODS list.
+       * search.c (build_vbase_vtables_init):  Don't assemble_external
+       (yet) if flag_vtable_hack.
+       * class.c (build_vfn_ref):  Likewise.
+
+Mon Feb 28 14:54:13 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (component_decl): Don't include "typed_declspecs
+       declarator ';'" speedup, since it breaks enums.
+
+Fri Feb 25 15:43:44 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * class.c (finish_struct):  Minor optimization for building
+       fn_fields list.
+
+Fri Feb 25 15:23:42 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (start_function): Fix detection of function overloading.
+
+Thu Feb 24 22:26:19 1994  Mike Stump  <mrs@cygnus.com>
+
+       * lex.c (check_newline): #pragma interface can take a string
+       argument, just like #pragma implementation.  #pragma implementation
+       checks for garbage on the line, line #pragma interface does.  Main
+       input files do not auto implement like named files, #pragma
+       implementation must be used explicitly.
+
+Thu Feb 24 17:09:01 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y (components): Handle list of one again.
+       (notype_components): Likewise.
+       (after_type_declarator1): Take maybe_raises out again.
+
+       * gxxint.texi (Parser): Document additional r/r conflict.
+
+Wed Feb 23 14:42:55 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * gxxint.texi (Parser): Add node.
+
+       * Makefile.in (stamp-parse): Update expected conflict count.
+
+       * parse.y (various): Replace "declmods declarator" with "declmods
+       notype_declarator".  The comment saying that "declmods declarator ';'"
+       corresponds to "int i;" was wrong; it corresponds to "const i;".
+       (component_decl): Add "typed_declspecs declarator ';'" rule; this
+       *does* correspond to "int i;".  Change "declmods components" to
+       "declmods notype_components".
+       (components): Don't deal with a list of one anymore.
+       (notype_components): New nonterminal, corresponds to notype_declarator.
+       ({after_,no}type_component_decl{,0}): More new nonterminals.
+       ({after_,no}type_declarator): Fold in START_DECLARATOR token.
+       Eliminates four reduce/reduce conflicts.
+
+       (expr): Depend on nontrivial_exprlist instead of nonnull_exprlist.
+       (nontrivial_exprlist): New nonterminal: A list of at least two
+       expr_no_commas's.
+       (nonnull_exprlist): Depend on nontrival_exprlist.
+       Eliminates four reduce/reduce conflicts.
+
+       (named_class_head): Move intermediate code block into separate
+       nonterminal so that we can stick %prec EMPTY on it.
+
+       Add more %prec EMPTY's to eliminate remaining shift/reduce
+       conflicts.
+
+       (after_type_declarator): Add maybe_raises to fndecl rules.
+       (after_type_declarator_no_typename): Remove.
+       For correctness.
+
+       Document remaining reduce/reduce conflicts.
+
+Tue Feb 22 12:10:32 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (get_base_distance): Only bash BINFO_INHERITANCE_CHAIN
+       (TYPE_BINFO (type)) if we care about the path.
+
+       * tree.c (lvalue_p): A COND_EXPR is an lvalue if both of the
+       options are.
+
+Mon Feb 21 19:59:40 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Makefile.in (mostlyclean): lex.c is a source file, don't
+       remove.
+
+Sat Feb 19 01:27:14 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * parse.y: Eliminate 20 shift/reduce conflicts.
+
+Fri Feb 18 11:49:42 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (type_unification): Add subr argument; if set, it means
+       that we are calling ourselves recursively, so a partial match is OK.
+       (unify): Support pointers to methods and functions.
+       (tsubst): Support method pointers.
+       * decl.c (build_ptrmemfunc_type): No longer static, so that
+       tsubst can get at it.
+
+       * init.c (is_aggr_typedef): Pretend template type parms are
+       aggregates.
+       * decl2.c (build_push_scope): If cname refers to a template type
+       parm, just grin and nod.        
+
+       * call.c (build_overload_call_real): Pass subr argument to
+       type_unification.
+       * pt.c (do_function_instantiation): Likewise.
+       * class.c (instantiate_type): Likewise.
+
+       * search.c (get_base_distance): If BINFO is a binfo, use it and
+       don't mess with its BINFO_INHERITANCE_CHAIN.
+
+       * cvt.c (convert_to_reference): Fix temporary generation.
+       If ambiguous, return error_mark_node.
+
+       * init.c (build_new): Put back some necessary code.
+
+Thu Feb 17 15:39:47 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_new): Deal with array types properly.
+
+       * search.c (get_binfo): Become a shell for get_base_distance.
+       (get_binfo_recursive): Lose.
+       (get_base_distance_recursive): Find the path to the via_virtual base
+       that provides the most access.
+       (get_base_distance): Likewise.
+
+       * parse.y (explicit_instantiation): Syntax is 'template class
+       A<int>', not 'template A<int>'.
+
+       * typeck.c (convert_for_initialization): Remove bogus warning.
+
+       * parse.y (datadef): Revert patch of Oct 27.
+
+Thu Feb 17 15:12:29 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * class.c (build_vfn_ref):  Cast delta field to ptrdiff_type_node,
+       rather than integer_type_node.  Does wonders for the Alpha.
+
+Thu Feb 17 13:36:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (build_ptrmemfunc_type): Make sure that the pmf type
+       goes onto the same obstack as its target type.
+
+Wed Feb 16 00:34:46 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cvt.c (convert_to_reference): If converting via constructor
+       on local level, go back to build_cplus_new approach.
+
+       * tree.c (build_cplus_new): If with_cleanup_p, set cleanup slot
+       to error_mark_node to prevent expand_expr from building a cleanup
+       for this variable.
+
+       * lex.c (default_assign_ref_body): Return *this from the memcpy
+       version, too.
+
+       * decl.c (grok_reference_init): Just return if called with
+       error_mark_node, don't worry about initializing non-const reference
+       with temporary.
+
+       * cvt.c (convert_to_reference): Do the right thing for
+       non-aggregate reference conversions, pedwarn when generating a
+       non-const reference to a temporary.
+
+       * class.c (finish_struct): TYPE_HAS_COMPLEX_{INIT,ASSIGN}_REF and
+       TYPE_NEEDS_CONSTRUCTING all depend on TYPE_USES_VIRTUAL_BASECLASSES
+       again.
+
+Tue Feb 15 19:47:19 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_reference_init): Pawn off a lot of the work on
+       convert_to_reference.  Generally do the right thing.
+
+       * cvt.c (convert_to_reference): Conform to the initial comment;
+       i.e. don't create temps if decl != error_mark_node.  Handle
+       cleanups better for temps that do get created.  Don't pretend
+       that we can use an 'A' to initialize a 'const double &' just by
+       tacking on a NOP_EXPR.  Support LOOKUP_SPECULATIVELY.
+
+       * call.c (build_method_call): Set TREE_HAS_CONSTRUCTOR on
+       constructor calls.      
+
+Mon Feb 14 14:50:17 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grok_reference_init): Make a temporary for initializing
+       const reference from constant expression.
+
+Mon Feb 14 11:31:31 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * cp-tree.h, decl.c (set_identifier_local_value):  Deleted function.
+       * decl.c (pushdecl):  Define decl in correct binding_level
+       (which isn't always the inner_binding_level).
+
+       * cvt.c (build_up_reference):  Don't ever call expand_aggr_init.
+       It's ugly, and I don't think it's the right thing to do.
+
+       * cp-tree.h, class.c, decl.c, decl2.c, sp/search.c: 
+       Remove NEW_CLASS_SCOPING, assuming it is always 1.
+       * decl.c (pop_decl_level):  Removed; manually inlined.
+
+Sun Feb 13 19:04:56 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.h (candidate): Add basetypes field.
+
+       * call.c (build_method_call): Do access checking after choosing a
+       function, not before.
+
+       * Makefile.in (cvt.o, call.o, method.o): Depend on class.h.
+       (mostlyclean): Remove ../cc1plus.
+
+Fri Feb 11 11:52:26 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Don't allow adjusting access to a field
+       of a base class if a local field has the same name.
+
+       * error.c (dump_type_prefix): Output basetype for METHOD_TYPEs.
+
+hu Jan 13 17:55:51 EST 1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
+
+           * cp-tree.h (DESTRUCTOR_NAME_P): do not confuse AUTO_TEMP names
+           with destructor names when either NO_DOLLAR_IN_LABEL or
+           NO_DOT_IN_LABEL are not defined.
+
+           Now `template <class T, T f(T&), const T*> class A {...}' works.
+
+           * pt.c (grok_template_type): substitute template parm types
+           with actual types in complex type as well.
+           (coerce_template_parms): update the grok_template_type ()
+           function call.
+
+       * pt.c (tsubst): Traverse method list using DECL_CHAIN.
+
+       * decl.c (grok_op_properties): Allow operator++/-- to have
+       default arguments.
+
+       * typeck2.c (store_init_value): Don't abort when called to
+       initialize a type that needs constructing with a CONSTRUCTOR.
+
+       * init.c (expand_aggr_init_1, CONSTRUCTOR case): If
+       store_init_value fails, build and expand an INIT_EXPR.  If
+       store_init_value succeeds, call expand_decl_init.
+
+Fri Feb 11 02:49:23 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (build_vbase_path): Use complete_type_p instead of
+       resolves_to_fixed_type_p to determine if the virtual bases are in
+       their right place for the type of expr.  Cures problem of thinking a
+       virtual base class is one place, when it is in fact someplace else.
+
+Fri Feb 11 00:26:46 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (resolve_offset_ref): Make sure we first convert to
+       intermediate type, if given, when dealing with members off `this'.
+       Solves an incorrrect `type `foo' is not a base type for type
+       `multiple'' when it is infact, a base type.
+
+Thu Feb 10 21:49:35 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (modify_other_vtable_entries): Use get_binfo, instead
+       of binfo_value.  Solves problem with compiler giving a `base class
+       `B' ambiguous in binfo_value (compiler error)' on complex MI
+       herarchies, when a virtual function is first defied in a virtual
+       base class.
+
+Thu Feb 10 17:19:32 1994  Mike Stump  <mrs@cygnus.com>
+
+       * class.c (build_vbase_path): Don't complain about ambiguous
+       intermediate conversion when converting down to a virtual base
+       class, even if they might seem to be ambiguous.
+
+Thu Feb 10 12:18:26 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck2.c (build_functional_cast): #if 0 out constructor
+       inheritance code, improve error messages.
+
+       * class.c (finish_base_struct): Complain about base with only
+       non-default constructors in derived class with no constructors.
+
+       * decl.c (grokdeclarator): Fix detection of virtual new/delete.
+
+Wed Feb  9 22:02:32 1994  Mike Stump  <mrs@cygnus.com>
+
+       * search.c (build_mi_virtuals, add_mi_virtuals,
+       report_ambiguous_mi_virtuals): Removed unneeded code.
+       * class.c (finish_struct_bits): Likewise.
+
+Wed Feb  9 11:27:17 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * pt.c (end_template_instantiation): Push decl before
+       pop_from_top_level.
+
+       * typeck2.c (build_m_component_ref): Make sure datum is of
+       aggregate type.
+
+       * init.c (get_type_value): New function, returns
+       IDENTIFIER_TYPE_VALUE or IDENTIFIER_CLASS_TYPE_VALUE or NULL_TREE.
+
+       * call.c (build_method_call): Don't die on call to destructor for
+       non-type.
+
+       * decl.c (grokdeclarator): Complain about virtual op new and op
+       delete, make static virtuals unvirtual instead of unstatic.
+
+       * typeck.c (build_c_cast): Also call default_conversion on
+       methods.
+
+       * decl.c (grokdeclarator): Don't complain about anonymous
+       bitfields.
+
+       * parse.y (simple_stmt, for loops): Move the continue point after
+       the cleanups.
+
+       * class.c (finish_struct): Fix setting of
+       TYPE_HAS_COMPLEX_INIT_REF.
+
+Tue Feb  8 13:21:40 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * init.c (build_new): Deal with `new double (1)'.
+
+       * class.c (finish_struct): TYPE_HAS_COMPLEX_*_REF are supersets of
+       TYPE_HAS_REAL_*_REF, but TYPE_HAS_COMPLEX_INIT_REF is independent of
+       TYPE_NEEDS_CONSTRUCTING.
+
+       * decl.c (duplicate_decls): Propagate access decls.
+
+       * typeck2.c (process_init_constructor): Accept empty_init_node
+       for initializing unions.
+
+       * class.c, lex.c, cp-tree.h: Use
+       TYPE_HAS_COMPLEX_ASSIGN_REF where TYPE_HAS_REAL_ASSIGN_REF was used
+       before, use TYPE_HAS_COMPLEX_INIT_REF for TYPE_NEEDS_CONSTRUCTING in
+       some places.
+
+       * decl.c (finish_decl): Don't complain about uninitialized const
+       if it was initialized before.
+
+Mon Feb  7 18:12:34 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * lex.c (default_assign_ref_body): Don't deal with vbases for
+       now.
+
+       * decl.c (finish_decl): Fix reversed logic for objects and other
+       things that need to be constructed but have no initializer.
+
+       * class.c (finish_struct): Don't set TYPE_HAS_* flags that are
+       set by grok_op_properties or finish_decl.
+
+       * decl.c: Don't warn about extern redeclared inline unless
+       -Wextern-inline is given.
+       * decl2.c (lang_decode_option): Likewise.
+       * cp-tree.h: Likewise.
+
+Mon Feb  7 17:29:24 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (pushdecl_with_scope): Fix thinko.  Add forward
+       declaration.
+
+       * decl.c (pushdecl_with_scope):  New function.
+       * decl.c (pushdecl_top_level):  Use new function.
+       * decl.c (pushtag):  Initialize newdecl.
+       * decl.c (pushtag):  Push new type decl into correct scope.
+
+Mon Feb  7 14:42:03 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c, cvt.c, init.c, search.c, cp-tree.h:
+       Eradicate LOOKUP_PROTECTED_OK.
+
+Mon Feb  7 13:57:19 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * decl.c (pushtag, xref_tag), cp-tree.h:  Add extra parameter
+        'globalize' to signify implicit declarations.
+       * decl.c (globalize_nested_type, maybe_globalize_type):  Removed.
+       * decl.c (set_identifier_type_value_with_scope):  New function.
+       * decl.c (set_identifier_local_value):  Simplify.
+       * spew.c (yylex, do_addr):  Modify to return a _DEFN if a
+       forward declaration (followed by ';' and not preceded by 'friend').
+       * class.c, decl.c, except.c, init.c, parse.y,
+       pt.c, search.c: Add new argument to calls to xref_tag and
+       pushtag.
+
+Mon Feb  7 00:22:59 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.h (ACCESSIBLY_UNIQUELY_DERIVED_P): New macro, means what
+       ACCESSIBLY_DERIVED_FROM_P meant before.
+       (ACCESSIBLY_DERIVED_FROM_P): Now disregards ambiguity.
+
+       * cvt.c (build_up_reference): Call get_binfo with PROTECT == 1.
+
+       * search.c (get_base_distance_recursive): Members and friends of
+       a class X can implicitly convert an X* to a pointer to a private or
+       protected immediate base class of X.
+       (get_binfo_recursive): Likewise.
+       (get_base_distance): Ignore ambiguity if PROTECT < 0.
+       (get_binfo): Lose multiple values of PROTECT.
+       (compute_access): Protected is OK if the start of the
+       search is an accessible base class of current_class_type.
+
+       * method.c (build_opfncall): Do check access on operator new here.
+
+       * decl.c (finish_function): Don't check access on operator new
+       here.
+
+Sun Feb  6 14:06:58 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (xref_tag): The base of a derived struct is NOT always
+       public.  Duh.
+
+       * pt.c (do_explicit_instantiation): New function, called from
+       parser to do explicit function instantiation.
+       (type_unification): Allow the args list to be terminated with
+       void_list_node.
+       (do_pending_expansions): Look at i->interface for non-member
+       templates.
+
+       * parse.y (datadef): Move explicit_instantiation here.
+       (structsp): From here.
+       (datadef): Complain about `int;'.
+
+Sun Feb  6 12:33:18 1994  Per Bothner  <bothner@kalessin.cygnus.com>
+
+       * pt.c (end_template_instantiation), cp-tree.h:  Remove unused
+       second parameter, and simplify first from a TREE_LIST where
+       we only care about its TREE_VALUE to just the value (an IDENTIFIER).
+       * pt.c (instantiate_member_templates):  Simplify argument list
+       from a TREE_LIST to just an IDENTIFIER.
+       * lex.c (yyprint):  PRE_PARSED_CLASS_DECL is now just an IDENTIFIER.
+       * parse.y (template_instantiate_once):  Simplify accordingly.
+       * decl.c (inner_binding_level): New.  Use various places to
+       simplify.
+
+Sun Feb  6 02:49:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck2.c (build_functional_cast): int() -> int(0).
+
+Sat Feb  5 00:53:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Don't do a bitwise copy for op= if the
+       class has a virtual function table.
+
+       * typeck.c (convert_for_initialization): Restore warnings about
+       not using defined op=.  Should really be my_friendly_aborts, I
+       s'pose.
+
+Fri Feb  4 14:21:00 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Tidy up conditions for doing bitwise
+       copies of objects.
+
+       * decl.c (build_default_constructor): #if 0 out.
+
+       * *: Eradicate TYPE_GETS_{ASSIGNMENT,ASSIGN_REF,CONST_ASSIGN_REF,
+       CONST_INIT_REF}, TYPE_HAS_REAL_CONSTRUCTOR.
+
+       * decl.c (grokdeclarator): Don't return void_type_node for
+       friends being defined here.
+
+       * init.c (perform_member_init): Only do the init if it's useful.
+
+       * lex.c (default_copy_constructor_body): If we don't need to do
+       memberwise init, just call __builtin_memcpy.
+       (default_assign_ref_body): Likewise.
+
+       * decl.c (grokdeclarator): If friendp && virtualp, friendp = 0.
+
+Fri Feb  4 13:02:56 1994  Mike Stump  <mrs@cygnus.com>
+
+       * lex.c (reinit_parse_for_method, cons_up_default_function):
+       Don't give warn_if_unknown_interface warning when it came from a
+       system header file.
+       * pt.c (end_template_decl, instantiate_template): Likewise.
+       * decl.c (start_decl): Likewise.
+
+Fri Feb  4 00:41:21 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't try to set TYPE_WAS_ANONYMOUS on
+       enums.
+
+       * decl2.c (constructor_name_full): Use IS_AGGR_TYPE_CODE instead of
+       IS_AGGR_TYPE, since we don't know it's a type.
+
+Thu Feb  3 11:36:46 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokdeclarator): Don't complain about anonymous unions.
+
+       * cp-tree.h (TYPE_WAS_ANONYMOUS): This struct was originally
+       anonymous, but had a name given to it by a typedef.
+
+       * decl.c (grokdeclarator): When renaming an anonymous struct, set
+       TYPE_WAS_ANONYMOUS.
+
+       * decl2.c (constructor_name_full): Use TYPE_WAS_ANONYMOUS.
+
+       * cp-tree.h (DECL_UNDEFINED_FRIENDS): #if 0 out.
+
+       * init.c (xref_friend): Don't set up DECL_UNDEFINED_FRIENDS.
+       (embrace_waiting_friends): Don't use DECL_UNDEFINED_FRIENDS.
+       
+       * decl.c (grokdeclarator): Set TYPE_NESTED_NAME properly on nested
+       anonymous structs that get typedef'd.
+
+       * decl.c (grokdeclarator): Always return void_type_node for
+       friends.
+
+       * error.c (dump_function_decl): Don't use DECL_CLASS_CONTEXT for
+       friends.
+       (dump_function_decl): Don't print out default args for
+       a function used in an expression.
+
+       * decl.c (grokdeclarator): Give error on abstract declarator used
+       in an invalid context (i.e. `void (*)();').
+
+       * error.c (cp_line_of): Support _TYPE nodes.
+       (cp_file_of): Likewise.
+
+       * cvt.c (build_up_reference): Don't abort if passed a SAVE_EXPR;
+       it can happen for the RHS of an assignment stmt where the LHS is
+       a COND_EXPR.
+
+       * init.c (expand_aggr_init_1): Deal with bracketed initializer
+       lists properly.
+
+       * class.c (finish_struct): Deal with enumerators and typedefs
+       again.
+
+Wed Feb  2 11:30:22 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Tidy up loop over fields.
+
+       * errfn.c (cp_thing): Don't advance twice after a format.
+
+       * class.c (finish_struct): Complain about needing a constructor
+       if a member has only non-default constructors, and don't try to
+       generate a default constructor.
+
+       * decl.c (finish_decl): Also do the constructor thing if
+       TYPE_NEEDS_CONSTRUCTING is set (for arrays).
+
+       * search.c (unuse_fields): New function: mark all fields in this
+       type unused.
+       (dfs_unuse_fields): Helper function.
+
+       * class.c (pushclass): If the new class is the same as the old
+       class, still unuse the fields.
+       (unuse_fields): Move to search.c.
+
+       * decl.c (grok_op_properties): Add friendp argument.
+       (grokfndecl): Pass it.
+       (start_method): Likewise.
+
+       * decl2.c (delete_sanity): Add use_global_delete parameter to catch
+       ::delete calls.
+
+       * parse.y (unary_expr): Pass new parameter to delete_sanity.
+
+       * lex.c (default_copy_constructor_body): Don't choke if the union
+       has no fields.
+       (default_assign_ref_body): Likewise.
+
+       * call.c (compute_conversion_costs_ansi): Do the right thing for
+       ellipsis matches.
+
+       * decl.c (push_to_top_level): Optimize.
+
+       * decl.c (start_function): Look for the lexical scope of a friend
+       in DECL_CLASS_CONTEXT.
+
+       * init.c (do_friend): Set DECL_CLASS_CONTEXT on global friends.
+
+Tue Feb  1 15:59:24 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.h (TREE_GETS_PLACED_NEW): New macro.
+
+       * init.c (init_init_processing): Don't assign BIN/BID to the
+       IDENTIFIER_GLOBAL_VALUEs of their respective operators.
+       (build_new): Check TREE_GETS_PLACED_NEW.
+
+       * decl.c (grok_op_properties): Don't set TREE_GETS_NEW for a decl of
+       op new with placement, set TREE_GETS_PLACED_NEW.
+
+       * cp-tree.h (ANON_UNION_P): New macro.  Applies to decls.
+
+       * class.c (finish_struct): Don't treat anonymous unions like
+       other aggregate members.  Do synthesize methods for unions without
+       a name, since they may or may not be "anonymous unions".
+
+       * decl2.c (grok_x_components): Wipe out memory of synthesized methods
+       in anonymous unions.
+
+       * lex.c (default_copy_constructor_body): Support unions.
+       (default_assign_ref_body): Likewise.
+
+Mon Jan 31 12:07:30 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.h: Fix documentation of LOOKUP_GLOBAL, add prototypes.
+
+       * error.c (args_as_string): New function (%A), like type_as_string
+       except NULL_TREE -> "..."
+
+       * call.c (build_overload_call_real): Fix for new overloading.
+
+       * decl.c (grok_op_properties): Set all of the TYPE_OVERLOADS_* flags
+       here.
+
+       * parse.y (operator_name): Instead of here.
+
+       * typeck2.c (build_functional_cast): Treat a TREE_LIST as a list
+       of functions.
+
+       * call.c (build_overload_call_real): Support LOOKUP_SPECULATIVELY.
+
+       * method.c (build_opfncall): Don't need to massage return value
+       any more, call build_overload_call with all flags.
+
+       * typeck.c (build_x_binary_op): Put back speculative call to
+       build_opfncall.
+       (build_x_unary_op): Likewise.
+       (build_x_conditional_expr): Likewise.
+
+Mon Jan 31 10:00:30 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (build_type_conversion_1): Change call to pedwarn into
+       warning, and conditionalize upon warn_cast_qual.
+
+Fri Jan 28 11:48:15 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * search.c (lookup_field): If xbasetype is a binfo, copy it to
+       avoid clobbering its inheritance info.
+
+       * call.c (build_method_call): Don't overwrite basetype_path with
+       TYPE_BINFO (inst_ptr_basetype) if they have the same type.
+
+       * search.c (compute_access): Fix handling of protected inheritance
+       and friendship with the enclosing class.
+
+       * typeck2.c (store_init_value): Allow passing of TREE_CHAIN for
+       initialization of arbitrary variable.
+
+       * typeck2.c (build_functional_cast): Only try calling a method if
+       one exists.
+
+       * decl.c (grokdeclarator): Move handling of constructor syntax
+       initialization into first loop for generality.
+       (parmlist_is_random): Lose.
+
+       * lex.c (cons_up_default_function): Set TREE_PARMLIST on arguments
+       to default function.
+
+Thu Jan 27 19:26:51 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (grokparms): Abort if we get called with something we don't
+       expect.
+
+Thu Jan 27 17:37:25 1994  Mike Stump  <mrs@cygnus.com>
+
+       * call.c (build_overload_call_real): Change argument complain to
+       flags to match style of rest of code.  Pass it down to
+       build_function_call_real as necessary.
+       * call.c (build_overload_call, build_overload_call_maybe): Change
+       argument complain to flags to match style of rest of code.
+       * cp-tree.h (build_function_call_real): Added fourth flags
+       argument.
+       * cvt.c (convert_to_reference): Only give warning messages, if
+       LOOKUP_COMPLAIN is set.
+       * typeck.c (build_x_function_call): Change simple complain
+       argument to build_overload_call_maybe and build_overload_call, to
+       LOOKUP_COMPLAIN to match style of rest of code.
+       * typeck2.c (build_functional_cast): Likewise.
+       * typeck.c (build_function_call_real): Add flags, so that we can
+       not complain, if we don't want to complain.  Complain about
+       arguments, if we are complaining, otherwise don't.
+       * typeck.c (build_function_call, build_function_call_maybe):
+       Stick in flags argument.
+       * typeck.c (build_x_binary_op, build_x_unary_op,
+       build_x_conditional_expr, build_x_compound_expr): Follow style of
+       build_x_indirect_ref, as it is more correct and more common.
+
+Thu Jan 27 14:36:20 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (build_method_call): Don't check for being called with
+       a pointer.
+
+       * decl2.c (finish_file): Don't play with DECL_CLASS_CONTEXT for the
+       static initializer function.
+
+       * init.c (build_member_call): Use convert_force here, too.
+
+       * search.c (compute_access): Only treat static members specially
+       if they are referenced directly.
+
+Wed Jan 26 18:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * gxxint.texi (Access Control): New node.
+
+       * search.c (current_scope): New function; returns whichever of
+       current_class_type and current_function_decl is the most nested.
+       (compute_access): Total overhaul to make it clearer and more
+       correct.  Don't use the cache for now; in the only situation where
+       it was used before, it gained nothing.  This frees up three of the
+       DECL_LANG_FLAGs for possible other use!
+
+       * cp-tree.h: #if 0 out DECL_PUBLIC & friends.
+
+       * typeck.c (build_component_ref_1): Don't check DECL_PUBLIC.
+
+       * call.c (build_method_call): Use convert_force to cast `this' --
+       rely on the access checking for the method itself.
+
+       * init.c (is_friend): Do the nesting thing, handle types.  I am
+       my own friend.
+       (is_friend_type): Become a shell for is_friend.
+       (add_friend): Never stick in ctype.
+       Why are the friendship functions in init.c, anyway?
+
+Wed Jan 26 17:50:00 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (build_type_conversion_1): Don't conditionalize call to
+       pedwarn upon pedantic.
+
+Wed Jan 26 17:20:46 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cvt.c (convert_to_reference): Add 8.4.3 checking so that one
+       gets a warning if one tries to initialize a non-const & from a
+       non-lvalue.
+       * cvt.c (convert_to_reference): Use %P format for argument
+       numbers in warnings.
+
+Wed Jan 26 14:35:06 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (build_delete): Follow style in call.c to construct the
+       virtual call to the desctructor, as that code is right.  Fixes a
+       problem of the compiler saying a pointer conversion is ambiguous.
+
+Wed Jan 26 11:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.h (VTABLE_NAME_P): Change other occurrence of
+       VTABLE_NAME_FORMAT to VTABLE_NAME.
+
+       * *: s/visibility/access/g
+
+Tue Jan 25 18:39:12 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_modify_expr): Don't smash references if INIT_EXPR.
+
+Tue Jan 25 13:54:29 1994  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (build_delete): Back out Jan 17th & 18th pacthes, as
+       they break libg++.
+
+Tue Jan 25 13:11:45 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * decl.c (duplicate_decls): Fix pointer arithmetic.
+
+Mon Jan 24 15:50:06 1994  Chip Salzenberg  <chip@fin.uucp>
+
+           [ cp-* changes propagated from c-* changes in 940114 snapshot ]
+           * cp-parse.y (maybe_attribute): Allow multiple __attribute__
+           clauses on a declaration.
+
+Mon Jan 24 17:06:23 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Do synthesize methods for anon
+       structs, just not unions.
+
+Mon Jan 24 13:50:13 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * decl.c (xref_tag): handle anonymous nested type.
+       * decl.c (globalize_nested_type): add no globalize bit check.
+       * spew.c (hack_more_ids) : templated nested decl not push top
+       level.
+
+       * parse.y : get rid of 'goto do_components'. It is much better
+       for debugging.
+
+       * decl.c (is_anon_name): get rid of the function and use the
+       macro ANON_AGGRNAME_P.
+       * pt.c : ditto.
+
+Fri Jan 21 14:06:02 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct): Don't synthesize any methods for
+       anonymous structs/unions.
+
+       * typeck.c (build_modify_expr): Don't treat pmf's as class objects.
+
+Thu Jan 20 18:56:46 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * method.c (build_opfncall): Call build_indirect_ref on
+       synthesized instance for operator delete.
+
+       * pt.c (type_unification): Don't abort if called with a list of
+       types in ARGS.
+
+       * class.c (instantiate_type): Deal with function templates.
+
+Thu Jan 20 16:55:35 1994  Jim Wilson  <wilson@sphagnum.cygnus.com>
+
+       * Makefile.in (CC): Default to cc not gcc.
+
+Thu Jan 20 13:47:54 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_modify_expr): Call constructor if appropriate.
+
+       * decl.c (push_to_top_level): Clear out class-level bindings cache.
+
+Wed Jan 19 13:51:22 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * call.c (resolve_scope_to_name): Work recursively (previously only
+       looked down one level).
+
+       * lex.c (do_pending_inlines): If we're still dealing with the last
+       batch of inlines, don't start working on a new one.
+
+       * Makefile.in (stamp-parse): Update conflict count.
+       (TAGS): Fix.
+
+       * parse.y (explicit_instantiation): New rule; implements
+       'template A<int>' syntax (though not 'template foo(int)' yet).
+       (structsp): Add explicit_instantiation.
+
+Tue Jan 18 13:53:05 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * class.c (finish_struct, etc.): Simplify decision to synthesize
+       a destructor.
+
+       * call.c, class.c, cp-tree.h, decl.c, init.c,
+       ptree.c, search.c, typeck.c, typeck2.c: Nuke
+       TYPE_NEEDS_CONSTRUCTOR (change all calls to TYPE_NEEDS_CONSTRUCTING).
+       * init.c (expand_aggr_init_1): Don't try non-constructor methods
+       of initializing objects.
+       (build_new): Don't try other methods if the constructor lookup fails.
+
+       * class.c (finish_base_struct): Set cant_have_default_ctor and
+       cant_synth_copy_ctor properly.
+       (finish_struct): Likewise.
+
+Mon Jan 17 13:58:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * typeck.c (build_modify_expr_1): #if 0 out again.
+       (build_modify_expr): #if 0 out memberwise init code again.
+
+       * lex.c (default_copy_constructor_body): Be const-correct.
+       (default_assign_ref_body): Likewise.
+
+       * init.c (perform_member_init): Use TYPE_HAS_CONSTRUCTOR to decide
+       whether or not to use it, rather than TYPE_NEEDS_CONSTRUCTING.
+       (expand_aggr_init): Disable silent conversion from initializer list
+       to list of args for a constructor.
+
+       * class.c (base_info): Lose needs_default_ctor.
+       (finish_base_struct): Likewise.
+       (finish_struct): Likewise.
+
+       * decl.c (init_decl_processing): Don't turn off flag_default_inline
+       just because flag_no_inline is on.
+       (finish_decl): Use TYPE_HAS_CONSTRUCTOR to decide to use
+       constructor.
+
+       * class.c (finish_struct): Synthesize default ctor whenever
+       allowed.
+
+       * Makefile.in (TAGS): Don't try to run etags on cp-parse.y.
+
+Sat Jan 15 18:34:33 1994  Mike Stump  <mrs@cygnus.com>
+
+       * Makefile.in, configure: Handle the C++ front-end in a
+       subdirectory.
+       * cp-*: Move C++ front-end to cp/*.
+
+Fri Jan 14 14:09:37 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-typeck.c (build_function_call_real): Modify to match other
+       instances of taking the address of the function.
+
+       * cp-class.c (finish_struct): Set TYPE_HAS_REAL_CONSTRUCTOR to 1 if
+       there are non-synthesized constructors.
+       Only set TYPE_NEEDS_CONSTRUCTOR if TYPE_HAS_REAL_CONSTRUCTOR.
+       Always generate copy constructor if possible.
+
+       * cp-tree.h (lang_type): Add has_real_constructor bitfield.
+       (TYPE_HAS_REAL_CONSTRUCTOR): Define.
+
+       * cp-lex.c (default_copy_constructor_body): Use init syntax
+       for all bases.
+
+       * cp-type2.c (store_init_value): Only give error for initializer list
+       if TYPE_HAS_REAL_CONSTRUCTOR.
+
+Thu Jan 13 15:38:29 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.h (DECL_SYNTHESIZED): Add defn.
+       (lang_decl): Add synthesized bitfield to decl_flags.
+
+       * cp-lex.c (cons_up_default_function): Use DECL_SYNTHESIZED to mark
+       artificial methods, rather than a line # of 0.
+
+Fri Jan 14 18:25:29 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * cp-decl (xref_tag): fix a bug in conflict type.
+       * cp-parse.y : add SCOPED_NAME for uninstantiated template nested
+       type reference.
+       * cp-spew.c (yylex) : generated SCOPED_NAME token.
+       * cp-lex.c (yyprint): handle SCOPED_NAME.
+
+Fri Jan 14 17:00:29 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cp-decl.c (pushdecl): Revert patch from Jan 11 19:33:03, as it is
+       not right.
+
+Thu Jan 13 14:00:35 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * cp-decl2.c (grok_x_components): fix a bug that enum type does not
+       have type_flags.
+
+Thu Jan 13 11:39:34 1994  Mike Stump  <mrs@cygnus.com>
+
+       Ensure that all vtable pointers are initialized with all the right
+       values.
+
+       * cp-class.c (is_normal): Changed to reflect new meaning of
+       CLASSTYPE_VFIELD_PARENT.
+       * cp-class.c (maybe_fixup_vptrs): Use of
+       CLASSTYPE_NEEDS_VIRTUAL_REINIT here is misguided.  Use
+       BINFO_MODIFIED instead.
+       * cp-class.c (finish_struct): Changed to reflect new meaning of
+       CLASSTYPE_VFIELD_PARENT.
+       * cp-decl.c (get_binfo_from_vfield): Removed, unneeded now.
+       * cp-decl.c (finish_function): Use init_vtbl_ptrs, instead of open
+       coding it here.
+       * cp-init.c (init_vfields): Changed name to init_vtbl_ptrs, and
+       re-implement.
+       * cp-init.c (emit_base_init): Use new name init_vtbl_ptrs.
+       * cp-tree.h (vfield_parent): Changed to integer.
+       * cp-tree.h (CLASSTYPE_VFIELD_PARENT): Changed docs to reflect new
+       meaning.
+       * cp-tree.h (init_vtbl_ptrs): Added init_vtbl_ptrs.
+
+Wed Jan 12 18:24:16 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * cp-decl.c (xref_tag): re-implement globalize nested type.
+       * cp-decl2.c (grok_x_components): ditto.
+       * cp-parse.y: ditto.
+       * cp-tree.h (lang_type): add no_globalize bit in type_flags.
+
+Wed Jan 12 14:08:09 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC on friend
+       decls with a definition attached.
+
+       * cp-typeck.c (build_modify_expr): Undo previous change in the case
+       of INIT_EXPRs.
+
+Tue Jan 11 19:33:03 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-typeck.c (build_modify_expr): Replace code for generating
+       assignment semantics for classes with an error.
+       (build_modify_expr_1): #if 0 out.
+
+       * cp-decl.c (pushdecl): Patch bogus design of pushdecl
+       behavior for overloaded functions (it doesn't push anything).
+
+       * cp-class.c (finish_struct): When generating default op=,
+       set TYPE_HAS_ASSIGNMENT.
+
+Mon Jan 10 18:48:06 1994  Mike Stump  <mrs@cygnus.com>
+
+       * cp-cvt.c (convert): Make {double, clashing enum} -> enum
+       invalid.
+       * cp-typeck.c (convert_for_assignment): Simplify.
+       * cp-decl2.c (warn_enum_clash): Removed.
+       * invoke.texi (-Wenum-clash): Removed.
+       * toplev.c (-Wenum-clash): Removed.
+
+Mon Jan 10 17:48:37 1994  Kung Hsu  <kung@mexican.cygnus.com>
+
+       * cp-decl.c (finish_decl): fix incorrect popclass call.
+
+       * cp-decl.c (is_anon_name): new function, check whether the name
+       is anonymous name generated by compiler.
+       * cp-decl.c (grokdeclarator): allow nested SCOPE_REF
+       * cp-spew.c (hack_more_ids): handle nested type in template.
+       * cp-parse.y : handle nested type reference in uninstantiated
+       template.
+       * cp-call.c (build_method_call): handle uninstantiated template
+       case.
+       * cp-pt.c (search_nested_type_in_tmpl): new function, search nested 
+       type in template.
+       * cp-pt.c (lookup_nested_type_by_name): new function, lookup nested 
+       type by name.
+       * cp-pt.c (tsubst): handle nested type search by name.
+
+Mon Jan 10 14:32:18 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-init.c (build_member_call): Propagate qualifiers to new type.
+
+       * cp-call.c (build_method_call): Count functions the new way.
+
+Fri Jan  7 19:03:26 1994  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for nested classes,
+       too.
+
+Tue Jan  4 16:45:51 1994  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-parse.y: change to handle whether to globalize nested class.
+       * cp-decl.c(xref_tag, maybe_globalize_type): Likewise.
+
+Mon Jan  3 22:22:32 1994  Gerald Baumgartner  <gb@cygnus.com>
+
+       * Makefile.in cp-call.c cp-class.c cp-cvt.c cp-decl.c cp-decl2.c
+       cp-error.c cp-init.c cp-lex.c cp-lex.h cp-method.c cp-parse.y
+       cp-spew.c cp-tree.c cp-tree.h cp-type2.c cp-typeck.c cp-xref.c
+       gplus.gperf toplev.c: Incorporated C++ signature extension.
+       * cp-sig.c: New file, contains most of signature processing.
+       * cp-hash.h: Regenerated from gplus.gperf.
+
+       * gcc.1 g++.1: Added explanation for  the `-fhandle-signatures'
+       and `-fno-handle-signatures' command line flags.
+
+       * gcc.texi: Changed the last-modification date.
+       * invoke.texi: Added `-fhandle-signatures' in the list of
+       C++ language options.  Added explanation for this option.
+
+Tue Dec 28 21:10:03 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-init.c (expand_vec_init): Remove comptypes test, as it is too
+       harsh here.
+
+Tue Dec 28 13:42:22 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-pt.c (do_pending_expansions): Decide to expand a template
+       member function, based upon it's class type, not the class type of
+       the first place it was declared.
+
+Tue Dec 28 05:42:31 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-class.c (is_normal): New routine, use to determine when the
+       given binfo is the normal one.  (The one that should have the simple
+       vtable name.)
+       * cp-class.c (modify_other_vtable_entries): Use DECL_ASSEMBLER_NAME
+       to check if two fndecls are `the same'.  Sometimes this routine can
+       modify the main vtable, and normal should be 1, in that case, so use
+       is_normal() to determine if this is the main vtable for the class.
+       Don't recurse down virtual bases, as they are shared, and we take
+       care of them elsewhere.
+       * cp-class.c (modify_vtable_entries): If we have already updated the
+       vtable with the new virtual, don't do it again.
+       * cp-class.c (finish_struct): Set CLASSTYPE_VFIELD_PARENT as
+       appropriate.  Do virtual function overriding in virtual bases, after
+       normal overriding, so that the base function list in DECL_VINDEX is
+       not overridden, before we have a chance to run through the list.
+       Use DECL_ASSEMBLER_NAME to check if two fndecls are `the same'.
+       Make sure we pass the right address into modify_vtable_entries.
+       * cp-tree.h (CLASSTYPE_VFIELD_PARENT): New field to indicate which
+       binfo is the one that has the vtable that we based our vtable on.
+
+Fri Dec 24 09:40:52 1993  Michael Tiemann  <tiemann@blues.cygnus.com>
+
+       * cp-typeck.c (c_expand_start_case): Use default_conversion to
+       convert expression from reference type if necessary.
+
+Wed Dec 22 17:58:43 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-typeck.c (build_unary_op): Make sure that it's a TREE_LIST before
+       trying to read its TREE_VALUE.
+
+       * cp-class.c (finish_struct_methods): Clear DECL_IN_AGGR_P here.
+       (finish_struct): Instead of here.
+
+Tue Dec 21 14:34:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
+       have TYPE_PTRMEMFUNC_P set before we try to build its
+       CLASSTYPE_ID_AS_LIST.
+       (get_decl_list): Likewise, when trying to read it.
+
+       * cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
+       (VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.
+
+Mon Dec 20 13:35:03 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-typeck.c (rationalize_conditional_expr): New function.
+       (unary_complex_lvalue): Use it.
+       (build_modify_expr): Use it, since trying to do an ADDR_EXPR of it
+       with build_unary_op won't cut it.  Don't wrap the COND_EXPR with a
+       SAVE_EXPR either.
+
+       * cp-decl2.c (explicit_warn_return_type): Deleted variable.
+       (lang_decode_option): Set warn_return_type, not explicit_*, for
+       -Wreturn-type and -Wall.  This is what rest_of_compilation uses to
+       decide if it should go into jump_optimize or not.
+       * cp-tree.h (explicit_warn_return_type): Deleted.
+       * cp-decl.c (grokdeclarator): Use warn_return_type, not explicit_*.
+       (finish_function): Also complain about no return in a non-void fn if
+       we're being pedantic (don't rely on use of -Wreturn-type).
+
+Fri Dec 17 15:45:46 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-decl.c (grokdeclarator): Forbid declaration of a function as
+       static if it's being done inside another function.
+
+       * cp-search.c (compute_visibility): Check for friendship both ways.
+
+Fri Dec 17 14:28:25 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-cvt.c (build_default_binary_type_conversion): Make error
+       messages more helpful.
+
+       * cp-error.c (op_as_string): New function, returns "operator =="
+       given EQ_EXPR or suchlike.
+
+Fri Dec 17 13:28:11 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-call.c (print_n_candidates): New function.
+       (build_overload_call_real): Use it when we complain about a call
+       being ambiguous.
+
+Fri Dec 17 12:41:17 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-call.c (build_method_call): Fix checking for static call
+       context.
+
+       * cp-method.c (build_opfncall): Call build_indirect_ref on argument
+       to operator new.
+
+       * cp-init.c (build_new): Don't mess with rval when building
+       indirect ref.
+
+Thu Dec 16 16:48:05 1993  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-lex.c (default_assign_ref_body): add check when TYPE_NESTED_
+       NAME(type) may not be exist. It's not a problem for old compiler.
+
+Thu Dec 16 14:46:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-tree.h (CLASSTYPE_ALTERS_VISIBILITIES_P): Delete macro, it's
+       never used for anything.
+       (struct lang_type, member type_flags): Delete field
+       `alters_visibility', and up `dummy' by 1.
+       * cp-class.c (finish_base_struct): Delete code that copies the
+       setting of CLASSTYPE_ALTERS_VISIBILITIES_P.
+       (finish_struct): Delete code that sets it.
+
+Thu Dec 16 14:44:39 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c, cp-init.c, cp-typeck.c: Fix arguments to
+       build_method_call that I messed up before.
+
+       * cp-search.c (get_base_distance): If protect > 1, allow immediate
+       private base.
+
+       * cp-class.c (finish_base_struct): Set cant_synth_* correctly.
+       (finish_struct): Likewise.  Well, nigh-correctly; it won't deal
+       properly with the case where a class contains an object of an
+       ambiguous base class which has a protected op=.  Should be fixed
+       when the access control code gets overhauled.
+       (finish_struct_methods): Set TYPE_HAS_NONPUBLIC_* correctly.
+
+Thu Dec 16 12:17:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-lex.c (real_yylex): Turn the code back on that deals with
+       __FUNCTION__ and __PRETTY_FUNCTION__.  Don't use lookup_name, to
+       avoid the ambiguity problems that led to it being turned off in the
+       first place.
+
+       * cp-method.c (hack_identifier): Also check for a TYPE_PTRMEMFUNC_P
+       to see if something is a method.
+
+Wed Dec 15 18:35:58 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-typeck.c (build_modify_expr): Avoid error messages on small
+       enum bit fields.
+       * cp-typeck.c (convert_for_assignment): Add missing argument to
+       cp_warning and cp_pedwarn calls.
+
+Wed Dec 15 18:25:32 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-parse.y (member_init): ANSI C++ doesn't forbid old-style base
+       initializers; it's just anachronistic.
+
+       * cp-decl.c (finish_decl): Don't require external-linkage arrays
+       to have a complete type at declaration time when pedantic.
+
+Tue Dec 14 11:37:23 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (pushdecl): Don't set DECL_CONTEXT if it's already set.
+
+       * cp-call.c (build_method_call): Don't dereference pointer given
+       as instance.
+
+       * cp-decl.c (finish_function): Don't pass pointer to
+       build_method_call.
+       (finish_function): Likewise.
+
+       * cp-typeck.c (build_x_function_call): Likewise.
+
+       * cp-method.c (build_component_type_expr): Likewise.
+
+       * cp-init.c (build_member_call): Likewise.
+       (build_new): Likewise.
+
+Mon Dec 13 18:04:33 1993  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-decl.c (xref_tag): fix regression created by changes made 
+       in Dec. 7 1993.
+       * cp-decl.c (xref_defn_tag): fix parallel nested class problem.
+
+Fri Dec 10 12:40:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-call.c (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print
+       out the final evaluation of the function, so we can see if ELLIPSIS,
+       USER, and EVIL were set at the end.
+
+       * cp-call.c (convert_harshness_ansi): When the parm isn't an lvalue,
+       only go for setting TRIVIAL_CODE if we are dealing with types that
+       are compatible.
+
+Thu Dec  9 18:27:22 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-decl.c (flag_huge_objects): New flag to allow large objects.
+       * toplev.c (lang_options): Likewise.
+       * cp-decl2.c (flag_huge_objects, lang_f_options): Likewise.
+       * cp-decl.c (delta_type_node): New type for delta entries.
+       * cp-tree.h (delta_type_node): Likewise.
+       * cp-decl.c (init_decl_processing): Setup delta_type_node.
+       * cp-decl.c (init_decl_processing, build_ptrmemfunc_type): Use
+       delta_type_node instead of short_integer_type_node. 
+       * cp-class.c (build_vtable_entry): Likewise.
+
+Thu Dec  9 16:19:05 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
+       NO_{DOLLAR,DOT} macro checks, so it always gets defined.
+       (VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.
+
+Wed Dec  8 17:38:06 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-decl.c (finish_decl): Make sure things that can go into
+       "common", do go into common, if -fcommon is given.
+
+Wed Dec  8 13:01:54 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-call.c (print_harshness) [DEBUG_MATCHING]: New function.
+       (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print out
+       argument matching diagnostics to make instantly clear what the
+       compiler is doing.
+
+       * cp-call.c (convert_harshness_ansi): If the parm isn't an lvalue,
+       then check to see if the penalty was increased due to
+       signed/unsigned mismatch, and use a TRIVIAL_CODE if it wasn't.
+
+Tue Dec  7 18:29:14 1993  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-decl.c (xref_tag, pushtag): Fix nested class search/resolution
+       problem.
+
+Tue Dec  7 16:09:34 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-class.c (finish_struct): Before synthesizing methods, if no
+       methods have yet been declared then set nonprivate_method.  Don't
+       set non_private method after synthesizing a method.
+
+       * cp-lex.c (extract_interface_info): If flag_alt_external_templates
+       is set, tie emitted code to the location of template instantiation,
+       rather than definition.
+
+       * cp-tree.h: Declare flag_alt_external_templates.
+
+       * cp-decl2.c (lang_decode_option): Support -falt-external-templates.
+
+       * toplev.c (lang_options): Likewise.
+
+Mon Oct  4 12:50:02 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       [changes propagated from 930810 snapshot]
+       * cp-decl.c (init_decl_processing): Make long long available for use
+       as SIZE_TYPE and PTRDIFF_TYPE.
+       (finish_decl): Allow file-scope static incomplete array.
+       (grokdeclarator): Don't pass on const and volatile fron function
+       value type to function type.
+       Warn here for volatile fn returning non-void type.
+       * cp-parse.y (attrib): Accept attributes `volatile' with alias
+       `noreturn', and `const'.
+       * cp-typeck.c (default_conversion): Don't lose const and volatile.
+       (build_binary_op_nodefault): Generate pedantic warning for comparison
+       of complete pointer type with incomplete pointer type.
+       (build_c_cast): Be careful that null pointer constant be INTEGER_CST.
+
+Tue Dec  7 10:46:48 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-init.c (expand_vec_init): When creating a temporary for copying
+       arrays, use the type of the source, not the target.
+
+       * cp-cvt.c (convert): Pass an argument for errtype to
+       convert_to_reference.
+
+       * cp-error.c (dump_expr, COMPONENT_REF & CALL_EXPR): Deal with
+       methods, -> and `this'.
+
+Mon Dec  6 17:12:33 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-error.c (parm_as_string): New function; returns `this' or arg
+       number.  Corresponds to %P.
+       (dump_expr): Deal with method calls.
+
+       * cp-cvt.c (convert_to_reference): Stop using warn_for_assignment.
+       * cp-typeck.c (convert_for_assignment): Likewise.
+       (warn_for_assignment): Lose.
+
+Mon Dec  6 11:33:35 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-call.c (ideal_candidate_ansi): Delete code that was never
+       doing anything useful.  Instead, sort once, and DO NOT wipe
+       out any codes with EVIL_CODE, since that's what we use as a
+       marker for the end of the list of candidates.
+
+       * cp-cvt.c (convert_to_aggr): Make sure to always set H_LEN.
+
+Mon Dec  6 12:49:17 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-init.c (get_aggr_from_typedef): New function, like
+       is_aggr_typedef but returns the _TYPE.
+
+       * cp-call.c, cp-init.c, cp-method.c: Eradicate err_name.
+
+Sun Dec  5 18:12:48 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-lex.c (readescape): Pedwarn when a hex escape is out of range.
+
+Thu Nov 25 23:50:19 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       Delay language context change until beginning of next decl.
+
+       * cp-lex.h (c_header_level): Removed.
+       (pending_lang_change): Declared.
+       * cp-lex.c (c_header_level): Renamed from in_c_header, made static.
+       (pending_lang_change): Defined.
+       (check_newline): Rework code that recognizes line number and
+       filename changes.  Instead of pushing and popping lang context,
+       increment and decrement pending_lang_change.
+       (do_pending_lang_change):  Push and pop lang context according
+       to value of pending_lang_change.
+       * cp-parse.y (extdefs): Use lang_extdef instead of extdef.
+       (extdef): Same as extdef, but call do_pending_lang_change() first.
+
+Mon Nov 15 15:39:15 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-typeck.c (build_binary_op_nodefault): Warn for ordered
+       compare of ptr with 0 only if pedantic in both cases.
+
+Thu Nov 25 13:31:37 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       Reinstate the below patch, which got lost in the Cygnus merge:
+       Tue Nov 23 13:59:24 1993  Hallvard B Furuseth  (hbf@durin.uio.no)
+       * cp-parse.y (maybe_type_qual): Don't fail to set $$.
+
+Wed Nov 17 19:03:30 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-parse.y (attrib): Allow "ident(ident)" like the C front end.
+
+Fri Oct 22 20:43:37 1993  Paul Eggert  <eggert@twinsun.com>
+
+       * cp-lex.c (real_yylex): Diagnose floating point constants
+       that are too large.
+
+Wed Nov 17 19:10:37 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-type2.c (build_functional_cast): ARM page 16: When a class
+       and an object, function or enumerator are declared in the same
+       scope with the same name, the class name is hidden.
+
+Wed Nov 17 19:07:18 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-call.c (convert_harshness_ansi): Distinguish float, double,
+       and long double from each other when overloading.
+       (compute_conversion_costs_{ansi,old}, build_method_call,
+       build_overlay_call_real, convert_to_aggr): Always set and
+       always use H_LEN member of candidate structure.
+
+Mon Oct 11 23:10:53 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-decl.c (duplicate_decls): Note redeclarations of library
+       functions, and generate distinct warnings for them.
+
+Mon Oct  4 12:26:49 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       Support format warnings in G++.
+
+       * cp-tree.h: Protect against multiple inclusion.
+       Declare all public functions in c-common.c (copy from c-tree.h).
+       (STDIO_PROTO): Define.
+       (warn_format): Declare.
+       (record_format_info): Remove declaration.
+       * cp-decl.c (init_decl_processing): Call init_function_format_info.
+       * cp-decl2.c (lang_decode_option): Make "-Wall" include warn_format.
+       * cp-typeck.c (build_function_call_real): Call check_function_format.
+       (record_format_info): Remove -- obsolete stub.
+
+Sat Jul 24 12:04:29 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-decl.c (duplicate_decls): Don't warn for non-extern var decl
+       following an extern one (for -Wredundant-decls).
+       * cp-parse.y (primary): In statement expression case, if compstmt
+       returns something other than a BLOCK, return it unchanged.
+
+Thu Dec  2 20:44:58 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       * cp-decl.c (warn_extern_redeclared_static): New function made
+       from code extracted from pushdecl.
+       (duplicate_decls, pushdecl): Call new function.
+       (lookup_name_current_level): Allow for IDENTIFIER_GLOBAL_VALUE
+       to be a TREE_LIST when function is declared in 'extern "C" {}'.
+
+Fri Dec  3 16:01:10 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-class.c (duplicate_tag_error): Use cp_error.
+       (finish_base_struct): Check for ambiguity with direct base, and don't
+       generate op= or copy ctor if it exists.
+
+Fri Dec  3 15:32:34 1993  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-init.c (expand_member_init): when initializer name is null,
+       don't try to build it now because emit_base_init will handle it.
+
+Fri Dec  3 12:28:59 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-lex.c (init_lex): Initialize input_filename to "<internal>" for
+       code such as ExceptionHandler::operator=.
+
+Fri Dec  3 10:32:08 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (grokdeclarator): Don't try to print out dname when
+       complaining about arrays of references if decl_context==TYPENAME,
+       since it will be null.
+
+       * cp-decl2.c: Default to flag_ansi_overloading.
+
+Thu Dec  2 18:05:56 1993  Kung Hsu  <kung@cirdan.cygnus.com>
+
+       * cp-call.c (build_method_call): use binfo from instance if it's
+       different from binfo (basetype_path) passed from above.
+
+Wed Nov 17 19:14:29 1993  Chip Salzenberg  <chip@fin.uucp>
+
+       cp-error.c (dump_expr): Use unsigned chars to output a
+       TREE_REAL_CST in hex.
+
+Thu Dec  2 11:05:48 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-class.c (finish_struct): Fix typo in setting
+       cant_synth_asn_ref.
+
+       * cp-tree.h (TYPE_NESTED_NAME): New macro, does
+       DECL_NESTED_TYPENAME (TYPE_NAME (NODE)).
+
+       * cp-lex.c (default_copy_constructor_body): Change
+       DECL_NAME (TYPE_NAME (btype)) to TYPE_NESTED_NAME (btype).
+       (default_assign_ref_body): Likewise.
+       (default_copy_constructor_body): Call operator= explicitly for
+       base classes that have no constructor.
+
+Thu Dec  2 10:47:15 1993  Michael Tiemann  <tiemann@blues.cygnus.com>
+
+       * cp-call.c (build_method_call): If the instance variable is
+       converted to error_mark_node when we're trying to convert it to the
+       base type of a method we're looking up, return error_mark_node.
+
+Thu Dec  2 10:41:16 1993  Torbjorn Granlund  <tege@cygnus.com>
+
+       * cp-typeck.c (build_binary_op_nodefault): In *_DIV_EXPR *_MOD_EXPR
+       cases, tests for unsigned operands by peeking inside a NOP_EXPR.
+
+Wed Dec  1 13:33:34 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-call.c (compute_conversion_costs_ansi): Use the size of struct
+       harshness_code, not the size of short, for clearing out the
+       ansi_harshness.
+
+       * cp-call.c (print_candidates): New function.
+       (build_method_call): When we had some candidates, but didn't get a
+       usable match, don't report that we got an error with the first
+       candidate.  Instead, say there were no matches, and list the
+       candidates with print_candidates.  In the second pass, make sure we
+       clear out ever_seen, so we can accurately count the number of
+       functions that qualified.
+
+Wed Dec  1 09:53:59 1993  Torbjorn Granlund  <tege@cygnus.com>
+
+       * cp-typeck.c (build_binary_op_nodefault): Shorten for *_MOD_EXPR
+       only if op1 is known to be != -1.
+       (build_binary_op_nodefault): Handle *_DIV_EXPR likewise.
+
+Tue Nov 30 14:07:26 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * cp-method.c (hack_identifier): If the field itself is private, and
+       not from a private base class, say so.
+
+Mon Nov 29 03:00:56 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (grokdeclarator): Always warn on initialization of
+       const member.
+
+Wed Nov 24 00:49:35 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-class.c (finish_struct): Set TYPE_GETS_CONST_* properly.
+       (finish_base_struct): Set cant_synth_asn_ref properly.
+
+       * cp-lex.c (cons_up_default_function): Add section for operator=.
+       (default_assign_ref_body): New function, mostly cribbed from
+       default_copy_constructor_body.
+
+       * cp-class.c (base_info): Add members cant_synth_copy_ctor,
+       cant_synth_asn_ref, no_const_asn_ref.
+       (finish_base_struct): Update no_const_asn_ref, note that you should
+       update cant_synth_*, propagate TYPE_GETS_ASSIGN_REF.
+       (finish_struct): Add decls for cant_synth_*, no_const_asn_ref, and
+       initialize them properly.  Set no_const_asn_ref properly.  Set
+       cant_synth_* in some of the situations where they should be set.
+       Propagate TYPE_GETS_ASSIGN_REF.  Use cant_synth_copy_ctor.  Add call
+       to cons_up_default_function for operator=.
+
+Tue Nov 23 20:24:58 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-cvt.c (convert_force): Add code to perform casting of pointer
+       to member function types.
+       * cp-typeck.c (build_ptrmemfunc): Add FORCE parameter to indicate
+       when the conversion should be done, regardless.
+       * cp-tree.h (build_ptrmemfunc): Likewise.
+       * cp-type2.c (digest_init): Likewise.
+       * cp-typeck.c (convert_for_assignment): Likewise.
+
+Tue Nov 23 18:06:58 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-error.c (dump_expr): Do the right thing for variables of
+       reference type.
+
+       * cp-decl.c (grok_op_properties): Set TYPE_HAS_ASSIGN_REF
+       and its kin properly.
+       (xref_tag): Propagate TYPE_GETS_ASSIGN_REF.
+
+Tue Nov 23 12:26:13 1993  Mike Stump  <mrs@cygnus.com>
+
+       * cp-method.c (build_opfncall): Don't count pointer to member
+       functions as aggregates here, as we don't want to look up methods in
+       them.  The compiler would core dump if we did, as they don't have
+       normal names.
+       * cp-typeck.c (build_indirect_ref): Improve wording on error
+       message.
+
+Mon Nov 22 14:22:23 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c (grok_op_properties): Allow operator?: with pedwarn
+       (since it's supported in other compiler bits).
+
+       * cp-method.c (report_type_mismatch): Use cp_error; ignore err_name
+       argument.
+
+       * cp-error.c (dump_function_decl): Don't print return type for
+       constructors and destructors.
+
+       * cp-cvt.c (cp_convert_to_pointer): Import code from
+       convert_to_pointer so we can return error_mark_node in the case of an
+       error, and to allow more meaningful error messages.
+       (build_type_conversion): Don't go through void* when trying
+       to convert to a pointer type.
+
+       * cp-decl.c (grokfndecl): Move call to grok_op_properties back
+       after grokclassfn so that it's dealing with the right decl.
+       (grok_op_properties): Don't assert !methodp for op new and op delete.
+
+       * cp-init.c (build_delete): Don't use TYPE_BUILT_IN (there are now
+       no uses of it in the compiler).
+
+       * cp-call.c (build_scoped_method_call): Fix for destructors of simple
+       types.
+       (build_method_call): Likewise.
+
+Fri Nov 19 12:59:38 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.c (count_functions): Abstraction function.
+
+       * cp-call.c (build_overload_call_real): Deal with new overloading
+       properly, remove dead code.
+
+       * gcc.c (default_compilers): Generate and use .ii files in the
+       intermediate stage of compiling C++ source.
+
+Fri Nov 19 11:26:09 1993  Jim Wilson  <wilson@sphagnum.cygnus.com>
+
+       * cp-expr.c (cplus_expand_expr): Make call_target a valid memory
+       address before using it, so it can be later safely compared.
+
+Fri Nov 12 15:30:27 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-pt.c (tsubst): Deal with new overloading.
+
+       * cp-typeck.c (fntype_p): is the arg function type?
+       (comp_target_parms): pedwarn on conversion from (anything) to (...).
+       (build_x_function_call): Deal with new overloading.
+
+       * cp-tree.c (decl_list_length): Deal with new overloading.
+       (decl_value_member): Like value_member, but for DECL_CHAINs.
+
+       * cp-decl.c (duplicate_decls): Deal with new overloading.
+       (start_decl): Likewise.
+
+       * cp-class.c (instantiate_type): Deal with new overloading.
+
+       * cp-call.c (convert_harshness_ansi): Deal with new overloading.
+       (convert_harshness_old): Deal with new overloading.
+       (build_overload_call_real): Likewise.
+
+Mon Nov  8 13:50:49 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-tree.c (get_unique_fn): New function; returns FUNCTION_DECL
+       if unambiguous, NULL_TREE otherwise.
+       (get_first_fn): Returns the first appropriate FUNCTION_DECL.
+       (is_overloaded_fn): Returns whether or not the passed tree is
+       a function or list of functions.
+
+       * cp-init.c (init_init_processing): use `get_first_fn' to find
+       the FUNCTION_DEFN for new and delete.
+
+       * cp-decl.c (push_overloaded_decl): Use new overloading strategy, cut
+       code size in half (I spit on special cases).
+
+Tue Sep  7 20:03:33 1993  Jason Merrill  <jason@deneb.cygnus.com>
+
+       * cp-decl.c: Allow references and template type parameters as well
diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS
new file mode 100644 (file)
index 0000000..8f057ef
--- /dev/null
@@ -0,0 +1,139 @@
+*** Changes since G++ version 2.7.2:
+
+* A public review copy of the December 1996 Draft of the ANSI C++
+  proto-standard is now available. See
+
+       http://www.cygnus.com/misc/wp/
+
+  for more information.
+
+* Default function arguments in templates will not be evaluated (or
+  checked for semantic validity) unless they are needed.
+
+* The -ftemplate-depth-NN flag can be used to increase the maximum
+  recursive template instantiation depth, defaulting to 17. If you need
+  to use this flag, the compiler will tell you.
+
+* The internal interface between RTTI-using code and the RTTI support
+  library has changed, so code that uses dynamic_cast should be
+  recompiled. The RTTI support library has moved from libstdc++ to
+  libgcc, so you no longer need to link against libstdc++ for a program
+  that doesn't use the "hosted" library.
+
+* bool is now always the same size as another built-in type. Previously,
+  a 64-bit RISC target using a 32-bit ABI would have 32-bit pointers and a
+  64-bit bool. This should only affect Irix 6, which was not supported in
+  2.7.2.
+
+* new (nothrow) is now supported.
+
+* A flag -Weffc++ has been added for violations of some of the style 
+  guidelines in Scott Meyers' _Effective C++_ books.
+
+* On ELF systems, duplicate copies of symbols with 'initialized common'
+  linkage (such as template instantiations, vtables, and extern inlines)
+  will now be discarded by the GNU linker, so you don't need to use -frepo.
+  This support requires GNU ld from binutils 2.8 or later.
+
+* Partial specialization of class templates is now supported.
+
+* The overload resolution code has been rewritten to conform to the latest
+  C++ Working Paper.  Built-in operators are now considered as candidates
+  in operator overload resolution.  Function template overloading chooses
+  the more specialized template, and handles base classes in type deduction
+  and guiding declarations properly.  In this release the old code can
+  still be selected with -fno-ansi-overloading, although this is not
+  supported and will be removed in a future release.
+
+* RTTI support has been rewritten to work properly and is now on by default.
+  This means code that uses virtual functions will have a modest space
+  overhead.  You can use the -fno-rtti flag to disable RTTI support.
+
+* Synthesized destructors are no longer made virtual just because the class
+  already has virtual functions, only if they override a virtual destructor
+  in a base class.  The compiler will warn if this affects your code.
+
+* The g++ driver no longer links with libg++ by default; it is now
+  functionally identical to the c++ driver.
+
+* (void *)0 is no longer considered a null pointer constant; NULL in
+  <stddef.h> is now defined as __null, a magic constant of type (void *)
+  normally, or (size_t) with -ansi.
+
+* The new 'template <>' specialization syntax is now accepted and ignored.
+
+* The name of a class is now implicitly declared in its own scope; A::A
+  refers to A.
+
+* g++ now uses a new implementation of templates. The basic idea is that
+  now templates are minimally parsed when seen and then expanded later.
+  This allows conformant early name binding and instantiation controls,
+  since instantiations no longer have to go through the parser.
+
+  What you get:
+
+     + Inlining of template functions works without any extra effort or
+       modifications.
+     + Instantiations of class templates and methods defined in the class
+       body are deferred until they are actually needed (unless
+       -fexternal-templates is specified).
+     + Nested types in class templates work.
+     + Static data member templates work.
+
+  Possible problems:
+
+     + Types and class templates used in templates must be declared
+       first, or the compiler will assume they are not types, and fail.
+     + Similarly, nested types of template type parameters must be tagged
+       with the 'typename' keyword.  In many cases, the compiler will tell
+       you where you need to add 'typename'.
+     + Syntax errors in templates that are never instantiated will now be
+       diagnosed.
+
+* Synthesized methods are now emitted in any translation units that need
+  an out-of-line copy. They are no longer affected by #pragma interface
+  or #pragma implementation.
+
+* Local classes are now supported.
+
+* -Wall no longer implies -W.
+  The new warning flag, -Wsign-compare, included in -Wall, warns about
+  dangerous comparisons of signed and unsigned values. Only the flag is
+  new; it was previously part of -W.
+
+* The new flag, -fno-weak, disables the use of weak symbols.
+
+* __attribute__ can now be attached to types as well as declarations.
+
+* -Woverloaded-virtual now warns if a virtual function in a base class is
+  hidden in a derived class, rather than warning about virtual functions
+  being overloaded (even if all of the inherited signatures are
+  overridden) as it did before.
+
+* The compiler no longer emits a warning if an ellipsis is used as a
+  function's argument list.
+
+* Exception handling support has been significantly improved and is on by
+  default.  This can result in significant runtime overhead.  You can turn
+  it off with -fno-exceptions.
+
+* Definition of nested types outside of their containing class is now
+  supported. Use the following source code, as an example.
+
+       struct A {
+              struct B;
+              B* bp;
+       };
+
+       struct A::B {
+              int member;
+       };
+
+* Explicit instantiation of template constructors and destructors is now
+  supported. Use the following source code, as an example.
+
+       template A<int>::A(const A&);
+
+* On the HPPA, some classes that do not define a copy constructor
+  will be passed and returned in memory again so that functions
+  returning those types can be inlined.
diff --git a/gcc/cp/g++FAQ.texi b/gcc/cp/g++FAQ.texi
new file mode 100644 (file)
index 0000000..09c812b
--- /dev/null
@@ -0,0 +1,2158 @@
+\input texinfo.tex      @c -*-texinfo-*-
+@c %**start of header
+@setfilename g++FAQ.info
+@settitle Frequently asked questions about the GNU C++ compiler
+@setchapternewpage off
+@c version: @(#)g++FAQ.texi    1.56 09/15/97
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+@titlepage
+@title G++ FAQ
+@subtitle Frequently asked questions about the GNU C++ compiler
+@subtitle September 14, 1997
+@sp 1
+@author Joe Buck
+@page
+@end titlepage
+
+@ifinfo
+@node Top, basics, (dir), (dir)
+@top
+@unnumbered FAQ for g++ and libg++, by Joe Buck (jbuck@@synopsys.com)
+@end ifinfo
+
+@cindex FAQ for g++, latest version
+@cindex Archive site for FAQ lists
+@cindex rtfm.mit.edu
+@cindex Joe Buck <jbuck@@synopsys.com>
+@cindex FAQ for C++
+
+This is a list of frequently asked questions (FAQ) for g++ users; thanks to
+all those who sent suggestions for improvements.  Thanks to Marcus Speh
+for doing the index.  A hypertext version is available on the World Wide
+Web at @file{http://www.cygnus.com/misc/g++FAQ_toc.html}.
+
+This document has just been reorganized a bit.  There is some new
+information about upcoming g++ releases and egcs; more needs to be done
+but that will need to wait for next time.  A diff would look misleadingly
+large, since I blew away and rebuilt the texinfo menus.
+
+Please send updates and corrections to the FAQ to
+@code{jbuck@@synopsys.com}.  Please do @emph{not} use me as a resource
+to get your questions answered; that's what @file{gnu.g++.help} is for and I
+don't have the time to support the net's use of g++.
+
+Many FAQs, including this one, are available on the archive site
+``rtfm.mit.edu''; see @*
+@file{ftp://rtfm.mit.edu/pub/usenet/news.answers}.
+This FAQ may be found in the subdirectory g++-FAQ.
+
+@cindex Marshall Cline 
+@cindex comp.lang.c++
+@cindex C++ FAQ
+This FAQ is intended to supplement, not replace, Marshall Cline's
+excellent FAQ for the C++ language and for the newsgroup
+@file{comp.lang.c++}.  Especially if g++ is the first C++
+compiler you've ever used, the question ``How do I do <X> with g++?''
+is probably really ``How do I do <X> in C++?''.
+You can find this FAQ at
+@file{ftp://rtfm.mit.edu/pub/usenet/comp.lang.c++},
+or in HTML form at @file{http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/}.
+
+@menu
+* basics::                      What is g++?  How do I get it?
+* installation::                How to install, installation problems
+* evolution::                   The Evolution of g++
+* User Problems::               Commonly reported problems and bugs
+* legalities::                  Lawyer stuff, GPL, LGPL, etc.
+* index::                       Index of terms
+
+ --- The Detailed Node Listing ---
+
+The basics: what is g++?
+
+* latest versions::             
+* g++ for Unix::                
+* g++ for HP::                  
+* g++ for Solaris 2.x::         
+* g++ for other platforms::     
+* 1.x vs 2.x versions::         
+
+Installation Issues and Problems
+
+* gcc-2 + g++-1::               
+* what else do I need?::        
+* use GNU linker?::             
+* Use GNU assembler?::          
+* shared libraries::            
+* repository::                  
+* repo bugs::                   
+* Use GNU C library?::          
+* Global constructor problems::  
+* Strange assembler errors::    
+* Other problems building libg++::  
+* More size_t problems::        
+* Rebuild libg++?::             
+* co-existing versions::        
+* Installing on Linux::         
+* Linux Slackware 3.0::         
+
+The Evolution of g++
+
+* version 2.7.x::               
+* libstdc++::                   
+* new work::                    
+* egcs::                        
+* When?::                       
+
+User Problems
+
+* missing virtual table::       
+* for scope::                   
+* const constructor::           
+* unused parameter warnings::   
+* jump crosses initialization::  
+* Demangler::                   
+* static data members::         
+* internal compiler error::     
+* bug reports::                 
+* porting to g++::              
+* name mangling::               
+* problems linking with other libraries::  
+* documentation::               
+* templates::                   
+* undefined templates::         
+* redundant templates::         
+* Standard Template Library::   
+* STL and string::              
+* exceptions::                  
+* namespaces::                  
+* agreement with standards::    
+* compiling standard libraries::  
+* debugging on SVR4 systems::   
+* debugging problems on Solaris::  
+* X11 conflicts with libg++::   
+* assignment to streams::       
+@end menu
+
+@node basics, installation, Top, Top
+@chapter The basics: what is g++?
+
+@cindex Free Software Foundation
+@cindex GNU Public License
+@cindex GPL
+
+g++ is the traditional nickname of GNU C++, a freely redistributable
+C++ compiler produced by the Free Software Foundation plus dozens of
+skilled volunteers.  I say ``traditional nickname'' because the GNU
+compiler suite, gcc, bundles together compilers for C, Objective-C,
+and C++ in one package.
+
+While the source code to gcc/g++ can be downloaded for free,
+it is not public domain, but is protected by the GNU Public License,
+or GPL (@pxref{legalities}).
+
+@menu
+* latest versions::             
+* g++ for Unix::                
+* g++ for HP::                  
+* g++ for Solaris 2.x::         
+* g++ for other platforms::     
+* 1.x vs 2.x versions::         
+@end menu
+
+@node latest versions, g++ for Unix, basics, basics
+@section What is the latest version of gcc, g++, and libg++?
+
+@cindex gcc/g++, version date
+The current version of gcc/g++ is 2.7.2.3, released August 20, 1997.
+Although that looks very recent, the only change is a minor patch to
+resolve a problem with Linux and the GNU C library; users not interested
+in that functionality have no reason to upgrade.
+
+The current version of libg++ is 2.7.2, released July 4, 1996.
+The last release of gcc/g++ with improvements to the C++ front end was
+2.7.2, released Nov. 25, 1995, nearly two years ago.
+
+I would strongly recommend that anyone using a g++ version earlier
+than 2.7.2 should upgrade if at all possible (@pxref{version 2.7.x}).
+
+For some non-Unix platforms, the latest port of gcc may be an earlier
+version (2.6.3, say).  You'll need to use a version of libg++ that
+has the same first two digits as the compiler version, e.g. use libg++
+2.6.x (for the latest x you can find) with gcc version 2.6.3.
+
+The latest "1.x" version of gcc is 1.42, and the latest "1.x" version of
+g++ is 1.42.0.
+While gcc 1.42 is quite usable for C programs,
+I recommend against using g++ 1.x except in special circumstances
+(and I can't think of any such circumstances).
+
+@node g++ for Unix, g++ for HP, latest versions, basics
+@section How do I get a copy of g++ for Unix?
+
+First, you may already have it if you have gcc for your platform;
+g++ and gcc are combined now (as of gcc version 2.0).
+@cindex GNU gcc, version
+@cindex GNU g++ and gcc
+
+You can get g++ from a friend who has a copy, by anonymous FTP or
+UUCP, or by ordering a tape or CD-ROM from the Free Software
+Foundation.
+@cindex g++, ordering
+@cindex g++, getting a copy
+
+The Free Software Foundation is a nonprofit organization that
+distributes software and manuals to raise funds for more GNU
+development.  Getting your copy from the FSF contributes directly to
+paying staff to develop GNU software.  CD-ROMs cost $400 if an
+organization is buying, or $100 if an individual is buying.  Tapes
+cost around $200 depending on media type.  I recommend asking for
+version 2, not version 1, of g++.
+@cindex FSF [Free Software Foundation]
+@cindex GNU [GNU's not unix]
+
+For more information about ordering from the FSF, contact
+gnu@@prep.ai.mit.edu, phone (617) 542-5942 or anonymous ftp file
+@file{ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/ORDERS} (you can
+also use one of the sites listed below if you can't get into ``prep'').
+
+@cindex FSF, contact <gnu@@prep.ai.mit.edu>
+
+Here is a list of anonymous FTP archive sites for GNU software.
+If no directory is given, look in @file{/pub/gnu}.
+
+@cindex GNUware, anonymous FTP sites
+
+@example
+ASIA: ftp.cs.titech.ac.jp, tron.um.u-tokyo.ac.jp:/pub/GNU/prep
+cair-archive.kaist.ac.kr, ftp.nectec.or.th:/pub/mirrors/gnu
+
+AUSTRALIA: archie.au:/gnu (archie.oz or archie.oz.au for ACSnet)
+
+AFRICA: ftp.sun.ac.za
+
+MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
+
+EUROPE: irisa.irisa.fr, ftp.univ-lyon1.fr,
+ftp.mcc.ac.uk, unix.hensa.ac.uk:/mirrors/uunet/systems/gnu,
+src.doc.ic.ac.uk:/gnu, ftp.ieunet.ie, ftp.eunet.ch,
+nic.switch.ch:/mirror/gnu, ftp.informatik.rwth-aachen.de,
+ftp.informatik.tu-muenchen.de, ftp.win.tue.nl, ftp.nl.net,
+ftp.etsimo.uniovi.es, ftp.funet.fi, ftp.denet.dk,
+ftp.stacken.kth.se, isy.liu.se, ftp.luth.se:/pub/unix/gnu,
+ftp.sunet.se, archive.eu.net
+
+SOUTH AMERICA: ftp.inf.utfsm.cl, ftp.unicamp.br
+
+WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
+
+USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
+ftp.digex.net, ftp.kpc.com:/pub/mirror/gnu, f.ms.uky.edu:/pub3/gnu,
+jaguar.utah.edu:/gnustuff, ftp.hawaii.edu:/mirrors/gnu,
+uiarchive.cso.uiuc.edu, ftp.cs.columbia.edu:/archives/gnu/prep,
+gatekeeper.dec.com:/pub/GNU, ftp.uu.net:/systems/gnu
+@end example
+
+The ``official site'' is prep.ai.mit.edu, but your transfer will probably
+go faster if you use one of the above machines.
+
+@cindex gzip
+Most GNU utilities are compressed with ``gzip'', the GNU compression
+utility.  All GNU archive sites should have a copy of this program,
+which you will need to uncompress the distributions.
+
+@cindex libg++
+Don't forget to retrieve libg++ as well!
+
+@node g++ for HP, g++ for Solaris 2.x, g++ for Unix, basics
+@section Getting gcc/g++ for the HP Precision Architecture
+
+@cindex HP Precision Architecture
+@cindex Hewlett-Packard
+@cindex GNU GAS 
+@cindex GNU gdb
+
+If you use the HP Precision Architecture (HP-9000/7xx and HP-9000/8xx)
+and you want to use debugging, you'll need to use the GNU assembler, GAS
+(version 2.3 or later).  If you build from source, you must tell the
+configure program that you are using GAS or you won't get debugging
+support.  A non-standard debug format is used, since until recently HP
+considered their debug format a trade secret.  Thanks to the work of
+lots of good folks both inside and outside HP, the company has seen the
+error of its ways and has now released the required information.  The
+team at the University of Utah that did the gcc port now has code that
+understands the native HP format.
+
+There are binaries for GNU tools in
+@file{ftp://jaguar.cs.utah.edu/dist/},
+but these are older versions.
+
+Jeff Law has left the University of Utah, so the Utah prebuilt
+binaries may be discontinued.
+
+@node g++ for Solaris 2.x, g++ for other platforms, g++ for HP, basics
+@section Getting gcc/g++ binaries for Solaris 2.x
+
+``Sun took the C compiler out of Solaris 2.x.  Am I stuck?''
+
+@cindex Solaris
+@cindex gcc/g++ binaries for Solaris
+
+You'll need to get prebuilt binaries from someone.
+
+It used to be that you could get GCC binaries from prep.ai.mit.edu;
+these are no longer there.
+
+@cindex Solaris pkgadd utility
+The WWW site @file{http://smc.vnet.net/solaris_2.5.html}
+contains various
+GNU and freeware programs for Solaris2.5 running on the sparc. These are
+packaged to enable easy installation using the Solaris ``pkgadd'' utility.
+These include GNU emacs, gcc, gdb, perl, and others.  These versions
+are more recent than the binaries at ``prep'' (gcc 2.7.2 and libg++
+2.7.1 are there).
+
+@node g++ for other platforms, 1.x vs 2.x versions, g++ for Solaris 2.x, basics
+@section How do I get a copy of g++ for (some other platform)?
+
+@cindex Windows NT support
+As of gcc-2.7.x, there is Windows NT support in gcc.  Some special
+utilities are required.  See the INSTALL file from the distribution.
+If you're interested in GNU tools on Windows NT, see
+@file{http://www.cygnus.com/misc/gnu-win32/} on the WWW, or the
+anonymous FTP directory
+@file{ftp://ftp.cygnus.com/pub/gnu-win32/}.
+
+@cindex VMS support
+@cindex VAX
+@cindex VMS, g++/libg++ precompiled
+
+The standard gcc/g++ distribution includes VMS support for the Vax.
+Since the FSF people don't use VMS, it's likely to be somewhat less
+solid than the Unix version.  Precompiled copies of g++ and libg++ in
+VMS-installable form for the Vax are available by FTP from
+@file{ftp://mango.rsmas.miami.edu/pub/VMS-gcc/}.
+
+@cindex OpenVMS/Alpha
+Klaus Kaempf (kkaempf@@progis.de)
+has done a port to OpenVMS for the Alpha; this is not yet a
+part of the official gcc/g++.
+The port includes g++ and all libraries from the libg++ distribution.  See
+@file{http://www.progis.de} for more details.
+
+@cindex MS-DOS support
+@cindex Delorie's gcc/g++
+@cindex DJGPP
+@cindex EMX
+There are two different versions of gcc/g++ for MS-DOS: EMX and DJGPP.
+EMX also works for OS/2 and is described later.
+DJGPP is DJ Delorie's port.  It can be found on many FTP archive
+sites; try
+@file{ftp://ftp.coast.net/SimTel/vendors/djgpp/}
+or, for a complete list, see
+@file{http://www.delorie.com/djgpp/getting.html}.
+
+
+The latest version of DJGPP is 2.00.  See
+@file{http://www.delorie.com/djgpp/v2/} for information on this version.
+
+FSF sells floppies with DJGPP on them; see above for ordering software
+from the FSF.
+
+DJGPP has its own newsgroup: @file{comp.os.msdos.djgpp}.
+
+@cindex Amiga support
+Development and porting efforts for GNU tools, including gcc/g++, for
+the Amiga are maintained by an initiative named ADE (Amiga Developers
+Environment.  More information about ADE is available at
+@file{http://www.ninemoons.com/}.
+
+For more information on Amiga ports of gcc/g++, retrieve the file
+@file{ftp://prep.ai.mit.edu/pub/gnu/MicrosPorts/Amiga}.
+
+@cindex Atari ST support
+A port of gcc to the Atari ST can be found at @*
+@file{ftp://atari.archive.umich.edu/atari/Gnustuff/Tos}
+along with many
+other GNU programs.  This version is usually the same as the latest FSF
+release.  See the ``Software FAQ'' for the Usenet group
+@file{comp.sys.atari.st} for more information.
+
+@cindex EMX port 
+@cindex OS/2 support
+
+EMX is a port of gcc to OS/2; it can also be used on MS-DOS.  In addition to
+the compiler port, the EMX port's C library attempts to provide a
+Unix-like environment.  For more information ask around on
+@file{comp.os.os2.programmer.porting}.  Version 0.9c, based on gcc-2.7.2.1,
+was released in
+November 1996.  It is available by FTP and the WWW from, among other
+places
+
+@example
+@file{http://www.os2ss.com/unix/emx09c/}
+@file{ftp://ftp.cdrom.com/pub/os2/emx09c/} (US)
+@file{ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/} (Germany)
+@end example
+
+Eberhard Mattes did the EMX port.  His address is
+mattes@@azu.informatik.uni-stuttgart.de.
+Read the FAQ file included with the distribution before harrassing the author.
+
+@cindex Apple support
+@cindex Macintosh support
+
+I'm looking for more information on gcc/g++ support on the Apple
+Macintosh.  Until recently, this FAQ did not provide such information,
+but FSF is no longer boycotting Apple as the League for Programming
+Freedom boycott has been dropped.
+
+Versions 1.37.1 and 2.3.3 of gcc were ported by Stan Shebs and are available
+at @*
+@file{ftp://ftp.cygnus.com/pub/mac}
+
+They are both interfaced to MPW.
+Stan is working on a version using the current (post-2.7) sources, contact
+him directly (shebs@@cygnus.com) for more information.
+
+@node 1.x vs 2.x versions,  , g++ for other platforms, basics
+@section But I can only find g++-1.42!
+
+``I keep hearing people talking about g++ 2.7.2 (or some other number
+starting with 2), but the latest version I can find is g++ 1.42.
+Where is it?''
+
+@cindex Objective-C
+@cindex g++, version number
+As of gcc 2.0, C, C++, and Objective-C as well are all combined into a
+single distribution called gcc.  If you get gcc you already have g++.  The
+standard installation procedure for any gcc version 2 compiler will
+install the C++ compiler as well.
+
+One could argue that we shouldn't even refer to "g++-2.x.y" but it's a
+convention.  It means ``the C++ compiler included with gcc-2.x.y.''
+
+@node installation, evolution, basics, Top
+@chapter Installation Issues and Problems
+
+@menu
+* gcc-2 + g++-1::               
+* what else do I need?::        
+* use GNU linker?::             
+* Use GNU assembler?::          
+* shared libraries::            
+* repository::                  
+* repo bugs::                   
+* Use GNU C library?::          
+* Global constructor problems::  
+* Strange assembler errors::    
+* Other problems building libg++::  
+* More size_t problems::        
+* Rebuild libg++?::             
+* co-existing versions::        
+* Installing on Linux::         
+* Linux Slackware 3.0::         
+@end menu
+
+@node gcc-2 + g++-1, what else do I need?, installation, installation
+@section I can't build g++ 1.x.y with gcc-2.x.y!
+
+``I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
+I'm having major problems.  What's going on?''
+
+@cindex g++, building 
+If you wish to build g++-1.42, you must obtain gcc-1.42 first.  The
+installation instructions for g++ version 1 leave a lot to be desired,
+unfortunately, and I would recommend that, unless you have a special
+reason for needing the 1.x compiler, that C++ users use the latest
+g++-2.x version, as it
+is the version that is being actively maintained.
+
+@cindex g++, template support
+@cindex Templates
+@cindex ANSI draft standard
+There is no template support in g++-1.x, and it is generally much further
+away from the ANSI draft standard than g++-2.x is.
+
+@node what else do I need?, use GNU linker?, gcc-2 + g++-1, installation
+@section OK, I've obtained gcc; what else do I need?
+
+@cindex libg++
+First off, you'll want libg++ as you can do almost nothing without it
+(unless you replace it with some other class library).
+
+@cindex GNU GAS 
+@cindex GNU GAS [assembler]
+Second, depending on your platform, you may need "GAS", the GNU assembler,
+or the GNU linker (see next question).
+
+@cindex GNU gdb
+Finally, while it is not required, you'll almost certainly want the GNU
+debugger, gdb.  The latest version is
+4.16, released April 22, 1996.
+Other debuggers (like dbx, for example) will normally not be able to
+understand at least some of the debug information produced by g++.
+
+@node use GNU linker?, Use GNU assembler?, what else do I need?, installation
+@section Should I use the GNU linker, or should I use "collect"?
+
+@cindex Linker
+@cindex System VR3, linker
+@cindex System VR4, linker
+First off, for novices: special measures must be taken with C++ to arrange
+for the calling of constructors for global or static objects before the
+execution of your program, and for the calling of destructors at the end.
+(Exception: System VR3 and System VR4 linkers, Linux/ELF, and some other
+systems support user-defined
+segments; g++ on these systems requires neither the GNU linker nor
+collect.  So if you have such a system, the answer is that you don't
+need either one, though using GNU ld does have some advantages over
+the native linker in some cases).
+
+@cindex AT&T cfront
+@cindex Cfront-end
+@cindex collect program
+@cindex GNU linker
+@cindex GNU binutils
+If you have experience with AT&T's "cfront", this function is performed
+there by programs named "patch" or "munch".  With GNU C++, it is performed
+either by the GNU linker or by a program known as "collect".  The collect
+program is part of the gcc-2.x distribution; you can obtain the GNU linker
+separately as part of the "binutils" package.  The latest version of
+binutils is 2.7, released July 10, 1996; 2.6 is in common use and works
+well.
+
+(To be technical, it's "collect2"; there were originally several
+alternative versions of collect, and this is the one that survived).
+
+There are advantages and disadvantages to either choice.
+
+Advantages of the GNU linker:
+@cindex GNU linker, advantages
+@cindex GNU ld
+@cindex ld [GNU linker]
+
+It's faster than using collect -- collect basically runs the standard Unix
+linker on your program twice, inserting some extra code after the first
+pass to call the constructors.  This is a sizable time penalty for large
+programs.  The GNU linker does not require this extra pass.
+
+GNU ld reports undefined symbols using their true names, not the mangled
+names (but as of 2.7.0 so does collect).
+
+If there are undefined symbols, GNU ld reports which object file(s) refer to
+the undefined symbol(s).  On some OSes (e.g. SunOS, Solaris) the native
+linker does not do this, so you have to track down who's referring to
+the missing symbols yourself.
+
+As of binutils version 2.2, on systems that use the so-called "a.out"
+debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
+the debug symbol table considerably.  The 2.7 version adds some symbol
+table compression for ELF and Solaris targets.
+
+@cindex collect linker, advantages
+Advantages of collect:
+
+@cindex Shared libraries
+If your native linker supports shared libraries, you can use shared
+libraries with collect.  This used to be a strong reason @emph{not}
+to use the GNU linker, but recent versions of GNU ld support linking
+with shared libraries on many platforms, and creating shared libraries
+on a few (such as Intel x86 systems that use ELF object format as well
+as SunOS and Solaris).
+
+@xref{shared libraries}
+
+@cindex GNU linker, porting
+The GNU linker has not been ported to as many platforms as g++ has, so you
+may be forced to use collect.
+
+If you use collect, you don't need to get something extra and figure out
+how to install it; the standard gcc installation procedure will do it for you.
+
+I used to say at this point that I don't see a clear win for either
+linking alternative, but with all the improvements in the GNU linker
+I think that it is now the better choice.  Take your pick.
+
+If you run Linux, the only available linker is the GNU linker.
+
+@node Use GNU assembler?, shared libraries, use GNU linker?, installation
+@section Should I use the GNU assembler, or my vendor's assembler?
+
+@cindex Assembler
+@cindex GNU GAS
+This depends on your platform and your decision about the GNU linker.  For
+most platforms, you'll need to use GAS if you use the GNU linker.  For
+some platforms, you have no choice; check the gcc installation notes to
+see whether you must use GAS.  But you can usually use the vendor's
+assembler if you don't use the GNU linker.
+
+The GNU assembler assembles faster than many native assemblers; however,
+on many platforms it cannot support the local debugging format.
+
+It used to be that the GNU assembler couldn't handle
+position-independent code on SunOS.  This is no longer true if you
+have version 2.6 or newer.
+
+On HPUX or IRIX, you must use GAS (and configure gcc with the
+@code{--with-gnu-as} option) to debug your programs.  GAS is
+strongly recommended particularly on the HP platform because of
+limitations in the HP assembler.
+
+The GNU assembler has been merged with the binutils
+distribution, so the GNU assembler and linker are now together in
+this package (as of binutils version 2.5.1).
+
+On Linux the assembler is the GNU assembler.
+
+@node shared libraries, repository, Use GNU assembler?, installation
+@section How do I build shared libraries with g++?
+
+For gcc-2.7.0 and later, building C++ shared libraries should work fine
+on supported platforms (HPUX 9+, IRIX 5+, DEC UNIX (formerly OSF/1),
+SGI/IRIX, AIX, SunOS 4, Linux/ELF and all targets using SVR4-style ELF shared
+libraries).  There are two separate issues: building libg++ as a shared
+library, and making your own shared libraries.  For libg++ it is simply
+a matter of giving the @code{--enable-shared} option to the configure
+program.  When compiling your own code for shared libraries you
+generally
+must use the @code{-fPIC} flag to get position-independent code.
+
+@cindex -shared flag of gcc
+
+If your shared library contains global or static objects with
+constructors, then make sure to use @code{gcc -shared}, not
+@code{ld}, to create the shared library.  This will make sure
+that any processor-specific magic needed to execute the constructors
+is included.
+
+In theory, constructors for objects in your shared library should be
+called when the library is opened (by dlopen or equivalent).  This
+does not work on some platforms (e.g. SunOS4; it does work on Solaris
+and ELF systems such as Linux): on the broken platforms, the
+constructors are not called correctly.
+
+David Nilsen has suggested the following workaround:
+
+The thing to realize is that if you link your dynamic module with the
+@code{-shared} flag, the collect program nicely groups all the static
+ctors/dtors for you into a list and sets up a function that will call
+them (Note: this means that this trick won't work if you use the GNU
+linker without collect (@pxref{use GNU linker?}).
+
+The magic is knowing these function names.  Currently, they're called:
+
+@example
+_GLOBAL__DI   <-- calls all module constructors
+_GLOBAL__DD   <-- calls all module destructors
+@end example
+
+[ possibly the leading underscore will differ between platforms: jbuck ]
+
+Therefore, if you make a wrapper around dlopen that looks up the
+symbol @code{_GLOBAL__DI} (or @code{__GLOBAL__DI} on SunOS4 machines), and
+calls it, you'll simulate getting the constructors called.
+
+You also need to set up the destructors to be called as well, so you
+need to put a wrapper around dlclose, which will call the
+@code{_GLOBAL__DD} function in the module when/if it's unloaded.
+
+Lastly, to get things 100% correct, you need to set up the destructors
+to also be called if the module is not unloaded, but the main program
+exits.  I do this by registering a single function with @code{atexit()} that
+calls all the destructors left in dynamically loaded modules.
+
+@cindex Shared version of libg++
+Check the file @file{README.SHLIB} from the libg++ distribution for more
+about making and using shared libraries.
+
+@cindex Shared libraries with HP
+
+A patch is needed to build shared versions of version 2.7.2 of libg++
+and libstdc++ on the HP-PA architecture.  You can find the patch at
+@file{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}.
+
+@node repository, repo bugs, shared libraries, installation
+@section How do I use the new repository code?
+
+@cindex repo patch
+Because there is some disagreement about the details of the template
+repository mechanism, you'll need to obtain a patch from Cygnus Support
+to enable the 2.7.2 repository code.  You can obtain the patch by
+anonymous FTP: @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz}.
+
+There are patches for 2.7.0 and 2.7.1 in the same directory, though
+if you're going to rebuild the compiler you should use the latest one.
+
+@cindex repo patch for BSD
+If you're running NetBSD or BSDI, the Cygnus repo patch is not quite
+correct.  Tim Liddelow has made an alternate version available at
+@file{ftp://ftp.cst.com.au/pub/gcc-2.7.2-repo-bsd.gz}.
+
+After you've applied the patch, the @code{-frepo} flag will enable the
+repository mechanism.  The flag works much like the existing
+@code{-fno-implicit-templates} flag, except that auxiliary files, with
+an @file{.rpo} extension, are built that specify what template
+expansions are needed.  At link time, the (patched) collect program
+detects missing templates and recompiles some of the object files
+so that the required templates are expanded.
+
+Note that the mechanism differs from that of cfront in that template
+definitions still must be visible at the point where they are to be
+expanded.  No assumption is made that @file{foo.C} contains template
+definitions corresponding to template declarations in @file{foo.h}.
+
+@cindex closure with repo
+@cindex template closure
+Jason Merrill writes: ``To perform closure on a set of objects, just try
+to link them together.  It will fail, but as a side effect all needed
+instances will be generated in the objects.''
+
+@node repo bugs, Use GNU C library?, repository, installation
+@section Known bugs and problems with the repo patch
+
+``The @code{-frepo} won't expand templated friend functions!''
+
+This is a known bug; currently you'll have to explicitly instantiate
+friend functions when using @code{-frepo} due to this bug (in 2.7.0
+through 2.7.2 at least).
+
+With earlier versions of the repo patch, there was a bug that happens
+when you have given a quoted command line switch, something like
+
+@example
+-D'MESSAGE="hello there"'
+@end example
+
+The repo code tries to recompile files using the same flags you
+originally specified, but doesn't quote arguments that need quoting,
+resulting in failures in some cases.  This is no longer a problem
+with the 2.7.2 patch.
+
+@node Use GNU C library?, Global constructor problems, repo bugs, installation
+@section Should I use the GNU C library?
+
+@cindex GNU C library
+@cindex libg++
+At this point in time, no (unless you are running Linux or the GNU Hurd
+system).  The GNU C library is still very young, and
+libg++ still conflicts with it in some places.  Use your native C library
+unless you know a lot about the gory details of libg++ and gnu-libc.  This
+will probably change in the future.
+
+@node Global constructor problems, Strange assembler errors, Use GNU C library?, installation
+@section Global constructors aren't being called
+
+@cindex global constructors
+``I've installed gcc and it almost works, but constructors and
+destructors for global objects and objects at file scope aren't being
+called.  What did I do wrong?''
+
+@cindex collect program
+It appears that you are running on a platform that requires you to
+install either "collect2" or the GNU linker, and you have done neither.
+For more information, see the section discussing the GNU linker
+(@pxref{use GNU linker?}).
+
+@cindex constructor problems on Solaris
+@cindex Solaris, constructor problems
+On Solaris 2.x, you shouldn't need a collect program and GNU ld doesn't run.
+If your global constructors aren't being called, you may need to install
+a patch, available from Sun, to fix your linker.  The number of the
+``jumbo patch'' that applies is 101409-03.  Thanks to Russell Street
+(r.street@@auckland.ac.nz) for this info.
+
+@cindex IRIX, installing collect
+It appears that on IRIX, the collect2 program is not being installed
+by default during the installation process, though it is required;
+you can install it manually by executing
+
+@example
+make install-collect2
+@end example
+
+from the gcc source directory after installing the compiler.  (I'm
+not certain for which versions of gcc this problem occurs, and whether
+it is still present).
+
+@node Strange assembler errors, Other problems building libg++, Global constructor problems, installation
+@section Strange assembler errors when linking C++ programs
+
+``I've installed gcc and it seemed to go OK, but when I attempt to link
+any C++ program, I'm getting strange errors from the assembler!  How
+can that be?''
+
+The messages in question might look something like
+
+@example
+as: "/usr/tmp/cca14605.s", line 8: error: statement syntax
+as: "/usr/tmp/cca14605.s", line 14: error: statement syntax
+@end example
+
+(on a Sun, different on other platforms).  The important thing is that
+the errors come out at the link step, @emph{not} when a C++ file is
+being compiled.
+
+@cindex nm program
+@cindex GNU nm program
+Here's what's going on: the collect2 program uses the Unix ``nm''
+program to obtain a list of symbols for the global constructors and
+destructors, and it builds a little assembly language module that
+will permit them all to be called.  If you're seeing this symptom,
+you have an old version of GNU nm somewhere on your path.  This old
+version prints out symbol names in a format that the collect2 program
+does not expect, so bad assembly code is generated.
+
+The solution is either to remove the old version of GNU nm from your
+path (and that of everyone else who uses g++), or to install a newer
+version (it is part of the GNU "binutils" package).  Recent versions
+of GNU nm do not have this problem.
+
+@node Other problems building libg++, More size_t problems, Strange assembler errors, installation
+@section Other problems building libg++
+@cindex libg++ on Ultrix
+@cindex libg++ on SunOS
+
+``I am having trouble building libg++.  Help!''
+
+On some platforms (for example, Ultrix), you may see errors complaining
+about being unable to open dummy.o.  On other platforms (for example,
+SunOS), you may see problems having to do with the type of size_t.
+The fix for these problems is to make libg++ by saying "make CC=gcc".
+According to Per Bothner, it should no longer be necessary to specify
+"CC=gcc" for libg++-2.3.1 or later.
+
+``I built and installed libg++, but g++ can't find it.  Help!''
+
+The string given to @file{configure} that identifies your system must
+be the same when you install libg++ as it was when you installed gcc.
+Also, if you used the @code{--prefix} option to install gcc somewhere
+other than @file{/usr/local}, you must use the same value for
+@code{--prefix} when installing libg++, or else g++ will not be able
+to find libg++.
+
+@cindex patch for libg++-2.6.2
+
+The toplevel Makefile in the libg++ 2.6.2 distribution is broken, which
+along with a bug in g++ 2.6.3 causes problems linking programs that use the
+libstdc++ complex classes.  A patch for this is available from
+@file{ftp://ftp.cygnus.com//pub/g++/libg++-2.6.2-fix.gz}.
+
+@node More size_t problems, Rebuild libg++?, Other problems building libg++, installation
+@section But I'm @emph{still} having problems with @code{size_t}!
+
+@cindex Type of size_t
+``I did all that, and I'm @emph{still} having problems with disagreeing
+definitions of size_t, SIZE_TYPE, and the type of functions like
+@code{strlen}.''
+
+@cindex _G_config.h
+The problem may be that you have an old version of @file{_G_config.h}
+lying around.  As of libg++ version 2.4, @file{_G_config.h}, since it is
+platform-specific, is inserted into a different directory; most include
+files are in @file{$prefix/lib/g++-include}, but this file now lives in
+@file{$prefix/$arch/include}.  If, after upgrading your libg++, you find that
+there is an old copy of @file{_G_config.h} left around, remove it,
+otherwise g++ will find the old one first.
+
+@node Rebuild libg++?, co-existing versions, More size_t problems, installation
+@section Do I need to rebuild libg++ to go with my new g++?
+
+``After I upgraded g++ to the latest version, I'm seeing undefined
+symbols.''
+
+or
+
+``If I upgrade to a new version of g++, do I need to reinstall libg++?''
+
+@cindex Incompatibilities between g++ versions
+
+As a rule, the first two digits of your g++ and libg++ should be the
+same.  Normally when you do an upgrade in the ``minor version number''
+(2.5.7 to 2.5.8, say) there isn't a need to rebuild libg++, but there
+have been a couple of exceptions in the past.
+
+@node co-existing versions, Installing on Linux, Rebuild libg++?, installation
+@section I want several versions of g++ and libg++ to co-exist.
+
+I recommend against using the @code{-V} flag to make multiple versions
+of gcc/g++ co-exist, unless they are different minor releases that can use
+the same compiled version of libg++.  The reason is that all these
+versions will try to use the same libg++ version, which usually will
+not work.
+
+Instead, use the @code{--prefix} flag when configuring gcc.  Use a
+different value of @code{--prefix} for each gcc version.  Use the
+same value of @code{--prefix} when configuring libg++.  You can then
+have any number of co-existing gcc/libg++ pairs.  Symbolic links can
+be used so that users don't need to put all these different directories
+on their paths.
+
+One possible system to use is to set @code{--prefix} to
+@file{/usr/local/gcc-2.x.y} for version 2.x.y of gcc, and to link
+whichever version of gcc you wish to be the default into
+@file{/usr/local/bin/gcc} and @file{/usr/local/bin/g++}.
+
+@node Installing on Linux, Linux Slackware 3.0, co-existing versions, installation
+@section Trouble installing g++ and libg++ on Linux
+
+``I've downloaded the latest g++ and libg++ and I'm trying to install
+them on Linux, and I'm having lots of problems.''
+
+@cindex Linux
+FSF releases of libg++ won't install on Linux unchanged, since Linux
+uses are part of the libio library from libg++ for its standard C
+library, only this is changed in a way that it clashes with libg++.
+This means that you'll need a patched version of libg++ for it to
+work.
+
+If you want to upgrade to a new gcc/libg++ combination, the easiest
+thing to do is to grab the prebuilt versions of gcc and libg++ for Linux
+from @file{ftp://tsx-11.mit.edu/pub/linux/packages/GCC}.  Follow the
+directions carefully.  If you want to build from source, you'll need
+a patch for libg++; the Linux developers have named the patched libg++
+version libg++-2.7.1.3 and there is a patch file in the above-named
+directory.
+
+See @file{http://sunsite.unc.edu/LDP/HOWTO/GCC-HOWTO.html},
+the Linux GCC HOWTO, for more on gcc/g++ and Linux.
+
+Linux is in the process of switching over to the GNU C library, version
+2, which will become Linux libc version 6.  Once this process is
+complete, there's a good chance that the installation process on Linux
+will be smoother, but only experts should try making this new library
+work at this point.
+
+@node Linux Slackware 3.0,  , Installing on Linux, installation
+@section Problems with g++ on Linux Slackware 3.0
+
+@cindex Slackware
+@cindex Linux Slackware
+``When I try to compile the traditional Hello, world program on Linux,
+the compiler can't find @file{iostream.h}.  What's the deal?''
+
+You probably have the Slackware 3.0 release.  There's an error in the
+setup.  It's easy to fix, though; log in as root, and make a symbolic
+link:
+
+@example
+ln -s /usr/lib/g++-include /usr/include/g++
+@end example
+
+@node evolution, User Problems, installation, Top
+@chapter The Evolution of g++
+
+This chapter discusses the evolution of g++ and describes what can be expected
+in the future.
+
+@menu
+* version 2.7.x::               What's changed in 2.7.x from earlier versions
+* libstdc++::                   The GNU C++ standard library
+* new work::                    What's been done since 2.7.x
+* egcs::                        The Experimental GNU Compiler System
+* When?::                       When can I get all this new stuff?
+@end menu
+
+@node version 2.7.x, libstdc++, evolution, evolution
+@section What's new in version 2.7.x of gcc/g++
+
+The current version of gcc/g++ is 2.7.2.2, released February 10, 1997.
+The only change between 2.7.2.1 and 2.7.2.2 is that support was added
+for using the GNU C library, version 2, on Linux; users not interested
+in that functionality have no reason to upgrade.
+The previous version of gcc/g++ is 2.7.2.1, released August 14, 1996.
+The current version of libg++ is 2.7.2, released July 4, 1996.
+
+Note that gcc 2.7.2.1 just consists of several small patches to
+gcc-2.7.2.  The release is mainly
+intended to fix platform-specific bugs and does not affect the C++
+``front end'' of the compiler (the part that parses your C++ code).
+
+The 2.7.x releases represent a great deal of work on the part of the g++
+maintainers to fix outstanding bugs and move the compiler closer to the
+current ANSI/ISO standards committee's working paper, including
+supporting many of the new features that have been added to the
+language.  I recommend that everyone read the NEWS file contained in the
+distribution (and that system administrators make the file available to
+their users).  I've borrowed liberally from this file here.
+
+@cindex C++ working paper
+If any features seem unfamiliar, you will probably want to
+look at the recently-released public review copy of the C++ Working
+Paper.  A new draft, dated 2 December 1996, has been released for
+public comment.  You can find it on the web at
+@file{http://www.cygnus.com/misc/wp/} or
+@file{http://www.maths.warwick.ac.uk/c++/pub/wp/html/cd2/}.
+See
+@file{http://www.setech.com/x3.html}
+or
+@file{http://www.maths.warwick.ac.uk/c++/pub/} to download the
+document in PostScript, PDF (Adobe Acrobat), HTML, or ASCII
+form.
+
+Here are the main points:
+
+@itemize @bullet
+@item
+@cindex for scope
+As described above, the scope of variables declared in the
+initialization part of a for statement has been changed; such variables
+are now visible only in the loop body.  Use @code{-fno-for-scope} to get
+the old behavior.  You'll need this flag to build groff version 1.09,
+Ptolemy, and many other free software packages.
+
+@item
+@cindex vtable duplication
+Code that does not use #pragma interface/implementation will most
+likely shrink dramatically, as g++ now only emits the vtable for a
+class in the translation unit where its first non-inline, non-abstract
+virtual function is defined.
+
+@item
+@cindex automatic template instantiation
+Support for automatic template instantiation has @emph{not} been enabled
+in the official distribution, due to a disagreement over design philosophies.
+But you can get a patch from Cygnus to turn it on; retrieve the patch
+from @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz} to patch
+gcc-2.7.2 (there are also patches for earlier gcc versions).
+
+@item
+@cindex exception handling, 2.7.0
+
+@xref{exceptions}
+
+@item
+@cindex run-time type identification
+Support for Run-Time Type Identification has been added with @code{-frtti}.
+This support is still in alpha; one major restriction is that any file
+compiled with @code{-frtti} must include @code{<typeinfo>} (@emph{not}
+@code{typeinfo.h} as the NEWS file says).
+Also, all C++ code you link with (including libg++) has to be built with
+@code{-frtti}, so it's still tricky to use.
+
+@item
+@cindex compiler-generated operators
+Synthesis of compiler-generated constructors, destructors and
+assignment operators is now deferred until the functions are used.
+
+@item
+@cindex assignment in conditional expressions
+The parsing of expressions such as @code{a ? b : c = 1}
+has changed from
+@code{(a ? b : c) = 1} to @code{a ? b : (c = 1)}.  This is a new C/C++
+incompatibility brought to you by the ANSI/ISO standards committee.
+
+@item
+@cindex new operator keywords
+The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
+or, or_eq, xor and xor_eq are now supported.  Use @code{-ansi} or
+@code{-foperator-names} to enable them.
+
+@item
+@cindex explicit keyword
+The @code{explicit} keyword is now supported.  @code{explicit} is used to mark
+constructors and type conversion operators that should not be used
+implicitly.
+
+@item
+@cindex user-defined type conversion
+Handling of user-defined type conversion has been improved.
+
+@item
+@cindex explicit template instantiation
+Explicit instantiation of template methods is now supported.  Also,
+@code{inline template class foo<int>;}
+can be used to emit only the vtable
+for a template class.
+
+@item
+@cindex -fcheck-new
+With -fcheck-new, g++ will check the return value of all calls to
+operator new, and not attempt to modify a returned null pointer.
+
+@item
+collect2 now demangles linker output, and c++filt has become part of
+the gcc distribution.
+
+@item
+Improvements to template instantiation: only members actually used
+are instantiated.  (Actually this is not quite true: some inline
+templates that are not successfully inlined may be expanded even
+though they are not needed).
+
+@end itemize
+
+@node libstdc++, new work, version 2.7.x, evolution
+@section The GNU Standard C++ Library
+
+The GNU Standard C++ Library (also called the ``GNU ANSI C++ Library''
+in places in the code) is not libg++, though it is included in the
+libg++ distribution.  Rather, it contains classes and functions
+required by the ANSI/ISO standard.  The copyright conditions are the
+same as those for for the iostreams classes; the LGPL is not used
+(@pxref{legalities}).
+
+This library, libstdc++, is in the libg++ distribution in versions 2.6.2
+and later.  It requires at least gcc 2.6.3 to build the libg++-2.6.2
+version; use at least gcc 2.7.0 to build the libg++ 2.7.0 version.  It
+contains a hacked-up version of HP's implementation of the Standard
+Template Library (@pxref{Standard Template Library}).  I've
+successfully used this Standard Template Library version to build
+a number of the demos you'll see on various web pages.
+
+As of version 2.7.0, the streams classes are now in libstdc++ instead of
+libg++, and libiostream is being phased out (don't use it).  The g++
+program searches this library.
+
+The maintainers of libg++ have de-emphasized work on the older libg++ classes
+in favor of enhancing libstdc++ to cover the full language, so while libg++
+will always be available, enhancements to it should not be expected.
+
+@node new work, egcs, libstdc++, evolution
+@section What can we expect in future gcc releases?
+
+A great deal of work has gone into enhancements to the C++ front end, as well
+as to other aspects of the compiler.
+
+The next major release(s) of gcc/g++ can be expected to have the following
+features:
+
+@itemize @bullet
+@cindex new template implementation
+@item
+A completely new template implementation, much closer to the draft
+standard.  Limitations in 2.7.2.x concerning inlining template functions
+will be eliminated.  Static template data members, template class member
+functions, partial specification, and default template arguments will be
+supported.  An instantiation method resembling that used in Borland C++
+(instantiating functions possibly in multiple .o files and using weak
+symbols to link correctly) will be provided, in addition to other
+options.  The SGI version of STL will be shipped with libstdc++ and will
+compile unchanged.
+
+@item
+@cindex new exception implementation
+Exception handling has been re-worked; exceptions will work together
+with optimization.
+Actually, there are two separate implementations: one based on setjmp/longjmp
+and designed to be highly portable, and one designed to be more efficient but
+requiring more processor-specific support (getting exceptions right has proven
+to be extremely difficult and has been the chief obstacle to getting a new
+release out).
+
+@item
+@cindex RTTI
+RTTI has been re-done to work correctly and is on by default.
+
+@item
+@cindex overloading
+Overloading has been re-worked to conform to the latest draft of the
+standard.
+@end itemize
+
+Features that are still missing include namespaces and templates as
+template arguments.
+
+@node egcs, When?, new work, evolution
+@section What's this I hear about egcs?
+
+The egcs effort is a new effort to merge several threads of gcc
+development and to provide a faster development process.
+For more information see @file{http://www.cygnus.com/egcs/}.
+
+@node When?,  , egcs, evolution
+@section OK, when can I get this stuff?
+
+The FSF has a policy of never announcing release dates in advance.
+I'm sure this is frustrating to a lot of people, since it's taken
+so long, and this frustration was one of the reasons the egcs effort
+was created.  An egcs release should be expected to occur in the
+very near future.   [ More on this next time ].
+
+@node User Problems, legalities, evolution, Top
+@chapter User Problems
+
+@menu
+* missing virtual table::       
+* for scope::                   
+* const constructor::           
+* unused parameter warnings::   
+* jump crosses initialization::  
+* Demangler::                   
+* static data members::         
+* internal compiler error::     
+* bug reports::                 
+* porting to g++::              
+* name mangling::               
+* problems linking with other libraries::  
+* documentation::               
+* templates::                   
+* undefined templates::         
+* redundant templates::         
+* Standard Template Library::   
+* STL and string::              
+* exceptions::                  
+* namespaces::                  
+* agreement with standards::    
+* compiling standard libraries::  
+* debugging on SVR4 systems::   
+* debugging problems on Solaris::  
+* X11 conflicts with libg++::   
+* assignment to streams::       
+@end menu
+
+@node missing virtual table, for scope, User Problems, User Problems
+@section Linker complains about missing virtual table
+
+``I'm getting a message complaining about an undefined virtual table.  Is
+this a compiler bug?''
+
+(On platforms that run neither collect nor the GNU linker, like Solaris,
+you may see an odd undefined symbol like "_vt.3foo", where foo is a
+class name).
+
+This is probably because you are missing a definition for the first
+(non-inline) virtual function of the class.  Since gcc-2.7.0, g++ uses
+a trick borrowed from cfront: the .o file containing the definition for
+the first non-inline virtual function for the class will also contain
+the virtual function table.
+
+@node for scope, const constructor, missing virtual table, User Problems
+@section gcc-2.7.0 breaks declarations in "for" statements!
+
+@cindex declarations in for statements
+@cindex for statements: declarations
+
+gcc-2.7.0 implements the new ANSI/ISO rule on the scope of variables
+declared in for loops.
+
+@example
+for (int i = 1; i <= 10; i++) @{
+        // do something here
+@}
+foo(i);
+@end example
+
+In the above example, most existing C++ compilers would pass the
+value 11 to the function @code{foo}.  In gcc 2.7 and in the ANSI/ISO
+working paper, the scope of @code{i} is only the for loop body, so
+this is an error.  So that old code can be compiled, the new gcc has
+a flag @code{-fno-for-scope} that causes the old rule to be used.
+@cindex -fno-for-scope
+
+As of 2.7.1, the compiler attempts to issue warnings about code that
+has different meanings under the two sets of rules, but the code is
+not perfect: the intent was that code that has valid, but different,
+meanings under the ARM rules and the working paper rules would give
+warnings but have the new behavior, and this doesn't seem to happen.
+
+The @code{-ffor-scope} flag under 2.7.1 and 2.7.2 gives the 2.7.0 behavior.
+
+@node const constructor, unused parameter warnings, for scope, User Problems
+@section g++ seems to want a const constructor.  What's that?
+
+gcc-2.7.1 introduced a bug that causes the compiler to ask for a
+const constructor (there's no such thing in C++) in certain situations
+where a const object appears in a template class.  Most cases have been
+fixed in gcc-2.7.2, but unfortunately not all.  Still, if you're running
+gcc-2.7.1 and have this problem, upgrade to 2.7.2; it is a vast improvement.
+
+@cindex ObjectSpace<STL>
+
+The default constructor for the template @code{pair} in ObjectSpace's
+implementation of STL triggers the bug in one place, for gcc 2.7.2.  If
+you're using ObjectSpace<STL> and having this problem, simply
+change the default constructor from
+
+@example
+os_pair () : first (T1 ()), second (T2 ()) @{@}
+@end example
+
+to just
+
+@example
+os_pair () @{@}
+@end example
+
+Once this is done, ObjectSpace<STL> works fairly well.
+
+@node unused parameter warnings, jump crosses initialization, const constructor, User Problems
+@section How to silence ``unused parameter'' warnings
+
+@cindex -Wall
+@cindex -Wunused
+
+``When I use @code{-Wall} (or @code{-Wunused}), g++ warns about
+unused parameters.  But the parameters have to be there, for use
+in derived class functions.  How do I get g++ to stop complaining?''
+
+The answer is to simply omit the names of the unused parameters when
+defining the function.  This makes clear, both to g++ and to readers
+of your code, that the parameter is unused.  For example:
+
+@example
+int Foo::bar(int arg) @{ return 0; @}
+@end example
+
+will give a warning for the unused parameter @code{arg}.  To suppress
+the warning write
+
+@example
+int Foo::bar(int) @{ return 0; @}
+@end example
+
+@node jump crosses initialization, Demangler, unused parameter warnings, User Problems
+@section g++ objects to a declaration in a case statement
+
+``The compiler objects to my declaring a variable in one of the branches
+of a case statement.  Earlier versions used to accept this code.  Why?''
+
+The draft standard does not allow a goto or a jump to a case label to
+skip over an initialization of a variable or a class object.  For
+example:
+
+@example
+switch ( i ) @{
+  case 1:
+    Object obj(0);
+        ...
+    break;
+  case 2:
+       ...
+    break;
+@}    
+@end example
+
+The reason is that @code{obj} is also in scope in the rest of the switch
+statement.
+
+As of version 2.7.0, the compiler will object that the jump to the
+second case level crosses the initialization of @code{obj}.  Older
+compiler versions would object only if class Object has a destructor.
+In either case, the solution is to add a set of curly braces around
+the case branch:
+
+@example
+  case 1:
+    @{
+       Object obj(0);
+        ...
+       break;
+    @}
+@end example
+
+@node Demangler, static data members, jump crosses initialization, User Problems
+@section Where can I find a demangler?
+
+@cindex demangler program
+A g++-compatible demangler named @code{c++filt} can be found in the
+@file{binutils} distribution.  This distribution (which also contains
+the GNU linker) can be found at any GNU archive site.
+
+As of version 2.7.0, @code{c++filt} is included with gcc and is
+installed automatically.  Even better, it is used by the @code{collect}
+linker, so you don't see mangled symbols anymore (except on platforms
+that use neither collect nor the GNU linker, like Solaris).
+
+@node static data members, internal compiler error, Demangler, User Problems
+@section Linker reports undefined symbols for static data members
+
+@cindex Static data members
+``g++ reports undefined symbols for all my static data members when I link,
+even though the program works correctly for compiler XYZ.  What's going on?''
+
+The problem is almost certainly that you don't give definitions for
+your static data members.  If you have
+
+@example
+class Foo @{
+       ...
+       void method();
+       static int bar;
+@};
+@end example
+
+you have only declared that there is an int named Foo::bar and a member
+function named Foo::method that is defined somewhere.  You still need to
+define @emph{both} method() and bar in some source file.  According to
+the draft ANSI standard, you must supply an initializer, such as
+
+@example
+int Foo::bar = 0;
+@end example
+
+@noindent
+in one (and only one) source file.
+
+@node internal compiler error, bug reports, static data members, User Problems
+@section What does ``Internal compiler error'' mean?
+
+It means that the compiler has detected a bug in itself.  Unfortunately,
+g++ still has many bugs, though it is a lot better than it used to be.
+If you see this message, please send in a complete bug report (see next
+section).
+
+@node bug reports, porting to g++, internal compiler error, User Problems
+@section I think I have found a bug in g++.
+
+@cindex Bug in g++, newly found
+``I think I have found a bug in g++, but I'm not sure.  How do I know,
+and who should I tell?''
+
+@cindex Manual, for gcc
+First, see the excellent section on bugs and bug reports in the gcc manual
+(which is included in the gcc distribution).  As a short summary of that
+section: if the compiler gets a fatal signal, for any input, it's a bug
+(newer versions of g++ will ask you to send in a bug report when they
+detect an error in themselves).  Same thing for producing invalid
+assembly code.
+
+When you report a bug, make sure to describe your platform (the type of
+computer, and the version of the operating system it is running) and the
+version of the compiler that you are running.  See the output of the
+command @code{g++ -v} if you aren't sure.  Also provide enough code
+so that the g++ maintainers can duplicate your bug.  Remember that the
+maintainers won't have your header files; one possibility is to send
+the output of the preprocessor (use @code{g++ -E} to get this).  This
+is what a ``complete bug report'' means.
+
+I will add some extra notes that are C++-specific, since the notes from
+the gcc documentation are generally C-specific.
+
+@cindex g++ bug report
+First, mail your bug report to "bug-g++@@prep.ai.mit.edu".  You may also
+post to @file{gnu.g++.bug}, but it's better to use mail, particularly if you
+have any doubt as to whether your news software generates correct reply
+addresses.  Don't mail C++ bugs to bug-gcc@@prep.ai.mit.edu.
+
+@strong{News:} as I write this (late February 1996) the gateway
+connecting the bug-g++ mailing list and the @file{gnu.g++.bug} newsgroup
+is (temporarily?) broken.  Please mail, do not post bug reports.
+
+@cindex libg++ bug report
+If your bug involves libg++ rather than the compiler, mail to
+bug-lib-g++@@prep.ai.mit.edu.  If you're not sure, choose one, and if you
+guessed wrong, the maintainers will forward it to the other list.
+
+@cindex C++, reference books
+@cindex ARM [Annotated C++ Ref Manual]
+Second, if your program does one thing, and you think it should do
+something else, it is best to consult a good reference if in doubt.
+The standard reference is the draft working paper from the ANSI/ISO
+C++ standardization committee, which you can get on the net.
+For PostScript and PDF (Adobe Acrobat) versions, see the
+archive at @file{ftp://research.att.com/dist/stdc++/WP}.  For HTML and ASCII
+versions, see @file{ftp://ftp.cygnus.com/pub/g++}.  On the World Wide Web, see
+@file{http://www.cygnus.com/misc/wp/}.
+
+An older
+standard reference is "The Annotated C++ Reference Manual", by Ellis and
+Stroustrup (copyright 1990, ISBN #0-201-51459-1).  This is what they're
+talking about on the net when they refer to ``the ARM''.  But you should
+know that changes have been made to the language since then.
+
+The ANSI/ISO C++ standards committee have adopted some changes to the
+C++ language since the publication of the original ARM, and newer
+versions of g++ (2.5.x and later) support some of these changes, notably
+the mutable keyword (added in 2.5.0), the bool type (added in 2.6.0),
+and changes in the scope of variables defined in for statements (added
+in 2.7.0).
+You can obtain an addendum to the ARM explaining many of these changes by FTP
+from @file{ftp://ftp.std.com/AW/stroustrup2e/new_iso.ps}.
+
+@cindex AT&T cfront
+Note that the behavior of (any version of) AT&T's "cfront" compiler is
+NOT the standard for the language.
+
+@node porting to g++, name mangling, bug reports, User Problems
+@section Porting programs from other compilers to g++
+
+``I have a program that runs on <some other C++ compiler>, and I want
+to get it running under g++.  Is there anything I should watch out
+for?''
+
+@cindex Porting to g++
+
+Note that g++ supports many of the newer keywords that have recently
+been added to the language.  Your other C++ compiler may not support
+them, so you may need to rename variables and members that conflict
+with these keywords.
+
+There are two other reasons why a program that worked under one compiler
+might fail under another: your program may depend on the order of
+evaluation of side effects in an expression, or it may depend on the
+lifetime of a temporary (you may be assuming that a temporary object
+"lives" longer than the standard guarantees).  As an example of the
+first:
+
+@example
+void func(int,int);
+
+int i = 3;
+func(i++,i++);
+@end example
+
+@cindex Order of evaluation, problems in porting
+Novice programmers think that the increments will be evaluated in strict
+left-to-right order.  Neither C nor C++ guarantees this; the second
+increment might happen first, for example.  func might get 3,4, or it
+might get 4,3.
+
+@cindex Classes, problems in porting
+@cindex Problems in porting, class
+The second problem often happens with classes like the libg++ String
+class.  Let's say I have
+
+@example
+String func1();
+void func2(const char*);
+@end example
+
+and I say
+
+@example
+func2(func1());
+@end example
+
+because I know that class String has an "operator const char*".  So what
+really happens is
+
+@example
+func2(func1().convert());
+@end example
+
+@cindex temporaries
+where I'm pretending I have a convert() method that is the same as the
+cast.  This is unsafe in g++ versions before 2.6.0, because the
+temporary String object may be deleted after its last use (the call to
+the conversion function), leaving the pointer pointing to garbage, so by
+the time func2 is called, it gets an invalid argument.
+
+@cindex ANSI draft standard
+Both the cfront and the old g++ behaviors are legal according to the ARM,
+but the powers that be have decided that compiler writers were given
+too much freedom here.
+
+The ANSI C++ committee has now come to a resolution of the lifetime of
+temporaries problem: they specify that temporaries should be deleted at
+end-of-statement (and at a couple of other points).  This means that g++
+versions before 2.6.0 now delete temporaries too early, and cfront
+deletes temporaries too late.  As of version 2.6.0, g++ does things
+according to the new standard.
+
+@cindex Scope, problems in porting
+@cindex Problems in porting, scope
+For now, the safe way to write such code is to give the temporary a name,
+which forces it to live until the end of the scope of the name. For
+example:
+
+@example
+String& tmp = func1();
+func2(tmp);
+@end example
+
+Finally, like all compilers (but especially C++ compilers, it seems),
+g++ has bugs, and you may have tweaked one.  If so, please file a bug
+report (after checking the above issues).
+
+@node name mangling, problems linking with other libraries, porting to g++, User Problems
+@section Why does g++ mangle names differently from other C++ compilers?
+
+See the answer to the next question.
+@cindex Mangling names
+
+@node problems linking with other libraries, documentation, name mangling, User Problems
+@section Why can't g++ code link with code from other C++ compilers?
+
+``Why can't I link g++-compiled programs against libraries compiled by
+some other C++ compiler?''
+
+@cindex Mangling names
+@cindex Cygnus Support
+Some people think that,
+if only the FSF and Cygnus Support folks would stop being
+stubborn and mangle names the same way that, say, cfront does, then any
+g++-compiled program would link successfully against any cfront-compiled
+library and vice versa.  Name mangling is the least of the problems.
+Compilers differ as to how objects are laid out, how multiple inheritance
+is implemented, how virtual function calls are handled, and so on, so if
+the name mangling were made the same, your programs would link against
+libraries provided from other compilers but then crash when run.  For this
+reason, the ARM @emph{encourages} compiler writers to make their name mangling
+different from that of other compilers for the same platform.
+Incompatible libraries are then detected at link time, rather than at run
+time.
+@cindex ARM [Annotated C++ Ref Manual]
+@cindex Compiler differences
+
+@node documentation, templates, problems linking with other libraries, User Problems
+@section What documentation exists for g++ 2.x?
+
+@cindex g++, documentation
+Relatively little.
+While the gcc manual that comes with the distribution has some coverage
+of the C++ part of the compiler, it focuses mainly on the C compiler
+(though the information on the ``back end'' pertains to C++ as well).
+Still, there is useful information on the command line options and the
+#pragma interface and #pragma implementation directives in the manual,
+and there is a useful section on template instantiation in the 2.6 version.
+There is a Unix-style manual entry, "g++.1", in the gcc-2.x
+distribution; the information here is a subset of what is in the manual.
+
+You can buy a nicely printed and bound copy of this manual from the FSF;
+see above for ordering information.
+
+A draft of a document describing the g++ internals appears in the gcc
+distribution (called g++int.texi); it is incomplete but gives lots of
+information.
+
+For class libraries, there are several resources available:
+
+@itemize @bullet
+@item
+The libg++ distribution has a manual
+@file{libg++/libg++.texi} describing the old libg++ classes, and
+another manual @file{libio/iostream.texi} describing the iostreams
+implementation.
+@item
+While there is no libg++-specific document describing the STL
+implementation, SGI's web site, at @file{http://www.sgi.com/Technology/STL/},
+is an excellent resource.
+@end itemize
+
+@node templates, undefined templates, documentation, User Problems
+@section Problems with the template implementation
+
+@cindex g++, template support
+@cindex Templates
+
+g++ does not implement a separate pass to instantiate template functions
+and classes at this point; for this reason, it will not work, for the most
+part, to declare your template functions in one file and define them in
+another.  The compiler will need to see the entire definition of the
+function, and will generate a static copy of the function in each file
+in which it is used.
+
+(The experimental template repository code (@pxref{repository}) that
+can be added to 2.7.0 or later does implement a separate pass, but there
+is still no searching of files that the compiler never saw).
+
+@cindex -fno-implicit-templates
+For version 2.6.0, however, a new switch @code{-fno-implicit-templates}
+was added; with this switch, templates are expanded only under user
+control.  I recommend that all g++ users that use templates read the
+section ``Template Instantiation'' in the gcc manual (version 2.6.x
+and newer).  g++ now supports explicit template expansion using the
+syntax from the latest C++ working paper:
+
+@example
+template class A<int>;
+template ostream& operator << (ostream&, const A<int>&);
+@end example
+
+@cindex template limitations
+As of version 2.6.3, there are still a few limitations in the template
+implementation besides the above (thanks to Jason Merrill for this info):
+These are still present in version 2.7.2, but a new implementation of
+templates planned for version 2.8 will eliminate them.
+
+@enumerate 1
+@item
+Static data member templates are not supported.  You can work around
+this by explicitly declaring the static variable for each template
+specialization:
+
+@example
+template <class T> struct A @{
+  static T t;
+@};
+
+template <class T> T A<T>::t = 0; // gets bogus error
+int A<int>::t = 0;                // OK (workaround)
+@end example
+
+(still a limitation in 2.7.2)
+
+@item
+Template member names are not available when defining member function
+templates.
+
+@example
+template <class T> struct A @{
+  typedef T foo;
+  void f (foo);
+  void g (foo arg) @{ ... @}; // this works
+@};
+
+template <class T> void A<T>::f (foo) @{ @} // gets bogus error
+@end example
+
+@item
+Templates are instantiated using the parser.  This results in two
+problems:
+
+a) Class templates are instantiated in some situations where such
+instantiation should not occur.
+
+@example
+template <class T> class A @{ @};
+A<int> *aip = 0; // should not instantiate A<int> (but does)
+@end example
+
+b) Function templates cannot be inlined at the site of their
+instantiation.
+
+@example
+template <class T> inline T min (T a, T b) @{ return a < b ? a : b; @}
+
+void f () @{
+  int i = min (1, 0);           // not inlined
+@}
+
+void g () @{
+  int j = min (1, 0);           // inlined
+@}
+@end example
+
+A workaround that works in version 2.6.1 and later is to specify
+
+@example
+extern template int min (int, int);
+@end example
+
+before @code{f()}; this will force it to be instantiated (though not
+emitted). 
+
+@item
+Member function templates are always instantiated when their containing
+class is.  This is wrong.
+@end enumerate
+
+@node undefined templates, redundant templates, templates, User Problems
+@section I get undefined symbols when using templates
+
+(Thanks to Jason Merrill for this section).
+
+@cindex template instantiation
+g++ does not automatically instantiate templates defined in other files.
+Because of this, code written for cfront will often produce undefined
+symbol errors when compiled with g++.  You need to tell g++ which template
+instances you want, by explicitly instantiating them in the file where they
+are defined.  For instance, given the files
+
+@file{templates.h}:
+@example
+template <class T>
+class A @{
+public:
+  void f ();
+  T t;
+@};
+
+template <class T> void g (T a);
+@end example
+
+@file{templates.cc}:
+@example
+#include "templates.h"
+
+template <class T>
+void A<T>::f () @{ @}
+
+template <class T>
+void g (T a) @{ @}
+@end example
+
+
+main.cc:
+@example
+#include "templates.h"
+
+main ()
+@{
+  A<int> a;
+  a.f ();
+  g (a);
+@}
+@end example
+
+compiling everything with @code{g++ main.cc templates.cc} will result in
+undefined symbol errors for @samp{A<int>::f ()} and @samp{g (A<int>)}.  To
+fix these errors, add the lines
+
+@example
+template class A<int>;
+template void g (A<int>);
+@end example
+
+to the bottom of @samp{templates.cc} and recompile.
+
+@node redundant templates, Standard Template Library, undefined templates, User Problems
+@section I get multiply defined symbols using templates
+
+You may be running into a bug that was introduced in version 2.6.1
+(and is still present in 2.6.3) that generated external linkage
+for templates even when neither @code{-fexternal-templates} nor
+@code{-fno-implicit-templates} is specified.  There is a patch for
+this problem at @*
+@file{ftp://ftp.cygnus.com/pub/g++/gcc-2.6.3-template-fix}.
+
+I recommend either applying the patch or
+using @code{-fno-implicit-templates}
+together with explicit template instantiation as described in previous
+sections.
+
+This bug is fixed in 2.7.0.
+
+@node Standard Template Library, STL and string, redundant templates, User Problems
+@section Does g++ support the Standard Template Library?
+
+@cindex STL
+@cindex Standard Template Library
+The Standard Template Library (STL) uses many of the extensions that the
+ANSI/ISO committee has made to templates, and g++ doesn't support
+some of these yet.  So if you grab HP's free implementation of STL it
+isn't going to work.  However, starting with libg++-2.6.2 libg++ contains a
+hacked version of STL, based on work by Carsten Bormann, which permits
+g++ to compile at least the containers (thanks to Per Bothner for this
+text).
+
+Actually, as of libg++ version 2.7.2 most of this works quite well, most
+of the time;
+I've succeeded
+in making significant use of it.
+Almost all of the ObjectSpace examples (a set of
+over 200 simple examples of STL usage) now work.
+
+When version 2.8.0 is out (with its complete redesign of the template
+implementation) a much more complete implementation of the
+STL (based on a newer free implementation from SGI) will be included.
+In the meantime, a group at the Moscow Center for Sparc Technology has
+a port of the SGI STL implementation that mostly works with gcc-2.7.2.
+See
+@file{http://www.ipmce.su/people/fbp/stl/stlport.html}.
+
+In addition, there are several commercial suppliers of STL implementations;
+ObjectSpace's version supports gcc-2.7.x.
+
+Mumit Khan has produced an ``STL newbie guide'' with lots of information
+on using STL with gcc.  See
+
+@file{http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html}
+
+@node STL and string, exceptions, Standard Template Library, User Problems
+@section I'm having problems mixing STL and the standard string class
+
+This is due to a bug in g++ version 2.7.2 and 2.7.2.1; the compiler
+is confused by the operator declarations.  There is an easy workaround,
+however; just make sure that the @code{<string>} header is included
+before any STL headers.  That is, just say
+
+@example
+#include <string>
+@end example
+
+before any other @code{#include} directives.
+
+Unfortunately, this doesn't solve all problems; you may still have
+difficulty with the relational operators !=, <=, >, and >=, thanks
+to a conflict with the very general definition of these operators
+in function.h.  One trick that sometimes works is to try to use ==
+and < in your code instead of the other operators.  Another is to
+use a derived class of <string>.  The only completely satisfactory
+solution, I'm afraid, is to wait for the new release.
+
+@node exceptions, namespaces, STL and string, User Problems
+@section Problems and limitations with exceptions
+
+Recent g++ versions provide limited support for exceptions.  You must
+provide the @code{-fhandle-exceptions} flag to enable exception
+handling.  As of version 2.7.2, exceptions may not work properly
+(and you may get odd error messages when compiling) if you turn
+on optimization (the @code{-O} flag).
+
+You must give the @code{-frtti} switch to enable catching
+of derived exception objects with handlers for the base exception class;
+if @code{-frtti} is not given, only exact type matching works.
+
+For exception handling to work with 2.7.0 your CPU must be a SPARC,
+RS6000/PowerPC, 386/486/Pentium, or ARM.  Release 2.7.1 added support
+for the Alpha, and ``m68k is rumored to work on some platforms''
+and ``VAX may also work'' (according to Mike Stump).
+@emph{It still doesn't work on HP-PA or MIPS platforms.}
+
+@node namespaces, agreement with standards, exceptions, User Problems
+@section Does g++ support namespaces?
+
+As of version 2.7.2, g++ recognizes the keywords @code{namespace} and
+@code{using}, and there is some rudimentary code present, but almost
+nothing connected with namespaces works yet.  It appears that this will
+still be true when 2.8.0 is released.
+
+@node agreement with standards, compiling standard libraries, namespaces, User Problems
+@section What are the differences between g++ and the ARM specification of C++?
+
+@cindex ARM [Annotated C++ Ref Manual]
+@cindex exceptions
+As of version 2.7.0, g++ has exception support on most but not all
+platforms
+(no support on MIPS-based platforms yet), but
+it doesn't work right if optimizaton is enabled, which means the
+exception
+implementation is still
+not really ready for production use.
+
+
+@cindex mutable
+Some features that the ANSI/ISO standardization committee has voted in
+that don't appear in the ARM are supported, notably the @code{mutable}
+keyword, in version 2.5.x.  2.6.x adds support for the built-in boolean
+type @code{bool}, with constants @code{true} and @code{false}.  The
+beginnings of run-time type identification are present, so there are
+more reserved words: @code{typeid}, @code{static_cast},
+@code{reinterpret_cast}, @code{const_cast}, and @code{dynamic_cast}.
+
+@cindex g++ bugs
+As with any beta-test compiler, there are bugs.  You can help improve
+the compiler by submitting detailed bug reports.
+
+One of the weakest areas of g++ other than templates is the resolution
+of overloaded functions and operators in complex cases.  The usual
+symptom is that in a case where the ARM says that it is ambiguous which
+function should be chosen, g++ chooses one (often the first one
+declared).  This is usually not a problem when porting C++ code from
+other compilers to g++, but shows up as errors when code developed under
+g++ is ported to other compilers.  (I believe this is no longer a
+significant problem in 2.7.0).
+
+[A full bug list would be very long indeed, so I won't put one here.
+I may add a list of frequently-reported bugs and "non-bugs" like the
+static class members issue mentioned above].
+
+@node compiling standard libraries, debugging on SVR4 systems, agreement with standards, User Problems
+@section Will g++ compile InterViews?  The NIH class library?  Rogue Wave?
+
+@cindex NIH class library
+@cindex NIHCL with g++
+The NIH class library uses a non-portable, compiler-dependent hack
+to initialize itself, which makes life difficult for g++ users.
+It will not work without modification, and I don't know what modifications
+are required or whether anyone has done them successfully.
+
+In short, it's not going to happen any time soon (previous FAQs referred
+to patches that a new NIHCL release would hopefully contain, but this
+hasn't happened).
+
+@strong{Note:} I thought I saw an item indicating that someone
+@emph{had} patched NIHCL to work with g++.  Any pointers?
+
+@cindex InterViews
+I think that as of version 2.5.6, the standard g++ will compile the
+standard 3.1 InterViews completely successfully.
+Note that you'll need the @code{-fno-for-scope} flag
+if you use gcc-2.7.0; with 2.7.2 you may be able to omit this flag
+but you'll get warnings.
+
+@cindex Rogue Wave
+According to Jason Merrill, gcc-2.7.0 and newer works with Rogue
+Wave's @code{tools.h++} class library, but you may want to grab
+@file{ftp://ftp.cygnus.com/pub/g++/Tools.h++-6.1-patch}.  Again,
+you'll need the @code{-fno-for-scope} flag since Rogue Wave hasn't
+fixed their code to comply with the new standard yet.
+
+@node debugging on SVR4 systems, debugging problems on Solaris, compiling standard libraries, User Problems
+@section Debugging on SVR4 systems
+@cindex System VR4, debugging
+
+``How do I get debugging to work on my System V Release 4 system?''
+
+@cindex DWARF debug format
+
+Most systems based on System V Release 4 (except Solaris) encode symbolic
+debugging information in a format known as `DWARF'.
+
+Although the GNU C compiler already knows how to write out symbolic debugging
+information in the DWARF format, the GNU C++ compiler does not yet have this
+feature yet.  However, work is in progress for DWARF 2 debug support for
+gcc and g++ and will be available in a future release (probably 2.8.0).
+
+@cindex stabs
+@cindex --with-stabs
+
+In the meantime, you @emph{can} get g++ debugging under SVR4 systems by
+configuring gcc with the @code{--with-stabs} option.  This causes gcc to
+use an alternate debugging format, one more like that used under SunOS4.
+You won't need to do anything special to GDB; it will always understand
+the ``stabs'' format.
+
+@node debugging problems on Solaris, X11 conflicts with libg++, debugging on SVR4 systems, User Problems
+@section debugging problems on Solaris
+
+``I'm on Solaris, and gdb says it doesn't know about some of my local
+symbols.  Help!''
+
+This problem was introduced in gcc 2.7.2; debug symbols for
+locals that aren't declared at the beginning of a block come out in the
+wrong order, and gdb can't find such symbols.
+
+This problem is fixed in gcc-2.7.2.1.
+
+@node X11 conflicts with libg++, assignment to streams, debugging problems on Solaris, User Problems
+@section X11 conflicts with libg++ in definition of String
+@cindex String, conflicts in definition
+
+``X11 and Motif define String, and this conflicts with the String class
+in libg++.  How can I use both together?''
+
+One possible method is the following:
+
+@example
+#define String XString
+#include <X11/Intrinsic.h>
+/* include other X11 and Motif headers */
+#undef String
+@end example
+
+and remember to use the correct @code{String} or @code{XString} when
+you declare things later.
+
+@node assignment to streams,  , X11 conflicts with libg++, User Problems
+@section Why can't I assign one stream to another?
+
+[ Thanks to Per Bothner and Jerry Schwarz for this section. ]
+
+Assigning one stream to another seems like a reasonable thing to do, but
+it's a bad idea.  Usually, this comes up because people want to assign
+to @code{cout}.  This is poor style, especially for libraries, and is
+contrary to good object-oriented design.  (Libraries that write directly
+to @code{cout} are less flexible, modular, and object-oriented).
+
+The iostream classes do not allow assigning to arbitrary streams, because
+this can violate typing:
+
+@example
+ifstream foo ("foo");
+istrstream str(...);
+foo = str;
+foo->close ();  /* Oops! Not defined for istrstream! */
+@end example
+
+@cindex assignment to cout
+
+The original cfront implementation of iostreams by Jerry Schwarz allows
+you to assign to @code{cin}, @code{cout}, @code{cerr}, and @code{clog},
+but this is not part of the draft standard for iostreams and generally
+isn't considered a good idea, so standard-conforming code shouldn't use
+this technique.
+
+The GNU implementation of iostream did not support assigning to 
+@code{cin}, @code{cout}, @code{cerr}, and @code{clog}
+for quite a while, but it now does, for backward
+compatibility with cfront iostream (versions 2.6.1 and later of libg++).
+
+The ANSI/ISO C++ Working Paper does provide ways of changing the
+streambuf associated with a stream.  Assignment isn't allowed;
+there is an explicit named member that must be used.
+
+However, it is not wise to do this, and the results are confusing.  For
+example: @code{fstream::rdbuf} is supposed to return the @emph{original}
+filebuf, not the one you assigned. (This is not yet implemented in GNU
+iostream.)  This must be so because @code{fstream::rdbuf} is defined to
+return a @code{filebuf *}.
+
+@node legalities, index, User Problems, Top
+@chapter What are the rules for shipping code built with g++ and libg++?
+@cindex Shipping rules
+@cindex GPL [GNU Public License]
+
+``Is it is possible to distribute programs for profit that are created
+with g++ and use the g++ libraries?''
+
+I am not a lawyer, and this is not legal advice.  In any case, I have
+little interest in telling people how to violate the spirit of the
+GNU licenses without violating the letter.  This section tells you
+how to comply with the intention of the GNU licenses as best I understand
+them.
+
+@cindex FSF [Free Software Foundation]
+The FSF has no objection to your making money.  Its only interest is that
+source code to their programs, and libraries, and to modified versions of
+their programs and libraries, is always available.
+
+The short answer is that you do not need to release the source to
+your program, but you can't just ship a stripped executable either,
+unless you use only the subset of libg++ that includes the iostreams
+classes (see discussion below) or the new libstdc++ library (available
+in libg++ 2.6.2 and later).
+
+Compiling your code with a GNU compiler does not affect its copyright;
+it is still yours.  However, in order to ship code that links in a GNU
+library such as libg++ there are certain rules you must follow.  The
+rules are described in the file COPYING.LIB that accompanies gcc
+distributions; it is also included in the libg++ distribution.
+See that file for the exact rules.  The agreement is called the
+Library GNU Public License or LGPL.  It is much "looser" than the
+GNU Public License, or GPL, that covers must GNU programs.
+
+@cindex libg++, shipping code
+Here's the deal: let's say that you use some version of libg++,
+completely unchanged, in your software, and you want to ship only
+a binary form of your code.  You can do this, but there are several
+special requirements.  If you want to use libg++ but ship only object
+code for your code, you have to ship source for libg++ (or ensure
+somehow that your customer already has the source for the exact
+version you are using), and ship your application in linkable form.
+You cannot forbid your customer from reverse-engineering or extending
+your program by exploiting its linkable form.
+
+@cindex libg++, modifying
+Furthermore, if you modify libg++ itself, you must provide source
+for your modifications (making a derived class does not count as
+modifying the library -- that is "a work that uses the library").
+
+@cindex special copying conditions for iostreams
+For certain portions of libg++ that implement required parts of the C++
+language (such as iostreams and other standard classes), the FSF has
+loosened the copyright requirement still more by adding the ``special
+exception'' clause, which reads as follows:
+
+@quotation
+As a special exception, if you link this library with files
+compiled with GCC to produce an executable, this does not cause
+the resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public License.
+@end quotation
+
+If your only use of libg++ uses code with this exception, you may ship
+stripped executables or license your executables under different
+conditions without fear of violating an FSF copyright.  It is the intent
+of FSF and Cygnus that, as the other classes required by the ANSI/ISO
+draft standard are developed, these will also be placed under this
+``special exception'' license.
+The code in the new libstdc++ library, intended to implement standard
+classes as defined by ANSI/ISO, is also licensed this way.
+
+To avoid coming under the influence of the LGPL, you can link with
+@file{-liostream} rather than @file{-lg++} (for version 2.6.x and
+earlier), or @file{-lstdc++} now that it is available.  In version 2.7.0
+all the standard classes are in @file{-lstdc++}; you can do the link
+step with @code{c++} instead of @code{g++} to search only the
+@file{-lstdc++} library and avoid the LGPL'ed code in @file{-lg++}.
+
+If you wish to discuss legal issues connected with GNU software on the
+net, please use @file{gnu.misc.discuss}, not the technical newsgroups.
+
+@node index,  , legalities, Top
+@comment  node-name,  next,  previous,  up
+@appendix Concept Index
+
+@printindex cp
+
+@page
+@contents
+@bye
diff --git a/gcc/cp/parse.c b/gcc/cp/parse.c
deleted file mode 100644 (file)
index 9119e64..0000000
+++ /dev/null
@@ -1,8338 +0,0 @@
-
-/*  A Bison parser, made from parse.y with Bison version GNU Bison version 1.24
-  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define        IDENTIFIER      258
-#define        TYPENAME        259
-#define        SELFNAME        260
-#define        SCSPEC  261
-#define        TYPESPEC        262
-#define        CV_QUALIFIER    263
-#define        CONSTANT        264
-#define        STRING  265
-#define        ELLIPSIS        266
-#define        SIZEOF  267
-#define        ENUM    268
-#define        IF      269
-#define        ELSE    270
-#define        WHILE   271
-#define        DO      272
-#define        FOR     273
-#define        SWITCH  274
-#define        CASE    275
-#define        DEFAULT 276
-#define        BREAK   277
-#define        CONTINUE        278
-#define        RETURN  279
-#define        GOTO    280
-#define        ASM_KEYWORD     281
-#define        GCC_ASM_KEYWORD 282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        SIGOF   285
-#define        ATTRIBUTE       286
-#define        EXTENSION       287
-#define        LABEL   288
-#define        REALPART        289
-#define        IMAGPART        290
-#define        AGGR    291
-#define        VISSPEC 292
-#define        DELETE  293
-#define        NEW     294
-#define        THIS    295
-#define        OPERATOR        296
-#define        CXX_TRUE        297
-#define        CXX_FALSE       298
-#define        NAMESPACE       299
-#define        TYPENAME_KEYWORD        300
-#define        USING   301
-#define        LEFT_RIGHT      302
-#define        TEMPLATE        303
-#define        TYPEID  304
-#define        DYNAMIC_CAST    305
-#define        STATIC_CAST     306
-#define        REINTERPRET_CAST        307
-#define        CONST_CAST      308
-#define        SCOPE   309
-#define        EMPTY   310
-#define        PTYPENAME       311
-#define        NSNAME  312
-#define        THROW   313
-#define        ASSIGN  314
-#define        OROR    315
-#define        ANDAND  316
-#define        MIN_MAX 317
-#define        EQCOMPARE       318
-#define        ARITHCOMPARE    319
-#define        LSHIFT  320
-#define        RSHIFT  321
-#define        POINTSAT_STAR   322
-#define        DOT_STAR        323
-#define        UNARY   324
-#define        PLUSPLUS        325
-#define        MINUSMINUS      326
-#define        HYPERUNARY      327
-#define        PAREN_STAR_PAREN        328
-#define        POINTSAT        329
-#define        TRY     330
-#define        CATCH   331
-#define        TYPENAME_ELLIPSIS       332
-#define        PRE_PARSED_FUNCTION_DECL        333
-#define        EXTERN_LANG_STRING      334
-#define        ALL     335
-#define        PRE_PARSED_CLASS_DECL   336
-#define        DEFARG  337
-#define        DEFARG_MARKER   338
-#define        TYPENAME_DEFN   339
-#define        IDENTIFIER_DEFN 340
-#define        PTYPENAME_DEFN  341
-#define        END_OF_LINE     342
-#define        END_OF_SAVED_INPUT      343
-
-#line 29 "parse.y"
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
-#include "config.h"
-
-#include <stdio.h>
-#include <errno.h>
-
-#include "tree.h"
-#include "input.h"
-#include "flags.h"
-#include "lex.h"
-#include "cp-tree.h"
-#include "output.h"
-
-/* Since parsers are distinct for each language, put the language string
-   definition here.  (fnf) */
-char *language_string = "GNU C++";
-
-extern tree void_list_node;
-extern struct obstack permanent_obstack;
-
-#ifndef errno
-extern int errno;
-#endif
-
-extern int end_of_file;
-extern int current_class_depth;
-extern tree last_tree;
-
-/* FSF LOCAL dje prefix attributes */
-extern tree strip_attrs                PROTO((tree));
-/* END FSF LOCAL */
-
-void yyerror ();
-
-/* Like YYERROR but do call yyerror.  */
-#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-#define OP0(NODE) (TREE_OPERAND (NODE, 0))
-#define OP1(NODE) (TREE_OPERAND (NODE, 1))
-
-/* Contains the statement keyword (if/while/do) to include in an
-   error message if the user supplies an empty conditional expression.  */
-static char *cond_stmt_keyword;
-
-/* Nonzero if we have an `extern "C"' acting as an extern specifier.  */
-int have_extern_spec;
-int used_extern_spec;
-
-void yyhook ();
-
-/* Cons up an empty parameter list.  */
-#ifdef __GNUC__
-__inline
-#endif
-static tree
-empty_parms ()
-{
-  tree parms;
-
-  if (strict_prototype
-      /* Only go ahead with using the void list node if we're actually
-        parsing a class in C++, not a struct in extern "C" mode.  */
-      || (current_class_type != NULL
-         && current_lang_name == lang_name_cplusplus))
-    parms = void_list_node;
-  else
-    parms = NULL_TREE;
-  return parms;
-}
-
-#line 105 "parse.y"
-typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
-#line 288 "parse.y"
-
-/* List of types and structure classes of the current declaration.  */
-static tree current_declspecs = NULL_TREE;
-/* List of prefix attributes in effect.
-   Prefix attributes are parsed by the reserved_declspecs and declmods
-   rules.  They create a list that contains *both* declspecs and attrs.  */
-/* ??? It is not clear yet that all cases where an attribute can now appear in
-   a declspec list have been updated.  */
-static tree prefix_attributes = NULL_TREE;
-
-/* When defining an aggregate, this is the most recent one being defined.  */
-static tree current_aggr;
-
-/* Tell yyparse how to print a token's value, if yydebug is set.  */
-
-#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
-extern tree combine_strings            PROTO((tree));
-
-#ifndef YYLTYPE
-typedef
-  struct yyltype
-    {
-      int timestamp;
-      int first_line;
-      int first_column;
-      int last_line;
-      int last_column;
-      char *text;
-   }
-  yyltype;
-
-#define YYLTYPE yyltype
-#endif
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define        YYFINAL         1459
-#define        YYFLAG          -32768
-#define        YYNTBASE        113
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 343 ? yytranslate[x] : 366)
-
-static const char 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,   111,     2,     2,     2,    82,    70,     2,    93,
-   109,    80,    78,    59,    79,    92,    81,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,    62,    60,    74,
-    64,    75,    65,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-    94,     2,   112,    69,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    58,    68,   110,    88,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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,    61,    63,    66,    67,    71,    72,    73,    76,
-    77,    83,    84,    85,    86,    87,    89,    90,    91,    95,
-    96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-   106,   107,   108
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     1,     3,     4,     7,    10,    12,    13,    14,    15,
-    17,    19,    21,    22,    25,    28,    30,    32,    38,    43,
-    49,    54,    55,    62,    63,    69,    75,    78,    83,    86,
-    89,    93,    97,    99,   101,   104,   107,   109,   112,   113,
-   119,   123,   125,   129,   131,   134,   136,   139,   141,   145,
-   147,   151,   154,   157,   160,   164,   168,   171,   174,   177,
-   180,   183,   185,   187,   189,   190,   192,   195,   196,   198,
-   203,   207,   211,   212,   221,   227,   228,   238,   245,   246,
-   255,   261,   262,   272,   279,   282,   285,   287,   290,   292,
-   299,   304,   311,   316,   319,   321,   324,   327,   329,   332,
-   334,   337,   340,   345,   348,   352,   353,   354,   356,   360,
-   363,   367,   369,   374,   377,   382,   385,   390,   393,   395,
-   397,   399,   401,   403,   405,   407,   409,   411,   413,   415,
-   419,   423,   426,   429,   434,   439,   443,   447,   452,   456,
-   461,   465,   467,   472,   476,   478,   480,   482,   486,   488,
-   490,   492,   494,   496,   498,   500,   502,   504,   506,   510,
-   512,   516,   517,   519,   521,   522,   530,   532,   534,   538,
-   543,   547,   548,   552,   554,   558,   562,   566,   570,   572,
-   574,   576,   579,   582,   585,   588,   591,   594,   597,   602,
-   605,   610,   613,   617,   621,   626,   631,   637,   643,   650,
-   653,   658,   664,   667,   670,   674,   678,   682,   684,   688,
-   691,   695,   700,   702,   705,   711,   713,   717,   721,   725,
-   729,   733,   737,   741,   745,   749,   753,   757,   761,   765,
-   769,   773,   777,   781,   785,   789,   795,   799,   803,   805,
-   808,   812,   814,   816,   818,   820,   822,   824,   826,   828,
-   831,   834,   838,   840,   842,   846,   848,   850,   852,   854,
-   858,   862,   866,   867,   872,   877,   880,   885,   888,   891,
-   893,   898,   900,   908,   916,   924,   932,   937,   942,   945,
-   948,   950,   955,   958,   961,   964,   970,   974,   980,   984,
-   989,   996,   999,  1001,  1004,  1006,  1009,  1011,  1013,  1015,
-  1018,  1019,  1022,  1025,  1029,  1033,  1037,  1040,  1043,  1046,
-  1048,  1050,  1052,  1055,  1058,  1061,  1064,  1066,  1068,  1070,
-  1072,  1075,  1078,  1082,  1086,  1090,  1095,  1097,  1100,  1103,
-  1106,  1108,  1110,  1112,  1115,  1118,  1121,  1123,  1125,  1128,
-  1131,  1135,  1137,  1140,  1142,  1144,  1146,  1151,  1156,  1161,
-  1166,  1168,  1170,  1172,  1174,  1178,  1180,  1184,  1186,  1190,
-  1191,  1196,  1197,  1204,  1208,  1209,  1216,  1220,  1221,  1228,
-  1232,  1233,  1240,  1244,  1245,  1247,  1249,  1252,  1259,  1261,
-  1265,  1266,  1268,  1273,  1280,  1285,  1287,  1289,  1291,  1293,
-  1295,  1299,  1300,  1303,  1305,  1308,  1312,  1317,  1319,  1321,
-  1325,  1330,  1337,  1341,  1347,  1349,  1354,  1358,  1362,  1363,
-  1367,  1371,  1375,  1376,  1379,  1382,  1383,  1391,  1396,  1397,
-  1404,  1408,  1411,  1414,  1418,  1423,  1424,  1425,  1435,  1437,
-  1438,  1440,  1441,  1443,  1445,  1448,  1451,  1454,  1457,  1460,
-  1463,  1467,  1470,  1474,  1475,  1477,  1481,  1484,  1487,  1489,
-  1491,  1492,  1495,  1499,  1501,  1506,  1508,  1512,  1514,  1518,
-  1523,  1528,  1533,  1536,  1539,  1543,  1547,  1549,  1550,  1552,
-  1555,  1560,  1564,  1566,  1569,  1572,  1575,  1578,  1581,  1584,
-  1587,  1589,  1592,  1595,  1598,  1603,  1608,  1611,  1613,  1619,
-  1624,  1626,  1627,  1629,  1633,  1634,  1636,  1640,  1642,  1644,
-  1646,  1648,  1653,  1658,  1663,  1668,  1673,  1677,  1682,  1687,
-  1692,  1697,  1701,  1703,  1707,  1709,  1713,  1716,  1718,  1725,
-  1726,  1729,  1731,  1734,  1735,  1738,  1743,  1748,  1751,  1756,
-  1760,  1764,  1767,  1770,  1774,  1776,  1778,  1781,  1783,  1786,
-  1789,  1794,  1799,  1803,  1807,  1810,  1812,  1816,  1820,  1823,
-  1826,  1830,  1832,  1836,  1840,  1843,  1846,  1850,  1852,  1857,
-  1861,  1866,  1870,  1872,  1875,  1878,  1880,  1883,  1888,  1893,
-  1896,  1898,  1900,  1902,  1904,  1907,  1910,  1913,  1916,  1919,
-  1922,  1924,  1927,  1930,  1934,  1936,  1940,  1943,  1947,  1950,
-  1953,  1957,  1959,  1963,  1968,  1972,  1975,  1978,  1980,  1984,
-  1987,  1990,  1992,  1995,  1999,  2001,  2005,  2007,  2014,  2019,
-  2024,  2028,  2034,  2038,  2042,  2046,  2049,  2051,  2053,  2056,
-  2059,  2062,  2063,  2064,  2065,  2067,  2069,  2072,  2076,  2078,
-  2081,  2082,  2088,  2089,  2090,  2097,  2099,  2100,  2105,  2107,
-  2109,  2111,  2114,  2115,  2116,  2123,  2125,  2126,  2127,  2135,
-  2136,  2137,  2145,  2146,  2147,  2148,  2149,  2164,  2165,  2166,
-  2176,  2177,  2183,  2184,  2192,  2193,  2198,  2201,  2204,  2207,
-  2211,  2218,  2227,  2238,  2251,  2256,  2260,  2263,  2266,  2268,
-  2270,  2271,  2272,  2279,  2280,  2281,  2287,  2289,  2292,  2293,
-  2294,  2295,  2304,  2306,  2308,  2312,  2316,  2319,  2322,  2325,
-  2328,  2331,  2333,  2336,  2337,  2339,  2340,  2342,  2344,  2345,
-  2347,  2349,  2353,  2358,  2360,  2364,  2365,  2367,  2369,  2371,
-  2374,  2377,  2380,  2382,  2384,  2387,  2390,  2393,  2396,  2397,
-  2401,  2403,  2405,  2407,  2410,  2413,  2416,  2421,  2424,  2427,
-  2430,  2433,  2436,  2439,  2441,  2444,  2446,  2449,  2451,  2453,
-  2454,  2455,  2457,  2458,  2463,  2466,  2468,  2470,  2474,  2475,
-  2479,  2483,  2487,  2489,  2492,  2495,  2498,  2501,  2504,  2507,
-  2510,  2513,  2516,  2519,  2522,  2525,  2528,  2531,  2534,  2537,
-  2540,  2543,  2546,  2549,  2552,  2555,  2558,  2562,  2565,  2568,
-  2571,  2574,  2578,  2581,  2584,  2589,  2594,  2598
-};
-
-static const short yyrhs[] = {    -1,
-   114,     0,     0,   115,   121,     0,   114,   121,     0,   114,
-     0,     0,     0,     0,    32,     0,    26,     0,    27,     0,
-     0,   122,   123,     0,   139,   138,     0,   135,     0,   134,
-     0,   120,    93,   190,   109,    60,     0,   128,    58,   116,
-   110,     0,   128,   117,   139,   118,   138,     0,   128,   117,
-   135,   118,     0,     0,    44,   154,    58,   124,   116,   110,
-     0,     0,    44,    58,   125,   116,   110,     0,    44,   154,
-    64,   127,    60,     0,   126,    60,     0,    46,    44,   127,
-    60,     0,   119,   123,     0,    46,   281,     0,    46,   290,
-   281,     0,    46,   290,   182,     0,   182,     0,   281,     0,
-   290,   281,     0,   290,   182,     0,    99,     0,   128,    99,
-     0,     0,    48,    74,   130,   131,    75,     0,    48,    74,
-    75,     0,   133,     0,   131,    59,   133,     0,   239,     0,
-   239,   154,     0,    45,     0,    45,   154,     0,   132,     0,
-   132,    64,   196,     0,   357,     0,   357,    64,   180,     0,
-   129,   123,     0,   129,     1,     0,   207,    60,     0,   200,
-   206,    60,     0,   197,   205,    60,     0,   200,    60,     0,
-   157,    60,     0,   197,    60,     0,     1,    60,     0,     1,
-   110,     0,    60,     0,   191,     0,   150,     0,     0,   149,
-     0,   149,    60,     0,     0,   108,     0,   145,   137,   136,
-   302,     0,   145,   137,   327,     0,   145,   137,     1,     0,
-     0,   286,     5,    93,   141,   348,   109,   269,   360,     0,
-   286,     5,    47,   269,   360,     0,     0,   290,   286,     5,
-    93,   142,   348,   109,   269,   360,     0,   290,   286,     5,
-    47,   269,   360,     0,     0,   286,   159,    93,   143,   348,
-   109,   269,   360,     0,   286,   159,    47,   269,   360,     0,
-     0,   290,   286,   159,    93,   144,   348,   109,   269,   360,
-     0,   290,   286,   159,    47,   269,   360,     0,   197,   194,
-     0,   200,   278,     0,   278,     0,   200,   140,     0,   140,
-     0,     5,    93,   348,   109,   269,   360,     0,     5,    47,
-   269,   360,     0,   159,    93,   348,   109,   269,   360,     0,
-   159,    47,   269,   360,     0,   200,   146,     0,   146,     0,
-   197,   194,     0,   200,   278,     0,   278,     0,   200,   140,
-     0,   140,     0,    24,     3,     0,   148,   224,     0,   148,
-    93,   174,   109,     0,   148,    47,     0,    62,   151,   152,
-     0,     0,     0,   153,     0,   152,    59,   153,     0,   152,
-     1,     0,    93,   174,   109,     0,    47,     0,   155,    93,
-   174,   109,     0,   155,    47,     0,   275,    93,   174,   109,
-     0,   275,    47,     0,   282,    93,   174,   109,     0,   282,
-    47,     0,     3,     0,     4,     0,     5,     0,    56,     0,
-    57,     0,     3,     0,    56,     0,    57,     0,   105,     0,
-   104,     0,   106,     0,    48,   239,   158,     0,    48,   197,
-   194,     0,    48,   278,     0,    48,   140,     0,     6,    48,
-   239,   158,     0,     6,    48,   197,   194,     0,     6,    48,
-   278,     0,     6,    48,   140,     0,    56,    74,   161,   160,
-     0,    56,    74,   160,     0,     4,    74,   161,   160,     0,
-     4,    74,   160,     0,   159,     0,     5,    74,   161,   160,
-     0,     5,    74,   160,     0,    75,     0,    77,     0,   162,
-     0,   161,    59,   162,     0,   196,     0,   180,     0,    79,
-     0,    78,     0,    86,     0,    87,     0,   111,     0,   173,
-     0,   180,     0,    47,     0,    93,   164,   109,     0,    47,
-     0,    93,   168,   109,     0,     0,   168,     0,     1,     0,
-     0,   338,   194,   208,   217,    64,   169,   225,     0,   164,
-     0,   110,     0,   299,   295,   110,     0,   299,   295,     1,
-   110,     0,   299,     1,   110,     0,     0,    58,   172,   170,
-     0,   311,     0,   180,    59,   180,     0,   180,    59,     1,
-     0,   173,    59,   180,     0,   173,    59,     1,     0,   180,
-     0,   173,     0,   185,     0,   119,   179,     0,    80,   179,
-     0,    70,   179,     0,    88,   179,     0,   163,   179,     0,
-    67,   154,     0,    12,   175,     0,    12,    93,   196,   109,
-     0,    29,   175,     0,    29,    93,   196,   109,     0,   187,
-   268,     0,   187,   268,   177,     0,   187,   176,   268,     0,
-   187,   176,   268,   177,     0,   187,    93,   196,   109,     0,
-   187,    93,   196,   109,   177,     0,   187,   176,    93,   196,
-   109,     0,   187,   176,    93,   196,   109,   177,     0,   188,
-   179,     0,   188,    94,   112,   179,     0,   188,    94,   164,
-   112,   179,     0,    34,   179,     0,    35,   179,     0,    93,
-   174,   109,     0,    58,   174,   110,     0,    93,   174,   109,
-     0,    47,     0,    93,   203,   109,     0,    64,   225,     0,
-    93,   196,   109,     0,   178,    93,   196,   109,     0,   175,
-     0,   178,   175,     0,   178,    58,   226,   237,   110,     0,
-   179,     0,   180,    83,   180,     0,   180,    84,   180,     0,
-   180,    78,   180,     0,   180,    79,   180,     0,   180,    80,
-   180,     0,   180,    81,   180,     0,   180,    82,   180,     0,
-   180,    76,   180,     0,   180,    77,   180,     0,   180,    73,
-   180,     0,   180,    74,   180,     0,   180,    75,   180,     0,
-   180,    72,   180,     0,   180,    71,   180,     0,   180,    70,
-   180,     0,   180,    68,   180,     0,   180,    69,   180,     0,
-   180,    67,   180,     0,   180,    66,   180,     0,   180,    65,
-   343,    62,   180,     0,   180,    64,   180,     0,   180,    63,
-   180,     0,    61,     0,    61,   180,     0,    88,   358,   154,
-     0,   365,     0,     3,     0,    56,     0,    57,     0,   181,
-     0,     4,     0,     5,     0,   181,     0,    80,   183,     0,
-    70,   183,     0,    93,   183,   109,     0,   280,     0,   181,
-     0,    93,   183,   109,     0,   181,     0,     9,     0,   189,
-     0,   190,     0,    93,   164,   109,     0,    93,   183,   109,
-     0,    93,     1,   109,     0,     0,    93,   186,   303,   109,
-     0,   185,    93,   174,   109,     0,   185,    47,     0,   185,
-    94,   164,   112,     0,   185,    86,     0,   185,    87,     0,
-    40,     0,     8,    93,   174,   109,     0,   284,     0,    50,
-    74,   196,    75,    93,   164,   109,     0,    51,    74,   196,
-    75,    93,   164,   109,     0,    52,    74,   196,    75,    93,
-   164,   109,     0,    53,    74,   196,    75,    93,   164,   109,
-     0,    49,    93,   164,   109,     0,    49,    93,   196,   109,
-     0,   290,     3,     0,   290,   365,     0,   283,     0,   283,
-    93,   174,   109,     0,   283,    47,     0,   192,   182,     0,
-   192,   283,     0,   192,   182,    93,   174,   109,     0,   192,
-   182,    47,     0,   192,   283,    93,   174,   109,     0,   192,
-   283,    47,     0,   192,    88,     7,    47,     0,   192,     7,
-    54,    88,     7,    47,     0,   192,     1,     0,    39,     0,
-   290,    39,     0,    38,     0,   290,   188,     0,    42,     0,
-    43,     0,    10,     0,   190,    10,     0,     0,   185,    92,
-     0,   185,    91,     0,   203,   205,    60,     0,   197,   205,
-    60,     0,   200,   206,    60,     0,   197,    60,     0,   200,
-    60,     0,   119,   193,     0,   274,     0,   278,     0,    47,
-     0,   195,    47,     0,   201,   293,     0,   270,   293,     0,
-   203,   293,     0,   201,     0,   270,     0,   201,     0,   198,
-     0,   200,   203,     0,   203,   199,     0,   203,   202,   199,
-     0,   200,   203,   199,     0,   200,   203,   202,     0,   200,
-   203,   202,   199,     0,     6,     0,   199,   204,     0,   199,
-     6,     0,   199,   218,     0,   218,     0,   270,     0,     6,
-     0,   200,     8,     0,   200,     6,     0,   200,   218,     0,
-   218,     0,   203,     0,   270,   203,     0,   203,   202,     0,
-   270,   203,   202,     0,   204,     0,   202,   204,     0,   232,
-     0,     7,     0,   275,     0,    28,    93,   164,   109,     0,
-    28,    93,   196,   109,     0,    30,    93,   164,   109,     0,
-    30,    93,   196,   109,     0,     7,     0,     8,     0,   232,
-     0,   209,     0,   205,    59,   211,     0,   213,     0,   206,
-    59,   211,     0,   215,     0,   207,    59,   211,     0,     0,
-   120,    93,   190,   109,     0,     0,   194,   208,   217,    64,
-   210,   225,     0,   194,   208,   217,     0,     0,   194,   208,
-   217,    64,   212,   225,     0,   194,   208,   217,     0,     0,
-   278,   208,   217,    64,   214,   225,     0,   278,   208,   217,
-     0,     0,   278,   208,   217,    64,   216,   225,     0,   278,
-   208,   217,     0,     0,   218,     0,   219,     0,   218,   219,
-     0,    31,    93,    93,   220,   109,   109,     0,   221,     0,
-   220,    59,   221,     0,     0,   222,     0,   222,    93,     3,
-   109,     0,   222,    93,     3,    59,   174,   109,     0,   222,
-    93,   174,   109,     0,   154,     0,     6,     0,     7,     0,
-     8,     0,   154,     0,   223,    59,   154,     0,     0,    64,
-   225,     0,   180,     0,    58,   110,     0,    58,   226,   110,
-     0,    58,   226,    59,   110,     0,     1,     0,   225,     0,
-   226,    59,   225,     0,    94,   180,   112,   225,     0,   226,
-    59,    20,   180,    62,   225,     0,   154,    62,   225,     0,
-   226,    59,   154,    62,   225,     0,    98,     0,   227,   137,
-   136,   302,     0,   227,   137,   327,     0,   227,   137,     1,
-     0,     0,   229,   228,   138,     0,   103,   180,   108,     0,
-   103,     1,   108,     0,     0,   231,   230,     0,   231,     1,
-     0,     0,    13,   154,    58,   233,   266,   238,   110,     0,
-    13,   154,    58,   110,     0,     0,    13,    58,   234,   266,
-   238,   110,     0,    13,    58,   110,     0,    13,   154,     0,
-    13,   288,     0,    45,   286,   154,     0,    45,   290,   286,
-   154,     0,     0,     0,   246,   252,   254,   110,   217,   235,
-   231,   236,   229,     0,   246,     0,     0,    59,     0,     0,
-    59,     0,    36,     0,   239,     6,     0,   239,     7,     0,
-   239,     8,     0,   239,    36,     0,   239,   154,     0,   239,
-   156,     0,   239,   286,   154,     0,   239,   158,     0,   239,
-   286,   158,     0,     0,   240,     0,   241,   243,   247,     0,
-   242,   247,     0,   239,    58,     0,   245,     0,   244,     0,
-     0,    62,   358,     0,    62,   358,   248,     0,   249,     0,
-   248,    59,   358,   249,     0,   250,     0,   251,   358,   250,
-     0,   275,     0,    45,   286,   154,     0,    45,   290,   286,
-   154,     0,    30,    93,   164,   109,     0,    30,    93,   196,
-   109,     0,    37,   358,     0,     6,   358,     0,   251,    37,
-   358,     0,   251,     6,   358,     0,    58,     0,     0,   253,
-     0,   253,   255,     0,   254,    37,    62,   255,     0,   254,
-    37,    62,     0,   256,     0,   255,   256,     0,   257,    60,
-     0,   257,   110,     0,   147,    62,     0,   147,    95,     0,
-   147,    24,     0,   147,    58,     0,    60,     0,   119,   256,
-     0,   197,   258,     0,   200,   259,     0,   278,   208,   217,
-   224,     0,   140,   208,   217,   224,     0,    62,   180,     0,
-     1,     0,   200,   146,   208,   217,   224,     0,   146,   208,
-   217,   224,     0,   126,     0,     0,   260,     0,   258,    59,
-   261,     0,     0,   263,     0,   259,    59,   265,     0,   262,
-     0,   263,     0,   264,     0,   265,     0,   274,   208,   217,
-   224,     0,     4,    62,   180,   217,     0,   278,   208,   217,
-   224,     0,   140,   208,   217,   224,     0,     3,    62,   180,
-   217,     0,    62,   180,   217,     0,   274,   208,   217,   224,
-     0,     4,    62,   180,   217,     0,   278,   208,   217,   224,
-     0,     3,    62,   180,   217,     0,    62,   180,   217,     0,
-   267,     0,   266,    59,   267,     0,   154,     0,   154,    64,
-   180,     0,   338,   291,     0,   338,     0,    93,   196,   109,
-    94,   164,   112,     0,     0,   269,     8,     0,     8,     0,
-   270,     8,     0,     0,   271,   164,     0,   271,    93,   174,
-   109,     0,   271,    93,   348,   109,     0,   271,    47,     0,
-   271,    93,     1,   109,     0,    80,   270,   274,     0,    70,
-   270,   274,     0,    80,   274,     0,    70,   274,     0,   289,
-   269,   274,     0,   277,     0,   285,     0,   290,   285,     0,
-   276,     0,   290,   276,     0,   286,   285,     0,   277,   273,
-   269,   360,     0,   277,    94,   272,   112,     0,   277,    94,
-   112,     0,    93,   274,   109,     0,   286,   285,     0,   285,
-     0,    80,   270,   278,     0,    70,   270,   278,     0,    80,
-   278,     0,    70,   278,     0,   289,   269,   278,     0,   184,
-     0,    80,   270,   278,     0,    70,   270,   278,     0,    80,
-   279,     0,    70,   279,     0,   289,   269,   278,     0,   280,
-     0,   184,   273,   269,   360,     0,    93,   279,   109,     0,
-   184,    94,   272,   112,     0,   184,    94,   112,     0,   282,
-     0,   286,   182,     0,   286,   181,     0,   282,     0,   290,
-   282,     0,   203,    93,   174,   109,     0,   203,    93,   183,
-   109,     0,   203,   195,     0,     4,     0,     5,     0,   158,
-     0,   287,     0,   286,   287,     0,     4,    54,     0,     5,
-    54,     0,    57,    54,     0,   158,    54,     0,   290,   285,
-     0,   276,     0,   290,   276,     0,   286,    80,     0,   290,
-   286,    80,     0,    54,     0,    80,   269,   291,     0,    80,
-   269,     0,    70,   269,   291,     0,    70,   269,     0,   289,
-   269,     0,   289,   269,   291,     0,   292,     0,    94,   164,
-   112,     0,   292,    94,   272,   112,     0,    80,   270,   293,
-     0,    80,   293,     0,    80,   270,     0,    80,     0,    70,
-   270,   293,     0,    70,   293,     0,    70,   270,     0,    70,
-     0,   289,   269,     0,   289,   269,   293,     0,   294,     0,
-    93,   293,   109,     0,    90,     0,   294,    93,   348,   109,
-   269,   360,     0,   294,    47,   269,   360,     0,   294,    94,
-   272,   112,     0,   294,    94,   112,     0,    93,   349,   109,
-   269,   360,     0,   178,   269,   360,     0,   195,   269,   360,
-     0,    94,   272,   112,     0,    94,   112,     0,   310,     0,
-   296,     0,   295,   310,     0,   295,   296,     0,     1,    60,
-     0,     0,     0,     0,   300,     0,   301,     0,   300,   301,
-     0,    33,   223,    60,     0,   303,     0,     1,   303,     0,
-     0,    58,   304,   297,   170,   298,     0,     0,     0,    14,
-   306,   297,   166,   307,   308,     0,   303,     0,     0,   297,
-   309,   311,   298,     0,   303,     0,   311,     0,   193,     0,
-   164,    60,     0,     0,     0,   305,    15,   312,   308,   313,
-   298,     0,   305,     0,     0,     0,    16,   314,   297,   166,
-   315,   171,   298,     0,     0,     0,    17,   316,   308,    16,
-   317,   165,    60,     0,     0,     0,     0,     0,    18,   318,
-    93,   341,   319,   297,   167,    60,   320,   343,   109,   321,
-   171,   298,     0,     0,     0,    19,   297,    93,   168,   109,
-   322,   308,   323,   298,     0,     0,    20,   180,    62,   324,
-   310,     0,     0,    20,   180,    11,   180,    62,   325,   310,
-     0,     0,    21,    62,   326,   310,     0,    22,    60,     0,
-    23,    60,     0,    24,    60,     0,    24,   164,    60,     0,
-   120,   342,    93,   190,   109,    60,     0,   120,   342,    93,
-   190,    62,   344,   109,    60,     0,   120,   342,    93,   190,
-    62,   344,    62,   344,   109,    60,     0,   120,   342,    93,
-   190,    62,   344,    62,   344,    62,   347,   109,    60,     0,
-    25,    80,   164,    60,     0,    25,   154,    60,     0,   340,
-   310,     0,   340,   110,     0,    60,     0,   330,     0,     0,
-     0,    95,   328,   136,   302,   329,   333,     0,     0,     0,
-    95,   331,   303,   332,   333,     0,   334,     0,   333,   334,
-     0,     0,     0,     0,    96,   335,   297,   339,   336,   303,
-   337,   298,     0,   201,     0,   270,     0,    93,    11,   109,
-     0,    93,   357,   109,     0,     3,    62,     0,    56,    62,
-     0,     4,    62,     0,     5,    62,     0,   343,    60,     0,
-   193,     0,    58,   170,     0,     0,     8,     0,     0,   164,
-     0,     1,     0,     0,   345,     0,   346,     0,   345,    59,
-   346,     0,    10,    93,   164,   109,     0,    10,     0,   347,
-    59,    10,     0,     0,   349,     0,   196,     0,   353,     0,
-   354,    11,     0,   353,    11,     0,   196,    11,     0,    11,
-     0,    97,     0,   353,    97,     0,   196,    97,     0,   353,
-    62,     0,   196,    62,     0,     0,    64,   351,   352,     0,
-   102,     0,   225,     0,   355,     0,   357,   350,     0,   354,
-   356,     0,   354,   359,     0,   354,   359,    64,   225,     0,
-   353,    59,     0,   196,    59,     0,   198,   194,     0,   201,
-   194,     0,   203,   194,     0,   198,   293,     0,   198,     0,
-   200,   278,     0,   357,     0,   357,   350,     0,   355,     0,
-   196,     0,     0,     0,   278,     0,     0,    61,    93,   362,
-   109,     0,    61,    47,     0,   196,     0,   361,     0,   362,
-    59,   361,     0,     0,    80,   269,   363,     0,    70,   269,
-   363,     0,   289,   269,   363,     0,    41,     0,   364,    80,
-     0,   364,    81,     0,   364,    82,     0,   364,    78,     0,
-   364,    79,     0,   364,    70,     0,   364,    68,     0,   364,
-    69,     0,   364,    88,     0,   364,    59,     0,   364,    73,
-     0,   364,    74,     0,   364,    75,     0,   364,    72,     0,
-   364,    63,     0,   364,    64,     0,   364,    76,     0,   364,
-    77,     0,   364,    86,     0,   364,    87,     0,   364,    67,
-     0,   364,    66,     0,   364,   111,     0,   364,    65,    62,
-     0,   364,    71,     0,   364,    91,     0,   364,    83,     0,
-   364,    47,     0,   364,    94,   112,     0,   364,    39,     0,
-   364,    38,     0,   364,    39,    94,   112,     0,   364,    38,
-    94,   112,     0,   364,   338,   363,     0,   364,     1,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-   309,   311,   325,   328,   329,   333,   335,   338,   343,   347,
-   353,   355,   358,   361,   365,   368,   370,   372,   375,   377,
-   380,   383,   385,   387,   389,   391,   393,   395,   401,   405,
-   408,   410,   414,   416,   417,   419,   423,   426,   432,   435,
-   437,   441,   444,   448,   461,   463,   465,   469,   479,   481,
-   483,   487,   491,   496,   499,   501,   505,   507,   508,   515,
-   516,   517,   520,   523,   527,   529,   530,   533,   535,   538,
-   541,   543,   547,   557,   559,   569,   578,   580,   590,   599,
-   601,   611,   620,   622,   634,   642,   649,   654,   661,   668,
-   671,   673,   675,   681,   691,   693,   696,   699,   701,   704,
-   708,   717,   720,   722,   726,   739,   759,   762,   764,   765,
-   768,   775,   781,   783,   785,   787,   790,   794,   800,   802,
-   803,   804,   805,   808,   810,   811,   814,   816,   817,   820,
-   823,   826,   828,   830,   832,   835,   837,   845,   852,   858,
-   864,   870,   873,   880,   888,   890,   898,   901,   905,   908,
-   911,   914,   916,   918,   920,   924,   927,   930,   935,   939,
-   944,   948,   951,   953,   957,   977,   984,   987,   989,   990,
-   991,   994,  1005,  1014,  1018,  1022,  1025,  1027,  1031,  1034,
-  1037,  1041,  1044,  1046,  1048,  1050,  1057,  1068,  1070,  1072,
-  1074,  1080,  1083,  1086,  1089,  1092,  1096,  1099,  1102,  1106,
-  1108,  1112,  1116,  1118,  1122,  1125,  1132,  1135,  1137,  1145,
-  1154,  1160,  1167,  1169,  1171,  1184,  1187,  1189,  1191,  1193,
-  1195,  1197,  1199,  1201,  1203,  1205,  1207,  1209,  1211,  1213,
-  1215,  1217,  1219,  1221,  1223,  1225,  1227,  1231,  1233,  1235,
-  1252,  1255,  1256,  1257,  1258,  1261,  1263,  1264,  1267,  1269,
-  1271,  1273,  1277,  1279,  1280,  1284,  1292,  1293,  1294,  1302,
-  1310,  1318,  1320,  1328,  1349,  1356,  1363,  1365,  1374,  1379,
-  1402,  1446,  1447,  1451,  1455,  1459,  1463,  1465,  1469,  1471,
-  1479,  1481,  1486,  1492,  1494,  1499,  1514,  1529,  1540,  1552,
-  1560,  1569,  1613,  1616,  1620,  1623,  1627,  1630,  1635,  1637,
-  1641,  1654,  1657,  1664,  1671,  1676,  1678,  1683,  1685,  1692,
-  1694,  1698,  1702,  1708,  1712,  1715,  1718,  1721,  1731,  1733,
-  1736,  1740,  1743,  1746,  1749,  1752,  1758,  1764,  1766,  1771,
-  1773,  1782,  1785,  1787,  1790,  1796,  1798,  1808,  1812,  1815,
-  1818,  1823,  1826,  1834,  1836,  1838,  1840,  1843,  1846,  1861,
-  1880,  1883,  1885,  1888,  1890,  1893,  1895,  1898,  1900,  1903,
-  1906,  1910,  1929,  1931,  1951,  1957,  1958,  1964,  1973,  1975,
-  1985,  1994,  1996,  2008,  2011,  2015,  2018,  2022,  2027,  2030,
-  2034,  2037,  2039,  2041,  2043,  2050,  2052,  2053,  2054,  2058,
-  2061,  2065,  2068,  2074,  2076,  2079,  2082,  2085,  2091,  2094,
-  2097,  2099,  2101,  2103,  2107,  2113,  2121,  2123,  2127,  2129,
-  2134,  2137,  2140,  2142,  2144,  2148,  2152,  2157,  2161,  2164,
-  2169,  2173,  2176,  2179,  2182,  2186,  2221,  2227,  2233,  2245,
-  2247,  2250,  2252,  2257,  2259,  2261,  2263,  2265,  2269,  2274,
-  2279,  2294,  2296,  2300,  2305,  2308,  2315,  2343,  2349,  2351,
-  2354,  2357,  2359,  2363,  2365,  2369,  2395,  2424,  2426,  2428,
-  2430,  2451,  2474,  2476,  2480,  2506,  2515,  2598,  2605,  2608,
-  2616,  2627,  2636,  2640,  2655,  2658,  2663,  2665,  2667,  2669,
-  2671,  2673,  2678,  2684,  2686,  2689,  2692,  2694,  2705,  2710,
-  2713,  2719,  2722,  2723,  2734,  2737,  2738,  2749,  2751,  2754,
-  2756,  2759,  2766,  2774,  2781,  2787,  2793,  2801,  2805,  2810,
-  2814,  2817,  2826,  2828,  2832,  2835,  2840,  2844,  2849,  2859,
-  2862,  2866,  2870,  2878,  2883,  2889,  2892,  2894,  2896,  2902,
-  2905,  2907,  2909,  2911,  2915,  2918,  2939,  2947,  2948,  2952,
-  2957,  2960,  2962,  2964,  2966,  2970,  2976,  2979,  2981,  2983,
-  2985,  2989,  2992,  2995,  2997,  2999,  3001,  3005,  3008,  3011,
-  3013,  3015,  3017,  3026,  3032,  3038,  3040,  3044,  3047,  3049,
-  3053,  3055,  3056,  3059,  3061,  3067,  3082,  3088,  3098,  3112,
-  3121,  3122,  3126,  3129,  3135,  3141,  3144,  3146,  3148,  3150,
-  3154,  3158,  3162,  3165,  3170,  3173,  3175,  3177,  3179,  3181,
-  3183,  3185,  3187,  3191,  3195,  3199,  3203,  3204,  3206,  3208,
-  3210,  3212,  3214,  3216,  3218,  3220,  3228,  3230,  3231,  3232,
-  3235,  3243,  3248,  3255,  3257,  3262,  3264,  3267,  3281,  3284,
-  3287,  3296,  3308,  3319,  3339,  3349,  3352,  3360,  3372,  3375,
-  3378,  3381,  3397,  3400,  3411,  3412,  3416,  3431,  3450,  3462,
-  3476,  3490,  3503,  3522,  3540,  3559,  3567,  3588,  3606,  3619,
-  3620,  3623,  3623,  3626,  3626,  3629,  3629,  3635,  3641,  3644,
-  3649,  3656,  3665,  3674,  3683,  3691,  3704,  3706,  3710,  3712,
-  3715,  3722,  3725,  3733,  3749,  3760,  3772,  3774,  3777,  3787,
-  3797,  3808,  3810,  3812,  3815,  3832,  3838,  3846,  3848,  3850,
-  3854,  3857,  3858,  3866,  3870,  3874,  3877,  3878,  3884,  3887,
-  3890,  3892,  3896,  3901,  3904,  3914,  3919,  3920,  3928,  3934,
-  3939,  3943,  3948,  3952,  3956,  3960,  3965,  3976,  3990,  3994,
-  3997,  3999,  4003,  4007,  4010,  4013,  4015,  4019,  4021,  4028,
-  4035,  4038,  4041,  4045,  4049,  4055,  4059,  4064,  4066,  4069,
-  4074,  4080,  4090,  4093,  4095,  4099,  4104,  4106,  4113,  4116,
-  4118,  4120,  4126,  4131,  4134,  4136,  4138,  4140,  4142,  4144,
-  4146,  4148,  4150,  4152,  4154,  4156,  4158,  4160,  4162,  4164,
-  4166,  4168,  4170,  4172,  4174,  4176,  4178,  4180,  4182,  4184,
-  4186,  4188,  4190,  4192,  4194,  4196,  4199,  4201
-};
-
-static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER",
-"TYPENAME","SELFNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT","STRING",
-"ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
-"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","GCC_ASM_KEYWORD","TYPEOF",
-"ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","AGGR",
-"VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE",
-"TYPENAME_KEYWORD","USING","LEFT_RIGHT","TEMPLATE","TYPEID","DYNAMIC_CAST","STATIC_CAST",
-"REINTERPRET_CAST","CONST_CAST","SCOPE","EMPTY","PTYPENAME","NSNAME","'{'","','",
-"';'","THROW","':'","ASSIGN","'='","'?'","OROR","ANDAND","'|'","'^'","'&'","MIN_MAX",
-"EQCOMPARE","ARITHCOMPARE","'<'","'>'","LSHIFT","RSHIFT","'+'","'-'","'*'","'/'",
-"'%'","POINTSAT_STAR","DOT_STAR","UNARY","PLUSPLUS","MINUSMINUS","'~'","HYPERUNARY",
-"PAREN_STAR_PAREN","POINTSAT","'.'","'('","'['","TRY","CATCH","TYPENAME_ELLIPSIS",
-"PRE_PARSED_FUNCTION_DECL","EXTERN_LANG_STRING","ALL","PRE_PARSED_CLASS_DECL",
-"DEFARG","DEFARG_MARKER","TYPENAME_DEFN","IDENTIFIER_DEFN","PTYPENAME_DEFN",
-"END_OF_LINE","END_OF_SAVED_INPUT","')'","'}'","'!'","']'","program","extdefs",
-"@1","extdefs_opt",".hush_warning",".warning_ok","extension","asm_keyword","lang_extdef",
-"@2","extdef","@3","@4","using_decl","any_id","extern_lang_string","template_header",
-"@5","template_parm_list","template_type_parm","template_parm","template_def",
-"datadef","ctor_initializer_opt","maybe_return_init","eat_saved_input","fndef",
-"constructor_declarator","@6","@7","@8","@9","fn.def1","component_constructor_declarator",
-"fn.def2","return_id","return_init","base_init",".set_base_init","member_init_list",
-"member_init","identifier","notype_identifier","identifier_defn","explicit_instantiation",
-"template_type","self_template_type","template_close_bracket","template_arg_list",
-"template_arg","unop","expr","paren_expr_or_null","paren_cond_or_null","xcond",
-"condition","@10","compstmtend","already_scoped_stmt","@11","nontrivial_exprlist",
-"nonnull_exprlist","unary_expr","new_placement","new_initializer","regcast_or_absdcl",
-"cast_expr","expr_no_commas","notype_unqualified_id","unqualified_id","expr_or_declarator",
-"direct_notype_declarator","primary","@12","new","delete","boolean.literal",
-"string","nodecls","object","decl","declarator","fcast_or_absdcl","type_id",
-"typed_declspecs","typed_declspecs1","reserved_declspecs","declmods","typed_typespecs",
-"reserved_typespecquals","typespec","typespecqual_reserved","initdecls","notype_initdecls",
-"nomods_initdecls","maybeasm","initdcl0","@13","initdcl","@14","notype_initdcl0",
-"@15","nomods_initdcl0","@16","maybe_attribute","attributes","attribute","attribute_list",
-"attrib","any_word","identifiers_or_typenames","maybe_init","init","initlist",
-"fn.defpen","pending_inline","pending_inlines","defarg_again","pending_defargs",
-"structsp","@17","@18","@19","@20","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype",
-"named_class_head_sans_basetype_defn","named_complex_class_head_sans_basetype",
-"do_xref_defn","named_class_head","unnamed_class_head","class_head","maybe_base_class_list",
-"base_class_list","base_class","base_class.1","base_class_access_list","left_curly",
-"self_reference","opt.component_decl_list","component_decl_list","component_decl",
-"component_decl_1","components","notype_components","component_declarator0",
-"component_declarator","after_type_component_declarator0","notype_component_declarator0",
-"after_type_component_declarator","notype_component_declarator","enumlist","enumerator",
-"new_type_id","cv_qualifiers","nonempty_cv_qualifiers","suspend_mom","nonmomentary_expr",
-"maybe_parmlist","after_type_declarator","complete_type_name","nested_type",
-"direct_after_type_declarator","notype_declarator","complex_notype_declarator",
-"complex_direct_notype_declarator","qualified_id","notype_qualified_id","overqualified_id",
-"functional_cast","type_name","nested_name_specifier","nested_name_specifier_1",
-"complex_type_name","ptr_to_mem","global_scope","new_declarator","direct_new_declarator",
-"absdcl","direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel",
-"maybe_label_decls","label_decls","label_decl","compstmt_or_error","compstmt",
-"@21","simple_if","@22","@23","implicitly_scoped_stmt","@24","stmt","simple_stmt",
-"@25","@26","@27","@28","@29","@30","@31","@32","@33","@34","@35","@36","@37",
-"@38","@39","function_try_block","@40","@41","try_block","@42","@43","handler_seq",
-"handler","@44","@45","@46","type_specifier_seq","handler_args","label_colon",
-"for.init.statement","maybe_cv_qualifier","xexpr","asm_operands","nonnull_asm_operands",
-"asm_operand","asm_clobbers","parmlist","complex_parmlist","defarg","@47","defarg1",
-"parms","parms_comma","named_parm","full_parm","parm","see_typename","bad_parm",
-"exception_specification_opt","ansi_raise_identifier","ansi_raise_identifiers",
-"conversion_declarator","operator","operator_name",""
-};
-#endif
-
-static const short yyr1[] = {     0,
-   113,   113,   115,   114,   114,   116,   116,   117,   118,   119,
-   120,   120,   122,   121,   123,   123,   123,   123,   123,   123,
-   123,   124,   123,   125,   123,   123,   123,   123,   123,   126,
-   126,   126,   127,   127,   127,   127,   128,   128,   130,   129,
-   129,   131,   131,   132,   132,   132,   132,   133,   133,   133,
-   133,   134,   134,   135,   135,   135,   135,   135,   135,   135,
-   135,   135,   136,   136,   137,   137,   137,   138,   138,   139,
-   139,   139,   141,   140,   140,   142,   140,   140,   143,   140,
-   140,   144,   140,   140,   145,   145,   145,   145,   145,   146,
-   146,   146,   146,   147,   147,   147,   147,   147,   147,   147,
-   148,   149,   149,   149,   150,   151,   152,   152,   152,   152,
-   153,   153,   153,   153,   153,   153,   153,   153,   154,   154,
-   154,   154,   154,   155,   155,   155,   156,   156,   156,   157,
-   157,   157,   157,   157,   157,   157,   157,   158,   158,   158,
-   158,   158,   159,   159,   160,   160,   161,   161,   162,   162,
-   163,   163,   163,   163,   163,   164,   164,   165,   165,   166,
-   166,   167,   167,   167,   169,   168,   168,   170,   170,   170,
-   170,   172,   171,   171,   173,   173,   173,   173,   174,   174,
-   175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-   175,   175,   175,   175,   175,   175,   175,   175,   175,   175,
-   175,   175,   175,   175,   176,   176,   177,   177,   177,   177,
-   178,   178,   179,   179,   179,   180,   180,   180,   180,   180,
-   180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-   181,   181,   181,   181,   181,   182,   182,   182,   183,   183,
-   183,   183,   184,   184,   184,   185,   185,   185,   185,   185,
-   185,   185,   186,   185,   185,   185,   185,   185,   185,   185,
-   185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-   185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-   185,   185,   187,   187,   188,   188,   189,   189,   190,   190,
-   191,   192,   192,   193,   193,   193,   193,   193,   193,   194,
-   194,   195,   195,   196,   196,   196,   196,   196,   197,   197,
-   198,   198,   198,   198,   198,   198,   199,   199,   199,   199,
-   199,   200,   200,   200,   200,   200,   200,   201,   201,   201,
-   201,   202,   202,   203,   203,   203,   203,   203,   203,   203,
-   204,   204,   204,   205,   205,   206,   206,   207,   207,   208,
-   208,   210,   209,   209,   212,   211,   211,   214,   213,   213,
-   216,   215,   215,   217,   217,   218,   218,   219,   220,   220,
-   221,   221,   221,   221,   221,   222,   222,   222,   222,   223,
-   223,   224,   224,   225,   225,   225,   225,   225,   226,   226,
-   226,   226,   226,   226,   227,   228,   228,   228,   229,   229,
-   230,   230,   231,   231,   231,   233,   232,   232,   234,   232,
-   232,   232,   232,   232,   232,   235,   236,   232,   232,   237,
-   237,   238,   238,   239,   239,   239,   239,   239,   240,   241,
-   242,   242,   242,   243,   244,   244,   244,   245,   246,   246,
-   247,   247,   247,   248,   248,   249,   249,   250,   250,   250,
-   250,   250,   251,   251,   251,   251,   252,   253,   254,   254,
-   254,   254,   255,   255,   256,   256,   256,   256,   256,   256,
-   256,   256,   257,   257,   257,   257,   257,   257,   257,   257,
-   257,   258,   258,   258,   259,   259,   259,   260,   260,   261,
-   261,   262,   262,   263,   263,   263,   263,   264,   264,   265,
-   265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
-   269,   270,   270,   271,   272,   273,   273,   273,   273,   274,
-   274,   274,   274,   274,   274,   275,   275,   275,   275,   276,
-   277,   277,   277,   277,   277,   277,   278,   278,   278,   278,
-   278,   278,   279,   279,   279,   279,   279,   279,   280,   280,
-   280,   280,   280,   281,   282,   283,   283,   284,   284,   284,
-   285,   285,   285,   286,   286,   287,   287,   287,   287,   288,
-   288,   288,   289,   289,   290,   291,   291,   291,   291,   291,
-   291,   291,   292,   292,   293,   293,   293,   293,   293,   293,
-   293,   293,   293,   293,   293,   294,   294,   294,   294,   294,
-   294,   294,   294,   294,   294,   294,   295,   295,   295,   295,
-   296,   297,   298,   299,   299,   300,   300,   301,   302,   302,
-   304,   303,   306,   307,   305,   308,   309,   308,   310,   310,
-   311,   311,   312,   313,   311,   311,   314,   315,   311,   316,
-   317,   311,   318,   319,   320,   321,   311,   322,   323,   311,
-   324,   311,   325,   311,   326,   311,   311,   311,   311,   311,
-   311,   311,   311,   311,   311,   311,   311,   311,   311,   311,
-   328,   329,   327,   331,   332,   330,   333,   333,   335,   336,
-   337,   334,   338,   338,   339,   339,   340,   340,   340,   340,
-   341,   341,   341,   342,   342,   343,   343,   343,   344,   344,
-   345,   345,   346,   347,   347,   348,   348,   348,   349,   349,
-   349,   349,   349,   349,   349,   349,   349,   349,   351,   350,
-   352,   352,   353,   353,   353,   353,   353,   354,   354,   355,
-   355,   355,   355,   355,   355,   356,   356,   357,   357,   358,
-   359,   359,   360,   360,   360,   361,   362,   362,   363,   363,
-   363,   363,   364,   365,   365,   365,   365,   365,   365,   365,
-   365,   365,   365,   365,   365,   365,   365,   365,   365,   365,
-   365,   365,   365,   365,   365,   365,   365,   365,   365,   365,
-   365,   365,   365,   365,   365,   365,   365,   365
-};
-
-static const short yyr2[] = {     0,
-     0,     1,     0,     2,     2,     1,     0,     0,     0,     1,
-     1,     1,     0,     2,     2,     1,     1,     5,     4,     5,
-     4,     0,     6,     0,     5,     5,     2,     4,     2,     2,
-     3,     3,     1,     1,     2,     2,     1,     2,     0,     5,
-     3,     1,     3,     1,     2,     1,     2,     1,     3,     1,
-     3,     2,     2,     2,     3,     3,     2,     2,     2,     2,
-     2,     1,     1,     1,     0,     1,     2,     0,     1,     4,
-     3,     3,     0,     8,     5,     0,     9,     6,     0,     8,
-     5,     0,     9,     6,     2,     2,     1,     2,     1,     6,
-     4,     6,     4,     2,     1,     2,     2,     1,     2,     1,
-     2,     2,     4,     2,     3,     0,     0,     1,     3,     2,
-     3,     1,     4,     2,     4,     2,     4,     2,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-     3,     2,     2,     4,     4,     3,     3,     4,     3,     4,
-     3,     1,     4,     3,     1,     1,     1,     3,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-     3,     0,     1,     1,     0,     7,     1,     1,     3,     4,
-     3,     0,     3,     1,     3,     3,     3,     3,     1,     1,
-     1,     2,     2,     2,     2,     2,     2,     2,     4,     2,
-     4,     2,     3,     3,     4,     4,     5,     5,     6,     2,
-     4,     5,     2,     2,     3,     3,     3,     1,     3,     2,
-     3,     4,     1,     2,     5,     1,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     5,     3,     3,     1,     2,
-     3,     1,     1,     1,     1,     1,     1,     1,     1,     2,
-     2,     3,     1,     1,     3,     1,     1,     1,     1,     3,
-     3,     3,     0,     4,     4,     2,     4,     2,     2,     1,
-     4,     1,     7,     7,     7,     7,     4,     4,     2,     2,
-     1,     4,     2,     2,     2,     5,     3,     5,     3,     4,
-     6,     2,     1,     2,     1,     2,     1,     1,     1,     2,
-     0,     2,     2,     3,     3,     3,     2,     2,     2,     1,
-     1,     1,     2,     2,     2,     2,     1,     1,     1,     1,
-     2,     2,     3,     3,     3,     4,     1,     2,     2,     2,
-     1,     1,     1,     2,     2,     2,     1,     1,     2,     2,
-     3,     1,     2,     1,     1,     1,     4,     4,     4,     4,
-     1,     1,     1,     1,     3,     1,     3,     1,     3,     0,
-     4,     0,     6,     3,     0,     6,     3,     0,     6,     3,
-     0,     6,     3,     0,     1,     1,     2,     6,     1,     3,
-     0,     1,     4,     6,     4,     1,     1,     1,     1,     1,
-     3,     0,     2,     1,     2,     3,     4,     1,     1,     3,
-     4,     6,     3,     5,     1,     4,     3,     3,     0,     3,
-     3,     3,     0,     2,     2,     0,     7,     4,     0,     6,
-     3,     2,     2,     3,     4,     0,     0,     9,     1,     0,
-     1,     0,     1,     1,     2,     2,     2,     2,     2,     2,
-     3,     2,     3,     0,     1,     3,     2,     2,     1,     1,
-     0,     2,     3,     1,     4,     1,     3,     1,     3,     4,
-     4,     4,     2,     2,     3,     3,     1,     0,     1,     2,
-     4,     3,     1,     2,     2,     2,     2,     2,     2,     2,
-     1,     2,     2,     2,     4,     4,     2,     1,     5,     4,
-     1,     0,     1,     3,     0,     1,     3,     1,     1,     1,
-     1,     4,     4,     4,     4,     4,     3,     4,     4,     4,
-     4,     3,     1,     3,     1,     3,     2,     1,     6,     0,
-     2,     1,     2,     0,     2,     4,     4,     2,     4,     3,
-     3,     2,     2,     3,     1,     1,     2,     1,     2,     2,
-     4,     4,     3,     3,     2,     1,     3,     3,     2,     2,
-     3,     1,     3,     3,     2,     2,     3,     1,     4,     3,
-     4,     3,     1,     2,     2,     1,     2,     4,     4,     2,
-     1,     1,     1,     1,     2,     2,     2,     2,     2,     2,
-     1,     2,     2,     3,     1,     3,     2,     3,     2,     2,
-     3,     1,     3,     4,     3,     2,     2,     1,     3,     2,
-     2,     1,     2,     3,     1,     3,     1,     6,     4,     4,
-     3,     5,     3,     3,     3,     2,     1,     1,     2,     2,
-     2,     0,     0,     0,     1,     1,     2,     3,     1,     2,
-     0,     5,     0,     0,     6,     1,     0,     4,     1,     1,
-     1,     2,     0,     0,     6,     1,     0,     0,     7,     0,
-     0,     7,     0,     0,     0,     0,    14,     0,     0,     9,
-     0,     5,     0,     7,     0,     4,     2,     2,     2,     3,
-     6,     8,    10,    12,     4,     3,     2,     2,     1,     1,
-     0,     0,     6,     0,     0,     5,     1,     2,     0,     0,
-     0,     8,     1,     1,     3,     3,     2,     2,     2,     2,
-     2,     1,     2,     0,     1,     0,     1,     1,     0,     1,
-     1,     3,     4,     1,     3,     0,     1,     1,     1,     2,
-     2,     2,     1,     1,     2,     2,     2,     2,     0,     3,
-     1,     1,     1,     2,     2,     2,     4,     2,     2,     2,
-     2,     2,     2,     1,     2,     1,     2,     1,     1,     0,
-     0,     1,     0,     4,     2,     1,     1,     3,     0,     3,
-     3,     3,     1,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
-     2,     3,     2,     2,     4,     4,     3,     2
-};
-
-static const short yydefact[] = {     3,
-    13,    13,     5,     0,     4,     0,   243,   571,   572,   333,
-   345,   522,     0,    11,    12,     0,     0,     0,    10,   434,
-   763,     0,     0,     0,     0,   585,   244,   245,    62,     0,
-     0,   750,     0,    37,     0,     0,    14,     0,     8,     0,
-    17,    16,    68,    89,    65,     0,   573,   142,   254,   552,
-     0,   320,     0,   319,   338,     0,   358,   337,   376,   344,
-     0,   445,   444,   451,   450,   449,   429,   332,   346,   538,
-    87,   253,   563,   536,     0,   574,   520,     0,     0,   242,
-    60,    61,   576,     0,   577,     0,     0,   119,   120,   121,
-   122,   123,   419,   422,     0,   581,     0,   423,     0,     0,
-     0,     0,   120,   121,   122,   123,    24,     0,     0,     0,
-     0,     0,     0,     0,     0,    30,     0,     0,   333,    39,
-   133,     0,     0,     0,   132,     0,   578,     0,   550,     0,
-     0,     0,   549,     0,     0,     0,     0,   254,     0,   524,
-     0,   253,   520,    29,     0,    27,     3,    38,     0,    53,
-    52,    69,    15,     0,     0,   392,    66,    58,   579,   524,
-     0,   520,    59,     0,     0,     0,    85,     0,   354,   310,
-   535,   311,   546,     0,   520,   335,   334,    57,    88,   321,
-     0,   356,   336,    86,   327,   351,   352,   322,   340,   342,
-   331,   353,     0,    54,   377,   435,   436,   437,   438,   448,
-   128,   127,   129,   439,   440,   442,     0,   451,   750,   447,
-   467,   468,   523,   339,     0,     0,   374,   572,   583,   142,
-   565,   540,   575,     0,   539,   537,     0,   798,   794,   793,
-   791,   773,   778,   779,     0,   785,   784,   770,   771,   769,
-   788,   777,   774,   775,   776,   780,   781,   767,   768,   764,
-   765,   766,   790,   782,   783,   772,   789,     0,   786,   693,
-   338,   694,   759,   522,   257,   299,     0,     0,     0,     0,
-   295,   293,   270,   297,   298,     0,     0,     0,     0,     0,
-   239,     0,     0,   145,   146,   152,   151,     0,   153,   154,
-     0,     0,   155,     0,   141,     0,   147,     0,   213,     0,
-   216,   150,   256,   181,     0,     0,   258,   259,     0,   149,
-   317,   338,   318,   566,   281,   272,     0,     0,   144,     0,
-   137,     0,     0,   136,   421,     0,   416,   582,   580,     0,
-   156,   157,     0,     0,     0,   381,     3,    22,     0,   424,
-     0,   247,   248,     0,   246,    33,    34,     0,   564,    32,
-    31,    41,     0,   131,   442,   139,     0,   548,     0,   547,
-   241,   251,     0,   556,   250,     0,   555,     0,   255,   560,
-     0,     0,    13,     0,     0,     9,     9,   101,    72,   106,
-   681,     0,    64,    63,    71,   104,     0,     0,   102,    67,
-   562,     0,     0,   528,     0,   753,     0,   533,     0,   532,
-     0,     0,     0,     0,   520,   374,     0,    56,   524,   520,
-   545,     0,   324,   325,     0,    55,   374,   329,   328,   330,
-   323,   343,   360,   359,   441,   443,   446,   452,     0,     0,
-   341,     0,   373,   375,   520,    73,   520,    79,   521,   551,
-   572,   584,   142,     0,     0,   787,   792,   340,   520,   520,
-     0,   520,   797,     0,     0,     0,   188,     0,     0,   190,
-   203,   204,     0,     0,     0,     0,     0,   240,   187,   184,
-   183,   185,     0,     0,     0,     0,     0,   256,     0,     0,
-     0,   182,     0,   140,   186,     0,     0,   214,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   266,   268,   269,   303,   302,     0,     0,     0,     0,     0,
-   192,   518,     0,   200,   300,   292,     0,   750,   284,   285,
-     0,     0,   312,   602,   598,   607,     0,   524,   520,   520,
-   520,   314,   605,     0,   570,   316,     0,     0,   315,   283,
-     0,   279,   294,   296,   567,     0,   280,   143,   135,   442,
-   515,   432,   513,   418,     0,   347,     0,     0,   348,   349,
-   350,   387,   388,   389,   386,     0,   379,   382,     0,     3,
-     0,   425,    28,    36,    35,    46,     0,    48,    42,   749,
-   744,     0,   317,   338,    44,   318,   748,    50,   138,   554,
-   553,   255,   557,     0,    19,    21,    68,   107,   301,     0,
-   631,    70,   629,   398,     0,   394,   393,   180,     0,   179,
-   525,   561,     0,   723,   724,     0,   718,   338,     0,   717,
-   719,   751,   733,     0,     0,   559,   531,   530,     0,     0,
-   544,     0,   364,   355,   543,     0,   753,   534,   326,   357,
-   370,   374,   750,     0,   750,     0,   453,   454,   456,   750,
-   458,   488,   572,     0,   481,     0,     0,   491,   100,    95,
-     0,   142,   492,   495,     0,   473,     0,    98,     0,   374,
-     0,   371,   753,   716,   753,   716,   520,    76,   520,    82,
-   796,   795,   759,   759,   759,     0,     0,     0,   570,     0,
-     0,     0,     0,   338,     0,     0,     0,   262,     0,   260,
-   261,     0,   211,   148,   243,   571,   572,   244,   245,     0,
-     0,   399,   430,     0,   238,   237,   708,   707,     0,   235,
-   234,   232,   233,   231,   230,   229,   226,   227,   228,   224,
-   225,   219,   220,   221,   222,   223,   217,   218,     0,     0,
-     0,     0,     0,     0,   194,   208,     0,     0,   193,   520,
-   520,     0,   520,   517,   592,     0,     0,     0,     0,   287,
-     0,   289,     0,   601,   600,   597,   596,   749,     0,     0,
-   616,     0,     0,   753,   313,   753,   603,   520,   716,   524,
-   602,   598,     0,     0,   520,     0,     0,     0,     0,     0,
-     0,   433,     0,   432,   178,   177,   176,   175,   381,     0,
-     0,    25,     0,    26,    47,     0,    40,     0,   602,   598,
-     0,   740,   520,   743,   745,   741,   742,   439,     0,    18,
-    20,   124,   112,   125,   126,     0,   105,   108,     0,     0,
-     0,     0,   630,   622,   395,     0,   103,   529,   526,   722,
-   739,   728,   726,     0,   527,   721,   738,   727,   725,   720,
-   752,   735,   746,   736,   729,   734,   755,     0,   362,   542,
-   541,   368,   367,   464,     0,   463,     0,     0,   750,   750,
-   750,     0,   520,   716,   487,   482,   374,   374,   479,   480,
-   477,   478,   520,   716,   243,   571,     0,   360,    96,   483,
-   493,   498,   499,   360,   360,     0,     0,   360,    94,   484,
-   496,   360,   474,   475,   476,   374,     0,   426,   361,     0,
-    75,     0,    81,     0,   753,   716,   753,   716,   761,   760,
-   762,   271,   189,   191,   277,   278,     0,     0,     0,     0,
-   261,   264,     0,     0,     0,     0,   212,     0,   265,   267,
-   206,   205,   196,     0,   195,   210,     0,     0,   589,   587,
-     0,   590,   524,   201,     0,     0,   290,     0,     0,   599,
-   595,   606,   520,   615,   613,   614,   604,   753,     0,   611,
-     0,   568,   569,     0,   282,   516,   514,   420,     0,   380,
-   378,   243,     0,    23,    43,    49,   601,   597,   602,   598,
-     0,   536,     0,   520,   603,    51,     0,   110,     0,   114,
-     0,   116,     0,   118,     0,   682,   624,     0,   396,   602,
-   598,     0,   256,     0,   566,   747,     0,     0,   756,   757,
-     0,     0,     0,   365,     0,     0,   459,     0,     0,   466,
-   465,   457,   753,     0,   392,   392,   753,     0,     0,     0,
-   374,   374,     0,   374,   374,     0,   374,     0,   392,     0,
-   413,   372,   520,   520,    78,     0,    84,     0,     0,     0,
-     0,     0,     0,   403,     0,     0,   400,   215,   236,     0,
-   197,   198,   207,   209,   588,   586,   593,   591,     0,   202,
-     0,   286,   288,   753,   609,   520,   610,   417,     0,   383,
-   385,   601,   597,   540,   603,   111,   109,     0,     0,     0,
-     0,     0,   168,   623,     0,   625,   626,   397,     0,   569,
-   737,   731,   732,   730,     0,   754,   363,   369,     0,   461,
-   462,   460,   455,    91,   520,   486,   490,    93,   520,   374,
-   374,   507,   392,   243,   571,     0,   494,   500,   501,   360,
-   360,   392,   392,     0,   392,   497,   485,     0,   753,   753,
-   520,   520,     0,     0,     0,     0,   401,     0,     0,     0,
-   199,   594,   291,   612,   753,     0,   113,   115,   117,   689,
-   683,   687,   390,     0,   632,     0,   243,   571,   572,   633,
-   647,   650,   653,   622,     0,     0,     0,     0,     0,     0,
-   244,   679,   684,     0,   704,     0,   641,     0,     0,   338,
-     0,   618,   639,   646,   617,   640,   680,     0,   627,   261,
-   758,   366,   753,   753,   506,   503,   505,     0,     0,   374,
-   374,   374,   502,   504,   489,   415,     0,   414,   409,    74,
-    80,   753,   753,   273,   274,   275,   276,     0,   404,   519,
-   608,   384,   622,   688,     0,   628,   621,   171,   697,   699,
-   700,   622,   622,   622,     0,     0,     0,   665,   667,   668,
-   669,     0,     0,     0,   698,     0,   309,   705,     0,   642,
-   307,   360,     0,   308,     0,   360,     0,     0,     0,   169,
-   620,   619,   643,   678,   677,    90,    92,   374,   374,   512,
-   392,   392,     0,     0,   428,    77,    83,   402,     0,   391,
-     0,     0,   637,   636,     0,     0,     0,     0,   661,     0,
-   670,     0,   676,   685,     0,   305,   306,     0,     0,     0,
-   304,   170,   622,   511,   509,   508,   510,   412,   411,   405,
-    65,    68,     0,   690,   160,     0,   634,   648,     0,   651,
-   624,   702,   654,     0,   167,     0,   338,     0,     0,     0,
-   666,   675,     0,     0,   644,     0,   410,     0,     0,     0,
-     0,   622,     0,   623,     0,   703,   622,   701,   658,   360,
-   663,   662,   686,   709,     0,   623,   408,     0,   407,   695,
-   696,   691,   161,   635,   172,   623,   174,   638,   158,     0,
-     0,     0,   622,   374,     0,     0,     0,   710,   711,   671,
-   645,   406,   623,   624,   649,     0,   652,   164,     0,   163,
-   659,     0,   664,     0,   709,     0,     0,   692,   173,   159,
-   655,   623,   165,     0,     0,   672,   712,     0,   660,     0,
-   713,     0,     0,     0,   166,   714,     0,   673,   656,     0,
-     0,     0,   715,   674,   623,   657,     0,     0,     0
-};
-
-static const short yydefgoto[] = {  1457,
-   373,     2,   374,   149,   606,   294,   216,     3,     4,    37,
-   580,   337,   668,   344,    39,    40,   353,   587,   588,   589,
-    41,    42,   382,   155,   153,    43,   669,   684,   926,   686,
-   928,    45,   670,   671,   156,   157,   383,   608,   837,   838,
-   204,   839,   205,    46,    47,    48,   295,   296,   297,   298,
-  1206,  1401,  1347,  1419,  1356,  1440,  1114,  1396,  1414,   331,
-   794,   299,   520,   759,   300,   301,   332,   303,   346,   362,
-    50,   304,   480,   305,   306,   307,   308,   384,   309,  1207,
-   423,   540,   627,  1208,    52,   188,   592,   311,   189,   458,
-   190,   168,   181,    56,   406,   169,  1032,   424,  1129,   182,
-  1033,    57,   920,   433,    58,    59,   576,   577,   578,  1184,
-   389,   722,   723,  1341,  1342,  1305,  1238,  1158,    60,   565,
-   326,  1061,  1239,   946,   803,    61,    62,    63,    64,   208,
-    65,    66,    67,   210,   657,   658,   659,   660,   212,   429,
-   430,   675,   676,   677,   900,   910,   901,  1147,   902,   903,
-  1148,  1149,   562,   563,   521,   784,   313,   392,   393,   162,
-   170,    69,    70,   171,   172,   141,    72,   116,   314,   315,
-   316,    74,   317,    76,    98,    77,   318,   764,   765,   779,
-   543,  1211,  1212,  1313,  1185,  1115,  1116,  1117,   612,  1213,
-   844,  1214,  1262,  1372,  1315,  1349,  1215,  1216,  1333,  1386,
-  1263,  1373,  1264,  1375,  1265,  1377,  1438,  1452,  1403,  1432,
-  1360,  1405,  1320,   385,   609,  1111,  1217,  1276,  1363,  1181,
-  1182,  1253,  1370,  1413,  1358,  1344,  1218,  1353,  1279,   729,
-  1407,  1408,  1409,  1447,   629,   630,   866,  1028,  1124,   631,
-   632,   633,   862,   634,   134,   864,   636,  1030,  1031,   453,
-    79,    80
-};
-
-static const short yypact[] = {    45,
-   109,-32768,-32768,  9869,-32768,    44,-32768,   294,   414,    76,
--32768,-32768,   392,-32768,-32768,    42,    59,    94,-32768,-32768,
--32768,   573,   707,  1336, 10054,-32768,   154,   170,-32768,  1480,
-  1480,-32768,  3768,-32768,  9869,   142,-32768,   203,   126,  9939,
--32768,-32768,   213,-32768,   260,   236,   271,-32768,-32768,   426,
-  1790,-32768,  5098,-32768,  1518,   558,-32768,   301,-32768,-32768,
-   881,-32768,-32768,   285,-32768,-32768,   302,  4449,-32768,-32768,
-  1373,-32768,-32768,-32768,   324,-32768,-32768,   358,  6789,-32768,
--32768,-32768,-32768,  8390,-32768,  8390, 10260,-32768,   294,   414,
-   154,   170,   259,   344,   271,-32768,   358,-32768,   358,  8839,
-  8839,   320,-32768,-32768,-32768,-32768,-32768,    49,   294,   414,
-   154,   170,   939,   401,   553,-32768,   646,   646,-32768,   360,
--32768,  4051,  3013,   881,-32768,  8390,-32768,  2670,-32768,   943,
-   401,  2670,-32768,  1076,  2820,  2820,  3768,   334,   356,   399,
-   397,   435,-32768,-32768,   500,-32768,   413,-32768,  1691,    44,
--32768,-32768,-32768,   547,    72,   250,   521,-32768,-32768,   481,
-   143,-32768,-32768,  2911,  2911,  4193,  1373,   608,-32768,-32768,
-   502,-32768,-32768,  1243,-32768,-32768,-32768,-32768,-32768,  1518,
-   672,-32768,   301,  1373,-32768,-32768,-32768,  1821,  1518,-32768,
-   301,-32768,  4051,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   271,   939,   285,-32768,-32768,
--32768,-32768,-32768,  1227,   358,   505,   301,   393,-32768,   176,
--32768,-32768,-32768,  3112,-32768,-32768,   695,-32768,   512,   517,
--32768,-32768,-32768,-32768,   559,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   503,-32768,-32768,
-  1227,  4449,  1007,   533,-32768,-32768,  9453,  9540,  9627,  9627,
--32768,-32768,-32768,-32768,-32768,   568,   600,   615,   621,   630,
-  8926,  1076,  9627,-32768,-32768,-32768,-32768,  9627,-32768,-32768,
-  9627,  6881,-32768,  9627,-32768,   557,-32768,  9627,-32768,  9013,
--32768,  5963,-32768,  1585,  2305,  9100,-32768,   662,  1440,-32768,
-   566,  2295,  2056,-32768,   240,-32768,   737,  1989,-32768,   557,
--32768,  4051,   881,-32768,-32768,  1076,   606,-32768,-32768,   599,
-   677, 10414,   611,   637,   648,  1302,   413,-32768,   553,-32768,
-   939,   294,   414,   711,-32768,-32768,-32768,   646,-32768,-32768,
--32768,-32768,  4374,-32768,   257,-32768,   557,-32768,   818,-32768,
--32768,-32768,  2670,-32768,-32768,  2670,-32768,   653,-32768,-32768,
-  3112,    55,   667,   678, 10260,-32768,-32768,-32768,-32768,-32768,
--32768,   102,-32768,-32768,-32768,-32768,  6972,  8926,-32768,-32768,
--32768,  8926,   686,-32768,  5379,   121,  3290,-32768,  3290,-32768,
-  3538,  3538,  4193,   709,-32768,   301,  4051,-32768,   690,-32768,
--32768,  3629,  1821,  1518,  4051,-32768,   301,-32768,-32768,   301,
-  1821,-32768,   348,-32768,-32768,   271,-32768,  3069,  3964,    48,
-  1227,   500,   747,   301,-32768,-32768,-32768,-32768,-32768,-32768,
-   453,-32768,   289,   704,   714,-32768,-32768,  1227,-32768,-32768,
-   826,-32768,-32768,  8926,   533,  6881,-32768,   340,  6881,-32768,
--32768,-32768,  8839,  4846,  4846,  4846,  4846, 10482,-32768,-32768,
--32768,-32768,   732,  9714,  9714,  6881,   738,   334,   740,   798,
-   758,-32768,  8839,-32768,-32768,  6634,  6881,-32768,  8926,  8926,
-  7063,  8926,  8926,  8926,  8926,  8926,  8926,  8926,  8926,  8926,
-  8926,  8926,  8926,  8926,  8926,  8926,  8926,  8926,  8926,  8926,
--32768,-32768,-32768,-32768,-32768,  8926,  8926,  8926,  8839,  2689,
-   381,   362,  7696,-32768,-32768,-32768,   814,   862,   343,   361,
-  1612,   401,-32768,  1557,  1557,-32768,  2917,   764,   777,   844,
--32768,-32768,   561,  8200,  1177,-32768,   847,   358,-32768,-32768,
-  8926,-32768,-32768,-32768,-32768,   551,-32768,-32768,-32768,   476,
-   831,   837,-32768,-32768,  1076,-32768,  7427,  7518,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,    52,-32768,   807,   789,   413,
-   841,-32768,-32768,-32768,-32768,   804,   598,   848,-32768,-32768,
-   702, 10315,   702,  1911,   881,  3617,-32768,   850,-32768,-32768,
--32768,   809,-32768,   855,-32768,-32768,   213,   874,   854,   798,
--32768,-32768,-32768,-32768,  6356, 10482,-32768,   677,   817, 10414,
--32768,-32768,   820,-32768,-32768,   823,   330,  4985,   824,-32768,
-    66, 10109,   871,   876,   383,-32768,-32768,-32768,  3290,  3290,
--32768,  3629,   888,-32768,-32768,   843,   121,-32768,  1821,-32768,
-   894,   301,-32768,   868,-32768,   707,   905,-32768,-32768,   262,
--32768,-32768,   508,   707,-32768,  8926, 10009,-32768,   465,   465,
-   188,   404,  3336, 10154,  4767,-32768,   129,   465,   903,   301,
-    62,-32768,   121,  1089,   121,  1089,-32768,-32768,-32768,-32768,
--32768,-32768,  1487,  1487,  1487,   861,   863,  9192,   844,   864,
-   865,   867,   896,  3839,   904,   906,   907,-32768,   879,-32768,
--32768,   884,-32768,-32768,   921,   590,   622,   379,   147,  8926,
-   936,-32768,   942,   897, 10482, 10482,-32768,-32768,   948,  5235,
-  7722,  2193,  5136,  5286,  4683,  2562,  2406,  2406,  2406,  1199,
-  1199,   753,   753,   697,   697,   697,-32768,-32768,   915,   893,
-   916,   923,   924,  4846,   381,-32768,  6972,  8926,-32768,-32768,
--32768,  8926,-32768,-32768,   919,  9627,   922,   928,   991,-32768,
-  8926,-32768,  8926,  3429,-32768,  3429,-32768,   157,   932,   937,
--32768,   933,  4846,   121,-32768,   121,  3845,-32768,  1089,   941,
-  8477,  8477,  6049,   940,  9013,   945,  1243,  1989,   964,   949,
-  8926,  1076,   938,   837,-32768, 10482,-32768, 10482,  1302,   950,
-  9279,-32768,   955,-32768,-32768,  4374,-32768,  4846,  2139,  2139,
-  3183,-32768,-32768,-32768,-32768,-32768,-32768,   655,  8926,-32768,
--32768,-32768,-32768,   154,   170,  8926,  1001,-32768,   438,   448,
-   471,   102,-32768,-32768,-32768,    82,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  8295,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   876,  1002,-32768,-32768,-32768,  4846,-32768,-32768,
--32768,-32768,  1005,-32768,  8839,-32768,   939,   401,-32768,-32768,
--32768,  1109,-32768,  1089, 10482,-32768,   301,   301,-32768,-32768,
--32768,-32768,-32768,  1089,  1009,   661,  8926,   348,-32768,  1023,
--32768,-32768,-32768,   883,  1046,   324,   401,  1203,   465,  1024,
--32768,  1359,-32768,-32768,-32768,   301,  4915,-32768,-32768,  6972,
--32768,   977,-32768,   982,   121,  1089,   121,  1089,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   999,  1010,  1012,  1014,
-   809,-32768, 10346,  6972,  6450,   988,-32768,  8926,-32768,-32768,
--32768,-32768,   329,  1000,-32768,-32768,  1013,   150,  1070,  1070,
-   998,  1070,-32768,-32768,  9627,  1121,-32768,  1029,  1033,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   121,  1035,-32768,
-  1036,-32768,-32768,  1291,-32768, 10482,-32768,-32768,  1037,-32768,
--32768,   158,  1040,-32768,-32768,-32768,  2364,  2364,  2492,  2492,
-  3183,-32768,  1243,-32768,  2611,  5963,  1043,-32768,   874,-32768,
-  8926,-32768,  8926,-32768,  8926,-32768,    68,  6543,-32768,  8569,
-  8569,  6170,   144,  1044,   155,-32768,  6972,  6728,-32768,-32768,
-   161,  6972,  6972,-32768,  1050,  1051,-32768,   939,  3069,-32768,
--32768,-32768,   121,  1053,  1103,  1103,   121,  1059,  8926,  8926,
-  5719,   301,  3687,   301,   301,  1032,   301,  3919,  1103,  5493,
--32768,-32768,-32768,-32768,-32768,  1060,-32768,  1069,  8926,  8926,
-  8926,  8926,  6972,-32768,  8926,  1093,-32768,-32768, 10482,  8926,
--32768,   329,-32768,-32768,-32768,-32768,-32768,-32768,  1067,-32768,
-  1134,-32768,-32768,   121,-32768,-32768,-32768,-32768,  8926,-32768,
--32768,  2364,  2364,-32768,  2611,-32768,-32768,  1075,  1080,  1081,
-  1098,  1076,-32768,-32768,  5927,  1166,-32768,-32768,  1094,  1409,
--32768,-32768,-32768,-32768,  4846,-32768,-32768,-32768,  6972,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  5719,
-  5719,-32768,  1103,  1144,   691,  8926,-32768,-32768,-32768,   348,
-   348,  1103,  1103,   453,  1103,-32768,-32768,  5654,   121,   121,
--32768,-32768,  1099,  1100,  1101,  1104,-32768, 10437,  6972,  1116,
--32768,-32768,-32768,-32768,   121,  1106,-32768,-32768,-32768,-32768,
-  1098,-32768,-32768,   679,-32768,   166,  1154,   693,   729,-32768,
--32768,-32768,-32768,-32768,  8926,  1159,  1182,  1185,  8661,   582,
-   450,-32768,-32768,  8752,  1229,  1189,-32768,  2470, 10215,  3404,
-  5816,-32768,-32768,  1238,-32768,-32768,-32768,  7806,-32768,   292,
--32768,-32768,   121,   121,-32768,-32768,-32768,  8926,  8926,  5719,
-   301,   301,-32768,-32768,-32768,-32768,  7609,-32768,-32768,-32768,
--32768,   121,   121,-32768,-32768,-32768,-32768,  6972,-32768,-32768,
--32768,-32768,-32768,-32768,  1076,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   798,  1162,  1163,  5543,-32768,-32768,-32768,
--32768,  1198,  8926,  1200,-32768,   798,-32768,-32768,  1173,-32768,
--32768,   348,   761,-32768,   785,   348,  9366,   806,   172,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  5719,  5719,-32768,
-  1103,  1103,  1160, 10368,  1175,-32768,-32768,-32768,  1192,-32768,
-   474,   474,-32768,-32768,  1259,  6265,  8839,  8926,-32768,  7915,
--32768,  1230,-32768,-32768,   500,-32768,-32768,  9801,  9801,  7154,
--32768,-32768,   798,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   260,   213,  3073,-32768,-32768,  8839,-32768,-32768,  8107,-32768,
-    68,-32768,-32768,  1232,-32768,  1178,   186,  4051, 10460,  7915,
--32768,-32768,  1098,    53,-32768,   145,-32768,  1180,  1184,   798,
-  1188,   798,  8011,-32768,   544,-32768,-32768,-32768,-32768,   348,
--32768,-32768,  1098,  1292,  1241,-32768,-32768,   102,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  8926,
-  1244,  7245,   798,   301,  7915,  1218,   180,  1258,-32768,-32768,
--32768,-32768,-32768,    68,-32768,  1210,-32768,-32768,  1261,-32768,
--32768,  1269,-32768,  8926,  1292,  1274,  1292,-32768,-32768,-32768,
--32768,-32768,-32768,  1235,   229,-32768,-32768,  7336,-32768,  6972,
--32768,  1328,  1293,  1246,-32768,-32768,   206,-32768,-32768,  1342,
-  1301,  8011,-32768,-32768,-32768,-32768,  1363,  1364,-32768
-};
-
-static const short yypgoto[] = {-32768,
-  1365,-32768,  -276,-32768,   990,    58,     0,  1368,-32768,   311,
--32768,-32768,   315,  1048,-32768,-32768,-32768,-32768,-32768,   572,
--32768,  1226,  -598,    56,  -594,  1240,    96,-32768,-32768,-32768,
--32768,-32768,   720,-32768,-32768,-32768,-32768,-32768,-32768,   387,
-     4,-32768,-32768,-32768,  5114,    -9,    22,   -10,   920,-32768,
-   859,-32768,    90,-32768, -1232,-32768, -1277,   -44,-32768,  1705,
-  -289,  -212,-32768,  -709,  3691,   211,  1091,  3239,   -48,   222,
-   136,-32768,-32768,-32768,  -300,-32768,  -142,-32768,-32768, -1136,
-   -28,  -305,  2329,     2,   872,  -122,    46,   173,  -170,    -4,
-  -136,  -784,   202,-32768,   -66,-32768,-32768,  -201,-32768,-32768,
--32768,-32768,-32768,  -101,  2902,   -36,-32768,   603,-32768,-32768,
-  -967,  -385,   799,-32768,-32768,-32768,-32768,-32768,   -14,-32768,
--32768,-32768,-32768,-32768,   618,     3,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1216,-32768,   386,   545,-32768,-32768,-32768,
--32768,   509,  -616,-32768,-32768,-32768,-32768,-32768,-32768,   755,
--32768,   376,   873,   640,   926,  4194,     8,    10,  -379,  1268,
-  3163,  -412,     6,-32768,  4530,  -127,   171,     5,  3723,  1140,
--32768,  4271,  1650,  1780,-32768,  4014,  2468,  -186,-32768,  2035,
--32768,-32768,   239,  -824,  -695,-32768,-32768,   337,  -827,  -353,
--32768,-32768,-32768,-32768, -1193,-32768, -1079, -1247,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,    89,-32768,-32768,-32768,-32768,-32768,    98,
- -1149,-32768,-32768,-32768,   -54,-32768,-32768,-32768,-32768, -1282,
-    32,-32768,    35,-32768,  -574,  -490,   596,-32768,-32768,-32768,
--32768,  -352,-32768,  -339,  -152,-32768,   644,   342,-32768,   160,
--32768,  -294
-};
-
-
-#define        YYLAST          10566
-
-
-static const short yytable[] = {    55,
-   597,   617,   372,    36,   217,    51,   545,   364,   367,   414,
-   842,    68,   831,   598,  1016,   661,    94,   554,    96,  1017,
-    55,   195,   167,   557,   263,   108,   122,   124,   613,   646,
-    55,  1254,    68,  1354,    36,    55,    51,   128,   132,    36,
-   192,    51,    68,   431,    -1,   955,   780,    68,   180,    53,
-   886,   419,   422,   780,   457,   460,   428,   413,   913,   161,
-   579,    35,   525,   214,   525,   220,   421,  1277,   349,   350,
-   123,   525,   379,  1376,   261,   320,   856,  1136,  1137,   312,
-    53,   312,    55,   225,   679,    53,   262,   488,   322,   323,
-   448,  1157,    35,   354,    68,   312,   312,    35,   619,    44,
-  1112,  1374,   610,    81,   328,   626,   338,   319,    -2,   922,
-   809,   924,   339,  1371,  1384,   357,   340,   417,   180,   347,
-   121,   312,   351,    87,   857,  1397,   712,   858,   439,  -301,
-    44,  1292,   123,   380,   100,    44,  1429,   361,  1295,  1365,
-  1018,   448,   363,   366,    55,  1387,   195,   356,   179,   161,
-    51,   101,   699,    82,   195,  1444,    68,   680,   782,   611,
-   810,  1385,   859,   604,   696,   192,   381,   850,   140,  1420,
-   919,   397,   399,   192,   192,  1227,    54,  1113,  1394,  1352,
-   161,   635,   321,   147,  1233,  1234,   102,  1235,   914,   394,
-  -254,  1019,   186,   187,    53,   840,   533,    54,    13,   192,
-   127,  -563,  -301,   142,  1397,   644,   380,    54,  -123,  1421,
-   425,   889,    54,   650,   979,   851,  1099,   443,   852,  1125,
-   225,    20,   437,   127,   148,  1257,   749,   126,   751,   752,
-    23,  1257,   533,  1254,   145,   395,  -254,  -254,   915,   381,
-  1361,  1425,   698,  1081,    44,   890,   192,  -563,  -563,   891,
-   522,   260,  -249,   853,   139,   554,   843,   214,  1084,    54,
-   529,   800,   146,  -563,  1450,   713,  1100,   880,   438,  1126,
-   140,   140,   140,   364,   367,  1258,   419,   422,   698,   597,
-  1382,  1332,   892,   154,   419,   469,   550,   312,  1426,   681,
-  1442,   649,   863,   559,   422,   158,   386,   192,   881,   584,
-   261,   140,   780,   813,   643,   142,   142,   142,   214,  1044,
-   159,   422,   262,   387,  1451,   651,  -130,   484,    38,  1048,
-   152,    54,   545,   225,   159,  1423,     7,     8,   218,   561,
-   780,    18,   551,  1336,  1337,   689,   142,  1443,  -255,   575,
-   850,   558,   388,   347,   582,   144,   209,    83,   594,    38,
-   151,  1066,   585,  1068,    38,   595,   652,   365,   368,   211,
-   596,     8,     9,   780,    21,   109,   110,    84,   325,  1266,
-    55,   956,  1171,    14,    15,   756,   122,   124,   599,    27,
-    28,   690,    68,   195,  -255,  -255,   533,   139,   851,   770,
-   628,   852,   757,  -749,    88,    89,    90,   195,   192,   192,
-  -252,   327,   596,   219,   109,   110,   192,   772,   639,   640,
-   981,    32,   336,   111,   112,    26,   192,   111,   112,   672,
-   123,   758,  1080,  1283,    55,  1288,   853,   756,  1309,   867,
-   673,   760,   698,   192,   352,   771,    68,  1311,  1312,   435,
-  -122,   761,  -249,   913,   757,    26,    85,    91,    92,    93,
-   893,   312,   126,   773,   312,   762,   111,   112,   312,   704,
-   704,   704,   704,   597,   369,   522,    86,    85,   957,   661,
-   121,   312,  -524,   758,   674,   868,   598,   260,   312,   461,
-   462,   968,   312,   969,  1010,   436,   667,    86,   613,   721,
-    14,    15,   160,   470,  1012,  -360,   894,   554,   471,   687,
-   874,   472,   876,   557,   482,   370,    85,   882,   485,   266,
-   780,  1275,   419,   479,   312,   261,   524,  1014,  -524,   160,
-  1345,   993,    -7,   126,  -360,   593,    86,   262,  -360,   159,
-  1011,   780,   594,   448,  1062,  -134,   140,   140,   140,   628,
-  1013,   774,   776,  -558,   596,   688,  1007,    54,  -524,   378,
-   873,   596,  1402,   225,   883,     7,   342,   343,  1074,  1077,
-  1412,    85,   822,  1015,   826,   827,  1346,   593,   561,   109,
-   110,   142,   142,   142,  -360,    88,   103,   104,   918,   192,
-   390,    86,   488,  1089,    88,   103,   104,   180,   271,   815,
-  1399,   214,   391,    21,  -524,   409,   840,   432,   828,   827,
-   884,    54,   887,   888,    26,   444,    26,   788,    27,    28,
-   445,   916,   533,   192,   447,   483,   193,   194,   721,    26,
-   446,   111,   112,   365,   368,   454,   661,   594,   105,   106,
-   107,   284,  1077,   285,   192,   534,  1400,   105,   106,   596,
-    32,  1121,  1123,    83,   899,   535,  1127,  1128,     7,   342,
-   343,  -120,   699,   789,   790,   536,   816,   672,   537,   538,
-   463,  1273,    55,    84,   672,   672,   407,   408,   673,   180,
-    55,   525,   817,   464,    68,    85,   673,   479,  1398,   594,
-   479,   594,    68,  -121,   470,   471,    21,  1167,   465,   192,
-  1411,   596,   260,   596,   466,    86,   365,   709,     8,   441,
-  1415,    27,    28,   467,     7,     8,     9,   566,   479,   593,
-   109,   110,   674,   -45,    83,   564,   593,  1428,   -45,   569,
-   674,  1108,  1050,  1109,   667,  1110,  1039,  1040,  1041,   -45,
-   415,   416,   667,    32,    84,   567,  1439,  1255,  1256,     7,
-     8,     9,    21,  1222,    83,   570,    83,  1367,   533,   704,
-   111,   112,  1229,   958,  1260,    26,   571,    27,    28,  1456,
-    26,   602,   111,   112,    84,   796,    84,  1388,   898,   908,
-   583,   819,  1085,  1086,   442,  1088,    -6,    21,   704,   509,
-   510,   820,    85,  1249,   594,  1045,  1046,   605,   628,    32,
-  1261,   536,    27,    28,   821,   538,   596,   622,   774,   776,
-   596,   645,    86,   225,   593,   561,    88,    89,    90,  1176,
-   682,   594,   575,   704,  1059,   691,   594,   641,   595,   407,
-  1326,   109,   110,   596,    32,   692,   997,   998,   596,   109,
-   110,  1052,   506,   507,   508,   509,   510,  1054,  1055,    54,
-   708,  1052,  1057,   415,  1327,  1055,   710,    54,   711,   628,
-     8,     9,   929,   930,   931,   611,   593,    26,   593,    91,
-    92,   596,  1308,   704,   407,  1331,   713,   768,   769,   783,
-   312,   364,   367,   111,   112,   781,   832,     8,     9,   594,
-  1037,   111,   112,    88,    89,    90,   196,   197,   198,   594,
-   785,   596,   364,   367,   801,   802,   220,   442,   812,   811,
-   814,   596,   111,   112,   699,   219,  -310,   672,    14,    15,
-  1314,   818,    55,   829,   830,   380,   199,  -252,   673,   796,
-   833,   594,  1324,   594,    68,   847,   219,    26,   848,   834,
-   835,   849,   855,   596,  -748,   596,    91,    92,   200,   865,
-  -310,    88,    89,    90,  -310,     7,   109,   110,  1076,  1142,
-  1143,   869,  1152,  1153,   870,  1155,   140,   872,   330,   334,
-   875,   593,   674,   879,   917,   593,   836,     8,     9,   932,
-   937,   933,   934,   935,   667,   936,   964,  -310,   938,  1314,
-   939,   940,  -119,    21,   201,   202,   203,   941,   593,   140,
-   597,   142,   942,   593,    91,    92,   594,   944,    27,    28,
-   945,   470,   471,  1369,   950,   947,  1102,  1103,   596,   948,
-   109,   110,   963,   365,   709,   966,  1392,   628,  1314,   111,
-   112,  1076,   219,   949,   142,   951,   593,  1102,  1103,   596,
-    32,   952,   953,   965,   613,   109,  1154,   967,  1225,  1226,
-   972,  1132,   139,   442,   974,   973,   443,   988,   982,  1314,
-   672,   699,   980,   983,  1445,    55,   593,   985,   991,  1009,
-    26,   673,   111,   112,   994,  1027,   593,    68,  1034,  -311,
-  1049,    14,    15,   109,   110,  1024,   449,   439,    88,   103,
-   104,  1053,  1058,  1231,  1232,  1063,   450,   111,   112,    54,
-  1064,  1069,     8,     9,   119,    11,    12,  1078,   593,   624,
-   593,    13,  1070,  -311,  1071,   674,  1072,  -311,  1082,  1087,
-  1210,   442,     8,     9,  1205,  1183,    16,   667,    17,    18,
-   704,  1083,    68,    26,    20,   111,   112,  1091,  1300,  1301,
-  1302,   105,   106,    23,   140,   140,   140,  1092,   654,   760,
-  -311,  1093,    26,  1096,   111,   112,  1098,  1097,  1101,   761,
-   477,  1106,  1120,   656,  1169,   140,   140,   140,  1130,  1131,
-  1209,  1135,    26,   762,   111,   112,   387,  1139,  1161,   142,
-   142,   142,  1204,   593,   302,  1090,   302,  1162,  1172,  1282,
-  1173,  1282,  1364,  1177,  -520,   625,   448,  -520,  1178,  1179,
-   142,   142,   142,  1180,   593,   192,  1334,  1335,  1112,  1210,
-   364,   367,  1220,  1274,   180,  1228,  1210,  1244,  1245,  1246,
-  1205,    68,  1247,  1210,  1252,  1259,   302,  1205,    68,   417,
-  1268,   365,   368,   785,   591,    68,   -99,  1250,    14,    15,
-   470,   471,    54,   186,   187,  -520,  1278,  -520,  -520,    13,
-  -520,  1269,   365,  1119,  1270,     7,     8,     9,  1280,  1209,
-   621,  -520,  1293,  -520,  1316,  1317,  1209,  1321,  1310,  1323,
-   -99,  1204,    20,  1209,   -99,  1325,   591,  1338,  1204,  -520,
-  -520,    23,  1340,  -520,  1350,  1204,   504,   505,   506,   507,
-   508,   509,   510,    21,  1343,  -520,  1379,    54,  1390,  1362,
-   871,  1378,  1391,     7,     8,     9,  1393,   -99,    27,    28,
-  1410,  1406,  1422,  1417,    88,   103,   104,   572,   573,   574,
-  1424,  1210,  1357,  1404,   477,  1210,  1427,   477,  1430,  1205,
-  1431,   701,   219,    68,   262,   312,   921,    68,   923,  1380,
-    32,    21,  1433,  1436,   477,   639,   640,  1446,   594,   109,
-   110,  1357,   192,  1441,  1210,   477,    27,    28,  1205,   728,
-   596,  1453,  1448,   262,  1449,  1210,    68,   105,   106,  1205,
-  1454,  1209,  1458,  1459,     1,  1209,   607,    68,  1210,     5,
-   442,   468,  1205,  1204,   376,   750,    54,  1204,    32,   115,
-    68,   767,   -97,    54,    14,    15,   581,   995,   377,    26,
-    54,   111,   112,   909,  1209,  1107,  1366,  1357,    14,    15,
-  1210,  1348,   714,  -360,  1205,  1209,  1204,  1455,   591,   262,
-  1285,   990,    68,   846,   482,   591,   -97,  1204,  1209,  -255,
-   -97,   989,   140,   427,  1133,  1060,  1042,   975,   911,   976,
-  1204,  -360,  -360,  1156,  -255,  -255,  -360,   804,   410,  -255,
-   526,   987,     7,   342,   343,   755,   527,  1210,   530,  1291,
-  1209,  1205,  1219,   -97,  1389,  -255,  1435,   142,  1026,    68,
-  1383,  1437,  1204,   140,   140,   140,  1221,  -255,  -255,     0,
-  -255,     0,  -255,     0,     0,     0,     0,   616,   620,     0,
-    21,     0,     7,   109,   110,   620,     0,    12,    54,   260,
-   109,   110,    54,    26,   439,    27,    28,  1209,   142,   142,
-   142,  -255,  -255,   591,     0,  -255,     0,     0,  1024,  1204,
-     0,     0,     0,     0,     0,   593,     0,  -255,   260,     0,
-    21,    54,     0,   185,   186,   187,     0,   528,     0,     0,
-    13,     0,    54,    26,     0,    27,    28,     0,   470,   471,
-    26,     0,   111,   112,   620,    54,     0,     0,    18,    30,
-   365,  1119,     0,    20,     0,   591,   449,   591,     0,    31,
-   109,   110,    23,     0,    12,     0,   450,    32,  1065,     0,
-  1067,     0,    33,   302,   260,     0,   616,    54,     0,   725,
-   726,     0,   730,   731,   732,   733,   734,   735,   736,   737,
-   738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
-   748,     0,     0,   533,     0,     0,   620,     0,   620,   620,
-    26,     0,   111,   112,     7,   109,   110,     0,     0,     0,
-   961,  1095,     0,     0,    54,     0,   534,     0,     0,     0,
-     0,   511,     0,     0,   620,     0,   535,     0,     0,     0,
-     0,   620,     0,     0,     0,     0,   536,     0,     0,   537,
-   538,   477,    21,    75,     0,     0,     0,   806,   808,     0,
-   591,     0,    97,     0,   591,     0,     0,    27,    28,     0,
-   512,   513,   113,   117,    75,   514,   515,   516,   517,   130,
-   130,     0,   130,     0,    75,     0,  1134,   591,     0,    75,
-  1138,     6,   591,     7,     8,     9,    10,    11,    12,    32,
-   174,     0,    75,    13,     0,   616,     0,     0,     0,     0,
-   207,     0,     0,     0,     0,     0,     0,    97,    16,     0,
-    17,    18,     0,     0,     0,   591,    20,   227,    97,     0,
-     0,    21,     0,  1035,     0,    23,    75,  1174,   375,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,    97,     0,
-    29,     0,     0,     0,     0,   591,   885,     0,     0,     0,
-    30,     0,     0,   341,   117,   591,     0,   117,     0,     0,
-    31,   174,    97,   207,     0,     0,     0,   130,    32,     0,
-   359,   130,     0,    33,   130,   130,   130,     0,   620,     0,
-     0,     0,     7,     8,     9,     0,     0,   591,    75,   591,
-     0,     0,  1240,  1241,     0,     0,     0,     0,     0,     0,
-   943,     0,     0,   174,   174,   174,     0,     0,  1251,     0,
-     0,     0,     0,     0,     0,     0,   418,   186,   187,     0,
-    21,     0,     0,    13,     0,     0,     0,     0,     0,     0,
-     0,     0,   174,    26,     0,    27,    28,   616,   620,   163,
-     0,    18,     0,     0,   223,     0,    20,     0,     0,   164,
-     0,   620,     0,   620,    97,    23,  1296,  1297,     0,   165,
-     0,     0,   591,   130,     0,     0,   223,    32,     0,     0,
-   477,     0,   166,     0,     0,  1306,  1307,     0,     0,     0,
-     0,   986,   223,   591,     0,     0,   223,     0,     0,     0,
-     0,   620,     0,     0,     0,     0,     0,     0,     0,   223,
-     0,    97,   451,     7,     8,     9,   185,   186,   187,  1006,
-     0,     0,     0,    13,     0,     0,   620,  1163,  1164,  1165,
-  1166,     0,     0,     0,     0,     0,     0,     0,  1170,     0,
-     0,    18,     0,     0,   620,     0,    20,     0,     0,     0,
-     0,    21,     0,   223,    97,    23,     0,   533,   531,     0,
-   451,   451,   547,     0,    26,     0,    27,    28,     0,     0,
-     0,   174,   207,     0,     0,     0,     0,     0,     0,     0,
-   819,     0,     0,     0,     0,     0,   223,  1051,   117,     0,
-   820,   552,     8,     9,     0,     0,     0,   117,    32,     0,
-   536,     0,    97,   821,   538,     0,   223,     0,     0,     0,
-   616,     0,   130,     0,     0,   130,     0,     0,     0,     0,
-   130,     0,     0,     0,    75,     0,   271,   553,     0,    21,
-     0,     0,     0,     0,   616,   616,     0,     0,  1079,     0,
-     0,     0,    26,     0,   111,   112,   174,     0,   174,     0,
-   174,   174,   174,     0,     0,     0,   174,  1272,     0,     8,
-     9,   174,    11,   213,   174,     0,     0,     0,    13,     0,
-     0,     0,     0,     0,     0,     0,     0,    97,    75,     0,
-     0,     0,     0,    16,     0,    17,     0,     0,     0,     0,
-     0,    20,   618,     0,     0,     0,   223,     0,     0,   618,
-    23,   620,   533,   620,     0,   620,     0,     0,   616,    26,
-     0,   111,   112,    97,    97,    97,    97,   616,   616,     0,
-   223,     0,   616,   616,     0,   534,     0,     0,     0,     0,
-     0,  1322,     0,     0,     0,   535,     0,     0,   223,  1140,
-  1141,     7,     8,     9,     0,   536,    12,     0,   537,   538,
-     0,     0,     0,     0,     0,     0,     0,     0,   618,     0,
-     0,     0,     0,   616,     0,  1168,     0,     0,     0,    97,
-     0,   451,     0,     0,   728,  1355,     0,     0,     0,    21,
-     0,   531,     0,   451,   451,   533,   547,     0,   477,   620,
-     0,     0,    26,   797,    27,    28,     0,   799,     0,     0,
-     0,     0,     0,     0,  1355,     0,     0,     0,   819,     0,
-     0,     0,     0,     0,   591,     0,     0,     0,   820,   616,
-   618,     0,   618,   618,     0,     0,    32,     0,   536,     0,
-   223,   821,   538,     0,     0,   113,  1230,     0,     0,     0,
-   174,   797,   174,   174,   207,   547,     0,     0,   618,     0,
-     0,     0,     0,     0,     0,   618,     0,     0,  1416,   616,
-  1355,   495,   496,   497,   498,   499,   500,   501,   502,   503,
-   504,   505,   506,   507,   508,   509,   510,   174,     0,     0,
-     0,   797,  1434,     0,     0,  1267,     0,     0,   174,   174,
-     0,   174,     0,     0,     0,     0,   728,     0,   109,   110,
-     0,   186,   187,     0,     0,   877,     0,    13,     8,     9,
-   223,    11,    12,   117,     0,     0,    75,    13,  1298,  1299,
-     0,     0,   906,    75,    75,     0,   223,  1304,     0,     0,
-    20,     0,    16,    97,    17,    97,     0,     0,   616,    23,
-    20,   533,   451,   451,   451,   542,   546,   549,    26,    23,
-   111,   112,     0,   451,     0,     0,     0,     0,    26,     0,
-   111,   112,   518,     0,   534,     0,     7,     8,     9,     0,
-     0,   213,     0,     0,   535,     0,     0,   620,     0,     0,
-     0,     0,     0,     0,   536,     0,     0,   544,   538,     0,
-     0,     0,     0,     0,     0,     0,     0,   519,     0,     0,
-     0,     0,   618,    97,    21,     0,     0,     0,  1359,     0,
-   533,     0,   310,     0,   310,     0,     0,    26,     0,    27,
-    28,     0,     0,   451,     0,   451,     0,     0,   333,   335,
-     0,     0,    97,   819,     0,     0,   451,     0,    97,     0,
-   797,   797,   797,   820,     0,     0,     0,   984,     0,     0,
-     0,    32,     0,   536,   310,     0,   821,   538,     0,     0,
-     0,     0,   618,     0,     0,    97,     0,    97,   174,   174,
-  1003,    78,     7,     8,     9,   618,     0,   618,     0,     0,
-    99,   502,   503,   504,   505,   506,   507,   508,   509,   510,
-   114,   118,    78,     0,     7,     8,     9,   131,   131,    12,
-   131,     0,    78,  1003,     0,     0,     0,    78,     0,     0,
-    21,     0,     0,     0,     0,   618,     0,    97,   131,     0,
-    78,     0,     0,    26,     0,    27,    28,  1038,     0,  1281,
-   616,    97,    21,    97,     0,   215,     0,     0,   533,   164,
-   618,     0,     0,    97,     0,    26,   215,    27,    28,   165,
-     0,     0,     0,     0,    78,     0,  1056,    32,   618,     0,
-     0,   999,   166,     0,     0,     0,    75,     0,   775,   777,
-     0,  1000,     0,     0,     0,    97,   223,    97,   223,    32,
-     0,   536,   348,     0,  1001,   538,     0,     0,     0,   131,
-   215,     0,     0,     0,     0,   131,     0,     0,     0,   131,
-     0,     0,   131,   131,   131,     0,     0,     0,   451,   451,
-     0,   451,     0,     7,     8,     9,    78,     0,   439,     0,
-   481,     0,     0,     0,     0,   824,     0,   542,   546,     0,
-   549,   131,   131,   131,   499,   500,   501,   502,   503,   504,
-   505,   506,   507,   508,   509,   510,   174,   174,   174,   174,
-  1003,    21,     0,     0,   174,     0,   223,   533,     0,     0,
-   131,     0,   546,     0,    26,     0,    27,    28,     0,  1003,
-  1003,  1003,     7,   109,   110,     0,     0,   213,     0,     0,
-   819,   590,     0,     0,     0,   223,     0,     0,    97,     0,
-   820,   131,     8,     9,     0,    11,    12,     0,    32,     0,
-   536,    13,   174,   821,   538,     0,     0,   130,     0,    75,
-    21,     0,     0,     0,     0,   618,    16,   618,    17,   618,
-     0,     0,     0,    26,    20,    27,    28,     0,     0,   215,
-   131,     0,     0,    23,     0,     0,     0,     0,   546,    30,
-     0,     0,    26,     0,   111,   112,     0,     0,     0,    31,
-     0,   174,   174,     0,   174,     0,     0,    32,     0,     0,
-     0,     0,    33,   223,     0,     0,     0,     0,     0,     0,
-     0,     0,   215,     0,    97,     0,   532,     0,   131,   131,
-   548,   754,   223,     0,   697,   556,     0,   700,     0,   131,
-     0,   702,   703,   705,   706,   707,     0,     0,     0,     0,
-     0,     0,     0,   618,   481,     0,   348,     0,   970,     0,
-   971,   310,     0,     0,     0,   724,     0,   223,     0,     0,
-   215,   977,     7,   109,   110,   775,   777,    12,     0,     0,
-   131,     0,     0,   131,     0,   223,     0,     0,   131,     0,
-     0,     0,    78,     0,     0,     0,     0,   753,     0,     0,
-     0,     0,     0,   775,   777,     0,     0,   174,   797,   174,
-    21,     0,     0,     0,   131,   778,   131,     0,   131,   131,
-   131,     0,   778,    26,   131,    27,    28,     0,     0,   131,
-     0,     0,   131,     0,     0,     0,     0,     0,     0,   135,
-     0,     0,     0,     0,     0,   215,    78,     0,     0,   136,
-     0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
-     0,     0,   137,     7,     8,     9,     0,     0,    12,     0,
-     8,     9,   119,    11,    12,     0,     0,   624,     0,    13,
-     0,   215,   215,   215,   215,     0,  1003,     0,     0,     0,
-     0,     0,     0,     0,    16,     0,    17,    18,     0,     0,
-     0,    21,    20,     0,   183,     0,   191,     0,     0,     0,
-   590,    23,     0,   533,    26,     0,    27,    28,     0,     0,
-    26,     0,   111,   112,     0,     0,     0,  1003,  1003,  1003,
-   164,     0,     0,     0,     0,     0,   534,   215,     0,   131,
-   165,   618,    97,     0,     0,     0,   535,     0,    32,     0,
-     0,   131,   131,   166,   548,     0,   536,   174,     0,   537,
-   538,   798,     0,   625,     0,     0,     8,     9,   176,    11,
-   177,     0,     0,   556,   183,    13,     0,     0,     0,     0,
-     0,   970,   971,   775,   777,     0,     0,     0,     0,   977,
-    16,     0,    17,    18,     0,     0,     0,     0,    20,     0,
-     0,     0,     0,   114,   775,   777,     0,    23,   131,   548,
-   131,   131,     0,   548,     0,     0,    26,     0,   111,   112,
-     0,     0,     8,     9,   653,   215,     8,     9,   119,    11,
-    12,   191,   954,  1368,     0,    13,     0,     0,     0,   420,
-   191,     0,     0,     0,     0,   131,     0,     0,   654,   548,
-    16,     0,    17,    18,     0,   655,   131,   131,    20,   131,
-     0,   724,     0,   656,     7,   109,   110,    23,   434,   439,
-     0,   778,    26,   878,   111,   112,    26,     0,   111,   112,
-     0,   118,     0,     0,    78,     0,   970,   971,     0,   977,
-   907,    78,    78,     0,   590,     0,   996,     0,     0,   778,
-     0,   215,    21,   215,     0,     0,     0,     0,     0,     0,
-   131,   131,   131,     0,     0,    26,     0,    27,    28,     0,
-     0,   131,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    30,   778,     0,     0,     7,     8,     9,   119,    11,
-    12,    31,     0,   624,     0,    13,  1029,     0,     0,    32,
-     0,     0,     0,  1036,    33,     0,     0,     0,     0,     0,
-    16,     0,    17,    18,     0,     0,     0,     0,    20,     0,
-     0,   215,     0,    21,     0,     0,     0,    23,     0,   533,
-     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
-     0,   131,    49,   131,     0,     0,     0,     0,     0,     0,
-   215,     0,   999,     0,   131,     0,   215,     0,   798,   798,
-   798,     0,  1000,    49,     0,   556,     0,     0,    49,    49,
-    32,   138,   536,    49,     0,  1001,   538,     0,    49,   625,
-     0,     0,     0,   215,     0,   215,   131,   131,   548,    49,
-     0,    49,     7,     8,     9,     0,     0,   213,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   434,     0,     0,
-     0,     0,     0,   221,   420,   191,     0,     0,   434,     0,
-     0,   798,   420,     0,     0,    49,   398,   400,   404,   778,
-    21,     0,     0,     0,     0,   215,     0,     0,   895,   896,
-     9,     0,     0,    26,     0,    27,    28,     0,     0,   215,
-   778,   215,     0,   345,     0,   345,   345,     0,     0,   164,
-    49,   215,     0,     0,     0,     0,    49,     0,   221,   165,
-    49,     0,     0,   138,   138,   138,    21,    32,     0,     0,
-     0,     0,   166,     0,    78,     0,     0,    49,     0,    26,
-     0,    27,    28,   215,     0,   215,     0,   897,     0,     0,
-     0,     0,    49,    49,   138,   164,     7,     8,     9,   185,
-   186,   187,   221,     0,     0,   165,    13,     0,     0,     0,
-     0,     0,     0,    32,     0,     0,   131,   131,   166,   131,
-     0,    49,   109,   110,    18,     0,   213,     0,     0,    20,
-     0,     0,     0,     0,    21,     0,     0,     0,    23,     0,
-   533,     0,     0,  1029,     0,     0,     0,    26,     0,    27,
-    28,     0,    49,     0,   131,   131,   131,   131,   548,     0,
-     0,     0,   131,   164,     0,   533,   215,     0,     0,     0,
-     0,     0,    26,   165,   111,   112,     0,   798,   798,   798,
-     0,    32,     0,   183,     0,   191,  1287,     0,   534,     0,
-     0,     0,     0,     0,     0,     0,   215,     0,   535,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   536,     0,
-   131,   537,   538,     0,     0,   131,     0,    78,     0,   191,
-   478,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     7,     8,     9,     0,     0,    12,     0,   345,     0,     0,
-   420,     0,     0,   434,     0,   221,     0,     0,     0,   637,
-    49,   638,     0,   398,   400,   404,     0,     0,     0,   131,
-   131,     0,   131,     0,   648,   183,     0,   345,    21,     0,
-     0,   434,     0,     0,     0,     0,   345,     0,     0,     0,
-     0,    26,   215,    27,    28,     0,     0,     0,     0,     0,
-     0,    49,     0,     0,    49,     0,     0,   401,     0,    49,
-     0,     0,     0,    49,     0,     0,     0,   402,     0,  -332,
-     8,     9,  -332,    11,   213,    32,     0,     0,     0,    13,
-   403,     7,     8,     9,     0,    49,   439,    49,     0,   138,
-   138,   138,     0,     0,    16,    49,    17,  -332,     0,     0,
-    49,     0,    20,    49,     0,     0,     0,  -332,   481,     0,
-     0,    23,     0,   533,     0,     0,     0,    49,     0,    21,
-    26,   590,   111,   112,     0,   131,   548,   131,     0,     0,
-     0,     0,    26,     0,    27,    28,   534,     0,     0,  1144,
-  1145,     9,     0,     0,   478,     0,   535,   478,   164,     0,
-     0,     0,     0,     0,  -332,     0,   536,     0,   165,   537,
-   538,     0,   478,   478,   478,     0,    32,     0,     0,     0,
-     0,   166,     0,     0,     0,   478,    73,    21,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    26,     0,    27,    28,     0,     0,     0,    73,  1146,     0,
-     0,     0,    73,    73,   798,    73,   164,    73,     0,     0,
-     0,     0,    73,     0,     0,     0,   165,     0,     0,   221,
-     7,   109,   110,    73,    32,    73,     0,     0,     0,   166,
-     0,     0,   478,     0,     0,     0,     0,     0,   434,   434,
-     0,     0,     0,     0,     0,   798,   798,   798,     0,     0,
-     0,   637,   638,     0,   648,     0,     0,     0,    21,    73,
-   215,     0,     0,     0,     0,     0,     0,   434,     0,     0,
-     0,    26,     0,    27,    28,   131,     0,     0,     0,    49,
-    49,    49,    49,     0,     0,   904,     0,   135,     0,     0,
-     0,     0,   109,   110,    73,   186,   187,   136,   109,   110,
-    73,    13,   439,     0,    73,    32,     0,    73,    73,    73,
-   137,     0,     0,     0,     0,     0,    49,     0,     0,     0,
-    49,    73,     0,     0,    20,     0,     0,    49,    49,     0,
-    49,     0,     0,    23,     0,   533,    73,    73,    73,     0,
-     0,   533,    26,     0,   111,   112,     0,     0,    26,     0,
-   111,   112,     0,     0,     0,    49,     0,     0,   534,     0,
-     0,    49,    49,    49,   534,    73,     0,     0,   535,     0,
-     0,  1144,   109,   110,   535,     0,     0,     0,   536,     0,
-     0,   537,   538,     0,   536,     0,   478,   537,   538,     0,
-     0,     0,     0,     0,     0,     0,    73,     0,     0,     0,
-     0,     0,   434,   434,     0,   434,   434,     0,   434,    21,
-     0,     0,     0,     0,   662,     0,     7,     8,   663,   119,
-    11,    12,    26,     0,    27,    28,    13,     0,     0,     0,
-  1146,   398,   400,   404,     0,     0,     0,     0,    30,     0,
-     0,    16,     0,    17,    18,    19,     0,     0,    31,    20,
-  -469,   539,   539,   539,    21,     0,    32,     0,    23,   664,
-     0,    33,     0,     0,     0,     0,   404,    26,     0,    27,
-    28,     0,     0,   665,     0,   666,     0,     0,     0,   478,
-   478,   478,     0,    30,     0,   221,     0,     0,     0,     0,
-   555,   434,   434,    31,    73,     0,   143,     0,     0,     0,
-     0,    32,     0,     7,     8,     9,    33,    49,    49,   138,
-     0,     0,     0,     0,   175,     0,     0,     0,     0,     0,
-     0,     0,     0,  -469,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    73,     0,     0,    73,     0,
-     0,    21,  1023,    73,     0,     0,     0,    73,     0,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-   183,   191,     0,     0,     0,     0,     0,     0,     0,    73,
-   164,    73,     0,    73,    73,    73,     0,     0,     0,    73,
-   165,   434,   434,   434,    73,   175,     0,    73,    32,     0,
-     0,     0,     0,   166,   221,     0,     0,     0,   143,   143,
-   143,    73,     0,     0,     0,    49,     0,     0,     0,   637,
-   638,   398,   400,   404,     0,     0,     0,   648,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   175,   175,   405,
-     0,     0,   398,   400,   404,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     7,     8,     9,     0,   434,
-   434,     0,     0,     0,     0,     0,   175,     0,     0,     0,
-     0,     0,     0,     0,     0,  1150,     0,     0,     0,     0,
-     0,     0,   221,     0,   539,   539,     0,   539,     0,     0,
-     0,     0,     0,    21,   795,    49,    49,   138,   138,   138,
-     0,   221,     0,    49,     0,     0,    26,     0,    27,    28,
-     0,     0,     0,     0,   555,     0,     0,     0,  1023,  1023,
-  1023,     0,   401,     0,   637,   638,     0,   648,     0,     0,
-   224,     0,   402,     0,     0,     0,   452,     0,     0,     0,
-    32,   539,     0,   539,   539,   403,   539,     0,     0,     0,
-     0,    49,     0,     0,     0,     0,    49,     0,    49,     0,
-     0,     0,     0,     0,     0,   434,     0,     0,     0,     0,
-     0,     0,     0,    73,    73,    73,    73,     0,   539,     0,
-     0,   173,     0,     0,   541,   541,   541,     0,     0,     0,
-   841,     0,     0,     0,     0,   175,   371,     0,     0,     0,
-    49,    49,     0,    49,     0,   222,     0,     0,   226,     0,
-    73,     0,     0,     0,    73,   396,     0,     0,     0,     0,
-     0,    73,    73,     0,    73,     0,     0,   222,   412,   329,
-     0,     0,     0,     0,     0,     0,     0,     8,     9,   119,
-    11,    12,     0,     0,     0,     0,    13,     0,     0,    73,
-     0,     0,   173,     0,   539,    73,    73,    73,     0,     0,
-     0,    16,     0,    17,    18,     0,     0,     0,     0,    20,
-   175,     0,   175,     0,   405,   405,   405,     0,   586,     0,
-   175,     0,     0,     0,     0,   175,     0,    26,   175,   111,
-   112,     0,     0,     0,   173,   173,   173,     0,     0,     0,
-     0,     0,     0,     0,   411,     0,    49,    49,    49,   404,
-     0,     0,     8,     9,     0,    11,   213,     0,     0,     0,
-     0,    13,     0,   173,   539,     0,   539,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   539,    17,     0,
-     0,   795,   795,   795,    20,   226,     0,     0,     0,     0,
-   398,   400,   404,    23,     0,     0,     0,   222,     0,     0,
-     0,     0,    26,     0,   111,   112,     0,     0,     0,   539,
-   539,   539,     0,     0,     0,     0,     0,     0,     0,     0,
-   555,     0,     0,     0,     0,  1023,     0,     0,     0,     0,
-     0,     0,     0,    71,     0,   763,     0,     0,     0,     0,
-     0,    73,    73,    73,   795,     0,     0,   541,   541,     0,
-   541,     0,     0,     0,   125,     0,     0,   541,     0,   129,
-   133,     0,     0,     0,    71,     0,  1023,  1023,  1023,    71,
-     0,     0,     0,     0,     0,     0,  1025,     0,     0,     0,
-     0,     0,   184,     0,     0,     0,     0,   222,   226,     0,
-     0,     0,   173,     0,     0,     0,    49,     0,   642,     0,
-     0,     0,     0,   647,   823,     0,   823,   823,     0,   541,
-     0,     0,     0,     0,     0,     0,   324,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   683,     0,
-   685,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-     0,   823,   693,   694,     0,   695,     0,     0,     0,     0,
-     0,     0,   175,   175,     0,   175,     0,   358,     0,     0,
-     0,   360,     0,     0,     0,     0,     0,   173,     0,   173,
-     0,   173,   173,   173,     0,     0,     0,   173,    71,     0,
-     0,     0,   173,     0,     0,   173,   175,   539,   539,   539,
-   539,   539,     0,   129,   133,   539,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   452,   452,   452,     0,
-   795,   795,   795,     0,     0,     0,     0,   541,     0,    73,
-    73,    73,    73,    73,     0,     0,     0,    73,     0,     0,
-     0,   841,     0,   786,   787,     0,     0,     0,   786,     0,
-     0,     0,  1025,  1025,  1025,     0,     0,     0,     0,     0,
-     0,     0,     0,   440,   498,   499,   500,   501,   502,   503,
-   504,   505,   506,   507,   508,   509,   510,   662,     0,     7,
-     8,   663,   119,    11,    12,    73,     0,     0,     0,    13,
-    73,     0,    73,     0,     0,     0,     0,   541,     0,   541,
-     0,     0,   539,   539,    16,   539,    17,    18,    19,     0,
-   541,     0,    20,  -470,   541,   541,   541,    21,     0,     0,
-     0,    23,   664,     0,     0,     0,     0,   222,   226,     0,
-    26,     0,    27,    28,    73,    73,   665,    73,   666,     0,
-     0,     0,   823,   823,  1004,     0,    30,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    31,     0,     0,     8,
-     9,     0,    11,    12,    32,     0,     0,     0,    13,    33,
-     0,   173,     0,   173,   173,     0,     0,  1004,     0,     0,
-     0,     0,     0,    16,     0,    17,  -470,     0,     0,     0,
-   925,    20,   927,     0,     0,     0,     0,     0,     0,     0,
-    23,     0,   600,     0,     0,   601,     0,     0,   173,    26,
-   603,   111,   112,     0,   125,     0,     0,     0,     0,   173,
-   173,     0,   173,     0,     0,   662,     0,     7,     8,   663,
-   119,    11,    12,     0,     0,     0,   358,    13,   360,     0,
-    73,    73,    73,     0,     0,     0,     0,     0,     0,     0,
-     0,   440,    16,   173,    17,    18,    19,     0,     0,     0,
-    20,  -472,     0,   959,   960,    21,   962,     0,   678,    23,
-   664,     0,     0,     0,     0,     0,     0,     0,    26,     0,
-    27,    28,   763,   763,   665,   763,   666,     0,     0,     0,
-     0,   978,     0,     0,    30,     0,     0,     7,     8,     9,
-   185,   186,   187,     0,    31,     0,     0,    13,     0,     0,
-     0,     0,    32,     0,     0,     0,     0,    33,     0,  1025,
-   823,   823,  1004,  1004,  1004,    18,  1005,     0,   823,     0,
-    20,     0,     0,     0,  -472,    21,     0,     0,     0,    23,
-     0,   533,     0,  1004,  1004,  1004,     0,     0,    26,     0,
-    27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-  1025,  1025,  1025,     0,   819,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   820,     0,   175,   222,   226,   222,
-     0,     0,    32,     0,   536,     0,  1043,   854,   538,     0,
-    73,     0,     0,     0,     0,     0,  1047,     0,     0,   173,
-   173,  1002,     0,     0,     0,     0,     0,     0,     0,     0,
-     7,     8,     9,   176,    11,   177,     0,     0,     0,     0,
-    13,     0,     0,     0,     0,   823,   823,     0,   823,     0,
-     0,   825,     0,     0,  1002,    16,    95,    17,    18,     0,
-     0,     0,     0,    20,     0,     0,    95,    95,    21,     0,
-     0,     0,    23,    95,    95,     0,    95,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,   178,     0,     0,
-     0,   861,     0,     0,     0,     0,  1094,    30,   600,   601,
-     0,   603,     0,     0,   206,     0,   411,    31,     0,     0,
-     0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-    33,     0,     0,     0,     0,     0,   678,  1105,     0,     0,
-     0,     0,   905,   912,   678,   496,   497,   498,   499,   500,
-   501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
-     0,   175,     0,   175,     0,     0,    95,    95,    95,     0,
-    95,    95,     0,     0,     0,     0,     0,   355,     0,     0,
-     0,    95,     0,    95,    95,    95,     0,     0,    95,    95,
-    95,     0,     0,     0,   222,     0,  1159,  1160,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   173,   173,   173,
-   173,  1002,     0,  1104,     0,   173,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1175,
-  1002,  1002,  1002,     0,     0,     0,     0,     0,     0,     0,
-   405,   493,   494,   495,   496,   497,   498,   499,   500,   501,
-   502,   503,   504,   505,   506,   507,   508,   509,   510,     0,
-   426,     0,     0,   173,     0,     0,     0,     0,  1223,     0,
-     0,     0,  1224,     0,     0,     0,     0,    95,     0,     0,
-     0,   405,   405,   405,     0,     0,     0,     0,   129,   133,
-     0,     0,     0,     0,  1242,  1243,   497,   498,   499,   500,
-   501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
-     0,   175,   173,   173,     0,   173,    95,     0,     0,   623,
-     0,     7,     8,     9,   119,    11,   264,   265,   266,   624,
-   267,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   268,    17,    18,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,    95,    23,    95,    95,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,   560,     0,     0,   281,
-     0,     0,     0,     0,     0,   282,   678,     0,   283,     0,
-     0,     0,    95,     0,    95,     0,   286,   287,   288,     0,
-     0,    95,     0,     0,   289,   290,   291,     0,     0,     0,
-     0,   292,    95,     0,     0,   625,    95,     0,   173,    95,
-   173,     0,     0,     0,    95,     0,     0,  -716,     0,   293,
-     0,     0,     0,   662,     0,     7,     8,   663,   119,    11,
-    12,     0,     0,     0,     0,    13,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,     0,    17,    18,    19,     0,   358,   360,    20,  -471,
-     0,     0,     0,    21,   440,     0,     0,    23,   664,     0,
-     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
-     0,     0,   665,  1318,   666,     0,     0,  1002,     0,     0,
-     0,     0,    30,     0,    95,     0,     0,     0,     0,     0,
-     0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
-    32,     0,  1151,     0,     0,    33,     0,  1151,     0,   678,
-     0,     0,     0,     0,     0,     0,     0,     0,  1002,  1002,
-  1002,     0,  -471,     0,  1319,   489,   490,   491,   492,   493,
-   494,   495,   496,   497,   498,   499,   500,   501,   502,   503,
-   504,   505,   506,   507,   508,   509,   510,     0,   173,     0,
-     0,   600,   601,     0,   603,    95,     0,     0,     0,     0,
-     0,     0,     0,     0,    95,    95,     0,    95,    95,     0,
-     0,     0,     0,     0,  1236,     0,  -427,  -427,  -427,  -427,
-  -427,  -427,     0,     0,  -427,     0,  -427,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  -427,     0,  -427,
-  -427,     0,     0,     0,  -427,     0,     0,     0,     0,  -427,
-     0,     0,     0,     0,  -427,     0,     0,     0,  -427,    95,
-  -427,     0,     0,     0,     0,     0,     0,  -427,   206,  -427,
-  -427,  -427,  -427,  -427,     0,  -427,  -427,  -427,  -427,  -427,
-  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  1286,  -427,
-  -427,  -427,     0,  -427,  -427,  -427,  -427,  -427,  -427,    18,
-  -427,  -427,     0,     0,     0,     0,  1237,     0,     0,     0,
-     0,  -427,  -427,  -427,     0,  -427,     0,     0,     0,    95,
-     0,     0,     0,     0,     0,     0,     0,    95,     0,     0,
-     0,   489,   490,   491,   492,   493,   494,   495,   496,   497,
-   498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
-   508,   509,   510,     0,     0,     0,    95,    95,    95,     0,
-     0,     0,     0,     0,     0,     0,  1289,    95,  1187,  1188,
-  1189,   119,    11,   264,   265,   266,     0,   267,    13,  1190,
-     0,  1191,  1192,  1193,  1194,  1195,  1196,  1197,  1198,  1199,
-  1200,    14,    15,    16,   268,    17,    18,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,  1201,    28,   611,     0,  1202,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,    95,     0,    95,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-    95,   289,   290,   291,     0,     0,     0,     0,   292,     0,
-  1203,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  1290,   293,  1186,     0,  1187,
-  1188,  1189,   119,    11,   264,   265,   266,     0,   267,    13,
-  1190,     0,  1191,  1192,  1193,  1194,  1195,  1196,  1197,  1198,
-  1199,  1200,    14,    15,    16,   268,    17,    18,    19,     0,
-   269,   270,    20,     0,   271,   272,   273,    21,   274,   275,
-     0,    23,     0,     0,     0,   276,   277,   278,   279,   280,
-    26,     0,  1201,    28,   611,     0,  1202,   281,     0,     0,
-    95,    95,     0,   282,     0,     0,   283,     0,     0,     0,
-     0,     0,     0,     0,   286,   287,   288,     0,     0,     0,
-     0,     0,   289,   290,   291,     0,     0,     0,     0,   292,
-    95,  1203,     0,     0,     0,   489,   490,   491,   492,   493,
-   494,   495,   496,   497,   498,   499,   500,   293,   502,   503,
-   504,   505,   506,   507,   508,   509,   510,     0,     0,   473,
-     0,     7,     8,     9,   119,    11,   264,   265,   266,   624,
-   267,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    95,    95,     0,    95,    16,   268,    17,    18,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,     0,    23,     0,   533,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,  -263,     0,     0,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   791,     0,
-     0,     0,     0,     0,     0,     0,   286,   287,   792,     0,
-     0,     0,     0,     0,   289,   290,   291,     0,   536,     0,
-     0,   793,   538,     0,     0,   625,     0,     0,     0,     0,
-     0,    95,     0,     0,     0,     0,     0,     0,     0,   293,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    95,
-   473,    95,     7,     8,     9,   119,    11,   264,   265,   266,
-   624,   267,    13,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   268,    17,
-    18,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,   533,     0,   276,   277,
-   278,   279,   280,    26,     0,    27,    28,  -263,     0,     0,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,  1020,
-     0,     0,     0,     0,     0,     0,     0,   286,   287,  1021,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,   536,
-     0,     0,  1022,   538,     0,   727,   625,     7,     8,     9,
-   119,    11,   264,   265,   266,     0,   267,    13,     0,     0,
-   293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   268,    17,    18,    19,     0,   269,   270,
-    20,     0,   271,   272,   273,    21,   274,   275,     0,    23,
-     0,     0,     0,   276,   277,   278,   279,   280,    26,     0,
-    27,    28,  1351,     0,  -706,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,   283,     0,     0,     0,     0,     0,
-     0,     0,   286,   287,   288,     0,     0,     0,     0,     0,
-   289,   290,   291,     0,     0,     0,   614,   292,   715,   716,
-   717,     0,    11,   455,   265,   266,     0,   267,    13,     0,
-     0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
-     0,     0,     0,    16,   268,    17,     0,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,   718,   719,   615,     0,     0,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     0,     0,     0,   292,   720,
-   614,     0,   715,   716,   717,     0,    11,   455,   265,   266,
-     0,   267,    13,     0,     0,   845,   293,     0,     0,  1075,
-     0,     0,     0,     0,     0,     0,     0,    16,   268,    17,
-     0,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,     0,     0,   276,   277,
-   278,   279,   280,    26,     0,   718,   719,   615,     0,     0,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,   283,
-     0,     0,     0,     0,     0,     0,     0,   286,   287,   288,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,     0,
-     0,     0,   292,   614,     0,   715,   716,   717,     0,    11,
-   455,   265,   266,     0,   267,    13,     0,     0,     0,  -431,
-   293,     0,  1075,     0,     0,     0,     0,     0,     0,     0,
-    16,   268,    17,     0,    19,     0,   269,   270,    20,     0,
-   271,   272,   273,    21,   274,   275,     0,    23,     0,     0,
-     0,   276,   277,   278,   279,   280,    26,     0,   718,   719,
-   615,     0,     0,   281,     0,     0,     0,     0,     0,   282,
-     0,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-   286,   287,   288,     0,     0,     0,     0,     0,   289,   290,
-   291,     0,     0,     0,   614,   292,   715,   716,   717,     0,
-    11,   455,   265,   266,     0,   267,    13,     0,     0,     0,
-     0,     0,  1118,   293,     0,     0,     0,     0,     0,     0,
-     0,    16,   268,    17,     0,    19,     0,   269,   270,    20,
-     0,   271,   272,   273,    21,   274,   275,     0,    23,     0,
-     0,     0,   276,   277,   278,   279,   280,    26,     0,   718,
-   719,   615,     0,     0,   281,     0,     0,     0,     0,     0,
-   282,     0,     0,   283,     0,     0,     0,     0,     0,     0,
-     0,   286,   287,   288,     0,     0,     0,     0,     0,   289,
-   290,   291,     0,     0,     0,     0,   292,   720,   614,     0,
-     7,     8,     9,     0,    11,   455,   265,   266,     0,   267,
-    13,     0,     0,     0,   293,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    16,   268,    17,     0,    19,
-     0,   269,   270,    20,     0,   271,   272,   273,    21,   274,
-   275,     0,    23,     0,     0,     0,   276,   277,   278,   279,
-   280,    26,     0,    27,    28,   615,     0,     0,   281,   228,
-     0,     0,     8,     9,   282,    11,    12,   283,     0,     0,
-     0,    13,     0,     0,     0,   286,   287,   288,     0,     0,
-     0,     0,     0,   289,   290,   291,    16,     0,    17,     0,
-   292,     0,     0,     0,    20,     0,   229,   230,     0,  1122,
-     0,     0,     0,    23,     0,   231,     0,     0,   293,     0,
-     0,     0,    26,     0,   111,   112,     0,   232,     0,     0,
-     0,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-   242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-   252,   253,     0,     0,   254,   255,   256,     0,     0,   257,
-     0,   473,   258,     7,     8,     9,     0,    11,   264,   265,
-   266,     0,   267,    13,     0,     0,     0,     0,     0,   259,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   268,
-    17,     0,    19,     0,   269,   270,    20,     0,   271,   272,
-   273,    21,   274,   275,     0,    23,     0,     0,     0,   276,
-   277,   278,   279,   280,    26,     0,    27,    28,  -263,     0,
-     0,   281,     0,     0,     0,     0,     0,   282,     0,     0,
-   474,     0,     0,     0,     0,     0,     0,     0,   286,   287,
-   475,     0,     0,     0,     0,     0,   289,   290,   291,     0,
-     0,     0,   614,   476,     7,     8,     9,     0,    11,   455,
-   265,   266,     0,   267,    13,     0,     0,     0,     0,     0,
-     0,   293,     0,     0,     0,     0,     0,     0,     0,    16,
-   268,    17,     0,    19,     0,   269,   270,    20,     0,   271,
-   272,   273,    21,   274,   275,     0,    23,     0,     0,     0,
-   276,   277,   278,   279,   280,    26,     0,    27,    28,   615,
-     0,     0,   281,     0,     0,     0,     0,     0,   282,     0,
-     0,   283,     0,     0,     0,     0,     0,     0,     0,   286,
-   287,   288,     0,     0,     0,     0,     0,   289,   290,   291,
-     0,     0,     0,   727,   292,     7,     8,     9,     0,    11,
-   455,   265,   266,     0,   267,    13,     0,     0,     0,     0,
-     0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
-    16,   268,    17,     0,    19,     0,   269,   270,    20,     0,
-   271,   272,   273,    21,   274,   275,     0,    23,     0,     0,
-     0,   276,   277,   278,   279,   280,    26,     0,    27,    28,
-     0,     0,     0,   281,  -706,     0,     0,     0,     0,   282,
-     0,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-   286,   287,   288,     0,     0,     0,     0,     0,   289,   290,
-   291,     0,     0,     0,   473,   292,     7,     8,     9,     0,
-    11,   264,   265,   266,     0,   267,    13,     0,     0,     0,
-     0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
-     0,    16,   268,    17,     0,    19,     0,   269,   270,    20,
-     0,   271,   272,   273,    21,   274,   275,     0,    23,     0,
-     0,     0,   276,   277,   278,   279,   280,    26,     0,    27,
-    28,  -263,     0,     0,   281,     0,     0,     0,     0,     0,
-   282,     0,     0,  1328,     0,     0,     0,     0,     0,     0,
-     0,   286,   287,  1329,     0,     0,     0,     0,     0,   289,
-   290,   291,     0,     0,     0,  1418,  1330,     7,     8,     9,
-     0,    11,   264,   265,   266,     0,   267,    13,     0,     0,
-     0,     0,     0,     0,   293,     0,     0,     0,     0,     0,
-     0,     0,    16,   268,    17,     0,    19,     0,   269,   270,
-    20,     0,   271,   272,   273,    21,   274,   275,     0,    23,
-     0,     0,     0,   276,   277,   278,   279,   280,    26,     0,
-    27,    28,     0,     0,  -162,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,   283,     0,     0,     0,     0,     0,
-     0,     0,   286,   287,   288,     0,     0,     0,     0,     0,
-   289,   290,   291,     0,     0,     0,   727,   292,     7,     8,
-     9,     0,    11,   455,   265,   266,     0,   267,    13,     0,
-     0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
-     0,     0,     0,    16,   268,    17,     0,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,    27,    28,     0,     0,     0,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     0,     0,   805,   292,     7,
-     8,     9,     0,    11,   455,   265,   266,     0,   267,    13,
-     0,     0,     0,     0,  -706,     0,   293,     0,     0,     0,
-     0,     0,     0,     0,    16,   268,    17,     0,    19,     0,
-   269,   270,    20,     0,   271,   272,   273,    21,   274,   275,
-     0,    23,     0,     0,     0,   276,   277,   278,   279,   280,
-    26,     0,    27,    28,     0,     0,     0,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,   283,     0,     0,     0,
-     0,     0,     0,     0,   286,   287,   288,     0,     0,     0,
-     0,     0,   289,   290,   291,     0,     0,     0,   807,   292,
-     7,     8,     9,     0,    11,   455,   265,   266,     0,   267,
-    13,     0,     0,     0,     0,     0,     0,   293,     0,     0,
-     0,     0,     0,     0,     0,    16,   268,    17,     0,    19,
-     0,   269,   270,    20,     0,   271,   272,   273,    21,   274,
-   275,     0,    23,     0,     0,     0,   276,   277,   278,   279,
-   280,    26,     0,    27,    28,     0,     0,     0,   281,     0,
-     0,     0,     0,     0,   282,     0,     0,   283,     0,     0,
-     0,     0,     0,     0,     0,   286,   287,   288,     0,     0,
-     0,     0,     0,   289,   290,   291,     0,     0,     0,  1303,
-   292,     7,     8,     9,     0,    11,   455,   265,   266,     0,
-   267,    13,     0,     0,     0,     0,     0,     0,   293,     0,
-     0,     0,     0,     0,     0,     0,    16,   268,    17,     0,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,     0,    23,     0,     0,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,     0,     0,     0,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   283,     0,
-     0,     0,     0,     0,     0,     0,   286,   287,   288,     0,
-     0,     0,     0,     0,   289,   290,   291,     0,     7,     8,
-     9,   292,    11,   455,   265,   266,     0,   267,    13,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   293,
-     0,     0,     0,    16,   268,    17,     0,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,    27,    28,     0,     0,     0,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     0,     0,     0,   292,   494,
-   495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
-   505,   506,   507,   508,   509,   510,   293,   766,  1187,  1188,
-  1189,   119,    11,   264,   265,   266,     0,   267,    13,  1190,
-     0,  1191,  1192,  1193,  1194,  1195,  1196,  1197,  1198,  1199,
-  1200,    14,    15,    16,   268,    17,    18,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,  1201,    28,   611,     0,  1202,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     0,     0,     0,   292,     0,
-  1203,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  1294,   293,  1187,  1188,  1189,
-   119,    11,   264,   265,   266,     0,   267,    13,  1190,     0,
-  1191,  1192,  1193,  1194,  1195,  1196,  1197,  1198,  1199,  1200,
-    14,    15,    16,   268,    17,    18,    19,     0,   269,   270,
-    20,     0,   271,   272,   273,    21,   274,   275,     0,    23,
-     0,     0,     0,   276,   277,   278,   279,   280,    26,     0,
-  1201,    28,   611,     0,  1202,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,   283,     0,     0,     0,     0,     0,
-     0,     0,   286,   287,   288,     0,     0,     0,     0,     0,
-   289,   290,   291,     0,     0,     0,     0,   292,     0,  1203,
-     0,     0,     0,  1187,  1188,  1189,   119,    11,   264,   265,
-   266,     0,   267,    13,  1190,   293,  1191,  1192,  1193,  1194,
-  1195,  1196,  1197,  1198,  1199,  1200,    14,    15,    16,   268,
-    17,    18,    19,     0,   269,   270,    20,     0,   271,   272,
-   273,    21,   274,   275,     0,    23,     0,     0,     0,   276,
-   277,   278,   279,   280,    26,     0,  1201,    28,  1395,     0,
-  1202,   281,     0,     0,     0,     0,     0,   282,     0,     0,
-   283,     0,     0,     0,     0,     0,     0,     0,   286,   287,
-   288,     0,     0,     0,     0,     0,   289,   290,   291,     0,
-     0,     0,     0,   292,     0,  1203,     0,     0,     0,  1187,
-  1188,  1189,   119,    11,   264,   265,   266,     0,   267,    13,
-  1190,   293,  1191,  1192,  1193,  1194,  1195,  1196,  1197,  1198,
-  1199,  1200,    14,    15,    16,   268,    17,    18,    19,     0,
-   269,   270,    20,     0,   271,   272,   273,    21,   274,   275,
-     0,    23,     0,     0,     0,   276,   277,   278,   279,   280,
-    26,     0,  1201,    28,     0,     0,  1202,   281,     0,     0,
-     0,     0,     0,   282,     0,     0,   283,     0,     0,     0,
-     0,     0,     0,     0,   286,   287,   288,     0,     0,     0,
-     0,     0,   289,   290,   291,     0,     0,     0,     0,   292,
-     0,  1203,     7,     8,     9,   119,    11,   264,   265,   266,
-   624,   267,    13,     0,     0,     0,     0,   293,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   268,    17,
-    18,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,   533,     0,   276,   277,
-   278,   279,   280,    26,     0,    27,    28,     0,     0,     0,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,   791,
-     0,     0,     0,     0,     0,     0,     0,   286,   287,   792,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,   536,
-     0,     0,   793,   538,     0,     0,   625,     7,     8,     9,
-   119,    11,   264,   265,   266,   624,   267,    13,     0,     0,
-   293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   268,    17,    18,    19,     0,   269,   270,
-    20,     0,   271,   272,   273,    21,   274,   275,     0,    23,
-     0,   533,     0,   276,   277,   278,   279,   280,    26,     0,
-    27,    28,     0,     0,     0,   281,     0,     0,     0,     0,
-     0,   282,     0,     0,  1020,     0,     0,     0,     0,     0,
-     0,     0,   286,   287,  1021,     0,     0,     0,     0,     0,
-   289,   290,   291,     0,   536,     0,     0,  1022,   538,     0,
-     0,   625,     7,     8,     9,     0,    11,   264,   265,   266,
-     0,   267,    13,     0,     0,   293,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   268,    17,
-     0,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,     0,     0,   276,   277,
-   278,   279,   280,    26,     0,    27,    28,     0,     0,     0,
-   281,     0,     0,     0,     0,     0,   282,     0,     0,   283,
-     0,     0,     0,     0,   284,     0,   285,   286,   287,   288,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,     7,
-     8,     9,   292,    11,   264,   265,   266,     0,   267,    13,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   293,     0,     0,     0,    16,   268,    17,     0,    19,     0,
-   269,   270,    20,     0,   271,   272,   273,    21,   274,   275,
-     0,    23,     0,   533,     0,   276,   277,   278,   279,   280,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   282,     0,     0,   791,     0,     0,     0,
-     0,     0,     0,     0,   286,   287,   792,     0,     0,     0,
-     0,     0,   289,   290,   291,     0,   536,     0,     0,   793,
-   538,     7,     8,     9,     0,    11,   264,   265,   266,     0,
-   267,    13,     0,     0,     0,     0,     0,   293,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   268,    17,     0,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,     0,    23,     0,   533,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   282,     0,     0,  1020,     0,
-     0,     0,     0,     0,     0,     0,   286,   287,  1021,     0,
-     0,     0,     0,     0,   289,   290,   291,     0,   536,     0,
-     0,  1022,   538,     7,     8,     9,     0,    11,   455,   265,
-   266,     0,   267,    13,     0,     0,     0,     0,     0,   293,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   268,
-    17,     0,    19,     0,   269,   270,    20,     0,   271,   272,
-   273,    21,   274,   275,     0,    23,     0,     0,     0,   276,
-   277,   278,   279,   280,    26,     0,    27,    28,     0,     0,
-  1271,   281,     0,     0,     0,     0,     0,   282,     0,     0,
-   283,     0,     0,     0,     0,     0,     0,     0,   286,   287,
-   288,     0,     0,     0,     0,     0,   289,   290,   291,     0,
-     0,     0,     0,   292,     7,     8,     9,   119,    11,   264,
-   265,   266,     0,   267,    13,     0,     0,     0,     0,     0,
-     0,   293,     0,     0,     0,     0,     0,     0,     0,    16,
-   268,    17,    18,    19,     0,   269,   270,    20,     0,   271,
-   272,   273,    21,   274,   275,     0,    23,     0,     0,     0,
-   276,   277,   278,   279,   280,    26,     0,    27,    28,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   282,     0,
-     0,   283,     0,     0,     0,     0,     0,     0,     0,   286,
-   287,   288,     0,     0,     0,     0,     0,   289,   290,   291,
-     0,     7,     8,     9,   292,    11,   264,   265,   266,     0,
-   267,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   293,     0,     0,     0,    16,   268,    17,     0,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,     0,    23,     0,     0,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,     0,     0,     0,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   283,     0,
-     0,     0,     0,     0,     0,     0,   286,   287,   288,     0,
-     0,     0,     0,     0,   289,   290,   291,     0,     7,     8,
-     9,   292,    11,   455,   265,   266,     0,   267,    13,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   293,
-     0,     0,     0,    16,   268,    17,     0,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,    27,    28,     0,     0,     0,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,   283,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,   288,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     7,     8,     9,   292,    11,
-   455,   265,   266,     0,   267,    13,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
-    16,   268,    17,     0,    19,     0,   269,   270,    20,     0,
-   271,   272,   273,    21,   274,   275,     0,    23,     0,     0,
-     0,   276,   277,   278,   279,   280,    26,     0,    27,    28,
-   486,     0,     0,     0,     0,     0,     0,     0,     0,   282,
-     0,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-   286,   287,   288,     0,     0,     0,     0,     0,   289,   290,
-   291,     0,     7,     8,     9,   487,    11,   455,   265,   266,
-     0,   267,    13,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   293,     0,     0,     0,    16,   268,    17,
-     0,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,     0,     0,   276,   277,
-   278,   279,   280,    26,     0,    27,    28,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   282,     0,     0,   283,
-     0,     0,     0,     0,     0,     0,     0,   286,   287,   288,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,     0,
-     0,     0,   292,   523,     7,     8,     9,     0,    11,   455,
-   265,   266,     0,   267,    13,     0,     0,     0,     0,     0,
-   293,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   268,    17,     0,    19,     0,   269,   270,    20,     0,   271,
-   272,   273,    21,   274,   275,     0,    23,     0,     0,     0,
-   276,   277,   278,   279,   280,    26,     0,    27,    28,     0,
-     0,     0,   281,     0,     0,     0,     0,     0,   282,     0,
-     0,   474,     0,     0,     0,     0,     0,     0,     0,   286,
-   287,   475,     0,     0,     0,     0,     0,   289,   290,   291,
-     0,   992,     8,     9,   476,    11,   455,   265,   266,     0,
-   267,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   293,     0,     0,     0,    16,   268,    17,     0,
-    19,     0,   269,   270,    20,     0,   271,   272,   273,    21,
-   274,   275,     0,    23,     0,     0,     0,   276,   277,   278,
-   279,   280,    26,     0,    27,    28,     0,     0,     0,   281,
-     0,     0,     0,     0,     0,   282,     0,     0,   283,     0,
-     0,     0,     0,     0,     0,     0,   286,   287,   288,     0,
-     0,     0,     0,     0,   289,   290,   291,     0,     7,     8,
-     9,   292,    11,   455,   265,   266,     0,   267,    13,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   293,
-     0,     0,     0,    16,   268,    17,     0,    19,     0,   269,
-   270,    20,     0,   271,   272,   273,    21,   274,   275,     0,
-    23,     0,     0,     0,   276,   277,   278,   279,   280,    26,
-     0,    27,    28,     0,     0,     0,   281,     0,     0,     0,
-     0,     0,   282,     0,     0,  1328,     0,     0,     0,     0,
-     0,     0,     0,   286,   287,  1329,     0,     0,     0,     0,
-     0,   289,   290,   291,     0,     7,     8,     9,  1330,    11,
-   455,   265,   266,     0,   267,    13,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
-    16,   268,    17,     0,    19,     0,   269,   270,    20,     0,
-   271,   272,   273,    21,   274,   275,     0,    23,     0,     0,
-     0,   276,   277,   278,   279,   280,    26,     0,    27,    28,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   282,
-     0,     0,   283,     0,     0,     0,     0,     0,     0,     0,
-   286,   287,   288,     0,     0,     0,     0,     0,   289,   290,
-   291,     0,     7,     8,     9,   456,    11,   455,   265,   266,
-     0,   267,    13,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   293,     0,     0,     0,    16,   268,    17,
-     0,    19,     0,   269,   270,    20,     0,   271,   272,   273,
-    21,   274,   275,     0,    23,     0,     0,     0,   276,   277,
-   278,   279,   280,    26,     0,    27,    28,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   282,     0,     0,   283,
-     0,     0,     0,     0,     0,     0,     0,   286,   287,   288,
-     0,     0,     0,     0,     0,   289,   290,   291,     0,     7,
-     8,     9,   459,    11,   455,   265,   266,     0,   267,    13,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   293,     0,     0,     0,    16,   268,    17,     0,    19,     0,
-   269,   270,    20,     0,   271,   272,   273,    21,   274,   275,
-     0,    23,     0,     0,     0,   276,   277,   278,   279,   280,
-    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   282,     0,     0,   283,     0,     0,     0,
-     0,     0,     0,     0,   286,   287,   288,     0,     0,     0,
-     0,     0,   289,   290,   291,     0,     7,     8,     9,   292,
-    11,   455,   265,   266,     0,   267,    13,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   293,     0,     0,
-     0,    16,   268,    17,     0,    19,     0,   269,   270,    20,
-     0,   271,   272,   273,    21,   274,   275,     0,    23,     0,
-     0,     0,   276,   277,   278,   279,   280,    26,     0,    27,
-    28,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   282,     0,     0,   474,     0,     0,     0,     0,     0,     0,
-     0,   286,   287,   475,     0,     0,     0,     0,     0,   289,
-   290,   291,     0,     7,     8,     9,   476,    11,   264,   265,
-   266,     0,   267,    13,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   293,     0,     0,     0,    16,   268,
-    17,     0,    19,     0,   269,   270,    20,     0,   271,   272,
-   273,    21,   274,   275,     0,    23,     0,     0,     0,   276,
-   277,   278,   279,   280,    26,     0,    27,    28,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   282,     0,     6,
-  1328,     7,     8,     9,    10,    11,    12,     0,   286,   287,
-  1329,    13,     0,     0,     0,     0,   289,   290,   291,     0,
-     0,     0,     0,  1330,    14,    15,    16,     0,    17,    18,
-    19,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-     0,   293,    22,    23,    24,     0,    25,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,    29,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    30,   150,
-     0,     7,     8,     9,    10,    11,    12,     0,    31,     0,
-     0,    13,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,    14,    15,    16,    34,    17,    18,
-    19,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-     0,     0,    22,    23,    24,     0,    25,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,    29,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    30,   662,
-     0,     7,     8,   663,   119,    11,    12,     0,    31,     0,
-     0,    13,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,     0,     0,    16,    34,    17,    18,
-    19,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-     0,     0,     0,    23,   664,     0,     7,     8,     9,   119,
-    11,    12,    26,     0,    27,    28,    13,     0,   665,     0,
-   666,     0,     0,     0,     0,     0,     0,     0,    30,     0,
-     0,    16,     0,    17,    18,     0,     0,     0,    31,    20,
-     0,     0,     0,     0,    21,     0,    32,     0,    23,     0,
-     0,    33,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     7,     8,     9,   119,    11,    12,     0,     0,   860,
-     0,    13,     0,    30,     0,     0,     0,   120,     0,     0,
-     0,     0,     0,    31,     0,     0,    16,     0,    17,    18,
-     0,    32,     0,     0,    20,     0,    33,     0,     0,    21,
-     0,     0,     0,    23,     0,     0,   895,     8,   663,   176,
-    11,   177,    26,     0,    27,    28,    13,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    30,     0,
-     0,    16,     0,    17,    18,     0,     0,     0,    31,    20,
-     0,     0,     0,     0,    21,     0,    32,     0,    23,     0,
-     0,    33,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,     0,     0,   897,     0,     7,     8,     9,
-   176,    11,   177,    30,     0,     0,     0,    13,     0,     0,
-     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-     0,    32,    16,     0,    17,    18,    33,     0,     0,     0,
-    20,     0,     0,     0,     0,    21,     0,     0,     0,    23,
-     0,     0,     7,     8,     9,   119,    11,    12,    26,     0,
-    27,    28,    13,     0,  1284,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    30,     0,     0,    16,     0,    17,
-    18,     0,     0,     0,    31,    20,     0,     0,     0,     0,
-    21,     0,    32,     0,    23,     0,     0,    33,     0,     0,
-     0,     0,     0,    26,     0,    27,    28,     7,     8,     9,
-   176,    11,   177,     0,     0,     0,     0,    13,     0,    30,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
-     0,     0,    16,     0,    17,    18,     0,    32,     0,     0,
-    20,     0,    33,     0,     0,    21,     0,     0,     0,    23,
-     0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
-    27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-     0,     0,    32,     0,     0,     0,     0,    33,   489,   490,
-   491,   492,   493,   494,   495,   496,   497,   498,   499,   500,
-   501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
-   489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
-   499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
-   509,   510,     0,     0,     0,     0,     0,  1073,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   568,     0,     0,  1339,   489,   490,   491,   492,
-   493,   494,   495,   496,   497,   498,   499,   500,   501,   502,
-   503,   504,   505,   506,   507,   508,   509,   510,  1248,   489,
-   490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
-   500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
-   510,  1381,   489,   490,   491,   492,   493,   494,   495,   496,
-   497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
-   507,   508,   509,   510,   489,   490,   491,   492,   493,   494,
-   495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
-   505,   506,   507,   508,   509,   510
-};
-
-static const short yycheck[] = {     4,
-   353,   387,   145,     4,    71,     4,   312,   135,   136,   180,
-   609,     4,   607,   353,   842,   428,    13,   318,    13,   844,
-    25,    58,    51,   318,    79,    22,    25,    25,   382,   409,
-    35,  1181,    25,  1316,    35,    40,    35,    30,    31,    40,
-    55,    40,    35,   214,     0,   755,   537,    40,    53,     4,
-   667,   188,   189,   544,   267,   268,   209,   180,   675,    50,
-   337,     4,    10,    68,    10,    75,   189,  1204,   117,   118,
-    25,    10,     1,  1351,    79,    86,    11,  1045,  1046,    84,
-    35,    86,    87,    78,    37,    40,    79,   300,    87,    87,
-   261,  1059,    35,   122,    87,   100,   101,    40,   388,     4,
-    33,  1349,     1,    60,    99,   395,    58,    86,     0,   684,
-    59,   686,    64,  1346,    62,   126,   113,   184,   123,   115,
-    25,   126,   118,    48,    59,  1373,   480,    62,     8,    58,
-    35,  1211,    87,    62,    93,    40,  1414,   134,  1218,  1333,
-    59,   312,   135,   136,   149,     1,   183,   126,    53,   140,
-   149,    93,   458,   110,   191,  1438,   149,   110,   538,    58,
-   109,   109,    97,   109,   454,   180,    95,    11,    33,  1402,
-   109,   164,   165,   188,   189,  1143,     4,   110,  1372,  1316,
-   171,    61,    87,    58,  1152,  1153,    93,  1155,    60,    47,
-    47,   110,     7,     8,   149,   608,    47,    25,    13,   214,
-    54,    47,    58,    33,  1452,   407,    62,    35,    62,  1403,
-   207,    24,    40,   415,   789,    59,    59,   227,    62,    59,
-   215,    36,    47,    54,    99,    60,   516,    74,   518,   519,
-    45,    60,    47,  1383,    93,    93,    93,    94,   110,    95,
-  1320,    62,    93,   953,   149,    58,   261,    93,    94,    62,
-   305,    79,   109,    97,    33,   556,   610,   262,   109,    87,
-   309,   551,    60,   109,    59,   109,   109,     6,    93,   109,
-   135,   136,   137,   401,   402,   110,   413,   414,    93,   632,
-  1360,   110,    95,    24,   421,   282,    47,   292,   109,   432,
-    62,   414,   632,   322,   431,    60,    47,   312,    37,   348,
-   305,   166,   793,   580,   406,   135,   136,   137,   313,   884,
-    54,   448,   305,    64,   109,   417,    60,   296,     4,   894,
-   108,   149,   628,   318,    54,  1405,     3,     4,     5,   326,
-   821,    31,    93,  1301,  1302,    47,   166,   109,    47,   336,
-    11,   320,    93,   339,   341,    35,    62,    54,   353,    35,
-    40,   926,   348,   928,    40,   353,   423,   136,   137,    58,
-   353,     4,     5,   854,    41,     4,     5,    74,   110,  1194,
-   375,   757,  1082,    26,    27,    47,   375,   375,   357,    56,
-    57,    93,   375,   420,    93,    94,    47,   166,    59,    47,
-   395,    62,    64,    64,     3,     4,     5,   434,   413,   414,
-   109,    58,   395,    80,     4,     5,   421,    47,   401,   402,
-   790,    88,    93,    56,    57,    54,   431,    56,    57,   429,
-   375,    93,    94,  1208,   429,  1210,    97,    47,  1253,    47,
-   429,    70,    93,   448,    75,    93,   429,  1262,  1263,    47,
-    62,    80,   109,  1060,    64,    54,    54,    56,    57,    58,
-    47,   456,    74,    93,   459,    94,    56,    57,   463,   464,
-   465,   466,   467,   816,   109,   520,    74,    54,   758,   882,
-   375,   476,    47,    93,   429,    93,   816,   305,   483,   269,
-   270,   771,   487,   773,    47,    93,   429,    74,   842,   486,
-    26,    27,    94,   283,    47,    31,    93,   798,   288,    47,
-   653,   291,   655,   798,   294,   109,    54,   660,   298,    10,
-  1001,    62,   649,   292,   519,   520,   306,    47,    93,    94,
-    47,   811,   110,    74,    60,   353,    74,   520,    64,    54,
-    93,  1022,   537,   704,   920,    60,   401,   402,   403,   544,
-    93,   534,   535,   109,   537,    93,   836,   375,    47,     3,
-   652,   544,  1377,   548,    47,     3,     4,     5,   944,   945,
-  1388,    54,   591,    93,   593,   594,    93,   395,   565,     4,
-     5,   401,   402,   403,   110,     3,     4,     5,   680,   594,
-    60,    74,   795,   963,     3,     4,     5,   592,    38,   586,
-    47,   596,   112,    41,    93,    94,  1009,    93,   595,   628,
-    93,   429,   669,   670,    54,    94,    54,    47,    56,    57,
-    94,   678,    47,   628,   112,    59,    59,    60,   615,    54,
-    62,    56,    57,   402,   403,    93,  1039,   632,    56,    57,
-    58,    75,  1018,    77,   649,    70,    93,    56,    57,   632,
-    88,  1027,  1028,    54,   673,    80,  1032,  1033,     3,     4,
-     5,    62,   958,    93,    94,    90,    59,   667,    93,    94,
-    93,    80,   667,    74,   674,   675,    59,    60,   667,   674,
-   675,    10,    75,    74,   667,    54,   675,   456,  1374,   684,
-   459,   686,   675,    62,   474,   475,    41,  1073,    74,   704,
-  1386,   684,   520,   686,    74,    74,   475,   476,     4,     5,
-  1396,    56,    57,    74,     3,     4,     5,   109,   487,   537,
-     4,     5,   667,    59,    54,   110,   544,  1413,    64,   109,
-   675,  1011,    62,  1013,   667,  1015,   879,   880,   881,    75,
-    59,    60,   675,    88,    74,    59,  1432,    59,    60,     3,
-     4,     5,    41,  1129,    54,   109,    54,  1342,    47,   754,
-    56,    57,    62,   758,    62,    54,   109,    56,    57,  1455,
-    54,   109,    56,    57,    74,   544,    74,  1366,   673,   674,
-    60,    70,   959,   960,    80,   962,   110,    41,   783,    83,
-    84,    80,    54,  1169,   789,   887,   888,   110,   793,    88,
-    62,    90,    56,    57,    93,    94,   789,   112,   791,   792,
-   793,   112,    74,   798,   632,   802,     3,     4,     5,  1099,
-    64,   816,   809,   818,   916,   112,   821,   109,   816,    59,
-    60,     4,     5,   816,    88,   112,   819,   820,   821,     4,
-     5,   898,    80,    81,    82,    83,    84,   904,   905,   667,
-   109,   908,   909,    59,    60,   912,   109,   675,   109,   854,
-     4,     5,   693,   694,   695,    58,   684,    54,   686,    56,
-    57,   854,  1248,   868,    59,    60,   109,    54,     7,    93,
-   875,   999,  1000,    56,    57,   112,     3,     4,     5,   884,
-   877,    56,    57,     3,     4,     5,     6,     7,     8,   894,
-    47,   884,  1020,  1021,    64,    59,   906,    80,   110,    93,
-    60,   894,    56,    57,  1210,    80,    24,   917,    26,    27,
-  1264,    64,   917,    64,    60,    62,    36,   109,   917,   698,
-    47,   926,  1276,   928,   917,   109,    80,    54,   109,    56,
-    57,   109,   109,   926,    64,   928,    56,    57,    58,    64,
-    58,     3,     4,     5,    62,     3,     4,     5,   945,  1051,
-  1052,    64,  1054,  1055,   112,  1057,   821,    64,   100,   101,
-    93,   789,   917,    59,    62,   793,    93,     4,     5,   109,
-    75,   109,   109,   109,   917,   109,   766,    95,    75,  1333,
-    75,    75,    62,    41,   104,   105,   106,   109,   816,   854,
-  1343,   821,   109,   821,    56,    57,  1001,    62,    56,    57,
-    59,   791,   792,  1343,   112,   109,   999,  1000,  1001,    62,
-     4,     5,    94,   792,   793,    88,  1370,  1022,  1372,    56,
-    57,  1018,    80,   109,   854,   110,   854,  1020,  1021,  1022,
-    88,   109,   109,   112,  1388,     4,     5,    47,  1140,  1141,
-   109,  1038,   821,    80,   112,   109,  1056,   110,   109,  1403,
-  1060,  1357,   112,   109,  1440,  1060,   884,   109,   109,    59,
-    54,  1060,    56,    57,   110,    64,   894,  1060,    64,    24,
-    62,    26,    27,     4,     5,   854,    70,     8,     3,     4,
-     5,    59,    59,  1150,  1151,   109,    80,    56,    57,   917,
-   109,    93,     4,     5,     6,     7,     8,   110,   926,    11,
-   928,    13,    93,    58,    93,  1060,    93,    62,   109,   112,
-  1115,    80,     4,     5,  1115,  1112,    28,  1060,    30,    31,
-  1125,   109,  1115,    54,    36,    56,    57,     7,  1230,  1231,
-  1232,    56,    57,    45,   999,  1000,  1001,   109,    30,    70,
-    95,   109,    54,   109,    56,    57,   110,   112,   109,    80,
-   292,   109,   109,    45,    62,  1020,  1021,  1022,   109,   109,
-  1115,   109,    54,    94,    56,    57,    64,   109,   109,   999,
-  1000,  1001,  1115,  1001,    84,   965,    86,   109,   112,  1208,
-    47,  1210,  1325,   109,     8,    97,  1357,    11,   109,   109,
-  1020,  1021,  1022,    96,  1022,  1210,  1298,  1299,    33,  1204,
-  1328,  1329,   109,  1200,  1209,    62,  1211,   109,   109,   109,
-  1211,  1204,   109,  1218,   109,    62,   126,  1218,  1211,  1286,
-    62,  1000,  1001,    47,   353,  1218,    24,   112,    26,    27,
-  1020,  1021,  1060,     7,     8,    59,     8,    61,    62,    13,
-    64,    60,  1021,  1022,    60,     3,     4,     5,    60,  1204,
-   392,    75,    15,    77,    93,    93,  1211,    60,  1255,    60,
-    58,  1204,    36,  1218,    62,    93,   395,   108,  1211,    93,
-    94,    45,    98,    97,    16,  1218,    78,    79,    80,    81,
-    82,    83,    84,    41,    93,   109,   109,  1115,   109,    60,
-   647,    60,   109,     3,     4,     5,   109,    95,    56,    57,
-    60,    10,  1404,    60,     3,     4,     5,     6,     7,     8,
-    93,  1316,  1317,  1380,   456,  1320,    59,   459,   109,  1320,
-    60,   463,    80,  1316,  1317,  1330,   683,  1320,   685,  1358,
-    88,    41,    64,    60,   476,  1328,  1329,    10,  1343,     4,
-     5,  1346,  1357,   109,  1349,   487,    56,    57,  1349,   491,
-  1343,    10,    60,  1346,   109,  1360,  1349,    56,    57,  1360,
-    60,  1316,     0,     0,     0,  1320,   377,  1360,  1373,     2,
-    80,   281,  1373,  1316,   149,   517,  1204,  1320,    88,    44,
-  1373,   523,    24,  1211,    26,    27,   339,   816,   149,    54,
-  1218,    56,    57,   674,  1349,  1009,  1341,  1402,    26,    27,
-  1405,  1312,   483,    31,  1405,  1360,  1349,  1452,   537,  1402,
-  1209,   809,  1405,   615,  1204,   544,    58,  1360,  1373,    11,
-    62,   804,  1287,   208,  1039,   917,   882,   784,   674,   786,
-  1373,    59,    60,  1058,    26,    27,    64,   565,   171,    31,
-     1,   802,     3,     4,     5,   520,     7,  1452,   309,  1211,
-  1405,  1452,  1116,    95,  1366,    47,  1425,  1287,   863,  1452,
-  1363,  1427,  1405,  1328,  1329,  1330,  1125,    59,    60,    -1,
-    62,    -1,    64,    -1,    -1,    -1,    -1,   387,   388,    -1,
-    41,    -1,     3,     4,     5,   395,    -1,     8,  1316,  1317,
-     4,     5,  1320,    54,     8,    56,    57,  1452,  1328,  1329,
-  1330,    93,    94,   632,    -1,    97,    -1,    -1,  1287,  1452,
-    -1,    -1,    -1,    -1,    -1,  1343,    -1,   109,  1346,    -1,
-    41,  1349,    -1,     6,     7,     8,    -1,    88,    -1,    -1,
-    13,    -1,  1360,    54,    -1,    56,    57,    -1,  1328,  1329,
-    54,    -1,    56,    57,   454,  1373,    -1,    -1,    31,    70,
-  1329,  1330,    -1,    36,    -1,   684,    70,   686,    -1,    80,
-     4,     5,    45,    -1,     8,    -1,    80,    88,   925,    -1,
-   927,    -1,    93,   483,  1402,    -1,   486,  1405,    -1,   489,
-   490,    -1,   492,   493,   494,   495,   496,   497,   498,   499,
-   500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
-   510,    -1,    -1,    47,    -1,    -1,   516,    -1,   518,   519,
-    54,    -1,    56,    57,     3,     4,     5,    -1,    -1,    -1,
-   762,   978,    -1,    -1,  1452,    -1,    70,    -1,    -1,    -1,
-    -1,    47,    -1,    -1,   544,    -1,    80,    -1,    -1,    -1,
-    -1,   551,    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,
-    94,   793,    41,     4,    -1,    -1,    -1,   567,   568,    -1,
-   789,    -1,    13,    -1,   793,    -1,    -1,    56,    57,    -1,
-    86,    87,    23,    24,    25,    91,    92,    93,    94,    30,
-    31,    -1,    33,    -1,    35,    -1,  1043,   816,    -1,    40,
-  1047,     1,   821,     3,     4,     5,     6,     7,     8,    88,
-    51,    -1,    53,    13,    -1,   615,    -1,    -1,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    -1,    68,    28,    -1,
-    30,    31,    -1,    -1,    -1,   854,    36,    78,    79,    -1,
-    -1,    41,    -1,   875,    -1,    45,    87,  1094,    48,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    99,    -1,
-    60,    -1,    -1,    -1,    -1,   884,   666,    -1,    -1,    -1,
-    70,    -1,    -1,   114,   115,   894,    -1,   118,    -1,    -1,
-    80,   122,   123,   124,    -1,    -1,    -1,   128,    88,    -1,
-   131,   132,    -1,    93,   135,   136,   137,    -1,   698,    -1,
-    -1,    -1,     3,     4,     5,    -1,    -1,   926,   149,   928,
-    -1,    -1,  1159,  1160,    -1,    -1,    -1,    -1,    -1,    -1,
-   720,    -1,    -1,   164,   165,   166,    -1,    -1,  1175,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     6,     7,     8,    -1,
-    41,    -1,    -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   193,    54,    -1,    56,    57,   757,   758,    60,
-    -1,    31,    -1,    -1,    75,    -1,    36,    -1,    -1,    70,
-    -1,   771,    -1,   773,   215,    45,  1223,  1224,    -1,    80,
-    -1,    -1,  1001,   224,    -1,    -1,    97,    88,    -1,    -1,
-  1022,    -1,    93,    -1,    -1,  1242,  1243,    -1,    -1,    -1,
-    -1,   801,   113,  1022,    -1,    -1,   117,    -1,    -1,    -1,
-    -1,   811,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   130,
-    -1,   262,   263,     3,     4,     5,     6,     7,     8,   829,
-    -1,    -1,    -1,    13,    -1,    -1,   836,  1069,  1070,  1071,
-  1072,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,    -1,
-    -1,    31,    -1,    -1,   854,    -1,    36,    -1,    -1,    -1,
-    -1,    41,    -1,   174,   305,    45,    -1,    47,   309,    -1,
-   311,   312,   313,    -1,    54,    -1,    56,    57,    -1,    -1,
-    -1,   322,   323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,   207,   897,   339,    -1,
-    80,     3,     4,     5,    -1,    -1,    -1,   348,    88,    -1,
-    90,    -1,   353,    93,    94,    -1,   227,    -1,    -1,    -1,
-   920,    -1,   363,    -1,    -1,   366,    -1,    -1,    -1,    -1,
-   371,    -1,    -1,    -1,   375,    -1,    38,    39,    -1,    41,
-    -1,    -1,    -1,    -1,   944,   945,    -1,    -1,   948,    -1,
-    -1,    -1,    54,    -1,    56,    57,   397,    -1,   399,    -1,
-   401,   402,   403,    -1,    -1,    -1,   407,  1199,    -1,     4,
-     5,   412,     7,     8,   415,    -1,    -1,    -1,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   428,   429,    -1,
-    -1,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,    -1,
-    -1,    36,   388,    -1,    -1,    -1,   317,    -1,    -1,   395,
-    45,  1011,    47,  1013,    -1,  1015,    -1,    -1,  1018,    54,
-    -1,    56,    57,   464,   465,   466,   467,  1027,  1028,    -1,
-   341,    -1,  1032,  1033,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,  1273,    -1,    -1,    -1,    80,    -1,    -1,   359,  1049,
-  1050,     3,     4,     5,    -1,    90,     8,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   454,    -1,
-    -1,    -1,    -1,  1073,    -1,  1075,    -1,    -1,    -1,   520,
-    -1,   522,    -1,    -1,  1316,  1317,    -1,    -1,    -1,    41,
-    -1,   532,    -1,   534,   535,    47,   537,    -1,  1330,  1099,
-    -1,    -1,    54,   544,    56,    57,    -1,   548,    -1,    -1,
-    -1,    -1,    -1,    -1,  1346,    -1,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,  1343,    -1,    -1,    -1,    80,  1129,
-   516,    -1,   518,   519,    -1,    -1,    88,    -1,    90,    -1,
-   451,    93,    94,    -1,    -1,   586,  1146,    -1,    -1,    -1,
-   591,   592,   593,   594,   595,   596,    -1,    -1,   544,    -1,
-    -1,    -1,    -1,    -1,    -1,   551,    -1,    -1,  1400,  1169,
-  1402,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,   628,    -1,    -1,
-    -1,   632,  1424,    -1,    -1,  1195,    -1,    -1,   639,   640,
-    -1,   642,    -1,    -1,    -1,    -1,  1438,    -1,     4,     5,
-    -1,     7,     8,    -1,    -1,   656,    -1,    13,     4,     5,
-   531,     7,     8,   664,    -1,    -1,   667,    13,  1228,  1229,
-    -1,    -1,   673,   674,   675,    -1,   547,  1237,    -1,    -1,
-    36,    -1,    28,   684,    30,   686,    -1,    -1,  1248,    45,
-    36,    47,   693,   694,   695,   311,   312,   313,    54,    45,
-    56,    57,    -1,   704,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    58,    -1,    70,    -1,     3,     4,     5,    -1,
-    -1,     8,    -1,    -1,    80,    -1,    -1,  1287,    -1,    -1,
-    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,    94,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-    -1,    -1,   698,   754,    41,    -1,    -1,    -1,  1318,    -1,
-    47,    -1,    84,    -1,    86,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,   774,    -1,   776,    -1,    -1,   100,   101,
-    -1,    -1,   783,    70,    -1,    -1,   787,    -1,   789,    -1,
-   791,   792,   793,    80,    -1,    -1,    -1,   798,    -1,    -1,
-    -1,    88,    -1,    90,   126,    -1,    93,    94,    -1,    -1,
-    -1,    -1,   758,    -1,    -1,   816,    -1,   818,   819,   820,
-   821,     4,     3,     4,     5,   771,    -1,   773,    -1,    -1,
-    13,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    23,    24,    25,    -1,     3,     4,     5,    30,    31,     8,
-    33,    -1,    35,   854,    -1,    -1,    -1,    40,    -1,    -1,
-    41,    -1,    -1,    -1,    -1,   811,    -1,   868,    51,    -1,
-    53,    -1,    -1,    54,    -1,    56,    57,   878,    -1,    60,
-  1440,   882,    41,   884,    -1,    68,    -1,    -1,    47,    70,
-   836,    -1,    -1,   894,    -1,    54,    79,    56,    57,    80,
-    -1,    -1,    -1,    -1,    87,    -1,   907,    88,   854,    -1,
-    -1,    70,    93,    -1,    -1,    -1,   917,    -1,   534,   535,
-    -1,    80,    -1,    -1,    -1,   926,   797,   928,   799,    88,
-    -1,    90,   115,    -1,    93,    94,    -1,    -1,    -1,   122,
-   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,
-    -1,    -1,   135,   136,   137,    -1,    -1,    -1,   959,   960,
-    -1,   962,    -1,     3,     4,     5,   149,    -1,     8,    -1,
-   292,    -1,    -1,    -1,    -1,   591,    -1,   593,   594,    -1,
-   596,   164,   165,   166,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,   997,   998,   999,  1000,
-  1001,    41,    -1,    -1,  1005,    -1,   877,    47,    -1,    -1,
-   193,    -1,   628,    -1,    54,    -1,    56,    57,    -1,  1020,
-  1021,  1022,     3,     4,     5,    -1,    -1,     8,    -1,    -1,
-    70,   353,    -1,    -1,    -1,   906,    -1,    -1,  1039,    -1,
-    80,   224,     4,     5,    -1,     7,     8,    -1,    88,    -1,
-    90,    13,  1053,    93,    94,    -1,    -1,  1058,    -1,  1060,
-    41,    -1,    -1,    -1,    -1,  1011,    28,  1013,    30,  1015,
-    -1,    -1,    -1,    54,    36,    56,    57,    -1,    -1,   262,
-   263,    -1,    -1,    45,    -1,    -1,    -1,    -1,   704,    70,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    80,
-    -1,  1102,  1103,    -1,  1105,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,    93,   984,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   305,    -1,  1125,    -1,   309,    -1,   311,   312,
-   313,    93,  1003,    -1,   456,   318,    -1,   459,    -1,   322,
-    -1,   463,   464,   465,   466,   467,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1099,   476,    -1,   339,    -1,   774,    -1,
-   776,   483,    -1,    -1,    -1,   487,    -1,  1038,    -1,    -1,
-   353,   787,     3,     4,     5,   791,   792,     8,    -1,    -1,
-   363,    -1,    -1,   366,    -1,  1056,    -1,    -1,   371,    -1,
-    -1,    -1,   375,    -1,    -1,    -1,    -1,   519,    -1,    -1,
-    -1,    -1,    -1,   819,   820,    -1,    -1,  1208,  1209,  1210,
-    41,    -1,    -1,    -1,   397,   537,   399,    -1,   401,   402,
-   403,    -1,   544,    54,   407,    56,    57,    -1,    -1,   412,
-    -1,    -1,   415,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,   428,   429,    -1,    -1,    80,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,    93,     3,     4,     5,    -1,    -1,     8,    -1,
-     4,     5,     6,     7,     8,    -1,    -1,    11,    -1,    13,
-    -1,   464,   465,   466,   467,    -1,  1287,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    -1,    -1,
-    -1,    41,    36,    -1,    53,    -1,    55,    -1,    -1,    -1,
-   632,    45,    -1,    47,    54,    -1,    56,    57,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,  1328,  1329,  1330,
-    70,    -1,    -1,    -1,    -1,    -1,    70,   520,    -1,   522,
-    80,  1287,  1343,    -1,    -1,    -1,    80,    -1,    88,    -1,
-    -1,   534,   535,    93,   537,    -1,    90,  1358,    -1,    93,
-    94,   544,    -1,    97,    -1,    -1,     4,     5,     6,     7,
-     8,    -1,    -1,   556,   123,    13,    -1,    -1,    -1,    -1,
-    -1,   997,   998,   999,  1000,    -1,    -1,    -1,    -1,  1005,
-    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    -1,   586,  1020,  1021,    -1,    45,   591,   592,
-   593,   594,    -1,   596,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,     4,     5,     6,   608,     4,     5,     6,     7,
-     8,   180,   754,    11,    -1,    13,    -1,    -1,    -1,   188,
-   189,    -1,    -1,    -1,    -1,   628,    -1,    -1,    30,   632,
-    28,    -1,    30,    31,    -1,    37,   639,   640,    36,   642,
-    -1,   783,    -1,    45,     3,     4,     5,    45,   217,     8,
-    -1,   793,    54,   656,    56,    57,    54,    -1,    56,    57,
-    -1,   664,    -1,    -1,   667,    -1,  1102,  1103,    -1,  1105,
-   673,   674,   675,    -1,   816,    -1,   818,    -1,    -1,   821,
-    -1,   684,    41,   686,    -1,    -1,    -1,    -1,    -1,    -1,
-   693,   694,   695,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,   854,    -1,    -1,     3,     4,     5,     6,     7,
-     8,    80,    -1,    11,    -1,    13,   868,    -1,    -1,    88,
-    -1,    -1,    -1,   875,    93,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,   754,    -1,    41,    -1,    -1,    -1,    45,    -1,    47,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-    -1,   774,     4,   776,    -1,    -1,    -1,    -1,    -1,    -1,
-   783,    -1,    70,    -1,   787,    -1,   789,    -1,   791,   792,
-   793,    -1,    80,    25,    -1,   798,    -1,    -1,    30,    31,
-    88,    33,    90,    35,    -1,    93,    94,    -1,    40,    97,
-    -1,    -1,    -1,   816,    -1,   818,   819,   820,   821,    51,
-    -1,    53,     3,     4,     5,    -1,    -1,     8,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   406,    -1,    -1,
-    -1,    -1,    -1,    75,   413,   414,    -1,    -1,   417,    -1,
-    -1,   854,   421,    -1,    -1,    87,   164,   165,   166,  1001,
-    41,    -1,    -1,    -1,    -1,   868,    -1,    -1,     3,     4,
-     5,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,   882,
-  1022,   884,    -1,   115,    -1,   117,   118,    -1,    -1,    70,
-   122,   894,    -1,    -1,    -1,    -1,   128,    -1,   130,    80,
-   132,    -1,    -1,   135,   136,   137,    41,    88,    -1,    -1,
-    -1,    -1,    93,    -1,   917,    -1,    -1,   149,    -1,    54,
-    -1,    56,    57,   926,    -1,   928,    -1,    62,    -1,    -1,
-    -1,    -1,   164,   165,   166,    70,     3,     4,     5,     6,
-     7,     8,   174,    -1,    -1,    80,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,    88,    -1,    -1,   959,   960,    93,   962,
-    -1,   193,     4,     5,    31,    -1,     8,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,
-    47,    -1,    -1,  1125,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,   224,    -1,   997,   998,   999,  1000,  1001,    -1,
-    -1,    -1,  1005,    70,    -1,    47,  1009,    -1,    -1,    -1,
-    -1,    -1,    54,    80,    56,    57,    -1,  1020,  1021,  1022,
-    -1,    88,    -1,   592,    -1,   594,    93,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1039,    -1,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    -1,
-  1053,    93,    94,    -1,    -1,  1058,    -1,  1060,    -1,   628,
-   292,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     3,     4,     5,    -1,    -1,     8,    -1,   309,    -1,    -1,
-   649,    -1,    -1,   652,    -1,   317,    -1,    -1,    -1,   397,
-   322,   399,    -1,   401,   402,   403,    -1,    -1,    -1,  1102,
-  1103,    -1,  1105,    -1,   412,   674,    -1,   339,    41,    -1,
-    -1,   680,    -1,    -1,    -1,    -1,   348,    -1,    -1,    -1,
-    -1,    54,  1125,    56,    57,    -1,    -1,    -1,    -1,    -1,
-    -1,   363,    -1,    -1,   366,    -1,    -1,    70,    -1,   371,
-    -1,    -1,    -1,   375,    -1,    -1,    -1,    80,    -1,     3,
-     4,     5,     6,     7,     8,    88,    -1,    -1,    -1,    13,
-    93,     3,     4,     5,    -1,   397,     8,   399,    -1,   401,
-   402,   403,    -1,    -1,    28,   407,    30,    31,    -1,    -1,
-   412,    -1,    36,   415,    -1,    -1,    -1,    41,  1330,    -1,
-    -1,    45,    -1,    47,    -1,    -1,    -1,   429,    -1,    41,
-    54,  1343,    56,    57,    -1,  1208,  1209,  1210,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    70,    -1,    -1,     3,
-     4,     5,    -1,    -1,   456,    -1,    80,   459,    70,    -1,
-    -1,    -1,    -1,    -1,    88,    -1,    90,    -1,    80,    93,
-    94,    -1,   474,   475,   476,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    -1,   487,     4,    41,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    25,    62,    -1,
-    -1,    -1,    30,    31,  1287,    33,    70,    35,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    -1,    80,    -1,    -1,   531,
-     3,     4,     5,    51,    88,    53,    -1,    -1,    -1,    93,
-    -1,    -1,   544,    -1,    -1,    -1,    -1,    -1,   887,   888,
-    -1,    -1,    -1,    -1,    -1,  1328,  1329,  1330,    -1,    -1,
-    -1,   639,   640,    -1,   642,    -1,    -1,    -1,    41,    87,
-  1343,    -1,    -1,    -1,    -1,    -1,    -1,   916,    -1,    -1,
-    -1,    54,    -1,    56,    57,  1358,    -1,    -1,    -1,   591,
-   592,   593,   594,    -1,    -1,   673,    -1,    70,    -1,    -1,
-    -1,    -1,     4,     5,   122,     7,     8,    80,     4,     5,
-   128,    13,     8,    -1,   132,    88,    -1,   135,   136,   137,
-    93,    -1,    -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,
-   632,   149,    -1,    -1,    36,    -1,    -1,   639,   640,    -1,
-   642,    -1,    -1,    45,    -1,    47,   164,   165,   166,    -1,
-    -1,    47,    54,    -1,    56,    57,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,   667,    -1,    -1,    70,    -1,
-    -1,   673,   674,   675,    70,   193,    -1,    -1,    80,    -1,
-    -1,     3,     4,     5,    80,    -1,    -1,    -1,    90,    -1,
-    -1,    93,    94,    -1,    90,    -1,   698,    93,    94,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   224,    -1,    -1,    -1,
-    -1,    -1,  1051,  1052,    -1,  1054,  1055,    -1,  1057,    41,
-    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,
-     7,     8,    54,    -1,    56,    57,    13,    -1,    -1,    -1,
-    62,   819,   820,   821,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    28,    -1,    30,    31,    32,    -1,    -1,    80,    36,
-    37,   311,   312,   313,    41,    -1,    88,    -1,    45,    46,
-    -1,    93,    -1,    -1,    -1,    -1,   854,    54,    -1,    56,
-    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,   791,
-   792,   793,    -1,    70,    -1,   797,    -1,    -1,    -1,    -1,
-   318,  1140,  1141,    80,   322,    -1,    33,    -1,    -1,    -1,
-    -1,    88,    -1,     3,     4,     5,    93,   819,   820,   821,
-    -1,    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,   366,    -1,
-    -1,    41,   854,   371,    -1,    -1,    -1,   375,    -1,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-  1209,  1210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,
-    70,   399,    -1,   401,   402,   403,    -1,    -1,    -1,   407,
-    80,  1230,  1231,  1232,   412,   122,    -1,   415,    88,    -1,
-    -1,    -1,    -1,    93,   906,    -1,    -1,    -1,   135,   136,
-   137,   429,    -1,    -1,    -1,   917,    -1,    -1,    -1,   997,
-   998,   999,  1000,  1001,    -1,    -1,    -1,  1005,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   164,   165,   166,
-    -1,    -1,  1020,  1021,  1022,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,  1298,
-  1299,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1053,    -1,    -1,    -1,    -1,
-    -1,    -1,   984,    -1,   534,   535,    -1,   537,    -1,    -1,
-    -1,    -1,    -1,    41,   544,   997,   998,   999,  1000,  1001,
-    -1,  1003,    -1,  1005,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,    -1,    -1,   532,    -1,    -1,    -1,  1020,  1021,
-  1022,    -1,    70,    -1,  1102,  1103,    -1,  1105,    -1,    -1,
-    77,    -1,    80,    -1,    -1,    -1,   263,    -1,    -1,    -1,
-    88,   591,    -1,   593,   594,    93,   596,    -1,    -1,    -1,
-    -1,  1053,    -1,    -1,    -1,    -1,  1058,    -1,  1060,    -1,
-    -1,    -1,    -1,    -1,    -1,  1404,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   591,   592,   593,   594,    -1,   628,    -1,
-    -1,    51,    -1,    -1,   311,   312,   313,    -1,    -1,    -1,
-   608,    -1,    -1,    -1,    -1,   322,   143,    -1,    -1,    -1,
-  1102,  1103,    -1,  1105,    -1,    75,    -1,    -1,    78,    -1,
-   628,    -1,    -1,    -1,   632,   162,    -1,    -1,    -1,    -1,
-    -1,   639,   640,    -1,   642,    -1,    -1,    97,   175,    99,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
-     7,     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,   667,
-    -1,    -1,   122,    -1,   704,   673,   674,   675,    -1,    -1,
-    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,
-   397,    -1,   399,    -1,   401,   402,   403,    -1,    45,    -1,
-   407,    -1,    -1,    -1,    -1,   412,    -1,    54,   415,    56,
-    57,    -1,    -1,    -1,   164,   165,   166,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   174,    -1,  1208,  1209,  1210,  1287,
-    -1,    -1,     4,     5,    -1,     7,     8,    -1,    -1,    -1,
-    -1,    13,    -1,   193,   774,    -1,   776,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,   787,    30,    -1,
-    -1,   791,   792,   793,    36,   215,    -1,    -1,    -1,    -1,
-  1328,  1329,  1330,    45,    -1,    -1,    -1,   227,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,   819,
-   820,   821,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   798,    -1,    -1,    -1,    -1,  1287,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,     4,    -1,   522,    -1,    -1,    -1,    -1,
-    -1,   819,   820,   821,   854,    -1,    -1,   534,   535,    -1,
-   537,    -1,    -1,    -1,    25,    -1,    -1,   544,    -1,    30,
-    31,    -1,    -1,    -1,    35,    -1,  1328,  1329,  1330,    40,
-    -1,    -1,    -1,    -1,    -1,    -1,   854,    -1,    -1,    -1,
-    -1,    -1,    53,    -1,    -1,    -1,    -1,   317,   318,    -1,
-    -1,    -1,   322,    -1,    -1,    -1,  1358,    -1,   405,    -1,
-    -1,    -1,    -1,   410,   591,    -1,   593,   594,    -1,   596,
-    -1,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   435,    -1,
-   437,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   917,
-    -1,   628,   449,   450,    -1,   452,    -1,    -1,    -1,    -1,
-    -1,    -1,   639,   640,    -1,   642,    -1,   128,    -1,    -1,
-    -1,   132,    -1,    -1,    -1,    -1,    -1,   397,    -1,   399,
-    -1,   401,   402,   403,    -1,    -1,    -1,   407,   149,    -1,
-    -1,    -1,   412,    -1,    -1,   415,   673,   997,   998,   999,
-  1000,  1001,    -1,   164,   165,  1005,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   693,   694,   695,    -1,
-  1020,  1021,  1022,    -1,    -1,    -1,    -1,   704,    -1,   997,
-   998,   999,  1000,  1001,    -1,    -1,    -1,  1005,    -1,    -1,
-    -1,  1009,    -1,   540,   541,    -1,    -1,    -1,   545,    -1,
-    -1,    -1,  1020,  1021,  1022,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   224,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,     1,    -1,     3,
-     4,     5,     6,     7,     8,  1053,    -1,    -1,    -1,    13,
-  1058,    -1,  1060,    -1,    -1,    -1,    -1,   774,    -1,   776,
-    -1,    -1,  1102,  1103,    28,  1105,    30,    31,    32,    -1,
-   787,    -1,    36,    37,   791,   792,   793,    41,    -1,    -1,
-    -1,    45,    46,    -1,    -1,    -1,    -1,   547,   548,    -1,
-    54,    -1,    56,    57,  1102,  1103,    60,  1105,    62,    -1,
-    -1,    -1,   819,   820,   821,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,     4,
-     5,    -1,     7,     8,    88,    -1,    -1,    -1,    13,    93,
-    -1,   591,    -1,   593,   594,    -1,    -1,   854,    -1,    -1,
-    -1,    -1,    -1,    28,    -1,    30,   110,    -1,    -1,    -1,
-   687,    36,   689,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    45,    -1,   363,    -1,    -1,   366,    -1,    -1,   628,    54,
-   371,    56,    57,    -1,   375,    -1,    -1,    -1,    -1,   639,
-   640,    -1,   642,    -1,    -1,     1,    -1,     3,     4,     5,
-     6,     7,     8,    -1,    -1,    -1,   397,    13,   399,    -1,
-  1208,  1209,  1210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   412,    28,   673,    30,    31,    32,    -1,    -1,    -1,
-    36,    37,    -1,   760,   761,    41,   763,    -1,   429,    45,
-    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,   959,   960,    60,   962,    62,    -1,    -1,    -1,
-    -1,   788,    -1,    -1,    70,    -1,    -1,     3,     4,     5,
-     6,     7,     8,    -1,    80,    -1,    -1,    13,    -1,    -1,
-    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,  1287,
-   997,   998,   999,  1000,  1001,    31,   823,    -1,  1005,    -1,
-    36,    -1,    -1,    -1,   110,    41,    -1,    -1,    -1,    45,
-    -1,    47,    -1,  1020,  1021,  1022,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1328,  1329,  1330,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    80,    -1,  1053,   797,   798,   799,
-    -1,    -1,    88,    -1,    90,    -1,   883,    93,    94,    -1,
-  1358,    -1,    -1,    -1,    -1,    -1,   893,    -1,    -1,   819,
-   820,   821,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     3,     4,     5,     6,     7,     8,    -1,    -1,    -1,    -1,
-    13,    -1,    -1,    -1,    -1,  1102,  1103,    -1,  1105,    -1,
-    -1,   592,    -1,    -1,   854,    28,    13,    30,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    23,    24,    41,    -1,
-    -1,    -1,    45,    30,    31,    -1,    33,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,    -1,
-    -1,   632,    -1,    -1,    -1,    -1,   973,    70,   639,   640,
-    -1,   642,    -1,    -1,    61,    -1,   906,    80,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,   667,  1004,    -1,    -1,
-    -1,    -1,   673,   674,   675,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    -1,  1208,    -1,  1210,    -1,    -1,   113,   114,   115,    -1,
-   117,   118,    -1,    -1,    -1,    -1,    -1,   124,    -1,    -1,
-    -1,   128,    -1,   130,   131,   132,    -1,    -1,   135,   136,
-   137,    -1,    -1,    -1,   984,    -1,  1063,  1064,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   997,   998,   999,
-  1000,  1001,    -1,  1003,    -1,  1005,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1096,
-  1020,  1021,  1022,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1287,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-   207,    -1,    -1,  1053,    -1,    -1,    -1,    -1,  1135,    -1,
-    -1,    -1,  1139,    -1,    -1,    -1,    -1,   224,    -1,    -1,
-    -1,  1328,  1329,  1330,    -1,    -1,    -1,    -1,   819,   820,
-    -1,    -1,    -1,    -1,  1161,  1162,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    -1,  1358,  1102,  1103,    -1,  1105,   263,    -1,    -1,     1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,   309,    45,   311,   312,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,   323,    -1,    -1,    61,
-    -1,    -1,    -1,    -1,    -1,    67,   917,    -1,    70,    -1,
-    -1,    -1,   339,    -1,   341,    -1,    78,    79,    80,    -1,
-    -1,   348,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,
-    -1,    93,   359,    -1,    -1,    97,   363,    -1,  1208,   366,
-  1210,    -1,    -1,    -1,   371,    -1,    -1,   109,    -1,   111,
-    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
-     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    31,    32,    -1,   997,   998,    36,    37,
-    -1,    -1,    -1,    41,  1005,    -1,    -1,    45,    46,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,    60,    11,    62,    -1,    -1,  1287,    -1,    -1,
-    -1,    -1,    70,    -1,   451,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    88,    -1,  1053,    -1,    -1,    93,    -1,  1058,    -1,  1060,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1328,  1329,
-  1330,    -1,   110,    -1,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    -1,  1358,    -1,
-    -1,  1102,  1103,    -1,  1105,   522,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   531,   532,    -1,   534,   535,    -1,
-    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,
-     7,     8,    -1,    -1,    11,    -1,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    -1,    26,
-    27,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,   586,
-    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,   595,    56,
-    57,    58,    59,    60,    -1,    62,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,  1209,    86,
-    87,    88,    -1,    90,    91,    92,    93,    94,    95,    31,
-    97,    98,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,
-    -1,   108,   109,   110,    -1,   112,    -1,    -1,    -1,   656,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   664,    -1,    -1,
-    -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    -1,    -1,    -1,   693,   694,   695,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,   704,     3,     4,
-     5,     6,     7,     8,     9,    10,    -1,    12,    13,    14,
-    -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,   774,    -1,   776,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-   787,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,   111,     1,    -1,     3,
-     4,     5,     6,     7,     8,     9,    10,    -1,    12,    13,
-    14,    -1,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,
-   877,   878,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-   907,    95,    -1,    -1,    -1,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,   111,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    -1,    -1,     1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   959,   960,    -1,   962,    28,    29,    30,    31,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,    -1,
-    -1,    93,    94,    -1,    -1,    97,    -1,    -1,    -1,    -1,
-    -1,  1038,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1056,
-     1,  1058,     3,     4,     5,     6,     7,     8,     9,    10,
-    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,
-    -1,    -1,    93,    94,    -1,     1,    97,     3,     4,     5,
-     6,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,
-   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
-     5,    -1,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    94,
-     1,    -1,     3,     4,     5,    -1,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,   110,   111,    -1,    -1,    20,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,     1,    -1,     3,     4,     5,    -1,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,   110,
-   111,    -1,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,    -1,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,   110,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,    -1,    93,    94,     1,    -1,
-     3,     4,     5,    -1,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
-    -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    58,    -1,    -1,    61,     1,
-    -1,    -1,     4,     5,    67,     7,     8,    70,    -1,    -1,
-    -1,    13,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    87,    88,    28,    -1,    30,    -1,
-    93,    -1,    -1,    -1,    36,    -1,    38,    39,    -1,   102,
-    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,   111,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    59,    -1,    -1,
-    -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    -1,    -1,    86,    87,    88,    -1,    -1,    91,
-    -1,     1,    94,     3,     4,     5,    -1,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,     1,    93,     3,     4,     5,    -1,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
-    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,    -1,    -1,     1,    93,     3,     4,     5,    -1,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,    -1,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    58,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
-    -1,     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    60,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
-     5,    -1,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
-     4,     5,    -1,     7,     8,     9,    10,    -1,    12,    13,
-    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,
-     3,     4,     5,    -1,     7,     8,     9,    10,    -1,    12,
-    13,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
-    -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,
-    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,    -1,
-    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
-    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    -1,     1,
-    93,     3,     4,     5,    -1,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,     3,     4,
-     5,    93,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,   111,   112,     3,     4,
-     5,     6,     7,     8,     9,    10,    -1,    12,    13,    14,
-    -1,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,   111,     3,     4,     5,
-     6,     7,     8,     9,    10,    -1,    12,    13,    14,    -1,
-    16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-    26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    95,
-    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    -1,    12,    13,    14,   111,    16,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,     3,
-     4,     5,     6,     7,     8,     9,    10,    -1,    12,    13,
-    14,   111,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    60,    61,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
-    11,    12,    13,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,
-    -1,    -1,    93,    94,    -1,    -1,    97,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
-   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    47,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,
-    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,    -1,
-    -1,    97,     3,     4,     5,    -1,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,   111,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,     3,
-     4,     5,    93,     7,     8,     9,    10,    -1,    12,    13,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   111,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    47,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,
-    94,     3,     4,     5,    -1,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    47,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    90,    -1,
-    -1,    93,    94,     3,     4,     5,    -1,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,     3,     4,     5,     6,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
-    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,     3,     4,     5,    93,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    28,    29,    30,    -1,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,     3,     4,
-     5,    93,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,     3,     4,     5,    93,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,     3,     4,     5,    93,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,    94,     3,     4,     5,    -1,     7,     8,
-     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,
-   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
-    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
-    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-    -1,     3,     4,     5,    93,     7,     8,     9,    10,    -1,
-    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   111,    -1,    -1,    -1,    28,    29,    30,    -1,
-    32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
-    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,    51,
-    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,    61,
-    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,
-    -1,    -1,    -1,    -1,    86,    87,    88,    -1,     3,     4,
-     5,    93,     7,     8,     9,    10,    -1,    12,    13,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    61,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,     3,     4,     5,    93,     7,
-     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
-    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
-    -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,     3,     4,     5,    93,     7,     8,     9,    10,
-    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   111,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
-    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,     3,
-     4,     5,    93,     7,     8,     9,    10,    -1,    12,    13,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   111,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-    -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,    -1,     3,     4,     5,    93,
-     7,     8,     9,    10,    -1,    12,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,
-    87,    88,    -1,     3,     4,     5,    93,     7,     8,     9,
-    10,    -1,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,     1,
-    70,     3,     4,     5,     6,     7,     8,    -1,    78,    79,
-    80,    13,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    26,    27,    28,    -1,    30,    31,
-    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
-    -1,   111,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,     1,
-    -1,     3,     4,     5,     6,     7,     8,    -1,    80,    -1,
-    -1,    13,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    26,    27,    28,    99,    30,    31,
-    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,     1,
-    -1,     3,     4,     5,     6,     7,     8,    -1,    80,    -1,
-    -1,    13,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,    28,    99,    30,    31,
-    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    46,    -1,     3,     4,     5,     6,
-     7,     8,    54,    -1,    56,    57,    13,    -1,    60,    -1,
-    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    80,    36,
-    -1,    -1,    -1,    -1,    41,    -1,    88,    -1,    45,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,     3,     4,     5,     6,     7,     8,    -1,    -1,    11,
-    -1,    13,    -1,    70,    -1,    -1,    -1,    74,    -1,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,    28,    -1,    30,    31,
-    -1,    88,    -1,    -1,    36,    -1,    93,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,    -1,     3,     4,     5,     6,
-     7,     8,    54,    -1,    56,    57,    13,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    80,    36,
-    -1,    -1,    -1,    -1,    41,    -1,    88,    -1,    45,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,    62,    -1,     3,     4,     5,
-     6,     7,     8,    70,    -1,    -1,    -1,    13,    -1,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    88,    28,    -1,    30,    31,    93,    -1,    -1,    -1,
-    36,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
-    -1,    -1,     3,     4,     5,     6,     7,     8,    54,    -1,
-    56,    57,    13,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    28,    -1,    30,
-    31,    -1,    -1,    -1,    80,    36,    -1,    -1,    -1,    -1,
-    41,    -1,    88,    -1,    45,    -1,    -1,    93,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,     3,     4,     5,
-     6,     7,     8,    -1,    -1,    -1,    -1,    13,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,    28,    -1,    30,    31,    -1,    88,    -1,    -1,
-    36,    -1,    93,    -1,    -1,    41,    -1,    -1,    -1,    45,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    59,    -1,    -1,   108,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    62,    63,
-    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
-#define YYERROR                goto yyerrlab1
-/* 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);                      \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-#ifndef YYPURE
-#define YYLEX          yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int    yychar;                 /*  the lookahead symbol                */
-YYSTYPE        yylval;                 /*  the semantic value of the           */
-                               /*  lookahead symbol                    */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;                        /*  location data for the lookahead     */
-                               /*  symbol                              */
-#endif
-
-int yynerrs;                   /*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;                   /*  nonzero means print parse trace     */
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
-
-#ifndef        YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-\f
-#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
-#else                          /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (from, to, count)
-     char *from;
-     char *to;
-     int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *from, char *to, int count)
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 192 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#endif
-
-int
-yyparse(YYPARSE_PARAM)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
-
-  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
-  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
-
-  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
-
-  YYSTYPE yyval;               /*  the variable used to return         */
-                               /*  semantic values from the action     */
-                               /*  routines                            */
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  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 - 1;
-  yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
-
-  *++yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-        the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-        but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yyls1, size * sizeof (*yylsp),
-                &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yystacksize);
-#endif
-
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
-#else /* no yyoverflow */
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       {
-         yyerror("parser stack overflow");
-         return 2;
-       }
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
-  goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Reading a token: ");
-#endif
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-       {
-         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise meaning
-            of a token, for further debugging info.  */
-#ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-#endif
-         fprintf (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-/* Do the default action for the current state.  */
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
-yyreduce:
-  yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-              yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-
-  switch (yyn) {
-
-case 2:
-#line 312 "parse.y"
-{
-                 /* In case there were missing closebraces,
-                    get us back to the global binding level.  */
-                 while (! global_bindings_p ())
-                   poplevel (0, 0, 0);
-                 finish_file ();
-               ;
-    break;}
-case 3:
-#line 326 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 4:
-#line 328 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 5:
-#line 330 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 8:
-#line 339 "parse.y"
-{ have_extern_spec = 1;
-                 used_extern_spec = 0;
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 9:
-#line 344 "parse.y"
-{ have_extern_spec = 0; ;
-    break;}
-case 10:
-#line 349 "parse.y"
-{ yyval.itype = pedantic;
-                 pedantic = 0; ;
-    break;}
-case 13:
-#line 359 "parse.y"
-{ if (pending_lang_change) do_pending_lang_change(); ;
-    break;}
-case 14:
-#line 361 "parse.y"
-{ if (! toplevel_bindings_p () && ! pseudo_global_level_p())
-                 pop_everything (); ;
-    break;}
-case 15:
-#line 367 "parse.y"
-{ if (pending_inlines) do_pending_inlines (); ;
-    break;}
-case 16:
-#line 369 "parse.y"
-{ if (pending_inlines) do_pending_inlines (); ;
-    break;}
-case 17:
-#line 371 "parse.y"
-{ if (pending_inlines) do_pending_inlines (); ;
-    break;}
-case 18:
-#line 373 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
-                 assemble_asm (yyvsp[-2].ttype); ;
-    break;}
-case 19:
-#line 376 "parse.y"
-{ pop_lang_context (); ;
-    break;}
-case 20:
-#line 378 "parse.y"
-{ if (pending_inlines) do_pending_inlines ();
-                 pop_lang_context (); ;
-    break;}
-case 21:
-#line 381 "parse.y"
-{ if (pending_inlines) do_pending_inlines ();
-                 pop_lang_context (); ;
-    break;}
-case 22:
-#line 384 "parse.y"
-{ push_namespace (yyvsp[-1].ttype); ;
-    break;}
-case 23:
-#line 386 "parse.y"
-{ pop_namespace (); ;
-    break;}
-case 24:
-#line 388 "parse.y"
-{ push_namespace (NULL_TREE); ;
-    break;}
-case 25:
-#line 390 "parse.y"
-{ pop_namespace (); ;
-    break;}
-case 26:
-#line 392 "parse.y"
-{ do_namespace_alias (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 27:
-#line 394 "parse.y"
-{ do_toplevel_using_decl (yyvsp[-1].ttype); ;
-    break;}
-case 28:
-#line 396 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
-                   yyvsp[-1].ttype = lastiddecl;
-                 do_using_directive (yyvsp[-1].ttype);
-               ;
-    break;}
-case 29:
-#line 402 "parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 30:
-#line 407 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 31:
-#line 409 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 32:
-#line 411 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 35:
-#line 418 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 36:
-#line 420 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 37:
-#line 425 "parse.y"
-{ push_lang_context (yyvsp[0].ttype); ;
-    break;}
-case 38:
-#line 427 "parse.y"
-{ if (current_lang_name != yyvsp[0].ttype)
-                   cp_error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name);
-                 pop_lang_context (); push_lang_context (yyvsp[0].ttype); ;
-    break;}
-case 39:
-#line 434 "parse.y"
-{ begin_template_parm_list (); ;
-    break;}
-case 40:
-#line 436 "parse.y"
-{ yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ;
-    break;}
-case 41:
-#line 438 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 42:
-#line 443 "parse.y"
-{ yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 43:
-#line 445 "parse.y"
-{ yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 44:
-#line 450 "parse.y"
-{ 
-                 yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE);
-                ttpa:
-                 if (TREE_PURPOSE (yyval.ttype) == signature_type_node)
-                   sorry ("signature as template type parameter");
-                 else if (TREE_PURPOSE (yyval.ttype) != class_type_node)
-                   {
-                     pedwarn ("template type parameters must use the keyword `class'");
-                     TREE_PURPOSE (yyval.ttype) = class_type_node;
-                   }
-               ;
-    break;}
-case 45:
-#line 462 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); goto ttpa; ;
-    break;}
-case 46:
-#line 464 "parse.y"
-{ yyval.ttype = build_tree_list (class_type_node, NULL_TREE); ;
-    break;}
-case 47:
-#line 466 "parse.y"
-{ yyval.ttype = build_tree_list (class_type_node, yyvsp[0].ttype); ;
-    break;}
-case 48:
-#line 478 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 49:
-#line 480 "parse.y"
-{ yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ;
-    break;}
-case 50:
-#line 482 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
-    break;}
-case 51:
-#line 484 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ;
-    break;}
-case 52:
-#line 490 "parse.y"
-{ end_template_decl (); ;
-    break;}
-case 53:
-#line 493 "parse.y"
-{ end_template_decl (); ;
-    break;}
-case 54:
-#line 498 "parse.y"
-{;
-    break;}
-case 55:
-#line 500 "parse.y"
-{;
-    break;}
-case 56:
-#line 502 "parse.y"
-{
-                 note_list_got_semicolon (yyvsp[-2].ftype.t);
-               ;
-    break;}
-case 57:
-#line 506 "parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 59:
-#line 509 "parse.y"
-{
-                 tree t, attrs;
-                 split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs);
-                 shadow_tag (t);
-                 note_list_got_semicolon (yyvsp[-1].ftype.t);
-               ;
-    break;}
-case 63:
-#line 522 "parse.y"
-{ yyval.itype = 0; ;
-    break;}
-case 64:
-#line 524 "parse.y"
-{ yyval.itype = 1; ;
-    break;}
-case 70:
-#line 540 "parse.y"
-{ finish_function (lineno, (int)yyvsp[-1].itype, 0); ;
-    break;}
-case 71:
-#line 542 "parse.y"
-{ ;
-    break;}
-case 72:
-#line 544 "parse.y"
-{ ;
-    break;}
-case 73:
-#line 549 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
-                 if (yyvsp[-2].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-2].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-               ;
-    break;}
-case 74:
-#line 558 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 75:
-#line 560 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
-                 if (yyvsp[-4].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-4].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-                 yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 76:
-#line 570 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
-                 if (yyvsp[-2].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-2].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-               ;
-    break;}
-case 77:
-#line 579 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 78:
-#line 581 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
-                 if (yyvsp[-4].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-4].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-                 yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 79:
-#line 591 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
-                 if (yyvsp[-2].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-2].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-               ;
-    break;}
-case 80:
-#line 600 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 81:
-#line 602 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
-                 if (yyvsp[-4].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-4].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-                 yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 82:
-#line 612 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype);
-                 if (yyvsp[-2].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-2].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-               ;
-    break;}
-case 83:
-#line 621 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 84:
-#line 623 "parse.y"
-{
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype);
-                 if (yyvsp[-4].ttype != current_class_type)
-                   {
-                     push_nested_class (yyvsp[-4].ttype, 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-                 yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 85:
-#line 636 "parse.y"
-{ tree specs, attrs;
-                 split_specs_attrs (yyvsp[-1].ftype.t, &specs, &attrs);
-                 if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
-                   YYERROR1;
-                 reinit_parse_for_function ();
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 86:
-#line 643 "parse.y"
-{ tree specs, attrs;
-                 split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
-                 if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
-                   YYERROR1;
-                 reinit_parse_for_function ();
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 87:
-#line 650 "parse.y"
-{ if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function ();
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 88:
-#line 655 "parse.y"
-{ tree specs, attrs;
-                 split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs);
-                 if (! start_function (specs, yyvsp[0].ttype, attrs, 0))
-                   YYERROR1;
-                 reinit_parse_for_function ();
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 89:
-#line 662 "parse.y"
-{ if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function ();
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 90:
-#line 670 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 91:
-#line 672 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 92:
-#line 674 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 93:
-#line 676 "parse.y"
-{ yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 94:
-#line 683 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ttype);
-                 yyval.ttype = start_method (specs, yyvsp[0].ttype);
-                rest_of_mdef:
-                 if (! yyval.ttype)
-                   YYERROR1;
-                 if (yychar == YYEMPTY)
-                   yychar = YYLEX;
-                 reinit_parse_for_method (yychar, yyval.ttype); ;
-    break;}
-case 95:
-#line 692 "parse.y"
-{ yyval.ttype = start_method (NULL_TREE, yyvsp[0].ttype); goto rest_of_mdef; ;
-    break;}
-case 96:
-#line 694 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
-                 yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
-    break;}
-case 97:
-#line 697 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ttype);
-                 yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
-    break;}
-case 98:
-#line 700 "parse.y"
-{ yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
-    break;}
-case 99:
-#line 702 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ttype);
-                 yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
-    break;}
-case 100:
-#line 705 "parse.y"
-{ yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
-    break;}
-case 101:
-#line 710 "parse.y"
-{
-                 if (! current_function_parms_stored)
-                   store_parm_decls ();
-                 yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 102:
-#line 719 "parse.y"
-{ store_return_init (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 103:
-#line 721 "parse.y"
-{ store_return_init (yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 104:
-#line 723 "parse.y"
-{ store_return_init (yyval.ttype, NULL_TREE); ;
-    break;}
-case 105:
-#line 728 "parse.y"
-{
-                 if (yyvsp[0].itype == 0)
-                   error ("no base initializers given following ':'");
-                 setup_vtbl_ptr ();
-                 /* Always keep the BLOCK node associated with the outermost
-                    pair of curley braces of a function.  These are needed
-                    for correct operation of dwarfout.c.  */
-                 keep_next_level ();
-               ;
-    break;}
-case 106:
-#line 741 "parse.y"
-{
-                 if (! current_function_parms_stored)
-                   store_parm_decls ();
-
-                 if (DECL_CONSTRUCTOR_P (current_function_decl))
-                   {
-                     /* Make a contour for the initializer list.  */
-                     pushlevel (0);
-                     clear_last_expr ();
-                     expand_start_bindings (0);
-                   }
-                 else if (current_class_type == NULL_TREE)
-                   error ("base initializers not allowed for non-member functions");
-                 else if (! DECL_CONSTRUCTOR_P (current_function_decl))
-                   error ("only constructors take base initializers");
-               ;
-    break;}
-case 107:
-#line 761 "parse.y"
-{ yyval.itype = 0; ;
-    break;}
-case 108:
-#line 763 "parse.y"
-{ yyval.itype = 1; ;
-    break;}
-case 111:
-#line 770 "parse.y"
-{
-                 if (current_class_name)
-                   pedwarn ("anachronistic old style base class initializer");
-                 expand_member_init (current_class_ref, NULL_TREE, yyvsp[-1].ttype);
-               ;
-    break;}
-case 112:
-#line 776 "parse.y"
-{
-                 if (current_class_name)
-                   pedwarn ("anachronistic old style base class initializer");
-                 expand_member_init (current_class_ref, NULL_TREE, void_type_node);
-               ;
-    break;}
-case 113:
-#line 782 "parse.y"
-{ expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 114:
-#line 784 "parse.y"
-{ expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
-    break;}
-case 115:
-#line 786 "parse.y"
-{ expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 116:
-#line 788 "parse.y"
-{ expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
-    break;}
-case 117:
-#line 791 "parse.y"
-{
-                 do_member_init (OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype);
-               ;
-    break;}
-case 118:
-#line 795 "parse.y"
-{
-                 do_member_init (OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), void_type_node);
-               ;
-    break;}
-case 130:
-#line 822 "parse.y"
-{ do_type_instantiation (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 131:
-#line 824 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
-                 do_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 132:
-#line 827 "parse.y"
-{ do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 133:
-#line 829 "parse.y"
-{ do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 134:
-#line 831 "parse.y"
-{ do_type_instantiation (yyvsp[0].ttype, yyvsp[-3].ttype); ;
-    break;}
-case 135:
-#line 833 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
-                 do_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-3].ttype); ;
-    break;}
-case 136:
-#line 836 "parse.y"
-{ do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
-    break;}
-case 137:
-#line 838 "parse.y"
-{ do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
-    break;}
-case 138:
-#line 847 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 139:
-#line 853 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 140:
-#line 859 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 141:
-#line 865 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 143:
-#line 875 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 144:
-#line 881 "parse.y"
-{
-                 yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE);
-                 if (yyval.ttype != error_mark_node)
-                   yyval.ttype = TYPE_STUB_DECL (yyval.ttype);
-               ;
-    break;}
-case 146:
-#line 891 "parse.y"
-{
-                 /* Handle `Class<Class<Type>>' without space in the `>>' */
-                 pedwarn ("`>>' should be `> >' in template class name");
-                 yyungetc ('>', 1);
-               ;
-    break;}
-case 147:
-#line 900 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
-    break;}
-case 148:
-#line 902 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 149:
-#line 907 "parse.y"
-{ yyval.ttype = groktypename (yyvsp[0].ftype.t); ;
-    break;}
-case 151:
-#line 913 "parse.y"
-{ yyval.code = NEGATE_EXPR; ;
-    break;}
-case 152:
-#line 915 "parse.y"
-{ yyval.code = CONVERT_EXPR; ;
-    break;}
-case 153:
-#line 917 "parse.y"
-{ yyval.code = PREINCREMENT_EXPR; ;
-    break;}
-case 154:
-#line 919 "parse.y"
-{ yyval.code = PREDECREMENT_EXPR; ;
-    break;}
-case 155:
-#line 921 "parse.y"
-{ yyval.code = TRUTH_NOT_EXPR; ;
-    break;}
-case 156:
-#line 926 "parse.y"
-{ yyval.ttype = build_x_compound_expr (yyval.ttype); ;
-    break;}
-case 158:
-#line 932 "parse.y"
-{ error ("ANSI C++ forbids an empty condition for `%s'",
-                        cond_stmt_keyword);
-                 yyval.ttype = integer_zero_node; ;
-    break;}
-case 159:
-#line 936 "parse.y"
-{ yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
-    break;}
-case 160:
-#line 941 "parse.y"
-{ error ("ANSI C++ forbids an empty condition for `%s'",
-                        cond_stmt_keyword);
-                 yyval.ttype = integer_zero_node; ;
-    break;}
-case 161:
-#line 945 "parse.y"
-{ yyval.ttype = condition_conversion (yyvsp[-1].ttype); ;
-    break;}
-case 162:
-#line 950 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 163:
-#line 952 "parse.y"
-{ yyval.ttype = condition_conversion (yyval.ttype); ;
-    break;}
-case 164:
-#line 954 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 165:
-#line 959 "parse.y"
-{ {
-                 tree d;
-                 for (d = getdecls (); d; d = TREE_CHAIN (d))
-                   if (TREE_CODE (d) == TYPE_DECL) {
-                     tree s = TREE_TYPE (d);
-                     if (TREE_CODE (s) == RECORD_TYPE)
-                       cp_error ("definition of class `%T' in condition", s);
-                     else if (TREE_CODE (s) == ENUMERAL_TYPE)
-                       cp_error ("definition of enum `%T' in condition", s);
-                   }
-                 }
-                 current_declspecs = yyvsp[-4].ftype.t;
-                 yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype,
-                                        /*prefix_attributes*/ NULL_TREE);
-               ;
-    break;}
-case 166:
-#line 977 "parse.y"
-{ 
-                 cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype, 1, LOOKUP_ONLYCONVERTING);
-                 resume_momentary (yyvsp[-2].itype);
-                 yyval.ttype = yyvsp[-1].ttype; 
-                 if (TREE_CODE (TREE_TYPE (yyval.ttype)) == ARRAY_TYPE)
-                   cp_error ("definition of array `%#D' in condition", yyval.ttype); 
-               ;
-    break;}
-case 172:
-#line 996 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (COMPOUND_STMT, NULL_TREE);
-                     COMPOUND_STMT_NO_SCOPE (yyval.ttype) = 1;
-                     add_tree (yyval.ttype);
-                   }
-               ;
-    break;}
-case 173:
-#line 1005 "parse.y"
-{ 
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-1].ttype, 0) = TREE_CHAIN (yyvsp[-1].ttype);
-                     TREE_CHAIN (yyvsp[-1].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-1].ttype;
-                   }
-                 finish_stmt (); 
-               ;
-    break;}
-case 175:
-#line 1020 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, 
-                                 build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 176:
-#line 1023 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, 
-                                 build_tree_list (NULL_TREE, error_mark_node)); ;
-    break;}
-case 177:
-#line 1026 "parse.y"
-{ chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 178:
-#line 1028 "parse.y"
-{ chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); ;
-    break;}
-case 179:
-#line 1033 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
-    break;}
-case 181:
-#line 1039 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 182:
-#line 1042 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 183:
-#line 1045 "parse.y"
-{ yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ;
-    break;}
-case 184:
-#line 1047 "parse.y"
-{ yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 185:
-#line 1049 "parse.y"
-{ yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 186:
-#line 1051 "parse.y"
-{ yyval.ttype = build_x_unary_op (yyvsp[-1].code, yyvsp[0].ttype);
-                 if (yyvsp[-1].code == NEGATE_EXPR && TREE_CODE (yyvsp[0].ttype) == INTEGER_CST)
-                   TREE_NEGATED_INT (yyval.ttype) = 1;
-                 overflow_warning (yyval.ttype);
-               ;
-    break;}
-case 187:
-#line 1058 "parse.y"
-{ tree label = lookup_label (yyvsp[0].ttype);
-                 if (label == NULL_TREE)
-                   yyval.ttype = null_pointer_node;
-                 else
-                   {
-                     TREE_USED (label) = 1;
-                     yyval.ttype = build1 (ADDR_EXPR, ptr_type_node, label);
-                     TREE_CONSTANT (yyval.ttype) = 1;
-                   }
-               ;
-    break;}
-case 188:
-#line 1069 "parse.y"
-{ yyval.ttype = expr_sizeof (yyvsp[0].ttype); ;
-    break;}
-case 189:
-#line 1071 "parse.y"
-{ yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ftype.t)); ;
-    break;}
-case 190:
-#line 1073 "parse.y"
-{ yyval.ttype = grok_alignof (yyvsp[0].ttype); ;
-    break;}
-case 191:
-#line 1075 "parse.y"
-{ yyval.ttype = c_alignof (groktypename (yyvsp[-1].ftype.t)); 
-                 check_for_new_type ("alignof", yyvsp[-1].ftype); ;
-    break;}
-case 192:
-#line 1081 "parse.y"
-{ yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); 
-                 check_for_new_type ("new", yyvsp[0].ftype); ;
-    break;}
-case 193:
-#line 1084 "parse.y"
-{ yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); 
-                 check_for_new_type ("new", yyvsp[-1].ftype); ;
-    break;}
-case 194:
-#line 1087 "parse.y"
-{ yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); 
-                 check_for_new_type ("new", yyvsp[0].ftype); ;
-    break;}
-case 195:
-#line 1090 "parse.y"
-{ yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); 
-                 check_for_new_type ("new", yyvsp[-1].ftype); ;
-    break;}
-case 196:
-#line 1093 "parse.y"
-{ yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t),
-                                 NULL_TREE, yyvsp[-3].itype); 
-                 check_for_new_type ("new", yyvsp[-1].ftype); ;
-    break;}
-case 197:
-#line 1097 "parse.y"
-{ yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); 
-                 check_for_new_type ("new", yyvsp[-2].ftype); ;
-    break;}
-case 198:
-#line 1100 "parse.y"
-{ yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); 
-                 check_for_new_type ("new", yyvsp[-1].ftype); ;
-    break;}
-case 199:
-#line 1103 "parse.y"
-{ yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); 
-                 check_for_new_type ("new", yyvsp[-2].ftype); ;
-    break;}
-case 200:
-#line 1107 "parse.y"
-{ yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ;
-    break;}
-case 201:
-#line 1109 "parse.y"
-{ yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype);
-                 if (yychar == YYEMPTY)
-                   yychar = YYLEX; ;
-    break;}
-case 202:
-#line 1113 "parse.y"
-{ yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype);
-                 if (yychar == YYEMPTY)
-                   yychar = YYLEX; ;
-    break;}
-case 203:
-#line 1117 "parse.y"
-{ yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 204:
-#line 1119 "parse.y"
-{ yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 205:
-#line 1124 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 206:
-#line 1126 "parse.y"
-{
-                 yyval.ttype = yyvsp[-1].ttype; 
-                 pedwarn ("old style placement syntax, use () instead");
-               ;
-    break;}
-case 207:
-#line 1134 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 208:
-#line 1136 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 209:
-#line 1138 "parse.y"
-{
-                 cp_error ("`%T' is not a valid expression", yyvsp[-1].ftype.t);
-                 yyval.ttype = error_mark_node;
-               ;
-    break;}
-case 210:
-#line 1146 "parse.y"
-{
-                 if (pedantic)
-                   pedwarn ("ANSI C++ forbids initialization of new expression with `='");
-                 yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 211:
-#line 1156 "parse.y"
-{ yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
-                 TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
-                 yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
-                 check_for_new_type ("cast", yyvsp[-1].ftype); ;
-    break;}
-case 212:
-#line 1161 "parse.y"
-{ yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
-                 TREE_PARMLIST (yyvsp[-1].ftype.t) = 1;
-                 yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
-                 check_for_new_type ("cast", yyvsp[-1].ftype); ;
-    break;}
-case 214:
-#line 1170 "parse.y"
-{ yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 215:
-#line 1172 "parse.y"
-{ 
-                 tree init = build_nt (CONSTRUCTOR, NULL_TREE,
-                                       nreverse (yyvsp[-2].ttype)); 
-                 if (pedantic)
-                   pedwarn ("ANSI C++ forbids constructor-expressions");
-                 /* Indicate that this was a GNU C constructor expression.  */
-                 TREE_HAS_CONSTRUCTOR (init) = 1;
-
-                 yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, init);
-               ;
-    break;}
-case 217:
-#line 1188 "parse.y"
-{ yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 218:
-#line 1190 "parse.y"
-{ yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 219:
-#line 1192 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 220:
-#line 1194 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 221:
-#line 1196 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 222:
-#line 1198 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 223:
-#line 1200 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 224:
-#line 1202 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 225:
-#line 1204 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 226:
-#line 1206 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 227:
-#line 1208 "parse.y"
-{ yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 228:
-#line 1210 "parse.y"
-{ yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 229:
-#line 1212 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 230:
-#line 1214 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 231:
-#line 1216 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 232:
-#line 1218 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 233:
-#line 1220 "parse.y"
-{ yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 234:
-#line 1222 "parse.y"
-{ yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 235:
-#line 1224 "parse.y"
-{ yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 236:
-#line 1226 "parse.y"
-{ yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 237:
-#line 1228 "parse.y"
-{ yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype);
-                 if (yyval.ttype != error_mark_node)
-                    C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
-    break;}
-case 238:
-#line 1232 "parse.y"
-{ yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
-    break;}
-case 239:
-#line 1234 "parse.y"
-{ yyval.ttype = build_throw (NULL_TREE); ;
-    break;}
-case 240:
-#line 1236 "parse.y"
-{ yyval.ttype = build_throw (yyvsp[0].ttype); ;
-    break;}
-case 241:
-#line 1254 "parse.y"
-{ yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 250:
-#line 1270 "parse.y"
-{ yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ;
-    break;}
-case 251:
-#line 1272 "parse.y"
-{ yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ;
-    break;}
-case 252:
-#line 1274 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 255:
-#line 1281 "parse.y"
-{ yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ;
-    break;}
-case 256:
-#line 1286 "parse.y"
-{
-                 if (TREE_CODE (yyval.ttype) == BIT_NOT_EXPR)
-                   yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyval.ttype, 0));
-                 else
-                   yyval.ttype = do_identifier (yyval.ttype, 1);
-               ;
-    break;}
-case 259:
-#line 1295 "parse.y"
-{
-                 if (processing_template_decl)
-                   push_obstacks (&permanent_obstack, &permanent_obstack);
-                 yyval.ttype = combine_strings (yyval.ttype);
-                 if (processing_template_decl)
-                   pop_obstacks ();
-               ;
-    break;}
-case 260:
-#line 1303 "parse.y"
-{ char class;
-                 yyval.ttype = yyvsp[-1].ttype;
-                 class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                    /* This inhibits warnings in truthvalue_conversion.  */
-                   C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
-    break;}
-case 261:
-#line 1311 "parse.y"
-{ char class;
-                 yyval.ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype);
-                 class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                    /* This inhibits warnings in truthvalue_conversion.  */
-                   C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
-    break;}
-case 262:
-#line 1319 "parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 263:
-#line 1321 "parse.y"
-{ if (current_function_decl == 0)
-                   {
-                     error ("braced-group within expression allowed only inside a function");
-                     YYERROR;
-                   }
-                 keep_next_level ();
-                 yyval.ttype = expand_start_stmt_expr (); ;
-    break;}
-case 264:
-#line 1329 "parse.y"
-{ tree rtl_exp;
-                 if (pedantic)
-                   pedwarn ("ANSI C++ forbids braced-groups within expressions");
-                 rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
-                 /* The statements have side effects, so the group does.  */
-                 TREE_SIDE_EFFECTS (rtl_exp) = 1;
-
-                 if (TREE_CODE (yyvsp[-1].ttype) == BLOCK)
-                   {
-                     /* Make a BIND_EXPR for the BLOCK already made.  */
-                     yyval.ttype = build (BIND_EXPR, TREE_TYPE (rtl_exp),
-                                 NULL_TREE, rtl_exp, yyvsp[-1].ttype);
-                     /* Remove the block from the tree at this point.
-                        It gets put back at the proper place
-                        when the BIND_EXPR is expanded.  */
-                     delete_block (yyvsp[-1].ttype);
-                   }
-                 else
-                   yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 265:
-#line 1350 "parse.y"
-{
-                  yyval.ttype = build_x_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype, current_class_ref); 
-                  if (TREE_CODE (yyval.ttype) == CALL_EXPR
-                      && TREE_TYPE (yyval.ttype) != void_type_node)
-                   yyval.ttype = require_complete_type (yyval.ttype);
-                ;
-    break;}
-case 266:
-#line 1357 "parse.y"
-{
-                 yyval.ttype = build_x_function_call (yyval.ttype, NULL_TREE, current_class_ref);
-                 if (TREE_CODE (yyval.ttype) == CALL_EXPR
-                     && TREE_TYPE (yyval.ttype) != void_type_node)
-                   yyval.ttype = require_complete_type (yyval.ttype);
-                ;
-    break;}
-case 267:
-#line 1364 "parse.y"
-{ yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 268:
-#line 1366 "parse.y"
-{ /* If we get an OFFSET_REF, turn it into what it really
-                    means (e.g., a COMPONENT_REF).  This way if we've got,
-                    say, a reference to a static member that's being operated
-                    on, we don't end up trying to find a member operator for
-                    the class it's in.  */
-                 if (TREE_CODE (yyval.ttype) == OFFSET_REF)
-                   yyval.ttype = resolve_offset_ref (yyval.ttype);
-                 yyval.ttype = build_x_unary_op (POSTINCREMENT_EXPR, yyval.ttype); ;
-    break;}
-case 269:
-#line 1375 "parse.y"
-{ if (TREE_CODE (yyval.ttype) == OFFSET_REF)
-                   yyval.ttype = resolve_offset_ref (yyval.ttype);
-                 yyval.ttype = build_x_unary_op (POSTDECREMENT_EXPR, yyval.ttype); ;
-    break;}
-case 270:
-#line 1380 "parse.y"
-{ if (current_class_ptr)
-                   {
-#ifdef WARNING_ABOUT_CCD
-                     TREE_USED (current_class_ptr) = 1;
-#endif
-                     yyval.ttype = current_class_ptr;
-                   }
-                 else if (current_function_decl
-                          && DECL_STATIC_FUNCTION_P (current_function_decl))
-                   {
-                     error ("`this' is unavailable for static member functions");
-                     yyval.ttype = error_mark_node;
-                   }
-                 else
-                   {
-                     if (current_function_decl)
-                       error ("invalid use of `this' in non-member function");
-                     else
-                       error ("invalid use of `this' at top level");
-                     yyval.ttype = error_mark_node;
-                   }
-               ;
-    break;}
-case 271:
-#line 1403 "parse.y"
-{
-                 tree type;
-                 tree id = yyval.ttype;
-
-                 /* This is a C cast in C++'s `functional' notation.  */
-                 if (yyvsp[-1].ttype == error_mark_node)
-                   {
-                     yyval.ttype = error_mark_node;
-                     break;
-                   }
-#if 0
-                 if (yyvsp[-1].ttype == NULL_TREE)
-                   {
-                     error ("cannot cast null list to type `%s'",
-                            IDENTIFIER_POINTER (TYPE_NAME (id)));
-                     yyval.ttype = error_mark_node;
-                     break;
-                   }
-#endif
-#if 0
-                 /* type is not set! (mrs) */
-                 if (type == error_mark_node)
-                   yyval.ttype = error_mark_node;
-                 else
-#endif
-                   {
-                     if (id == ridpointers[(int) RID_CONST])
-                       type = build_type_variant (integer_type_node, 1, 0);
-                     else if (id == ridpointers[(int) RID_VOLATILE])
-                       type = build_type_variant (integer_type_node, 0, 1);
-#if 0
-                     /* should not be able to get here (mrs) */
-                     else if (id == ridpointers[(int) RID_FRIEND])
-                       {
-                         error ("cannot cast expression to `friend' type");
-                         yyval.ttype = error_mark_node;
-                         break;
-                       }
-#endif
-                     else my_friendly_abort (79);
-                     yyval.ttype = build_c_cast (type, build_compound_expr (yyvsp[-1].ttype));
-                   }
-               ;
-    break;}
-case 273:
-#line 1448 "parse.y"
-{ tree type = groktypename (yyvsp[-4].ftype.t);
-                 check_for_new_type ("dynamic_cast", yyvsp[-4].ftype);
-                 yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ;
-    break;}
-case 274:
-#line 1452 "parse.y"
-{ tree type = groktypename (yyvsp[-4].ftype.t);
-                 check_for_new_type ("static_cast", yyvsp[-4].ftype);
-                 yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ;
-    break;}
-case 275:
-#line 1456 "parse.y"
-{ tree type = groktypename (yyvsp[-4].ftype.t);
-                 check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype);
-                 yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ;
-    break;}
-case 276:
-#line 1460 "parse.y"
-{ tree type = groktypename (yyvsp[-4].ftype.t);
-                 check_for_new_type ("const_cast", yyvsp[-4].ftype);
-                 yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ;
-    break;}
-case 277:
-#line 1464 "parse.y"
-{ yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ;
-    break;}
-case 278:
-#line 1466 "parse.y"
-{ tree type = groktypename (yyvsp[-1].ftype.t);
-                 check_for_new_type ("typeid", yyvsp[-1].ftype);
-                 yyval.ttype = get_typeid (TYPE_MAIN_VARIANT (type)); ;
-    break;}
-case 279:
-#line 1470 "parse.y"
-{ yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ;
-    break;}
-case 280:
-#line 1472 "parse.y"
-{
-                 got_scope = NULL_TREE;
-                 if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
-                   yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1);
-                 else
-                   yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 281:
-#line 1480 "parse.y"
-{ yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ;
-    break;}
-case 282:
-#line 1482 "parse.y"
-{ if (processing_template_decl)
-                   yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-3].ttype), yyvsp[-1].ttype, NULL_TREE);
-                 else
-                   yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), yyvsp[-1].ttype); ;
-    break;}
-case 283:
-#line 1487 "parse.y"
-{ if (processing_template_decl)
-                   yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-1].ttype), 
-                                      NULL_TREE, NULL_TREE);
-                 else
-                   yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), NULL_TREE); ;
-    break;}
-case 284:
-#line 1493 "parse.y"
-{ yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ;
-    break;}
-case 285:
-#line 1495 "parse.y"
-{ if (processing_template_decl)
-                   yyval.ttype = build_min_nt (COMPONENT_REF, yyvsp[-1].ttype, copy_to_permanent (yyvsp[0].ttype));
-                 else
-                   yyval.ttype = build_object_ref (yyval.ttype, OP0 (yyvsp[0].ttype), OP1 (yyvsp[0].ttype)); ;
-    break;}
-case 286:
-#line 1500 "parse.y"
-{
-#if 0
-                 /* This is a future direction of this code, but because
-                    build_x_function_call cannot always undo what is done
-                    in build_component_ref entirely yet, we cannot do this.  */
-                 yyval.ttype = build_x_function_call (build_component_ref (yyval.ttype, yyvsp[-3].ttype, NULL_TREE, 1), yyvsp[-1].ttype, current_class_ref);
-                 if (TREE_CODE (yyval.ttype) == CALL_EXPR
-                     && TREE_TYPE (yyval.ttype) != void_type_node)
-                   yyval.ttype = require_complete_type (yyval.ttype);
-#else
-                 yyval.ttype = build_method_call (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE,
-                                         LOOKUP_NORMAL);
-#endif
-               ;
-    break;}
-case 287:
-#line 1515 "parse.y"
-{
-#if 0
-                 /* This is a future direction of this code, but because
-                    build_x_function_call cannot always undo what is done
-                    in build_component_ref entirely yet, we cannot do this.  */
-                 yyval.ttype = build_x_function_call (build_component_ref (yyval.ttype, yyvsp[-1].ttype, NULL_TREE, 1), NULL_TREE, current_class_ref);
-                 if (TREE_CODE (yyval.ttype) == CALL_EXPR
-                     && TREE_TYPE (yyval.ttype) != void_type_node)
-                   yyval.ttype = require_complete_type (yyval.ttype);
-#else
-                 yyval.ttype = build_method_call (yyval.ttype, yyvsp[-1].ttype, NULL_TREE, NULL_TREE,
-                                         LOOKUP_NORMAL);
-#endif
-               ;
-    break;}
-case 288:
-#line 1530 "parse.y"
-{
-                 if (IS_SIGNATURE (OP0 (yyvsp[-3].ttype)))
-                   {
-                     warning ("signature name in scope resolution ignored");
-                     yyval.ttype = build_method_call (yyval.ttype, OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype, NULL_TREE,
-                                             LOOKUP_NORMAL);
-                   }
-                 else
-                   yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype);
-               ;
-    break;}
-case 289:
-#line 1541 "parse.y"
-{
-                 if (IS_SIGNATURE (OP0 (yyvsp[-1].ttype)))
-                   {
-                     warning ("signature name in scope resolution ignored");
-                     yyval.ttype = build_method_call (yyval.ttype, OP1 (yyvsp[-1].ttype), NULL_TREE, NULL_TREE,
-                                             LOOKUP_NORMAL);
-                   }
-                 else
-                   yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), NULL_TREE);
-               ;
-    break;}
-case 290:
-#line 1553 "parse.y"
-{
-                 if (IDENTIFIER_GLOBAL_VALUE (yyvsp[-1].ttype)
-                     && (TREE_CODE (TREE_TYPE (yyvsp[-3].ttype)) 
-                         != TREE_CODE (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (yyvsp[-1].ttype)))))
-                   cp_error ("`%E' is not of type `%T'", yyvsp[-3].ttype, yyvsp[-1].ttype);
-                 yyval.ttype = cp_convert (void_type_node, yyvsp[-3].ttype);
-               ;
-    break;}
-case 291:
-#line 1561 "parse.y"
-{
-                 if (yyvsp[-4].ttype != yyvsp[-1].ttype)
-                   cp_error ("destructor specifier `%T::~%T()' must have matching names", yyvsp[-4].ttype, yyvsp[-1].ttype);
-                 if (TREE_CODE (TREE_TYPE (yyvsp[-5].ttype))
-                     != TREE_CODE (TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (yyvsp[-4].ttype))))
-                   cp_error ("`%E' is not of type `%T'", yyvsp[-5].ttype, yyvsp[-4].ttype);
-                 yyval.ttype = cp_convert (void_type_node, yyvsp[-5].ttype);
-               ;
-    break;}
-case 292:
-#line 1570 "parse.y"
-{
-                 yyval.ttype = error_mark_node;
-               ;
-    break;}
-case 293:
-#line 1615 "parse.y"
-{ yyval.itype = 0; ;
-    break;}
-case 294:
-#line 1617 "parse.y"
-{ got_scope = NULL_TREE; yyval.itype = 1; ;
-    break;}
-case 295:
-#line 1622 "parse.y"
-{ yyval.itype = 0; ;
-    break;}
-case 296:
-#line 1624 "parse.y"
-{ got_scope = NULL_TREE; yyval.itype = 1; ;
-    break;}
-case 297:
-#line 1629 "parse.y"
-{ yyval.ttype = boolean_true_node; ;
-    break;}
-case 298:
-#line 1631 "parse.y"
-{ yyval.ttype = boolean_false_node; ;
-    break;}
-case 300:
-#line 1638 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 301:
-#line 1643 "parse.y"
-{
-                 if (! current_function_parms_stored)
-                   store_parm_decls ();
-                 setup_vtbl_ptr ();
-                 /* Always keep the BLOCK node associated with the outermost
-                    pair of curley braces of a function.  These are needed
-                    for correct operation of dwarfout.c.  */
-                 keep_next_level ();
-               ;
-    break;}
-case 302:
-#line 1656 "parse.y"
-{ got_object = TREE_TYPE (yyval.ttype); ;
-    break;}
-case 303:
-#line 1658 "parse.y"
-{
-                 yyval.ttype = build_x_arrow (yyval.ttype); 
-                 got_object = TREE_TYPE (yyval.ttype);
-               ;
-    break;}
-case 304:
-#line 1666 "parse.y"
-{
-                 resume_momentary (yyvsp[-1].itype);
-                 if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t)))
-                   note_got_semicolon (yyvsp[-2].ftype.t);
-               ;
-    break;}
-case 305:
-#line 1672 "parse.y"
-{
-                 resume_momentary (yyvsp[-1].itype);
-                 note_list_got_semicolon (yyvsp[-2].ftype.t);
-               ;
-    break;}
-case 306:
-#line 1677 "parse.y"
-{ resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 307:
-#line 1679 "parse.y"
-{
-                 shadow_tag (yyvsp[-1].ftype.t);
-                 note_list_got_semicolon (yyvsp[-1].ftype.t);
-               ;
-    break;}
-case 308:
-#line 1684 "parse.y"
-{ warning ("empty declaration"); ;
-    break;}
-case 309:
-#line 1686 "parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 312:
-#line 1700 "parse.y"
-{ yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (),
-                                            NULL_TREE, NULL_TREE); ;
-    break;}
-case 313:
-#line 1703 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE,
-                                            NULL_TREE); ;
-    break;}
-case 314:
-#line 1710 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 315:
-#line 1713 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 316:
-#line 1716 "parse.y"
-{ yyval.ftype.t = build_decl_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 317:
-#line 1719 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE);
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
-    break;}
-case 318:
-#line 1722 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 321:
-#line 1738 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 322:
-#line 1741 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 323:
-#line 1744 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); 
-                 yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
-    break;}
-case 324:
-#line 1747 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 325:
-#line 1750 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 326:
-#line 1753 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t,
-                                        chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ttype))); 
-                 yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
-    break;}
-case 327:
-#line 1760 "parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyval.ttype));
-                 yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ;
-    break;}
-case 328:
-#line 1765 "parse.y"
-{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;
-    break;}
-case 329:
-#line 1767 "parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 330:
-#line 1772 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 331:
-#line 1774 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
-    break;}
-case 332:
-#line 1784 "parse.y"
-{ yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 333:
-#line 1786 "parse.y"
-{ yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ;
-    break;}
-case 334:
-#line 1788 "parse.y"
-{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
-                 TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 335:
-#line 1791 "parse.y"
-{ if (extra_warnings && TREE_STATIC (yyval.ttype))
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
-                 TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
-    break;}
-case 336:
-#line 1797 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 337:
-#line 1799 "parse.y"
-{ yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
-    break;}
-case 338:
-#line 1810 "parse.y"
-{ yyval.ftype.t = get_decl_list (yyvsp[0].ftype.t); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 339:
-#line 1813 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 340:
-#line 1816 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 341:
-#line 1819 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); 
-                 yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
-    break;}
-case 342:
-#line 1825 "parse.y"
-{ yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
-    break;}
-case 343:
-#line 1827 "parse.y"
-{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
-    break;}
-case 345:
-#line 1837 "parse.y"
-{ yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 346:
-#line 1839 "parse.y"
-{ yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 347:
-#line 1841 "parse.y"
-{ yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype);
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 348:
-#line 1844 "parse.y"
-{ yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 349:
-#line 1847 "parse.y"
-{ tree type = TREE_TYPE (yyvsp[-1].ttype);
-
-                  yyval.ftype.new_type_flag = 0;
-                 if (IS_AGGR_TYPE (type))
-                   {
-                     sorry ("sigof type specifier");
-                     yyval.ftype.t = type;
-                   }
-                 else
-                   {
-                     error ("`sigof' applied to non-aggregate expression");
-                     yyval.ftype.t = error_mark_node;
-                   }
-               ;
-    break;}
-case 350:
-#line 1862 "parse.y"
-{ tree type = groktypename (yyvsp[-1].ftype.t);
-
-                  yyval.ftype.new_type_flag = 0;
-                 if (IS_AGGR_TYPE (type))
-                   {
-                     sorry ("sigof type specifier");
-                     yyval.ftype.t = type;
-                   }
-                 else
-                   {
-                     error("`sigof' applied to non-aggregate type");
-                     yyval.ftype.t = error_mark_node;
-                   }
-               ;
-    break;}
-case 351:
-#line 1882 "parse.y"
-{ yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 352:
-#line 1884 "parse.y"
-{ yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 360:
-#line 1905 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 361:
-#line 1907 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 362:
-#line 1912 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 if (current_declspecs
-                     && TREE_CODE (current_declspecs) != TREE_LIST)
-                   current_declspecs = get_decl_list (current_declspecs);
-                 if (have_extern_spec && !used_extern_spec)
-                   {
-                     current_declspecs = decl_tree_cons
-                       (NULL_TREE, get_identifier ("extern"), 
-                        current_declspecs);
-                     used_extern_spec = 1;
-                   }
-                 yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
-    break;}
-case 363:
-#line 1929 "parse.y"
-{ cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
-                 yyval.itype = yyvsp[-2].itype; ;
-    break;}
-case 364:
-#line 1932 "parse.y"
-{ tree d;
-                 split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 if (current_declspecs
-                     && TREE_CODE (current_declspecs) != TREE_LIST)
-                   current_declspecs = get_decl_list (current_declspecs);
-                 if (have_extern_spec && !used_extern_spec)
-                   {
-                     current_declspecs = decl_tree_cons
-                       (NULL_TREE, get_identifier ("extern"), 
-                        current_declspecs);
-                     used_extern_spec = 1;
-                   }
-                 yyval.itype = suspend_momentary ();
-                 d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
-                 cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
-                 cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
-    break;}
-case 365:
-#line 1953 "parse.y"
-{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
-    break;}
-case 366:
-#line 1957 "parse.y"
-{ cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
-    break;}
-case 367:
-#line 1959 "parse.y"
-{ yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes);
-                 cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
-    break;}
-case 368:
-#line 1966 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
-    break;}
-case 369:
-#line 1973 "parse.y"
-{ cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
-                 yyval.itype = yyvsp[-2].itype; ;
-    break;}
-case 370:
-#line 1976 "parse.y"
-{ tree d;
-                 split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyval.itype = suspend_momentary ();
-                 d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
-                 cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
-                 cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
-    break;}
-case 371:
-#line 1987 "parse.y"
-{ current_declspecs = NULL_TREE;
-                 prefix_attributes = NULL_TREE;
-                 yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ;
-    break;}
-case 372:
-#line 1994 "parse.y"
-{ cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING);
-                 yyval.itype = yyvsp[-2].itype; ;
-    break;}
-case 373:
-#line 1997 "parse.y"
-{ tree d;
-                 current_declspecs = NULL_TREE;
-                 prefix_attributes = NULL_TREE;
-                 yyval.itype = suspend_momentary ();
-                 d = start_decl (yyvsp[-2].ttype, current_declspecs, 0);
-                 cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes);
-                 cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
-    break;}
-case 374:
-#line 2010 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 375:
-#line 2012 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 376:
-#line 2017 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 377:
-#line 2019 "parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 378:
-#line 2024 "parse.y"
-{ yyval.ttype = yyvsp[-2].ttype; ;
-    break;}
-case 379:
-#line 2029 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 380:
-#line 2031 "parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 381:
-#line 2036 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 382:
-#line 2038 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 383:
-#line 2040 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
-    break;}
-case 384:
-#line 2042 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
-    break;}
-case 385:
-#line 2044 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 390:
-#line 2060 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 391:
-#line 2062 "parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 392:
-#line 2067 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 393:
-#line 2069 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 395:
-#line 2077 "parse.y"
-{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
-                 TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
-    break;}
-case 396:
-#line 2080 "parse.y"
-{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
-                 TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
-    break;}
-case 397:
-#line 2083 "parse.y"
-{ yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
-                 TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
-    break;}
-case 398:
-#line 2086 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 399:
-#line 2093 "parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
-    break;}
-case 400:
-#line 2095 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 401:
-#line 2098 "parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 402:
-#line 2100 "parse.y"
-{ yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 403:
-#line 2102 "parse.y"
-{ yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 404:
-#line 2104 "parse.y"
-{ yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 405:
-#line 2109 "parse.y"
-{ start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
-                                 NULL_TREE, 1);
-                 reinit_parse_for_function (); ;
-    break;}
-case 406:
-#line 2115 "parse.y"
-{
-                 int nested = (hack_decl_function_context
-                               (current_function_decl) != NULL_TREE);
-                 finish_function (lineno, (int)yyvsp[-1].itype, nested);
-                 process_next_inline (yyvsp[-3].ttype);
-               ;
-    break;}
-case 407:
-#line 2122 "parse.y"
-{ process_next_inline (yyvsp[-2].ttype); ;
-    break;}
-case 408:
-#line 2124 "parse.y"
-{ process_next_inline (yyvsp[-2].ttype); ;
-    break;}
-case 411:
-#line 2136 "parse.y"
-{ replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 412:
-#line 2138 "parse.y"
-{ replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
-    break;}
-case 414:
-#line 2143 "parse.y"
-{ do_pending_defargs (); ;
-    break;}
-case 415:
-#line 2145 "parse.y"
-{ do_pending_defargs (); ;
-    break;}
-case 416:
-#line 2150 "parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (yyvsp[-1].ttype); ;
-    break;}
-case 417:
-#line 2153 "parse.y"
-{ yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
-                 yyval.ftype.new_type_flag = 1;
-                 resume_momentary ((int) yyvsp[-4].itype);
-                 check_for_missing_semicolon (yyvsp[-3].ttype); ;
-    break;}
-case 418:
-#line 2158 "parse.y"
-{ yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype), NULL_TREE);
-                 yyval.ftype.new_type_flag = 1;
-                 check_for_missing_semicolon (yyval.ftype.t); ;
-    break;}
-case 419:
-#line 2162 "parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (make_anon_name ()); ;
-    break;}
-case 420:
-#line 2165 "parse.y"
-{ yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype);
-                 resume_momentary ((int) yyvsp[-5].itype);
-                 check_for_missing_semicolon (yyvsp[-3].ttype);
-                 yyval.ftype.new_type_flag = 1; ;
-    break;}
-case 421:
-#line 2170 "parse.y"
-{ yyval.ftype.t = finish_enum (start_enum (make_anon_name()), NULL_TREE);
-                 yyval.ftype.new_type_flag = 1;
-                 check_for_missing_semicolon (yyval.ftype.t); ;
-    break;}
-case 422:
-#line 2174 "parse.y"
-{ yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 423:
-#line 2177 "parse.y"
-{ yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 424:
-#line 2180 "parse.y"
-{ yyval.ftype.t = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 425:
-#line 2183 "parse.y"
-{ yyval.ftype.t = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 426:
-#line 2187 "parse.y"
-{
-                 int semi;
-                 tree id;
-
-                 yyval.ttype = yyvsp[-4].ttype;
-#if 0
-                 /* Need to rework class nesting in the
-                    presence of nested classes, etc.  */
-                 shadow_tag (CLASSTYPE_AS_LIST (yyvsp[-4].ttype)); */
-#endif
-                 if (yychar == YYEMPTY)
-                   yychar = YYLEX;
-                 semi = yychar == ';';
-                 /* finish_struct nukes this anyway; if
-                    finish_exception does too, then it can go.  */
-                 if (semi)
-                   note_got_semicolon (yyvsp[-4].ttype);
-
-                 if (TREE_CODE (yyvsp[-4].ttype) == ENUMERAL_TYPE)
-                   ;
-                 else
-                   {
-                     yyval.ttype = finish_struct (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi);
-                     if (semi) note_got_semicolon (yyval.ttype);
-                   }
-
-                 pop_obstacks ();
-
-                 if (! semi)
-                   check_for_missing_semicolon (yyvsp[-4].ttype); 
-                 if (current_scope () == current_function_decl)
-                   do_pending_defargs (yyvsp[-4].ttype);
-               ;
-    break;}
-case 427:
-#line 2221 "parse.y"
-{
-                 if (pending_inlines 
-                     && current_scope () == current_function_decl)
-                   do_pending_inlines ();
-               ;
-    break;}
-case 428:
-#line 2227 "parse.y"
-{ 
-                 yyval.ftype.t = yyvsp[-3].ttype;
-                 yyval.ftype.new_type_flag = 1; 
-                 if (current_scope () == current_function_decl)
-                   clear_inline_text_obstack (); 
-               ;
-    break;}
-case 429:
-#line 2234 "parse.y"
-{
-                 yyval.ftype.t = yyvsp[0].ttype;
-                 yyval.ftype.new_type_flag = 0;
-                 /* struct B: public A; is not accepted by the WP grammar.  */
-                 if (TYPE_BINFO_BASETYPES (yyval.ftype.t) && !TYPE_SIZE (yyval.ftype.t)
-                     && ! TYPE_BEING_DEFINED (yyval.ftype.t))
-                   cp_error ("base clause without member specification for `%#T'",
-                             yyval.ftype.t);
-               ;
-    break;}
-case 433:
-#line 2253 "parse.y"
-{ if (pedantic && !in_system_header)
-                   pedwarn ("comma at end of enumerator list"); ;
-    break;}
-case 435:
-#line 2260 "parse.y"
-{ error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
-    break;}
-case 436:
-#line 2262 "parse.y"
-{ error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
-    break;}
-case 437:
-#line 2264 "parse.y"
-{ error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
-    break;}
-case 438:
-#line 2266 "parse.y"
-{ error ("no body nor ';' separates two class, struct or union declarations"); ;
-    break;}
-case 439:
-#line 2271 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 440:
-#line 2276 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 441:
-#line 2281 "parse.y"
-{
-                 current_aggr = yyvsp[-2].ttype;
-                 if (TREE_CODE (yyvsp[0].ttype) == TYPE_DECL)
-                   yyval.ttype = yyvsp[0].ttype;
-                 else
-                   {
-                     cp_error ("`%T' does not have a nested type named `%D'",
-                               yyvsp[-1].ttype, yyvsp[0].ttype);
-                     yyval.ttype = xref_tag
-                       (current_aggr, make_anon_name (), NULL_TREE, 1);
-                     yyval.ttype = TYPE_MAIN_DECL (yyval.ttype);
-                   }
-               ;
-    break;}
-case 442:
-#line 2295 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 443:
-#line 2297 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 444:
-#line 2302 "parse.y"
-{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 0); ;
-    break;}
-case 445:
-#line 2307 "parse.y"
-{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 1); ;
-    break;}
-case 446:
-#line 2310 "parse.y"
-{ 
-                 yyval.ttype = yyvsp[-1].ttype;
-                 if (yyvsp[0].ttype)
-                    xref_basetypes (current_aggr, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); 
-               ;
-    break;}
-case 447:
-#line 2316 "parse.y"
-{ 
-                 yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
-                 if (TREE_INT_CST_LOW (current_aggr) == union_type 
-                     && TREE_CODE (yyval.ttype) != UNION_TYPE)
-                   cp_pedwarn ("`union' tag used in declaring `%#T'", yyval.ttype);
-                 else if (TREE_CODE (yyval.ttype) == UNION_TYPE
-                          && TREE_INT_CST_LOW (current_aggr) != union_type)
-                   cp_pedwarn ("non-`union' tag used in declaring `%#T'", yyval.ttype);
-                 if (yyvsp[0].ttype)
-                   {
-                     if (IS_AGGR_TYPE (yyval.ttype) && CLASSTYPE_USE_TEMPLATE (yyval.ttype))
-                       {
-                         if (CLASSTYPE_IMPLICIT_INSTANTIATION (yyval.ttype)
-                             && TYPE_SIZE (yyval.ttype) == NULL_TREE)
-                           {
-                             SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (yyval.ttype);
-                             if (processing_template_decl)
-                               push_template_decl (TYPE_MAIN_DECL (yyval.ttype));
-                           }
-                         else if (CLASSTYPE_TEMPLATE_INSTANTIATION (yyval.ttype))
-                           cp_error ("specialization after instantiation of `%T'", yyval.ttype);
-                       }
-                     xref_basetypes (current_aggr, yyvsp[-1].ttype, yyval.ttype, yyvsp[0].ttype); 
-                   }
-               ;
-    break;}
-case 448:
-#line 2345 "parse.y"
-{ yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), NULL_TREE, 0);
-                 yyungetc ('{', 1); ;
-    break;}
-case 451:
-#line 2356 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 452:
-#line 2358 "parse.y"
-{ yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
-    break;}
-case 453:
-#line 2360 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 455:
-#line 2366 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 456:
-#line 2371 "parse.y"
-{
-                 tree type = TREE_TYPE (yyvsp[0].ttype);
-                 if (! is_aggr_type (type, 1))
-                   yyval.ttype = NULL_TREE;
-                 else if (current_aggr == signature_type_node
-                          && (! type) && (! IS_SIGNATURE (type)))
-                   {
-                     error ("class name not allowed as base signature");
-                     yyval.ttype = NULL_TREE;
-                   }
-                 else if (current_aggr == signature_type_node)
-                   {
-                     sorry ("signature inheritance, base type `%s' ignored",
-                            IDENTIFIER_POINTER (yyval.ttype));
-                     yyval.ttype = build_tree_list (access_public_node, type);
-                   }
-                 else if (type && IS_SIGNATURE (type))
-                   {
-                     error ("signature name not allowed as base class");
-                     yyval.ttype = NULL_TREE;
-                   }
-                 else
-                   yyval.ttype = build_tree_list (access_default_node, type);
-               ;
-    break;}
-case 457:
-#line 2396 "parse.y"
-{
-                 tree type = TREE_TYPE (yyvsp[0].ttype);
-                 if (current_aggr == signature_type_node)
-                   error ("access and source specifiers not allowed in signature");
-                 if (! IS_AGGR_TYPE (type))
-                   yyval.ttype = NULL_TREE;
-                 else if (current_aggr == signature_type_node
-                          && (! type) && (! IS_SIGNATURE (type)))
-                   {
-                     error ("class name not allowed as base signature");
-                     yyval.ttype = NULL_TREE;
-                   }
-                 else if (current_aggr == signature_type_node)
-                   {
-                     sorry ("signature inheritance, base type `%s' ignored",
-                            IDENTIFIER_POINTER (yyval.ttype));
-                     yyval.ttype = build_tree_list (access_public_node, type);
-                   }
-                 else if (type && IS_SIGNATURE (type))
-                   {
-                     error ("signature name not allowed as base class");
-                     yyval.ttype = NULL_TREE;
-                   }
-                 else
-                   yyval.ttype = build_tree_list (yyval.ttype, type);
-               ;
-    break;}
-case 459:
-#line 2427 "parse.y"
-{ yyval.ttype = TYPE_MAIN_DECL (make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype)); ;
-    break;}
-case 460:
-#line 2429 "parse.y"
-{ yyval.ttype = TYPE_MAIN_DECL (make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype)); ;
-    break;}
-case 461:
-#line 2431 "parse.y"
-{
-                 if (current_aggr == signature_type_node)
-                   {
-                     if (IS_AGGR_TYPE (TREE_TYPE (yyvsp[-1].ttype)))
-                       {
-                         sorry ("`sigof' as base signature specifier");
-                         yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
-                       }
-                     else
-                       {
-                         error ("`sigof' applied to non-aggregate expression");
-                         yyval.ttype = error_mark_node;
-                       }
-                   }
-                 else
-                   {
-                     error ("`sigof' in struct or class declaration");
-                     yyval.ttype = error_mark_node;
-                   }
-               ;
-    break;}
-case 462:
-#line 2452 "parse.y"
-{
-                 if (current_aggr == signature_type_node)
-                   {
-                     if (IS_AGGR_TYPE (groktypename (yyvsp[-1].ftype.t)))
-                       {
-                         sorry ("`sigof' as base signature specifier");
-                         yyval.ttype = groktypename (yyvsp[-1].ftype.t);
-                       }
-                     else
-                       {
-                         error ("`sigof' applied to non-aggregate expression");
-                         yyval.ttype = error_mark_node;
-                       }
-                   }
-                 else
-                   {
-                     error ("`sigof' in struct or class declaration");
-                     yyval.ttype = error_mark_node;
-                   }
-               ;
-    break;}
-case 464:
-#line 2477 "parse.y"
-{ if (yyval.ttype != ridpointers[(int)RID_VIRTUAL])
-                   sorry ("non-virtual access");
-                 yyval.ttype = access_default_virtual_node; ;
-    break;}
-case 465:
-#line 2481 "parse.y"
-{ int err = 0;
-                 if (yyvsp[-1].ttype == access_protected_node)
-                   {
-                     warning ("`protected' access not implemented");
-                     yyvsp[-1].ttype = access_public_node;
-                     err++;
-                   }
-                 else if (yyvsp[-1].ttype == access_public_node)
-                   {
-                     if (yyvsp[-2].ttype == access_private_node)
-                       {
-                       mixed:
-                         error ("base class cannot be public and private");
-                       }
-                     else if (yyvsp[-2].ttype == access_default_virtual_node)
-                       yyval.ttype = access_public_virtual_node;
-                   }
-                 else /* $2 == access_private_node */
-                   {
-                     if (yyvsp[-2].ttype == access_public_node)
-                       goto mixed;
-                     else if (yyvsp[-2].ttype == access_default_virtual_node)
-                       yyval.ttype = access_private_virtual_node;
-                   }
-               ;
-    break;}
-case 466:
-#line 2507 "parse.y"
-{ if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
-                   sorry ("non-virtual access");
-                 if (yyval.ttype == access_public_node)
-                   yyval.ttype = access_public_virtual_node;
-                 else if (yyval.ttype == access_private_node)
-                   yyval.ttype = access_private_virtual_node; ;
-    break;}
-case 467:
-#line 2517 "parse.y"
-{ tree t = yyvsp[-1].ttype;
-                 push_obstacks_nochange ();
-                 end_temporary_allocation ();
-
-                 if (t == error_mark_node
-                     || ! IS_AGGR_TYPE (t))
-                   {
-                     t = yyvsp[-1].ttype = make_lang_type (RECORD_TYPE);
-                     pushtag (make_anon_name (), t, 0);
-                   }
-                 if (TYPE_SIZE (t))
-                   duplicate_tag_error (t);
-                  if (TYPE_SIZE (t) || TYPE_BEING_DEFINED (t))
-                    {
-                      t = make_lang_type (TREE_CODE (t));
-                      pushtag (TYPE_IDENTIFIER (yyvsp[-1].ttype), t, 0);
-                      yyvsp[-1].ttype = t;
-                    }
-                 if (processing_template_decl && TYPE_CONTEXT (t)
-                     && ! current_class_type)
-                   push_template_decl (TYPE_STUB_DECL (t));
-                 pushclass (t, 0);
-                 TYPE_BEING_DEFINED (t) = 1;
-                 if (IS_AGGR_TYPE (t) && CLASSTYPE_USE_TEMPLATE (t))
-                   {
-                     if (CLASSTYPE_IMPLICIT_INSTANTIATION (t)
-                         && TYPE_SIZE (t) == NULL_TREE)
-                       {
-                         SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
-                         if (processing_template_decl)
-                           push_template_decl (TYPE_MAIN_DECL (t));
-                       }
-                     else if (CLASSTYPE_TEMPLATE_INSTANTIATION (t))
-                       cp_error ("specialization after instantiation of `%T'", t);
-                   }
-                 /* Reset the interface data, at the earliest possible
-                    moment, as it might have been set via a class foo;
-                    before.  */
-                 /* Don't change signatures.  */
-                 if (! IS_SIGNATURE (t))
-                   {
-                     extern tree pending_vtables;
-                     int needs_writing;
-                     tree name = TYPE_IDENTIFIER (t);
-
-                     if (! ANON_AGGRNAME_P (name))
-                       {
-                         CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
-                         SET_CLASSTYPE_INTERFACE_UNKNOWN_X
-                           (t, interface_unknown);
-                       }
-
-                     /* Record how to set the access of this class's
-                        virtual functions.  If write_virtuals == 2 or 3, then
-                        inline virtuals are ``extern inline''.  */
-                     switch (write_virtuals)
-                       {
-                       case 0:
-                       case 1:
-                         needs_writing = 1;
-                         break;
-                       case 2:
-                         needs_writing = !! value_member (name, pending_vtables);
-                         break;
-                       case 3:
-                         needs_writing = ! CLASSTYPE_INTERFACE_ONLY (t)
-                           && CLASSTYPE_INTERFACE_KNOWN (t);
-                         break;
-                       default:
-                         needs_writing = 0;
-                       }
-                     CLASSTYPE_VTABLE_NEEDS_WRITING (t) = needs_writing;
-                   }
-#if 0
-                 t = TYPE_IDENTIFIER (yyvsp[-1].ttype);
-                 if (t && IDENTIFIER_TEMPLATE (t))
-                   overload_template_name (t, 1);
-#endif
-               ;
-    break;}
-case 468:
-#line 2600 "parse.y"
-{
-                   yyval.ttype = build_self_reference ();
-               ;
-    break;}
-case 469:
-#line 2607 "parse.y"
-{ if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ;
-    break;}
-case 470:
-#line 2609 "parse.y"
-{
-                 if (current_aggr == signature_type_node)
-                   yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype);
-                 else
-                   yyval.ttype = build_tree_list (access_default_node, yyvsp[0].ttype);
-                 if (yyvsp[-1].ttype) yyval.ttype = tree_cons (access_public_node, yyvsp[-1].ttype, yyval.ttype);
-               ;
-    break;}
-case 471:
-#line 2617 "parse.y"
-{
-                 tree visspec = yyvsp[-2].ttype;
-
-                 if (current_aggr == signature_type_node)
-                   {
-                     error ("access specifier not allowed in signature");
-                     visspec = access_public_node;
-                   }
-                 yyval.ttype = chainon (yyval.ttype, build_tree_list (visspec, yyvsp[0].ttype));
-               ;
-    break;}
-case 472:
-#line 2628 "parse.y"
-{
-                 if (current_aggr == signature_type_node)
-                   error ("access specifier not allowed in signature");
-               ;
-    break;}
-case 473:
-#line 2638 "parse.y"
-{ if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; 
-               ;
-    break;}
-case 474:
-#line 2641 "parse.y"
-{ /* In pushdecl, we created a reverse list of names
-                    in this binding level.  Make sure that the chain
-                    of what we're trying to add isn't the item itself
-                    (which can happen with what pushdecl's doing).  */
-                 if (yyvsp[0].ttype != NULL_TREE && yyvsp[0].ttype != void_type_node)
-                   {
-                     if (TREE_CHAIN (yyvsp[0].ttype) != yyval.ttype)
-                       yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
-                     else
-                       yyval.ttype = yyvsp[0].ttype;
-                   }
-               ;
-    break;}
-case 475:
-#line 2657 "parse.y"
-{ ;
-    break;}
-case 476:
-#line 2659 "parse.y"
-{ error ("missing ';' before right brace");
-                 yyungetc ('}', 0); ;
-    break;}
-case 477:
-#line 2664 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
-case 478:
-#line 2666 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
-case 479:
-#line 2668 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
-case 480:
-#line 2670 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
-case 481:
-#line 2672 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 482:
-#line 2674 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 483:
-#line 2683 "parse.y"
-{ yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 484:
-#line 2685 "parse.y"
-{ yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 485:
-#line 2687 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
-    break;}
-case 486:
-#line 2690 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
-    break;}
-case 487:
-#line 2693 "parse.y"
-{ yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 488:
-#line 2695 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 489:
-#line 2706 "parse.y"
-{ tree specs, attrs;
-                 split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
-                 yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, attrs)); ;
-    break;}
-case 490:
-#line 2711 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
-    break;}
-case 491:
-#line 2714 "parse.y"
-{ yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
-    break;}
-case 492:
-#line 2721 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 494:
-#line 2724 "parse.y"
-{
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if (yyval.ttype == void_type_node)
-                   yyval.ttype = yyvsp[0].ttype;
-                 else
-                   yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 495:
-#line 2736 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 497:
-#line 2739 "parse.y"
-{
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if (yyval.ttype == void_type_node)
-                   yyval.ttype = yyvsp[0].ttype;
-                 else
-                   yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 502:
-#line 2761 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-4].ttype = current_declspecs;
-                 yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
-    break;}
-case 503:
-#line 2767 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-4].ttype = current_declspecs;
-                 yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 504:
-#line 2776 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-4].ttype = current_declspecs;
-                 yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
-    break;}
-case 505:
-#line 2782 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-4].ttype = current_declspecs;
-                 yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
-    break;}
-case 506:
-#line 2788 "parse.y"
-{ split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-4].ttype = current_declspecs;
-                 yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 507:
-#line 2794 "parse.y"
-{ split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
-                                    &prefix_attributes);
-                 yyvsp[-3].ttype = current_declspecs;
-                 yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 508:
-#line 2803 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
-    break;}
-case 509:
-#line 2806 "parse.y"
-{ yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 510:
-#line 2812 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
-    break;}
-case 511:
-#line 2815 "parse.y"
-{ yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 512:
-#line 2818 "parse.y"
-{ yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
-                 cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 514:
-#line 2829 "parse.y"
-{ TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 515:
-#line 2834 "parse.y"
-{ yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE); ;
-    break;}
-case 516:
-#line 2836 "parse.y"
-{ yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 517:
-#line 2842 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 518:
-#line 2845 "parse.y"
-{ yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 519:
-#line 2850 "parse.y"
-{
-                 if (pedantic)
-                   pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
-                 yyval.ftype.t = build_parse_node (ARRAY_REF, TREE_VALUE (yyvsp[-4].ftype.t), yyvsp[-1].ttype);
-                 yyval.ftype.t = build_decl_list (TREE_PURPOSE (yyvsp[-4].ftype.t), yyval.ftype.t);
-                 yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
-               ;
-    break;}
-case 520:
-#line 2861 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 521:
-#line 2863 "parse.y"
-{ yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 522:
-#line 2868 "parse.y"
-{ yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 523:
-#line 2871 "parse.y"
-{ yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 524:
-#line 2880 "parse.y"
-{ yyval.itype = suspend_momentary (); ;
-    break;}
-case 525:
-#line 2885 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 526:
-#line 2891 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 527:
-#line 2893 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 528:
-#line 2895 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
-    break;}
-case 529:
-#line 2897 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
-    break;}
-case 530:
-#line 2904 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 531:
-#line 2906 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 532:
-#line 2908 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 533:
-#line 2910 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 534:
-#line 2912 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 536:
-#line 2920 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
-                   {
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE (yyvsp[0].ttype))
-                       {
-                         /* Be sure to get an inherited typedef.  */
-                         yyval.ttype = lookup_name (yyvsp[0].ttype, 1);
-                         /* Remember that this name has been used in the class
-                            definition, as per [class.scope0] */
-                         pushdecl_class_level (yyval.ttype);
-                       }
-                     else
-                       yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype);
-                   }
-                 else
-                   yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 537:
-#line 2940 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
-                   yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype);
-                 else
-                   yyval.ttype = yyvsp[0].ttype;
-                 got_scope = NULL_TREE;
-               ;
-    break;}
-case 539:
-#line 2949 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 540:
-#line 2954 "parse.y"
-{ yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
-    break;}
-case 541:
-#line 2959 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 542:
-#line 2961 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 543:
-#line 2963 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
-    break;}
-case 544:
-#line 2965 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 545:
-#line 2967 "parse.y"
-{ push_nested_class (yyvsp[-1].ttype, 3);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
-                 TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
-    break;}
-case 547:
-#line 2978 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 548:
-#line 2980 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 549:
-#line 2982 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 550:
-#line 2984 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 551:
-#line 2986 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 553:
-#line 2994 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 554:
-#line 2996 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 555:
-#line 2998 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 556:
-#line 3000 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 557:
-#line 3002 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 559:
-#line 3010 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 560:
-#line 3012 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 561:
-#line 3014 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 562:
-#line 3016 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
-    break;}
-case 563:
-#line 3018 "parse.y"
-{ if (OP0 (yyval.ttype) != current_class_type)
-                   {
-                     push_nested_class (OP0 (yyval.ttype), 3);
-                     TREE_COMPLEXITY (yyval.ttype) = current_class_depth;
-                   }
-               ;
-    break;}
-case 564:
-#line 3028 "parse.y"
-{ got_scope = NULL_TREE;
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 565:
-#line 3034 "parse.y"
-{ got_scope = NULL_TREE;
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 567:
-#line 3041 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 568:
-#line 3046 "parse.y"
-{ yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
-    break;}
-case 569:
-#line 3048 "parse.y"
-{ yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
-    break;}
-case 570:
-#line 3050 "parse.y"
-{ yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 575:
-#line 3062 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 576:
-#line 3069 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
-                   {
-                     yyval.ttype = lastiddecl;
-                     /* Remember that this name has been used in the class
-                        definition, as per [class.scope0] */
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE (yyvsp[-1].ttype))
-                       pushdecl_class_level (yyval.ttype);
-                   }
-                 got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
-               ;
-    break;}
-case 577:
-#line 3083 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
-                   yyval.ttype = lastiddecl;
-                 got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
-               ;
-    break;}
-case 578:
-#line 3089 "parse.y"
-{
-                 if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
-                   yyval.ttype = lastiddecl;
-                 if (TREE_CODE (yyval.ttype) == NAMESPACE_DECL
-                     && DECL_NAME (yyval.ttype) == get_identifier ("std"))
-                   got_scope = void_type_node;
-                 else
-                   got_scope = yyval.ttype;
-               ;
-    break;}
-case 579:
-#line 3099 "parse.y"
-{ got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
-    break;}
-case 580:
-#line 3114 "parse.y"
-{
-                 if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
-                   yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype);
-                 else
-                   yyval.ttype = yyvsp[0].ttype;
-                 got_scope = NULL_TREE;
-               ;
-    break;}
-case 582:
-#line 3123 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 583:
-#line 3128 "parse.y"
-{ got_scope = NULL_TREE; ;
-    break;}
-case 584:
-#line 3130 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
-    break;}
-case 585:
-#line 3137 "parse.y"
-{ got_scope = void_type_node; ;
-    break;}
-case 586:
-#line 3143 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 587:
-#line 3145 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 588:
-#line 3147 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 589:
-#line 3149 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 590:
-#line 3151 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
-               ;
-    break;}
-case 591:
-#line 3155 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 593:
-#line 3164 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 594:
-#line 3166 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 595:
-#line 3172 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 596:
-#line 3174 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 597:
-#line 3176 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
-    break;}
-case 598:
-#line 3178 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
-    break;}
-case 599:
-#line 3180 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 600:
-#line 3182 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 601:
-#line 3184 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
-    break;}
-case 602:
-#line 3186 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
-    break;}
-case 603:
-#line 3188 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
-               ;
-    break;}
-case 604:
-#line 3192 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 606:
-#line 3201 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 608:
-#line 3205 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 609:
-#line 3207 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 610:
-#line 3209 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 611:
-#line 3211 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
-    break;}
-case 612:
-#line 3213 "parse.y"
-{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 613:
-#line 3215 "parse.y"
-{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 614:
-#line 3217 "parse.y"
-{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 615:
-#line 3219 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 616:
-#line 3221 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
-    break;}
-case 622:
-#line 3245 "parse.y"
-{ do_pushlevel (); ;
-    break;}
-case 623:
-#line 3250 "parse.y"
-{ yyval.ttype = do_poplevel (); ;
-    break;}
-case 625:
-#line 3258 "parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C++ forbids label declarations"); ;
-    break;}
-case 628:
-#line 3269 "parse.y"
-{ tree link;
-                 for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
-                   {
-                     tree label = shadow_label (TREE_VALUE (link));
-                     C_DECLARED_LABEL_FLAG (label) = 1;
-                     declare_nonlocal_label (label);
-                   }
-               ;
-    break;}
-case 629:
-#line 3283 "parse.y"
-{;
-    break;}
-case 631:
-#line 3289 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (COMPOUND_STMT, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-               ;
-    break;}
-case 632:
-#line 3297 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-3].ttype, 0) = TREE_CHAIN (yyvsp[-3].ttype);
-                     TREE_CHAIN (yyvsp[-3].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-3].ttype;
-                   }
-                 yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 633:
-#line 3310 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (IF_STMT, NULL_TREE, NULL_TREE,
-                                               NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                  cond_stmt_keyword = "if";
-               ;
-    break;}
-case 634:
-#line 3320 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     if (last_tree != yyvsp[-2].ttype)
-                       {
-                         TREE_OPERAND (yyvsp[-2].ttype, 0) = last_tree;
-                         TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                         last_tree = yyvsp[-2].ttype;
-                       }
-                     else
-                       TREE_OPERAND (yyvsp[-2].ttype, 0) = yyvsp[0].ttype;
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     expand_start_cond (yyvsp[0].ttype, 0);
-                   }
-               ;
-    break;}
-case 635:
-#line 3339 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-4].ttype, 1) = TREE_CHAIN (yyvsp[-4].ttype);
-                     TREE_CHAIN (yyvsp[-4].ttype) = NULL_TREE;
-                     yyval.ttype = last_tree = yyvsp[-4].ttype;
-                   }
-               ;
-    break;}
-case 636:
-#line 3351 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 637:
-#line 3353 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (COMPOUND_STMT, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-               ;
-    break;}
-case 638:
-#line 3361 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-2].ttype, 0) = TREE_CHAIN (yyvsp[-2].ttype);
-                     TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-2].ttype;
-                   }
-                 yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 639:
-#line 3374 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 641:
-#line 3380 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 642:
-#line 3382 "parse.y"
-{
-                 tree expr = yyvsp[-1].ttype;
-                 if (! processing_template_decl)
-                   {
-                     emit_line_note (input_filename, lineno);
-                     /* Do default conversion if safe and possibly important,
-                        in case within ({...}).  */
-                     if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
-                          && lvalue_p (expr))
-                         || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
-                       expr = default_conversion (expr);
-                   }
-                 cplus_expand_expr_stmt (expr);
-                 clear_momentary ();
-                 finish_stmt (); ;
-    break;}
-case 643:
-#line 3398 "parse.y"
-{ if (! processing_template_decl) expand_start_else (); ;
-    break;}
-case 644:
-#line 3400 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-3].ttype, 2) = TREE_CHAIN (yyvsp[-3].ttype);
-                     TREE_CHAIN (yyvsp[-3].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-3].ttype;
-                   }
-                 else
-                   expand_end_cond ();
-               ;
-    break;}
-case 645:
-#line 3411 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 646:
-#line 3413 "parse.y"
-{ if (! processing_template_decl) expand_end_cond ();
-                 do_poplevel ();
-                 finish_stmt (); ;
-    break;}
-case 647:
-#line 3417 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (WHILE_STMT, NULL_TREE, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                 else
-                   {
-                     emit_nop ();
-                     emit_line_note (input_filename, lineno);
-                     expand_start_loop (1); 
-                   }
-                 cond_stmt_keyword = "while";
-               ;
-    break;}
-case 648:
-#line 3432 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     if (last_tree != yyvsp[-2].ttype)
-                       {
-                         TREE_OPERAND (yyvsp[-2].ttype, 0) = last_tree;
-                         TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                         last_tree = yyvsp[-2].ttype;
-                       }
-                     else
-                       TREE_OPERAND (yyvsp[-2].ttype, 0) = yyvsp[0].ttype;
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     expand_exit_loop_if_false (0, yyvsp[0].ttype);
-                   }
-               ;
-    break;}
-case 649:
-#line 3451 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-5].ttype, 1) = TREE_CHAIN (yyvsp[-5].ttype);
-                     TREE_CHAIN (yyvsp[-5].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-5].ttype;
-                   }
-                 else
-                   expand_end_loop ();
-                 finish_stmt ();
-               ;
-    break;}
-case 650:
-#line 3463 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (DO_STMT, NULL_TREE, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                 else
-                   {
-                     emit_nop ();
-                     emit_line_note (input_filename, lineno);
-                     expand_start_loop_continue_elsewhere (1);
-                   }
-               ;
-    break;}
-case 651:
-#line 3477 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-2].ttype, 0) = TREE_CHAIN (yyvsp[-2].ttype);
-                     TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-2].ttype;
-                   }
-                 else
-                   {
-                     expand_loop_continue_here ();
-                     cond_stmt_keyword = "do";
-                   }
-               ;
-    break;}
-case 652:
-#line 3491 "parse.y"
-{
-                 if (processing_template_decl)
-                   TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype;
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     expand_exit_loop_if_false (0, yyvsp[-1].ttype);
-                     expand_end_loop ();
-                   }
-                 clear_momentary ();
-                 finish_stmt ();
-               ;
-    break;}
-case 653:
-#line 3504 "parse.y"
-{ if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, 
-                                               NULL_TREE, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                  else
-                   emit_line_note (input_filename, lineno);
-                 if (flag_new_for_scope > 0)
-                   {
-                     /* Conditionalize .pushlevel */
-                     pushlevel (0);
-                     note_level_for_for ();
-                     clear_last_expr ();
-                     push_momentary ();
-                     expand_start_bindings (0);
-                   }
-               ;
-    break;}
-case 654:
-#line 3523 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     if (last_tree != yyvsp[-2].ttype)
-                       {
-                         TREE_OPERAND (yyvsp[-2].ttype, 0) = TREE_CHAIN (yyvsp[-2].ttype);
-                         TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                         last_tree = yyvsp[-2].ttype;
-                       }
-                   }
-                 else
-                   {
-                     emit_nop ();
-                     emit_line_note (input_filename, lineno);
-                     expand_start_loop_continue_elsewhere (1); 
-                   }
-               ;
-    break;}
-case 655:
-#line 3541 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     if (last_tree != yyvsp[-6].ttype)
-                       {
-                         TREE_OPERAND (yyvsp[-6].ttype, 1) = last_tree;
-                         TREE_CHAIN (yyvsp[-6].ttype) = NULL_TREE;
-                         last_tree = yyvsp[-6].ttype;
-                       }
-                     else
-                       TREE_OPERAND (yyvsp[-6].ttype, 1) = yyvsp[-1].ttype;
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     if (yyvsp[-1].ttype) expand_exit_loop_if_false (0, yyvsp[-1].ttype);
-                   }
-               ;
-    break;}
-case 656:
-#line 3562 "parse.y"
-{
-                 if (processing_template_decl)
-                   TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype;
-                 push_momentary ();
-               ;
-    break;}
-case 657:
-#line 3568 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-12].ttype, 3) = TREE_CHAIN (yyvsp[-12].ttype);
-                     TREE_CHAIN (yyvsp[-12].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-12].ttype;
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     expand_loop_continue_here ();
-                     if (yyvsp[-4].ttype) cplus_expand_expr_stmt (yyvsp[-4].ttype);
-                     expand_end_loop ();
-                   }
-                 pop_momentary ();
-                 if (flag_new_for_scope > 0)
-                   {
-                     do_poplevel ();
-                   }
-                 finish_stmt (); ;
-    break;}
-case 658:
-#line 3589 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (SWITCH_STMT, yyvsp[-1].ttype, NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     c_expand_start_case (yyvsp[-1].ttype);
-                   }
-                 push_switch ();
-                 /* Don't let the tree nodes for $4 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-               ;
-    break;}
-case 659:
-#line 3606 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-1].ttype, 1) = TREE_CHAIN (yyvsp[-1].ttype);
-                     TREE_CHAIN (yyvsp[-1].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-1].ttype;
-                   }
-                 else
-                   expand_end_case (yyvsp[-3].ttype);
-                 pop_momentary ();
-                 pop_switch (); 
-               ;
-    break;}
-case 660:
-#line 3619 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 661:
-#line 3621 "parse.y"
-{ do_case (yyvsp[-1].ttype, NULL_TREE); ;
-    break;}
-case 663:
-#line 3624 "parse.y"
-{ do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 665:
-#line 3627 "parse.y"
-{ do_case (NULL_TREE, NULL_TREE); ;
-    break;}
-case 667:
-#line 3630 "parse.y"
-{ emit_line_note (input_filename, lineno);
-                 if (processing_template_decl)
-                   add_tree (build_min_nt (BREAK_STMT));
-                 else if ( ! expand_exit_something ())
-                   error ("break statement not within loop or switch"); ;
-    break;}
-case 668:
-#line 3636 "parse.y"
-{ emit_line_note (input_filename, lineno);
-                 if (processing_template_decl)
-                   add_tree (build_min_nt (CONTINUE_STMT));
-                 else if (! expand_continue_loop (0))
-                   error ("continue statement not within a loop"); ;
-    break;}
-case 669:
-#line 3642 "parse.y"
-{ emit_line_note (input_filename, lineno);
-                 c_expand_return (NULL_TREE); ;
-    break;}
-case 670:
-#line 3645 "parse.y"
-{ emit_line_note (input_filename, lineno);
-                 c_expand_return (yyvsp[-1].ttype);
-                 finish_stmt ();
-               ;
-    break;}
-case 671:
-#line 3650 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
-                 emit_line_note (input_filename, lineno);
-                 expand_asm (yyvsp[-2].ttype);
-                 finish_stmt ();
-               ;
-    break;}
-case 672:
-#line 3657 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype);
-                 emit_line_note (input_filename, lineno);
-                 c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
-                                        yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno);
-                 finish_stmt ();
-               ;
-    break;}
-case 673:
-#line 3666 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype);
-                 emit_line_note (input_filename, lineno);
-                 c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
-                                        yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno);
-                 finish_stmt ();
-               ;
-    break;}
-case 674:
-#line 3676 "parse.y"
-{ if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype);
-                 emit_line_note (input_filename, lineno);
-                 c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
-                                        yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno);
-                 finish_stmt ();
-               ;
-    break;}
-case 675:
-#line 3684 "parse.y"
-{
-                 if (processing_template_decl)
-                   add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
-                 else
-                   { emit_line_note (input_filename, lineno);
-                     expand_computed_goto (yyvsp[-1].ttype); }
-               ;
-    break;}
-case 676:
-#line 3692 "parse.y"
-{
-                 if (processing_template_decl)
-                   add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype));
-                 else
-                   {
-                     tree decl;
-                     emit_line_note (input_filename, lineno);
-                     decl = lookup_label (yyvsp[-1].ttype);
-                     TREE_USED (decl) = 1;
-                     expand_goto (decl); 
-                   }
-               ;
-    break;}
-case 677:
-#line 3705 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 678:
-#line 3707 "parse.y"
-{ error ("label must be followed by statement");
-                 yyungetc ('}', 0);
-                 finish_stmt (); ;
-    break;}
-case 679:
-#line 3711 "parse.y"
-{ finish_stmt (); ;
-    break;}
-case 681:
-#line 3717 "parse.y"
-{
-                 if (! current_function_parms_stored)
-                   store_parm_decls ();
-                 expand_start_early_try_stmts ();
-               ;
-    break;}
-case 682:
-#line 3723 "parse.y"
-{ expand_start_all_catch (); ;
-    break;}
-case 683:
-#line 3725 "parse.y"
-{
-                 int nested = (hack_decl_function_context
-                               (current_function_decl) != NULL_TREE);
-                 expand_end_all_catch ();
-                 finish_function (lineno, (int)yyvsp[-3].itype, nested);
-               ;
-    break;}
-case 684:
-#line 3735 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (TRY_BLOCK, NULL_TREE,
-                                               NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-                 else
-                   {
-                     emit_line_note (input_filename, lineno);
-                     expand_start_try_stmts ();
-                   }
-               ;
-    break;}
-case 685:
-#line 3749 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-1].ttype, 0) = TREE_CHAIN (yyvsp[-1].ttype);
-                     TREE_CHAIN (yyvsp[-1].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-1].ttype;
-                   }
-                 else
-                   expand_start_all_catch ();
-               ;
-    break;}
-case 686:
-#line 3760 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-3].ttype, 1) = TREE_CHAIN (yyvsp[-3].ttype);
-                     TREE_CHAIN (yyvsp[-3].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-3].ttype;
-                   }
-                 else
-                   expand_end_all_catch ();
-               ;
-    break;}
-case 689:
-#line 3779 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     yyval.ttype = build_min_nt (HANDLER, NULL_TREE,
-                                               NULL_TREE);
-                     add_tree (yyval.ttype);
-                   }
-               ;
-    break;}
-case 690:
-#line 3788 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-2].ttype, 0) = TREE_CHAIN (yyvsp[-2].ttype);
-                     TREE_CHAIN (yyvsp[-2].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-2].ttype;
-                   }
-               ;
-    break;}
-case 691:
-#line 3797 "parse.y"
-{
-                 if (processing_template_decl)
-                   {
-                     TREE_OPERAND (yyvsp[-4].ttype, 1) = TREE_CHAIN (yyvsp[-4].ttype);
-                     TREE_CHAIN (yyvsp[-4].ttype) = NULL_TREE;
-                     last_tree = yyvsp[-4].ttype;
-                   }
-                 else
-                   expand_end_catch_block ();
-               ;
-    break;}
-case 695:
-#line 3817 "parse.y"
-{ expand_start_catch_block (NULL_TREE, NULL_TREE); ;
-    break;}
-case 696:
-#line 3833 "parse.y"
-{ check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
-                 expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
-                                           TREE_VALUE (yyvsp[-1].ftype.t)); ;
-    break;}
-case 697:
-#line 3840 "parse.y"
-{ tree label;
-               do_label:
-                 label = define_label (input_filename, lineno, yyvsp[-1].ttype);
-                 if (label && ! minimal_parse_mode)
-                   expand_label (label);
-               ;
-    break;}
-case 698:
-#line 3847 "parse.y"
-{ goto do_label; ;
-    break;}
-case 699:
-#line 3849 "parse.y"
-{ goto do_label; ;
-    break;}
-case 700:
-#line 3851 "parse.y"
-{ goto do_label; ;
-    break;}
-case 701:
-#line 3856 "parse.y"
-{ if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
-    break;}
-case 703:
-#line 3859 "parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C++ forbids compound statements inside for initializations");
-               ;
-    break;}
-case 704:
-#line 3868 "parse.y"
-{ emit_line_note (input_filename, lineno);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 705:
-#line 3871 "parse.y"
-{ emit_line_note (input_filename, lineno); ;
-    break;}
-case 706:
-#line 3876 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 708:
-#line 3879 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 709:
-#line 3886 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 712:
-#line 3893 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
-    break;}
-case 713:
-#line 3898 "parse.y"
-{ yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
-    break;}
-case 714:
-#line 3903 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
-    break;}
-case 715:
-#line 3905 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
-    break;}
-case 716:
-#line 3916 "parse.y"
-{
-                 yyval.ttype = empty_parms();
-               ;
-    break;}
-case 718:
-#line 3921 "parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, void_list_node);
-                 TREE_PARMLIST (yyval.ttype) = 1; 
-                 check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
-    break;}
-case 719:
-#line 3930 "parse.y"
-{
-                 yyval.ttype = chainon (yyval.ttype, void_list_node);
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 720:
-#line 3935 "parse.y"
-{
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 721:
-#line 3940 "parse.y"
-{
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 722:
-#line 3944 "parse.y"
-{
-                 yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); 
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 723:
-#line 3949 "parse.y"
-{
-                 yyval.ttype = NULL_TREE;
-               ;
-    break;}
-case 724:
-#line 3953 "parse.y"
-{
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 725:
-#line 3957 "parse.y"
-{
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 726:
-#line 3961 "parse.y"
-{
-                 yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t);
-                 TREE_PARMLIST (yyval.ttype) = 1;
-               ;
-    break;}
-case 727:
-#line 3966 "parse.y"
-{
-                 /* This helps us recover from really nasty
-                    parse errors, for example, a missing right
-                    parenthesis.  */
-                 yyerror ("possibly missing ')'");
-                 yyval.ttype = chainon (yyval.ttype, void_list_node);
-                 TREE_PARMLIST (yyval.ttype) = 1;
-                 yyungetc (':', 0);
-                 yychar = ')';
-               ;
-    break;}
-case 728:
-#line 3977 "parse.y"
-{
-                 /* This helps us recover from really nasty
-                    parse errors, for example, a missing right
-                    parenthesis.  */
-                 yyerror ("possibly missing ')'");
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node);
-                 TREE_PARMLIST (yyval.ttype) = 1;
-                 yyungetc (':', 0);
-                 yychar = ')';
-               ;
-    break;}
-case 729:
-#line 3992 "parse.y"
-{ maybe_snarf_defarg (); ;
-    break;}
-case 730:
-#line 3994 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 733:
-#line 4005 "parse.y"
-{ check_for_new_type ("in a parameter list", yyvsp[0].ftype);
-                 yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
-    break;}
-case 734:
-#line 4008 "parse.y"
-{ check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
-                 yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
-    break;}
-case 735:
-#line 4011 "parse.y"
-{ check_for_new_type ("in a parameter list", yyvsp[0].ftype);
-                 yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
-    break;}
-case 736:
-#line 4014 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 737:
-#line 4016 "parse.y"
-{ yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 739:
-#line 4022 "parse.y"
-{ check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
-                 yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
-    break;}
-case 740:
-#line 4032 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
-                 yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
-    break;}
-case 741:
-#line 4036 "parse.y"
-{ yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 742:
-#line 4039 "parse.y"
-{ yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 743:
-#line 4042 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ftype.t);
-                 yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
-    break;}
-case 744:
-#line 4046 "parse.y"
-{ tree specs = strip_attrs (yyvsp[0].ftype.t);
-                 yyval.ftype.t = build_tree_list (specs, NULL_TREE); 
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
-    break;}
-case 745:
-#line 4050 "parse.y"
-{ tree specs = strip_attrs (yyvsp[-1].ttype);
-                 yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); 
-                 yyval.ftype.new_type_flag = 0; ;
-    break;}
-case 746:
-#line 4057 "parse.y"
-{ yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
-                 yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
-    break;}
-case 747:
-#line 4060 "parse.y"
-{ yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
-                 yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;  ;
-    break;}
-case 750:
-#line 4071 "parse.y"
-{ see_typename (); ;
-    break;}
-case 751:
-#line 4076 "parse.y"
-{
-                 error ("type specifier omitted for parameter");
-                 yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
-               ;
-    break;}
-case 752:
-#line 4081 "parse.y"
-{
-                 error ("type specifier omitted for parameter");
-                 if (TREE_CODE (yyval.ttype) == SCOPE_REF
-                     && TREE_CODE (TREE_OPERAND (yyval.ttype, 0)) == TEMPLATE_TYPE_PARM)
-                   cp_error ("  perhaps you want `typename %E' to make it a type", yyval.ttype);
-                 yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
-               ;
-    break;}
-case 753:
-#line 4092 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 754:
-#line 4094 "parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 755:
-#line 4096 "parse.y"
-{ yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
-    break;}
-case 756:
-#line 4101 "parse.y"
-{ yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
-    break;}
-case 758:
-#line 4107 "parse.y"
-{
-                 TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
-                 yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 759:
-#line 4115 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 760:
-#line 4117 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 761:
-#line 4119 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 762:
-#line 4121 "parse.y"
-{ tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
-               ;
-    break;}
-case 763:
-#line 4128 "parse.y"
-{ got_scope = NULL_TREE; ;
-    break;}
-case 764:
-#line 4133 "parse.y"
-{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
-    break;}
-case 765:
-#line 4135 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
-    break;}
-case 766:
-#line 4137 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
-    break;}
-case 767:
-#line 4139 "parse.y"
-{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
-    break;}
-case 768:
-#line 4141 "parse.y"
-{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
-    break;}
-case 769:
-#line 4143 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
-    break;}
-case 770:
-#line 4145 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
-    break;}
-case 771:
-#line 4147 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
-    break;}
-case 772:
-#line 4149 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
-    break;}
-case 773:
-#line 4151 "parse.y"
-{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
-    break;}
-case 774:
-#line 4153 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
-    break;}
-case 775:
-#line 4155 "parse.y"
-{ yyval.ttype = ansi_opname[LT_EXPR]; ;
-    break;}
-case 776:
-#line 4157 "parse.y"
-{ yyval.ttype = ansi_opname[GT_EXPR]; ;
-    break;}
-case 777:
-#line 4159 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
-    break;}
-case 778:
-#line 4161 "parse.y"
-{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
-    break;}
-case 779:
-#line 4163 "parse.y"
-{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
-    break;}
-case 780:
-#line 4165 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
-    break;}
-case 781:
-#line 4167 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
-    break;}
-case 782:
-#line 4169 "parse.y"
-{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
-    break;}
-case 783:
-#line 4171 "parse.y"
-{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
-    break;}
-case 784:
-#line 4173 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
-    break;}
-case 785:
-#line 4175 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
-    break;}
-case 786:
-#line 4177 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
-    break;}
-case 787:
-#line 4179 "parse.y"
-{ yyval.ttype = ansi_opname[COND_EXPR]; ;
-    break;}
-case 788:
-#line 4181 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
-    break;}
-case 789:
-#line 4183 "parse.y"
-{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
-    break;}
-case 790:
-#line 4185 "parse.y"
-{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
-    break;}
-case 791:
-#line 4187 "parse.y"
-{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
-    break;}
-case 792:
-#line 4189 "parse.y"
-{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
-    break;}
-case 793:
-#line 4191 "parse.y"
-{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
-    break;}
-case 794:
-#line 4193 "parse.y"
-{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
-    break;}
-case 795:
-#line 4195 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
-    break;}
-case 796:
-#line 4197 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
-    break;}
-case 797:
-#line 4200 "parse.y"
-{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
-    break;}
-case 798:
-#line 4202 "parse.y"
-{ yyval.ttype = ansi_opname[ERROR_MARK]; ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/local/share/bison.simple"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
-
-  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yyerrlab:   /* here on detecting error */
-
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         int size = 0;
-         char *msg;
-         int x, count;
-
-         count = 0;
-         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-         for (x = (yyn < 0 ? -yyn : 0);
-              x < (sizeof(yytname) / sizeof(char *)); x++)
-           if (yycheck[x + yyn] == x)
-             size += strlen(yytname[x]) + 15, count++;
-         msg = (char *) malloc(size + 15);
-         if (msg != 0)
-           {
-             strcpy(msg, "parse error");
-
-             if (count < 5)
-               {
-                 count = 0;
-                 for (x = (yyn < 0 ? -yyn : 0);
-                      x < (sizeof(yytname) / sizeof(char *)); x++)
-                   if (yycheck[x + yyn] == x)
-                     {
-                       strcat(msg, count == 0 ? ", expecting `" : " or `");
-                       strcat(msg, yytname[x]);
-                       strcat(msg, "'");
-                       count++;
-                     }
-               }
-             yyerror(msg);
-             free(msg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exceeded");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror("parse error");
-    }
-
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-}
-#line 4205 "parse.y"
-
-
-#ifdef SPEW_DEBUG
-const char *
-debug_yytranslate (value)
-    int value;
-{
-  return yytname[YYTRANSLATE (value)];
-}
-
-#endif
diff --git a/gcc/cp/parse.h b/gcc/cp/parse.h
deleted file mode 100644 (file)
index 432766b..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
-#define        IDENTIFIER      258
-#define        TYPENAME        259
-#define        SELFNAME        260
-#define        SCSPEC  261
-#define        TYPESPEC        262
-#define        CV_QUALIFIER    263
-#define        CONSTANT        264
-#define        STRING  265
-#define        ELLIPSIS        266
-#define        SIZEOF  267
-#define        ENUM    268
-#define        IF      269
-#define        ELSE    270
-#define        WHILE   271
-#define        DO      272
-#define        FOR     273
-#define        SWITCH  274
-#define        CASE    275
-#define        DEFAULT 276
-#define        BREAK   277
-#define        CONTINUE        278
-#define        RETURN  279
-#define        GOTO    280
-#define        ASM_KEYWORD     281
-#define        GCC_ASM_KEYWORD 282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        SIGOF   285
-#define        ATTRIBUTE       286
-#define        EXTENSION       287
-#define        LABEL   288
-#define        REALPART        289
-#define        IMAGPART        290
-#define        AGGR    291
-#define        VISSPEC 292
-#define        DELETE  293
-#define        NEW     294
-#define        THIS    295
-#define        OPERATOR        296
-#define        CXX_TRUE        297
-#define        CXX_FALSE       298
-#define        NAMESPACE       299
-#define        TYPENAME_KEYWORD        300
-#define        USING   301
-#define        LEFT_RIGHT      302
-#define        TEMPLATE        303
-#define        TYPEID  304
-#define        DYNAMIC_CAST    305
-#define        STATIC_CAST     306
-#define        REINTERPRET_CAST        307
-#define        CONST_CAST      308
-#define        SCOPE   309
-#define        EMPTY   310
-#define        PTYPENAME       311
-#define        NSNAME  312
-#define        THROW   313
-#define        ASSIGN  314
-#define        OROR    315
-#define        ANDAND  316
-#define        MIN_MAX 317
-#define        EQCOMPARE       318
-#define        ARITHCOMPARE    319
-#define        LSHIFT  320
-#define        RSHIFT  321
-#define        POINTSAT_STAR   322
-#define        DOT_STAR        323
-#define        UNARY   324
-#define        PLUSPLUS        325
-#define        MINUSMINUS      326
-#define        HYPERUNARY      327
-#define        PAREN_STAR_PAREN        328
-#define        POINTSAT        329
-#define        TRY     330
-#define        CATCH   331
-#define        TYPENAME_ELLIPSIS       332
-#define        PRE_PARSED_FUNCTION_DECL        333
-#define        EXTERN_LANG_STRING      334
-#define        ALL     335
-#define        PRE_PARSED_CLASS_DECL   336
-#define        DEFARG  337
-#define        DEFARG_MARKER   338
-#define        TYPENAME_DEFN   339
-#define        IDENTIFIER_DEFN 340
-#define        PTYPENAME_DEFN  341
-#define        END_OF_LINE     342
-#define        END_OF_SAVED_INPUT      343
-
-
-extern YYSTYPE yylval;
-#define YYEMPTY                -2
diff --git a/gcc/cstamp-h.in b/gcc/cstamp-h.in
deleted file mode 100644 (file)
index 9788f70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/gcc/dyn-string.c b/gcc/dyn-string.c
new file mode 100644 (file)
index 0000000..cfcace9
--- /dev/null
@@ -0,0 +1,100 @@
+/* An abstract string datatype.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+   This file is part of GNU CC.
+   
+   GNU CC 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.
+
+   GNU CC 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 GNU CC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "gansidecl.h"
+#include "dyn-string.h"
+
+extern char *xmalloc ();
+extern char *xrealloc ();
+
+/* Create a new dynamic string capable of holding at least SPACE
+   characters, including the terminating NUL.  If SPACE is 0, it
+   will be silently increased to 1.  */
+
+dyn_string_t 
+dyn_string_new (space)
+     int space;
+{
+  dyn_string_t result = (dyn_string_t) xmalloc (sizeof (struct dyn_string));
+  if (space == 0)
+    /* We need at least one byte in which to store the terminating
+       NUL.  */
+    space = 1;
+
+  result->allocated = space;
+  result->s = (char*) xmalloc (space);
+  result->length = 0;
+  result->s[0] = '\0';
+
+  return result;
+}
+
+/* Free the memory used by DS.  */
+
+void 
+dyn_string_delete (ds)
+     dyn_string_t ds;
+{
+  free (ds->s);
+  free (ds);
+}
+
+/* Append the NUL-terminated string S to DS, resizing DS if
+   necessary.  */
+
+dyn_string_t 
+dyn_string_append (ds, s)
+     dyn_string_t ds;
+     char *s;
+{
+  int len = strlen (s);
+  dyn_string_resize (ds, ds->length + len + 1 /* '\0' */);
+  strcpy (ds->s + ds->length, s);
+  ds->length += len;
+
+  return ds;
+}
+
+/* Increase the capacity of DS so that it can hold at least SPACE
+   characters, including the terminating NUL.  This function will not
+   (at present) reduce the capacity of DS.  */
+
+dyn_string_t 
+dyn_string_resize (ds, space)
+     dyn_string_t ds;
+     int space;
+{
+  int new_allocated = ds->allocated;
+
+  while (space > new_allocated)
+    new_allocated *= 2;
+    
+  if (new_allocated != ds->allocated)
+    {
+      /* We actually need more space.  */
+      ds->allocated = new_allocated;
+      ds->s = (char*) xrealloc (ds->s, ds->allocated);
+    }
+
+  return ds;
+}
diff --git a/gcc/dyn-string.h b/gcc/dyn-string.h
new file mode 100644 (file)
index 0000000..ed8071f
--- /dev/null
@@ -0,0 +1,31 @@
+/* An abstract string datatype.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+   This file is part of GNU CC.
+   
+   GNU CC 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.
+
+   GNU CC 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 GNU CC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+typedef struct dyn_string
+{
+  int allocated; /* The amount of space allocated for the string.  */
+  int length; /* The actual length of the string.  */
+  char *s; /* The string itself, NUL-terminated.  */
+}* dyn_string_t;
+
+extern dyn_string_t dyn_string_new      PROTO((int));
+extern void dyn_string_delete           PROTO((dyn_string_t));
+extern dyn_string_t dyn_string_append   PROTO((dyn_string_t, char*));
+extern dyn_string_t dyn_string_resize   PROTO((dyn_string_t, int));
diff --git a/gcc/exgettext b/gcc/exgettext
new file mode 100755 (executable)
index 0000000..93d553c
--- /dev/null
@@ -0,0 +1,118 @@
+#! /bin/sh
+# Wrapper around gettext for GCC sources.
+# Copyright 1998 Free Software Foundation, Inc.
+
+# Written by Paul Eggert <eggert@twinsun.com>.
+
+# This file is part of GNU CC.
+
+# GNU CC 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.
+
+# GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Set environment to default value, if not already set.
+: ${AWK=awk}
+
+# The argument to this wrapper is the xgettext command to be executed.
+# Extract the xgettext program name from the rest of the command.
+xgettext=${1?}
+shift
+
+# Save work if we're just wrapping a no-op.
+case $xgettext in
+:) exit;;
+esac
+
+# Find the files to be scanned, and the directory to scan them from.
+directory=.
+files=
+for i
+do
+  case $i in
+  --directory=*)
+    directory=`expr " $i" : ' --directory=\(.*\)'`;;
+  --files-from=*)
+    files_from=`expr " $i" : ' --files-from=\(.*\)'`
+    files=`$AWK '/^[^#]/ { print }' $files_from`;;
+  esac
+done
+
+# Generate keyword options for xgettext,
+# by scanning for declarations of functions
+# whose parameter names end in "msgid".
+generate_keyword_options='
+  /^[A-Z_a-z].*\(.*msgid[,)]/ {
+
+    paren_index = index($0, "(")
+
+    name = substr($0, 1, paren_index - 1)
+    sub(/[^0-9A-Z_a-z]*$/, "", name)
+    sub(/[      ]+PARAMS/, "", name)
+    sub(/[      ]+VPROTO/, "", name)
+    sub(/.*[^0-9A-Z_a-z]/, "", name)
+
+    args = substr($0, paren_index)
+    sub(/msgid[,)].*/, "", args)
+    for (n = 1; sub(/^[^,]*,/, "", args); n++) {
+      continue;
+    }
+
+    if (n == 1) {
+      keyword = name
+    } else {
+      keyword = name ":" n
+    }
+
+    if (! keyword_seen[keyword]++) {
+      print "--keyword=" keyword
+    }
+  }
+'
+keyword_options=`(
+  cd $directory &&
+  $AWK "$generate_keyword_options" $files < /dev/null
+)` || exit
+
+# Generate temporary file reflecting the %e strings in the scanned files.
+tmp=tmp-emsgids.c
+
+generate_emsgids='
+  /%e.*}/ {
+    line = $0
+    while ((percent_index = index(line, "%e")) != 0) {
+      line = substr(line, percent_index + 2)
+      bracket_index = index(line, "}")
+      if (bracket_index == 0) {
+       continue
+      }
+      msgid = substr(line, 1, bracket_index - 1)
+      if (index(msgid, "%") != 0) {
+        continue
+      }
+      printf "#line %d \"%s\"\n", FNR, FILENAME
+      printf "_(\"%s\")\n", msgid
+      line = substr(line, bracket_index + 1)
+    }
+  }
+' 
+(cd $directory &&
+ $AWK "$generate_emsgids" $files < /dev/null
+) > $directory/$tmp || exit
+
+# Run the xgettext command, with temporary added as a file to scan.
+"$xgettext" $keyword_options ${1+"$@"} $tmp || exit
+
+# Clean up.
+# If we don't get here, `make clean' will remove this file later.
+rm -f $directory/$tmp
diff --git a/gcc/fixinc.wrap b/gcc/fixinc.wrap
new file mode 100755 (executable)
index 0000000..406c87e
--- /dev/null
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Create wrappers for include files instead of replacing them.
+#
+# This script is designed for systems whose include files can be fixed
+# by creating small wrappers around them.
+# An advantage of this method is that if the system include files are changed
+# (e.g. by OS upgrade), you need not re-run fixincludes.
+#
+# See README-fixinc for more information.
+
+# Directory containing the original header files.
+# (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
+INPUT=${2-${INPUT-/usr/include}}
+
+# Directory in which to store the results.
+LIB=${1?"fixincludes: output directory not specified"}
+
+# Make sure it exists.
+if [ ! -d $LIB ]; then
+  mkdir $LIB || exit 1
+fi
+
+echo Building fixed headers in ${LIB}
+
+# Some math.h files define struct exception, which conflicts with
+# the class exception defined in the C++ file std/stdexcept.h.  We
+# redefine it to __math_exception.  This is not a great fix, but I
+# haven't been able to think of anything better.
+file=math.h
+if [ -r $INPUT/$file ]; then
+  echo Checking $INPUT/$file
+  if grep 'struct exception' $INPUT/$file >/dev/null
+  then
+    echo Fixed $file
+    rm -f $LIB/$file
+    cat <<'__EOF__' >$LIB/$file
+#ifndef _MATH_H_WRAPPER
+#ifdef __cplusplus
+# define exception __math_exception
+#endif
+#include_next <math.h>
+#ifdef __cplusplus
+# undef exception
+#endif
+#define _MATH_H_WRAPPER
+#endif /* _MATH_H_WRAPPER */
+__EOF__
+    # Define _MATH_H_WRAPPER at the end of the wrapper, not the start,
+    # so that if #include_next gets another instance of the wrapper,
+    # this will follow the #include_next chain until we arrive at
+    # the real <math.h>.
+    chmod a+r $LIB/$file
+  fi
+fi
+
+# Avoid the definition of the bool type in the Solaris 2.x curses.h when using
+# g++, since it's now an official type in the C++ language.
+file=curses.h
+if [ -r $INPUT/$file ]; then
+  echo Checking $INPUT/$file
+  w='[  ]'
+  if grep "typedef$w$w*char$w$w*bool$w*;" $INPUT/$file >/dev/null
+  then
+    echo Fixed $file
+    rm -f $LIB/$file
+    cat <<'__EOF__' >$LIB/$file
+#ifndef _CURSES_H_WRAPPER
+#ifdef __cplusplus
+# define bool __curses_bool_t
+#endif
+#include_next <curses.h>
+#ifdef __cplusplus
+# undef bool
+#endif
+#define _CURSES_H_WRAPPER
+#endif /* _CURSES_H_WRAPPER */
+__EOF__
+    # Define _CURSES_H_WRAPPER at the end of the wrapper, not the start,
+    # so that if #include_next gets another instance of the wrapper,
+    # this will follow the #include_next chain until we arrive at
+    # the real <curses.h>.
+    chmod a+r $LIB/$file
+  fi
+fi
+
+exit 0
diff --git a/gcc/frame.c b/gcc/frame.c
new file mode 100644 (file)
index 0000000..a9e5e23
--- /dev/null
@@ -0,0 +1,607 @@
+/* Subroutines needed for unwinding stack frames for exception handling.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   Contributed by Jason Merrill <jason@cygnus.com>.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, if you link this library with other files,
+   some of which are compiled with GCC, to produce an executable,
+   this library does not by itself cause the resulting executable
+   to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.  */
+
+/* It is incorrect to include config.h here, because this file is being
+   compiled for the target, and hence definitions concerning only the host
+   do not apply.  */
+
+#include "tconfig.h"
+#include "defaults.h"
+
+#ifdef DWARF2_UNWIND_INFO
+#include "dwarf2.h"
+#include "frame.h"
+#include <stddef.h>
+
+/* Don't use `fancy_abort' here even if config.h says to use it.  */
+#ifdef abort
+#undef abort
+#endif
+
+/* Some types used by the DWARF 2 spec.  */
+
+typedef unsigned int uword __attribute__ ((mode (SI)));
+typedef unsigned int uaddr __attribute__ ((mode (pointer)));
+typedef int saddr __attribute__ ((mode (pointer)));
+typedef unsigned char ubyte;
+
+/* The first few fields of a CIE.  The CIE_id field is 0xffffffff for a CIE,
+   to distinguish it from a valid FDE.  FDEs are aligned to an addressing
+   unit boundary, but the fields within are unaligned.  */
+
+struct dwarf_cie {
+  uword length;
+  uaddr CIE_id;
+  ubyte version;
+  char augmentation[0];
+} __attribute__ ((packed, aligned (__alignof__ (void *))));
+
+/* The first few fields of an FDE.  */
+
+struct dwarf_fde {
+  uword length;
+  struct dwarf_cie* CIE_pointer;
+  void* pc_begin;
+  uaddr pc_range;
+} __attribute__ ((packed, aligned (__alignof__ (void *))));
+
+typedef struct dwarf_fde fde;
+
+/* The representation for an "object" to be searched for frame unwind info.
+   For targets with named sections, one object is an executable or shared
+   library; for other targets, one object is one translation unit.  */
+
+struct object {
+  void *pc_begin;
+  void *pc_end;
+  fde *fde_begin;
+  fde ** fde_array;
+  size_t count;
+  struct object *next;
+};
+
+static struct object *objects;
+
+/* The information we care about from a CIE.  */
+
+struct cie_info {
+  char *augmentation;
+  int code_align;
+  int data_align;
+  unsigned ra_regno;
+};
+
+/* The current unwind state, plus a saved copy for DW_CFA_remember_state.  */
+
+struct frame_state_internal
+{
+  struct frame_state s;
+  struct frame_state_internal *saved_state;
+};
+\f  
+/* Decode the unsigned LEB128 constant at BUF into the variable pointed to
+   by R, and return the new value of BUF.  */
+
+static void *
+decode_uleb128 (unsigned char *buf, unsigned *r)
+{
+  unsigned shift = 0;
+  unsigned result = 0;
+
+  while (1)
+    {
+      unsigned byte = *buf++;
+      result |= (byte & 0x7f) << shift;
+      if ((byte & 0x80) == 0)
+       break;
+      shift += 7;
+    }
+  *r = result;
+  return buf;
+}
+
+/* Decode the signed LEB128 constant at BUF into the variable pointed to
+   by R, and return the new value of BUF.  */
+
+static void *
+decode_sleb128 (unsigned char *buf, int *r)
+{
+  unsigned shift = 0;
+  unsigned result = 0;
+  unsigned byte;
+
+  while (1)
+    {
+      byte = *buf++;
+      result |= (byte & 0x7f) << shift;
+      shift += 7;
+      if ((byte & 0x80) == 0)
+       break;
+    }
+  if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
+    result |= - (1 << shift);
+
+  *r = result;
+  return buf;
+}
+
+/* Read unaligned data from the instruction buffer.  */
+
+union unaligned {
+  void *p;
+  unsigned b2 __attribute__ ((mode (HI)));
+  unsigned b4 __attribute__ ((mode (SI)));
+  unsigned b8 __attribute__ ((mode (DI)));
+} __attribute__ ((packed));
+static inline void *
+read_pointer (void *p)
+{ union unaligned *up = p; return up->p; }
+static inline unsigned
+read_1byte (void *p)
+{ return *(unsigned char *)p; }
+static inline unsigned
+read_2byte (void *p)
+{ union unaligned *up = p; return up->b2; }
+static inline unsigned
+read_4byte (void *p)
+{ union unaligned *up = p; return up->b4; }
+static inline unsigned long
+read_8byte (void *p)
+{ union unaligned *up = p; return up->b8; }
+\f
+/* Ordering function for FDEs.  Functions can't overlap, so we just compare
+   their starting addresses.  */
+
+static inline saddr
+fde_compare (fde *x, fde *y)
+{
+  return (saddr)x->pc_begin - (saddr)y->pc_begin;
+}
+
+/* Return the address of the FDE after P.  */
+
+static inline fde *
+next_fde (fde *p)
+{
+  return (fde *)(((char *)p) + p->length + sizeof (p->length));
+}
+
+/* One iteration of an insertion sort, for adding new FDEs to the array.
+   Usually the new FDE will go in at the end, so we can expect close to
+   O(n) performance.  If this turns out to be overly optimistic, we can have
+   the linker sort the FDEs so we don't have to do it at run time.  */
+
+static void
+fde_insert (fde **array, size_t i, fde *this_fde)
+{
+  array[i] = this_fde;
+
+  for (; i > 0 && fde_compare (array[i], array[i-1]) < 0; --i)
+    {
+      this_fde = array[i];
+      array[i] = array[i-1];
+      array[i-1] = this_fde;
+    }
+}
+
+static size_t
+count_fdes (fde *this_fde)
+{
+  size_t count;
+
+  for (count = 0; this_fde->length != 0; this_fde = next_fde (this_fde))
+    {
+      /* Skip CIEs.  */
+      if ((uaddr)(this_fde->CIE_pointer) == (uaddr)-1)
+       continue;
+
+      ++count;
+    }
+
+  return count;
+}
+
+static void
+add_fdes (fde *this_fde, fde **array, size_t *i_ptr,
+         void **beg_ptr, void **end_ptr)
+{
+  size_t i = *i_ptr;
+  void *pc_begin = *beg_ptr;
+  void *pc_end = *end_ptr;
+
+  for (; this_fde->length != 0; this_fde = next_fde (this_fde))
+    {
+      /* Skip CIEs.  */
+      if ((uaddr)(this_fde->CIE_pointer) == (uaddr)-1)
+       continue;
+
+      fde_insert (array, i++, this_fde);
+
+      if (this_fde->pc_begin < pc_begin)
+       pc_begin = this_fde->pc_begin;
+      if (this_fde->pc_begin + this_fde->pc_range > pc_end)
+       pc_end = this_fde->pc_begin + this_fde->pc_range;
+    }
+
+  *i_ptr = i;
+  *beg_ptr = pc_begin;
+  *end_ptr = pc_end;
+}
+
+/* Set up a sorted array of pointers to FDEs for a loaded object.  We
+   count up the entries before allocating the array because it's likely to
+   be faster.  */
+
+static void
+frame_init (struct object* ob)
+{
+  fde *this_fde;
+  size_t count;
+  fde **array;
+  void *pc_begin, *pc_end;
+
+  if (ob->fde_array)
+    {
+      fde **p = ob->fde_array;
+      for (count = 0; *p; ++p)
+       count += count_fdes (*p);
+    }
+  else
+    count = count_fdes (ob->fde_begin);
+
+  ob->count = count;
+  array = (fde **) malloc (sizeof (fde *) * count);
+
+  pc_begin = (void*)(uaddr)-1;
+  pc_end = 0;
+  count = 0;
+
+  if (ob->fde_array)
+    {
+      fde **p = ob->fde_array;
+      for (; *p; ++p)
+       add_fdes (*p, array, &count, &pc_begin, &pc_end);
+    }
+  else
+    add_fdes (ob->fde_begin, array, &count, &pc_begin, &pc_end);
+
+  ob->fde_array = array;
+  ob->pc_begin = pc_begin;
+  ob->pc_end = pc_end;
+}
+
+/* Return a pointer to the FDE for the function containing PC.  */
+
+static fde *
+find_fde (void *pc)
+{
+  struct object *ob;
+  size_t lo, hi;
+
+  for (ob = objects; ob; ob = ob->next)
+    {
+      if (ob->pc_begin == 0)
+       frame_init (ob);
+      if (pc >= ob->pc_begin && pc < ob->pc_end)
+       break;
+    }
+
+  if (ob == 0)
+    return 0;
+
+  /* Standard binary search algorithm.  */
+  for (lo = 0, hi = ob->count; lo < hi; )
+    {
+      size_t i = (lo + hi) / 2;
+      fde *f = ob->fde_array[i];
+
+      if (pc < f->pc_begin)
+       hi = i;
+      else if (pc > f->pc_begin + f->pc_range)
+       lo = i + 1;
+      else
+       return f;
+    }
+
+  return 0;
+}
+\f
+/* Extract any interesting information from the CIE for the translation
+   unit F belongs to.  */
+
+static void *
+extract_cie_info (fde *f, struct cie_info *c)
+{
+  void *p;
+  int i;
+
+  c->augmentation = f->CIE_pointer->augmentation;
+
+  if (strcmp (c->augmentation, "") != 0
+      && strcmp (c->augmentation, "e") != 0
+      && c->augmentation[0] != 'z')
+    return 0;
+
+  p = c->augmentation + strlen (c->augmentation) + 1;
+
+  p = decode_uleb128 (p, &c->code_align);
+  p = decode_sleb128 (p, &c->data_align);
+  c->ra_regno = *(unsigned char *)p++;
+
+  /* If the augmentation starts with 'z', we now see the length of the
+     augmentation fields.  */
+  if (c->augmentation[0] == 'z')
+    {
+      p = decode_uleb128 (p, &i);
+      p += i;
+    }
+
+  return p;
+}
+
+/* Decode one instruction's worth of of DWARF 2 call frame information.
+   Used by __frame_state_for.  Takes pointers P to the instruction to
+   decode, STATE to the current register unwind information, INFO to the
+   current CIE information, and PC to the current PC value.  Returns a
+   pointer to the next instruction.  */
+
+static void *
+execute_cfa_insn (void *p, struct frame_state_internal *state,
+                 struct cie_info *info, void **pc)
+{
+  unsigned insn = *(unsigned char *)p++;
+  unsigned reg;
+  int offset;
+
+  if (insn & DW_CFA_advance_loc)
+    *pc += ((insn & 0x3f) * info->code_align);
+  else if (insn & DW_CFA_offset)
+    {
+      reg = (insn & 0x3f);
+      p = decode_uleb128 (p, &offset);
+      offset *= info->data_align;
+      state->s.saved[reg] = REG_SAVED_OFFSET;
+      state->s.reg_or_offset[reg] = offset;
+    }
+  else if (insn & DW_CFA_restore)
+    {
+      reg = (insn & 0x3f);
+      state->s.saved[reg] = REG_UNSAVED;
+    }
+  else switch (insn)
+    {
+    case DW_CFA_set_loc:
+      *pc = read_pointer (p);
+      p += sizeof (void *);
+      break;
+    case DW_CFA_advance_loc1:
+      *pc += read_1byte (p);
+      p += 1;
+      break;
+    case DW_CFA_advance_loc2:
+      *pc += read_2byte (p);
+      p += 2;
+      break;
+    case DW_CFA_advance_loc4:
+      *pc += read_4byte (p);
+      p += 4;
+      break;
+
+    case DW_CFA_offset_extended:
+      p = decode_uleb128 (p, &reg);
+      p = decode_uleb128 (p, &offset);
+      offset *= info->data_align;
+      state->s.saved[reg] = REG_SAVED_OFFSET;
+      state->s.reg_or_offset[reg] = offset;
+      break;
+    case DW_CFA_restore_extended:
+      p = decode_uleb128 (p, &reg);
+      state->s.saved[reg] = REG_UNSAVED;
+      break;
+
+    case DW_CFA_undefined:
+    case DW_CFA_same_value:
+    case DW_CFA_nop:
+      break;
+
+    case DW_CFA_register:
+      {
+       unsigned reg2;
+       p = decode_uleb128 (p, &reg);
+       p = decode_uleb128 (p, &reg2);
+       state->s.saved[reg] = REG_SAVED_REG;
+       state->s.reg_or_offset[reg] = reg2;
+      }
+      break;
+
+    case DW_CFA_def_cfa:
+      p = decode_uleb128 (p, &reg);
+      p = decode_uleb128 (p, &offset);
+      state->s.cfa_reg = reg;
+      state->s.cfa_offset = offset;
+      break;
+    case DW_CFA_def_cfa_register:
+      p = decode_uleb128 (p, &reg);
+      state->s.cfa_reg = reg;
+      break;
+    case DW_CFA_def_cfa_offset:
+      p = decode_uleb128 (p, &offset);
+      state->s.cfa_offset = offset;
+      break;
+      
+    case DW_CFA_remember_state:
+      {
+       struct frame_state_internal *save =
+         (struct frame_state_internal *)
+         malloc (sizeof (struct frame_state_internal));
+       memcpy (save, state, sizeof (struct frame_state_internal));
+       state->saved_state = save;
+      }
+      break;
+    case DW_CFA_restore_state:
+      {
+       struct frame_state_internal *save = state->saved_state;
+       memcpy (state, save, sizeof (struct frame_state_internal));
+       free (save);
+      }
+      break;
+
+      /* FIXME: Hardcoded for SPARC register window configuration.  */
+    case DW_CFA_GNU_window_save:
+      for (reg = 16; reg < 32; ++reg)
+       {
+         state->s.saved[reg] = REG_SAVED_OFFSET;
+         state->s.reg_or_offset[reg] = (reg - 16) * sizeof (void *);
+       }
+      break;
+
+    case DW_CFA_GNU_args_size:
+      p = decode_uleb128 (p, &offset);
+      state->s.args_size = offset;
+      break;
+
+    default:
+      abort ();
+    }
+  return p;
+}
+\f
+/* Called from crtbegin.o to register the unwind info for an object.  */
+
+void
+__register_frame (void *begin)
+{
+  struct object *ob = (struct object *) malloc (sizeof (struct object));
+
+  ob->fde_begin = begin;
+
+  ob->pc_begin = ob->pc_end = 0;
+  ob->fde_array = 0;
+  ob->count = 0;
+
+  ob->next = objects;
+  objects = ob;
+}
+
+/* Similar, but BEGIN is actually a pointer to a table of unwind entries
+   for different translation units.  Called from the file generated by
+   collect2.  */
+
+void
+__register_frame_table (void *begin)
+{
+  struct object *ob = (struct object *) malloc (sizeof (struct object));
+
+  ob->fde_begin = begin;
+  ob->fde_array = begin;
+
+  ob->pc_begin = ob->pc_end = 0;
+  ob->count = 0;
+
+  ob->next = objects;
+  objects = ob;
+}
+
+/* Called from crtend.o to deregister the unwind info for an object.  */
+
+void
+__deregister_frame (void *begin)
+{
+  struct object **p = &objects;
+
+  while (*p)
+    {
+      if ((*p)->fde_begin == begin)
+       {
+         struct object *ob = *p;
+         *p = (*p)->next;
+
+         if (ob->fde_array)
+           free (ob->fde_array);
+         free (ob);
+
+         return;
+       }
+      p = &((*p)->next);
+    }
+  abort ();
+}
+
+/* Called from __throw to find the registers to restore for a given
+   PC_TARGET.  The caller should allocate a local variable of `struct
+   frame_state' (declared in frame.h) and pass its address to STATE_IN.  */
+
+struct frame_state *
+__frame_state_for (void *pc_target, struct frame_state *state_in)
+{
+  fde *f;
+  void *insn, *end, *pc;
+  struct cie_info info;
+  struct frame_state_internal state;
+
+  f = find_fde (pc_target);
+  if (f == 0)
+    return 0;
+
+  insn = extract_cie_info (f, &info);
+  if (insn == 0)
+    return 0;
+
+  memset (&state, 0, sizeof (state));
+  state.s.retaddr_column = info.ra_regno;
+
+  /* First decode all the insns in the CIE.  */
+  end = next_fde ((fde*) f->CIE_pointer);
+  while (insn < end)
+    insn = execute_cfa_insn (insn, &state, &info, 0);
+
+  insn = ((fde *)f) + 1;
+
+  if (info.augmentation[0] == 'z')
+    {
+      int i;
+      insn = decode_uleb128 (insn, &i);
+      insn += i;
+    }
+  else if (strcmp (info.augmentation, "e") == 0)
+    {
+      state.s.eh_ptr = read_pointer (insn);
+      insn += sizeof (void *);
+    }
+
+  /* Then the insns in the FDE up to our target PC.  */
+  end = next_fde (f);
+  pc = f->pc_begin;
+  while (insn < end && pc < pc_target)
+    insn = execute_cfa_insn (insn, &state, &info, &pc);
+
+  memcpy (state_in, &state.s, sizeof (state.s));
+  return state_in;
+}
+#endif /* DWARF2_UNWIND_INFO */
diff --git a/gcc/frame.h b/gcc/frame.h
new file mode 100644 (file)
index 0000000..3b38053
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of GNU CC.  */
+
+typedef struct frame_state
+{
+  void *cfa;
+  void *eh_ptr;
+  long cfa_offset;
+  long args_size;
+  long reg_or_offset[FIRST_PSEUDO_REGISTER+1];
+  unsigned short cfa_reg;
+  unsigned short retaddr_column;
+  char saved[FIRST_PSEUDO_REGISTER+1];
+} frame_state;
+
+/* Values for 'saved' above.  */
+#define REG_UNSAVED 0
+#define REG_SAVED_OFFSET 1
+#define REG_SAVED_REG 2
+
+/* Called either from crtbegin.o or a static constructor to register the
+   unwind info for an object or translation unit, respectively.  */
+
+extern void __register_frame (void *);
+
+/* Called from crtend.o to deregister the unwind info for an object.  */
+
+extern void __deregister_frame (void *);
+
+/* Called from __throw to find the registers to restore for a given
+   PC_TARGET.  The caller should allocate a local variable of `struct
+   frame_state' (declared in frame.h) and pass its address to STATE_IN.
+   Returns NULL on failure, otherwise returns STATE_IN.  */
+
+extern struct frame_state *__frame_state_for (void *, struct frame_state *);
diff --git a/gcc/gencheck.c b/gcc/gencheck.c
new file mode 100644 (file)
index 0000000..6b5612d
--- /dev/null
@@ -0,0 +1,62 @@
+/* Generate check macros for tree codes.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include <stdio.h>
+#include "hconfig.h"
+#include "system.h"
+
+#define DEFTREECODE(SYM, NAME, TYPE, LEN)   STRINGIFY(SYM),
+
+char *tree_codes[] = {
+#include "tree.def"
+(char*)0
+};
+
+void usage ()
+{
+  fprintf (stderr,"Usage: gencheck\n");
+}
+
+int main (argc, argv)
+     int argc;
+     char *argv[];
+{
+  int i;
+  switch (argc)
+    {
+    case 1:
+      break;
+    default:
+      usage ();
+      exit (1);
+    }
+
+  printf ("/* This file is generated using gencheck. Do not edit. */\n");
+  for (i = 0; tree_codes[i]; i++)
+    {
+      printf ("#define %s_CHECK(t)\tTREE_CHECK (t, %s)\n",
+             tree_codes[i], tree_codes[i]);
+      printf ("#define %s_CHECK1(t)\tTREE_CHECK1 (t, %s)\n",
+             tree_codes[i], tree_codes[i]);
+    }
+
+  return 0;
+}
+
diff --git a/gcc/gengenrtl.c b/gcc/gengenrtl.c
new file mode 100644 (file)
index 0000000..977305d
--- /dev/null
@@ -0,0 +1,287 @@
+/* Generate code to allocate RTL structures.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+
+#include "hconfig.h"
+#include <stdio.h>
+
+#include "obstack.h"
+#define        obstack_chunk_alloc     xmalloc
+#define        obstack_chunk_free      free
+
+#define NO_GENRTL_H
+#include "rtl.h"
+
+
+struct rtx_definition 
+{
+  const char *enumname, *name, *format;
+};
+
+#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) { # ENUM, NAME, FORMAT },
+
+struct rtx_definition defs[] = 
+{  
+#include "rtl.def"             /* rtl expressions are documented here */
+};
+
+const char *formats[NUM_RTX_CODE];
+
+static const char *
+type_from_format (char c)
+{
+  switch (c)
+    {
+    case 'i':
+      return "int";
+    case 'w':
+      return "HOST_WIDE_INT";
+    case 's':
+      return "char *";
+    case 'e':
+    case 'u':
+      return "rtx";
+    case 'E':
+      return "rtvec";
+    default:
+      abort ();
+    }
+}
+
+static const char *
+accessor_from_format (char c)
+{
+  switch (c)
+    {
+    case 'i':
+      return "XINT";
+    case 'w':
+      return "XWINT";
+    case 's':
+      return "XSTR";
+    case 'e':
+    case 'u':
+      return "XEXP";
+    case 'E':
+      return "XVEC";
+    default:
+      abort ();
+    }
+}
+
+static int
+special_format (fmt)
+     const char *fmt;
+{
+  return (strchr (fmt, '*') != 0
+         || strchr (fmt, 'V') != 0
+         || strchr (fmt, 'S') != 0
+         || strchr (fmt, 'n') != 0);
+}
+
+static int
+special_rtx (idx)
+     int idx;
+{
+  return (strcmp (defs[idx].enumname, "CONST_INT") == 0
+         || strcmp (defs[idx].enumname, "REG") == 0);
+}
+
+static void
+find_formats ()
+{
+  int i;
+
+  for (i = 0; i < NUM_RTX_CODE; ++i)
+    {
+      const char **f;
+
+      if (special_format (defs[i].format))
+       continue;
+
+      for (f = formats; *f ; ++f)
+       if (!strcmp(*f, defs[i].format))
+         break;
+
+      if (!*f)
+       *f = defs[i].format;
+    }
+}
+
+static void
+gendecl (f, format)
+     FILE *f;
+     const char *format;
+{
+  const char *p;
+  int i;
+  
+  fprintf (f, "extern rtx gen_rtx_fmt_%s PROTO((RTX_CODE, enum machine_mode mode",
+          format);
+  for (p = format, i = 0; *p ; ++p)
+    if (*p != '0')
+      fprintf (f, ", %s arg%d", type_from_format (*p), i++);
+  fprintf (f, "));\n");
+}
+
+static void 
+genmacro (f, idx)
+     FILE *f;
+     int idx;
+{
+  const char *p;
+  int i;
+
+  fprintf (f, "#define gen_rtx_%s%s(mode",
+          (special_rtx (idx) ? "raw_" : ""), defs[idx].enumname);
+
+  for (p = defs[idx].format, i = 0; *p ; ++p)
+    if (*p != '0')
+      fprintf (f, ", arg%d", i++);
+  fprintf (f, ")   ");
+
+  fprintf (f, "gen_rtx_fmt_%s(%s,(mode)", defs[idx].format, defs[idx].enumname);
+  for (p = defs[idx].format, i = 0; *p ; ++p)
+    if (*p != '0')
+      fprintf (f, ",(arg%d)", i++);
+  fprintf (f, ")\n");
+}
+
+static void
+gendef (f, format)
+     FILE *f;
+     const char *format;
+{
+  const char *p;
+  int i, j;
+  
+  fprintf (f, "rtx\ngen_rtx_fmt_%s (code, mode", format);
+  for (p = format, i = 0; *p ; ++p)
+    if (*p != '0')
+      fprintf (f, ", arg%d", i++);
+
+  fprintf (f, ")\n     RTX_CODE code;\n     enum machine_mode mode;\n");
+  for (p = format, i = 0; *p ; ++p)
+    if (*p != '0')
+      fprintf (f, "     %s arg%d;\n", type_from_format (*p), i++);
+
+  /* See rtx_alloc in rtl.c for comments.  */
+  fprintf (f, "{\n");
+  fprintf (f, "  register int length = sizeof (struct rtx_def)");
+  fprintf (f, " + %d * sizeof (rtunion);\n", strlen (format) - 1);
+  fprintf (f, "  rtx rt = (rtx)obstack_alloc (rtl_obstack, length);\n");
+
+  fprintf (f, "  if (sizeof(struct rtx_def) - sizeof(rtunion) == sizeof(int))\n");
+  fprintf (f, "    *(int *)rt = 0;\n");
+  fprintf (f, "  else if (sizeof(struct rtx_def) - sizeof(rtunion) == sizeof(HOST_WIDE_INT))\n");
+  fprintf (f, "    *(HOST_WIDE_INT *)rt = 0;\n");
+  fprintf (f, "  else\n");
+  fprintf (f, "    bzero(rt, sizeof(struct rtx_def) - sizeof(rtunion));\n\n");
+
+  fprintf (f, "  PUT_CODE (rt, code);\n");
+  fprintf (f, "  PUT_MODE (rt, mode);\n");
+
+  for (p = format, i = j = 0; *p ; ++p, ++i)
+    if (*p != '0')
+      {
+       fprintf (f, "  %s (rt, %d) = arg%d;\n",
+                accessor_from_format (*p), i, j++);
+      }
+
+  fprintf (f, "\n  return rt;\n}\n\n");
+}
+
+static void
+genlegend (f)
+     FILE *f;
+{
+  fprintf (f, "/* Generated automaticaly by the program `gengenrtl'\n");
+  fprintf (f, "   from the RTL description file `rtl.def' */\n\n");
+}
+
+static void
+genheader (f)
+     FILE *f;
+{
+  int i;
+  const char **fmt;
+
+  for (fmt = formats; *fmt; ++fmt)
+    gendecl (f, *fmt);
+
+  fprintf(f, "\n");
+
+  for (i = 0; i < NUM_RTX_CODE; i++)
+    {
+      if (special_format (defs[i].format))
+       continue;
+      genmacro (f, i);
+    }
+}
+
+static void
+gencode (f)
+     FILE *f;
+{
+  const char **fmt;
+
+  fprintf(f, "#include \"config.h\"\n");
+  fprintf(f, "#include \"obstack.h\"\n");
+  fprintf(f, "#include \"rtl.h\"\n\n");
+  fprintf(f, "extern struct obstack *rtl_obstack;\n\n");
+
+  for (fmt = formats; *fmt; ++fmt)
+    gendef (f, *fmt);
+}
+
+int
+main(argc, argv)
+     int argc;
+     char **argv;
+{
+  FILE *f;
+
+  if (argc != 3)
+    exit (1);
+
+  find_formats ();
+
+  f = fopen (argv[1], "w");
+  if (f == NULL)
+    {
+      perror(argv[1]);
+      exit (1);
+    }
+  genlegend (f);
+  genheader (f);
+  fclose(f);
+
+  f = fopen (argv[2], "w");
+  if (f == NULL)
+    {
+      perror(argv[2]);
+      exit (1);
+    }
+  genlegend (f);
+  gencode (f);
+  fclose(f);
+
+  exit (0);
+}
diff --git a/gcc/ginclude/va-arc.h b/gcc/ginclude/va-arc.h
new file mode 100644 (file)
index 0000000..a718ad6
--- /dev/null
@@ -0,0 +1,111 @@
+/* stdarg/varargs support for the ARC */
+
+/* Define __gnuc_va_list.  */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef void * __gnuc_va_list;
+#endif /* not __GNUC_VA_LIST */
+
+/* If this is for internal libc use, don't define anything but
+   __gnuc_va_list.  */
+#if defined (_STDARG_H) || defined (_VARARGS_H)
+
+/* In GCC version 2, we want an ellipsis at the end of the declaration
+   of the argument list.  GCC version 1 can't parse it.  */
+
+#if __GNUC__ > 1
+#define __va_ellipsis ...
+#else
+#define __va_ellipsis
+#endif
+
+/* See arc_setup_incoming_varargs for reasons for the oddity in va_start.  */
+#ifdef _STDARG_H
+#define va_start(AP, LASTARG) \
+(AP = (__gnuc_va_list) ((int *) __builtin_next_arg (LASTARG) \
+                       + (__builtin_args_info (0) < 8 \
+                          ? (__builtin_args_info (0) & 1) \
+                          : 0)))
+#else
+#define va_alist  __builtin_va_alist
+#define va_dcl    int __builtin_va_alist; __va_ellipsis
+#define va_start(AP) \
+(AP = (__gnuc_va_list) ((int *) &__builtin_va_alist \
+                       + (__builtin_args_info (0) < 8 \
+                          ? (__builtin_args_info (0) & 1) \
+                          : 0)))
+#endif
+
+#ifndef va_end
+void va_end (__gnuc_va_list);          /* Defined in libgcc.a */
+
+/* Values returned by __builtin_classify_type.  */
+
+enum __va_type_classes {
+  __no_type_class = -1,
+  __void_type_class,
+  __integer_type_class,
+  __char_type_class,
+  __enumeral_type_class,
+  __boolean_type_class,
+  __pointer_type_class,
+  __reference_type_class,
+  __offset_type_class,
+  __real_type_class,
+  __complex_type_class,
+  __function_type_class,
+  __method_type_class,
+  __record_type_class,
+  __union_type_class,
+  __array_type_class,
+  __string_type_class,
+  __set_type_class,
+  __file_type_class,
+  __lang_type_class
+};
+
+#endif
+#define va_end(AP)     ((void)0)
+
+/* Avoid errors if compiling GCC v2 with GCC v1.  */
+#if __GNUC__ == 1
+#define __extension__
+#endif
+
+/* All aggregates are passed by reference.  All scalar types larger than 8
+   bytes are passed by reference.  */
+/* We cast to void * and then to TYPE * because this avoids
+   a warning about increasing the alignment requirement.
+   The casts to char * avoid warnings about invalid pointer arithmetic.  */
+
+#define __va_rounded_size(TYPE)  \
+  (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+
+#ifdef __big_endian__
+#define va_arg(AP,TYPE) \
+__extension__                                                  \
+(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
+      || __va_rounded_size (TYPE) > 8)                         \
+     ? ((AP) = (char *)(AP) + __va_rounded_size (TYPE *),      \
+       *(TYPE **) (void *) ((char *)(AP) - __va_rounded_size (TYPE *))) \
+     : ((TYPE *) (void *)                                      \
+       (AP = (void *) ((__alignof__ (TYPE) > 4                 \
+                        ? ((int) AP + 8 - 1) & -8              \
+                        : (int) AP)                            \
+                        + __va_rounded_size (TYPE))) - 1));}))
+#else
+#define va_arg(AP,TYPE) \
+__extension__                                                  \
+(*({((__builtin_classify_type (*(TYPE*) 0) >= __record_type_class \
+      || __va_rounded_size (TYPE) > 8)                         \
+     ? ((AP) = (char *)(AP) + __va_rounded_size (TYPE *),      \
+       *(TYPE **) (void *) ((char *)(AP) - __va_rounded_size (TYPE *))) \
+     : ((AP = (void *) ((__alignof__ (TYPE) > 4                        \
+                       ? ((int) AP + 8 - 1) & -8               \
+                       : (int) AP)                             \
+                      + __va_rounded_size (TYPE))),            \
+       (TYPE *) (void *) (AP - __va_rounded_size (TYPE))));}))
+#endif
+
+#endif /* defined (_STDARG_H) || defined (_VARARGS_H) */
diff --git a/gcc/ginclude/va-v850.h b/gcc/ginclude/va-v850.h
new file mode 100644 (file)
index 0000000..3fd812a
--- /dev/null
@@ -0,0 +1,37 @@
+/* CYGNUS LOCAL v850/law (entire file ) */
+
+/* Define __gnuc_va_list. */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef void *__gnuc_va_list;
+#endif /* not __GNUC_VA_LIST */
+
+/* If this is for internal libc use, don't define anything but
+   __gnuc_va_list.  */
+#if defined (_STDARG_H) || defined (_VARARGS_H)
+
+#ifdef _STDARG_H
+#define va_start(AP, LASTARG)                                          \
+  (AP = ((__gnuc_va_list) __builtin_next_arg (LASTARG)))
+#else
+#define __va_ellipsis ...
+#define va_alist __builtin_va_alist
+#define va_dcl int __builtin_va_alist; __va_ellipsis
+#define va_start(AP) AP=(char *) &__builtin_va_alist
+#endif
+
+/* Now stuff common to both varargs & stdarg implementations.  */
+#define __va_rounded_size(TYPE)                                                \
+  (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
+#undef va_end
+void va_end (__gnuc_va_list);
+#define va_end(AP) ((void)0)
+#define va_arg(AP, TYPE)                                               \
+ (sizeof (TYPE) > 8                                                    \
+  ? (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (char *)),\
+    **((TYPE **) (void *) ((char *) (AP) - __va_rounded_size (char *))))\
+  : (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)), \
+    *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE)))))
+#endif
+/* END CYGNUS LOCAL */
diff --git a/gcc/intl.c b/gcc/intl.c
new file mode 100644 (file)
index 0000000..e039909
--- /dev/null
@@ -0,0 +1,6 @@
+/* intl.c - internationalization */
+
+#include "gansidecl.h"
+#include "intl.h"
+
+const char localedir[] = LOCALEDIR;
diff --git a/gcc/intl.h b/gcc/intl.h
new file mode 100644 (file)
index 0000000..56c075e
--- /dev/null
@@ -0,0 +1,52 @@
+/* intl.h - internationalization
+   Copyright 1998 Free Software Foundation, Inc.
+
+   GCC 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.
+
+   GCC 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 GCC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA. */
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#ifndef HAVE_SETLOCALE
+# define setlocale(category, locale) (locale)
+#endif
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+  extern const char localedir[];
+#else
+/* Stubs that do something close enough.  */
+# ifdef textdomain
+#  undef textdomain
+# endif
+# define textdomain(domain) (domain)
+# ifdef bindtextdomain
+#  undef bindtextdomain
+# endif
+# define bindtextdomain(domain, directory) (domain)
+# ifdef gettext
+#  undef gettext
+# endif
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef _
+# define _(msgid) gettext (msgid)
+#endif
+
+#ifndef N_
+# define N_(msgid) (msgid)
+#endif
diff --git a/gcc/intl/ChangeLog b/gcc/intl/ChangeLog
new file mode 100644 (file)
index 0000000..1989501
--- /dev/null
@@ -0,0 +1,1086 @@
+1998-04-29  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intl/localealias.c (read_alias_file): Use unsigned char for
+       local variables.  Remove unused variable tp.
+       * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
+       for type of codeset.  For loosing Solaris systems.
+       * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
+       * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
+       len if not needed.
+       Patches by Jim Meyering.
+
+1998-04-28  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
+       mmap is not supported.
+
+       * hash-string.h: Don't include <values.h>.
+
+1998-04-27  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Use strdup is available.
+
+       * localealias.c: Define HAVE_MEMPCPY so that we can use this
+       function.  Define and use semapahores to protect modfication of
+       global objects when compiling for glibc.  Add code to allow
+       freeing alias table.
+
+       * l10nflist.c: Don't assume stpcpy not being a macro.
+
+       * gettextP.h: Define internal_function macri if not already done.
+       Use glibc byte-swap macros instead of defining SWAP when compiled
+       for glibc.
+       (struct loaded_domain): Add elements to allow unloading.
+
+       * Makefile.in (distclean): Don't remove libintl.h here.
+
+       * bindtextdomain.c: Carry over changes from glibc.  Use strdup if
+       available.
+
+       * dcgettext.c: Don't assume stpcpy not being a macro.  Mark internal
+       functions.  Add memory freeing code for glibc.
+
+       * dgettext.c: Update copyright.
+
+       * explodename.c: Include stdlib.h and string.h only if they exist.
+       Use strings.h eventually.
+
+       * finddomain.c: Mark internal functions.  Use strdup if available.
+       Add memory freeing code for glibc.
+
+1997-10-10 20:00  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
+       They should return reasonable values.
+       Reported by Tom Tromey <tromey@cygnus.com>.
+
+1997-09-16 03:33  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
+       * intlh.inst.in: Likewise.
+       Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
+
+       * libintl.glibc: Update from current glibc version.
+
+1997-09-06 02:10  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Reformat copyright.
+
+1997-08-19 15:22  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (DCGETTEXT): Remove wrong comment.
+
+1997-08-16 00:13  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install-data): Don't change directory to install.
+
+1997-08-01 14:30  Ulrich Drepper  <drepper@cygnus.com>
+
+       * cat-compat.c: Fix copyright.
+
+       * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+
+       * loadmsgcat.c: Update copyright.  Fix typos.
+
+       * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+       (_nl_make_l10nflist): Handle sponsor and revision correctly.
+
+       * gettext.c: Update copyright.
+       * gettext.h: Likewise.
+       * hash-string.h: Likewise.
+
+       * finddomain.c: Remoave dead code.  Define strchr only if
+       !HAVE_STRCHR.
+
+       * explodename.c: Include <sys/types.h>.
+
+       * explodename.c: Reformat copyright text.
+       (_nl_explode_name): Fix typo.
+
+       * dcgettext.c: Define and use __set_errno.
+       (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+       not defined.
+
+       * bindtextdom.c: Pretty printing.
+
+1997-05-01 02:25  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (guess_category_value): Don't depend on
+       HAVE_LC_MESSAGES.  We don't need the macro here.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+       macro.  Instead use HAVE_LOCALE_NULL and define it when using
+       glibc, as in dcgettext.c.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * Makefile.in (CPPFLAGS): New variable.  Reported by Franc,ois
+       Pinard.
+
+Mon Mar 10 06:51:17 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in: Implement handling of libtool.
+
+       * gettextP.h: Change data structures for use of generic lowlevel
+       i18n file handling.
+
+Wed Dec  4 20:21:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Put parentheses around arguments of memcpy macro
+       definition.
+       * localealias.c: Likewise.
+       * l10nflist.c: Likewise.
+       * finddomain.c: Likewise.
+       * bindtextdom.c: Likewise.
+       Reported by Thomas Esken.
+
+Mon Nov 25 22:57:51 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Move definition of `memcpy` macro to right
+       position.
+
+Fri Nov 22 04:01:58 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+       bcopy if not already defined.  Reported by Thomas Esken.
+       * bindtextdom.c: Likewise.
+       * l10nflist.c: Likewise.
+       * localealias.c: Likewise.
+       * textdomain.c: Likewise.
+
+Tue Oct 29 11:10:27 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (libdir): Change to use exec_prefix instead of
+       prefix.  Reported by Knut-HÃ¥vardAksnes <etokna@eto.ericsson.se>.
+
+Sat Aug 31 03:07:09 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+       so don't prepend uppercase `ISO' for only numeric arg.
+
+Fri Jul 19 00:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+       definition of _GNU_SOURCE.  Patch by Roland McGrath.
+
+       * Makefile.in (uninstall): Fix another bug with `for' loop and
+       empty arguments.  Patch by Jim Meyering.  Correct name os
+       uninstalled files: no intl- prefix anymore.
+
+       * Makefile.in (install-data): Again work around shells which
+       cannot handle mpty for list.  Reported by Jim Meyering.
+
+Sat Jul 13 18:11:35 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Split goal.  Now depend on install-exec
+        and install-data.
+       (install-exec, install-data): New goals.  Created from former
+       install goal.
+       Reported by Karl Berry.
+
+Sat Jun 22 04:58:14 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (MKINSTALLDIRS): New variable.  Path to
+        mkinstalldirs script.
+       (install): use MKINSTALLDIRS variable or if the script is not present
+       try to find it in the $top_scrdir).
+
+Wed Jun 19 02:56:56 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+       Grr.  Work around by renaming the static version and use macros
+       for renaming.
+
+Tue Jun 18 20:11:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Correct presence test macros of __argz_* functions.
+
+       * l10nflist.c: Include <argz.h> based on test of it instead when
+       __argz_* functions are available.
+       Reported by Andreas Schwab.
+
+Thu Jun 13 15:17:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * explodename.c, l10nflist.c: Define NULL for dumb systems.
+
+Tue Jun 11 17:05:13 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+       result to __result to prevent name clash.
+
+       * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+        get prototype for stpcpy and strcasecmp.
+
+       * intlh.inst.in, libgettext.h: Move declaration of
+       `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+       from gcc's -Wnested-extern option.
+
+Fri Jun  7 01:58:00 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Remove comment.
+
+Thu Jun  6 17:28:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Work around for another Buglix stupidity.
+       Always use an `else' close for `if's.  Reported by Nelson Beebe.
+
+       * Makefile.in (intlh.inst): Correct typo in phony rule.
+       Reported by Nelson Beebe.
+
+Thu Jun  6 01:49:52 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (read_alias_file): Rename variable alloca_list to
+       block_list as the macro calls assume.
+       Patch by Eric Backus.
+
+       * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+        malloc.
+       (read_alias_file): Rename varriabe alloca_list to block_list as the
+       macro calls assume.
+       Patch by Eric Backus.
+
+       * l10nflist.c: Correct conditional for <argz.h> inclusion.
+       Reported by Roland McGrath.
+
+       * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+        all-@USE_NLS@.
+
+       * Makefile.in (install): intlh.inst comes from local dir, not
+        $(srcdir).
+
+       * Makefile.in (intlh.inst): Special handling of this goal.  If
+       used in gettext, this is really a rul to construct this file.  If
+       used in any other package it is defined as a .PHONY rule with
+       empty body.
+
+       * finddomain.c: Extract locale file information handling into
+       l10nfile.c.  Rename local stpcpy__ function to stpcpy.
+
+       * dcgettext.c (stpcpy): Add local definition.
+
+       * l10nflist.c: Solve some portability problems.  Patches partly by
+       Thomas Esken.  Add local definition of stpcpy.
+
+Tue Jun  4 02:47:49 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Don't depend including <locale.h> on
+       HAVE_LOCALE_H.  Instead configure must rewrite this fiile
+       depending on the result of the configure run.
+
+       * Makefile.in (install): libintl.inst is now called intlh.inst.
+       Add rules for updating intlh.inst from intlh.inst.in.
+
+       * libintl.inst: Renamed to intlh.inst.in.
+
+       * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+        because gcc has __buitlin_alloca.
+       Reported by Roland McGrath.
+
+Mon Jun  3 00:32:16 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (installcheck): New goal to fulfill needs of
+        automake's distcheck.
+
+       * Makefile.in (install): Reorder commands so that VERSION is
+        found.
+
+       * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+        @datadir@/gettext.
+       (COMSRCS): Add l10nfile.c.
+       (OBJECTS): Add l10nfile.o.
+       (DISTFILES): Rename to DISTFILE.normal.  Remove $(DISTFILES.common).
+       (DISTFILE.gettext): Remove $(DISTFILES.common).
+       (all-gettext): Remove goal.
+       (install): If $(PACKAGE) = gettext install, otherwose do nothing.  No
+       package but gettext itself should install libintl.h + headers.
+       (dist): Extend goal to work for gettext, too.
+       (dist-gettext): Remove goal.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+
+Sun Jun  2 17:33:06 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+        find_l10nfile.
+
+Sat Jun  1 02:23:03 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (__argz_next): Add definition.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+       code.  Use new l10nfile handling.
+
+       * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+        alloca code.
+
+       * l10nflist.c: Initial revision.
+
+Tue Apr  2 18:51:18 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-gettext): New goal.  Same as all-yes.
+
+Thu Mar 28 23:01:22 1996  Karl Eichwalder  <ke@ke.central.de>
+
+       * Makefile.in (gettextsrcdir): Define using @datadir@.
+
+Tue Mar 26 12:39:14 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Include <ctype.h>.  Reported by Roland McGrath.
+
+Sat Mar 23 02:00:35 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+        with external declaration.
+
+Sat Mar  2 00:47:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-no): Rename from all_no.
+
+Sat Feb 17 00:25:59 1996  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h [loaded_domain]: Array `successor' must now contain up
+        to 63 elements (because of codeset name normalization).
+
+       * finddomain.c: Implement codeset name normalization.
+
+Thu Feb 15 04:39:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all): Define to `all-@USE_NLS@'.
+       (all-yes, all_no): New goals.  `all-no' is noop, `all-yes'
+       is former all.
+
+Mon Jan 15 21:46:01 1996  Howard Gayle  <howard@hal.com>
+
+       * localealias.c (alias_compare): Increment string pointers in loop
+        of strcasecmp replacement.
+
+Fri Dec 29 21:16:34 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Who commented this goal out ? :-)
+
+Fri Dec 29 15:08:16 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Save `errno'.  Failing system calls
+       should not effect it because a missing catalog is no error.
+       Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+
+Tue Dec 19 22:09:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+        shell scripts.
+
+Fri Dec 15 17:34:59 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (install-src): Only install library and header when
+       we use the own implementation.  Don't do it when using the
+       system's gettext or catgets functions.
+
+       * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+
+Sat Dec  9 16:24:37 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+       gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+       Use PARAMS instead of __P.  Suggested by Roland McGrath.
+
+Tue Dec  5 11:39:14 1995  Larry Schwimmer  <rosebud@cyclone.stanford.edu>
+
+       * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+       !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+
+Mon Dec  4 15:42:07 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src):
+       Install libintl.inst instead of libintl.h.install.
+
+Sat Dec  2 22:51:38 1995  Marcus Daniels  <marcus@sysc.pdx.edu>
+
+       * cat-compat.c (textdomain):
+       Reverse order in which files are tried you load.  First
+       try local file, when this failed absolute path.
+
+Wed Nov 29 02:03:53 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * cat-compat.c (bindtextdomain): Add missing { }.
+
+Sun Nov 26 18:21:41 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.inst: Add missing __P definition.  Reported by Nelson Beebe.
+
+       * Makefile.in:
+       Add dummy `all' and `dvi' goals.  Reported by Tom Tromey.
+
+Sat Nov 25 16:12:01 1995  Franc,ois Pinard  <pinard@iro.umontreal.ca>
+
+       * hash-string.h: Capitalize arguments of macros.
+
+Sat Nov 25 12:01:36 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Prevent files names longer than 13
+       characters.  libintl.h.glibc->libintl.glibc,
+       libintl.h.install->libintl.inst.  Reported by Joshua R. Poulson.
+
+Sat Nov 25 11:31:12 1995  Eric Backus  <ericb@lsid.hp.com>
+
+       * dcgettext.c: Fix bug in preprocessor conditionals.
+
+Sat Nov 25 02:35:27 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * libgettext.h: Solaris cc does not understand
+        #if !SYMBOL1 && !SYMBOL2.  Sad but true.
+
+Thu Nov 23 16:22:14 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string):
+       Fix for machine with >32 bit `unsigned long's.
+
+       * dcgettext.c (DCGETTEXT):
+       Fix horrible bug in loop for alternative translation.
+
+Thu Nov 23 01:45:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+       Some further simplifications in message number generation.
+
+Mon Nov 20 21:08:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.h.glibc: Use __const instead of const in prototypes.
+
+       * Makefile.in (install-src):
+       Install libintl.h.install instead of libintl.h.  This
+       is a stripped-down version.  Suggested by Peter Miller.
+
+       * libintl.h.install, libintl.h.glibc: Initial revision.
+
+       * localealias.c (_nl_expand_alias, read_alias_file):
+       Protect prototypes in type casts by __P.
+
+Tue Nov 14 16:43:58 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h: Correct prototype for hash_string.
+
+Sun Nov 12 12:42:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string): Add prototype.
+
+       * gettextP.h: Fix copyright.
+       (SWAP): Add prototype.
+
+Wed Nov  8 22:56:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file): Forgot sizeof.
+       Avoid calling *printf function.  This introduces a big overhead.
+       Patch by Roland McGrath.
+
+Tue Nov  7 14:21:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+
+       * finddomain.c (stpcpy):
+       Define substitution function local.  The macro was to flaky.
+
+       * cat-compat.c: Fix typo.
+
+       * xopen-msg.sed, linux-msg.sed:
+       While bringing message number to right place only accept digits.
+
+       * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+       leading 0s we don't need to remove them.  Reported by Marcus
+       Daniels.
+
+       * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+       dependency.  Reported by Marcus Daniels.
+
+       * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+       Generally cleanup using #if instead of #ifndef.
+
+       * Makefile.in: Correct typos in comment.  By Franc,ois Pinard.
+
+Mon Nov  6 00:27:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Don't install libintl.h and libintl.a
+       if we use an available gettext implementation.
+
+Sun Nov  5 22:02:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS.  Reported
+       by Franc,ois Pinard.
+
+       * libgettext.h: Use #if instead of #ifdef/#ifndef.
+
+       * finddomain.c:
+       Comments describing what has to be done should start with FIXME.
+
+Sun Nov  5 19:38:01 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Split.  Use DISTFILES with normal meaning.
+       DISTFILES.common names the files common to both dist goals.
+       DISTFILES.gettext are the files only distributed in GNU gettext.
+
+Sun Nov  5 17:32:54 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+       This was necessary since a change in _nl_find_msg several weeks
+       ago.  I really don't know this is still not fixed.
+
+Sun Nov  5 12:43:12 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL.  This
+       might mark a special condition.
+
+       * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+
+       * Makefile.in (dist): Suppress error message when ln failed.
+       Get files from $(srcdir) explicitly.
+
+       * libgettext.h (gettext_const): Rename to gettext_noop.
+
+Fri Nov  3 07:36:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (make_entry_rec):
+       Protect against wrong locale names by testing mask.
+
+       * libgettext.h (gettext_const): Add macro definition.
+       Capitalize macro arguments.
+
+Thu Nov  2 23:15:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Test for pointer != NULL before accessing value.
+       Reported by Tom Tromey.
+
+       * gettext.c (NULL):
+       Define as (void*)0 instad of 0.  Reported by Franc,ois Pinard.
+
+Mon Oct 30 21:28:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+
+Sat Oct 28 23:20:47 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+
+       * localealias.c (alias_compare):
+       Peter Miller reported that tolower in some systems is
+       even dumber than I thought.  Protect call by `isupper'.
+
+Fri Oct 27 22:22:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (libdir, includedir): New variables.
+       (install-src): Install libintl.a and libintl.h in correct dirs.
+
+Fri Oct 27 22:07:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+
+       * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+
+       * localealias.c:
+       Fix typo and superflous test.  Reported by Christian von Roques.
+
+Fri Oct  6 11:52:05 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Correct some remainder from the pre-CEN syntax.  Now
+       we don't have a constant number of successors anymore.
+
+Wed Sep 27 21:41:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Add libintl.h.glibc.
+
+       * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+       (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+
+       * loadmsgcat.c: Forget to continue #if line.
+
+       * localealias.c:
+       [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+       space clean.
+
+       * dcgettext.c, finddomain.c: Better comment to last change.
+
+       * loadmsgcat.c:
+       [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+       __fstat, __open, __close, __read, __mmap, and __munmap resp
+       to keep ANSI C name space clean.
+
+       * finddomain.c:
+       [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+
+       * dcgettext.c:
+       [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+       keep ANSI C name space clean.
+
+       * libgettext.h:
+       Include sys/types.h for those old SysV systems out there.
+       Reported by Francesco Potorti`.
+
+       * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+
+       * bindtextdom.c: Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * finddomain.c: Fix 2 times defiend -> defined.
+
+       * textdomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+
+       * gettext.c:
+       Include libintl.h instead of libgettext.h when compiling for glibc.
+       Get NULL from stddef.h if we compile for glibc.
+
+       * finddomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * dcgettext.c: Include all those standard headers unconditionally
+       if _LIBC is defined.
+
+       * dgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+
+       * dcgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+
+       * bindtextdom.c:
+       If compiled in glibc include libintl.h instead of libgettext.h.
+
+Mon Sep 25 22:23:06 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+       Reported by Marcus Daniels.
+
+       * cat-compat.c (bindtextdomain):
+       String used in putenv must not be recycled.
+       Reported by Marcus Daniels.
+
+       * libgettext.h (__USE_GNU_GETTEXT):
+       Additional symbol to signal that we use GNU gettext
+       library.
+
+       * cat-compat.c (bindtextdomain):
+       Fix bug with the strange stpcpy replacement.
+       Reported by Nelson Beebe.
+
+Sat Sep 23 08:23:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: Include <string.h> for stpcpy prototype.
+
+       * localealias.c (read_alias_file):
+       While expand strdup code temporary variable `cp' hided
+       higher level variable with same name.  Rename to `tp'.
+
+       * textdomain.c (textdomain):
+       Avoid warning by using temporary variable in strdup code.
+
+       * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+
+Thu Sep 21 15:51:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (alias_compare):
+       Use strcasecmp() only if available.  Else use
+       implementation in place.
+
+       * intl-compat.c:
+       Wrapper functions now call *__ functions instead of __*.
+
+       * libgettext.h: Declare prototypes for *__ functions instead for __*.
+
+       * cat-compat.c, loadmsgcat.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+       * bindtextdom.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Rename to bindtextdomain__ if not used in GNU C Library.
+
+       * dgettext.c:
+       Rename function to dgettext__ if not used in GNU C Library.
+
+       * gettext.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Functions now called gettext__ if not used in GNU C Library.
+
+       * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+Sun Sep 17 23:14:49 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Correct some bugs in handling of CEN standard
+       locale definitions.
+
+Thu Sep  7 01:49:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Implement CEN syntax.
+
+       * gettextP.h (loaded_domain): Extend number of successors to 31.
+
+Sat Aug 19 19:25:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (aliaspath): Remove path to X11 locale dir.
+
+       * Makefile.in: Make install-src depend on install.  This helps
+       gettext to install the sources and other packages can use the
+       install goal.
+
+Sat Aug 19 15:19:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (uninstall): Remove stuff installed by install-src.
+
+Tue Aug 15 13:13:53 1995  Ulrich Drepper  <drepper@myware>
+
+       * VERSION.in: Initial revision.
+
+       * Makefile.in (DISTFILES):
+       Add VERSION file.  This is not necessary for gettext, but
+       for other packages using this library.
+
+Tue Aug 15 06:16:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_find_domain):
+       New prototype after changing search strategy.
+
+       * finddomain.c (_nl_find_domain):
+       We now try only to find a specified catalog.  Fall back to other
+       catalogs listed in the locale list is now done in __dcgettext.
+
+       * dcgettext.c (__dcgettext):
+       Now we provide message fall back even to different languages.
+       I.e. if a message is not available in one language all the other
+       in the locale list a tried.  Formerly fall back was only possible
+       within one language.  Implemented by moving one loop from
+       _nl_find_domain to here.
+
+Mon Aug 14 23:45:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gettextsrcdir):
+       Directory where source of GNU gettext library are made
+       available.
+       (INSTALL, INSTALL_DATA): Programs used for installing sources.
+       (gettext-src): New.  Rule to install GNU gettext sources for use in
+       gettextize shell script.
+
+Sun Aug 13 14:40:48 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain):
+       Use mmap for loading only when munmap function is
+       also available.
+
+       * Makefile.in (install): Depend on `all' goal.
+
+Wed Aug  9 11:04:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file):
+       Do not overwrite '\n' when terminating alias value string.
+
+       * localealias.c (read_alias_file):
+       Handle long lines.  Ignore the rest not fitting in
+       the buffer after the initial `fgets' call.
+
+Wed Aug  9 00:54:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_load_domain):
+       Add prototype, replacing prototype for _nl_load_msg_cat.
+
+       * finddomain.c (_nl_find_domain):
+       Remove unneeded variable filename and filename_len.
+       (expand_alias): Remove prototype because functions does not
+       exist anymore.
+
+       * localealias.c (read_alias_file):
+       Change type of fname_len parameter to int.
+       (xmalloc): Add prototype.
+
+       * loadmsgcat.c: Better prototypes for xmalloc.
+
+Tue Aug  8 22:30:39 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Allow alias name to be constructed from the four components.
+
+       * Makefile.in (aliaspath): New variable.  Set to preliminary value.
+       (SOURCES): Add localealias.c.
+       (OBJECTS): Add localealias.o.
+
+       * gettextP.h: Add prototype for _nl_expand_alias.
+
+       * finddomain.c: Aliasing handled in intl/localealias.c.
+
+       * localealias.c: Aliasing for locale names.
+
+       * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+
+Mon Aug  7 23:47:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+
+       * cat-compat.c (bindtextdomain):
+       Correct implementation.  dirname parameter was not used.
+       Reported by Marcus Daniels.
+
+       * gettextP.h (loaded_domain):
+       New fields `successor' and `decided' for oo, lazy
+       message handling implementation.
+
+       * dcgettext.c:
+       Adopt for oo, lazy message handliing.
+       Now we can inherit translations from less specific locales.
+       (find_msg): New function.
+
+       * loadmsgcat.c, finddomain.c:
+       Complete rewrite.  Implement oo, lazy message handling :-).
+       We now have an additional environment variable `LANGUAGE' with
+       a higher priority than LC_ALL for the LC_MESSAGE locale.
+       Here we can set a colon separated list of specifications each
+       of the form `language[_territory[.codeset]][@modifier]'.
+
+Sat Aug  5 09:55:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (unistd.h):
+       Include to get _PC_PATH_MAX defined on system having it.
+
+Fri Aug  4 22:42:00 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Include prototype.
+
+       * Makefile.in (dist): Remove `copying instead' message.
+
+Wed Aug  2 18:52:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ID, TAGS): Do not use $^.
+
+Tue Aug  1 20:07:11 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (TAGS, ID): Use $^ as command argument.
+       (TAGS): Give etags -o option t write to current directory,
+       not $(srcdir).
+       (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+       (distclean): Remove ID.
+
+Sun Jul 30 11:51:46 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gnulocaledir):
+       New variable, always using share/ for data directory.
+       (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+
+       * finddomain.c (_nl_default_dirname):
+       Set to GNULOCALEDIR, because it always has to point
+       to the directory where GNU gettext Library writes it to.
+
+       * intl-compat.c (textdomain, bindtextdomain):
+       Undefine macros before function definition.
+
+Sat Jul 22 01:10:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h (_LIBINTL_H):
+       Protect definition in case where this file is included as
+       libgettext.h on Solaris machines.  Add comment about this.
+
+Wed Jul 19 02:36:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * intl-compat.c (textdomain): Correct typo.
+
+Wed Jul 19 01:51:35 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (dcgettext): Function now called __dcgettext.
+
+       * dgettext.c (dgettext): Now called __dgettext and calls
+       __dcgettext.
+
+       * gettext.c (gettext):
+       Function now called __gettext and calls __dgettext.
+
+       * textdomain.c (textdomain): Function now called __textdomain.
+
+       * bindtextdom.c (bindtextdomain): Function now called
+       __bindtextdomain.
+
+       * intl-compat.c: Initial revision.
+
+       * Makefile.in (SOURCES): Add intl-compat.c.
+       (OBJECTS): We always compile the GNU gettext library functions.
+       OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+       and intl-compat.o.
+       (GETTOBJS): Contains now only intl-compat.o.
+
+       * libgettext.h:
+       Re-include protection matches dualistic character of libgettext.h.
+       For all functions in GNU gettext library define __ counter part.
+
+       * finddomain.c (strchr): Define as index if not found in C library.
+       (_nl_find_domain): For relative paths paste / in between.
+
+Tue Jul 18 16:37:45 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+
+       * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+       A little bit better comments.
+
+Tue Jul 18 01:18:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       po-mode.el, makelinks, combine-sh are now found in ../misc.
+
+       * po-mode.el, makelinks, combine-sh, elisp-comp:
+       Moved to ../misc/.
+
+       * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+
+Sun Jul 16 22:33:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+       (install-data, uninstall): Install/uninstall .elc file.
+
+       * po-mode.el (Installation comment):
+       Add .pox as possible extension of .po files.
+
+Sun Jul 16 13:23:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * elisp-comp: Complete new version by Franc,ois: This does not
+       fail when not compiling in the source directory.
+
+Sun Jul 16 00:12:17 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (../po/cat-id-tbl.o):
+       Use $(MAKE) instead of make for recursive make.
+
+       * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+       (install-exec): Add missing dummy goal.
+       (install-data, uninstall): @ in multi-line shell command at
+       beginning, not in front of echo.  Reported by Eric Backus.
+
+Sat Jul 15 00:21:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES):
+       Rename libgettext.perl to gettext.perl to fit in 14 chars
+       file systems.
+
+       * gettext.perl:
+       Rename to gettext.perl to fit in 14 chars file systems.
+
+Thu Jul 13 23:17:20 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+
+Thu Jul 13 20:55:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Pretty printing.
+
+       * linux-msg.sed, xopen-msg.sed:
+       Correct bugs with handling substitute flags in branches.
+
+       * hash-string.h (hash_string):
+       Old K&R compilers don't under stand `unsigned char'.
+
+       * gettext.h (nls_uint32):
+       Some old K&R compilers (eg HP) don't understand `unsigned int'.
+
+       * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+
+Thu Jul 13 01:34:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ELCFILES): New variable.
+       (DISTFILES): Add elisp-comp.
+       Add implicit rule for .el -> .elc compilation.
+       (install-data): install $ELCFILES
+       (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+
+       * elisp-comp: Initial revision
+
+Wed Jul 12 16:14:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       cat-id-tbl.c is now found in po/.  This enables us to use an identical
+       intl/ directory in all packages.
+
+       * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+
+       * textdomain.c: fix typo (#if def -> #if defined)
+
+Tue Jul 11 18:44:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+       (DISTFILES,distclean): move tupdate.perl to src/
+
+       * po-to-tbl.sed.in:
+       add additional jump to clear change flag to recognize multiline strings
+
+Tue Jul 11 01:32:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * textdomain.c: Protect inclusion of stdlib.h and string.h.
+
+       * loadmsgcat.c: Protect inclusion of stdlib.h.
+
+       * libgettext.h: Protect inclusion of locale.h.
+       Allow use in C++ programs.
+       Define NULL is not happened already.
+
+       * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+       po-to-tbl.sed.
+       (distclean): remove po-to-tbl.sed and tupdate.perl.
+
+       * tupdate.perl.in: Substitute Perl path even in exec line.
+       Don't include entries without translation from old .po file.
+
+Tue Jul  4 00:41:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: use "Updated: " in msgid "".
+
+       * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+       Define getenv if !__STDC__.
+
+       * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+       Define free if !__STDC__.
+
+       * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+       Define free if !__STDC__.
+
+       * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+
+Mon Jul  3 23:56:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+       Remove unneeded $(srcdir) from Makefile.in dependency.
+
+       * makelinks: Add copyright and short description.
+
+       * po-mode.el: Last version for 0.7.
+
+       * tupdate.perl.in: Fix die message.
+
+       * dcgettext.c: Protect include of string.h.
+
+       * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+
+       * finddomain.c: Some corrections in includes.
+
+       * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+
+       * po-to-tbl.sed: Adopt for new .po file format.
+
+       * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+
+Sun Jul  2 23:55:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: Complete rewrite for new .po file format.
+
+Sun Jul  2 02:06:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * First official release.  This directory contains all the code
+       needed to internationalize own packages.  It provides functions
+       which allow to use the X/Open catgets function with an interface
+       like the Uniforum gettext function.  For system which does not
+       have neither of those a complete implementation is provided.
diff --git a/gcc/intl/Makefile.in b/gcc/intl/Makefile.in
new file mode 100644 (file)
index 0000000..cc1d6ce
--- /dev/null
@@ -0,0 +1,218 @@
+# Makefile for directory with message catalog handling in GNU NLS Utilities.
+# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = $(exec_prefix)/lib
+includedir = $(prefix)/include
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = @datadir@/gettext/intl
+aliaspath = $(localedir):.
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+
+l = @l@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
+-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = $(COMHDRS) libgettext.h loadinfo.h
+COMHDRS = gettext.h gettextP.h hash-string.h
+SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
+COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
+explodename.c
+OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
+explodename.$lo
+CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
+GETTOBJS = intl-compat.$lo
+DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
+xopen-msg.sed $(HEADERS) $(SOURCES)
+DISTFILES.normal = VERSION
+DISTFILES.gettext = libintl.glibc intlh.inst.in
+
+.SUFFIXES:
+.SUFFIXES: .c .o .lo
+.c.o:
+       $(COMPILE) $<
+.c.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) $<
+
+INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
+
+all: all-@USE_INCLUDED_LIBINTL@
+
+all-yes: libintl.$la intlh.inst
+all-no:
+
+libintl.a: $(OBJECTS)
+       rm -f $@
+       $(AR) cru $@ $(OBJECTS)
+       $(RANLIB) $@
+
+libintl.la: $(OBJECTS)
+       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
+                  -version-info 1:0 -rpath $(libdir)
+
+../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
+       cd ../po && $(MAKE) cat-id-tbl.$lo
+
+check: all
+
+# This installation goal is only used in GNU gettext.  Packages which
+# only use the library should use install instead.
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the gettext() function in its C library or in a
+# separate library or use the catgets interface.  A special case is
+# where configure found a previously installed GNU gettext library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(libdir) $(includedir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
+         fi; \
+         $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
+         $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
+       else \
+         : ; \
+       fi
+install-data: all
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
+         dists="$(DISTFILES.common)"; \
+         for file in $$dists; do \
+           $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       if test "$(PACKAGE)" = "gettext"; then \
+         dists="$(DISTFILES.common)"; \
+         for file in $$dists; do \
+           rm -f $(gettextsrcdir)/$$file; \
+         done
+       else \
+         : ; \
+       fi
+
+info dvi:
+
+$(OBJECTS): ../config.h libgettext.h
+bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+       rm -f *.a *.o *.lo core core.*
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile $(DISTFILES)
+       if test "$(PACKAGE)" = gettext; then \
+         additional="$(DISTFILES.gettext)"; \
+       else \
+         additional="$(DISTFILES.normal)"; \
+       fi; \
+       for file in $(DISTFILES.common) $$additional; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+dist-libc:
+       tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
+
+Makefile: Makefile.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# The dependency for intlh.inst is different in gettext and all other
+# packages.  Because we cannot you GNU make features we have to solve
+# the problem while rewriting Makefile.in.
+@GT_YES@intlh.inst: intlh.inst.in ../config.status
+@GT_YES@       cd .. \
+@GT_YES@       && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
+@GT_YES@         $(SHELL) ./config.status
+@GT_NO@.PHONY: intlh.inst
+@GT_NO@intlh.inst:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gcc/intl/VERSION b/gcc/intl/VERSION
new file mode 100644 (file)
index 0000000..ee66b06
--- /dev/null
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.10.35
diff --git a/gcc/intl/bindtextdom.c b/gcc/intl/bindtextdom.c
new file mode 100644 (file)
index 0000000..d9c3f34
--- /dev/null
@@ -0,0 +1,203 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN bindtextdomain__
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  struct binding *binding;
+
+  /* Some sanity checks.  */
+  if (domainname == NULL || domainname[0] == '\0')
+    return NULL;
+
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (dirname == NULL)
+    /* The current binding has be to returned.  */
+    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
+
+  if (binding != NULL)
+    {
+      /* The domain is already bound.  If the new value and the old
+        one are equal we simply do nothing.  Otherwise replace the
+        old binding.  */
+      if (strcmp (dirname, binding->dirname) != 0)
+       {
+         char *new_dirname;
+
+         if (strcmp (dirname, _nl_default_dirname) == 0)
+           new_dirname = (char *) _nl_default_dirname;
+         else
+           {
+#if defined _LIBC || defined HAVE_STRDUP
+             new_dirname = strdup (dirname);
+             if (new_dirname == NULL)
+               return NULL;
+#else
+             size_t len = strlen (dirname) + 1;
+             new_dirname = (char *) malloc (len);
+             if (new_dirname == NULL)
+               return NULL;
+
+             memcpy (new_dirname, dirname, len);
+#endif
+           }
+
+         if (binding->dirname != _nl_default_dirname)
+           free (binding->dirname);
+
+         binding->dirname = new_dirname;
+       }
+    }
+  else
+    {
+      /* We have to create a new binding.  */
+#if !defined _LIBC && !defined HAVE_STRDUP
+      size_t len;
+#endif
+      struct binding *new_binding =
+       (struct binding *) malloc (sizeof (*new_binding));
+
+      if (new_binding == NULL)
+       return NULL;
+
+#if defined _LIBC || defined HAVE_STRDUP
+      new_binding->domainname = strdup (domainname);
+      if (new_binding->domainname == NULL)
+       return NULL;
+#else
+      len = strlen (domainname) + 1;
+      new_binding->domainname = (char *) malloc (len);
+      if (new_binding->domainname == NULL)
+       return NULL;
+      memcpy (new_binding->domainname, domainname, len);
+#endif
+
+      if (strcmp (dirname, _nl_default_dirname) == 0)
+       new_binding->dirname = (char *) _nl_default_dirname;
+      else
+       {
+#if defined _LIBC || defined HAVE_STRDUP
+         new_binding->dirname = strdup (dirname);
+         if (new_binding->dirname == NULL)
+           return NULL;
+#else
+         len = strlen (dirname) + 1;
+         new_binding->dirname = (char *) malloc (len);
+         if (new_binding->dirname == NULL)
+           return NULL;
+         memcpy (new_binding->dirname, dirname, len);
+#endif
+       }
+
+      /* Now enqueue it.  */
+      if (_nl_domain_bindings == NULL
+         || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+       {
+         new_binding->next = _nl_domain_bindings;
+         _nl_domain_bindings = new_binding;
+       }
+      else
+       {
+         binding = _nl_domain_bindings;
+         while (binding->next != NULL
+                && strcmp (domainname, binding->next->domainname) > 0)
+           binding = binding->next;
+
+         new_binding->next = binding->next;
+         binding->next = new_binding;
+       }
+
+      binding = new_binding;
+    }
+
+  return binding->dirname;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__bindtextdomain, bindtextdomain);
+#endif
diff --git a/gcc/intl/dcgettext.c b/gcc/intl/dcgettext.c
new file mode 100644 (file)
index 0000000..c4c7a2c
--- /dev/null
@@ -0,0 +1,624 @@
+/* Implementation of the dcgettext(3) function.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "hash-string.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# ifndef stpcpy
+#  define stpcpy __stpcpy
+# endif
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
+# include <sys/param.h>
+#endif
+
+#if !defined(PATH_MAX) && defined(MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  And even worse: POSIX
+   defines this not at all.  So we can use this feature only on selected
+   system (e.g. those using GNU C Library).  */
+#ifdef _LIBC
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] = "messages";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+const char _nl_default_dirname[] = GNULOCALEDIR;
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+                              const char *msgid)) internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
+static const char *guess_category_value PARAMS ((int category,
+                                                const char *categoryname))
+     internal_function;
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+#else
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  int saved_errno = errno;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid == NULL)
+    return NULL;
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     defintion left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+  /* First find matching binding.  */
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding == NULL)
+    dirname = (char *) _nl_default_dirname;
+  else if (binding->dirname[0] == '/')
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned) PATH_MAX;
+      path_max += 2;           /* The getcwd docs say to do this.  */
+
+      dirname = (char *) alloca (path_max + dirname_len);
+      ADD_BLOCK (block_list, dirname);
+
+      __set_errno (0);
+      while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
+       {
+         path_max += PATH_INCR;
+         dirname = (char *) alloca (path_max + dirname_len);
+         ADD_BLOCK (block_list, dirname);
+         __set_errno (0);
+       }
+
+      if (ret == NULL)
+       {
+         /* We cannot get the current working directory.  Don't signal an
+            error but simply return the default string.  */
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  xdomainname = (char *) alloca (strlen (categoryname)
+                                + strlen (domainname) + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+                 domainname),
+         ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for th translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+       ++categoryvalue;
+      if (categoryvalue[0] == '\0')
+       {
+         /* The whole contents of CATEGORYVALUE has been searched but
+            no valid entry has been found.  We solve this situation
+            by implicitly appending a "C" entry, i.e. no translation
+            will take place.  */
+         single_locale[0] = 'C';
+         single_locale[1] = '\0';
+       }
+      else
+       {
+         char *cp = single_locale;
+         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+       }
+
+      /* If the current locale value is C (or POSIX) we don't load a
+        domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+         || strcmp (single_locale, "POSIX") == 0)
+       {
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+
+      /* Find structure describing the message catalog matching the
+        DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname);
+
+      if (domain != NULL)
+       {
+         retval = find_msg (domain, msgid);
+
+         if (retval == NULL)
+           {
+             int cnt;
+
+             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+               {
+                 retval = find_msg (domain->successor[cnt], msgid);
+
+                 if (retval != NULL)
+                   break;
+               }
+           }
+
+         if (retval != NULL)
+           {
+             FREE_BLOCKS (block_list);
+             __set_errno (saved_errno);
+             return retval;
+           }
+       }
+    }
+  /* NOTREACHED */
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcgettext, dcgettext);
+#endif
+
+
+static char *
+internal_function
+find_msg (domain_file, msgid)
+     struct loaded_l10nfile *domain_file;
+     const char *msgid;
+{
+  size_t top, act, bottom;
+  struct loaded_domain *domain;
+
+  if (domain_file->decided == 0)
+    _nl_load_domain (domain_file);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+      nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+
+      if (nstr == 0)
+       /* Hash table entry is empty.  */
+       return NULL;
+
+      if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+         && strcmp (msgid,
+                    domain->data + W (domain->must_swap,
+                                      domain->orig_tab[nstr - 1].offset)) == 0)
+       return (char *) domain->data + W (domain->must_swap,
+                                         domain->trans_tab[nstr - 1].offset);
+
+      while (1)
+       {
+         if (idx >= domain->hash_size - incr)
+           idx -= domain->hash_size - incr;
+         else
+           idx += incr;
+
+         nstr = W (domain->must_swap, domain->hash_tab[idx]);
+         if (nstr == 0)
+           /* Hash table entry is empty.  */
+           return NULL;
+
+         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+             && strcmp (msgid,
+                        domain->data + W (domain->must_swap,
+                                          domain->orig_tab[nstr - 1].offset))
+                == 0)
+           return (char *) domain->data
+             + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
+       }
+      /* NOTREACHED */
+    }
+
+  /* Now we try the default method:  binary search in the sorted
+     array of messages.  */
+  bottom = 0;
+  top = domain->nstrings;
+  while (bottom < top)
+    {
+      int cmp_val;
+
+      act = (bottom + top) / 2;
+      cmp_val = strcmp (msgid, domain->data
+                              + W (domain->must_swap,
+                                   domain->orig_tab[act].offset));
+      if (cmp_val < 0)
+       top = act;
+      else if (cmp_val > 0)
+       bottom = act + 1;
+      else
+       break;
+    }
+
+  /* If an translation is found return this.  */
+  return bottom >= top ? NULL : (char *) domain->data
+                                + W (domain->must_swap,
+                                    domain->trans_tab[act].offset);
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (category)
+     int category;
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  This is a GNU extension.  */
+  retval = getenv ("LANGUAGE");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX
+     methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some
+     systems this can be done by the `setlocale' function itself.  */
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+  return setlocale (category, NULL);
+#else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Next comes the name of the desired category.  */
+  retval = getenv (categoryname);
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Last possibility is the LANG environment variable.  */
+  retval = getenv ("LANG");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* We use C as the default domain.  POSIX says this is implementation
+     defined.  */
+  return "C";
+#endif
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  struct binding *runp;
+
+  for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
+    {
+      free (runp->domainname);
+      if (runp->dirname != _nl_default_dirname)
+       /* Yes, this is a pointer comparison.  */
+       free (runp->dirname);
+    }
+
+  if (_nl_current_default_domain != _nl_default_default_domain)
+    /* Yes, again a pointer comparison.  */
+    free ((char *) _nl_current_default_domain);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/gcc/intl/dgettext.c b/gcc/intl/dgettext.c
new file mode 100644 (file)
index 0000000..0510c2b
--- /dev/null
@@ -0,0 +1,59 @@
+/* Implementation of the dgettext(3) function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined HAVE_LOCALE_H || defined _LIBC
+# include <locale.h>
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT __dcgettext
+#else
+# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/gcc/intl/explodename.c b/gcc/intl/explodename.c
new file mode 100644 (file)
index 0000000..8066dc2
--- /dev/null
@@ -0,0 +1,188 @@
+/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+                 normalized_codeset, special, sponsor, revision)
+     char *name;
+     const char **language;
+     const char **modifier;
+     const char **territory;
+     const char **codeset;
+     const char **normalized_codeset;
+     const char **special;
+     const char **sponsor;
+     const char **revision;
+{
+  enum { undecided, xpg, cen } syntax;
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+  *special = NULL;
+  *sponsor = NULL;
+  *revision = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = 0;
+  syntax = undecided;
+  *language = cp = name;
+  while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
+        && cp[0] != '+' && cp[0] != ',')
+    ++cp;
+
+  if (*language == cp)
+    /* This does not make sense: language has to be specified.  Use
+       this entry as it is without exploding.  Perhaps it is an alias.  */
+    cp = strchr (*language, '\0');
+  else if (cp[0] == '_')
+    {
+      /* Next is the territory.  */
+      cp[0] = '\0';
+      *territory = ++cp;
+
+      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+            && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= TERRITORY;
+
+      if (cp[0] == '.')
+       {
+         /* Next is the codeset.  */
+         syntax = xpg;
+         cp[0] = '\0';
+         *codeset = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '@')
+           ++cp;
+
+         mask |= XPG_CODESET;
+
+         if (*codeset != cp && (*codeset)[0] != '\0')
+           {
+             *normalized_codeset = _nl_normalize_codeset (*codeset,
+                                                          cp - *codeset);
+             if (strcmp (*codeset, *normalized_codeset) == 0)
+               free ((char *) *normalized_codeset);
+             else
+               mask |= XPG_NORM_CODESET;
+           }
+       }
+    }
+
+  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+    {
+      /* Next is the modifier.  */
+      syntax = cp[0] == '@' ? xpg : cen;
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+            && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+    }
+
+  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+    {
+      syntax = cen;
+
+      if (cp[0] == '+')
+       {
+         /* Next is special application (CEN syntax).  */
+         cp[0] = '\0';
+         *special = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPECIAL;
+       }
+
+      if (cp[0] == ',')
+       {
+         /* Next is sponsor (CEN syntax).  */
+         cp[0] = '\0';
+         *sponsor = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPONSOR;
+       }
+
+      if (cp[0] == '_')
+       {
+         /* Next is revision (CEN syntax).  */
+         cp[0] = '\0';
+         *revision = ++cp;
+
+         mask |= CEN_REVISION;
+       }
+    }
+
+  /* For CEN syntax values it might be important to have the
+     separator character in the file name, not for XPG syntax.  */
+  if (syntax == xpg)
+    {
+      if (*territory != NULL && (*territory)[0] == '\0')
+       mask &= ~TERRITORY;
+
+      if (*codeset != NULL && (*codeset)[0] == '\0')
+       mask &= ~XPG_CODESET;
+
+      if (*modifier != NULL && (*modifier)[0] == '\0')
+       mask &= ~XPG_MODIFIER;
+    }
+
+  return mask;
+}
diff --git a/gcc/intl/finddomain.c b/gcc/intl/finddomain.c
new file mode 100644 (file)
index 0000000..81ea29b
--- /dev/null
@@ -0,0 +1,216 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains.  */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+   the DOMAINNAME and CATEGORY parameters with respect to the currently
+   established bindings.  */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (dirname, locale, domainname)
+     const char *dirname;
+     char *locale;
+     const char *domainname;
+{
+  struct loaded_l10nfile *retval;
+  const char *language;
+  const char *modifier;
+  const char *territory;
+  const char *codeset;
+  const char *normalized_codeset;
+  const char *special;
+  const char *sponsor;
+  const char *revision;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+               language[_territory[.codeset]][@modifier]
+
+     and six parts for the CEN syntax:
+
+       language[_territory][+audience][+special][,[sponsor][_revision]]
+
+     Beside the first part all of them are allowed to be missing.  If
+     the full specified locale is not found, the less specific one are
+     looked for.  The various parts will be stripped off according to
+     the following order:
+               (1) revision
+               (2) sponsor
+               (3) special
+               (4) codeset
+               (5) normalized codeset
+               (6) territory
+               (7) audience/modifier
+   */
+
+  /* If we have already tested for this locale entry there has to
+     be one data set in the list of loaded domains.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, 0, locale, NULL, NULL,
+                              NULL, NULL, NULL, NULL, NULL, domainname, 0);
+  if (retval != NULL)
+    {
+      /* We know something about this locale.  */
+      int cnt;
+
+      if (retval->decided == 0)
+       _nl_load_domain (retval);
+
+      if (retval->data != NULL)
+       return retval;
+
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+      return cnt >= 0 ? retval : NULL;
+      /* NOTREACHED */
+    }
+
+  /* See whether the locale value is an alias.  If yes its value
+     *overwrites* the alias name.  No test for the original value is
+     done.  */
+  alias_value = _nl_expand_alias (locale);
+  if (alias_value != NULL)
+    {
+#if defined _LIBC || defined HAVE_STRDUP
+      locale = strdup (alias_value);
+      if (locale == NULL)
+       return NULL;
+#else
+      size_t len = strlen (alias_value) + 1;
+      locale = (char *) malloc (len);
+      if (locale == NULL)
+       return NULL;
+
+      memcpy (locale, alias_value, len);
+#endif
+    }
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+                          &codeset, &normalized_codeset, &special,
+                          &sponsor, &revision);
+
+  /* Create all possible locale entries which might be interested in
+     generalization.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, mask, language, territory,
+                              codeset, normalized_codeset, modifier, special,
+                              sponsor, revision, domainname, 1);
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    return NULL;
+
+  if (retval->decided == 0)
+    _nl_load_domain (retval);
+  if (retval->data == NULL)
+    {
+      int cnt;
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+    }
+
+  /* The room for an alias was dynamically allocated.  Free it now.  */
+  if (alias_value != NULL)
+    free (locale);
+
+  return retval;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+  while (runp != NULL)
+    {
+      struct loaded_l10nfile *here = runp;
+      if (runp->data != NULL)
+       _nl_unload_domain ((struct loaded_domain *) runp->data);
+      runp = runp->next;
+      free (here);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/gcc/intl/gettext.c b/gcc/intl/gettext.c
new file mode 100644 (file)
index 0000000..d929f98
--- /dev/null
@@ -0,0 +1,70 @@
+/* Implementation of gettext(3) function.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# ifdef STDC_HEADERS
+#  include <stdlib.h>          /* Just for NULL.  */
+# else
+#  ifdef HAVE_STRING_H
+#   include <string.h>
+#  else
+#   define NULL ((void *) 0)
+#  endif
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DGETTEXT __dgettext
+#else
+# define GETTEXT gettext__
+# define DGETTEXT dgettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+GETTEXT (msgid)
+     const char *msgid;
+{
+  return DGETTEXT (NULL, msgid);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/gcc/intl/gettext.h b/gcc/intl/gettext.h
new file mode 100644 (file)
index 0000000..3cd23d7
--- /dev/null
@@ -0,0 +1,105 @@
+/* Internal header for GNU gettext internationalization functions.
+   Copyright (C) 1995, 1997 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 Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <stdio.h>
+
+#if HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   doing that would require that the configure script compile and *run*
+   the resulting executable.  Locally running cross-compiled executables
+   is usually not possible.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translation strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hashing table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hashing entry.  */
+  nls_uint32 hash_tab_offset;
+};
+
+struct string_desc
+{
+  /* Length of addressed string.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h  */
diff --git a/gcc/intl/gettextP.h b/gcc/intl/gettextP.h
new file mode 100644 (file)
index 0000000..00c5203
--- /dev/null
@@ -0,0 +1,89 @@
+/* Header describing internals of gettext library
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include "loadinfo.h"
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static nls_uint32 SWAP PARAMS ((nls_uint32 i));
+
+static inline nls_uint32
+SWAP (i)
+     nls_uint32 i;
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+struct loaded_domain
+{
+  const char *data;
+  int use_mmap;
+  size_t mmap_size;
+  int must_swap;
+  nls_uint32 nstrings;
+  struct string_desc *orig_tab;
+  struct string_desc *trans_tab;
+  nls_uint32 hash_size;
+  nls_uint32 *hash_tab;
+};
+
+struct binding
+{
+  struct binding *next;
+  char *domainname;
+  char *dirname;
+};
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+                                                char *__locale,
+                                                const char *__domainname))
+     internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
+     internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/gcc/intl/hash-string.h b/gcc/intl/hash-string.h
new file mode 100644 (file)
index 0000000..cacb38e
--- /dev/null
@@ -0,0 +1,59 @@
+/* Implements a string hashing function.
+   Copyright (C) 1995, 1997 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 Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(Args) Args
+# else
+#  define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+static unsigned long hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long
+hash_string (str_param)
+     const char *str_param;
+{
+  unsigned long int hval, g;
+  const char *str = str_param;
+
+  /* Compute the hash value for the given string.  */
+  hval = 0;
+  while (*str != '\0')
+    {
+      hval <<= 4;
+      hval += (unsigned long) *str++;
+      g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+       {
+         hval ^= g >> (HASHWORDBITS - 8);
+         hval ^= g;
+       }
+    }
+  return hval;
+}
diff --git a/gcc/intl/l10nflist.c b/gcc/intl/l10nflist.c
new file mode 100644 (file)
index 0000000..9c7dc18
--- /dev/null
@@ -0,0 +1,411 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# ifndef stpcpy
+#  define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Define function which are usually not available.  */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ.  */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+     const char *argz;
+     size_t len;
+{
+  size_t count = 0;
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len + 1;
+      len -= part_len + 1;
+      count++;
+    }
+  return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+     char *argz;
+     size_t len;
+     int sep;
+{
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len;
+      len -= part_len + 1;
+      if (len > 0)
+       *argz++ = sep;
+    }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+                                 const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+     char *argz;
+     size_t argz_len;
+     const char *entry;
+{
+  if (entry)
+    {
+      if (entry < argz + argz_len)
+        entry = strchr (entry, '\0') + 1;
+
+      return entry >= argz + argz_len ? NULL : (char *) entry;
+    }
+  else
+    if (argz_len > 0)
+      return argz;
+    else
+      return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X.  */
+static int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+     int x;
+{
+  /* We assume that no more than 16 bits are used.  */
+  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+  x = ((x >> 4) + x) & 0x0f0f;
+  x = ((x >> 8) + x) & 0xff;
+
+  return x;
+}
+
+\f
+struct loaded_l10nfile *
+_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+                   territory, codeset, normalized_codeset, modifier, special,
+                   sponsor, revision, filename, do_allocate)
+     struct loaded_l10nfile **l10nfile_list;
+     const char *dirlist;
+     size_t dirlist_len;
+     int mask;
+     const char *language;
+     const char *territory;
+     const char *codeset;
+     const char *normalized_codeset;
+     const char *modifier;
+     const char *special;
+     const char *sponsor;
+     const char *revision;
+     const char *filename;
+     int do_allocate;
+{
+  char *abs_filename;
+  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t entries;
+  int cnt;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+                                 + strlen (language)
+                                 + ((mask & TERRITORY) != 0
+                                    ? strlen (territory) + 1 : 0)
+                                 + ((mask & XPG_CODESET) != 0
+                                    ? strlen (codeset) + 1 : 0)
+                                 + ((mask & XPG_NORM_CODESET) != 0
+                                    ? strlen (normalized_codeset) + 1 : 0)
+                                 + (((mask & XPG_MODIFIER) != 0
+                                     || (mask & CEN_AUDIENCE) != 0)
+                                    ? strlen (modifier) + 1 : 0)
+                                 + ((mask & CEN_SPECIAL) != 0
+                                    ? strlen (special) + 1 : 0)
+                                 + (((mask & CEN_SPONSOR) != 0
+                                     || (mask & CEN_REVISION) != 0)
+                                    ? (1 + ((mask & CEN_SPONSOR) != 0
+                                            ? strlen (sponsor) + 1 : 0)
+                                       + ((mask & CEN_REVISION) != 0
+                                          ? strlen (revision) + 1 : 0)) : 0)
+                                 + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  retval = NULL;
+  last = NULL;
+
+  /* Construct file name.  */
+  memcpy (abs_filename, dirlist, dirlist_len);
+  __argz_stringify (abs_filename, dirlist_len, ':');
+  cp = abs_filename + (dirlist_len - 1);
+  *cp++ = '/';
+  cp = stpcpy (cp, language);
+
+  if ((mask & TERRITORY) != 0)
+    {
+      *cp++ = '_';
+      cp = stpcpy (cp, territory);
+    }
+  if ((mask & XPG_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, codeset);
+    }
+  if ((mask & XPG_NORM_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, normalized_codeset);
+    }
+  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+    {
+      /* This component can be part of both syntaces but has different
+        leading characters.  For CEN we use `+', else `@'.  */
+      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+      cp = stpcpy (cp, modifier);
+    }
+  if ((mask & CEN_SPECIAL) != 0)
+    {
+      *cp++ = '+';
+      cp = stpcpy (cp, special);
+    }
+  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+    {
+      *cp++ = ',';
+      if ((mask & CEN_SPONSOR) != 0)
+       cp = stpcpy (cp, sponsor);
+      if ((mask & CEN_REVISION) != 0)
+       {
+         *cp++ = '_';
+         cp = stpcpy (cp, revision);
+       }
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  last = NULL;
+  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+    if (retval->filename != NULL)
+      {
+       int compare = strcmp (retval->filename, abs_filename);
+       if (compare == 0)
+         /* We found it!  */
+         break;
+       if (compare < 0)
+         {
+           /* It's not in the list.  */
+           retval = NULL;
+           break;
+         }
+
+       last = retval;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  retval = (struct loaded_l10nfile *)
+    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+                               * (1 << pop (mask))
+                               * sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    return NULL;
+
+  retval->filename = abs_filename;
+  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+                    || ((mask & XPG_CODESET) != 0
+                        && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  if (last == NULL)
+    {
+      retval->next = *l10nfile_list;
+      *l10nfile_list = retval;
+    }
+  else
+    {
+      retval->next = last->next;
+      last->next = retval;
+    }
+
+  entries = 0;
+  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+     a real file.  So we have to use the DIRLIST separation mechanism
+     of the inner loop.  */
+  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+  for (; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+       && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+       && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+      {
+       /* Iterate over all elements of the DIRLIST.  */
+       char *dir = NULL;
+
+       while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+              != NULL)
+         retval->successor[entries++]
+           = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
+                                 language, territory, codeset,
+                                 normalized_codeset, modifier, special,
+                                 sponsor, revision, filename, 1);
+      }
+  retval->successor[entries] = NULL;
+
+  return retval;
+}
+\f
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  */
+const char *
+_nl_normalize_codeset (codeset, name_len)
+     const unsigned char *codeset;
+     size_t name_len;
+{
+  int len = 0;
+  int only_digit = 1;
+  char *retval;
+  char *wp;
+  size_t cnt;
+
+  for (cnt = 0; cnt < name_len; ++cnt)
+    if (isalnum (codeset[cnt]))
+      {
+       ++len;
+
+       if (isalpha (codeset[cnt]))
+         only_digit = 0;
+      }
+
+  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+  if (retval != NULL)
+    {
+      if (only_digit)
+       wp = stpcpy (retval, "iso");
+      else
+       wp = retval;
+
+      for (cnt = 0; cnt < name_len; ++cnt)
+       if (isalpha (codeset[cnt]))
+         *wp++ = tolower (codeset[cnt]);
+       else if (isdigit (codeset[cnt]))
+         *wp++ = codeset[cnt];
+
+      *wp = '\0';
+    }
+
+  return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/gcc/intl/libgettext.h b/gcc/intl/libgettext.h
new file mode 100644 (file)
index 0000000..3a92960
--- /dev/null
@@ -0,0 +1,182 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Because on some systems (e.g. Solaris) we sometimes have to include
+   the systems libintl.h as well as this file we have more complex
+   include protection above.  But the systems header might perhaps also
+   define _LIBINTL_H and therefore we have to protect the definition here.  */
+
+#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
+#ifndef _LIBINTL_H
+# define _LIBINTL_H    1
+#endif
+#define _LIBGETTEXT_H  1
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+#include <sys/types.h>
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __cplusplus
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef NULL
+# if !defined __cplusplus || defined __GNUC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL (0)
+# endif
+#endif
+
+#if !HAVE_LC_MESSAGES
+/* This value determines the behaviour of the gettext() and dgettext()
+   function.  But some system does not have this defined.  Define it
+   to a default value.  */
+# define LC_MESSAGES (-1)
+#endif
+
+
+/* Declarations for gettext-using-catgets interface.  Derived from
+   Jim Meyering's libintl.h.  */
+struct _msg_ent
+{
+  const char *_msg;
+  int _msg_number;
+};
+
+
+#if HAVE_CATGETS
+/* These two variables are defined in the automatically by po-to-tbl.sed
+   generated file `cat-id-tbl.c'.  */
+extern const struct _msg_ent _msg_tbl[];
+extern int _msg_tbl_length;
+#endif
+
+
+/* For automatical extraction of messages sometimes no real
+   translation is needed.  Instead the string itself is the result.  */
+#define gettext_noop(Str) (Str)
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext PARAMS ((const char *__msgid));
+extern char *gettext__ PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+                                const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+                               int __category));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain PARAMS ((const char *__domainname));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain PARAMS ((const char *__domainname,
+                                 const char *__dirname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+                                   const char *__dirname));
+
+#if ENABLE_NLS
+
+/* Solaris 2.3 has the gettext function but dcgettext is missing.
+   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
+   has dcgettext.  */
+# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
+
+#  define gettext(Msgid)                                                     \
+     dgettext (NULL, Msgid)
+
+#  define dgettext(Domainname, Msgid)                                        \
+     dcgettext (Domainname, Msgid, LC_MESSAGES)
+
+#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+/* This global variable is defined in loadmsgcat.c.  We need a sign,
+   whether a new catalog was loaded, which can be associated with all
+   translations.  */
+extern int _nl_msg_cat_cntr;
+
+#   define dcgettext(Domainname, Msgid, Category)                            \
+  (__extension__                                                             \
+   ({                                                                        \
+     char *__result;                                                         \
+     if (__builtin_constant_p (Msgid))                                       \
+       {                                                                     \
+        static char *__translation__;                                        \
+        static int __catalog_counter__;                                      \
+        if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
+          {                                                                  \
+            __translation__ =                                                \
+              dcgettext__ (Domainname, Msgid, Category);                     \
+            __catalog_counter__ = _nl_msg_cat_cntr;                          \
+          }                                                                  \
+        __result = __translation__;                                          \
+       }                                                                     \
+     else                                                                    \
+       __result = dcgettext__ (Domainname, Msgid, Category);                 \
+     __result;                                                               \
+    }))
+#  endif
+# endif
+
+#else
+
+# define gettext(Msgid) (Msgid)
+# define dgettext(Domainname, Msgid) (Msgid)
+# define dcgettext(Domainname, Msgid, Category) (Msgid)
+# define textdomain(Domainname) ((char *) Domainname)
+# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
+
+#endif
+
+/* @@ begin of epilog @@ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/gcc/intl/loadinfo.h b/gcc/intl/loadinfo.h
new file mode 100644 (file)
index 0000000..f4ebf6d
--- /dev/null
@@ -0,0 +1,76 @@
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+/* Encoding of locale name parts.  */
+#define CEN_REVISION           1
+#define CEN_SPONSOR            2
+#define CEN_SPECIAL            4
+#define XPG_NORM_CODESET       8
+#define XPG_CODESET            16
+#define TERRITORY              32
+#define CEN_AUDIENCE           64
+#define XPG_MODIFIER           128
+
+#define CEN_SPECIFIC   (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC   (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+  const char *filename;
+  int decided;
+
+  const void *data;
+
+  struct loaded_l10nfile *next;
+  struct loaded_l10nfile *successor[1];
+};
+
+
+extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
+                                                 size_t name_len));
+
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+                           const char *dirlist, size_t dirlist_len, int mask,
+                           const char *language, const char *territory,
+                           const char *codeset,
+                           const char *normalized_codeset,
+                           const char *modifier, const char *special,
+                           const char *sponsor, const char *revision,
+                           const char *filename, int do_allocate));
+
+
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+                                    const char **modifier,
+                                    const char **territory,
+                                    const char **codeset,
+                                    const char **normalized_codeset,
+                                    const char **special,
+                                    const char **sponsor,
+                                    const char **revision));
diff --git a/gcc/intl/loadmsgcat.c b/gcc/intl/loadmsgcat.c
new file mode 100644 (file)
index 0000000..515892d
--- /dev/null
@@ -0,0 +1,222 @@
+/* Load needed message catalogs.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
+# include <sys/mman.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions.  This is required by the standard
+   because some ISO C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define open   __open
+# define close  __close
+# define read   __read
+# define mmap   __mmap
+# define munmap __munmap
+#endif
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+   with all translations.  This is important if the translations are
+   cached by one of GCC's features.  */
+int _nl_msg_cat_cntr = 0;
+
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+internal_function
+_nl_load_domain (domain_file)
+     struct loaded_l10nfile *domain_file;
+{
+  int fd;
+  size_t size;
+  struct stat st;
+  struct mo_file_header *data = (struct mo_file_header *) -1;
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+  int use_mmap = 0;
+#endif
+  struct loaded_domain *domain;
+
+  domain_file->decided = 1;
+  domain_file->data = NULL;
+
+  /* If the record does not represent a valid locale the FILENAME
+     might be NULL.  This can happen when according to the given
+     specification the locale file name is different for XPG and CEN
+     syntax.  */
+  if (domain_file->filename == NULL)
+    return;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY);
+  if (fd == -1)
+    return;
+
+  /* We must know about the size of the file.  */
+  if (fstat (fd, &st) != 0
+      || (size = (size_t) st.st_size) != st.st_size
+      || size < sizeof (struct mo_file_header))
+    {
+      /* Something went wrong.  */
+      close (fd);
+      return;
+    }
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+  /* Now we are ready to load the file.  If mmap() is available we try
+     this first.  If not available or it failed we try to load it.  */
+  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+                                        MAP_PRIVATE, fd, 0);
+
+  if (data != (struct mo_file_header *) -1)
+    {
+      /* mmap() call was successful.  */
+      close (fd);
+      use_mmap = 1;
+    }
+#endif
+
+  /* If the data is not yet available (i.e. mmap'ed) we try to load
+     it manually.  */
+  if (data == (struct mo_file_header *) -1)
+    {
+      size_t to_read;
+      char *read_ptr;
+
+      data = (struct mo_file_header *) malloc (size);
+      if (data == NULL)
+       return;
+
+      to_read = size;
+      read_ptr = (char *) data;
+      do
+       {
+         long int nb = (long int) read (fd, read_ptr, to_read);
+         if (nb == -1)
+           {
+             close (fd);
+             return;
+           }
+
+         read_ptr += nb;
+         to_read -= nb;
+       }
+      while (to_read > 0);
+
+      close (fd);
+    }
+
+  /* Using the magic number we can test whether it really is a message
+     catalog file.  */
+  if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
+    {
+      /* The magic number is wrong: not a message catalog file.  */
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      return;
+    }
+
+  domain_file->data
+    = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain_file->data == NULL)
+    return;
+
+  domain = (struct loaded_domain *) domain_file->data;
+  domain->data = (char *) data;
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+  domain->use_mmap = use_mmap;
+#endif
+  domain->mmap_size = size;
+  domain->must_swap = data->magic != _MAGIC;
+
+  /* Fill in the information about the available tables.  */
+  switch (W (domain->must_swap, data->revision))
+    {
+    case 0:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+      domain->hash_tab = (nls_uint32 *)
+       ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+      break;
+    default:
+      /* This is an illegal revision.  */
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      free (domain);
+      domain_file->data = NULL;
+      return;
+    }
+
+  /* Show that one domain is changed.  This might make some cached
+     translations invalid.  */
+  ++_nl_msg_cat_cntr;
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->use_mmap)
+    munmap ((caddr_t) domain->data, domain->mmap_size);
+  else
+    free ((void *) domain->data);
+
+  free (domain);
+}
+#endif
diff --git a/gcc/intl/localealias.c b/gcc/intl/localealias.c
new file mode 100644 (file)
index 0000000..bca555a
--- /dev/null
@@ -0,0 +1,424 @@
+/* Handle aliases for locale names.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define strcasecmp __strcasecmp
+
+# define mempcpy __mempcpy
+# define HAVE_MEMPCPY  1
+
+/* We need locking here since we can be called from different places.  */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+static char *string_space = NULL;
+static size_t string_space_act = 0;
+static size_t string_space_max = 0;
+static struct alias_map *map;
+static size_t nmap = 0;
+static size_t maxmap = 0;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+     internal_function;
+static void extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+                                 const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+    const char *name;
+{
+  static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+  struct alias_map *retval;
+  const char *result = NULL;
+  size_t added;
+
+#ifdef _LIBC
+  __libc_lock_lock (lock);
+#endif
+
+  do
+    {
+      struct alias_map item;
+
+      item.alias = name;
+
+      if (nmap > 0)
+       retval = (struct alias_map *) bsearch (&item, map, nmap,
+                                              sizeof (struct alias_map),
+                                              (int (*) PARAMS ((const void *,
+                                                                const void *))
+                                               ) alias_compare);
+      else
+       retval = NULL;
+
+      /* We really found an alias.  Return the value.  */
+      if (retval != NULL)
+       {
+         result = retval->value;
+         break;
+       }
+
+      /* Perhaps we can find another alias file.  */
+      added = 0;
+      while (added == 0 && locale_alias_path[0] != '\0')
+       {
+         const char *start;
+
+         while (locale_alias_path[0] == ':')
+           ++locale_alias_path;
+         start = locale_alias_path;
+
+         while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
+           ++locale_alias_path;
+
+         if (start < locale_alias_path)
+           added = read_alias_file (start, locale_alias_path - start);
+       }
+    }
+  while (added != 0);
+
+#ifdef _LIBC
+  __libc_lock_unlock (lock);
+#endif
+
+  return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (fname, fname_len)
+     const char *fname;
+     int fname_len;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  FILE *fp;
+  char *full_fname;
+  size_t added;
+  static const char aliasfile[] = "/locale.alias";
+
+  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+  ADD_BLOCK (block_list, full_fname);
+#ifdef HAVE_MEMPCPY
+  mempcpy (mempcpy (full_fname, fname, fname_len),
+          aliasfile, sizeof aliasfile);
+#else
+  memcpy (full_fname, fname, fname_len);
+  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+  fp = fopen (full_fname, "r");
+  if (fp == NULL)
+    {
+      FREE_BLOCKS (block_list);
+      return 0;
+    }
+
+  added = 0;
+  while (!feof (fp))
+    {
+      /* It is a reasonable approach to use a fix buffer here because
+        a) we are only interested in the first two fields
+        b) these fields must be usable as file names and so must not
+           be that long
+       */
+      unsigned char buf[BUFSIZ];
+      unsigned char *alias;
+      unsigned char *value;
+      unsigned char *cp;
+
+      if (fgets (buf, sizeof buf, fp) == NULL)
+       /* EOF reached.  */
+       break;
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+        the rest of the line.  */
+      if (strchr (buf, '\n') == NULL)
+       {
+         char altbuf[BUFSIZ];
+         do
+           if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+             /* Make sure the inner loop will be left.  The outer loop
+                will exit at the `feof' test.  */
+             break;
+         while (strchr (altbuf, '\n') == NULL);
+       }
+
+      cp = buf;
+      /* Ignore leading white space.  */
+      while (isspace (cp[0]))
+       ++cp;
+
+      /* A leading '#' signals a comment line.  */
+      if (cp[0] != '\0' && cp[0] != '#')
+       {
+         alias = cp++;
+         while (cp[0] != '\0' && !isspace (cp[0]))
+           ++cp;
+         /* Terminate alias name.  */
+         if (cp[0] != '\0')
+           *cp++ = '\0';
+
+         /* Now look for the beginning of the value.  */
+         while (isspace (cp[0]))
+           ++cp;
+
+         if (cp[0] != '\0')
+           {
+             size_t alias_len;
+             size_t value_len;
+
+             value = cp++;
+             while (cp[0] != '\0' && !isspace (cp[0]))
+               ++cp;
+             /* Terminate value.  */
+             if (cp[0] == '\n')
+               {
+                 /* This has to be done to make the following test
+                    for the end of line possible.  We are looking for
+                    the terminating '\n' which do not overwrite here.  */
+                 *cp++ = '\0';
+                 *cp = '\n';
+               }
+             else if (cp[0] != '\0')
+               *cp++ = '\0';
+
+             if (nmap >= maxmap)
+               extend_alias_table ();
+
+             alias_len = strlen (alias) + 1;
+             value_len = strlen (value) + 1;
+
+             if (string_space_act + alias_len + value_len > string_space_max)
+               {
+                 /* Increase size of memory pool.  */
+                 size_t new_size = (string_space_max
+                                    + (alias_len + value_len > 1024
+                                       ? alias_len + value_len : 1024));
+                 char *new_pool = (char *) realloc (string_space, new_size);
+                 if (new_pool == NULL)
+                   {
+                     FREE_BLOCKS (block_list);
+                     return added;
+                   }
+                 string_space = new_pool;
+                 string_space_max = new_size;
+               }
+
+             map[nmap].alias = memcpy (&string_space[string_space_act],
+                                       alias, alias_len);
+             string_space_act += alias_len;
+
+             map[nmap].value = memcpy (&string_space[string_space_act],
+                                       value, value_len);
+             string_space_act += value_len;
+
+             ++nmap;
+             ++added;
+           }
+       }
+    }
+
+  /* Should we test for ferror()?  I think we have to silently ignore
+     errors.  --drepper  */
+  fclose (fp);
+
+  if (added > 0)
+    qsort (map, nmap, sizeof (struct alias_map),
+          (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+  FREE_BLOCKS (block_list);
+  return added;
+}
+
+
+static void
+extend_alias_table ()
+{
+  size_t new_size;
+  struct alias_map *new_map;
+
+  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+  new_map = (struct alias_map *) realloc (map, (new_size
+                                               * sizeof (struct alias_map)));
+  if (new_map == NULL)
+    /* Simply don't extend: we don't have any more core.  */
+    return;
+
+  map = new_map;
+  maxmap = new_size;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  if (string_space != NULL)
+    free (string_space);
+  if (map != NULL)
+    free (map);
+}
+text_set_element (__libc_subfreeres, free_mem);
+#endif
+
+
+static int
+alias_compare (map1, map2)
+     const struct alias_map *map1;
+     const struct alias_map *map2;
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+  return strcasecmp (map1->alias, map2->alias);
+#else
+  const unsigned char *p1 = (const unsigned char *) map1->alias;
+  const unsigned char *p2 = (const unsigned char *) map2->alias;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      /* I know this seems to be odd but the tolower() function in
+        some systems libc cannot handle nonalpha characters.  */
+      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+      if (c1 == '\0')
+       break;
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+#endif
+}
diff --git a/gcc/intl/textdomain.c b/gcc/intl/textdomain.c
new file mode 100644 (file)
index 0000000..8855746
--- /dev/null
@@ -0,0 +1,108 @@
+/* Implementation of the textdomain(3) function.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain.  */
+extern const char _nl_default_default_domain[];
+
+/* Default text domain in which entries for gettext(3) are to be found.  */
+extern const char *_nl_current_default_domain;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN textdomain__
+#endif
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+char *
+TEXTDOMAIN (domainname)
+     const char *domainname;
+{
+  char *old;
+
+  /* A NULL pointer requests the current setting.  */
+  if (domainname == NULL)
+    return (char *) _nl_current_default_domain;
+
+  old = (char *) _nl_current_default_domain;
+
+  /* If domain name is the null string set to default domain "messages".  */
+  if (domainname[0] == '\0'
+      || strcmp (domainname, _nl_default_default_domain) == 0)
+    _nl_current_default_domain = _nl_default_default_domain;
+  else
+    {
+      /* If the following malloc fails `_nl_current_default_domain'
+        will be NULL.  This value will be returned and so signals we
+        are out of core.  */
+#if defined _LIBC || defined HAVE_STRDUP
+      _nl_current_default_domain = strdup (domainname);
+#else
+      size_t len = strlen (domainname) + 1;
+      char *cp = (char *) malloc (len);
+      if (cp != NULL)
+       memcpy (cp, domainname, len);
+      _nl_current_default_domain = cp;
+#endif
+    }
+
+  if (old != _nl_default_default_domain)
+    free (old);
+
+  return (char *) _nl_current_default_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/gcc/mbchar.c b/gcc/mbchar.c
new file mode 100644 (file)
index 0000000..d54a497
--- /dev/null
@@ -0,0 +1,288 @@
+/* Multibyte Character Functions.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* These functions are used to manipulate multibyte characters.  */
+
+/* Note regarding cross compilation:
+
+   In general translation of multibyte characters to wide characters can
+   only work in a native compiler since the translation function (mbtowc)
+   needs to know about both the source and target character encoding.  However,
+   this particular implementation for JIS, SJIS and EUCJP source characters
+   will work for any compiler with a newlib target.  Other targets may also
+   work provided that their wchar_t implementation is 2 bytes and the encoding
+   leaves the source character values unchanged (except for removing the
+   state shifting markers).  */
+
+#ifdef MULTIBYTE_CHARS
+#include "config.h"
+#include "system.h"
+#include "gansidecl.h"
+#include "mbchar.h"
+#include <locale.h>
+
+typedef enum
+{
+  ESCAPE, DOLLAR, BRACKET, AT, B, J, NUL, JIS_CHAR, OTHER, JIS_C_NUM
+} JIS_CHAR_TYPE;
+
+typedef enum
+{
+  ASCII, A_ESC, A_ESC_DL, JIS, JIS_1, JIS_2, J_ESC, J_ESC_BR,
+  J2_ESC, J2_ESC_BR, INV, JIS_S_NUM
+} JIS_STATE; 
+
+typedef enum
+{
+  COPYA, COPYJ, COPYJ2, MAKE_A, MAKE_J, NOOP, EMPTY, ERROR
+} JIS_ACTION;
+
+/*****************************************************************************
+ * state/action tables for processing JIS encoding
+ * Where possible, switches to JIS are grouped with proceding JIS characters
+ * and switches to ASCII are grouped with preceding JIS characters.
+ * Thus, maximum returned length is:
+ *   2 (switch to JIS) + 2 (JIS characters) + 2 (switch back to ASCII) = 6.
+ *****************************************************************************/
+static JIS_STATE JIS_state_table[JIS_S_NUM][JIS_C_NUM] = {
+/*            ESCAPE DOLLAR   BRACKET   AT     B      J     NUL JIS_CHAR OTHER*/
+/*ASCII*/   { A_ESC, ASCII,   ASCII,    ASCII, ASCII, ASCII, ASCII,ASCII,ASCII},
+/*A_ESC*/   { ASCII, A_ESC_DL,ASCII,    ASCII, ASCII, ASCII, ASCII,ASCII,ASCII},
+/*A_ESC_DL*/{ ASCII, ASCII,   ASCII,    JIS,   JIS,   ASCII, ASCII,ASCII,ASCII},
+/*JIS*/     { J_ESC, JIS_1,   JIS_1,    JIS_1, JIS_1, JIS_1, INV,  JIS_1,INV },
+/*JIS_1*/   { INV,   JIS_2,   JIS_2,    JIS_2, JIS_2, JIS_2, INV,  JIS_2,INV },
+/*JIS_2*/   { J2_ESC,JIS,     JIS,      JIS,   JIS,   JIS,   INV,  JIS,  JIS },
+/*J_ESC*/   { INV,   INV,     J_ESC_BR, INV,   INV,   INV,   INV,  INV,  INV },
+/*J_ESC_BR*/{ INV,   INV,     INV,      INV,   ASCII, ASCII, INV,  INV,  INV },
+/*J2_ESC*/  { INV,   INV,     J2_ESC_BR,INV,   INV,   INV,   INV,  INV,  INV },
+/*J2_ESC_BR*/{INV,   INV,     INV,      INV,   ASCII, ASCII, INV,  INV,  INV },
+};
+
+static JIS_ACTION JIS_action_table[JIS_S_NUM][JIS_C_NUM] = {
+/*            ESCAPE DOLLAR BRACKET AT     B       J      NUL  JIS_CHAR OTHER */
+/*ASCII */   {NOOP,  COPYA, COPYA, COPYA,  COPYA,  COPYA, EMPTY, COPYA, COPYA},
+/*A_ESC */   {COPYA, NOOP,  COPYA, COPYA,  COPYA,  COPYA, COPYA, COPYA, COPYA},
+/*A_ESC_DL */{COPYA, COPYA, COPYA, MAKE_J, MAKE_J, COPYA, COPYA, COPYA, COPYA},
+/*JIS */     {NOOP,  NOOP,  NOOP,  NOOP,   NOOP,   NOOP,  ERROR, NOOP,  ERROR },
+/*JIS_1 */   {ERROR, NOOP,  NOOP,  NOOP,   NOOP,   NOOP,  ERROR, NOOP,  ERROR },
+/*JIS_2 */   {NOOP,  COPYJ2,COPYJ2,COPYJ2, COPYJ2, COPYJ2,ERROR, COPYJ2,COPYJ2},
+/*J_ESC */   {ERROR, ERROR, NOOP,  ERROR,  ERROR,  ERROR, ERROR, ERROR, ERROR },
+/*J_ESC_BR */{ERROR, ERROR, ERROR, ERROR,  NOOP,   NOOP,  ERROR, ERROR, ERROR },
+/*J2_ESC */  {ERROR, ERROR, NOOP,  ERROR,  ERROR,  ERROR, ERROR, ERROR, ERROR },
+/*J2_ESC_BR*/{ERROR, ERROR, ERROR, ERROR,  COPYJ,  COPYJ, ERROR, ERROR, ERROR },
+};
+
+
+char *literal_codeset = NULL;
+
+int
+local_mbtowc (pwc, s, n)
+     wchar_t       *pwc;
+     const char    *s;
+     size_t         n;
+{
+  static JIS_STATE save_state = ASCII;
+  JIS_STATE curr_state = save_state;
+  unsigned char *t = (unsigned char *)s;
+
+  if (s != NULL && n == 0)
+    return -1;
+
+  if (literal_codeset == NULL || strlen (literal_codeset) <= 1)
+    {
+      /* This must be the "C" locale or unknown locale -- fall thru */
+    }
+  else if (! strcmp (literal_codeset, "C-SJIS"))
+    {
+      int char1;
+      if (s == NULL)
+        return 0;  /* not state-dependent */
+      char1 = *t;
+      if (ISSJIS1 (char1))
+        {
+          int char2 = t[1];
+          if (n <= 1)
+            return -1;
+          if (ISSJIS2 (char2))
+            {
+             if (pwc != NULL)
+               *pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
+              return 2;
+            }
+         return -1;
+        }
+      if (pwc != NULL)
+       *pwc = (wchar_t)*t;
+      if (*t == '\0')
+       return 0;
+      return 1;
+    }
+  else if (! strcmp (literal_codeset, "C-EUCJP"))
+    {
+      int char1;
+      if (s == NULL)
+        return 0;  /* not state-dependent */
+      char1 = *t;
+      if (ISEUCJP (char1))
+        {
+          int char2 = t[1];     
+          if (n <= 1)
+            return -1;
+          if (ISEUCJP (char2))
+            {
+             if (pwc != NULL)
+               *pwc = (((wchar_t)*t) << 8) + (wchar_t)(*(t+1));
+              return 2;
+            }
+         return -1;
+        }
+      if (pwc != NULL)
+       *pwc = (wchar_t)*t;
+      if (*t == '\0')
+       return 0;
+      return 1;
+    }
+  else if (! strcmp (literal_codeset, "C-JIS"))
+    {
+      JIS_ACTION action;
+      JIS_CHAR_TYPE ch;
+      unsigned char *ptr;
+      int i, curr_ch;
+      if (s == NULL)
+       {
+         save_state = ASCII;
+         return 1;  /* state-dependent */
+       }
+
+      ptr = t;
+
+      for (i = 0; i < n; ++i)
+        {
+          curr_ch = t[i];
+          switch (curr_ch)
+            {
+           case JIS_ESC_CHAR:
+              ch = ESCAPE;
+              break;
+           case '$':
+              ch = DOLLAR;
+              break;
+            case '@':
+              ch = AT;
+              break;
+            case '(':
+             ch = BRACKET;
+              break;
+            case 'B':
+              ch = B;
+              break;
+            case 'J':
+              ch = J;
+              break;
+            case '\0':
+              ch = NUL;
+              break;
+            default:
+              if (ISJIS (curr_ch))
+                ch = JIS_CHAR;
+              else
+                ch = OTHER;
+           }
+
+          action = JIS_action_table[curr_state][ch];
+          curr_state = JIS_state_table[curr_state][ch];
+        
+          switch (action)
+            {
+            case NOOP:
+              break;
+            case EMPTY:
+             if (pwc != NULL)
+               *pwc = (wchar_t)0;
+             save_state = curr_state;
+              return i;
+            case COPYA:
+             if (pwc != NULL)
+               *pwc = (wchar_t)*ptr;
+             save_state = curr_state;
+              return (i + 1);
+            case COPYJ:
+             if (pwc != NULL)
+               *pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
+             save_state = curr_state;
+              return (i + 1);
+            case COPYJ2:
+             if (pwc != NULL)
+               *pwc = (((wchar_t)*ptr) << 8) + (wchar_t)(*(ptr+1));
+             save_state = curr_state;
+              return (ptr - t) + 2;
+            case MAKE_A:
+            case MAKE_J:
+              ptr = (char *)(t + i + 1);
+              break;
+            case ERROR:
+            default:
+              return -1;
+            }
+        }
+
+      return -1;  /* n < bytes needed */
+    }
+               
+#ifdef CROSS_COMPILE
+  if (s == NULL)
+    return 0;  /* not state-dependent */
+  if (pwc != NULL)
+    *pwc = *s;
+  return 1;
+#else
+  /* This must be the "C" locale or unknown locale. */
+  return mbtowc (pwc, s, n);
+#endif
+}
+
+int
+local_mblen (s, n)
+     const char    *s;
+     size_t         n;
+{
+  return local_mbtowc (NULL, s, n);
+}
+
+int
+local_mb_cur_max ()
+{
+  if (literal_codeset == NULL || strlen (literal_codeset) <= 1)
+    ;
+  else if (! strcmp (literal_codeset, "C-SJIS"))
+    return 2;
+  else if (! strcmp (literal_codeset, "C-EUCJP"))
+    return 2;
+  else if (! strcmp (literal_codeset, "C-JIS"))
+    return 8; /* 3 + 2 + 3 */
+
+#ifdef CROSS_COMPILE
+  return 1;
+#else
+  return MB_CUR_MAX;
+#endif
+}
+#endif /* MULTIBYTE_CHARS */
diff --git a/gcc/mbchar.h b/gcc/mbchar.h
new file mode 100644 (file)
index 0000000..a4b82c0
--- /dev/null
@@ -0,0 +1,25 @@
+/* mbchar.h - Various declarations for functions found in mbchar.c
+   Copyright (C) 1998 Free Software Foundation, Inc.
+ */
+
+#ifndef __GCC_MBCHAR_H__
+#define __GCC_MBCHAR_H__
+
+#ifdef MULTIBYTE_CHARS
+/* escape character used for JIS encoding */
+#define JIS_ESC_CHAR 0x1b
+
+#define ISSJIS1(c)   ((c) >= 0x81 && (c) <= 0x9f || (c) >= 0xe0 && (c) <= 0xef)
+#define ISSJIS2(c)   ((c) >= 0x40 && (c) <= 0x7e || (c) >= 0x80 && (c) <= 0xfc)
+#define ISEUCJP(c)   ((c) >= 0xa1 && (c) <= 0xfe)
+#define ISJIS(c)     ((c) >= 0x21 && (c) <= 0x7e)
+
+int local_mbtowc     PROTO ((wchar_t *, const char *, size_t));
+int local_mblen      PROTO ((const char *, size_t));
+int local_mb_cur_max PROTO ((void));
+
+/* The locale being used for multibyte characters in string/char literals.  */
+extern char *literal_codeset;
+#endif /* MULTIBYTE_CHARS */
+
+#endif /* __GCC_MBCHAR_H__ */
diff --git a/gcc/mkinstalldirs b/gcc/mkinstalldirs
new file mode 100644 (file)
index 0000000..f427ab4
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.1 1998/05/19 07:09:56 drepper Exp $
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp" 1>&2
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/gcc/objc/objc-parse.c b/gcc/objc/objc-parse.c
deleted file mode 100644 (file)
index 6a04682..0000000
+++ /dev/null
@@ -1,5103 +0,0 @@
-
-/*  A Bison parser, made from objc-parse.y with Bison version GNU Bison version 1.24
-  */
-
-#define YYBISON 1  /* Identify Bison output.  */
-
-#define        IDENTIFIER      258
-#define        TYPENAME        259
-#define        SCSPEC  260
-#define        TYPESPEC        261
-#define        TYPE_QUAL       262
-#define        CONSTANT        263
-#define        STRING  264
-#define        ELLIPSIS        265
-#define        SIZEOF  266
-#define        ENUM    267
-#define        STRUCT  268
-#define        UNION   269
-#define        IF      270
-#define        ELSE    271
-#define        WHILE   272
-#define        DO      273
-#define        FOR     274
-#define        SWITCH  275
-#define        CASE    276
-#define        DEFAULT 277
-#define        BREAK   278
-#define        CONTINUE        279
-#define        RETURN  280
-#define        GOTO    281
-#define        ASM_KEYWORD     282
-#define        TYPEOF  283
-#define        ALIGNOF 284
-#define        ATTRIBUTE       285
-#define        EXTENSION       286
-#define        LABEL   287
-#define        REALPART        288
-#define        IMAGPART        289
-#define        ASSIGN  290
-#define        OROR    291
-#define        ANDAND  292
-#define        EQCOMPARE       293
-#define        ARITHCOMPARE    294
-#define        LSHIFT  295
-#define        RSHIFT  296
-#define        UNARY   297
-#define        PLUSPLUS        298
-#define        MINUSMINUS      299
-#define        HYPERUNARY      300
-#define        POINTSAT        301
-#define        INTERFACE       302
-#define        IMPLEMENTATION  303
-#define        END     304
-#define        SELECTOR        305
-#define        DEFS    306
-#define        ENCODE  307
-#define        CLASSNAME       308
-#define        PUBLIC  309
-#define        PRIVATE 310
-#define        PROTECTED       311
-#define        PROTOCOL        312
-#define        OBJECTNAME      313
-#define        CLASS   314
-#define        ALIAS   315
-#define        OBJC_STRING     316
-
-#line 33 "objc-parse.y"
-
-#include <stdio.h>
-#include <errno.h>
-#include <setjmp.h>
-
-#include "config.h"
-#include "tree.h"
-#include "input.h"
-#include "c-lex.h"
-#include "c-tree.h"
-#include "flags.h"
-
-#ifdef MULTIBYTE_CHARS
-#include <stdlib.h>
-#include <locale.h>
-#endif
-
-#include "objc-act.h"
-
-/* Since parsers are distinct for each language, put the language string
-   definition here.  */
-char *language_string = "GNU Obj-C";
-
-#ifndef errno
-extern int errno;
-#endif
-
-void yyerror ();
-
-/* Like YYERROR but do call yyerror.  */
-#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-
-#line 71 "objc-parse.y"
-typedef union {long itype; tree ttype; enum tree_code code;
-       char *filename; int lineno; int ends_in_label; } YYSTYPE;
-#line 198 "objc-parse.y"
-
-/* Number of statements (loosely speaking) seen so far.  */
-static int stmt_count;
-
-/* Input file and line number of the end of the body of last simple_if;
-   used by the stmt-rule immediately after simple_if returns.  */
-static char *if_stmt_file;
-static int if_stmt_line;
-
-/* List of types and structure classes of the current declaration.  */
-static tree current_declspecs = NULL_TREE;
-static tree prefix_attributes = NULL_TREE;
-
-/* Stack of saved values of current_declspecs and prefix_attributes.  */
-static tree declspec_stack;
-
-/* 1 if we explained undeclared var errors.  */
-static int undeclared_variable_notice;
-
-/* Objective-C specific information */
-
-tree objc_interface_context;
-tree objc_implementation_context;
-tree objc_method_context;
-tree objc_ivar_chain;
-tree objc_ivar_context;
-enum tree_code objc_inherit_code;
-int objc_receiver_context;
-int objc_public_flag;
-
-
-/* Tell yyparse how to print a token's value, if yydebug is set.  */
-
-#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
-
-#ifndef YYLTYPE
-typedef
-  struct yyltype
-    {
-      int timestamp;
-      int first_line;
-      int first_column;
-      int last_line;
-      int last_column;
-      char *text;
-   }
-  yyltype;
-
-#define YYLTYPE yyltype
-#endif
-
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define        YYFINAL         940
-#define        YYFLAG          -32768
-#define        YYNTBASE        84
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 305)
-
-static const char 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,    80,     2,     2,     2,    52,    43,     2,    59,
-    76,    50,    48,    81,    49,    58,    51,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,    38,    77,     2,
-    36,     2,    37,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-    60,     2,    83,    42,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    82,    41,    78,    79,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     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,
-    39,    40,    44,    45,    46,    47,    53,    54,    55,    56,
-    57,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-    70,    71,    72,    73,    74,    75
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = {     0,
-     0,     1,     3,     4,     7,     8,    12,    14,    16,    18,
-    24,    27,    31,    36,    41,    44,    47,    50,    53,    55,
-    56,    57,    65,    70,    71,    72,    80,    85,    86,    87,
-    94,    98,   100,   102,   104,   106,   108,   110,   112,   114,
-   116,   118,   120,   122,   123,   125,   127,   131,   133,   136,
-   139,   142,   145,   148,   153,   156,   161,   164,   167,   169,
-   171,   173,   178,   179,   187,   189,   193,   197,   201,   205,
-   209,   213,   217,   221,   225,   229,   233,   237,   238,   243,
-   244,   249,   250,   251,   259,   260,   266,   270,   274,   276,
-   278,   280,   284,   288,   289,   294,   299,   304,   308,   312,
-   315,   318,   320,   322,   324,   326,   328,   330,   333,   335,
-   338,   339,   341,   344,   348,   350,   352,   355,   358,   363,
-   368,   371,   374,   378,   380,   382,   385,   388,   389,   390,
-   395,   400,   404,   408,   411,   414,   417,   420,   424,   425,
-   428,   431,   434,   437,   441,   442,   445,   448,   450,   452,
-   455,   458,   460,   462,   465,   468,   471,   475,   476,   479,
-   481,   483,   485,   488,   491,   493,   498,   503,   505,   507,
-   509,   511,   515,   517,   521,   522,   527,   528,   535,   539,
-   540,   547,   551,   552,   554,   556,   559,   566,   568,   572,
-   573,   575,   580,   587,   592,   594,   596,   598,   600,   602,
-   603,   608,   610,   611,   614,   616,   620,   622,   623,   628,
-   630,   631,   636,   637,   643,   644,   645,   651,   652,   653,
-   659,   661,   663,   667,   671,   676,   680,   684,   688,   690,
-   692,   696,   701,   705,   709,   713,   715,   719,   723,   727,
-   732,   736,   740,   742,   743,   751,   757,   760,   761,   769,
-   775,   778,   779,   788,   789,   797,   800,   801,   803,   804,
-   806,   808,   811,   812,   816,   819,   824,   828,   830,   834,
-   836,   838,   841,   843,   847,   852,   859,   865,   867,   871,
-   873,   875,   879,   882,   885,   886,   888,   890,   893,   894,
-   897,   901,   905,   908,   912,   917,   921,   924,   928,   931,
-   933,   935,   938,   941,   942,   944,   947,   948,   949,   951,
-   953,   956,   960,   962,   965,   968,   975,   981,   987,   990,
-   993,   998,   999,  1004,  1005,  1006,  1010,  1015,  1019,  1021,
-  1023,  1025,  1027,  1030,  1031,  1036,  1038,  1042,  1043,  1044,
-  1052,  1058,  1061,  1062,  1063,  1064,  1077,  1078,  1085,  1088,
-  1091,  1094,  1098,  1105,  1114,  1125,  1138,  1142,  1147,  1149,
-  1151,  1152,  1159,  1163,  1169,  1172,  1175,  1176,  1178,  1179,
-  1181,  1182,  1184,  1186,  1190,  1195,  1197,  1201,  1202,  1205,
-  1208,  1209,  1214,  1217,  1218,  1220,  1222,  1226,  1228,  1232,
-  1237,  1242,  1247,  1252,  1257,  1258,  1261,  1263,  1266,  1268,
-  1272,  1274,  1278,  1280,  1282,  1284,  1286,  1288,  1290,  1292,
-  1294,  1298,  1302,  1307,  1308,  1309,  1320,  1321,  1328,  1329,
-  1330,  1343,  1344,  1353,  1354,  1361,  1364,  1365,  1374,  1379,
-  1380,  1390,  1396,  1397,  1404,  1405,  1407,  1411,  1415,  1417,
-  1419,  1421,  1423,  1424,  1428,  1431,  1435,  1439,  1441,  1442,
-  1444,  1448,  1450,  1454,  1457,  1458,  1459,  1460,  1468,  1469,
-  1470,  1471,  1479,  1480,  1481,  1484,  1486,  1488,  1491,  1492,
-  1496,  1498,  1500,  1501,  1502,  1508,  1509,  1510,  1516,  1521,
-  1523,  1529,  1532,  1533,  1536,  1537,  1539,  1541,  1543,  1546,
-  1549,  1554,  1557,  1560,  1562,  1566,  1569,  1572,  1575,  1576,
-  1579,  1580,  1584,  1586,  1588,  1591,  1593,  1595,  1597,  1599,
-  1601,  1603,  1605,  1607,  1609,  1611,  1613,  1615,  1617,  1619,
-  1621,  1623,  1625,  1627,  1629,  1631,  1633,  1635,  1637,  1639,
-  1641,  1648,  1652,  1658,  1661,  1663,  1665,  1667,  1670,  1672,
-  1676,  1679,  1681,  1683,  1684,  1685,  1692,  1694,  1696,  1698,
-  1701,  1704,  1706,  1711,  1716
-};
-
-static const short yyrhs[] = {    -1,
-    85,     0,     0,    86,    88,     0,     0,    85,    87,    88,
-     0,    90,     0,    89,     0,   236,     0,    27,    59,    99,
-    76,    77,     0,   235,    88,     0,   123,   137,    77,     0,
-   130,   123,   137,    77,     0,   126,   123,   136,    77,     0,
-   130,    77,     0,   126,    77,     0,     1,    77,     0,     1,
-    78,     0,    77,     0,     0,     0,   126,   123,   163,    91,
-   117,    92,   194,     0,   126,   123,   163,     1,     0,     0,
-     0,   130,   123,   166,    93,   117,    94,   194,     0,   130,
-   123,   166,     1,     0,     0,     0,   123,   166,    95,   117,
-    96,   194,     0,   123,   166,     1,     0,     3,     0,     4,
-     0,    72,     0,    67,     0,    43,     0,    49,     0,    48,
-     0,    54,     0,    55,     0,    79,     0,    80,     0,   101,
-     0,     0,   101,     0,   107,     0,   101,    81,   107,     0,
-   113,     0,    50,   105,     0,   235,   105,     0,    98,   105,
-     0,    40,    97,     0,   103,   102,     0,   103,    59,   181,
-    76,     0,   104,   102,     0,   104,    59,   181,    76,     0,
-    33,   105,     0,    34,   105,     0,    11,     0,    29,     0,
-   102,     0,    59,   181,    76,   105,     0,     0,    59,   181,
-    76,    82,   106,   151,    78,     0,   105,     0,   107,    48,
-   107,     0,   107,    49,   107,     0,   107,    50,   107,     0,
-   107,    51,   107,     0,   107,    52,   107,     0,   107,    46,
-   107,     0,   107,    47,   107,     0,   107,    45,   107,     0,
-   107,    44,   107,     0,   107,    43,   107,     0,   107,    41,
-   107,     0,   107,    42,   107,     0,     0,   107,    40,   108,
-   107,     0,     0,   107,    39,   109,   107,     0,     0,     0,
-   107,    37,   110,    99,    38,   111,   107,     0,     0,   107,
-    37,   112,    38,   107,     0,   107,    36,   107,     0,   107,
-    35,   107,     0,     3,     0,     8,     0,   115,     0,    59,
-    99,    76,     0,    59,     1,    76,     0,     0,    59,   114,
-   195,    76,     0,   113,    59,   100,    76,     0,   113,    60,
-    99,    83,     0,   113,    58,    97,     0,   113,    57,    97,
-     0,   113,    54,     0,   113,    55,     0,   296,     0,   302,
-     0,   303,     0,   304,     0,   116,     0,     9,     0,   115,
-     9,     0,    75,     0,   116,    75,     0,     0,   119,     0,
-   119,    10,     0,   200,   201,   120,     0,   118,     0,   189,
-     0,   119,   118,     0,   118,   189,     0,   128,   123,   136,
-    77,     0,   131,   123,   137,    77,     0,   128,    77,     0,
-   131,    77,     0,   200,   201,   125,     0,   121,     0,   189,
-     0,   122,   121,     0,   121,   189,     0,     0,     0,   126,
-   123,   136,    77,     0,   130,   123,   137,    77,     0,   126,
-   123,   157,     0,   130,   123,   160,     0,   126,    77,     0,
-   130,    77,     0,   235,   125,     0,   134,   127,     0,   130,
-   134,   127,     0,     0,   127,   135,     0,   127,     5,     0,
-   127,   144,     0,   134,   129,     0,   131,   134,   129,     0,
-     0,   129,   135,     0,   129,     5,     0,   131,     0,   144,
-     0,   130,   131,     0,   130,   144,     0,     7,     0,     5,
-     0,   131,     7,     0,   131,     5,     0,   134,   133,     0,
-   183,   134,   133,     0,     0,   133,   135,     0,     6,     0,
-   167,     0,     4,     0,    67,   252,     0,    72,   252,     0,
-   253,     0,    28,    59,    99,    76,     0,    28,    59,   181,
-    76,     0,     6,     0,     7,     0,   167,     0,   139,     0,
-   136,    81,   139,     0,   141,     0,   137,    81,   139,     0,
-     0,    27,    59,   115,    76,     0,     0,   163,   138,   143,
-    36,   140,   149,     0,   163,   138,   143,     0,     0,   166,
-   138,   143,    36,   142,   149,     0,   166,   138,   143,     0,
-     0,   144,     0,   145,     0,   144,   145,     0,    30,    59,
-    59,   146,    76,    76,     0,   147,     0,   146,    81,   147,
-     0,     0,   148,     0,   148,    59,     3,    76,     0,   148,
-    59,     3,    81,   101,    76,     0,   148,    59,   100,    76,
-     0,    97,     0,     5,     0,     6,     0,     7,     0,   107,
-     0,     0,    82,   150,   151,    78,     0,     1,     0,     0,
-   152,   172,     0,   153,     0,   152,    81,   153,     0,   107,
-     0,     0,    82,   154,   151,    78,     0,     1,     0,     0,
-    97,    38,   155,   153,     0,     0,    58,    97,    36,   156,
-   153,     0,     0,     0,   163,   158,   117,   159,   195,     0,
-     0,     0,   166,   161,   117,   162,   195,     0,   164,     0,
-   166,     0,    59,   164,    76,     0,   164,    59,   230,     0,
-   164,    60,    99,    83,     0,   164,    60,    83,     0,    50,
-   184,   164,     0,   144,   124,   164,     0,     4,     0,    72,
-     0,   165,    59,   230,     0,   165,    60,    99,    83,     0,
-   165,    60,    83,     0,    50,   184,   165,     0,   144,   124,
-   165,     0,     4,     0,   166,    59,   230,     0,    59,   166,
-    76,     0,    50,   184,   166,     0,   166,    60,    99,    83,
-     0,   166,    60,    83,     0,   144,   124,   166,     0,     3,
-     0,     0,    13,    97,    82,   168,   174,    78,   143,     0,
-    13,    82,   174,    78,   143,     0,    13,    97,     0,     0,
-    14,    97,    82,   169,   174,    78,   143,     0,    14,    82,
-   174,    78,   143,     0,    14,    97,     0,     0,    12,    97,
-    82,   170,   179,   173,    78,   143,     0,     0,    12,    82,
-   171,   179,   173,    78,   143,     0,    12,    97,     0,     0,
-    81,     0,     0,    81,     0,   175,     0,   175,   176,     0,
-     0,   175,   176,    77,     0,   175,    77,     0,    65,    59,
-    67,    76,     0,   132,   123,   177,     0,   132,     0,   183,
-   123,   177,     0,   183,     0,     1,     0,   235,   176,     0,
-   178,     0,   177,    81,   178,     0,   200,   201,   163,   143,
-     0,   200,   201,   163,    38,   107,   143,     0,   200,   201,
-    38,   107,   143,     0,   180,     0,   179,    81,   180,     0,
-     1,     0,    97,     0,    97,    36,   107,     0,   132,   182,
-     0,   183,   182,     0,     0,   185,     0,     7,     0,   183,
-     7,     0,     0,   184,     7,     0,    59,   185,    76,     0,
-    50,   184,   185,     0,    50,   184,     0,   185,    59,   223,
-     0,   185,    60,    99,    83,     0,   185,    60,    83,     0,
-    59,   223,     0,    60,    99,    83,     0,    60,    83,     0,
-   187,     0,   203,     0,   187,   203,     0,   187,   189,     0,
-     0,   186,     0,     1,    77,     0,     0,     0,   192,     0,
-   193,     0,   192,   193,     0,    32,   234,    77,     0,   195,
-     0,     1,   195,     0,    82,    78,     0,    82,   190,   191,
-   122,   188,    78,     0,    82,   190,   191,     1,    78,     0,
-    82,   190,   191,   186,    78,     0,   197,   202,     0,   197,
-     1,     0,    15,    59,    99,    76,     0,     0,    18,   199,
-   202,    17,     0,     0,     0,   200,   201,   205,     0,   200,
-   201,   216,   202,     0,   200,   201,   204,     0,   205,     0,
-   216,     0,   195,     0,   213,     0,    99,    77,     0,     0,
-   196,    16,   206,   202,     0,   196,     0,   196,    16,     1,
-     0,     0,     0,    17,   207,    59,    99,    76,   208,   202,
-     0,   198,    59,    99,    76,    77,     0,   198,     1,     0,
-     0,     0,     0,    19,    59,   218,    77,   209,   218,    77,
-   210,   218,    76,   211,   202,     0,     0,    20,    59,    99,
-    76,   212,   202,     0,    23,    77,     0,    24,    77,     0,
-    25,    77,     0,    25,    99,    77,     0,    27,   217,    59,
-    99,    76,    77,     0,    27,   217,    59,    99,    38,   219,
-    76,    77,     0,    27,   217,    59,    99,    38,   219,    38,
-   219,    76,    77,     0,    27,   217,    59,    99,    38,   219,
-    38,   219,    38,   222,    76,    77,     0,    26,    97,    77,
-     0,    26,    50,    99,    77,     0,    77,     0,   214,     0,
-     0,    19,    59,   113,    76,   215,   202,     0,    21,   107,
-    38,     0,    21,   107,    10,   107,    38,     0,    22,    38,
-     0,    97,    38,     0,     0,     7,     0,     0,    99,     0,
-     0,   220,     0,   221,     0,   220,    81,   221,     0,     9,
-    59,    99,    76,     0,   115,     0,   222,    81,   115,     0,
-     0,   224,   225,     0,   227,    76,     0,     0,   228,    77,
-   226,   225,     0,     1,    76,     0,     0,    10,     0,   228,
-     0,   228,    81,    10,     0,   229,     0,   228,    81,   229,
-     0,   126,   123,   165,   143,     0,   126,   123,   166,   143,
-     0,   126,   123,   182,   143,     0,   130,   123,   166,   143,
-     0,   130,   123,   182,   143,     0,     0,   231,   232,     0,
-   225,     0,   233,    76,     0,     3,     0,   233,    81,     3,
-     0,    97,     0,   234,    81,    97,     0,    31,     0,   240,
-     0,   238,     0,   239,     0,   250,     0,   260,     0,    63,
-     0,    97,     0,   237,    81,    97,     0,    73,   237,    77,
-     0,    74,    97,    97,    77,     0,     0,     0,    61,    97,
-   252,    82,   241,   254,    78,   242,   267,    63,     0,     0,
-    61,    97,   252,   243,   267,    63,     0,     0,     0,    61,
-    97,    38,    97,   252,    82,   244,   254,    78,   245,   267,
-    63,     0,     0,    61,    97,    38,    97,   252,   246,   267,
-    63,     0,     0,    62,    97,    82,   247,   254,    78,     0,
-    62,    97,     0,     0,    62,    97,    38,    97,    82,   248,
-   254,    78,     0,    62,    97,    38,    97,     0,     0,    61,
-    97,    59,    97,    76,   252,   249,   267,    63,     0,    62,
-    97,    59,    97,    76,     0,     0,    71,    97,   252,   251,
-   267,    63,     0,     0,   253,     0,    45,   237,    45,     0,
-   254,   255,   256,     0,   256,     0,    69,     0,    70,     0,
-    68,     0,     0,   256,   257,    77,     0,   256,    77,     0,
-   132,   123,   258,     0,   183,   123,   258,     0,     1,     0,
-     0,   259,     0,   258,    81,   259,     0,   163,     0,   163,
-    38,   107,     0,    38,   107,     0,     0,     0,     0,    48,
-   261,   277,   262,   278,   263,   194,     0,     0,     0,     0,
-    49,   264,   277,   265,   278,   266,   194,     0,     0,     0,
-   268,   269,     0,   272,     0,    89,     0,   269,   272,     0,
-     0,   269,   270,    89,     0,    77,     0,     1,     0,     0,
-     0,    48,   273,   277,   274,   271,     0,     0,     0,    49,
-   275,   277,   276,   271,     0,    59,   181,    76,   286,     0,
-   286,     0,    59,   181,    76,   287,   284,     0,   287,   284,
-     0,     0,    77,   279,     0,     0,   280,     0,   281,     0,
-   189,     0,   280,   281,     0,   281,   189,     0,   126,   123,
-   282,    77,     0,   126,    77,     0,   130,    77,     0,   283,
-     0,   282,    81,   283,     0,   165,   143,     0,   166,   143,
-     0,   182,   143,     0,     0,    81,    10,     0,     0,    81,
-   285,   227,     0,   288,     0,   290,     0,   287,   290,     0,
-     3,     0,     4,     0,    72,     0,   289,     0,    12,     0,
-    13,     0,    14,     0,    15,     0,    16,     0,    17,     0,
-    18,     0,    19,     0,    20,     0,    21,     0,    22,     0,
-    23,     0,    24,     0,    25,     0,    26,     0,    27,     0,
-    11,     0,    28,     0,    29,     0,     6,     0,     7,     0,
-   288,    38,    59,   181,    76,    97,     0,   288,    38,    97,
-     0,    38,    59,   181,    76,    97,     0,    38,    97,     0,
-   288,     0,   292,     0,   294,     0,   292,   294,     0,   101,
-     0,   288,    38,   293,     0,    38,   293,     0,    99,     0,
-    67,     0,     0,     0,    60,   297,   295,   298,   291,    83,
-     0,   288,     0,   300,     0,   301,     0,   300,   301,     0,
-   288,    38,     0,    38,     0,    64,    59,   299,    76,     0,
-    71,    59,    97,    76,     0,    66,    59,   181,    76,     0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
-   236,   241,   255,   257,   257,   258,   260,   262,   263,   264,
-   272,   276,   287,   292,   297,   299,   301,   302,   303,   308,
-   315,   317,   322,   327,   333,   335,   340,   345,   351,   353,
-   358,   365,   367,   368,   369,   372,   374,   376,   378,   380,
-   382,   384,   388,   392,   395,   398,   401,   405,   407,   410,
-   413,   417,   445,   451,   454,   457,   460,   462,   466,   470,
-   474,   476,   479,   483,   510,   512,   514,   516,   518,   520,
-   522,   524,   526,   528,   530,   532,   534,   536,   540,   542,
-   546,   548,   551,   555,   557,   564,   567,   570,   576,   736,
-   737,   739,   745,   747,   761,   784,   786,   788,   800,   814,
-   816,   818,   820,   822,   824,   826,   831,   833,   839,   841,
-   845,   847,   848,   858,   863,   865,   866,   867,   874,   880,
-   885,   888,   896,   901,   903,   904,   905,   912,   923,   927,
-   933,   938,   943,   948,   950,   952,   961,   964,   968,   970,
-   972,   977,   981,   984,   988,   991,   993,  1005,  1008,  1010,
-  1012,  1016,  1020,  1022,  1025,  1038,  1041,  1045,  1047,  1055,
-  1056,  1057,  1061,  1063,  1068,  1070,  1072,  1078,  1079,  1080,
-  1083,  1085,  1088,  1090,  1093,  1096,  1102,  1109,  1111,  1118,
-  1125,  1128,  1135,  1138,  1142,  1145,  1149,  1154,  1157,  1161,
-  1164,  1166,  1168,  1170,  1177,  1179,  1180,  1181,  1186,  1188,
-  1193,  1201,  1206,  1210,  1213,  1215,  1220,  1223,  1225,  1227,
-  1231,  1234,  1234,  1237,  1239,  1250,  1258,  1262,  1273,  1281,
-  1288,  1290,  1295,  1298,  1303,  1305,  1307,  1314,  1316,  1317,
-  1325,  1331,  1333,  1335,  1342,  1344,  1350,  1356,  1358,  1360,
-  1362,  1369,  1371,  1374,  1379,  1381,  1385,  1387,  1389,  1391,
-  1395,  1397,  1400,  1403,  1406,  1409,  1413,  1415,  1418,  1420,
-  1424,  1427,  1432,  1434,  1436,  1440,  1464,  1471,  1476,  1482,
-  1487,  1489,  1494,  1496,  1500,  1504,  1508,  1518,  1520,  1525,
-  1530,  1533,  1537,  1540,  1544,  1547,  1550,  1553,  1557,  1560,
-  1564,  1568,  1570,  1572,  1574,  1576,  1578,  1580,  1582,  1592,
-  1600,  1602,  1604,  1608,  1610,  1613,  1616,  1629,  1631,  1636,
-  1638,  1641,  1655,  1658,  1661,  1663,  1671,  1679,  1690,  1695,
-  1698,  1711,  1719,  1723,  1727,  1731,  1737,  1741,  1746,  1749,
-  1754,  1757,  1758,  1775,  1780,  1783,  1795,  1797,  1807,  1817,
-  1818,  1826,  1829,  1841,  1845,  1862,  1872,  1881,  1886,  1891,
-  1896,  1900,  1904,  1915,  1922,  1929,  1936,  1947,  1953,  1956,
-  1961,  1984,  2018,  2043,  2074,  2089,  2100,  2104,  2108,  2111,
-  2116,  2118,  2121,  2123,  2127,  2132,  2135,  2141,  2146,  2151,
-  2153,  2162,  2163,  2169,  2171,  2181,  2183,  2187,  2190,  2196,
-  2206,  2215,  2224,  2234,  2248,  2253,  2258,  2260,  2269,  2272,
-  2277,  2280,  2284,  2292,  2294,  2295,  2296,  2297,  2298,  2312,
-  2315,  2319,  2325,  2331,  2338,  2343,  2349,  2356,  2362,  2368,
-  2373,  2379,  2386,  2392,  2398,  2404,  2412,  2418,  2424,  2432,
-  2439,  2445,  2454,  2461,  2469,  2474,  2477,  2487,  2489,  2492,
-  2494,  2495,  2498,  2503,  2504,  2521,  2528,  2534,  2538,  2541,
-  2542,  2545,  2553,  2559,  2568,  2578,  2585,  2589,  2594,  2603,
-  2610,  2614,  2624,  2626,  2627,  2629,  2631,  2632,  2633,  2634,
-  2636,  2638,  2641,  2647,  2652,  2652,  2657,  2661,  2663,  2669,
-  2674,  2679,  2688,  2690,  2696,  2698,  2701,  2703,  2704,  2705,
-  2708,  2714,  2716,  2720,  2723,  2730,  2736,  2741,  2748,  2753,
-  2758,  2763,  2770,  2774,  2777,  2783,  2785,  2786,  2787,  2790,
-  2792,  2793,  2794,  2795,  2796,  2797,  2798,  2799,  2800,  2801,
-  2802,  2803,  2804,  2805,  2806,  2807,  2808,  2809,  2810,  2810,
-  2813,  2819,  2824,  2829,  2835,  2837,  2840,  2842,  2849,  2861,
-  2866,  2872,  2874,  2880,  2884,  2885,  2891,  2893,  2896,  2898,
-  2904,  2909,  2915,  2922,  2931
-};
-
-static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER",
-"TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
-"ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
-"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ATTRIBUTE",
-"EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'","OROR",
-"ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT","'+'",
-"'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT",
-"'.'","'('","'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE",
-"CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS",
-"OBJC_STRING","')'","';'","'}'","'~'","'!'","','","'{'","']'","program","extdefs",
-"@1","@2","extdef","datadef","fndef","@3","@4","@5","@6","@7","@8","identifier",
-"unop","expr","exprlist","nonnull_exprlist","unary_expr","sizeof","alignof",
-"cast_expr","@9","expr_no_commas","@10","@11","@12","@13","@14","primary","@15",
-"string","objc_string","old_style_parm_decls","lineno_datadecl","datadecls",
-"datadecl","lineno_decl","decls","setspecs","setattrs","decl","typed_declspecs",
-"reserved_declspecs","typed_declspecs_no_prefix_attr","reserved_declspecs_no_prefix_attr",
-"declmods","declmods_no_prefix_attr","typed_typespecs","reserved_typespecquals",
-"typespec","typespecqual_reserved","initdecls","notype_initdecls","maybeasm",
-"initdcl","@16","notype_initdcl","@17","maybe_attribute","attributes","attribute",
-"attribute_list","attrib","any_word","init","@18","initlist_maybe_comma","initlist1",
-"initelt","@19","@20","@21","nested_function","@22","@23","notype_nested_function",
-"@24","@25","declarator","after_type_declarator","parm_declarator","notype_declarator",
-"structsp","@26","@27","@28","@29","maybecomma","maybecomma_warn","component_decl_list",
-"component_decl_list2","component_decl","components","component_declarator",
-"enumlist","enumerator","typename","absdcl","nonempty_type_quals","type_quals",
-"absdcl1","stmts","lineno_stmt_or_labels","xstmts","errstmt","pushlevel","maybe_label_decls",
-"label_decls","label_decl","compstmt_or_error","compstmt","simple_if","if_prefix",
-"do_stmt_start","@30","save_filename","save_lineno","lineno_labeled_stmt","lineno_stmt_or_label",
-"stmt_or_label","stmt","@31","@32","@33","@34","@35","@36","@37","all_iter_stmt",
-"all_iter_stmt_simple","@38","label","maybe_type_qual","xexpr","asm_operands",
-"nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@39","parmlist_1",
-"@40","parmlist_2","parms","parm","parmlist_or_identifiers","@41","parmlist_or_identifiers_1",
-"identifiers","identifiers_or_typenames","extension","objcdef","identifier_list",
-"classdecl","aliasdecl","classdef","@42","@43","@44","@45","@46","@47","@48",
-"@49","@50","protocoldef","@51","protocolrefs","non_empty_protocolrefs","ivar_decl_list",
-"visibility_spec","ivar_decls","ivar_decl","ivars","ivar_declarator","methoddef",
-"@52","@53","@54","@55","@56","@57","methodprotolist","@58","methodprotolist2",
-"@59","semi_or_error","methodproto","@60","@61","@62","@63","methoddecl","optarglist",
-"myxdecls","mydecls","mydecl","myparms","myparm","optparmlist","@64","unaryselector",
-"keywordselector","selector","reservedwords","keyworddecl","messageargs","keywordarglist",
-"keywordexpr","keywordarg","receiver","objcmessageexpr","@65","@66","selectorarg",
-"keywordnamelist","keywordname","objcselectorexpr","objcprotocolexpr","objcencodeexpr",
-""
-};
-#endif
-
-static const short yyr1[] = {     0,
-    84,    84,    86,    85,    87,    85,    88,    88,    88,    88,
-    88,    89,    89,    89,    89,    89,    89,    89,    89,    91,
-    92,    90,    90,    93,    94,    90,    90,    95,    96,    90,
-    90,    97,    97,    97,    97,    98,    98,    98,    98,    98,
-    98,    98,    99,   100,   100,   101,   101,   102,   102,   102,
-   102,   102,   102,   102,   102,   102,   102,   102,   103,   104,
-   105,   105,   106,   105,   107,   107,   107,   107,   107,   107,
-   107,   107,   107,   107,   107,   107,   107,   108,   107,   109,
-   107,   110,   111,   107,   112,   107,   107,   107,   113,   113,
-   113,   113,   113,   114,   113,   113,   113,   113,   113,   113,
-   113,   113,   113,   113,   113,   113,   115,   115,   116,   116,
-   117,   117,   117,   118,   119,   119,   119,   119,   120,   120,
-   120,   120,   121,   122,   122,   122,   122,   123,   124,   125,
-   125,   125,   125,   125,   125,   125,   126,   126,   127,   127,
-   127,   127,   128,   128,   129,   129,   129,   130,   130,   130,
-   130,   131,   131,   131,   131,   132,   132,   133,   133,   134,
-   134,   134,   134,   134,   134,   134,   134,   135,   135,   135,
-   136,   136,   137,   137,   138,   138,   140,   139,   139,   142,
-   141,   141,   143,   143,   144,   144,   145,   146,   146,   147,
-   147,   147,   147,   147,   148,   148,   148,   148,   149,   150,
-   149,   149,   151,   151,   152,   152,   153,   154,   153,   153,
-   155,   153,   156,   153,   158,   159,   157,   161,   162,   160,
-   163,   163,   164,   164,   164,   164,   164,   164,   164,   164,
-   165,   165,   165,   165,   165,   165,   166,   166,   166,   166,
-   166,   166,   166,   168,   167,   167,   167,   169,   167,   167,
-   167,   170,   167,   171,   167,   167,   172,   172,   173,   173,
-   174,   174,   175,   175,   175,   175,   176,   176,   176,   176,
-   176,   176,   177,   177,   178,   178,   178,   179,   179,   179,
-   180,   180,   181,   181,   182,   182,   183,   183,   184,   184,
-   185,   185,   185,   185,   185,   185,   185,   185,   185,   186,
-   187,   187,   187,   188,   188,   189,   190,   191,   191,   192,
-   192,   193,   194,   194,   195,   195,   195,   195,   196,   196,
-   197,   199,   198,   200,   201,   202,   202,   203,   204,   204,
-   205,   205,   205,   206,   205,   205,   205,   207,   208,   205,
-   205,   205,   209,   210,   211,   205,   212,   205,   205,   205,
-   205,   205,   205,   205,   205,   205,   205,   205,   205,   213,
-   215,   214,   216,   216,   216,   216,   217,   217,   218,   218,
-   219,   219,   220,   220,   221,   222,   222,   224,   223,   225,
-   226,   225,   225,   227,   227,   227,   227,   228,   228,   229,
-   229,   229,   229,   229,   231,   230,   232,   232,   233,   233,
-   234,   234,   235,   236,   236,   236,   236,   236,   236,   237,
-   237,   238,   239,   241,   242,   240,   243,   240,   244,   245,
-   240,   246,   240,   247,   240,   240,   248,   240,   240,   249,
-   240,   240,   251,   250,   252,   252,   253,   254,   254,   255,
-   255,   255,   256,   256,   256,   257,   257,   257,   258,   258,
-   258,   259,   259,   259,   261,   262,   263,   260,   264,   265,
-   266,   260,   267,   268,   267,   269,   269,   269,   270,   269,
-   271,   271,   273,   274,   272,   275,   276,   272,   277,   277,
-   277,   277,   278,   278,   279,   279,   280,   280,   280,   280,
-   281,   281,   281,   282,   282,   283,   283,   283,   284,   284,
-   285,   284,   286,   287,   287,   288,   288,   288,   288,   289,
-   289,   289,   289,   289,   289,   289,   289,   289,   289,   289,
-   289,   289,   289,   289,   289,   289,   289,   289,   289,   289,
-   290,   290,   290,   290,   291,   291,   292,   292,   293,   294,
-   294,   295,   295,   297,   298,   296,   299,   299,   300,   300,
-   301,   301,   302,   303,   304
-};
-
-static const short yyr2[] = {     0,
-     0,     1,     0,     2,     0,     3,     1,     1,     1,     5,
-     2,     3,     4,     4,     2,     2,     2,     2,     1,     0,
-     0,     7,     4,     0,     0,     7,     4,     0,     0,     6,
-     3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     0,     1,     1,     3,     1,     2,     2,
-     2,     2,     2,     4,     2,     4,     2,     2,     1,     1,
-     1,     4,     0,     7,     1,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     3,     3,     0,     4,     0,
-     4,     0,     0,     7,     0,     5,     3,     3,     1,     1,
-     1,     3,     3,     0,     4,     4,     4,     3,     3,     2,
-     2,     1,     1,     1,     1,     1,     1,     2,     1,     2,
-     0,     1,     2,     3,     1,     1,     2,     2,     4,     4,
-     2,     2,     3,     1,     1,     2,     2,     0,     0,     4,
-     4,     3,     3,     2,     2,     2,     2,     3,     0,     2,
-     2,     2,     2,     3,     0,     2,     2,     1,     1,     2,
-     2,     1,     1,     2,     2,     2,     3,     0,     2,     1,
-     1,     1,     2,     2,     1,     4,     4,     1,     1,     1,
-     1,     3,     1,     3,     0,     4,     0,     6,     3,     0,
-     6,     3,     0,     1,     1,     2,     6,     1,     3,     0,
-     1,     4,     6,     4,     1,     1,     1,     1,     1,     0,
-     4,     1,     0,     2,     1,     3,     1,     0,     4,     1,
-     0,     4,     0,     5,     0,     0,     5,     0,     0,     5,
-     1,     1,     3,     3,     4,     3,     3,     3,     1,     1,
-     3,     4,     3,     3,     3,     1,     3,     3,     3,     4,
-     3,     3,     1,     0,     7,     5,     2,     0,     7,     5,
-     2,     0,     8,     0,     7,     2,     0,     1,     0,     1,
-     1,     2,     0,     3,     2,     4,     3,     1,     3,     1,
-     1,     2,     1,     3,     4,     6,     5,     1,     3,     1,
-     1,     3,     2,     2,     0,     1,     1,     2,     0,     2,
-     3,     3,     2,     3,     4,     3,     2,     3,     2,     1,
-     1,     2,     2,     0,     1,     2,     0,     0,     1,     1,
-     2,     3,     1,     2,     2,     6,     5,     5,     2,     2,
-     4,     0,     4,     0,     0,     3,     4,     3,     1,     1,
-     1,     1,     2,     0,     4,     1,     3,     0,     0,     7,
-     5,     2,     0,     0,     0,    12,     0,     6,     2,     2,
-     2,     3,     6,     8,    10,    12,     3,     4,     1,     1,
-     0,     6,     3,     5,     2,     2,     0,     1,     0,     1,
-     0,     1,     1,     3,     4,     1,     3,     0,     2,     2,
-     0,     4,     2,     0,     1,     1,     3,     1,     3,     4,
-     4,     4,     4,     4,     0,     2,     1,     2,     1,     3,
-     1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-     3,     3,     4,     0,     0,    10,     0,     6,     0,     0,
-    12,     0,     8,     0,     6,     2,     0,     8,     4,     0,
-     9,     5,     0,     6,     0,     1,     3,     3,     1,     1,
-     1,     1,     0,     3,     2,     3,     3,     1,     0,     1,
-     3,     1,     3,     2,     0,     0,     0,     7,     0,     0,
-     0,     7,     0,     0,     2,     1,     1,     2,     0,     3,
-     1,     1,     0,     0,     5,     0,     0,     5,     4,     1,
-     5,     2,     0,     2,     0,     1,     1,     1,     2,     2,
-     4,     2,     2,     1,     3,     2,     2,     2,     0,     2,
-     0,     3,     1,     1,     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,
-     6,     3,     5,     2,     1,     1,     1,     2,     1,     3,
-     2,     1,     1,     0,     0,     6,     1,     1,     1,     2,
-     2,     1,     4,     4,     4
-};
-
-static const short yydefact[] = {     3,
-     5,     0,     0,     0,   162,   153,   160,   152,     0,     0,
-     0,     0,     0,     0,   403,     0,   455,   459,     0,     0,
-   409,   435,     0,   435,     0,     0,    19,     4,     8,     7,
-     0,   128,   128,   148,   139,   149,   185,   161,     0,     9,
-   405,   406,   404,   407,   165,   408,     6,    17,    18,    32,
-    33,    35,    34,   254,   256,   263,   247,   263,   251,     0,
-     0,     0,   410,     0,     0,     0,   435,   426,   163,   436,
-   435,   164,     0,     0,   243,   289,     0,     0,   173,   129,
-     0,    16,     0,    15,     0,   150,   139,   151,   155,   154,
-   137,   186,    11,     0,   252,     0,     0,     0,   244,     0,
-   248,    89,    90,   107,    59,    60,     0,     0,     0,    36,
-    38,    37,     0,    39,    40,     0,   544,     0,     0,     0,
-   109,    41,    42,     0,     0,    43,    61,     0,     0,    65,
-    46,    48,    91,   106,     0,   102,   103,   104,   105,   287,
-     0,   285,   158,     0,   285,   190,   437,     0,   506,   507,
-   529,   530,   526,   510,   511,   512,   513,   514,   515,   516,
-   517,   518,   519,   520,   521,   522,   523,   524,   525,   527,
-   528,     0,     0,   508,   456,   480,   499,   503,   509,   504,
-   460,     0,     0,   417,     0,     0,   424,   433,   412,     0,
-     0,     0,    12,     0,     0,    31,     0,   395,     0,     0,
-   183,   229,   289,     0,   230,     0,   171,   129,     0,   221,
-   222,     0,     0,   138,   141,   168,   169,   140,   142,   170,
-   280,   281,   259,   278,     0,     0,   183,   271,   265,   128,
-   262,   128,     0,   263,   183,   263,    57,    58,    52,    49,
-     0,     0,     0,     0,     0,     0,     0,     0,    51,     0,
-     0,     0,    53,     0,    55,     0,     0,    82,    80,    78,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   100,   101,     0,     0,    44,     0,   108,   110,
-    50,   166,   289,   378,     0,   283,   286,   156,   167,   288,
-   158,   284,   196,   197,   198,   195,     0,   188,   191,   411,
-     0,   534,     0,   483,   501,   482,     0,   505,     0,   483,
-   435,     0,   414,   464,   429,     0,   443,   464,   413,   290,
-   239,   238,   174,   175,   242,     0,   237,     0,   241,     0,
-     0,    29,     0,   324,   116,   325,   182,   184,     0,     0,
-    14,     0,     0,    23,     0,   183,   395,     0,    13,    27,
-     0,     0,   260,     0,   259,     0,   246,   324,   264,   324,
-   272,     0,   250,     0,    93,    92,   307,     0,     0,   543,
-   542,   545,   552,   547,     0,   548,   549,     0,     0,    10,
-    47,     0,     0,    88,    87,     0,     0,     0,     0,    76,
-    77,    75,    74,    73,    71,    72,    66,    67,    68,    69,
-    70,    99,    98,     0,    45,     0,   293,     0,   297,     0,
-   299,     0,   378,     0,   159,   157,     0,   190,    44,     0,
-     0,     0,   457,   500,   384,     0,   532,   461,   422,   435,
-   443,     0,     0,   427,   432,     0,     0,     0,     0,     0,
-   399,   385,   128,   128,   397,     0,   386,   388,   396,     0,
-   240,   306,     0,   118,   113,   117,     0,   180,   227,   223,
-   172,   228,    21,   179,   224,   226,     0,    25,   282,   279,
-   183,     0,   266,   267,   273,   325,   269,   183,   183,   315,
-   308,    95,    63,    62,     0,   551,   553,     0,   550,   555,
-   554,    54,    56,     0,     0,    81,    79,    96,    97,   292,
-   291,   379,   298,   294,   296,     0,   187,   189,    89,     0,
-     0,   479,   499,   128,     0,   488,   484,   486,     0,     0,
-   502,   386,     0,     0,   419,   464,   430,     0,   418,   473,
-   476,   467,     0,   128,   128,   469,   466,   443,   442,   440,
-   441,   425,   443,   448,   445,   128,   128,     0,   434,   176,
-   383,   285,   285,   380,   381,     0,   398,     0,     0,    30,
-   313,   114,   128,   128,   145,     0,     0,   177,   225,     0,
-   255,   183,   324,     0,   245,   249,     0,     0,   309,   310,
-     0,     0,   535,     0,   536,   537,    83,    86,   295,   192,
-     0,   194,   533,   481,   492,   285,   493,   489,   490,   458,
-     0,   462,   443,     0,   464,   415,     0,     0,   175,     0,
-     0,     0,   468,     0,     0,   449,   449,   444,   236,   289,
-   378,   129,   183,   183,   183,   289,   183,   183,     0,   387,
-   389,   400,   314,   121,     0,   122,     0,   145,   143,   202,
-   200,   199,   181,    22,     0,    26,   253,   274,     0,   183,
-   401,     0,     0,     0,   324,     0,     0,   125,   325,   301,
-   311,   210,    89,     0,   208,     0,   207,     0,   257,   205,
-   539,   541,     0,   546,     0,   538,     0,     0,   183,   183,
-   183,     0,   494,   531,     0,   423,     0,   464,   474,   477,
-   470,   428,     0,   452,   446,   450,   447,   293,     0,   395,
-     0,   390,   391,   392,   293,   393,   394,   382,     0,     0,
-   144,   147,   146,     0,   178,   183,     0,   275,   312,     0,
-   317,   127,   126,   305,     0,   318,   303,   325,   302,     0,
-     0,     0,   211,    64,     0,   204,   540,    84,   193,   496,
-   497,   498,   491,   285,   420,   431,     0,     0,     0,   454,
-     0,     0,   234,   289,   235,   231,   233,     0,   119,   120,
-     0,   277,   183,   402,   316,     0,   162,     0,   338,   322,
-     0,     0,     0,     0,     0,     0,     0,     0,   367,   435,
-   435,   359,     0,     0,   123,   128,   128,   331,   336,     0,
-     0,   328,   329,   332,   360,   330,     0,   213,     0,     0,
-   206,   495,   464,   416,   472,   471,   475,   478,   453,   451,
-     0,   232,   201,   276,     0,     0,   324,   369,     0,     0,
-   365,   349,   350,   351,     0,     0,     0,   368,     0,   366,
-   333,   134,     0,   135,     0,     0,   320,   325,   319,   342,
-     0,   136,     0,   209,   212,     0,     0,     0,     0,   370,
-    48,     0,     0,     0,   363,   352,     0,   357,     0,     0,
-   132,   215,     0,   133,   218,   337,   324,     0,     0,   214,
-   421,   321,     0,   323,   361,   343,   347,     0,   358,     0,
-   130,     0,   131,     0,   335,   326,   324,     0,   339,   324,
-   369,   324,   364,   371,     0,   216,   219,   327,   341,   324,
-   362,     0,   348,     0,     0,   372,   373,   353,     0,     0,
-   340,   344,     0,   371,     0,     0,   217,   220,   369,     0,
-     0,   354,   374,     0,   375,     0,     0,   345,   376,     0,
-   355,   324,     0,     0,   346,   356,   377,     0,     0,     0
-};
-
-static const short yydefgoto[] = {   938,
-     1,     2,     3,    28,    29,    30,   345,   567,   351,   570,
-   200,   453,   666,   124,   242,   404,   126,   127,   128,   129,
-   130,   581,   131,   389,   388,   386,   677,   387,   132,   243,
-   133,   134,   332,   333,   334,   562,   654,   655,    31,   195,
-   785,   443,    91,   563,   639,   444,    34,   142,   288,    35,
-   218,   206,    78,   201,   207,   645,    79,   566,   337,   338,
-    37,   297,   298,   299,   643,   714,   668,   669,   670,   732,
-   800,   843,   861,   882,   909,   864,   884,   910,   324,   210,
-   679,   211,    38,   234,   236,   225,    94,   736,   354,    97,
-    98,   231,   474,   475,   223,   224,   144,   681,   145,   191,
-   287,   656,   657,   725,   335,   481,   578,   579,   580,   560,
-   561,   789,   790,   791,   817,   838,   457,   839,   660,   792,
-   793,   867,   816,   900,   891,   919,   932,   892,   794,   795,
-   890,   796,   829,   852,   905,   906,   907,   930,   409,   410,
-   445,   629,   446,   447,   448,   327,   328,   449,   450,   652,
-   135,    40,    64,    41,    42,    43,   431,   688,   314,   603,
-   803,   526,   317,   538,   605,    44,   318,    69,    45,   436,
-   543,   437,   548,   695,   696,    46,    65,   304,   520,    66,
-   310,   524,   432,   433,   536,   612,   807,   537,   607,   748,
-   608,   749,   175,   423,   517,   518,   519,   682,   683,   306,
-   425,   176,   177,   178,   179,   180,   584,   585,   672,   586,
-   372,   136,   245,   485,   375,   376,   377,   137,   138,   139
-};
-
-static const short yypact[] = {   128,
-   132,  2936,  2936,   108,-32768,-32768,-32768,-32768,   139,   253,
-   266,    86,   103,   111,-32768,    99,-32768,-32768,    99,    99,
--32768,   158,    99,   158,    99,    99,-32768,-32768,-32768,-32768,
-   169,   137,  2416,   115,-32768,   197,-32768,-32768,  2936,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   155,   214,   210,   214,   212,  2645,
-  2483,   252,-32768,    50,  3210,  3210,   151,    51,-32768,-32768,
-   158,-32768,   209,    99,-32768,-32768,   169,   286,-32768,   197,
-  1661,-32768,   319,-32768,   169,   115,-32768,   197,-32768,-32768,
-   729,-32768,-32768,   120,-32768,   255,   277,  1592,-32768,   283,
--32768,-32768,-32768,-32768,-32768,-32768,  2645,  2645,    99,-32768,
--32768,-32768,  2645,-32768,-32768,   932,-32768,   288,   312,   314,
--32768,-32768,-32768,  2645,   305,   311,-32768,  2699,  2753,-32768,
-  3581,   622,   396,   346,  2645,-32768,-32768,-32768,-32768,-32768,
-   356,   267,-32768,   359,  3364,   269,-32768,    99,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   398,  3487,-32768,-32768,-32768,  2377,   415,-32768,-32768,
--32768,    99,    99,   377,    99,    99,-32768,-32768,-32768,   397,
-   105,   119,-32768,   319,   169,-32768,   420,-32768,  1846,  1806,
-   197,-32768,-32768,   319,-32768,   327,-32768,   197,  1759,   434,
-   484,   364,  1680,   729,-32768,-32768,-32768,-32768,   197,-32768,
--32768,   473,   439,-32768,   120,   448,   197,-32768,-32768,   534,
-   445,   352,  3175,   214,   197,   214,-32768,-32768,-32768,-32768,
-   454,   456,   472,   481,  2537,  3272,  3487,    99,-32768,   485,
-  2645,   932,-32768,   932,-32768,  2645,  2645,   557,-32768,-32768,
-  2645,  2645,  2645,  2645,  2645,  2645,  2645,  2645,  2645,  2645,
-  2645,  2645,-32768,-32768,    99,    99,  2645,  2645,-32768,-32768,
--32768,-32768,-32768,   267,  1905,-32768,   562,   766,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   225,-32768,   547,-32768,
-  3487,-32768,   542,   550,   624,-32768,   415,-32768,   408,   550,
-   158,   560,-32768,   581,   566,   578,-32768,   581,-32768,-32768,
-   484,-32768,-32768,   641,   484,   660,-32768,  3089,-32768,   602,
-   614,-32768,   682,    83,-32768,-32768,   634,   197,   110,   243,
--32768,   319,   319,-32768,  1806,   197,-32768,  1964,-32768,-32768,
-  1806,  2645,    99,   619,   439,   627,-32768,-32768,-32768,-32768,
--32768,   620,-32768,   628,-32768,-32768,   629,   633,  2297,-32768,
--32768,-32768,-32768,   662,   640,  3272,-32768,   642,   644,-32768,
-  3581,   648,   650,  3581,  3581,  2645,   679,  2645,  2645,  2456,
-   783,   879,  1653,  1750,   760,   760,   537,   537,-32768,-32768,
--32768,-32768,-32768,   652,   311,   667,   336,   245,-32768,  3108,
--32768,   673,-32768,  2023,-32768,   766,   669,   269,  2807,   695,
-  3300,   850,-32768,-32768,  3375,  3487,-32768,-32768,   693,   158,
--32768,   718,  3011,-32768,-32768,   184,  2884,   719,    78,   707,
--32768,-32768,-32768,  3450,-32768,   711,   430,-32768,-32768,   298,
--32768,-32768,    76,-32768,-32768,-32768,  3469,-32768,   434,-32768,
--32768,   434,-32768,   752,-32768,-32768,   708,-32768,  3581,-32768,
-   197,   715,-32768,   713,-32768,-32768,   713,   197,   197,-32768,
-   763,-32768,-32768,-32768,  3336,-32768,-32768,   662,-32768,-32768,
--32768,-32768,-32768,   761,  2645,  1473,  1820,-32768,-32768,   562,
--32768,-32768,-32768,-32768,-32768,   722,-32768,-32768,   339,   730,
-    99,-32768,  2377,   740,  3119,-32768,-32768,  3450,  1778,    76,
--32768,   741,   765,    76,-32768,   581,-32768,   348,-32768,-32768,
--32768,-32768,   169,   137,  2416,   335,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  3506,   767,-32768,-32768,
--32768,   593,   238,-32768,-32768,  3439,-32768,   834,   472,-32768,
--32768,-32768,   768,   725,-32768,   839,    76,-32768,-32768,    76,
--32768,   197,-32768,   257,-32768,-32768,    99,  1101,   763,-32768,
-  1421,  2645,   805,   769,  3336,-32768,-32768,  1394,-32768,-32768,
-  2645,-32768,-32768,-32768,-32768,   593,-32768,-32768,-32768,-32768,
-    99,-32768,-32768,   790,   581,-32768,  3210,  3210,    70,   319,
-   169,  3039,-32768,   459,  2902,   280,   280,-32768,-32768,-32768,
-   238,   197,   340,   347,   197,-32768,   347,   197,  3108,-32768,
--32768,-32768,-32768,-32768,   319,-32768,   169,-32768,   659,-32768,
--32768,  3581,-32768,-32768,   839,-32768,-32768,-32768,  2645,    81,
--32768,   435,   564,  1021,   780,   782,  1181,-32768,-32768,-32768,
--32768,-32768,   828,    99,-32768,   833,  3581,   796,   800,-32768,
-   311,-32768,  2645,-32768,   805,-32768,  2645,   427,   340,   347,
-   197,   464,-32768,-32768,   515,-32768,   820,   581,-32768,-32768,
--32768,-32768,  2645,   846,   804,-32768,   804,   587,   510,-32768,
-  2082,-32768,-32768,-32768,   600,-32768,-32768,-32768,   501,   521,
-   659,-32768,-32768,  1421,-32768,  3214,  2645,-32768,-32768,    99,
--32768,-32768,-32768,-32768,   808,-32768,-32768,-32768,-32768,  2163,
-   854,  1421,-32768,-32768,  1501,-32768,-32768,  1394,-32768,-32768,
--32768,-32768,-32768,   593,-32768,-32768,   829,    80,    80,  3581,
-  2645,   280,   598,-32768,   598,-32768,-32768,   813,-32768,-32768,
-   822,-32768,  3214,-32768,-32768,  2243,   853,   842,-32768,-32768,
-   843,   845,  2645,   868,   830,   831,  2591,   372,   902,   187,
-   226,-32768,   873,   838,-32768,   865,  3138,-32768,   900,  1261,
-    91,-32768,-32768,-32768,-32768,-32768,  2405,-32768,   869,  1581,
--32768,-32768,   581,-32768,-32768,-32768,-32768,-32768,  3581,-32768,
-   278,-32768,-32768,-32768,  2645,   861,-32768,  2645,  2645,  3545,
--32768,-32768,-32768,-32768,   871,  2645,   872,-32768,   891,-32768,
--32768,-32768,   319,-32768,   169,  1341,-32768,-32768,-32768,-32768,
-  2645,-32768,  1581,-32768,-32768,   888,   877,  2645,   937,-32768,
-   441,   880,   882,  2645,-32768,-32768,   885,-32768,  2645,   523,
--32768,   442,   524,-32768,   663,-32768,-32768,  2243,   892,-32768,
--32768,-32768,   893,-32768,-32768,-32768,-32768,  3563,-32768,    58,
--32768,  1806,-32768,  1806,-32768,-32768,-32768,   887,-32768,-32768,
-  2645,-32768,-32768,   947,   890,-32768,-32768,-32768,-32768,-32768,
--32768,   896,-32768,   911,    60,   895,-32768,-32768,   472,   472,
--32768,-32768,  2645,   947,   897,   947,-32768,-32768,  2645,   903,
-    68,-32768,-32768,   907,-32768,   660,   901,-32768,   396,   429,
--32768,-32768,   908,   660,-32768,-32768,   396,   984,   988,-32768
-};
-
-static const short yypgoto[] = {-32768,
--32768,-32768,-32768,   102,  -367,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,    -9,-32768,   -52,   570,  -231,   533,-32768,-32768,
-   -45,-32768,   220,-32768,-32768,-32768,-32768,-32768,   172,-32768,
-  -295,-32768,  -308,   661,-32768,-32768,   342,-32768,    17,  -195,
-   203,    16,   914,-32768,   367,    21,   -11,   -65,   703,    11,
-  -249,  -574,   -58,  -206,  -127,-32768,-32768,-32768,   196,     3,
-    -6,-32768,   584,-32768,   361,-32768,  -607,-32768,  -662,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   -68,  -135,
-  -498,    14,   -66,-32768,-32768,-32768,-32768,-32768,   653,    12,
--32768,   776,   655,   437,   788,   664,   -12,   -89,   -50,  -168,
-  -232,   363,-32768,-32768,  -269,-32768,-32768,-32768,   440,  -290,
-  -205,-32768,-32768,-32768,-32768,  -122,  -435,  -741,   366,-32768,
-   148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   153,-32768,  -739,   117,-32768,   121,-32768,   643,-32768,
-  -351,-32768,   632,   635,   497,  -307,-32768,-32768,-32768,-32768,
-    18,-32768,  1033,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   -20,     4,  -348,
--32768,   516,-32768,   450,   310,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  -306,-32768,-32768,-32768,   316,   532,-32768,-32768,
--32768,-32768,   -37,   762,-32768,-32768,   555,-32768,   333,   565,
--32768,   658,   665,  -145,-32768,  -119,-32768,-32768,   409,   498,
--32768,-32768,-32768,-32768,-32768,-32768,   714,-32768,-32768,-32768
-};
-
-
-#define        YYLAST          3633
-
-
-static const short yytable[] = {    55,
-    57,    59,   346,    72,    36,    36,    63,   125,   141,    67,
-    68,   438,   343,    71,   209,    63,    74,    32,    32,    39,
-    39,    86,    33,    33,   220,    70,   212,    70,   181,    92,
-   439,   307,   230,    80,   339,    88,   463,   368,   415,   465,
-   574,    36,   468,    87,    81,   405,   184,   232,    83,    85,
-   188,   408,   286,   623,    32,   292,    39,   308,   502,    33,
-   709,   237,   238,   454,   190,   532,   323,   240,   340,   100,
-    70,   143,   801,    92,    70,   849,   559,   336,   249,    80,
-   805,    92,   528,  -112,   222,   208,   279,    80,   185,   281,
-   192,   840,   455,   219,   147,   894,   197,   914,   213,   239,
-   374,    50,    51,   244,    47,   926,   761,    75,   143,   186,
-    14,   320,    75,   202,   407,   233,   320,   346,   717,    89,
-   221,    90,    50,    51,   799,   885,   143,    -1,   198,   199,
-   148,    -2,   187,   895,    14,   915,   296,   845,   300,    14,
-    93,    50,    51,   927,    60,   898,   330,   220,   901,   841,
-   903,   902,   516,   550,    76,   291,   806,   367,   911,   203,
-   303,    61,   302,    77,  -112,    52,   415,   230,   204,    62,
-    53,    75,   311,   312,   500,   315,   316,   198,   199,   924,
-   870,   205,   232,   143,    48,    49,    52,   405,   182,   614,
-   935,    53,   371,    80,   322,    16,   208,    80,    14,   753,
-   755,    92,    16,   459,   321,    52,   208,   462,   325,   183,
-    53,   336,    92,    82,   461,   222,   219,   192,    76,   604,
-    54,   220,   336,   730,   -35,   406,    14,    77,   336,   600,
-   488,    16,   412,   602,   378,   476,    95,   476,   379,   382,
-    75,   383,   291,   143,   691,   362,   358,   364,   360,   599,
-   233,   539,   540,   541,   685,    50,    51,   143,   860,    75,
-   202,   542,   143,   -34,   143,   402,   403,    14,    50,    51,
-    16,    50,    51,   293,   294,   295,   644,   708,    96,   646,
-    75,   619,    75,   202,   320,   189,    14,   626,   420,   148,
-   429,    99,   766,   101,   649,   467,   621,   285,   687,   427,
-   417,   347,   348,   413,   414,   418,   203,    14,   658,    14,
-   146,   143,   753,   226,    70,   204,   283,   693,   460,    52,
-   501,    75,   202,   484,    53,   284,   285,   754,   205,   203,
-    36,    92,    52,   494,    56,    52,    77,    53,   204,   583,
-    53,   208,   320,   222,   208,   208,   246,    58,    14,   220,
-   671,   205,   321,   633,   227,     5,   325,     7,   290,   678,
-   235,   506,   193,     9,    10,    11,   194,   307,   203,    14,
-   247,   546,   248,   557,    50,    51,    14,   204,   558,    13,
-   250,   747,   530,   531,   722,   283,   547,   727,   408,   713,
-   205,   251,   756,   308,   284,   285,    16,  -465,   700,   701,
-    50,    51,   868,   341,   279,   198,   199,   342,   296,   527,
-    50,    51,    36,   523,   590,   539,   540,   541,    22,   591,
-   280,   826,   357,    24,    36,   606,   699,    36,  -270,  -270,
-   363,   282,    86,    70,   289,    36,   143,   514,    52,   675,
-   349,   671,   515,    53,   194,   564,    88,   143,   534,   533,
-   476,   698,   309,   535,    87,   659,   301,   705,   313,   552,
-   553,   713,   625,   628,    52,   500,   426,   565,   197,    53,
-   381,  -175,   500,   319,    52,   384,   385,  -175,   326,    53,
-   390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-   400,   401,   347,   348,   273,   274,   846,   275,   276,   277,
-   278,   593,   739,    86,   933,   650,   555,   251,   352,   934,
-   556,   719,    75,   619,   356,   720,   875,    88,  -175,   353,
-    36,   359,  -175,    86,   788,    87,   539,   540,   541,   365,
-   596,   366,   659,   514,   728,    80,   692,    88,   515,    14,
-   743,   464,   198,   199,   744,    87,   609,   694,   694,   546,
-   610,   611,   212,   367,   622,    80,   369,   291,    36,   754,
-   788,   380,   616,   617,   547,   624,   627,   651,    77,   689,
-   690,   469,   220,   896,   638,   897,   208,   759,   710,   635,
-   637,   342,   539,   540,   541,   811,   270,   271,   272,    75,
-   619,   684,   745,   320,   -85,    75,   619,   760,   622,   881,
-   883,   194,    75,   342,   194,   419,   320,   496,   497,   680,
-  -268,  -268,   208,    80,    36,    92,    14,   421,   208,   208,
-   413,   414,    14,    80,   609,   143,   422,   534,   533,    14,
-   929,    36,   535,   424,   192,   430,   620,   208,   937,    80,
-   452,   721,   620,  -463,   220,   621,   285,   434,   758,   626,
-   609,   621,   285,   435,   731,   346,   700,   701,   621,   285,
-   253,   255,   788,   712,   216,   217,   571,   197,   104,   458,
-     9,    10,    11,   575,   576,   273,   274,   784,   275,   276,
-   277,   278,   331,   694,   451,  -115,  -115,  -115,  -115,   197,
-   452,  -115,  -175,  -115,  -115,  -115,   471,   478,  -175,   486,
-   622,   622,   473,   917,   918,   479,   480,    80,   482,  -115,
-   764,   321,   325,   784,   588,   487,   495,   490,   321,   491,
-   783,   198,   199,   492,   825,   493,  -115,   498,     5,    89,
-     7,    90,    36,   215,   216,   217,     9,    10,    11,  -175,
-     9,    10,    11,  -175,   507,   786,   622,   797,  -115,   499,
-   787,   281,    13,  -115,   208,   503,   783,   680,    14,   336,
-    72,   336,   847,  -115,   862,   850,   853,   647,   827,    16,
-   511,   216,   217,   857,   525,    86,   863,     9,    10,    11,
-   529,   549,   551,    70,    70,   642,   554,   568,   869,    88,
-   569,    22,   572,   573,   577,   873,    24,    87,   587,    36,
-   667,   636,   833,   835,   589,   592,   880,   268,   269,   270,
-   271,   272,   786,   622,   797,   784,   595,   787,   702,   703,
-   704,   556,   706,   707,   321,   263,   264,   265,   266,   267,
-   268,   269,   270,   271,   272,   208,   632,    80,   850,   640,
-   601,   102,   673,   618,   634,   718,   103,   104,   865,   105,
-   331,   674,   686,     5,     6,     7,     8,  -304,   783,   726,
-   920,     9,    10,    11,   642,   -32,   850,   106,   716,    15,
-   733,   107,   108,   734,   740,   741,   742,    13,   109,    14,
-   735,   110,   746,   751,   752,   765,   111,   112,   113,   798,
-   -33,   804,   114,   115,    16,   812,   738,   116,   117,   813,
-   815,   818,   118,   819,   119,   821,   822,   823,   828,   120,
-   830,   762,   750,   121,   831,   836,    22,   122,   123,   848,
-   641,    24,   264,   265,   266,   267,   268,   269,   270,   271,
-   272,  -485,   241,   667,   102,     5,   763,     7,   140,   103,
-   104,   832,   105,     9,    10,    11,   844,   856,   858,   859,
-   871,   667,   872,   874,   667,   904,   876,   877,   814,    13,
-   106,   879,    15,   899,   107,   108,   908,   888,   889,   913,
-   809,   109,   912,   922,   110,   916,    16,   931,   925,   111,
-   112,   113,   928,   939,   936,   114,   115,   940,   510,   851,
-   116,   117,   820,   416,   456,   118,   723,   119,    22,   842,
-   214,   508,   120,    24,   711,   715,   121,   472,   361,   648,
-   122,   123,   355,   -94,   477,   886,   470,   724,   661,   667,
-   887,   331,   729,  -124,  -124,  -124,  -124,  -124,  -124,  -124,
-   921,  -124,  -124,  -124,  -124,  -124,   923,  -124,  -124,  -124,
-  -124,  -124,  -124,  -124,  -124,  -124,  -124,  -124,  -124,  -124,
-  -124,  -124,   631,  -124,  -124,   504,   521,    73,   615,   522,
-  -124,   810,   667,  -124,   808,  -124,   697,   613,  -124,  -124,
-  -124,   428,   598,   878,  -124,  -124,   802,   594,   512,  -124,
-  -124,   737,   676,     0,  -124,   513,  -124,  -124,     0,   489,
-     0,  -124,  -124,     0,     0,  -124,     0,  -124,  -124,  -124,
-  -124,   653,  -124,  -324,  -324,  -324,  -324,  -324,  -324,  -324,
-     0,  -324,  -324,  -324,  -324,  -324,     0,  -324,  -324,  -324,
-  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,
-  -324,  -324,     0,  -324,  -324,     0,     0,     0,     0,     0,
-  -324,     0,     0,  -324,     0,  -324,     0,     0,  -324,  -324,
-  -324,     0,     0,     0,  -324,  -324,     0,     0,     0,  -324,
-  -324,     0,     0,     0,  -324,     0,  -324,  -324,     0,     0,
-     0,  -324,  -324,     0,     0,  -324,     0,  -324,     0,  -324,
-  -324,   331,  -324,  -324,  -324,     0,     0,     0,  -324,  -324,
-     0,  -324,     0,     0,     0,  -324,     0,  -324,  -324,  -324,
-  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,     0,  -324,
-     0,  -324,     0,  -324,  -324,     0,     0,     0,     0,     0,
-  -324,     0,     0,  -324,     0,     0,     0,     0,  -324,  -324,
-  -324,     0,     0,     0,  -324,  -324,     0,     0,     0,  -324,
-  -324,     0,     0,     0,  -324,     0,  -324,  -324,     0,     0,
-     0,  -324,  -324,     0,     0,  -324,     0,  -324,  -300,  -324,
-  -324,   837,  -324,  -324,  -324,     0,     0,     0,  -324,  -324,
-     0,  -324,     0,     0,     0,  -324,     0,  -324,  -324,  -324,
-  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,     0,  -324,
-     0,  -324,     0,  -324,  -324,     0,     0,     0,     0,     0,
-  -324,     0,     0,  -324,     0,     0,     0,     0,  -324,  -324,
-  -324,     0,     0,     0,  -324,  -324,     0,     0,     0,  -324,
-  -324,     0,     0,     0,  -324,     0,  -324,  -324,     0,     0,
-     0,  -324,  -324,     0,     0,  -324,     0,  -324,     0,  -324,
-  -324,   866,  -324,  -334,  -334,     0,     0,     0,  -334,  -334,
-     0,  -334,     0,     0,     0,  -334,     0,  -334,  -334,  -334,
-  -334,  -334,  -334,  -334,  -334,  -334,  -334,  -334,     0,  -334,
-     0,  -334,     0,  -334,  -334,     0,     0,     0,     0,     0,
-  -334,     0,     0,  -334,     0,     0,     0,     0,  -334,  -334,
-  -334,     0,     0,     0,  -334,  -334,     0,     0,     0,  -334,
-  -334,     0,     0,     0,  -334,     0,  -334,  -334,     0,     0,
-     0,  -334,  -334,     0,     0,  -334,     0,  -334,     0,  -334,
-  -334,   662,  -334,   663,    51,     0,     0,     0,   103,   104,
-   258,   105,   259,   260,   261,   262,   263,   264,   265,   266,
-   267,   268,   269,   270,   271,   272,     0,     0,     0,   106,
-     0,    15,     0,   107,   108,     0,     0,     0,     0,     0,
-   109,     0,     0,   110,     0,     0,     0,     0,   111,   112,
-   113,     0,     0,     0,   114,   115,     0,     0,   664,   116,
-   117,     0,     0,     0,   118,     0,   119,    52,     0,     0,
-     0,   120,    53,     0,     0,   121,     0,     0,  -203,   122,
-   123,   662,   665,   663,    51,     0,     0,     0,   103,   104,
-     0,   105,   260,   261,   262,   263,   264,   265,   266,   267,
-   268,   269,   270,   271,   272,     0,     0,     0,     0,   106,
-     0,    15,     0,   107,   108,     0,     0,     0,     0,     0,
-   109,     0,     0,   110,     0,     0,     0,     0,   111,   112,
-   113,     0,     0,     0,   114,   115,     0,     0,   664,   116,
-   117,     0,     0,     0,   118,     0,   119,    52,     0,     0,
-     0,   120,    53,     0,     0,   121,     0,     0,  -258,   122,
-   123,   662,   665,   663,    51,     0,     0,     0,   103,   104,
-     0,   105,   228,     0,     0,     5,     0,     7,   140,     0,
-     0,     0,     0,     9,    10,    11,     0,     0,     0,   106,
-     0,    15,     0,   107,   108,     0,     0,     0,     0,    13,
-   109,     0,    15,   110,     0,     0,     0,     0,   111,   112,
-   113,     0,     0,     0,   114,   115,    16,     0,   664,   116,
-   117,     0,     0,     0,   118,     0,   119,    52,     0,     0,
-     0,   120,    53,     0,     0,   121,     0,     0,    22,   122,
-   123,   196,   665,    24,   -28,   -28,   -28,   -28,   229,  -261,
-     0,     0,   -28,   -28,   -28,     0,     0,     0,     0,     0,
-   350,     0,     0,   -24,   -24,   -24,   -24,   197,   -28,     0,
-  -175,   -24,   -24,   -24,     0,     0,  -175,   265,   266,   267,
-   268,   269,   270,   271,   272,   -28,   197,   -24,     0,  -175,
-     0,     0,     0,     0,     0,  -175,     0,     0,     0,   198,
-   199,     0,     0,     0,   -24,     0,     0,   -28,     0,     0,
-     0,     0,   -28,     0,     0,     0,     0,  -175,   198,   199,
-     0,  -175,   -28,     0,     0,     0,   -24,     0,     0,     0,
-     0,   -24,     0,     0,     0,     0,  -175,     0,     0,   344,
-  -175,   -24,   -20,   -20,   -20,   -20,     0,     0,     0,     0,
-   -20,   -20,   -20,     0,     0,     0,     0,     0,   331,     0,
-     0,  -487,  -487,  -487,  -487,   197,   -20,     0,  -175,  -487,
-  -487,  -487,     0,     0,  -175,   266,   267,   268,   269,   270,
-   271,   272,     0,   -20,     0,  -487,   331,  -487,     0,  -324,
-  -324,  -324,  -324,     0,     0,     0,     0,  -324,  -324,  -324,
-     0,     0,  -487,     0,     0,   -20,     0,     0,     0,     0,
-   -20,     0,     0,  -324,     0,  -175,     0,     0,     0,  -175,
-   -20,     0,     0,     0,  -487,     0,     0,     0,   102,  -487,
-  -324,     0,     0,   103,   104,     0,   105,     0,     0,  -487,
-   261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-   271,   272,  -324,     0,   106,     0,    15,  -324,   107,   108,
-     0,     0,     0,     0,     0,   109,     0,  -111,   110,     0,
-     0,     0,     0,   111,   112,   113,     0,     0,     0,   114,
-   115,     0,     0,     0,   116,   117,     0,   102,     0,   118,
-     0,   119,   103,   104,     0,   105,   120,     0,     0,     0,
-   121,     0,     0,     0,   122,   123,     0,     0,   329,     0,
-     0,     0,     0,   106,     0,    15,     0,   107,   108,     0,
-     0,     0,     0,     0,   109,     0,     0,   110,     0,     0,
-     0,     0,   111,   112,   113,     0,     0,     0,   114,   115,
-     0,     0,     0,   116,   117,     0,   102,     0,   118,     0,
-   119,   103,   104,     0,   105,   120,     0,     0,     0,   121,
-     0,     0,     0,   122,   123,     0,     0,   411,     0,     0,
-     0,     0,   106,     0,    15,     0,   107,   108,     0,     0,
-     0,     0,     0,   109,     0,     0,   110,     0,     0,     0,
-     0,   111,   112,   113,     0,     0,     0,   114,   115,     0,
-     0,     0,   116,   117,     0,   102,     0,   118,     0,   119,
-   103,   104,     0,   105,   120,     0,     0,     0,   121,     0,
-     0,     0,   122,   123,     0,     0,   466,     0,     0,     0,
-     0,   106,     0,    15,     0,   107,   108,     0,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,     0,     0,     0,
-   111,   112,   113,     0,     0,     0,   114,   115,     0,     0,
-     0,   116,   117,     0,   102,     0,   118,     0,   119,   103,
-   104,     0,   105,   120,     0,     0,     0,   121,     0,     0,
-     0,   122,   123,     0,     0,   505,     0,     0,     0,     0,
-   106,     0,    15,     0,   107,   108,     0,     0,     0,     0,
-     0,   109,     0,     0,   110,     0,     0,     0,     0,   111,
-   112,   113,     0,     0,     0,   114,   115,     0,     0,     0,
-   116,   117,     0,     0,     0,   118,     0,   119,     0,     0,
-     0,     0,   120,     0,     0,     0,   121,     0,     0,     0,
-   122,   123,     0,     0,   757,   663,   767,     6,     7,     8,
-   103,   104,     0,   105,     9,    10,    11,   768,     0,   769,
-   770,   771,   772,   773,   774,   775,   776,   777,   778,   779,
-    13,   106,    14,    15,     0,   107,   108,     0,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,    16,     0,     0,
-   111,   112,   113,     0,     0,     0,   114,   115,     0,     0,
-     0,   116,   117,     0,     0,     0,   118,     0,   119,   780,
-     0,     0,     0,   120,   781,     0,     0,   121,     0,   782,
-     0,   122,   123,     0,   367,   663,    51,     0,     0,     0,
-   103,   104,     0,   105,     0,     0,     0,   768,     0,   769,
-   770,   771,   772,   773,   774,   775,   776,   777,   778,   779,
-     0,   106,     0,    15,     0,   107,   108,     0,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,     0,     0,     0,
-   111,   112,   113,     0,     0,     0,   114,   115,     0,   102,
-     0,   116,   117,     0,   103,   104,   118,   105,   119,    52,
-     0,     0,     0,   120,    53,     0,     0,   121,     0,   782,
-     0,   122,   123,     0,   367,   106,     0,    15,     0,   107,
-   108,     0,     0,     0,     0,     0,   109,     0,     0,   110,
-     0,     0,     0,     0,   111,   112,   113,     0,     0,     0,
-   114,   115,     0,     0,     0,   116,   117,     0,     0,     0,
-   118,     0,   119,     0,     0,     0,     0,   120,     0,     0,
-     0,   121,     0,     0,     0,   122,   123,     0,   483,   149,
-   150,     0,   151,   152,     0,     0,     0,   153,   154,   155,
-   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-   166,   167,   168,   169,   170,   171,     0,   102,     5,     6,
-     7,     8,   103,   104,   172,   105,     9,    10,    11,     5,
-     6,     7,     8,     0,     0,     0,     0,     9,    10,    11,
-     0,     0,    13,   106,    14,    15,     0,   107,   108,     0,
-     0,     0,     0,    13,   109,    14,     0,   110,   174,    16,
-     0,     0,   111,   112,   113,     0,     0,   305,   114,   115,
-    16,     0,     0,   116,   117,     0,     0,     0,   118,     0,
-   119,    22,     0,     0,     0,   120,    24,     0,     0,   121,
-     0,     0,    22,   122,   123,   102,     5,    24,     7,   140,
-   103,   104,    84,   105,     9,    10,    11,   262,   263,   264,
-   265,   266,   267,   268,   269,   270,   271,   272,     0,     0,
-    13,   106,     0,    15,     0,   107,   108,     0,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,    16,     0,     0,
-   111,   112,   113,     0,     0,     0,   114,   115,     0,   102,
-     0,   116,   117,     0,   103,   104,   118,   105,   119,    22,
-     0,     0,     0,   120,    24,     0,     0,   121,     0,     0,
-     0,   122,   123,     0,     0,   106,     0,    15,     0,   107,
-   108,     0,     0,     0,     0,     0,   109,     0,     0,   110,
-     0,     0,     0,     0,   111,   112,   113,     0,     0,     0,
-   114,   115,     0,   102,     0,   116,   117,     0,   103,   104,
-   118,   105,   119,   370,     0,     0,     0,   120,     0,     0,
-     0,   121,     0,     0,     0,   122,   123,     0,     0,   106,
-     0,    15,     0,   107,   108,     0,     0,     0,     0,     0,
-   109,     0,     0,   110,     0,     0,     0,     0,   111,   112,
-   113,     0,     0,     0,   114,   115,     0,   102,     0,   116,
-   117,     0,   103,   104,   118,   105,   119,     0,     0,     0,
-     0,   120,     0,     0,     0,   121,     0,   824,     0,   122,
-   123,     0,     0,   106,     0,    15,     0,   107,   108,     0,
-     0,     0,     0,     0,   109,     0,     0,   110,     0,     0,
-     0,     0,   111,   112,   113,     0,     0,     0,   114,   115,
-     0,   102,     0,   116,   117,     0,   103,   104,   118,   105,
-   119,     0,     0,     0,     0,   120,     0,     0,     0,   121,
-     0,     0,     0,   122,   123,     0,     0,   106,     0,    15,
-     0,   107,   108,     0,     0,     0,     0,     0,   109,     0,
-     0,   110,     0,     0,     0,     0,   111,   112,   113,     0,
-     0,     0,   114,   115,     0,   102,     0,   252,   117,     0,
-   103,   104,   118,   105,   119,     0,     0,     0,     0,   120,
-     0,     0,     0,   121,     0,     0,     0,   122,   123,     0,
-     0,   106,     0,    15,     0,   107,   108,     0,     0,     0,
-     0,     0,   109,     0,     0,   110,     0,     0,     0,     0,
-   111,   112,   113,     0,     0,     0,   114,   115,     0,   509,
-     0,   254,   117,     0,   103,   104,   118,   105,   119,     0,
-     0,     0,     0,   120,     0,     0,     0,   121,     0,     0,
-     0,   122,   123,     0,     0,   106,     0,    15,     0,   107,
-   108,     0,     0,     0,     0,     0,   109,     0,     0,   110,
-     0,     0,     0,     0,   111,   112,   113,     0,     0,     0,
-   114,   115,     0,     0,     0,   116,   117,     0,     0,     0,
-   118,     0,   119,     0,     0,     0,     0,   120,     0,     0,
-     0,   121,     0,     0,   544,   122,   123,     5,     0,     7,
-   140,     0,     0,     0,     0,     9,    10,    11,     0,     0,
-     0,     0,   544,     0,     0,     5,     0,     7,   140,     0,
-     0,    13,     0,     9,    10,    11,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,    13,
-     0,     0,     0,     0,     0,     0,     4,     0,  -128,     5,
-     6,     7,     8,     0,     0,     0,    16,     9,    10,    11,
-    22,  -439,  -439,  -439,     0,    24,     0,     0,     0,     0,
-   545,  -439,    12,    13,     0,    14,    15,     0,    22,  -438,
-  -438,  -438,     0,    24,     0,     0,     0,     0,   545,  -438,
-    16,     0,     0,    17,    18,  -128,     0,     0,     0,     0,
-     0,     0,     0,     0,  -128,     0,    19,    20,    21,     0,
-     0,     0,    22,     0,     0,     0,    23,    24,    25,    26,
-     0,     4,    27,  -128,     5,     6,     7,     8,     0,     0,
-     0,     0,     9,    10,    11,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    13,     4,
-    14,  -128,     5,     6,     7,     8,     0,     0,     0,     0,
-     9,    10,    11,     0,     0,    16,     0,     0,   530,   531,
-  -128,     0,     0,     0,     0,     0,    13,     0,    14,  -128,
-     0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-     0,     0,    24,    16,     0,     0,     0,    27,  -128,   440,
-     0,   441,     5,     6,     7,     8,     0,  -128,   442,     0,
-     9,    10,    11,     0,     0,    22,     0,     0,   440,     0,
-    24,     5,     6,     7,     8,    27,    13,   442,    14,     9,
-    10,    11,     5,     6,     7,     8,     0,     0,     0,     0,
-     9,    10,    11,    16,     0,    13,     0,    14,     0,     0,
-     0,     5,     6,     7,     8,     0,    13,     0,    14,     9,
-    10,    11,    16,     0,     0,    22,     0,     0,     0,     0,
-    24,     0,     0,    16,  -384,    13,     0,    14,     0,     0,
-     0,     0,     0,     0,    22,   228,     0,     0,     5,    24,
-     7,   140,    16,  -384,     0,    22,     9,    10,    11,     0,
-    24,     0,     0,     0,     0,   597,     0,     0,     0,     0,
-     0,     0,    13,     0,    22,    15,     0,     0,     0,    24,
-     0,     0,   149,   150,   834,   151,   152,     0,     0,    16,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,     0,
-     0,    22,     0,    14,     0,     0,    24,   172,   256,   257,
-   258,     0,   259,   260,   261,   262,   263,   264,   265,   266,
-   267,   268,   269,   270,   271,   272,     0,     0,   173,     0,
-     0,     0,     0,     0,   149,   150,     0,   151,   152,     0,
-     0,   174,   153,   154,   155,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,     0,   149,   150,     0,   151,   152,     0,     0,   373,
-   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,   165,   166,   167,   168,   169,   170,   171,     0,
-     0,     0,     0,     0,     0,     0,     0,   172,   149,   150,
-     0,   151,   152,   174,     0,     0,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,     0,     0,     5,     0,     7,
-   290,   174,     0,   582,     0,     9,    10,    11,     5,     6,
-     7,     8,     0,     0,   442,     0,     9,    10,    11,     0,
-     0,    13,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    13,     0,    14,     0,     0,   174,    16,     0,
-     0,     0,     0,   283,     0,     0,     0,     0,     0,    16,
-     0,     0,   284,   285,     0,     0,     0,     0,     0,     0,
-    22,     0,     0,     0,     0,    24,     0,     0,     0,     0,
-     0,    22,     5,     6,     7,     8,    24,     0,   630,     0,
-     9,    10,    11,     5,     6,     7,     8,     0,     0,     0,
-     0,     9,    10,    11,     0,     0,    13,     0,    14,     0,
-     0,     0,     5,     6,     7,     8,     0,    13,     0,    14,
-     9,    10,    11,    16,     0,     0,     0,     0,     0,     0,
-     5,     0,     7,   140,    16,     0,    13,     0,     9,    10,
-    11,     0,     0,     0,     0,    22,     0,     0,     0,     5,
-    24,     7,   290,    16,    13,     0,    22,     9,    10,    11,
-     0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,     0,    13,     0,    22,     0,     0,     0,     0,
-    24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,     0,     0,    22,   854,     0,     0,     0,    24,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    22,     0,     0,     0,     0,    24,     0,   256,
-   257,   258,   855,   259,   260,   261,   262,   263,   264,   265,
-   266,   267,   268,   269,   270,   271,   272,   256,   257,   258,
-   893,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-   268,   269,   270,   271,   272,   256,   257,   258,     0,   259,
-   260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-   270,   271,   272
-};
-
-static const short yycheck[] = {     9,
-    10,    11,   209,    24,     2,     3,    16,    60,    61,    19,
-    20,   318,   208,    23,    83,    25,    26,     2,     3,     2,
-     3,    33,     2,     3,    91,    22,    85,    24,    66,    36,
-   326,   177,    98,    31,   203,    33,   345,   243,   288,   347,
-   476,    39,   351,    33,    31,   277,    67,    98,    32,    33,
-    71,   284,   142,   552,    39,   145,    39,   177,   410,    39,
-   635,   107,   108,   333,    74,   433,   194,   113,   204,    58,
-    67,    61,   735,    80,    71,   817,     1,   200,   124,    77,
-     1,    88,   431,     1,    94,    83,     9,    85,    38,   135,
-    77,     1,    10,    91,    45,    38,    27,    38,    85,   109,
-   246,     3,     4,   116,     3,    38,   714,     3,    98,    59,
-    30,     7,     3,     4,   283,    98,     7,   324,    38,     5,
-     1,     7,     3,     4,   732,   867,   116,     0,    59,    60,
-    81,     0,    82,    76,    30,    76,   146,   800,   148,    30,
-    39,     3,     4,    76,    59,   887,   199,   214,   890,    59,
-   892,   891,   422,    76,    50,   145,    77,    82,   900,    50,
-   173,    59,   172,    59,    82,    67,   416,   233,    59,    59,
-    72,     3,   182,   183,   407,   185,   186,    59,    60,   919,
-   843,    72,   233,   173,    77,    78,    67,   419,    38,   538,
-   932,    72,   245,   191,    76,    45,   194,   195,    30,   698,
-   699,   208,    45,   339,   191,    67,   204,   343,   195,    59,
-    72,   334,   219,    77,   342,   225,   214,   204,    50,   526,
-    82,   288,   345,   659,    38,   278,    30,    59,   351,   520,
-   376,    45,   285,   524,   247,   358,    82,   360,   248,   252,
-     3,   254,   232,   233,   612,   234,   230,   236,   232,   519,
-   233,    68,    69,    70,   603,     3,     4,   247,   833,     3,
-     4,    78,   252,    38,   254,   275,   276,    30,     3,     4,
-    45,     3,     4,     5,     6,     7,   567,   629,    65,   570,
-     3,     4,     3,     4,     7,    77,    30,    50,   301,    81,
-   311,    82,   728,    82,    38,   348,    59,    60,   605,   309,
-    76,    59,    60,    59,    60,    81,    50,    30,   578,    30,
-    59,   301,   811,    59,   311,    59,    50,    38,    76,    67,
-    76,     3,     4,   369,    72,    59,    60,    50,    72,    50,
-   328,   338,    67,   386,    82,    67,    59,    72,    59,   485,
-    72,   339,     7,   353,   342,   343,    59,    82,    30,   416,
-   582,    72,   339,   559,    78,     4,   343,     6,     7,   591,
-    78,   414,    77,    12,    13,    14,    81,   513,    50,    30,
-    59,   437,    59,    76,     3,     4,    30,    59,    81,    28,
-    76,   688,    48,    49,   654,    50,   437,   657,   621,   639,
-    72,    81,   700,   513,    59,    60,    45,    63,    59,    60,
-     3,     4,   838,    77,     9,    59,    60,    81,   418,   430,
-     3,     4,   410,   426,    76,    68,    69,    70,    67,    81,
-    75,    50,   227,    72,   422,    78,   622,   425,    77,    78,
-   235,    76,   444,   430,    76,   433,   426,   422,    67,   585,
-    77,   673,   422,    72,    81,   457,   444,   437,   433,   433,
-   573,   620,    38,   433,   444,   578,    59,   626,    82,   443,
-   444,   711,   552,   553,    67,   698,    59,   457,    27,    72,
-   251,    30,   705,    77,    67,   256,   257,    36,    59,    72,
-   261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-   271,   272,    59,    60,    54,    55,   803,    57,    58,    59,
-    60,   511,    76,   515,    76,   574,    77,    81,    36,    81,
-    81,    77,     3,     4,    67,    81,    76,   515,    77,    81,
-   518,    77,    81,   535,   730,   515,    68,    69,    70,    76,
-   514,    76,   655,   518,   657,   533,    78,   535,   518,    30,
-    77,   346,    59,    60,    81,   535,   533,   616,   617,   615,
-   534,   535,   611,    82,   552,   553,    76,   547,   556,    50,
-   766,    77,   546,   547,   615,   552,   553,   577,    59,   607,
-   608,   352,   639,   882,   564,   884,   574,    77,   637,   563,
-   564,    81,    68,    69,    70,   754,    50,    51,    52,     3,
-     4,   601,    78,     7,    38,     3,     4,    77,   596,    77,
-    77,    81,     3,    81,    81,    59,     7,   388,   389,   596,
-    77,    78,   610,   611,   612,   622,    30,    76,   616,   617,
-    59,    60,    30,   621,   611,   615,    77,   612,   612,    30,
-   926,   629,   612,    10,   621,    76,    50,   635,   934,   637,
-    77,    78,    50,    63,   711,    59,    60,    82,   701,    50,
-   637,    59,    60,    76,   664,   862,    59,    60,    59,    60,
-   128,   129,   868,     5,     6,     7,   471,    27,     9,    36,
-    12,    13,    14,   478,   479,    54,    55,   730,    57,    58,
-    59,    60,     1,   752,    83,     4,     5,     6,     7,    27,
-    77,    10,    30,    12,    13,    14,    78,    78,    36,    38,
-   698,   699,    76,   909,   910,    78,    78,   705,    76,    28,
-   720,   698,   699,   766,   495,    76,    38,    76,   705,    76,
-   730,    59,    60,    76,   777,    76,    45,    76,     4,     5,
-     6,     7,   730,     5,     6,     7,    12,    13,    14,    77,
-    12,    13,    14,    81,    76,   730,   744,   730,    67,    83,
-   730,   797,    28,    72,   752,    83,   766,   744,    30,   882,
-   781,   884,   815,    82,   833,   818,   819,   572,   778,    45,
-    76,     6,     7,   826,    82,   787,   835,    12,    13,    14,
-    63,    63,    76,   780,   781,   566,    76,    36,   841,   787,
-    83,    67,    78,    81,    32,   848,    72,   787,    38,   797,
-   581,    77,   786,   787,    83,    76,   859,    48,    49,    50,
-    51,    52,   797,   811,   797,   868,    77,   797,   623,   624,
-   625,    81,   627,   628,   811,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,   833,     3,   835,   891,     1,
-    76,     3,    38,    77,    77,   650,     8,     9,   835,    11,
-     1,    83,    63,     4,     5,     6,     7,    78,   868,    78,
-   913,    12,    13,    14,   645,    38,   919,    29,   649,    31,
-    38,    33,    34,    78,   679,   680,   681,    28,    40,    30,
-    81,    43,    63,    38,    81,    78,    48,    49,    50,    36,
-    38,    63,    54,    55,    45,    83,   677,    59,    60,    78,
-    59,    59,    64,    59,    66,    38,    77,    77,     7,    71,
-    38,   716,   693,    75,    77,    16,    67,    79,    80,    59,
-    82,    72,    44,    45,    46,    47,    48,    49,    50,    51,
-    52,    82,     1,   714,     3,     4,   717,     6,     7,     8,
-     9,    77,    11,    12,    13,    14,    78,    77,    77,    59,
-    63,   732,    76,    17,   735,     9,    77,    76,   763,    28,
-    29,    77,    31,    77,    33,    34,    77,    76,    76,    59,
-   751,    40,    77,    77,    43,    81,    45,    77,    76,    48,
-    49,    50,    76,     0,    77,    54,    55,     0,   419,   818,
-    59,    60,   773,   291,   334,    64,   655,    66,    67,   797,
-    87,   418,    71,    72,   638,   645,    75,   355,   233,   573,
-    79,    80,   225,    82,   360,   868,   353,   655,   579,   800,
-   868,     1,   657,     3,     4,     5,     6,     7,     8,     9,
-   914,    11,    12,    13,    14,    15,   916,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,   556,    33,    34,   413,   425,    25,   543,   425,
-    40,   752,   843,    43,   749,    45,   617,   536,    48,    49,
-    50,   310,   518,   854,    54,    55,   744,   513,   421,    59,
-    60,   673,   585,    -1,    64,   421,    66,    67,    -1,   376,
-    -1,    71,    72,    -1,    -1,    75,    -1,    77,    78,    79,
-    80,     1,    82,     3,     4,     5,     6,     7,     8,     9,
-    -1,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    45,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    77,    -1,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    77,    78,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    77,    -1,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    -1,    -1,    -1,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    77,    -1,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    37,    11,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    -1,    78,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    58,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    -1,    78,    79,
-    80,     1,    82,     3,     4,    -1,    -1,    -1,     8,     9,
-    -1,    11,     1,    -1,    -1,     4,    -1,     6,     7,    -1,
-    -1,    -1,    -1,    12,    13,    14,    -1,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    28,
-    40,    -1,    31,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    45,    -1,    58,    59,
-    60,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
-    -1,    71,    72,    -1,    -1,    75,    -1,    -1,    67,    79,
-    80,     1,    82,    72,     4,     5,     6,     7,    77,    78,
-    -1,    -1,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-     1,    -1,    -1,     4,     5,     6,     7,    27,    28,    -1,
-    30,    12,    13,    14,    -1,    -1,    36,    45,    46,    47,
-    48,    49,    50,    51,    52,    45,    27,    28,    -1,    30,
-    -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    59,
-    60,    -1,    -1,    -1,    45,    -1,    -1,    67,    -1,    -1,
-    -1,    -1,    72,    -1,    -1,    -1,    -1,    77,    59,    60,
-    -1,    81,    82,    -1,    -1,    -1,    67,    -1,    -1,    -1,
-    -1,    72,    -1,    -1,    -1,    -1,    77,    -1,    -1,     1,
-    81,    82,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
-    12,    13,    14,    -1,    -1,    -1,    -1,    -1,     1,    -1,
-    -1,     4,     5,     6,     7,    27,    28,    -1,    30,    12,
-    13,    14,    -1,    -1,    36,    46,    47,    48,    49,    50,
-    51,    52,    -1,    45,    -1,    28,     1,    30,    -1,     4,
-     5,     6,     7,    -1,    -1,    -1,    -1,    12,    13,    14,
-    -1,    -1,    45,    -1,    -1,    67,    -1,    -1,    -1,    -1,
-    72,    -1,    -1,    28,    -1,    77,    -1,    -1,    -1,    81,
-    82,    -1,    -1,    -1,    67,    -1,    -1,    -1,     3,    72,
-    45,    -1,    -1,     8,     9,    -1,    11,    -1,    -1,    82,
-    41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-    51,    52,    67,    -1,    29,    -1,    31,    72,    33,    34,
-    -1,    -1,    -1,    -1,    -1,    40,    -1,    82,    43,    -1,
-    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,    54,
-    55,    -1,    -1,    -1,    59,    60,    -1,     3,    -1,    64,
-    -1,    66,     8,     9,    -1,    11,    71,    -1,    -1,    -1,
-    75,    -1,    -1,    -1,    79,    80,    -1,    -1,    83,    -1,
-    -1,    -1,    -1,    29,    -1,    31,    -1,    33,    34,    -1,
-    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,
-    -1,    -1,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-    -1,    -1,    -1,    59,    60,    -1,     3,    -1,    64,    -1,
-    66,     8,     9,    -1,    11,    71,    -1,    -1,    -1,    75,
-    -1,    -1,    -1,    79,    80,    -1,    -1,    83,    -1,    -1,
-    -1,    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,
-    -1,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-    -1,    -1,    59,    60,    -1,     3,    -1,    64,    -1,    66,
-     8,     9,    -1,    11,    71,    -1,    -1,    -1,    75,    -1,
-    -1,    -1,    79,    80,    -1,    -1,    83,    -1,    -1,    -1,
-    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    -1,
-    -1,    59,    60,    -1,     3,    -1,    64,    -1,    66,     8,
-     9,    -1,    11,    71,    -1,    -1,    -1,    75,    -1,    -1,
-    -1,    79,    80,    -1,    -1,    83,    -1,    -1,    -1,    -1,
-    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,
-    49,    50,    -1,    -1,    -1,    54,    55,    -1,    -1,    -1,
-    59,    60,    -1,    -1,    -1,    64,    -1,    66,    -1,    -1,
-    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,    -1,
-    79,    80,    -1,    -1,    83,     3,     4,     5,     6,     7,
-     8,     9,    -1,    11,    12,    13,    14,    15,    -1,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    28,    29,    30,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    43,    -1,    45,    -1,    -1,
-    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    -1,
-    -1,    59,    60,    -1,    -1,    -1,    64,    -1,    66,    67,
-    -1,    -1,    -1,    71,    72,    -1,    -1,    75,    -1,    77,
-    -1,    79,    80,    -1,    82,     3,     4,    -1,    -1,    -1,
-     8,     9,    -1,    11,    -1,    -1,    -1,    15,    -1,    17,
-    18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,     3,
-    -1,    59,    60,    -1,     8,     9,    64,    11,    66,    67,
-    -1,    -1,    -1,    71,    72,    -1,    -1,    75,    -1,    77,
-    -1,    79,    80,    -1,    82,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,
-    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,    -1,
-    64,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-    -1,    75,    -1,    -1,    -1,    79,    80,    -1,    82,     3,
-     4,    -1,     6,     7,    -1,    -1,    -1,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    29,    -1,     3,     4,     5,
-     6,     7,     8,     9,    38,    11,    12,    13,    14,     4,
-     5,     6,     7,    -1,    -1,    -1,    -1,    12,    13,    14,
-    -1,    -1,    28,    29,    30,    31,    -1,    33,    34,    -1,
-    -1,    -1,    -1,    28,    40,    30,    -1,    43,    72,    45,
-    -1,    -1,    48,    49,    50,    -1,    -1,    81,    54,    55,
-    45,    -1,    -1,    59,    60,    -1,    -1,    -1,    64,    -1,
-    66,    67,    -1,    -1,    -1,    71,    72,    -1,    -1,    75,
-    -1,    -1,    67,    79,    80,     3,     4,    72,     6,     7,
-     8,     9,    77,    11,    12,    13,    14,    42,    43,    44,
-    45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
-    28,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    43,    -1,    45,    -1,    -1,
-    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,     3,
-    -1,    59,    60,    -1,     8,     9,    64,    11,    66,    67,
-    -1,    -1,    -1,    71,    72,    -1,    -1,    75,    -1,    -1,
-    -1,    79,    80,    -1,    -1,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,
-    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,     3,    -1,    59,    60,    -1,     8,     9,
-    64,    11,    66,    67,    -1,    -1,    -1,    71,    -1,    -1,
-    -1,    75,    -1,    -1,    -1,    79,    80,    -1,    -1,    29,
-    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,
-    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    54,    55,    -1,     3,    -1,    59,
-    60,    -1,     8,     9,    64,    11,    66,    -1,    -1,    -1,
-    -1,    71,    -1,    -1,    -1,    75,    -1,    77,    -1,    79,
-    80,    -1,    -1,    29,    -1,    31,    -1,    33,    34,    -1,
-    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,
-    -1,    -1,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-    -1,     3,    -1,    59,    60,    -1,     8,     9,    64,    11,
-    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
-    -1,    -1,    -1,    79,    80,    -1,    -1,    29,    -1,    31,
-    -1,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,
-    -1,    43,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,
-    -1,    -1,    54,    55,    -1,     3,    -1,    59,    60,    -1,
-     8,     9,    64,    11,    66,    -1,    -1,    -1,    -1,    71,
-    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    80,    -1,
-    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,     3,
-    -1,    59,    60,    -1,     8,     9,    64,    11,    66,    -1,
-    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
-    -1,    79,    80,    -1,    -1,    29,    -1,    31,    -1,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    40,    -1,    -1,    43,
-    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,
-    54,    55,    -1,    -1,    -1,    59,    60,    -1,    -1,    -1,
-    64,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-    -1,    75,    -1,    -1,     1,    79,    80,     4,    -1,     6,
-     7,    -1,    -1,    -1,    -1,    12,    13,    14,    -1,    -1,
-    -1,    -1,     1,    -1,    -1,     4,    -1,     6,     7,    -1,
-    -1,    28,    -1,    12,    13,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    28,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
-     5,     6,     7,    -1,    -1,    -1,    45,    12,    13,    14,
-    67,    68,    69,    70,    -1,    72,    -1,    -1,    -1,    -1,
-    77,    78,    27,    28,    -1,    30,    31,    -1,    67,    68,
-    69,    70,    -1,    72,    -1,    -1,    -1,    -1,    77,    78,
-    45,    -1,    -1,    48,    49,    50,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    59,    -1,    61,    62,    63,    -1,
-    -1,    -1,    67,    -1,    -1,    -1,    71,    72,    73,    74,
-    -1,     1,    77,     3,     4,     5,     6,     7,    -1,    -1,
-    -1,    -1,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,     1,
-    30,     3,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
-    12,    13,    14,    -1,    -1,    45,    -1,    -1,    48,    49,
-    50,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    59,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    -1,    -1,    72,    45,    -1,    -1,    -1,    77,    50,     1,
-    -1,     3,     4,     5,     6,     7,    -1,    59,    10,    -1,
-    12,    13,    14,    -1,    -1,    67,    -1,    -1,     1,    -1,
-    72,     4,     5,     6,     7,    77,    28,    10,    30,    12,
-    13,    14,     4,     5,     6,     7,    -1,    -1,    -1,    -1,
-    12,    13,    14,    45,    -1,    28,    -1,    30,    -1,    -1,
-    -1,     4,     5,     6,     7,    -1,    28,    -1,    30,    12,
-    13,    14,    45,    -1,    -1,    67,    -1,    -1,    -1,    -1,
-    72,    -1,    -1,    45,    76,    28,    -1,    30,    -1,    -1,
-    -1,    -1,    -1,    -1,    67,     1,    -1,    -1,     4,    72,
-     6,     7,    45,    76,    -1,    67,    12,    13,    14,    -1,
-    72,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    -1,    67,    31,    -1,    -1,    -1,    72,
-    -1,    -1,     3,     4,    77,     6,     7,    -1,    -1,    45,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-    -1,    67,    -1,    30,    -1,    -1,    72,    38,    35,    36,
-    37,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51,    52,    -1,    -1,    59,    -1,
-    -1,    -1,    -1,    -1,     3,     4,    -1,     6,     7,    -1,
-    -1,    72,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-    29,    -1,     3,     4,    -1,     6,     7,    -1,    -1,    38,
-    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,     3,     4,
-    -1,     6,     7,    72,    -1,    -1,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-    25,    26,    27,    28,    29,    -1,    -1,     4,    -1,     6,
-     7,    72,    -1,    38,    -1,    12,    13,    14,     4,     5,
-     6,     7,    -1,    -1,    10,    -1,    12,    13,    14,    -1,
-    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    -1,    30,    -1,    -1,    72,    45,    -1,
-    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,    45,
-    -1,    -1,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,
-    -1,    67,     4,     5,     6,     7,    72,    -1,    10,    -1,
-    12,    13,    14,     4,     5,     6,     7,    -1,    -1,    -1,
-    -1,    12,    13,    14,    -1,    -1,    28,    -1,    30,    -1,
-    -1,    -1,     4,     5,     6,     7,    -1,    28,    -1,    30,
-    12,    13,    14,    45,    -1,    -1,    -1,    -1,    -1,    -1,
-     4,    -1,     6,     7,    45,    -1,    28,    -1,    12,    13,
-    14,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,     4,
-    72,     6,     7,    45,    28,    -1,    67,    12,    13,    14,
-    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    28,    -1,    67,    -1,    -1,    -1,    -1,
-    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    45,    -1,    -1,    67,    10,    -1,    -1,    -1,    72,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    35,
-    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-    46,    47,    48,    49,    50,    51,    52,    35,    36,    37,
-    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-    48,    49,    50,    51,    52,    35,    36,    37,    -1,    39,
-    40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-    50,    51,    52
-};
-/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/local/share/bison.simple"
-
-/* Skeleton output parser for bison,
-   Copyright (C) 1984, 1989, 1990 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C.  */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#ifdef __cplusplus
-extern "C" {
-void *alloca (unsigned int);
-};
-#else /* not __cplusplus */
-void *alloca ();
-#endif /* not __cplusplus */
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc.  */
-#endif /* not GNU C.  */
-#endif /* alloca not defined.  */
-
-/* This is the parser code that is written into each bison parser
-  when the %semantic_parser declaration is not specified in the grammar.
-  It was written by Richard Stallman by simplifying the hairy parser
-  used when %semantic_parser is specified.  */
-
-/* Note: there must be only one dollar sign in this file.
-   It is replaced by the list of actions, each action
-   as one case of the switch.  */
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                -2
-#define YYEOF          0
-#define YYACCEPT       return(0)
-#define YYABORT        return(1)
-#define YYERROR                goto yyerrlab1
-/* 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);                      \
-      yychar1 = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    { yyerror ("syntax error: cannot back up"); YYERROR; }     \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-#ifndef YYPURE
-#define YYLEX          yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX          yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX          yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int    yychar;                 /*  the lookahead symbol                */
-YYSTYPE        yylval;                 /*  the semantic value of the           */
-                               /*  lookahead symbol                    */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc;                        /*  location data for the lookahead     */
-                               /*  symbol                              */
-#endif
-
-int yynerrs;                   /*  number of parse errors so far       */
-#endif  /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug;                   /*  nonzero means print parse trace     */
-/* Since this is uninitialized, it does not stop multiple parsers
-   from coexisting.  */
-#endif
-
-/*  YYINITDEPTH indicates the initial size of the parser's stacks      */
-
-#ifndef        YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/*  YYMAXDEPTH is the maximum size the stacks can grow to
-    (effective only if the built-in stack extension method is used).  */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-int yyparse (void);
-#endif
-\f
-#if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
-#define __yy_memcpy(FROM,TO,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
-#else                          /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (from, to, count)
-     char *from;
-     char *to;
-     int count;
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
-   in available built-in functions on various systems.  */
-static void
-__yy_memcpy (char *from, char *to, int count)
-{
-  register char *f = from;
-  register char *t = to;
-  register int i = count;
-
-  while (i-- > 0)
-    *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 192 "/usr/local/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#else
-#define YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#endif
-
-int
-yyparse(YYPARSE_PARAM)
-     YYPARSE_PARAM_DECL
-{
-  register int yystate;
-  register int yyn;
-  register short *yyssp;
-  register YYSTYPE *yyvsp;
-  int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
-  int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
-
-  short        yyssa[YYINITDEPTH];     /*  the state stack                     */
-  YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
-
-  short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
-  YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
-  YYLTYPE *yyls = yylsa;
-  YYLTYPE *yylsp;
-
-#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-#endif
-
-  int yystacksize = YYINITDEPTH;
-
-#ifdef YYPURE
-  int yychar;
-  YYSTYPE yylval;
-  int yynerrs;
-#ifdef YYLSP_NEEDED
-  YYLTYPE yylloc;
-#endif
-#endif
-
-  YYSTYPE yyval;               /*  the variable used to return         */
-                               /*  semantic values from the action     */
-                               /*  routines                            */
-
-  int yylen;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Starting parse\n");
-#endif
-
-  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 - 1;
-  yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
-  yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in  yystate  .  */
-/* In all cases, when you get here, the value and location stacks
-   have just been pushed. so pushing a state here evens the stacks.  */
-yynewstate:
-
-  *++yyssp = yystate;
-
-  if (yyssp >= yyss + yystacksize - 1)
-    {
-      /* 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;
-      short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
-      YYLTYPE *yyls1 = yyls;
-#endif
-
-      /* Get the current used size of the three stacks, in elements.  */
-      int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      /* Each stack pointer address is followed by the size of
-        the data in use in that stack, in bytes.  */
-#ifdef YYLSP_NEEDED
-      /* This used to be a conditional around just the two extra args,
-        but that might be undefined if yyoverflow is a macro.  */
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yyls1, size * sizeof (*yylsp),
-                &yystacksize);
-#else
-      yyoverflow("parser stack overflow",
-                &yyss1, size * sizeof (*yyssp),
-                &yyvs1, size * sizeof (*yyvsp),
-                &yystacksize);
-#endif
-
-      yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
-      yyls = yyls1;
-#endif
-#else /* no yyoverflow */
-      /* Extend the stack our own way.  */
-      if (yystacksize >= YYMAXDEPTH)
-       {
-         yyerror("parser stack overflow");
-         return 2;
-       }
-      yystacksize *= 2;
-      if (yystacksize > YYMAXDEPTH)
-       yystacksize = YYMAXDEPTH;
-      yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-      __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
-      yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-      __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
-      yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-      __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + size - 1;
-      yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
-      yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
-      if (yyssp >= yyss + yystacksize - 1)
-       YYABORT;
-    }
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
-  goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* yychar is either YYEMPTY or YYEOF
-     or a valid token in external form.  */
-
-  if (yychar == YYEMPTY)
-    {
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Reading a token: ");
-#endif
-      yychar = YYLEX;
-    }
-
-  /* Convert token to internal form (in yychar1) for indexing tables with */
-
-  if (yychar <= 0)             /* This means end of input. */
-    {
-      yychar1 = 0;
-      yychar = YYEOF;          /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Now at end of input.\n");
-#endif
-    }
-  else
-    {
-      yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
-      if (yydebug)
-       {
-         fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
-         /* Give the individual parser a way to print the precise meaning
-            of a token, for further debugging info.  */
-#ifdef YYPRINT
-         YYPRINT (stderr, yychar, yylval);
-#endif
-         fprintf (stderr, ")\n");
-       }
-#endif
-    }
-
-  yyn += yychar1;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
-    goto yydefault;
-
-  yyn = yytable[yyn];
-
-  /* yyn is what to do for this token type in this state.
-     Negative => reduce, -yyn is rule number.
-     Positive => shift, yyn is new state.
-       New state is final state => don't bother to shift,
-       just return success.
-     0, or most negative number => error.  */
-
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrlab;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  /* count tokens shifted since error; after three, turn off error status.  */
-  if (yyerrstatus) yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-/* Do the default action for the current state.  */
-yydefault:
-
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-
-/* Do a reduction.  yyn is the number of a rule to reduce with.  */
-yyreduce:
-  yylen = yyr2[yyn];
-  if (yylen > 0)
-    yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      int i;
-
-      fprintf (stderr, "Reducing via rule %d (line %d), ",
-              yyn, yyrline[yyn]);
-
-      /* Print the symbols being reduced, and their result.  */
-      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
-       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
-      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
-    }
-#endif
-
-
-  switch (yyn) {
-
-case 1:
-#line 237 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids an empty source file");
-                 finish_file ();
-               ;
-    break;}
-case 2:
-#line 242 "objc-parse.y"
-{
-                 /* In case there were missing closebraces,
-                    get us back to the global binding level.  */
-                 while (! global_bindings_p ())
-                   poplevel (0, 0, 0);
-                 finish_file ();
-               ;
-    break;}
-case 3:
-#line 256 "objc-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 5:
-#line 257 "objc-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 10:
-#line 265 "objc-parse.y"
-{ STRIP_NOPS (yyvsp[-2].ttype);
-                 if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
-                     || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
-                   assemble_asm (yyvsp[-2].ttype);
-                 else
-                   error ("argument of `asm' is not a constant string"); ;
-    break;}
-case 11:
-#line 273 "objc-parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 12:
-#line 278 "objc-parse.y"
-{ if (pedantic)
-                   error ("ANSI C forbids data definition with no type or storage class");
-                 else if (!flag_traditional)
-                   warning ("data definition has no type or storage class"); 
-
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 13:
-#line 288 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 14:
-#line 293 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 15:
-#line 298 "objc-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 16:
-#line 300 "objc-parse.y"
-{ shadow_tag (yyvsp[-1].ttype); ;
-    break;}
-case 19:
-#line 304 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C does not allow extra `;' outside of a function"); ;
-    break;}
-case 20:
-#line 310 "objc-parse.y"
-{ if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 21:
-#line 315 "objc-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 22:
-#line 317 "objc-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 23:
-#line 323 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 24:
-#line 328 "objc-parse.y"
-{ if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 25:
-#line 333 "objc-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 26:
-#line 335 "objc-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 27:
-#line 341 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 28:
-#line 346 "objc-parse.y"
-{ if (! start_function (NULL_TREE, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); ;
-    break;}
-case 29:
-#line 351 "objc-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 30:
-#line 353 "objc-parse.y"
-{ finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 31:
-#line 359 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 36:
-#line 373 "objc-parse.y"
-{ yyval.code = ADDR_EXPR; ;
-    break;}
-case 37:
-#line 375 "objc-parse.y"
-{ yyval.code = NEGATE_EXPR; ;
-    break;}
-case 38:
-#line 377 "objc-parse.y"
-{ yyval.code = CONVERT_EXPR; ;
-    break;}
-case 39:
-#line 379 "objc-parse.y"
-{ yyval.code = PREINCREMENT_EXPR; ;
-    break;}
-case 40:
-#line 381 "objc-parse.y"
-{ yyval.code = PREDECREMENT_EXPR; ;
-    break;}
-case 41:
-#line 383 "objc-parse.y"
-{ yyval.code = BIT_NOT_EXPR; ;
-    break;}
-case 42:
-#line 385 "objc-parse.y"
-{ yyval.code = TRUTH_NOT_EXPR; ;
-    break;}
-case 43:
-#line 389 "objc-parse.y"
-{ yyval.ttype = build_compound_expr (yyvsp[0].ttype); ;
-    break;}
-case 44:
-#line 394 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 46:
-#line 400 "objc-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 47:
-#line 402 "objc-parse.y"
-{ chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 49:
-#line 408 "objc-parse.y"
-{ yyval.ttype = build_indirect_ref (yyvsp[0].ttype, "unary *"); ;
-    break;}
-case 50:
-#line 411 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 51:
-#line 414 "objc-parse.y"
-{ yyval.ttype = build_unary_op (yyvsp[-1].code, yyvsp[0].ttype, 0);
-                 overflow_warning (yyval.ttype); ;
-    break;}
-case 52:
-#line 418 "objc-parse.y"
-{ tree label = lookup_label (yyvsp[0].ttype);
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids `&&'");
-                 if (label == 0)
-                   yyval.ttype = null_pointer_node;
-                 else
-                   {
-                     TREE_USED (label) = 1;
-                     yyval.ttype = build1 (ADDR_EXPR, ptr_type_node, label);
-                     TREE_CONSTANT (yyval.ttype) = 1;
-                   }
-               ;
-    break;}
-case 53:
-#line 446 "objc-parse.y"
-{ skip_evaluation--;
-                 if (TREE_CODE (yyvsp[0].ttype) == COMPONENT_REF
-                     && DECL_BIT_FIELD (TREE_OPERAND (yyvsp[0].ttype, 1)))
-                   error ("`sizeof' applied to a bit-field");
-                 yyval.ttype = c_sizeof (TREE_TYPE (yyvsp[0].ttype)); ;
-    break;}
-case 54:
-#line 452 "objc-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ttype)); ;
-    break;}
-case 55:
-#line 455 "objc-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_alignof_expr (yyvsp[0].ttype); ;
-    break;}
-case 56:
-#line 458 "objc-parse.y"
-{ skip_evaluation--;
-                 yyval.ttype = c_alignof (groktypename (yyvsp[-1].ttype)); ;
-    break;}
-case 57:
-#line 461 "objc-parse.y"
-{ yyval.ttype = build_unary_op (REALPART_EXPR, yyvsp[0].ttype, 0); ;
-    break;}
-case 58:
-#line 463 "objc-parse.y"
-{ yyval.ttype = build_unary_op (IMAGPART_EXPR, yyvsp[0].ttype, 0); ;
-    break;}
-case 59:
-#line 467 "objc-parse.y"
-{ skip_evaluation++; ;
-    break;}
-case 60:
-#line 471 "objc-parse.y"
-{ skip_evaluation++; ;
-    break;}
-case 62:
-#line 477 "objc-parse.y"
-{ tree type = groktypename (yyvsp[-2].ttype);
-                 yyval.ttype = build_c_cast (type, yyvsp[0].ttype); ;
-    break;}
-case 63:
-#line 480 "objc-parse.y"
-{ start_init (NULL_TREE, NULL, 0);
-                 yyvsp[-2].ttype = groktypename (yyvsp[-2].ttype);
-                 really_start_incremental_init (yyvsp[-2].ttype); ;
-    break;}
-case 64:
-#line 484 "objc-parse.y"
-{ char *name;
-                 tree result = pop_init_level (0);
-                 tree type = yyvsp[-5].ttype;
-                 finish_init ();
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids constructor expressions");
-                 if (TYPE_NAME (type) != 0)
-                   {
-                     if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-                       name = IDENTIFIER_POINTER (TYPE_NAME (type));
-                     else
-                       name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
-                   }
-                 else
-                   name = "";
-                 yyval.ttype = result;
-                 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
-                   {
-                     int failure = complete_array_type (type, yyval.ttype, 1);
-                     if (failure)
-                       abort ();
-                   }
-               ;
-    break;}
-case 66:
-#line 513 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 67:
-#line 515 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 68:
-#line 517 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 69:
-#line 519 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 70:
-#line 521 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 71:
-#line 523 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 72:
-#line 525 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 73:
-#line 527 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 74:
-#line 529 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 75:
-#line 531 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 76:
-#line 533 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 77:
-#line 535 "objc-parse.y"
-{ yyval.ttype = parser_build_binary_op (yyvsp[-1].code, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 78:
-#line 537 "objc-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
-    break;}
-case 79:
-#line 540 "objc-parse.y"
-{ skip_evaluation -= yyvsp[-3].ttype == boolean_false_node;
-                 yyval.ttype = parser_build_binary_op (TRUTH_ANDIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 80:
-#line 543 "objc-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
-    break;}
-case 81:
-#line 546 "objc-parse.y"
-{ skip_evaluation -= yyvsp[-3].ttype == boolean_true_node;
-                 yyval.ttype = parser_build_binary_op (TRUTH_ORIF_EXPR, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 82:
-#line 549 "objc-parse.y"
-{ yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[-1].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_false_node; ;
-    break;}
-case 83:
-#line 552 "objc-parse.y"
-{ skip_evaluation += ((yyvsp[-4].ttype == boolean_true_node)
-                                     - (yyvsp[-4].ttype == boolean_false_node)); ;
-    break;}
-case 84:
-#line 555 "objc-parse.y"
-{ skip_evaluation -= yyvsp[-6].ttype == boolean_true_node;
-                 yyval.ttype = build_conditional_expr (yyvsp[-6].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 85:
-#line 558 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
-                 /* Make sure first operand is calculated only once.  */
-                 yyvsp[0].ttype = save_expr (yyvsp[-1].ttype);
-                 yyvsp[-1].ttype = truthvalue_conversion (default_conversion (yyvsp[0].ttype));
-                 skip_evaluation += yyvsp[-1].ttype == boolean_true_node; ;
-    break;}
-case 86:
-#line 565 "objc-parse.y"
-{ skip_evaluation -= yyvsp[-4].ttype == boolean_true_node;
-                 yyval.ttype = build_conditional_expr (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[0].ttype); ;
-    break;}
-case 87:
-#line 568 "objc-parse.y"
-{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, NOP_EXPR, yyvsp[0].ttype);
-                 C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
-    break;}
-case 88:
-#line 571 "objc-parse.y"
-{ yyval.ttype = build_modify_expr (yyvsp[-2].ttype, yyvsp[-1].code, yyvsp[0].ttype);
-                 /* This inhibits warnings in truthvalue_conversion.  */
-                 C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ;
-    break;}
-case 89:
-#line 578 "objc-parse.y"
-{
-                 yyval.ttype = lastiddecl;
-                 if (!yyval.ttype || yyval.ttype == error_mark_node)
-                   {
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         tree decl;
-
-                         if (objc_receiver_context
-                             && ! (objc_receiver_context
-                                   && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "super")))
-                           /* we have a message to super */
-                           yyval.ttype = get_super_receiver ();
-                         else if (objc_method_context
-                                  && (decl = is_ivar (objc_ivar_chain, yyvsp[0].ttype)))
-                           {
-                             if (is_private (decl))
-                               yyval.ttype = error_mark_node;
-                             else
-                               yyval.ttype = build_ivar_reference (yyvsp[0].ttype);
-                           }
-                         else
-                           {
-                             /* Ordinary implicit function declaration.  */
-                             yyval.ttype = implicitly_declare (yyvsp[0].ttype);
-                             assemble_external (yyval.ttype);
-                             TREE_USED (yyval.ttype) = 1;
-                           }
-                       }
-                     else if (current_function_decl == 0)
-                       {
-                         error ("`%s' undeclared here (not in a function)",
-                                IDENTIFIER_POINTER (yyvsp[0].ttype));
-                         yyval.ttype = error_mark_node;
-                       }
-                     else
-                       {
-                         tree decl;
-
-                         if (objc_receiver_context
-                             && ! strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "super"))
-                           /* we have a message to super */
-                           yyval.ttype = get_super_receiver ();
-                         else if (objc_method_context
-                                  && (decl = is_ivar (objc_ivar_chain, yyvsp[0].ttype)))
-                           {
-                             if (is_private (decl))
-                               yyval.ttype = error_mark_node;
-                             else
-                               yyval.ttype = build_ivar_reference (yyvsp[0].ttype);
-                           }
-                         else
-                           {
-                             if (IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) != error_mark_node
-                                 || IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) != current_function_decl)
-                               {
-                                 error ("`%s' undeclared (first use this function)",
-                                        IDENTIFIER_POINTER (yyvsp[0].ttype));
-
-                                 if (! undeclared_variable_notice)
-                                   {
-                                     error ("(Each undeclared identifier is reported only once");
-                                     error ("for each function it appears in.)");
-                                     undeclared_variable_notice = 1;
-                                   }
-                               }
-                             yyval.ttype = error_mark_node;
-                             /* Prevent repeated error messages.  */
-                             IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype) = error_mark_node;
-                             IDENTIFIER_ERROR_LOCUS (yyvsp[0].ttype) = current_function_decl;
-                           }
-                       }
-                   }
-                 else if (TREE_TYPE (yyval.ttype) == error_mark_node)
-                   yyval.ttype = error_mark_node;
-                 else if (C_DECL_ANTICIPATED (yyval.ttype))
-                   {
-                     /* The first time we see a build-in function used,
-                        if it has not been declared.  */
-                     C_DECL_ANTICIPATED (yyval.ttype) = 0;
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         /* Omit the implicit declaration we
-                            would ordinarily do, so we don't lose
-                            the actual built in type.
-                            But print a diagnostic for the mismatch.  */
-                         if (objc_method_context
-                             && is_ivar (objc_ivar_chain, yyvsp[0].ttype))
-                           error ("Instance variable `%s' implicitly declared as function",
-                                  IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-                         else
-                           if (TREE_CODE (yyval.ttype) != FUNCTION_DECL)
-                             error ("`%s' implicitly declared as function",
-                                    IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-                         else if ((TYPE_MODE (TREE_TYPE (TREE_TYPE (yyval.ttype)))
-                                   != TYPE_MODE (integer_type_node))
-                                  && (TREE_TYPE (TREE_TYPE (yyval.ttype))
-                                      != void_type_node))
-                           pedwarn ("type mismatch in implicit declaration for built-in function `%s'",
-                                    IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-                         /* If it really returns void, change that to int.  */
-                         if (TREE_TYPE (TREE_TYPE (yyval.ttype)) == void_type_node)
-                           TREE_TYPE (yyval.ttype)
-                             = build_function_type (integer_type_node,
-                                                    TYPE_ARG_TYPES (TREE_TYPE (yyval.ttype)));
-                       }
-                     else
-                       pedwarn ("built-in function `%s' used without declaration",
-                                IDENTIFIER_POINTER (DECL_NAME (yyval.ttype)));
-
-                     /* Do what we would ordinarily do when a fn is used.  */
-                     assemble_external (yyval.ttype);
-                     TREE_USED (yyval.ttype) = 1;
-                   }
-                 else
-                   {
-                     assemble_external (yyval.ttype);
-                     TREE_USED (yyval.ttype) = 1;
-                     /* we have a definition - still check if iVariable */
-
-                     if (!objc_receiver_context
-                         || (objc_receiver_context
-                             && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "super")))
-                        {
-                         tree decl;
-
-                         if (objc_method_context
-                             && (decl = is_ivar (objc_ivar_chain, yyvsp[0].ttype)))
-                            {
-                              if (IDENTIFIER_LOCAL_VALUE (yyvsp[0].ttype))
-                                warning ("local declaration of `%s' hides instance variable",
-                                        IDENTIFIER_POINTER (yyvsp[0].ttype));
-                              else
-                               {
-                                 if (is_private (decl))
-                                   yyval.ttype = error_mark_node;
-                                 else
-                                   yyval.ttype = build_ivar_reference (yyvsp[0].ttype);
-                               }
-                            }
-                       }
-                      else /* we have a message to super */
-                       yyval.ttype = get_super_receiver ();
-                   }
-
-                 if (TREE_CODE (yyval.ttype) == CONST_DECL)
-                   {
-                     yyval.ttype = DECL_INITIAL (yyval.ttype);
-                     /* This is to prevent an enum whose value is 0
-                        from being considered a null pointer constant.  */
-                     yyval.ttype = build1 (NOP_EXPR, TREE_TYPE (yyval.ttype), yyval.ttype);
-                     TREE_CONSTANT (yyval.ttype) = 1;
-                   }
-               ;
-    break;}
-case 91:
-#line 738 "objc-parse.y"
-{ yyval.ttype = combine_strings (yyvsp[0].ttype); ;
-    break;}
-case 92:
-#line 740 "objc-parse.y"
-{ char class = TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                   C_SET_EXP_ORIGINAL_CODE (yyvsp[-1].ttype, ERROR_MARK);
-                 yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 93:
-#line 746 "objc-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 94:
-#line 748 "objc-parse.y"
-{ if (current_function_decl == 0)
-                   {
-                     error ("braced-group within expression allowed only inside a function");
-                     YYERROR;
-                   }
-                 /* We must force a BLOCK for this level
-                    so that, if it is not expanded later,
-                    there is a way to turn off the entire subtree of blocks
-                    that are contained in it.  */
-                 keep_next_level ();
-                 push_iterator_stack ();
-                 push_label_level ();
-                 yyval.ttype = expand_start_stmt_expr (); ;
-    break;}
-case 95:
-#line 762 "objc-parse.y"
-{ tree rtl_exp;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids braced-groups within expressions");
-                 pop_iterator_stack ();
-                 pop_label_level ();
-                 rtl_exp = expand_end_stmt_expr (yyvsp[-2].ttype);
-                 /* The statements have side effects, so the group does.  */
-                 TREE_SIDE_EFFECTS (rtl_exp) = 1;
-
-                 if (TREE_CODE (yyvsp[-1].ttype) == BLOCK)
-                   {
-                     /* Make a BIND_EXPR for the BLOCK already made.  */
-                     yyval.ttype = build (BIND_EXPR, TREE_TYPE (rtl_exp),
-                                 NULL_TREE, rtl_exp, yyvsp[-1].ttype);
-                     /* Remove the block from the tree at this point.
-                        It gets put back at the proper place
-                        when the BIND_EXPR is expanded.  */
-                     delete_block (yyvsp[-1].ttype);
-                   }
-                 else
-                   yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 96:
-#line 785 "objc-parse.y"
-{ yyval.ttype = build_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 97:
-#line 787 "objc-parse.y"
-{ yyval.ttype = build_array_ref (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 98:
-#line 789 "objc-parse.y"
-{
-                  if (doing_objc_thang)
-                    {
-                     if (is_public (yyvsp[-2].ttype, yyvsp[0].ttype))
-                       yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
-                     else
-                       yyval.ttype = error_mark_node;
-                   }
-                  else
-                   yyval.ttype = build_component_ref (yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 99:
-#line 801 "objc-parse.y"
-{
-                  tree expr = build_indirect_ref (yyvsp[-2].ttype, "->");
-
-                  if (doing_objc_thang)
-                    {
-                     if (is_public (expr, yyvsp[0].ttype))
-                       yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
-                     else
-                       yyval.ttype = error_mark_node;
-                   }
-                  else
-                    yyval.ttype = build_component_ref (expr, yyvsp[0].ttype);
-               ;
-    break;}
-case 100:
-#line 815 "objc-parse.y"
-{ yyval.ttype = build_unary_op (POSTINCREMENT_EXPR, yyvsp[-1].ttype, 0); ;
-    break;}
-case 101:
-#line 817 "objc-parse.y"
-{ yyval.ttype = build_unary_op (POSTDECREMENT_EXPR, yyvsp[-1].ttype, 0); ;
-    break;}
-case 102:
-#line 819 "objc-parse.y"
-{ yyval.ttype = build_message_expr (yyvsp[0].ttype); ;
-    break;}
-case 103:
-#line 821 "objc-parse.y"
-{ yyval.ttype = build_selector_expr (yyvsp[0].ttype); ;
-    break;}
-case 104:
-#line 823 "objc-parse.y"
-{ yyval.ttype = build_protocol_expr (yyvsp[0].ttype); ;
-    break;}
-case 105:
-#line 825 "objc-parse.y"
-{ yyval.ttype = build_encode_expr (yyvsp[0].ttype); ;
-    break;}
-case 106:
-#line 827 "objc-parse.y"
-{ yyval.ttype = build_objc_string_object (yyvsp[0].ttype); ;
-    break;}
-case 108:
-#line 834 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 110:
-#line 842 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 113:
-#line 850 "objc-parse.y"
-{ c_mark_varargs ();
-                 if (pedantic)
-                   pedwarn ("ANSI C does not permit use of `varargs.h'"); ;
-    break;}
-case 114:
-#line 860 "objc-parse.y"
-{ ;
-    break;}
-case 119:
-#line 876 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 120:
-#line 881 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);     
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 121:
-#line 886 "objc-parse.y"
-{ shadow_tag_warned (yyvsp[-1].ttype, 1);
-                 pedwarn ("empty declaration"); ;
-    break;}
-case 122:
-#line 889 "objc-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 123:
-#line 898 "objc-parse.y"
-{ ;
-    break;}
-case 128:
-#line 913 "objc-parse.y"
-{ yyval.itype = suspend_momentary ();
-                 pending_xref_error ();
-                 declspec_stack = tree_cons (prefix_attributes,
-                                             current_declspecs,
-                                             declspec_stack);
-                 split_specs_attrs (yyvsp[0].ttype,
-                                    &current_declspecs, &prefix_attributes); ;
-    break;}
-case 129:
-#line 924 "objc-parse.y"
-{ prefix_attributes = chainon (prefix_attributes, yyvsp[0].ttype); ;
-    break;}
-case 130:
-#line 929 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 131:
-#line 934 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 132:
-#line 939 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 133:
-#line 944 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 134:
-#line 949 "objc-parse.y"
-{ shadow_tag (yyvsp[-1].ttype); ;
-    break;}
-case 135:
-#line 951 "objc-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 136:
-#line 953 "objc-parse.y"
-{ pedantic = yyvsp[-1].itype; ;
-    break;}
-case 137:
-#line 963 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 138:
-#line 965 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 139:
-#line 969 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 140:
-#line 971 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 141:
-#line 973 "objc-parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 142:
-#line 978 "objc-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 143:
-#line 983 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 144:
-#line 985 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 145:
-#line 990 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 146:
-#line 992 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 147:
-#line 994 "objc-parse.y"
-{ if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 148:
-#line 1007 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 149:
-#line 1009 "objc-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
-    break;}
-case 150:
-#line 1011 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 151:
-#line 1013 "objc-parse.y"
-{ yyval.ttype = tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 152:
-#line 1018 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
-                 TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 153:
-#line 1021 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 154:
-#line 1023 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
-                 TREE_STATIC (yyval.ttype) = 1; ;
-    break;}
-case 155:
-#line 1026 "objc-parse.y"
-{ if (extra_warnings && TREE_STATIC (yyvsp[-1].ttype))
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER (yyvsp[0].ttype));
-                 yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype);
-                 TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
-    break;}
-case 156:
-#line 1040 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 157:
-#line 1042 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[0].ttype, tree_cons (NULL_TREE, yyvsp[-1].ttype, yyvsp[-2].ttype)); ;
-    break;}
-case 158:
-#line 1046 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 159:
-#line 1048 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 162:
-#line 1058 "objc-parse.y"
-{ /* For a typedef name, record the meaning, not the name.
-                    In case of `foo foo, bar;'.  */
-                 yyval.ttype = lookup_name (yyvsp[0].ttype); ;
-    break;}
-case 163:
-#line 1062 "objc-parse.y"
-{ yyval.ttype = get_static_reference (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 164:
-#line 1064 "objc-parse.y"
-{ yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
-    break;}
-case 165:
-#line 1069 "objc-parse.y"
-{ yyval.ttype = get_object_reference (yyvsp[0].ttype); ;
-    break;}
-case 166:
-#line 1071 "objc-parse.y"
-{ yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); ;
-    break;}
-case 167:
-#line 1073 "objc-parse.y"
-{ yyval.ttype = groktypename (yyvsp[-1].ttype); ;
-    break;}
-case 175:
-#line 1095 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 176:
-#line 1097 "objc-parse.y"
-{ if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype);
-                 yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 177:
-#line 1104 "objc-parse.y"
-{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
-                                         yyvsp[-1].ttype, prefix_attributes);
-                 start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
-    break;}
-case 178:
-#line 1109 "objc-parse.y"
-{ finish_init ();
-                 finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
-    break;}
-case 179:
-#line 1112 "objc-parse.y"
-{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
-                                      yyvsp[0].ttype, prefix_attributes);
-                 finish_decl (d, NULL_TREE, yyvsp[-1].ttype); 
-                ;
-    break;}
-case 180:
-#line 1120 "objc-parse.y"
-{ yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
-                                         yyvsp[-1].ttype, prefix_attributes);
-                 start_init (yyval.ttype, yyvsp[-2].ttype, global_bindings_p ()); ;
-    break;}
-case 181:
-#line 1125 "objc-parse.y"
-{ finish_init ();
-                 decl_attributes (yyvsp[-1].ttype, yyvsp[-3].ttype, prefix_attributes);
-                 finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
-    break;}
-case 182:
-#line 1129 "objc-parse.y"
-{ tree d = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
-                                      yyvsp[0].ttype, prefix_attributes);
-                 finish_decl (d, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 183:
-#line 1137 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 184:
-#line 1139 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 185:
-#line 1144 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 186:
-#line 1146 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 187:
-#line 1151 "objc-parse.y"
-{ yyval.ttype = yyvsp[-2].ttype; ;
-    break;}
-case 188:
-#line 1156 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 189:
-#line 1158 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 190:
-#line 1163 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 191:
-#line 1165 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 192:
-#line 1167 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
-    break;}
-case 193:
-#line 1169 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
-    break;}
-case 194:
-#line 1171 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 200:
-#line 1189 "objc-parse.y"
-{ really_start_incremental_init (NULL_TREE);
-                 /* Note that the call to clear_momentary
-                    is in process_init_element.  */
-                 push_momentary (); ;
-    break;}
-case 201:
-#line 1194 "objc-parse.y"
-{ yyval.ttype = pop_init_level (0);
-                 if (yyval.ttype == error_mark_node
-                     && ! (yychar == STRING || yychar == CONSTANT))
-                   pop_momentary ();
-                 else
-                   pop_momentary_nofree (); ;
-    break;}
-case 202:
-#line 1202 "objc-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 203:
-#line 1208 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids empty initializer braces"); ;
-    break;}
-case 207:
-#line 1222 "objc-parse.y"
-{ process_init_element (yyvsp[0].ttype); ;
-    break;}
-case 208:
-#line 1224 "objc-parse.y"
-{ push_init_level (0); ;
-    break;}
-case 209:
-#line 1226 "objc-parse.y"
-{ process_init_element (pop_init_level (0)); ;
-    break;}
-case 211:
-#line 1232 "objc-parse.y"
-{ set_init_label (yyvsp[-1].ttype); ;
-    break;}
-case 213:
-#line 1235 "objc-parse.y"
-{ set_init_label (yyvsp[-1].ttype); ;
-    break;}
-case 215:
-#line 1241 "objc-parse.y"
-{ push_c_function_context ();
-                 if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); ;
-    break;}
-case 216:
-#line 1250 "objc-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 217:
-#line 1258 "objc-parse.y"
-{ finish_function (1);
-                 pop_c_function_context (); ;
-    break;}
-case 218:
-#line 1264 "objc-parse.y"
-{ push_c_function_context ();
-                 if (! start_function (current_declspecs, yyvsp[0].ttype,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); ;
-    break;}
-case 219:
-#line 1273 "objc-parse.y"
-{ store_parm_decls (); ;
-    break;}
-case 220:
-#line 1281 "objc-parse.y"
-{ finish_function (1);
-                 pop_c_function_context (); ;
-    break;}
-case 223:
-#line 1297 "objc-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 224:
-#line 1299 "objc-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 225:
-#line 1304 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 226:
-#line 1306 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 227:
-#line 1308 "objc-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 228:
-#line 1315 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 231:
-#line 1327 "objc-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 232:
-#line 1332 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 233:
-#line 1334 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 234:
-#line 1336 "objc-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 235:
-#line 1343 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 237:
-#line 1352 "objc-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 238:
-#line 1357 "objc-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 239:
-#line 1359 "objc-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 240:
-#line 1361 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 241:
-#line 1363 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 242:
-#line 1370 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 244:
-#line 1376 "objc-parse.y"
-{ yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
-                 /* Start scope of tag before parsing components.  */
-               ;
-    break;}
-case 245:
-#line 1380 "objc-parse.y"
-{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 246:
-#line 1382 "objc-parse.y"
-{ yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
-                                     yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 247:
-#line 1386 "objc-parse.y"
-{ yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 248:
-#line 1388 "objc-parse.y"
-{ yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
-    break;}
-case 249:
-#line 1390 "objc-parse.y"
-{ yyval.ttype = finish_struct (yyvsp[-3].ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 250:
-#line 1392 "objc-parse.y"
-{ yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
-                                     yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 251:
-#line 1396 "objc-parse.y"
-{ yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 252:
-#line 1398 "objc-parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (yyvsp[-1].ttype); ;
-    break;}
-case 253:
-#line 1401 "objc-parse.y"
-{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 254:
-#line 1404 "objc-parse.y"
-{ yyvsp[0].itype = suspend_momentary ();
-                 yyval.ttype = start_enum (NULL_TREE); ;
-    break;}
-case 255:
-#line 1407 "objc-parse.y"
-{ yyval.ttype = finish_enum (yyvsp[-4].ttype, nreverse (yyvsp[-3].ttype), yyvsp[0].ttype);
-                 resume_momentary (yyvsp[-5].itype); ;
-    break;}
-case 256:
-#line 1410 "objc-parse.y"
-{ yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
-    break;}
-case 260:
-#line 1421 "objc-parse.y"
-{ if (pedantic) pedwarn ("comma at end of enumerator list"); ;
-    break;}
-case 261:
-#line 1426 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 262:
-#line 1428 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
-                 pedwarn ("no semicolon at end of struct or union"); ;
-    break;}
-case 263:
-#line 1433 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 264:
-#line 1435 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 265:
-#line 1437 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified"); ;
-    break;}
-case 266:
-#line 1441 "objc-parse.y"
-{
-                 tree interface = lookup_interface (yyvsp[-1].ttype);
-
-                 if (interface)
-                   yyval.ttype = get_class_ivars (interface);
-                 else
-                   {
-                     error ("Cannot find interface declaration for `%s'",
-                            IDENTIFIER_POINTER (yyvsp[-1].ttype));
-                     yyval.ttype = NULL_TREE;
-                   }
-               ;
-    break;}
-case 267:
-#line 1466 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 268:
-#line 1472 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag(yyvsp[0].ttype);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 269:
-#line 1477 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 270:
-#line 1483 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag(yyvsp[0].ttype);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 271:
-#line 1488 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 272:
-#line 1490 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
-    break;}
-case 274:
-#line 1497 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 275:
-#line 1502 "objc-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 276:
-#line 1506 "objc-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 277:
-#line 1509 "objc-parse.y"
-{ yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
-                 decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
-    break;}
-case 279:
-#line 1521 "objc-parse.y"
-{ if (yyvsp[-2].ttype == error_mark_node)
-                   yyval.ttype = yyvsp[-2].ttype;
-                 else
-                   yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
-    break;}
-case 280:
-#line 1526 "objc-parse.y"
-{ yyval.ttype = error_mark_node; ;
-    break;}
-case 281:
-#line 1532 "objc-parse.y"
-{ yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 282:
-#line 1534 "objc-parse.y"
-{ yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 283:
-#line 1539 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 284:
-#line 1541 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 285:
-#line 1546 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 287:
-#line 1552 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 288:
-#line 1554 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 289:
-#line 1559 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 290:
-#line 1561 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 291:
-#line 1566 "objc-parse.y"
-{ yyval.ttype = yyvsp[-1].ttype; ;
-    break;}
-case 292:
-#line 1569 "objc-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
-case 293:
-#line 1571 "objc-parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 294:
-#line 1573 "objc-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 295:
-#line 1575 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 296:
-#line 1577 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
-    break;}
-case 297:
-#line 1579 "objc-parse.y"
-{ yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
-    break;}
-case 298:
-#line 1581 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 299:
-#line 1583 "objc-parse.y"
-{ yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
-    break;}
-case 300:
-#line 1594 "objc-parse.y"
-{
-                 if (pedantic && yyvsp[0].ends_in_label)
-                   pedwarn ("ANSI C forbids label at end of compound statement");
-               ;
-    break;}
-case 302:
-#line 1603 "objc-parse.y"
-{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
-    break;}
-case 303:
-#line 1605 "objc-parse.y"
-{ yyval.ends_in_label = 0; ;
-    break;}
-case 307:
-#line 1617 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 pushlevel (0);
-                 clear_last_expr ();
-                 push_momentary ();
-                 expand_start_bindings (0);
-                 if (objc_method_context)
-                   add_objc_decls ();
-               ;
-    break;}
-case 309:
-#line 1632 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids label declarations"); ;
-    break;}
-case 312:
-#line 1643 "objc-parse.y"
-{ tree link;
-                 for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
-                   {
-                     tree label = shadow_label (TREE_VALUE (link));
-                     C_DECLARED_LABEL_FLAG (label) = 1;
-                     declare_nonlocal_label (label);
-                   }
-               ;
-    break;}
-case 313:
-#line 1657 "objc-parse.y"
-{;
-    break;}
-case 315:
-#line 1662 "objc-parse.y"
-{ yyval.ttype = convert (void_type_node, integer_zero_node); ;
-    break;}
-case 316:
-#line 1664 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), 1, 0);
-                 yyval.ttype = poplevel (1, 1, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 317:
-#line 1672 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 yyval.ttype = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 318:
-#line 1680 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 yyval.ttype = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 321:
-#line 1700 "objc-parse.y"
-{ emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
-                 yyval.itype = stmt_count;
-                 if_stmt_file = yyvsp[-5].filename;
-                 if_stmt_line = yyvsp[-4].lineno;
-                 position_after_white_space (); ;
-    break;}
-case 322:
-#line 1713 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 expand_start_loop_continue_elsewhere (1);
-                 position_after_white_space (); ;
-    break;}
-case 323:
-#line 1720 "objc-parse.y"
-{ expand_loop_continue_here (); ;
-    break;}
-case 324:
-#line 1724 "objc-parse.y"
-{ yyval.filename = input_filename; ;
-    break;}
-case 325:
-#line 1728 "objc-parse.y"
-{ yyval.lineno = lineno; ;
-    break;}
-case 326:
-#line 1733 "objc-parse.y"
-{ ;
-    break;}
-case 327:
-#line 1738 "objc-parse.y"
-{ ;
-    break;}
-case 328:
-#line 1743 "objc-parse.y"
-{ yyval.ends_in_label = yyvsp[0].ends_in_label; ;
-    break;}
-case 329:
-#line 1748 "objc-parse.y"
-{ yyval.ends_in_label = 0; ;
-    break;}
-case 330:
-#line 1750 "objc-parse.y"
-{ yyval.ends_in_label = 1; ;
-    break;}
-case 331:
-#line 1756 "objc-parse.y"
-{ stmt_count++; ;
-    break;}
-case 333:
-#line 1759 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-/* It appears that this should not be done--that a non-lvalue array
-   shouldn't get an error if the value isn't used.
-   Section 3.2.2.1 says that an array lvalue gets converted to a pointer
-   if it appears as a top-level expression,
-   but says nothing about non-lvalue arrays.  */
-#if 0
-                 /* Call default_conversion to get an error
-                    on referring to a register array if pedantic.  */
-                 if (TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == ARRAY_TYPE
-                     || TREE_CODE (TREE_TYPE (yyvsp[-1].ttype)) == FUNCTION_TYPE)
-                   yyvsp[-1].ttype = default_conversion (yyvsp[-1].ttype);
-#endif
-                 iterator_expand (yyvsp[-1].ttype);
-                 clear_momentary (); ;
-    break;}
-case 334:
-#line 1776 "objc-parse.y"
-{ expand_start_else ();
-                 yyvsp[-1].itype = stmt_count;
-                 position_after_white_space (); ;
-    break;}
-case 335:
-#line 1780 "objc-parse.y"
-{ expand_end_cond ();
-                 if (extra_warnings && stmt_count == yyvsp[-3].itype)
-                   warning ("empty body in an else-statement"); ;
-    break;}
-case 336:
-#line 1784 "objc-parse.y"
-{ expand_end_cond ();
-                 /* This warning is here instead of in simple_if, because we
-                    do not want a warning if an empty if is followed by an
-                    else statement.  Increment stmt_count so we don't
-                    give a second error if this is a nested `if'.  */
-                 if (extra_warnings && stmt_count++ == yyvsp[0].itype)
-                   warning_with_file_and_line (if_stmt_file, if_stmt_line,
-                                               "empty body in an if-statement"); ;
-    break;}
-case 337:
-#line 1796 "objc-parse.y"
-{ expand_end_cond (); ;
-    break;}
-case 338:
-#line 1798 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
-                 /* The emit_nop used to come before emit_line_note,
-                    but that made the nop seem like part of the preceding line.
-                    And that was confusing when the preceding line was
-                    inside of an if statement and was not really executed.
-                    I think it ought to work to put the nop after the line number.
-                    We will see.  --rms, July 15, 1991.  */
-                 emit_nop (); ;
-    break;}
-case 339:
-#line 1808 "objc-parse.y"
-{ /* Don't start the loop till we have succeeded
-                    in parsing the end test.  This is to make sure
-                    that we end every loop we start.  */
-                 expand_start_loop (1);
-                 emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion (yyvsp[-1].ttype));
-                 position_after_white_space (); ;
-    break;}
-case 340:
-#line 1817 "objc-parse.y"
-{ expand_end_loop (); ;
-    break;}
-case 341:
-#line 1820 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion (yyvsp[-2].ttype));
-                 expand_end_loop ();
-                 clear_momentary (); ;
-    break;}
-case 342:
-#line 1827 "objc-parse.y"
-{ expand_end_loop ();
-                 clear_momentary (); ;
-    break;}
-case 343:
-#line 1831 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 if (yyvsp[-1].ttype) c_expand_expr_stmt (yyvsp[-1].ttype);
-                 /* Next step is to call expand_start_loop_continue_elsewhere,
-                    but wait till after we parse the entire for (...).
-                    Otherwise, invalid input might cause us to call that
-                    fn without calling expand_end_loop.  */
-               ;
-    break;}
-case 344:
-#line 1843 "objc-parse.y"
-{ yyvsp[0].lineno = lineno;
-                 yyval.filename = input_filename; ;
-    break;}
-case 345:
-#line 1846 "objc-parse.y"
-{ 
-                 /* Start the loop.  Doing this after parsing
-                    all the expressions ensures we will end the loop.  */
-                 expand_start_loop_continue_elsewhere (1);
-                 /* Emit the end-test, with a line number.  */
-                 emit_line_note (yyvsp[-2].filename, yyvsp[-3].lineno);
-                 if (yyvsp[-4].ttype)
-                   expand_exit_loop_if_false (NULL_PTR,
-                                              truthvalue_conversion (yyvsp[-4].ttype));
-                 /* Don't let the tree nodes for $9 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 yyvsp[-3].lineno = lineno;
-                 yyvsp[-2].filename = input_filename;
-                 position_after_white_space (); ;
-    break;}
-case 346:
-#line 1862 "objc-parse.y"
-{ /* Emit the increment expression, with a line number.  */
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
-                 expand_loop_continue_here ();
-                 if (yyvsp[-3].ttype)
-                   c_expand_expr_stmt (yyvsp[-3].ttype);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary ();
-                 expand_end_loop (); ;
-    break;}
-case 347:
-#line 1873 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 c_expand_start_case (yyvsp[-1].ttype);
-                 /* Don't let the tree nodes for $3 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 position_after_white_space (); ;
-    break;}
-case 348:
-#line 1881 "objc-parse.y"
-{ expand_end_case (yyvsp[-3].ttype);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); ;
-    break;}
-case 349:
-#line 1887 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 if ( ! expand_exit_something ())
-                   error ("break statement not within loop or switch"); ;
-    break;}
-case 350:
-#line 1892 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 if (! expand_continue_loop (NULL_PTR))
-                   error ("continue statement not within a loop"); ;
-    break;}
-case 351:
-#line 1897 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
-                 c_expand_return (NULL_TREE); ;
-    break;}
-case 352:
-#line 1901 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
-                 c_expand_return (yyvsp[-1].ttype); ;
-    break;}
-case 353:
-#line 1905 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
-                 STRIP_NOPS (yyvsp[-2].ttype);
-                 if ((TREE_CODE (yyvsp[-2].ttype) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND (yyvsp[-2].ttype, 0)) == STRING_CST)
-                     || TREE_CODE (yyvsp[-2].ttype) == STRING_CST)
-                   expand_asm (yyvsp[-2].ttype);
-                 else
-                   error ("argument of `asm' is not a constant string"); ;
-    break;}
-case 354:
-#line 1916 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
-                 c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
-                                        yyvsp[-6].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 355:
-#line 1923 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
-                 c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
-                                        yyvsp[-8].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 356:
-#line 1931 "objc-parse.y"
-{ stmt_count++;
-                 emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
-                 c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
-                                        yyvsp[-10].ttype == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); ;
-    break;}
-case 357:
-#line 1937 "objc-parse.y"
-{ tree decl;
-                 stmt_count++;
-                 emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
-                 decl = lookup_label (yyvsp[-1].ttype);
-                 if (decl != 0)
-                   {
-                     TREE_USED (decl) = 1;
-                     expand_goto (decl);
-                   }
-               ;
-    break;}
-case 358:
-#line 1948 "objc-parse.y"
-{ if (pedantic)
-                   pedwarn ("ANSI C forbids `goto *expr;'");
-                 stmt_count++;
-                 emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
-                 expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
-    break;}
-case 361:
-#line 1963 "objc-parse.y"
-{
-           /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-
-           yyval.itype = 0;
-           if (TREE_CODE (yyvsp[-1].ttype) != VAR_DECL)
-             error ("invalid `for (ITERATOR)' syntax");
-           else if (! ITERATOR_P (yyvsp[-1].ttype))
-             error ("`%s' is not an iterator",
-                    IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
-           else if (ITERATOR_BOUND_P (yyvsp[-1].ttype))
-             error ("`for (%s)' inside expansion of same iterator",
-                    IDENTIFIER_POINTER (DECL_NAME (yyvsp[-1].ttype)));
-           else
-             {
-               yyval.itype = 1;
-               iterator_for_loop_start (yyvsp[-1].ttype);
-             }
-         ;
-    break;}
-case 362:
-#line 1984 "objc-parse.y"
-{
-           if (yyvsp[-1].itype)
-             iterator_for_loop_end (yyvsp[-3].ttype);
-         ;
-    break;}
-case 363:
-#line 2019 "objc-parse.y"
-{ register tree value = check_case_value (yyvsp[-1].ttype);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 stmt_count++;
-
-                 if (value != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 364:
-#line 2044 "objc-parse.y"
-{ register tree value1 = check_case_value (yyvsp[-3].ttype);
-                 register tree value2 = check_case_value (yyvsp[-1].ttype);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids case ranges");
-                 stmt_count++;
-
-                 if (value1 != error_mark_node && value2 != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase_range (value1, value2,
-                                                   convert_and_check, label,
-                                                   &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 4)
-                       warning ("empty case range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 365:
-#line 2075 "objc-parse.y"
-{
-                 tree duplicate;
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-                 int success = pushcase (NULL_TREE, 0, label, &duplicate);
-                 stmt_count++;
-                 if (success == 1)
-                   error ("default label not within a switch statement");
-                 else if (success == 2)
-                   {
-                     error ("multiple default labels in one switch");
-                     error_with_decl (duplicate, "this is the first default label");
-                   }
-                 position_after_white_space (); ;
-    break;}
-case 366:
-#line 2090 "objc-parse.y"
-{ tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
-                 stmt_count++;
-                 emit_nop ();
-                 if (label)
-                   expand_label (label);
-                 position_after_white_space (); ;
-    break;}
-case 367:
-#line 2102 "objc-parse.y"
-{ emit_line_note (input_filename, lineno);
-                 yyval.ttype = NULL_TREE; ;
-    break;}
-case 368:
-#line 2105 "objc-parse.y"
-{ emit_line_note (input_filename, lineno); ;
-    break;}
-case 369:
-#line 2110 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 371:
-#line 2117 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 374:
-#line 2124 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
-    break;}
-case 375:
-#line 2129 "objc-parse.y"
-{ yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
-    break;}
-case 376:
-#line 2134 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
-    break;}
-case 377:
-#line 2136 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
-    break;}
-case 378:
-#line 2142 "objc-parse.y"
-{ pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (0); ;
-    break;}
-case 379:
-#line 2146 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); ;
-    break;}
-case 381:
-#line 2154 "objc-parse.y"
-{ tree parm;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids forward parameter declarations");
-                 /* Mark the forward decls as such.  */
-                 for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
-                   TREE_ASM_WRITTEN (parm) = 1;
-                 clear_parm_order (); ;
-    break;}
-case 382:
-#line 2162 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype; ;
-    break;}
-case 383:
-#line 2164 "objc-parse.y"
-{ yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
-    break;}
-case 384:
-#line 2170 "objc-parse.y"
-{ yyval.ttype = get_parm_info (0); ;
-    break;}
-case 385:
-#line 2172 "objc-parse.y"
-{ yyval.ttype = get_parm_info (0);
-                 /* Gcc used to allow this as an extension.  However, it does
-                    not work for all targets, and thus has been disabled.
-                    Also, since func (...) and func () are indistinguishable,
-                    it caused problems with the code in expand_builtin which
-                    tries to verify that BUILT_IN_NEXT_ARG is being used
-                    correctly.  */
-                 error ("ANSI C requires a named argument before `...'");
-               ;
-    break;}
-case 386:
-#line 2182 "objc-parse.y"
-{ yyval.ttype = get_parm_info (1); ;
-    break;}
-case 387:
-#line 2184 "objc-parse.y"
-{ yyval.ttype = get_parm_info (0); ;
-    break;}
-case 388:
-#line 2189 "objc-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 389:
-#line 2191 "objc-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 390:
-#line 2198 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 391:
-#line 2207 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype)); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 392:
-#line 2216 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 393:
-#line 2225 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 394:
-#line 2235 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype);  ;
-    break;}
-case 395:
-#line 2249 "objc-parse.y"
-{ pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (1); ;
-    break;}
-case 396:
-#line 2253 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); ;
-    break;}
-case 398:
-#line 2261 "objc-parse.y"
-{ tree t;
-                 for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
-                   if (TREE_VALUE (t) == NULL_TREE)
-                     error ("`...' in old-style identifier list");
-                 yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
-    break;}
-case 399:
-#line 2271 "objc-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 400:
-#line 2273 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 401:
-#line 2279 "objc-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 402:
-#line 2281 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 403:
-#line 2286 "objc-parse.y"
-{ yyval.itype = pedantic;
-                 pedantic = 0; ;
-    break;}
-case 409:
-#line 2299 "objc-parse.y"
-{
-                 if (objc_implementation_context)
-                    {
-                     finish_class (objc_implementation_context);
-                     objc_ivar_chain = NULL_TREE;
-                     objc_implementation_context = NULL_TREE;
-                   }
-                 else
-                   warning ("`@end' must appear in an implementation context");
-               ;
-    break;}
-case 410:
-#line 2314 "objc-parse.y"
-{ yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
-    break;}
-case 411:
-#line 2316 "objc-parse.y"
-{ yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
-    break;}
-case 412:
-#line 2321 "objc-parse.y"
-{
-                 objc_declare_class (yyvsp[-1].ttype);
-               ;
-    break;}
-case 413:
-#line 2327 "objc-parse.y"
-{
-                 objc_declare_alias (yyvsp[-2].ttype, yyvsp[-1].ttype);
-               ;
-    break;}
-case 414:
-#line 2333 "objc-parse.y"
-{
-                 objc_interface_context = objc_ivar_context
-                   = start_class (CLASS_INTERFACE_TYPE, yyvsp[-2].ttype, NULL_TREE, yyvsp[-1].ttype);
-                  objc_public_flag = 0;
-               ;
-    break;}
-case 415:
-#line 2339 "objc-parse.y"
-{
-                  continue_class (objc_interface_context);
-               ;
-    break;}
-case 416:
-#line 2344 "objc-parse.y"
-{
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 417:
-#line 2350 "objc-parse.y"
-{
-                 objc_interface_context
-                   = start_class (CLASS_INTERFACE_TYPE, yyvsp[-1].ttype, NULL_TREE, yyvsp[0].ttype);
-                  continue_class (objc_interface_context);
-               ;
-    break;}
-case 418:
-#line 2357 "objc-parse.y"
-{
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 419:
-#line 2363 "objc-parse.y"
-{
-                 objc_interface_context = objc_ivar_context
-                   = start_class (CLASS_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[-1].ttype);
-                  objc_public_flag = 0;
-               ;
-    break;}
-case 420:
-#line 2369 "objc-parse.y"
-{
-                  continue_class (objc_interface_context);
-               ;
-    break;}
-case 421:
-#line 2374 "objc-parse.y"
-{
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 422:
-#line 2380 "objc-parse.y"
-{
-                 objc_interface_context
-                   = start_class (CLASS_INTERFACE_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
-                  continue_class (objc_interface_context);
-               ;
-    break;}
-case 423:
-#line 2387 "objc-parse.y"
-{
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 424:
-#line 2393 "objc-parse.y"
-{
-                 objc_implementation_context = objc_ivar_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-1].ttype, NULL_TREE, NULL_TREE);
-                  objc_public_flag = 0;
-               ;
-    break;}
-case 425:
-#line 2399 "objc-parse.y"
-{
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               ;
-    break;}
-case 426:
-#line 2405 "objc-parse.y"
-{
-                 objc_implementation_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[0].ttype, NULL_TREE, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               ;
-    break;}
-case 427:
-#line 2413 "objc-parse.y"
-{
-                 objc_implementation_context = objc_ivar_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
-                  objc_public_flag = 0;
-               ;
-    break;}
-case 428:
-#line 2419 "objc-parse.y"
-{
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               ;
-    break;}
-case 429:
-#line 2425 "objc-parse.y"
-{
-                 objc_implementation_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               ;
-    break;}
-case 430:
-#line 2433 "objc-parse.y"
-{
-                 objc_interface_context
-                   = start_class (CATEGORY_INTERFACE_TYPE, yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
-                  continue_class (objc_interface_context);
-               ;
-    break;}
-case 431:
-#line 2440 "objc-parse.y"
-{
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 432:
-#line 2446 "objc-parse.y"
-{
-                 objc_implementation_context
-                   = start_class (CATEGORY_IMPLEMENTATION_TYPE, yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               ;
-    break;}
-case 433:
-#line 2456 "objc-parse.y"
-{
-                 remember_protocol_qualifiers ();
-                 objc_interface_context
-                   = start_protocol(PROTOCOL_INTERFACE_TYPE, yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 434:
-#line 2462 "objc-parse.y"
-{
-                 forget_protocol_qualifiers();
-                 finish_protocol(objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               ;
-    break;}
-case 435:
-#line 2471 "objc-parse.y"
-{
-                 yyval.ttype = NULL_TREE;
-               ;
-    break;}
-case 437:
-#line 2479 "objc-parse.y"
-{
-                 if (yyvsp[-2].code == LT_EXPR && yyvsp[0].code == GT_EXPR)
-                   yyval.ttype = yyvsp[-1].ttype;
-                 else
-                   YYERROR1;
-               ;
-    break;}
-case 440:
-#line 2493 "objc-parse.y"
-{ objc_public_flag = 2; ;
-    break;}
-case 441:
-#line 2494 "objc-parse.y"
-{ objc_public_flag = 0; ;
-    break;}
-case 442:
-#line 2495 "objc-parse.y"
-{ objc_public_flag = 1; ;
-    break;}
-case 443:
-#line 2500 "objc-parse.y"
-{
-                  yyval.ttype = NULL_TREE;
-                ;
-    break;}
-case 445:
-#line 2505 "objc-parse.y"
-{
-                  if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified");
-                ;
-    break;}
-case 446:
-#line 2523 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 447:
-#line 2529 "objc-parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-1].itype); ;
-    break;}
-case 448:
-#line 2535 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 449:
-#line 2540 "objc-parse.y"
-{ yyval.ttype = NULL_TREE; ;
-    break;}
-case 452:
-#line 2547 "objc-parse.y"
-{
-                 yyval.ttype = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             yyvsp[0].ttype, current_declspecs,
-                                             NULL_TREE);
-                ;
-    break;}
-case 453:
-#line 2554 "objc-parse.y"
-{
-                 yyval.ttype = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             yyvsp[-2].ttype, current_declspecs, yyvsp[0].ttype);
-                ;
-    break;}
-case 454:
-#line 2560 "objc-parse.y"
-{
-                 yyval.ttype = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             NULL_TREE,
-                                             current_declspecs, yyvsp[0].ttype);
-                ;
-    break;}
-case 455:
-#line 2570 "objc-parse.y"
-{
-                 remember_protocol_qualifiers ();
-                 if (objc_implementation_context)
-                   objc_inherit_code = CLASS_METHOD_DECL;
-                  else
-                   fatal ("method definition not in class context");
-               ;
-    break;}
-case 456:
-#line 2578 "objc-parse.y"
-{
-                 forget_protocol_qualifiers ();
-                 add_class_method (objc_implementation_context, yyvsp[0].ttype);
-                 start_method_def (yyvsp[0].ttype);
-                 objc_method_context = yyvsp[0].ttype;
-               ;
-    break;}
-case 457:
-#line 2585 "objc-parse.y"
-{
-                 continue_method_def ();
-               ;
-    break;}
-case 458:
-#line 2589 "objc-parse.y"
-{
-                 finish_method_def ();
-                 objc_method_context = NULL_TREE;
-               ;
-    break;}
-case 459:
-#line 2595 "objc-parse.y"
-{
-                 remember_protocol_qualifiers ();
-                 if (objc_implementation_context)
-                   objc_inherit_code = INSTANCE_METHOD_DECL;
-                  else
-                   fatal ("method definition not in class context");
-               ;
-    break;}
-case 460:
-#line 2603 "objc-parse.y"
-{
-                 forget_protocol_qualifiers ();
-                 add_instance_method (objc_implementation_context, yyvsp[0].ttype);
-                 start_method_def (yyvsp[0].ttype);
-                 objc_method_context = yyvsp[0].ttype;
-               ;
-    break;}
-case 461:
-#line 2610 "objc-parse.y"
-{
-                 continue_method_def ();
-               ;
-    break;}
-case 462:
-#line 2614 "objc-parse.y"
-{
-                 finish_method_def ();
-                 objc_method_context = NULL_TREE;
-               ;
-    break;}
-case 464:
-#line 2626 "objc-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 469:
-#line 2633 "objc-parse.y"
-{yyval.ttype = NULL_TREE; ;
-    break;}
-case 473:
-#line 2643 "objc-parse.y"
-{
-                 objc_inherit_code = CLASS_METHOD_DECL;
-               ;
-    break;}
-case 474:
-#line 2647 "objc-parse.y"
-{
-                 add_class_method (objc_interface_context, yyvsp[0].ttype);
-               ;
-    break;}
-case 476:
-#line 2653 "objc-parse.y"
-{
-                 objc_inherit_code = INSTANCE_METHOD_DECL;
-               ;
-    break;}
-case 477:
-#line 2657 "objc-parse.y"
-{
-                 add_instance_method (objc_interface_context, yyvsp[0].ttype);
-               ;
-    break;}
-case 479:
-#line 2665 "objc-parse.y"
-{
-                 yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE);
-               ;
-    break;}
-case 480:
-#line 2670 "objc-parse.y"
-{
-                 yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[0].ttype, NULL_TREE);
-               ;
-    break;}
-case 481:
-#line 2675 "objc-parse.y"
-{
-                 yyval.ttype = build_method_decl (objc_inherit_code, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 482:
-#line 2680 "objc-parse.y"
-{
-                 yyval.ttype = build_method_decl (objc_inherit_code, NULL_TREE, yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 491:
-#line 2710 "objc-parse.y"
-{ current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary (yyvsp[-2].itype); ;
-    break;}
-case 492:
-#line 2715 "objc-parse.y"
-{ shadow_tag (yyvsp[-1].ttype); ;
-    break;}
-case 493:
-#line 2717 "objc-parse.y"
-{ pedwarn ("empty declaration"); ;
-    break;}
-case 494:
-#line 2722 "objc-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 495:
-#line 2724 "objc-parse.y"
-{ push_parm_decl (yyvsp[0].ttype); ;
-    break;}
-case 496:
-#line 2732 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype)); ;
-    break;}
-case 497:
-#line 2737 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype)); ;
-    break;}
-case 498:
-#line 2742 "objc-parse.y"
-{ yyval.ttype = build_tree_list (build_tree_list (current_declspecs,
-                                                        yyvsp[-1].ttype),
-                                       build_tree_list (prefix_attributes,
-                                                        yyvsp[0].ttype)); ;
-    break;}
-case 499:
-#line 2750 "objc-parse.y"
-{
-                 yyval.ttype = NULL_TREE;
-               ;
-    break;}
-case 500:
-#line 2754 "objc-parse.y"
-{
-                 /* oh what a kludge! */
-                 yyval.ttype = (tree)1;
-               ;
-    break;}
-case 501:
-#line 2759 "objc-parse.y"
-{
-                 pushlevel (0);
-               ;
-    break;}
-case 502:
-#line 2763 "objc-parse.y"
-{
-                 /* returns a tree list node generated by get_parm_info */
-                 yyval.ttype = yyvsp[0].ttype;
-                 poplevel (0, 0, 0);
-               ;
-    break;}
-case 505:
-#line 2778 "objc-parse.y"
-{
-                 yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 510:
-#line 2791 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 511:
-#line 2792 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 512:
-#line 2793 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 513:
-#line 2794 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 514:
-#line 2795 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 515:
-#line 2796 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 516:
-#line 2797 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 517:
-#line 2798 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 518:
-#line 2799 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 519:
-#line 2800 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 520:
-#line 2801 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 521:
-#line 2802 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 522:
-#line 2803 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 523:
-#line 2804 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 524:
-#line 2805 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 525:
-#line 2806 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 526:
-#line 2807 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 527:
-#line 2808 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 528:
-#line 2809 "objc-parse.y"
-{ yyval.ttype = get_identifier (token_buffer); ;
-    break;}
-case 531:
-#line 2815 "objc-parse.y"
-{
-                 yyval.ttype = build_keyword_decl (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 532:
-#line 2820 "objc-parse.y"
-{
-                 yyval.ttype = build_keyword_decl (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
-               ;
-    break;}
-case 533:
-#line 2825 "objc-parse.y"
-{
-                 yyval.ttype = build_keyword_decl (NULL_TREE, yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 534:
-#line 2830 "objc-parse.y"
-{
-                 yyval.ttype = build_keyword_decl (NULL_TREE, NULL_TREE, yyvsp[0].ttype);
-               ;
-    break;}
-case 538:
-#line 2843 "objc-parse.y"
-{
-                 yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 539:
-#line 2851 "objc-parse.y"
-{
-                 if (TREE_CHAIN (yyvsp[0].ttype) == NULL_TREE)
-                   /* just return the expr., remove a level of indirection */
-                   yyval.ttype = TREE_VALUE (yyvsp[0].ttype);
-                  else
-                   /* we have a comma expr., we will collapse later */
-                   yyval.ttype = yyvsp[0].ttype;
-               ;
-    break;}
-case 540:
-#line 2863 "objc-parse.y"
-{
-                 yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 541:
-#line 2867 "objc-parse.y"
-{
-                 yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype);
-               ;
-    break;}
-case 543:
-#line 2875 "objc-parse.y"
-{
-                 yyval.ttype = get_class_reference (yyvsp[0].ttype);
-               ;
-    break;}
-case 544:
-#line 2882 "objc-parse.y"
-{ objc_receiver_context = 1; ;
-    break;}
-case 545:
-#line 2884 "objc-parse.y"
-{ objc_receiver_context = 0; ;
-    break;}
-case 546:
-#line 2886 "objc-parse.y"
-{
-                 yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype);
-               ;
-    break;}
-case 550:
-#line 2899 "objc-parse.y"
-{
-                 yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
-               ;
-    break;}
-case 551:
-#line 2906 "objc-parse.y"
-{
-                 yyval.ttype = build_tree_list (yyvsp[-1].ttype, NULL_TREE);
-               ;
-    break;}
-case 552:
-#line 2910 "objc-parse.y"
-{
-                 yyval.ttype = build_tree_list (NULL_TREE, NULL_TREE);
-               ;
-    break;}
-case 553:
-#line 2917 "objc-parse.y"
-{
-                 yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 554:
-#line 2924 "objc-parse.y"
-{
-                 yyval.ttype = yyvsp[-1].ttype;
-               ;
-    break;}
-case 555:
-#line 2933 "objc-parse.y"
-{
-                 yyval.ttype = groktypename (yyvsp[-1].ttype);
-               ;
-    break;}
-}
-   /* the action file gets copied in in place of this dollarsign */
-#line 487 "/usr/local/share/bison.simple"
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-#ifdef YYLSP_NEEDED
-  yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-  *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
-  yylsp++;
-  if (yylen == 0)
-    {
-      yylsp->first_line = yylloc.first_line;
-      yylsp->first_column = yylloc.first_column;
-      yylsp->last_line = (yylsp-1)->last_line;
-      yylsp->last_column = (yylsp-1)->last_column;
-      yylsp->text = 0;
-    }
-  else
-    {
-      yylsp->last_line = (yylsp+yylen-1)->last_line;
-      yylsp->last_column = (yylsp+yylen-1)->last_column;
-    }
-#endif
-
-  /* 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 - YYNTBASE] + *yyssp;
-  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTBASE];
-
-  goto yynewstate;
-
-yyerrlab:   /* here on detecting error */
-
-  if (! yyerrstatus)
-    /* If not already recovering from an error, report this error.  */
-    {
-      ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (yyn > YYFLAG && yyn < YYLAST)
-       {
-         int size = 0;
-         char *msg;
-         int x, count;
-
-         count = 0;
-         /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
-         for (x = (yyn < 0 ? -yyn : 0);
-              x < (sizeof(yytname) / sizeof(char *)); x++)
-           if (yycheck[x + yyn] == x)
-             size += strlen(yytname[x]) + 15, count++;
-         msg = (char *) malloc(size + 15);
-         if (msg != 0)
-           {
-             strcpy(msg, "parse error");
-
-             if (count < 5)
-               {
-                 count = 0;
-                 for (x = (yyn < 0 ? -yyn : 0);
-                      x < (sizeof(yytname) / sizeof(char *)); x++)
-                   if (yycheck[x + yyn] == x)
-                     {
-                       strcat(msg, count == 0 ? ", expecting `" : " or `");
-                       strcat(msg, yytname[x]);
-                       strcat(msg, "'");
-                       count++;
-                     }
-               }
-             yyerror(msg);
-             free(msg);
-           }
-         else
-           yyerror ("parse error; also virtual memory exceeded");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror("parse error");
-    }
-
-  goto yyerrlab1;
-yyerrlab1:   /* here on error raised explicitly by an action */
-
-  if (yyerrstatus == 3)
-    {
-      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
-
-      /* return failure if at end of input */
-      if (yychar == YYEOF)
-       YYABORT;
-
-#if YYDEBUG != 0
-      if (yydebug)
-       fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
-      yychar = YYEMPTY;
-    }
-
-  /* Else will try to reuse lookahead token
-     after shifting the error token.  */
-
-  yyerrstatus = 3;             /* Each real token shifted decrements this */
-
-  goto yyerrhandle;
-
-yyerrdefault:  /* current state does not do anything special for the error token. */
-
-#if 0
-  /* This is wrong; only states that explicitly want error tokens
-     should shift them.  */
-  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
-  if (yyn) goto yydefault;
-#endif
-
-yyerrpop:   /* pop the current state because it cannot handle the error token */
-
-  if (yyssp == yyss) YYABORT;
-  yyvsp--;
-  yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
-  yylsp--;
-#endif
-
-#if YYDEBUG != 0
-  if (yydebug)
-    {
-      short *ssp1 = yyss - 1;
-      fprintf (stderr, "Error: state stack now");
-      while (ssp1 != yyssp)
-       fprintf (stderr, " %d", *++ssp1);
-      fprintf (stderr, "\n");
-    }
-#endif
-
-yyerrhandle:
-
-  yyn = yypact[yystate];
-  if (yyn == YYFLAG)
-    goto yyerrdefault;
-
-  yyn += YYTERROR;
-  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
-    goto yyerrdefault;
-
-  yyn = yytable[yyn];
-  if (yyn < 0)
-    {
-      if (yyn == YYFLAG)
-       goto yyerrpop;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-  else if (yyn == 0)
-    goto yyerrpop;
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-#if YYDEBUG != 0
-  if (yydebug)
-    fprintf(stderr, "Shifting error token, ");
-#endif
-
-  *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
-  *++yylsp = yylloc;
-#endif
-
-  yystate = yyn;
-  goto yynewstate;
-}
-#line 2938 "objc-parse.y"
-
diff --git a/gcc/objc/objc-parse.y b/gcc/objc/objc-parse.y
deleted file mode 100644 (file)
index e063599..0000000
+++ /dev/null
@@ -1,2938 +0,0 @@
-/*WARNING: This file is automatically generated!*/
-/* YACC parser for C syntax and for Objective C.  -*-c-*-
-   Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc.
-
-This file is part of GNU CC.
-
-GNU CC 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.
-
-GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-/* This file defines the grammar of C and that of Objective C.
-   ifobjc ... end ifobjc  conditionals contain code for Objective C only.
-   ifc ... end ifc  conditionals contain code for C only.
-   Sed commands in Makefile.in are used to convert this file into
-   c-parse.y and into objc-parse.y.  */
-
-/* To whomever it may concern: I have heard that such a thing was once
-   written by AT&T, but I have never seen it.  */
-
-%expect 66
-
-%{
-#include <stdio.h>
-#include <errno.h>
-#include <setjmp.h>
-
-#include "config.h"
-#include "tree.h"
-#include "input.h"
-#include "c-lex.h"
-#include "c-tree.h"
-#include "flags.h"
-
-#ifdef MULTIBYTE_CHARS
-#include <stdlib.h>
-#include <locale.h>
-#endif
-
-#include "objc-act.h"
-
-/* Since parsers are distinct for each language, put the language string
-   definition here.  */
-char *language_string = "GNU Obj-C";
-
-#ifndef errno
-extern int errno;
-#endif
-
-void yyerror ();
-
-/* Like YYERROR but do call yyerror.  */
-#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
-
-/* Cause the `yydebug' variable to be defined.  */
-#define YYDEBUG 1
-%}
-
-%start program
-
-%union {long itype; tree ttype; enum tree_code code;
-       char *filename; int lineno; int ends_in_label; }
-
-/* All identifiers that are not reserved words
-   and are not declared typedefs in the current block */
-%token IDENTIFIER
-
-/* All identifiers that are declared typedefs in the current block.
-   In some contexts, they are treated just like IDENTIFIER,
-   but they can also serve as typespecs in declarations.  */
-%token TYPENAME
-
-/* Reserved words that specify storage class.
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token SCSPEC
-
-/* Reserved words that specify type.
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token TYPESPEC
-
-/* Reserved words that qualify type: "const" or "volatile".
-   yylval contains an IDENTIFIER_NODE which indicates which one.  */
-%token TYPE_QUAL
-
-/* Character or numeric constants.
-   yylval is the node for the constant.  */
-%token CONSTANT
-
-/* String constants in raw form.
-   yylval is a STRING_CST node.  */
-%token STRING
-
-/* "...", used for functions with variable arglists.  */
-%token ELLIPSIS
-
-/* the reserved words */
-/* SCO include files test "ASM", so use something else. */
-%token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT
-%token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF
-%token ATTRIBUTE EXTENSION LABEL
-%token REALPART IMAGPART
-
-/* Add precedence rules to solve dangling else s/r conflict */
-%nonassoc IF
-%nonassoc ELSE
-
-/* Define the operator tokens and their precedences.
-   The value is an integer because, if used, it is the tree code
-   to use in the expression made from the operator.  */
-
-%right <code> ASSIGN '='
-%right <code> '?' ':'
-%left <code> OROR
-%left <code> ANDAND
-%left <code> '|'
-%left <code> '^'
-%left <code> '&'
-%left <code> EQCOMPARE
-%left <code> ARITHCOMPARE
-%left <code> LSHIFT RSHIFT
-%left <code> '+' '-'
-%left <code> '*' '/' '%'
-%right <code> UNARY PLUSPLUS MINUSMINUS
-%left HYPERUNARY
-%left <code> POINTSAT '.' '(' '['
-
-/* The Objective-C keywords.  These are included in C and in
-   Objective C, so that the token codes are the same in both.  */
-%token INTERFACE IMPLEMENTATION END SELECTOR DEFS ENCODE
-%token CLASSNAME PUBLIC PRIVATE PROTECTED PROTOCOL OBJECTNAME CLASS ALIAS
-
-/* Objective-C string constants in raw form.
-   yylval is an OBJC_STRING_CST node.  */
-%token OBJC_STRING
-
-
-%type <code> unop
-
-%type <ttype> identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist exprlist
-%type <ttype> expr_no_commas cast_expr unary_expr primary string STRING
-%type <ttype> typed_declspecs reserved_declspecs
-%type <ttype> typed_typespecs reserved_typespecquals
-%type <ttype> declmods typespec typespecqual_reserved
-%type <ttype> typed_declspecs_no_prefix_attr reserved_declspecs_no_prefix_attr
-%type <ttype> declmods_no_prefix_attr
-%type <ttype> SCSPEC TYPESPEC TYPE_QUAL nonempty_type_quals maybe_type_qual
-%type <ttype> initdecls notype_initdecls initdcl notype_initdcl
-%type <ttype> init maybeasm
-%type <ttype> asm_operands nonnull_asm_operands asm_operand asm_clobbers
-%type <ttype> maybe_attribute attributes attribute attribute_list attrib
-%type <ttype> any_word
-
-%type <ttype> compstmt
-
-%type <ttype> declarator
-%type <ttype> notype_declarator after_type_declarator
-%type <ttype> parm_declarator
-
-%type <ttype> structsp component_decl_list component_decl_list2
-%type <ttype> component_decl components component_declarator
-%type <ttype> enumlist enumerator
-%type <ttype> typename absdcl absdcl1 type_quals
-%type <ttype> xexpr parms parm identifiers
-
-%type <ttype> parmlist parmlist_1 parmlist_2
-%type <ttype> parmlist_or_identifiers parmlist_or_identifiers_1
-%type <ttype> identifiers_or_typenames
-
-%type <itype> setspecs
-
-%type <ends_in_label> lineno_stmt_or_label lineno_stmt_or_labels stmt_or_label
-
-%type <filename> save_filename
-%type <lineno> save_lineno
-\f
-/* the Objective-C nonterminals */
-
-%type <ttype> ivar_decl_list ivar_decls ivar_decl ivars ivar_declarator
-%type <ttype> methoddecl unaryselector keywordselector selector
-%type <ttype> keyworddecl receiver objcmessageexpr messageargs
-%type <ttype> keywordexpr keywordarglist keywordarg
-%type <ttype> myparms myparm optparmlist reservedwords objcselectorexpr
-%type <ttype> selectorarg keywordnamelist keywordname objcencodeexpr
-%type <ttype> objc_string non_empty_protocolrefs protocolrefs identifier_list objcprotocolexpr
-
-%type <ttype> CLASSNAME OBJC_STRING OBJECTNAME
-\f
-%{
-/* Number of statements (loosely speaking) seen so far.  */
-static int stmt_count;
-
-/* Input file and line number of the end of the body of last simple_if;
-   used by the stmt-rule immediately after simple_if returns.  */
-static char *if_stmt_file;
-static int if_stmt_line;
-
-/* List of types and structure classes of the current declaration.  */
-static tree current_declspecs = NULL_TREE;
-static tree prefix_attributes = NULL_TREE;
-
-/* Stack of saved values of current_declspecs and prefix_attributes.  */
-static tree declspec_stack;
-
-/* 1 if we explained undeclared var errors.  */
-static int undeclared_variable_notice;
-
-/* Objective-C specific information */
-
-tree objc_interface_context;
-tree objc_implementation_context;
-tree objc_method_context;
-tree objc_ivar_chain;
-tree objc_ivar_context;
-enum tree_code objc_inherit_code;
-int objc_receiver_context;
-int objc_public_flag;
-
-
-/* Tell yyparse how to print a token's value, if yydebug is set.  */
-
-#define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL)
-extern void yyprint ();
-%}
-\f
-%%
-program: /* empty */
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids an empty source file");
-                 finish_file ();
-               }
-       | extdefs
-               {
-                 /* In case there were missing closebraces,
-                    get us back to the global binding level.  */
-                 while (! global_bindings_p ())
-                   poplevel (0, 0, 0);
-                 finish_file ();
-               }
-       ;
-
-/* the reason for the strange actions in this rule
- is so that notype_initdecls when reached via datadef
- can find a valid list of type and sc specs in $0. */
-
-extdefs:
-       {$<ttype>$ = NULL_TREE; } extdef
-       | extdefs {$<ttype>$ = NULL_TREE; } extdef
-       ;
-
-extdef:
-       fndef
-       | datadef
-       | objcdef
-       | ASM_KEYWORD '(' expr ')' ';'
-               { STRIP_NOPS ($3);
-                 if ((TREE_CODE ($3) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
-                     || TREE_CODE ($3) == STRING_CST)
-                   assemble_asm ($3);
-                 else
-                   error ("argument of `asm' is not a constant string"); }
-       | extension extdef
-               { pedantic = $<itype>1; }
-       ;
-
-datadef:
-         setspecs notype_initdecls ';'
-               { if (pedantic)
-                   error ("ANSI C forbids data definition with no type or storage class");
-                 else if (!flag_traditional)
-                   warning ("data definition has no type or storage class"); 
-
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-        | declmods setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-        | declmods ';'
-         { pedwarn ("empty declaration"); }
-       | typed_declspecs ';'
-         { shadow_tag ($1); }
-       | error ';'
-       | error '}'
-       | ';'
-               { if (pedantic)
-                   pedwarn ("ANSI C does not allow extra `;' outside of a function"); }
-       ;
-\f
-fndef:
-         typed_declspecs setspecs declarator
-               { if (! start_function (current_declspecs, $3,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator
-               { if (! start_function (current_declspecs, $3,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | setspecs notype_declarator
-               { if (! start_function (NULL_TREE, $2,
-                                       prefix_attributes, NULL_TREE, 0))
-                   YYERROR1;
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-         compstmt_or_error
-               { finish_function (0); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-       | setspecs notype_declarator error
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($1); }
-       ;
-
-identifier:
-       IDENTIFIER
-       | TYPENAME
-       | OBJECTNAME
-        | CLASSNAME
-       ;
-
-unop:     '&'
-               { $$ = ADDR_EXPR; }
-       | '-'
-               { $$ = NEGATE_EXPR; }
-       | '+'
-               { $$ = CONVERT_EXPR; }
-       | PLUSPLUS
-               { $$ = PREINCREMENT_EXPR; }
-       | MINUSMINUS
-               { $$ = PREDECREMENT_EXPR; }
-       | '~'
-               { $$ = BIT_NOT_EXPR; }
-       | '!'
-               { $$ = TRUTH_NOT_EXPR; }
-       ;
-
-expr:  nonnull_exprlist
-               { $$ = build_compound_expr ($1); }
-       ;
-
-exprlist:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | nonnull_exprlist
-       ;
-
-nonnull_exprlist:
-       expr_no_commas
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | nonnull_exprlist ',' expr_no_commas
-               { chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-unary_expr:
-       primary
-       | '*' cast_expr   %prec UNARY
-               { $$ = build_indirect_ref ($2, "unary *"); }
-       /* __extension__ turns off -pedantic for following primary.  */
-       | extension cast_expr     %prec UNARY
-               { $$ = $2;
-                 pedantic = $<itype>1; }
-       | unop cast_expr  %prec UNARY
-               { $$ = build_unary_op ($1, $2, 0);
-                 overflow_warning ($$); }
-       /* Refer to the address of a label as a pointer.  */
-       | ANDAND identifier
-               { tree label = lookup_label ($2);
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids `&&'");
-                 if (label == 0)
-                   $$ = null_pointer_node;
-                 else
-                   {
-                     TREE_USED (label) = 1;
-                     $$ = build1 (ADDR_EXPR, ptr_type_node, label);
-                     TREE_CONSTANT ($$) = 1;
-                   }
-               }
-/* This seems to be impossible on some machines, so let's turn it off.
-   You can use __builtin_next_arg to find the anonymous stack args.
-       | '&' ELLIPSIS
-               { tree types = TYPE_ARG_TYPES (TREE_TYPE (current_function_decl));
-                 $$ = error_mark_node;
-                 if (TREE_VALUE (tree_last (types)) == void_type_node)
-                   error ("`&...' used in function with fixed number of arguments");
-                 else
-                   {
-                     if (pedantic)
-                       pedwarn ("ANSI C forbids `&...'");
-                     $$ = tree_last (DECL_ARGUMENTS (current_function_decl));
-                     $$ = build_unary_op (ADDR_EXPR, $$, 0);
-                   } }
-*/
-       | sizeof unary_expr  %prec UNARY
-               { skip_evaluation--;
-                 if (TREE_CODE ($2) == COMPONENT_REF
-                     && DECL_BIT_FIELD (TREE_OPERAND ($2, 1)))
-                   error ("`sizeof' applied to a bit-field");
-                 $$ = c_sizeof (TREE_TYPE ($2)); }
-       | sizeof '(' typename ')'  %prec HYPERUNARY
-               { skip_evaluation--;
-                 $$ = c_sizeof (groktypename ($3)); }
-       | alignof unary_expr  %prec UNARY
-               { skip_evaluation--;
-                 $$ = c_alignof_expr ($2); }
-       | alignof '(' typename ')'  %prec HYPERUNARY
-               { skip_evaluation--;
-                 $$ = c_alignof (groktypename ($3)); }
-       | REALPART cast_expr %prec UNARY
-               { $$ = build_unary_op (REALPART_EXPR, $2, 0); }
-       | IMAGPART cast_expr %prec UNARY
-               { $$ = build_unary_op (IMAGPART_EXPR, $2, 0); }
-       ;
-
-sizeof:
-       SIZEOF { skip_evaluation++; }
-       ;
-
-alignof:
-       ALIGNOF { skip_evaluation++; }
-       ;
-
-cast_expr:
-       unary_expr
-       | '(' typename ')' cast_expr  %prec UNARY
-               { tree type = groktypename ($2);
-                 $$ = build_c_cast (type, $4); }
-       | '(' typename ')' '{' 
-               { start_init (NULL_TREE, NULL, 0);
-                 $2 = groktypename ($2);
-                 really_start_incremental_init ($2); }
-         initlist_maybe_comma '}'  %prec UNARY
-               { char *name;
-                 tree result = pop_init_level (0);
-                 tree type = $2;
-                 finish_init ();
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids constructor expressions");
-                 if (TYPE_NAME (type) != 0)
-                   {
-                     if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
-                       name = IDENTIFIER_POINTER (TYPE_NAME (type));
-                     else
-                       name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
-                   }
-                 else
-                   name = "";
-                 $$ = result;
-                 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_SIZE (type) == 0)
-                   {
-                     int failure = complete_array_type (type, $$, 1);
-                     if (failure)
-                       abort ();
-                   }
-               }
-       ;
-
-expr_no_commas:
-         cast_expr
-       | expr_no_commas '+' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '-' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '*' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '/' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '%' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas LSHIFT expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas RSHIFT expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas ARITHCOMPARE expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas EQCOMPARE expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '&' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '|' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas '^' expr_no_commas
-               { $$ = parser_build_binary_op ($2, $1, $3); }
-       | expr_no_commas ANDAND
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_false_node; }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_false_node;
-                 $$ = parser_build_binary_op (TRUTH_ANDIF_EXPR, $1, $4); }
-       | expr_no_commas OROR
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_true_node; }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = parser_build_binary_op (TRUTH_ORIF_EXPR, $1, $4); }
-       | expr_no_commas '?'
-               { $1 = truthvalue_conversion (default_conversion ($1));
-                 skip_evaluation += $1 == boolean_false_node; }
-          expr ':'
-               { skip_evaluation += (($1 == boolean_true_node)
-                                     - ($1 == boolean_false_node)); }
-         expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = build_conditional_expr ($1, $4, $7); }
-       | expr_no_commas '?'
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
-                 /* Make sure first operand is calculated only once.  */
-                 $<ttype>2 = save_expr ($1);
-                 $1 = truthvalue_conversion (default_conversion ($<ttype>2));
-                 skip_evaluation += $1 == boolean_true_node; }
-         ':' expr_no_commas
-               { skip_evaluation -= $1 == boolean_true_node;
-                 $$ = build_conditional_expr ($1, $<ttype>2, $5); }
-       | expr_no_commas '=' expr_no_commas
-               { $$ = build_modify_expr ($1, NOP_EXPR, $3);
-                 C_SET_EXP_ORIGINAL_CODE ($$, MODIFY_EXPR); }
-       | expr_no_commas ASSIGN expr_no_commas
-               { $$ = build_modify_expr ($1, $2, $3);
-                 /* This inhibits warnings in truthvalue_conversion.  */
-                 C_SET_EXP_ORIGINAL_CODE ($$, ERROR_MARK); }
-       ;
-
-primary:
-       IDENTIFIER
-               {
-                 $$ = lastiddecl;
-                 if (!$$ || $$ == error_mark_node)
-                   {
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         tree decl;
-
-                         if (objc_receiver_context
-                             && ! (objc_receiver_context
-                                   && strcmp (IDENTIFIER_POINTER ($1), "super")))
-                           /* we have a message to super */
-                           $$ = get_super_receiver ();
-                         else if (objc_method_context
-                                  && (decl = is_ivar (objc_ivar_chain, $1)))
-                           {
-                             if (is_private (decl))
-                               $$ = error_mark_node;
-                             else
-                               $$ = build_ivar_reference ($1);
-                           }
-                         else
-                           {
-                             /* Ordinary implicit function declaration.  */
-                             $$ = implicitly_declare ($1);
-                             assemble_external ($$);
-                             TREE_USED ($$) = 1;
-                           }
-                       }
-                     else if (current_function_decl == 0)
-                       {
-                         error ("`%s' undeclared here (not in a function)",
-                                IDENTIFIER_POINTER ($1));
-                         $$ = error_mark_node;
-                       }
-                     else
-                       {
-                         tree decl;
-
-                         if (objc_receiver_context
-                             && ! strcmp (IDENTIFIER_POINTER ($1), "super"))
-                           /* we have a message to super */
-                           $$ = get_super_receiver ();
-                         else if (objc_method_context
-                                  && (decl = is_ivar (objc_ivar_chain, $1)))
-                           {
-                             if (is_private (decl))
-                               $$ = error_mark_node;
-                             else
-                               $$ = build_ivar_reference ($1);
-                           }
-                         else
-                           {
-                             if (IDENTIFIER_GLOBAL_VALUE ($1) != error_mark_node
-                                 || IDENTIFIER_ERROR_LOCUS ($1) != current_function_decl)
-                               {
-                                 error ("`%s' undeclared (first use this function)",
-                                        IDENTIFIER_POINTER ($1));
-
-                                 if (! undeclared_variable_notice)
-                                   {
-                                     error ("(Each undeclared identifier is reported only once");
-                                     error ("for each function it appears in.)");
-                                     undeclared_variable_notice = 1;
-                                   }
-                               }
-                             $$ = error_mark_node;
-                             /* Prevent repeated error messages.  */
-                             IDENTIFIER_GLOBAL_VALUE ($1) = error_mark_node;
-                             IDENTIFIER_ERROR_LOCUS ($1) = current_function_decl;
-                           }
-                       }
-                   }
-                 else if (TREE_TYPE ($$) == error_mark_node)
-                   $$ = error_mark_node;
-                 else if (C_DECL_ANTICIPATED ($$))
-                   {
-                     /* The first time we see a build-in function used,
-                        if it has not been declared.  */
-                     C_DECL_ANTICIPATED ($$) = 0;
-                     if (yychar == YYEMPTY)
-                       yychar = YYLEX;
-                     if (yychar == '(')
-                       {
-                         /* Omit the implicit declaration we
-                            would ordinarily do, so we don't lose
-                            the actual built in type.
-                            But print a diagnostic for the mismatch.  */
-                         if (objc_method_context
-                             && is_ivar (objc_ivar_chain, $1))
-                           error ("Instance variable `%s' implicitly declared as function",
-                                  IDENTIFIER_POINTER (DECL_NAME ($$)));
-                         else
-                           if (TREE_CODE ($$) != FUNCTION_DECL)
-                             error ("`%s' implicitly declared as function",
-                                    IDENTIFIER_POINTER (DECL_NAME ($$)));
-                         else if ((TYPE_MODE (TREE_TYPE (TREE_TYPE ($$)))
-                                   != TYPE_MODE (integer_type_node))
-                                  && (TREE_TYPE (TREE_TYPE ($$))
-                                      != void_type_node))
-                           pedwarn ("type mismatch in implicit declaration for built-in function `%s'",
-                                    IDENTIFIER_POINTER (DECL_NAME ($$)));
-                         /* If it really returns void, change that to int.  */
-                         if (TREE_TYPE (TREE_TYPE ($$)) == void_type_node)
-                           TREE_TYPE ($$)
-                             = build_function_type (integer_type_node,
-                                                    TYPE_ARG_TYPES (TREE_TYPE ($$)));
-                       }
-                     else
-                       pedwarn ("built-in function `%s' used without declaration",
-                                IDENTIFIER_POINTER (DECL_NAME ($$)));
-
-                     /* Do what we would ordinarily do when a fn is used.  */
-                     assemble_external ($$);
-                     TREE_USED ($$) = 1;
-                   }
-                 else
-                   {
-                     assemble_external ($$);
-                     TREE_USED ($$) = 1;
-                     /* we have a definition - still check if iVariable */
-
-                     if (!objc_receiver_context
-                         || (objc_receiver_context
-                             && strcmp (IDENTIFIER_POINTER ($1), "super")))
-                        {
-                         tree decl;
-
-                         if (objc_method_context
-                             && (decl = is_ivar (objc_ivar_chain, $1)))
-                            {
-                              if (IDENTIFIER_LOCAL_VALUE ($1))
-                                warning ("local declaration of `%s' hides instance variable",
-                                        IDENTIFIER_POINTER ($1));
-                              else
-                               {
-                                 if (is_private (decl))
-                                   $$ = error_mark_node;
-                                 else
-                                   $$ = build_ivar_reference ($1);
-                               }
-                            }
-                       }
-                      else /* we have a message to super */
-                       $$ = get_super_receiver ();
-                   }
-
-                 if (TREE_CODE ($$) == CONST_DECL)
-                   {
-                     $$ = DECL_INITIAL ($$);
-                     /* This is to prevent an enum whose value is 0
-                        from being considered a null pointer constant.  */
-                     $$ = build1 (NOP_EXPR, TREE_TYPE ($$), $$);
-                     TREE_CONSTANT ($$) = 1;
-                   }
-               }
-       | CONSTANT
-       | string
-               { $$ = combine_strings ($1); }
-       | '(' expr ')'
-               { char class = TREE_CODE_CLASS (TREE_CODE ($2));
-                 if (class == 'e' || class == '1'
-                     || class == '2' || class == '<')
-                   C_SET_EXP_ORIGINAL_CODE ($2, ERROR_MARK);
-                 $$ = $2; }
-       | '(' error ')'
-               { $$ = error_mark_node; }
-       | '('
-               { if (current_function_decl == 0)
-                   {
-                     error ("braced-group within expression allowed only inside a function");
-                     YYERROR;
-                   }
-                 /* We must force a BLOCK for this level
-                    so that, if it is not expanded later,
-                    there is a way to turn off the entire subtree of blocks
-                    that are contained in it.  */
-                 keep_next_level ();
-                 push_iterator_stack ();
-                 push_label_level ();
-                 $<ttype>$ = expand_start_stmt_expr (); }
-         compstmt ')'
-               { tree rtl_exp;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids braced-groups within expressions");
-                 pop_iterator_stack ();
-                 pop_label_level ();
-                 rtl_exp = expand_end_stmt_expr ($<ttype>2);
-                 /* The statements have side effects, so the group does.  */
-                 TREE_SIDE_EFFECTS (rtl_exp) = 1;
-
-                 if (TREE_CODE ($3) == BLOCK)
-                   {
-                     /* Make a BIND_EXPR for the BLOCK already made.  */
-                     $$ = build (BIND_EXPR, TREE_TYPE (rtl_exp),
-                                 NULL_TREE, rtl_exp, $3);
-                     /* Remove the block from the tree at this point.
-                        It gets put back at the proper place
-                        when the BIND_EXPR is expanded.  */
-                     delete_block ($3);
-                   }
-                 else
-                   $$ = $3;
-               }
-       | primary '(' exprlist ')'   %prec '.'
-               { $$ = build_function_call ($1, $3); }
-       | primary '[' expr ']'   %prec '.'
-               { $$ = build_array_ref ($1, $3); }
-       | primary '.' identifier
-               {
-                  if (doing_objc_thang)
-                    {
-                     if (is_public ($1, $3))
-                       $$ = build_component_ref ($1, $3);
-                     else
-                       $$ = error_mark_node;
-                   }
-                  else
-                   $$ = build_component_ref ($1, $3);
-               }
-       | primary POINTSAT identifier
-               {
-                  tree expr = build_indirect_ref ($1, "->");
-
-                  if (doing_objc_thang)
-                    {
-                     if (is_public (expr, $3))
-                       $$ = build_component_ref (expr, $3);
-                     else
-                       $$ = error_mark_node;
-                   }
-                  else
-                    $$ = build_component_ref (expr, $3);
-               }
-       | primary PLUSPLUS
-               { $$ = build_unary_op (POSTINCREMENT_EXPR, $1, 0); }
-       | primary MINUSMINUS
-               { $$ = build_unary_op (POSTDECREMENT_EXPR, $1, 0); }
-       | objcmessageexpr
-               { $$ = build_message_expr ($1); }
-       | objcselectorexpr
-               { $$ = build_selector_expr ($1); }
-       | objcprotocolexpr
-               { $$ = build_protocol_expr ($1); }
-       | objcencodeexpr
-               { $$ = build_encode_expr ($1); }
-       | objc_string
-               { $$ = build_objc_string_object ($1); }
-       ;
-
-/* Produces a STRING_CST with perhaps more STRING_CSTs chained onto it.  */
-string:
-         STRING
-       | string STRING
-               { $$ = chainon ($1, $2); }
-       ;
-
-/* Produces an OBJC_STRING_CST with perhaps more OBJC_STRING_CSTs chained
-   onto it.  */
-objc_string:
-         OBJC_STRING
-       | objc_string OBJC_STRING
-               { $$ = chainon ($1, $2); }
-       ;
-
-old_style_parm_decls:
-       /* empty */
-       | datadecls
-       | datadecls ELLIPSIS
-               /* ... is used here to indicate a varargs function.  */
-               { c_mark_varargs ();
-                 if (pedantic)
-                   pedwarn ("ANSI C does not permit use of `varargs.h'"); }
-       ;
-
-/* The following are analogous to lineno_decl, decls and decl
-   except that they do not allow nested functions.
-   They are used for old-style parm decls.  */
-lineno_datadecl:
-         save_filename save_lineno datadecl
-               { }
-       ;
-
-datadecls:
-       lineno_datadecl
-       | errstmt
-       | datadecls lineno_datadecl
-       | lineno_datadecl errstmt
-       ;
-
-/* We don't allow prefix attributes here because they cause reduce/reduce
-   conflicts: we can't know whether we're parsing a function decl with
-   attribute suffix, or function defn with attribute prefix on first old
-   style parm.  */
-datadecl:
-       typed_declspecs_no_prefix_attr setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods_no_prefix_attr setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);      
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs_no_prefix_attr ';'
-               { shadow_tag_warned ($1, 1);
-                 pedwarn ("empty declaration"); }
-       | declmods_no_prefix_attr ';'
-               { pedwarn ("empty declaration"); }
-       ;
-
-/* This combination which saves a lineno before a decl
-   is the normal thing to use, rather than decl itself.
-   This is to avoid shift/reduce conflicts in contexts
-   where statement labels are allowed.  */
-lineno_decl:
-         save_filename save_lineno decl
-               { }
-       ;
-
-decls:
-       lineno_decl
-       | errstmt
-       | decls lineno_decl
-       | lineno_decl errstmt
-       ;
-
-/* records the type and storage class specs to use for processing
-   the declarators that follow.
-   Maintains a stack of outer-level values of current_declspecs,
-   for the sake of parm declarations nested in function declarators.  */
-setspecs: /* empty */
-               { $$ = suspend_momentary ();
-                 pending_xref_error ();
-                 declspec_stack = tree_cons (prefix_attributes,
-                                             current_declspecs,
-                                             declspec_stack);
-                 split_specs_attrs ($<ttype>0,
-                                    &current_declspecs, &prefix_attributes); }
-       ;
-
-/* ??? Yuck.  See after_type_declarator.  */
-setattrs: /* empty */
-               { prefix_attributes = chainon (prefix_attributes, $<ttype>0); }
-       ;
-
-decl:
-       typed_declspecs setspecs initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_initdecls ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs nested_function
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_nested_function
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs ';'
-               { shadow_tag ($1); }
-       | declmods ';'
-               { pedwarn ("empty declaration"); }
-       | extension decl
-               { pedantic = $<itype>1; }
-       ;
-
-/* Declspecs which contain at least one type specifier or typedef name.
-   (Just `const' or `volatile' is not enough.)
-   A typedef'd name following these is taken as a name to be declared.
-   Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
-
-typed_declspecs:
-         typespec reserved_declspecs
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | declmods typespec reserved_declspecs
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_declspecs:  /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_declspecs typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs SCSPEC
-               { if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs attributes
-               { $$ = tree_cons ($2, NULL_TREE, $1); }
-       ;
-
-typed_declspecs_no_prefix_attr:
-         typespec reserved_declspecs_no_prefix_attr
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | declmods_no_prefix_attr typespec reserved_declspecs_no_prefix_attr
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_declspecs_no_prefix_attr:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_declspecs_no_prefix_attr typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       | reserved_declspecs_no_prefix_attr SCSPEC
-               { if (extra_warnings)
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-/* List of just storage classes, type modifiers, and prefix attributes.
-   A declaration can start with just this, but then it cannot be used
-   to redeclare a typedef-name.
-   Declspecs have a non-NULL TREE_VALUE, attributes do not.  */
-
-declmods:
-         declmods_no_prefix_attr
-               { $$ = $1; }
-       | attributes
-               { $$ = tree_cons ($1, NULL_TREE, NULL_TREE); }
-       | declmods declmods_no_prefix_attr
-               { $$ = chainon ($2, $1); }
-       | declmods attributes
-               { $$ = tree_cons ($2, NULL_TREE, $1); }
-       ;
-
-declmods_no_prefix_attr:
-         TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE);
-                 TREE_STATIC ($$) = 1; }
-       | SCSPEC
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
-       | declmods_no_prefix_attr TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1);
-                 TREE_STATIC ($$) = 1; }
-       | declmods_no_prefix_attr SCSPEC
-               { if (extra_warnings && TREE_STATIC ($1))
-                   warning ("`%s' is not at beginning of declaration",
-                            IDENTIFIER_POINTER ($2));
-                 $$ = tree_cons (NULL_TREE, $2, $1);
-                 TREE_STATIC ($$) = TREE_STATIC ($1); }
-       ;
-
-
-/* Used instead of declspecs where storage classes are not allowed
-   (that is, for typenames and structure components).
-   Don't accept a typedef-name if anything but a modifier precedes it.  */
-
-typed_typespecs:
-         typespec reserved_typespecquals
-               { $$ = tree_cons (NULL_TREE, $1, $2); }
-       | nonempty_type_quals typespec reserved_typespecquals
-               { $$ = chainon ($3, tree_cons (NULL_TREE, $2, $1)); }
-       ;
-
-reserved_typespecquals:  /* empty */
-               { $$ = NULL_TREE; }
-       | reserved_typespecquals typespecqual_reserved
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-/* A typespec (but not a type qualifier).
-   Once we have seen one of these in a declaration,
-   if a typedef name appears then it is being redeclared.  */
-
-typespec: TYPESPEC
-       | structsp
-       | TYPENAME
-               { /* For a typedef name, record the meaning, not the name.
-                    In case of `foo foo, bar;'.  */
-                 $$ = lookup_name ($1); }
-       | CLASSNAME protocolrefs
-               { $$ = get_static_reference ($1, $2); }
-       | OBJECTNAME protocolrefs
-               { $$ = get_object_reference ($2); }
-
-/* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>"
-   - nisse@lysator.liu.se */
-        | non_empty_protocolrefs
-                { $$ = get_object_reference ($1); }
-       | TYPEOF '(' expr ')'
-               { $$ = TREE_TYPE ($3); }
-       | TYPEOF '(' typename ')'
-               { $$ = groktypename ($3); }
-       ;
-
-/* A typespec that is a reserved word, or a type qualifier.  */
-
-typespecqual_reserved: TYPESPEC
-       | TYPE_QUAL
-       | structsp
-       ;
-
-initdecls:
-       initdcl
-       | initdecls ',' initdcl
-       ;
-
-notype_initdecls:
-       notype_initdcl
-       | notype_initdecls ',' initdcl
-       ;
-
-maybeasm:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | ASM_KEYWORD '(' string ')'
-               { if (TREE_CHAIN ($3)) $3 = combine_strings ($3);
-                 $$ = $3;
-               }
-       ;
-
-initdcl:
-         declarator maybeasm maybe_attribute '='
-               { $<ttype>$ = start_decl ($1, current_declspecs, 1,
-                                         $3, prefix_attributes);
-                 start_init ($<ttype>$, $2, global_bindings_p ()); }
-         init
-/* Note how the declaration of the variable is in effect while its init is parsed! */
-               { finish_init ();
-                 finish_decl ($<ttype>5, $6, $2); }
-       | declarator maybeasm maybe_attribute
-               { tree d = start_decl ($1, current_declspecs, 0,
-                                      $3, prefix_attributes);
-                 finish_decl (d, NULL_TREE, $2); 
-                }
-       ;
-
-notype_initdcl:
-         notype_declarator maybeasm maybe_attribute '='
-               { $<ttype>$ = start_decl ($1, current_declspecs, 1,
-                                         $3, prefix_attributes);
-                 start_init ($<ttype>$, $2, global_bindings_p ()); }
-         init
-/* Note how the declaration of the variable is in effect while its init is parsed! */
-               { finish_init ();
-                 decl_attributes ($<ttype>5, $3, prefix_attributes);
-                 finish_decl ($<ttype>5, $6, $2); }
-       | notype_declarator maybeasm maybe_attribute
-               { tree d = start_decl ($1, current_declspecs, 0,
-                                      $3, prefix_attributes);
-                 finish_decl (d, NULL_TREE, $2); }
-       ;
-/* the * rules are dummies to accept the Apollo extended syntax
-   so that the header files compile. */
-maybe_attribute:
-      /* empty */
-               { $$ = NULL_TREE; }
-       | attributes
-               { $$ = $1; }
-       ;
-attributes:
-      attribute
-               { $$ = $1; }
-       | attributes attribute
-               { $$ = chainon ($1, $2); }
-       ;
-
-attribute:
-      ATTRIBUTE '(' '(' attribute_list ')' ')'
-               { $$ = $4; }
-       ;
-
-attribute_list:
-      attrib
-               { $$ = $1; }
-       | attribute_list ',' attrib
-               { $$ = chainon ($1, $3); }
-       ;
-attrib:
-    /* empty */
-               { $$ = NULL_TREE; }
-       | any_word
-               { $$ = build_tree_list ($1, NULL_TREE); }
-       | any_word '(' IDENTIFIER ')'
-               { $$ = build_tree_list ($1, build_tree_list (NULL_TREE, $3)); }
-       | any_word '(' IDENTIFIER ',' nonnull_exprlist ')'
-               { $$ = build_tree_list ($1, tree_cons (NULL_TREE, $3, $5)); }
-       | any_word '(' exprlist ')'
-               { $$ = build_tree_list ($1, $3); }
-       ;
-
-/* This still leaves out most reserved keywords,
-   shouldn't we include them?  */
-
-any_word:
-         identifier
-       | SCSPEC
-       | TYPESPEC
-       | TYPE_QUAL
-       ;
-\f
-/* Initializers.  `init' is the entry point.  */
-
-init:
-       expr_no_commas
-       | '{'
-               { really_start_incremental_init (NULL_TREE);
-                 /* Note that the call to clear_momentary
-                    is in process_init_element.  */
-                 push_momentary (); }
-         initlist_maybe_comma '}'
-               { $$ = pop_init_level (0);
-                 if ($$ == error_mark_node
-                     && ! (yychar == STRING || yychar == CONSTANT))
-                   pop_momentary ();
-                 else
-                   pop_momentary_nofree (); }
-
-       | error
-               { $$ = error_mark_node; }
-       ;
-
-/* `initlist_maybe_comma' is the guts of an initializer in braces.  */
-initlist_maybe_comma:
-         /* empty */
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids empty initializer braces"); }
-       | initlist1 maybecomma
-       ;
-
-initlist1:
-         initelt
-       | initlist1 ',' initelt
-       ;
-
-/* `initelt' is a single element of an initializer.
-   It may use braces.  */
-initelt:
-       expr_no_commas
-               { process_init_element ($1); }
-       | '{' 
-               { push_init_level (0); }
-         initlist_maybe_comma '}'
-               { process_init_element (pop_init_level (0)); }
-       | error
-       /* These are for labeled elements.  The syntax for an array element
-          initializer conflicts with the syntax for an Objective-C message,
-          so don't include these productions in the Objective-C grammar.  */
-       | identifier ':'
-               { set_init_label ($1); }
-         initelt
-       | '.' identifier '='
-               { set_init_label ($2); }
-         initelt
-       ;
-\f
-nested_function:
-         declarator
-               { push_c_function_context ();
-                 if (! start_function (current_declspecs, $1,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); }
-          old_style_parm_decls
-               { store_parm_decls (); }
-/* This used to use compstmt_or_error.
-   That caused a bug with input `f(g) int g {}',
-   where the use of YYERROR1 above caused an error
-   which then was handled by compstmt_or_error.
-   There followed a repeated execution of that same rule,
-   which called YYERROR1 again, and so on.  */
-         compstmt
-               { finish_function (1);
-                 pop_c_function_context (); }
-       ;
-
-notype_nested_function:
-         notype_declarator
-               { push_c_function_context ();
-                 if (! start_function (current_declspecs, $1,
-                                       prefix_attributes, NULL_TREE, 1))
-                   {
-                     pop_c_function_context ();
-                     YYERROR1;
-                   }
-                 reinit_parse_for_function (); }
-         old_style_parm_decls
-               { store_parm_decls (); }
-/* This used to use compstmt_or_error.
-   That caused a bug with input `f(g) int g {}',
-   where the use of YYERROR1 above caused an error
-   which then was handled by compstmt_or_error.
-   There followed a repeated execution of that same rule,
-   which called YYERROR1 again, and so on.  */
-         compstmt
-               { finish_function (1);
-                 pop_c_function_context (); }
-       ;
-
-/* Any kind of declarator (thus, all declarators allowed
-   after an explicit typespec).  */
-
-declarator:
-         after_type_declarator
-       | notype_declarator
-       ;
-
-/* A declarator that is allowed only after an explicit typespec.  */
-
-after_type_declarator:
-         '(' after_type_declarator ')'
-               { $$ = $2; }
-       | after_type_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | after_type_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | after_type_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | after_type_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '*' type_quals after_type_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs after_type_declarator
-               { $$ = $3; }
-       | TYPENAME
-       | OBJECTNAME
-       ;
-
-/* Kinds of declarator that can appear in a parameter list
-   in addition to notype_declarator.  This is like after_type_declarator
-   but does not allow a typedef name in parentheses as an identifier
-   (because it would conflict with a function with that typedef as arg).  */
-
-parm_declarator:
-         parm_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | parm_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | parm_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | parm_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '*' type_quals parm_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs parm_declarator
-               { $$ = $3; }
-       | TYPENAME
-       ;
-
-/* A declarator allowed whether or not there has been
-   an explicit typespec.  These cannot redeclare a typedef-name.  */
-
-notype_declarator:
-         notype_declarator '(' parmlist_or_identifiers  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-/*     | notype_declarator '(' error ')'  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE);
-                 poplevel (0, 0, 0); }  */
-       | '(' notype_declarator ')'
-               { $$ = $2; }
-       | '*' type_quals notype_declarator  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       | notype_declarator '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | notype_declarator '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       /* ??? Yuck.  setattrs is a quick hack.  We can't use
-          prefix_attributes because $1 only applies to this
-          declarator.  We assume setspecs has already been done.
-          setattrs also avoids 5 reduce/reduce conflicts (otherwise multiple
-          attributes could be recognized here or in `attributes').  */
-       | attributes setattrs notype_declarator
-               { $$ = $3; }
-       | IDENTIFIER
-       ;
-
-structsp:
-         STRUCT identifier '{'
-               { $$ = start_struct (RECORD_TYPE, $2);
-                 /* Start scope of tag before parsing components.  */
-               }
-         component_decl_list '}' maybe_attribute 
-               { $$ = finish_struct ($<ttype>4, $5, $7); }
-       | STRUCT '{' component_decl_list '}' maybe_attribute
-               { $$ = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
-                                     $3, $5);
-               }
-       | STRUCT identifier
-               { $$ = xref_tag (RECORD_TYPE, $2); }
-       | UNION identifier '{'
-               { $$ = start_struct (UNION_TYPE, $2); }
-         component_decl_list '}' maybe_attribute
-               { $$ = finish_struct ($<ttype>4, $5, $7); }
-       | UNION '{' component_decl_list '}' maybe_attribute
-               { $$ = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
-                                     $3, $5);
-               }
-       | UNION identifier
-               { $$ = xref_tag (UNION_TYPE, $2); }
-       | ENUM identifier '{'
-               { $<itype>3 = suspend_momentary ();
-                 $$ = start_enum ($2); }
-         enumlist maybecomma_warn '}' maybe_attribute
-               { $$ = finish_enum ($<ttype>4, nreverse ($5), $8);
-                 resume_momentary ($<itype>3); }
-       | ENUM '{'
-               { $<itype>2 = suspend_momentary ();
-                 $$ = start_enum (NULL_TREE); }
-         enumlist maybecomma_warn '}' maybe_attribute
-               { $$ = finish_enum ($<ttype>3, nreverse ($4), $7);
-                 resume_momentary ($<itype>2); }
-       | ENUM identifier
-               { $$ = xref_tag (ENUMERAL_TYPE, $2); }
-       ;
-
-maybecomma:
-         /* empty */
-       | ','
-       ;
-
-maybecomma_warn:
-         /* empty */
-       | ','
-               { if (pedantic) pedwarn ("comma at end of enumerator list"); }
-       ;
-
-component_decl_list:
-         component_decl_list2
-               { $$ = $1; }
-       | component_decl_list2 component_decl
-               { $$ = chainon ($1, $2);
-                 pedwarn ("no semicolon at end of struct or union"); }
-       ;
-
-component_decl_list2:  /* empty */
-               { $$ = NULL_TREE; }
-       | component_decl_list2 component_decl ';'
-               { $$ = chainon ($1, $2); }
-       | component_decl_list2 ';'
-               { if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified"); }
-       /* foo(sizeof(struct{ @defs(ClassName)})); */
-       | DEFS '(' CLASSNAME ')'
-               {
-                 tree interface = lookup_interface ($3);
-
-                 if (interface)
-                   $$ = get_class_ivars (interface);
-                 else
-                   {
-                     error ("Cannot find interface declaration for `%s'",
-                            IDENTIFIER_POINTER ($3));
-                     $$ = NULL_TREE;
-                   }
-               }
-       ;
-
-/* There is a shift-reduce conflict here, because `components' may
-   start with a `typename'.  It happens that shifting (the default resolution)
-   does the right thing, because it treats the `typename' as part of
-   a `typed_typespecs'.
-
-   It is possible that this same technique would allow the distinction
-   between `notype_initdecls' and `initdecls' to be eliminated.
-   But I am being cautious and not trying it.  */
-
-component_decl:
-         typed_typespecs setspecs components
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_typespecs
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag($1);
-                 $$ = NULL_TREE; }
-       | nonempty_type_quals setspecs components
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | nonempty_type_quals
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids member declarations with no members");
-                 shadow_tag($1);
-                 $$ = NULL_TREE; }
-       | error
-               { $$ = NULL_TREE; }
-       | extension component_decl
-               { $$ = $2;
-                 pedantic = $<itype>1; }
-       ;
-
-components:
-         component_declarator
-       | components ',' component_declarator
-               { $$ = chainon ($1, $3); }
-       ;
-
-component_declarator:
-         save_filename save_lineno declarator maybe_attribute
-               { $$ = grokfield ($1, $2, $3, current_declspecs, NULL_TREE);
-                 decl_attributes ($$, $4, prefix_attributes); }
-       | save_filename save_lineno
-         declarator ':' expr_no_commas maybe_attribute
-               { $$ = grokfield ($1, $2, $3, current_declspecs, $5);
-                 decl_attributes ($$, $6, prefix_attributes); }
-       | save_filename save_lineno ':' expr_no_commas maybe_attribute
-               { $$ = grokfield ($1, $2, NULL_TREE, current_declspecs, $4);
-                 decl_attributes ($$, $5, prefix_attributes); }
-       ;
-
-/* We chain the enumerators in reverse order.
-   They are put in forward order where enumlist is used.
-   (The order used to be significant, but no longer is so.
-   However, we still maintain the order, just to be clean.)  */
-
-enumlist:
-         enumerator
-       | enumlist ',' enumerator
-               { if ($1 == error_mark_node)
-                   $$ = $1;
-                 else
-                   $$ = chainon ($3, $1); }
-       | error
-               { $$ = error_mark_node; }
-       ;
-
-
-enumerator:
-         identifier
-               { $$ = build_enumerator ($1, NULL_TREE); }
-       | identifier '=' expr_no_commas
-               { $$ = build_enumerator ($1, $3); }
-       ;
-
-typename:
-       typed_typespecs absdcl
-               { $$ = build_tree_list ($1, $2); }
-       | nonempty_type_quals absdcl
-               { $$ = build_tree_list ($1, $2); }
-       ;
-
-absdcl:   /* an absolute declarator */
-       /* empty */
-               { $$ = NULL_TREE; }
-       | absdcl1
-       ;
-
-nonempty_type_quals:
-         TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $1, NULL_TREE); }
-       | nonempty_type_quals TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-type_quals:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | type_quals TYPE_QUAL
-               { $$ = tree_cons (NULL_TREE, $2, $1); }
-       ;
-
-absdcl1:  /* a nonempty absolute declarator */
-         '(' absdcl1 ')'
-               { $$ = $2; }
-         /* `(typedef)1' is `int'.  */
-       | '*' type_quals absdcl1  %prec UNARY
-               { $$ = make_pointer_declarator ($2, $3); }
-       | '*' type_quals  %prec UNARY
-               { $$ = make_pointer_declarator ($2, NULL_TREE); }
-       | absdcl1 '(' parmlist  %prec '.'
-               { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); }
-       | absdcl1 '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, $3); }
-       | absdcl1 '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); }
-       | '(' parmlist  %prec '.'
-               { $$ = build_nt (CALL_EXPR, NULL_TREE, $2, NULL_TREE); }
-       | '[' expr ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, NULL_TREE, $2); }
-       | '[' ']'  %prec '.'
-               { $$ = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); }
-       /* ??? It appears we have to support attributes here, however
-          using prefix_attributes is wrong.  */
-       ;
-
-/* at least one statement, the first of which parses without error.  */
-/* stmts is used only after decls, so an invalid first statement
-   is actually regarded as an invalid decl and part of the decls.  */
-
-stmts:
-       lineno_stmt_or_labels
-               {
-                 if (pedantic && $1)
-                   pedwarn ("ANSI C forbids label at end of compound statement");
-               }
-       ;
-
-lineno_stmt_or_labels:
-         lineno_stmt_or_label
-       | lineno_stmt_or_labels lineno_stmt_or_label
-               { $$ = $2; }
-       | lineno_stmt_or_labels errstmt
-               { $$ = 0; }
-       ;
-
-xstmts:
-       /* empty */
-       | stmts
-       ;
-
-errstmt:  error ';'
-       ;
-
-pushlevel:  /* empty */
-               { emit_line_note (input_filename, lineno);
-                 pushlevel (0);
-                 clear_last_expr ();
-                 push_momentary ();
-                 expand_start_bindings (0);
-                 if (objc_method_context)
-                   add_objc_decls ();
-               }
-       ;
-
-/* Read zero or more forward-declarations for labels
-   that nested functions can jump to.  */
-maybe_label_decls:
-         /* empty */
-       | label_decls
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids label declarations"); }
-       ;
-
-label_decls:
-         label_decl
-       | label_decls label_decl
-       ;
-
-label_decl:
-         LABEL identifiers_or_typenames ';'
-               { tree link;
-                 for (link = $2; link; link = TREE_CHAIN (link))
-                   {
-                     tree label = shadow_label (TREE_VALUE (link));
-                     C_DECLARED_LABEL_FLAG (label) = 1;
-                     declare_nonlocal_label (label);
-                   }
-               }
-       ;
-
-/* This is the body of a function definition.
-   It causes syntax errors to ignore to the next openbrace.  */
-compstmt_or_error:
-         compstmt
-               {}
-       | error compstmt
-       ;
-
-compstmt: '{' '}'
-               { $$ = convert (void_type_node, integer_zero_node); }
-       | '{' pushlevel maybe_label_decls decls xstmts '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), 1, 0);
-                 $$ = poplevel (1, 1, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | '{' pushlevel maybe_label_decls error '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 $$ = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | '{' pushlevel maybe_label_decls stmts '}'
-               { emit_line_note (input_filename, lineno);
-                 expand_end_bindings (getdecls (), kept_level_p (), 0);
-                 $$ = poplevel (kept_level_p (), 0, 0);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       ;
-
-/* Value is number of statements counted as of the closeparen.  */
-simple_if:
-         if_prefix lineno_labeled_stmt
-/* Make sure expand_end_cond is run once
-   for each call to expand_start_cond.
-   Otherwise a crash is likely.  */
-       | if_prefix error
-       ;
-
-if_prefix:
-         IF '(' expr ')'
-               { emit_line_note ($<filename>-1, $<lineno>0);
-                 expand_start_cond (truthvalue_conversion ($3), 0);
-                 $<itype>$ = stmt_count;
-                 if_stmt_file = $<filename>-1;
-                 if_stmt_line = $<lineno>0;
-                 position_after_white_space (); }
-       ;
-
-/* This is a subroutine of stmt.
-   It is used twice, once for valid DO statements
-   and once for catching errors in parsing the end test.  */
-do_stmt_start:
-         DO
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 expand_start_loop_continue_elsewhere (1);
-                 position_after_white_space (); }
-         lineno_labeled_stmt WHILE
-               { expand_loop_continue_here (); }
-       ;
-
-save_filename:
-               { $$ = input_filename; }
-       ;
-
-save_lineno:
-               { $$ = lineno; }
-       ;
-
-lineno_labeled_stmt:
-         save_filename save_lineno stmt
-               { }
-/*     | save_filename save_lineno error
-               { }
-*/
-       | save_filename save_lineno label lineno_labeled_stmt
-               { }
-       ;
-
-lineno_stmt_or_label:
-         save_filename save_lineno stmt_or_label
-               { $$ = $3; }
-       ;
-
-stmt_or_label:
-         stmt
-               { $$ = 0; }
-       | label
-               { $$ = 1; }
-       ;
-
-/* Parse a single real statement, not including any labels.  */
-stmt:
-         compstmt
-               { stmt_count++; }
-        | all_iter_stmt 
-       | expr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-/* It appears that this should not be done--that a non-lvalue array
-   shouldn't get an error if the value isn't used.
-   Section 3.2.2.1 says that an array lvalue gets converted to a pointer
-   if it appears as a top-level expression,
-   but says nothing about non-lvalue arrays.  */
-#if 0
-                 /* Call default_conversion to get an error
-                    on referring to a register array if pedantic.  */
-                 if (TREE_CODE (TREE_TYPE ($1)) == ARRAY_TYPE
-                     || TREE_CODE (TREE_TYPE ($1)) == FUNCTION_TYPE)
-                   $1 = default_conversion ($1);
-#endif
-                 iterator_expand ($1);
-                 clear_momentary (); }
-       | simple_if ELSE
-               { expand_start_else ();
-                 $<itype>1 = stmt_count;
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_cond ();
-                 if (extra_warnings && stmt_count == $<itype>1)
-                   warning ("empty body in an else-statement"); }
-       | simple_if %prec IF
-               { expand_end_cond ();
-                 /* This warning is here instead of in simple_if, because we
-                    do not want a warning if an empty if is followed by an
-                    else statement.  Increment stmt_count so we don't
-                    give a second error if this is a nested `if'.  */
-                 if (extra_warnings && stmt_count++ == $<itype>1)
-                   warning_with_file_and_line (if_stmt_file, if_stmt_line,
-                                               "empty body in an if-statement"); }
-/* Make sure expand_end_cond is run once
-   for each call to expand_start_cond.
-   Otherwise a crash is likely.  */
-       | simple_if ELSE error
-               { expand_end_cond (); }
-       | WHILE
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* The emit_nop used to come before emit_line_note,
-                    but that made the nop seem like part of the preceding line.
-                    And that was confusing when the preceding line was
-                    inside of an if statement and was not really executed.
-                    I think it ought to work to put the nop after the line number.
-                    We will see.  --rms, July 15, 1991.  */
-                 emit_nop (); }
-         '(' expr ')'
-               { /* Don't start the loop till we have succeeded
-                    in parsing the end test.  This is to make sure
-                    that we end every loop we start.  */
-                 expand_start_loop (1);
-                 emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion ($4));
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_loop (); }
-       | do_stmt_start
-         '(' expr ')' ';'
-               { emit_line_note (input_filename, lineno);
-                 expand_exit_loop_if_false (NULL_PTR,
-                                            truthvalue_conversion ($3));
-                 expand_end_loop ();
-                 clear_momentary (); }
-/* This rule is needed to make sure we end every loop we start.  */
-       | do_stmt_start error
-               { expand_end_loop ();
-                 clear_momentary (); }
-       | FOR
-         '(' xexpr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 /* See comment in `while' alternative, above.  */
-                 emit_nop ();
-                 if ($3) c_expand_expr_stmt ($3);
-                 /* Next step is to call expand_start_loop_continue_elsewhere,
-                    but wait till after we parse the entire for (...).
-                    Otherwise, invalid input might cause us to call that
-                    fn without calling expand_end_loop.  */
-               }
-         xexpr ';'
-               /* Can't emit now; wait till after expand_start_loop...  */
-               { $<lineno>7 = lineno;
-                 $<filename>$ = input_filename; }
-         xexpr ')'
-               { 
-                 /* Start the loop.  Doing this after parsing
-                    all the expressions ensures we will end the loop.  */
-                 expand_start_loop_continue_elsewhere (1);
-                 /* Emit the end-test, with a line number.  */
-                 emit_line_note ($<filename>8, $<lineno>7);
-                 if ($6)
-                   expand_exit_loop_if_false (NULL_PTR,
-                                              truthvalue_conversion ($6));
-                 /* Don't let the tree nodes for $9 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 $<lineno>7 = lineno;
-                 $<filename>8 = input_filename;
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { /* Emit the increment expression, with a line number.  */
-                 emit_line_note ($<filename>8, $<lineno>7);
-                 expand_loop_continue_here ();
-                 if ($9)
-                   c_expand_expr_stmt ($9);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary ();
-                 expand_end_loop (); }
-       | SWITCH '(' expr ')'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_start_case ($3);
-                 /* Don't let the tree nodes for $3 be discarded by
-                    clear_momentary during the parsing of the next stmt.  */
-                 push_momentary ();
-                 position_after_white_space (); }
-         lineno_labeled_stmt
-               { expand_end_case ($3);
-                 if (yychar == CONSTANT || yychar == STRING)
-                   pop_momentary_nofree ();
-                 else
-                   pop_momentary (); }
-       | BREAK ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 if ( ! expand_exit_something ())
-                   error ("break statement not within loop or switch"); }
-       | CONTINUE ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 if (! expand_continue_loop (NULL_PTR))
-                   error ("continue statement not within a loop"); }
-       | RETURN ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_return (NULL_TREE); }
-       | RETURN expr ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_return ($2); }
-       | ASM_KEYWORD maybe_type_qual '(' expr ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 STRIP_NOPS ($4);
-                 if ((TREE_CODE ($4) == ADDR_EXPR
-                      && TREE_CODE (TREE_OPERAND ($4, 0)) == STRING_CST)
-                     || TREE_CODE ($4) == STRING_CST)
-                   expand_asm ($4);
-                 else
-                   error ("argument of `asm' is not a constant string"); }
-       /* This is the case with just output operands.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, NULL_TREE, NULL_TREE,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       /* This is the case with input operands as well.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, $8, NULL_TREE,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       /* This is the case with clobbered registers as well.  */
-       | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
-         asm_operands ':' asm_clobbers ')' ';'
-               { stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 c_expand_asm_operands ($4, $6, $8, $10,
-                                        $2 == ridpointers[(int)RID_VOLATILE],
-                                        input_filename, lineno); }
-       | GOTO identifier ';'
-               { tree decl;
-                 stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 decl = lookup_label ($2);
-                 if (decl != 0)
-                   {
-                     TREE_USED (decl) = 1;
-                     expand_goto (decl);
-                   }
-               }
-       | GOTO '*' expr ';'
-               { if (pedantic)
-                   pedwarn ("ANSI C forbids `goto *expr;'");
-                 stmt_count++;
-                 emit_line_note ($<filename>-1, $<lineno>0);
-                 expand_computed_goto (convert (ptr_type_node, $3)); }
-       | ';'
-       ;
-
-all_iter_stmt:
-         all_iter_stmt_simple
-/*     | all_iter_stmt_with_decl */
-       ;
-
-all_iter_stmt_simple:
-         FOR '(' primary ')' 
-         {
-           /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-
-           $<itype>$ = 0;
-           if (TREE_CODE ($3) != VAR_DECL)
-             error ("invalid `for (ITERATOR)' syntax");
-           else if (! ITERATOR_P ($3))
-             error ("`%s' is not an iterator",
-                    IDENTIFIER_POINTER (DECL_NAME ($3)));
-           else if (ITERATOR_BOUND_P ($3))
-             error ("`for (%s)' inside expansion of same iterator",
-                    IDENTIFIER_POINTER (DECL_NAME ($3)));
-           else
-             {
-               $<itype>$ = 1;
-               iterator_for_loop_start ($3);
-             }
-         }
-         lineno_labeled_stmt
-         {
-           if ($<itype>5)
-             iterator_for_loop_end ($3);
-         }
-
-/*  This really should allow any kind of declaration,
-    for generality.  Fix it before turning it back on.
-
-all_iter_stmt_with_decl:
-         FOR '(' ITERATOR pushlevel setspecs iterator_spec ')' 
-         {
-*/         /* The value returned by this action is  */
-           /*      1 if everything is OK */ 
-           /*      0 in case of error or already bound iterator */
-/*
-           iterator_for_loop_start ($6);
-         }
-         lineno_labeled_stmt
-         {
-           iterator_for_loop_end ($6);
-           emit_line_note (input_filename, lineno);
-           expand_end_bindings (getdecls (), 1, 0);
-           $<ttype>$ = poplevel (1, 1, 0);
-           if (yychar == CONSTANT || yychar == STRING)
-             pop_momentary_nofree ();
-           else
-             pop_momentary ();     
-         }
-*/
-
-/* Any kind of label, including jump labels and case labels.
-   ANSI C accepts labels only before statements, but we allow them
-   also at the end of a compound statement.  */
-
-label:   CASE expr_no_commas ':'
-               { register tree value = check_case_value ($2);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 stmt_count++;
-
-                 if (value != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase (value, convert_and_check,
-                                             label, &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); }
-       | CASE expr_no_commas ELLIPSIS expr_no_commas ':'
-               { register tree value1 = check_case_value ($2);
-                 register tree value2 = check_case_value ($4);
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids case ranges");
-                 stmt_count++;
-
-                 if (value1 != error_mark_node && value2 != error_mark_node)
-                   {
-                     tree duplicate;
-                     int success = pushcase_range (value1, value2,
-                                                   convert_and_check, label,
-                                                   &duplicate);
-                     if (success == 1)
-                       error ("case label not within a switch statement");
-                     else if (success == 2)
-                       {
-                         error ("duplicate case value");
-                         error_with_decl (duplicate, "this is the first entry for that value");
-                       }
-                     else if (success == 3)
-                       warning ("case value out of range");
-                     else if (success == 4)
-                       warning ("empty case range");
-                     else if (success == 5)
-                       error ("case label within scope of cleanup or variable array");
-                   }
-                 position_after_white_space (); }
-       | DEFAULT ':'
-               {
-                 tree duplicate;
-                 register tree label
-                   = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-                 int success = pushcase (NULL_TREE, 0, label, &duplicate);
-                 stmt_count++;
-                 if (success == 1)
-                   error ("default label not within a switch statement");
-                 else if (success == 2)
-                   {
-                     error ("multiple default labels in one switch");
-                     error_with_decl (duplicate, "this is the first default label");
-                   }
-                 position_after_white_space (); }
-       | identifier ':'
-               { tree label = define_label (input_filename, lineno, $1);
-                 stmt_count++;
-                 emit_nop ();
-                 if (label)
-                   expand_label (label);
-                 position_after_white_space (); }
-       ;
-
-/* Either a type-qualifier or nothing.  First thing in an `asm' statement.  */
-
-maybe_type_qual:
-       /* empty */
-               { emit_line_note (input_filename, lineno);
-                 $$ = NULL_TREE; }
-       | TYPE_QUAL
-               { emit_line_note (input_filename, lineno); }
-       ;
-
-xexpr:
-       /* empty */
-               { $$ = NULL_TREE; }
-       | expr
-       ;
-
-/* These are the operands other than the first string and colon
-   in  asm ("addextend %2,%1": "=dm" (x), "0" (y), "g" (*x))  */
-asm_operands: /* empty */
-               { $$ = NULL_TREE; }
-       | nonnull_asm_operands
-       ;
-
-nonnull_asm_operands:
-         asm_operand
-       | nonnull_asm_operands ',' asm_operand
-               { $$ = chainon ($1, $3); }
-       ;
-
-asm_operand:
-         STRING '(' expr ')'
-               { $$ = build_tree_list ($1, $3); }
-       ;
-
-asm_clobbers:
-         string
-               { $$ = tree_cons (NULL_TREE, combine_strings ($1), NULL_TREE); }
-       | asm_clobbers ',' string
-               { $$ = tree_cons (NULL_TREE, combine_strings ($3), $1); }
-       ;
-\f
-/* This is what appears inside the parens in a function declarator.
-   Its value is a list of ..._TYPE nodes.  */
-parmlist:
-               { pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (0); }
-         parmlist_1
-               { $$ = $2;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); }
-       ;
-
-parmlist_1:
-         parmlist_2 ')'
-       | parms ';'
-               { tree parm;
-                 if (pedantic)
-                   pedwarn ("ANSI C forbids forward parameter declarations");
-                 /* Mark the forward decls as such.  */
-                 for (parm = getdecls (); parm; parm = TREE_CHAIN (parm))
-                   TREE_ASM_WRITTEN (parm) = 1;
-                 clear_parm_order (); }
-         parmlist_1
-               { $$ = $4; }
-       | error ')'
-               { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); }
-       ;
-
-/* This is what appears inside the parens in a function declarator.
-   Is value is represented in the format that grokdeclarator expects.  */
-parmlist_2:  /* empty */
-               { $$ = get_parm_info (0); }
-       | ELLIPSIS
-               { $$ = get_parm_info (0);
-                 /* Gcc used to allow this as an extension.  However, it does
-                    not work for all targets, and thus has been disabled.
-                    Also, since func (...) and func () are indistinguishable,
-                    it caused problems with the code in expand_builtin which
-                    tries to verify that BUILT_IN_NEXT_ARG is being used
-                    correctly.  */
-                 error ("ANSI C requires a named argument before `...'");
-               }
-       | parms
-               { $$ = get_parm_info (1); }
-       | parms ',' ELLIPSIS
-               { $$ = get_parm_info (0); }
-       ;
-
-parms:
-       parm
-               { push_parm_decl ($1); }
-       | parms ',' parm
-               { push_parm_decl ($3); }
-       ;
-
-/* A single parameter declaration or parameter type name,
-   as found in a parmlist.  */
-parm:
-         typed_declspecs setspecs parm_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs notype_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4)); 
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs setspecs absdcl maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | declmods setspecs notype_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-
-       | declmods setspecs absdcl maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $3),
-                                       build_tree_list (prefix_attributes,
-                                                        $4));
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2);  }
-       ;
-
-/* This is used in a function definition
-   where either a parmlist or an identifier list is ok.
-   Its value is a list of ..._TYPE nodes or a list of identifiers.  */
-parmlist_or_identifiers:
-               { pushlevel (0);
-                 clear_parm_order ();
-                 declare_parm_level (1); }
-         parmlist_or_identifiers_1
-               { $$ = $2;
-                 parmlist_tags_warning ();
-                 poplevel (0, 0, 0); }
-       ;
-
-parmlist_or_identifiers_1:
-         parmlist_1
-       | identifiers ')'
-               { tree t;
-                 for (t = $1; t; t = TREE_CHAIN (t))
-                   if (TREE_VALUE (t) == NULL_TREE)
-                     error ("`...' in old-style identifier list");
-                 $$ = tree_cons (NULL_TREE, NULL_TREE, $1); }
-       ;
-
-/* A nonempty list of identifiers.  */
-identifiers:
-       IDENTIFIER
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | identifiers ',' IDENTIFIER
-               { $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-/* A nonempty list of identifiers, including typenames.  */
-identifiers_or_typenames:
-       identifier
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | identifiers_or_typenames ',' identifier
-               { $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-extension:
-       EXTENSION
-               { $<itype>$ = pedantic;
-                 pedantic = 0; }
-       ;
-\f
-/* Objective-C productions.  */
-
-objcdef:
-         classdef
-       | classdecl
-       | aliasdecl
-       | protocoldef
-       | methoddef
-       | END
-               {
-                 if (objc_implementation_context)
-                    {
-                     finish_class (objc_implementation_context);
-                     objc_ivar_chain = NULL_TREE;
-                     objc_implementation_context = NULL_TREE;
-                   }
-                 else
-                   warning ("`@end' must appear in an implementation context");
-               }
-       ;
-
-/* A nonempty list of identifiers.  */
-identifier_list:
-       identifier
-               { $$ = build_tree_list (NULL_TREE, $1); }
-       | identifier_list ',' identifier
-               { $$ = chainon ($1, build_tree_list (NULL_TREE, $3)); }
-       ;
-
-classdecl:
-         CLASS identifier_list ';'
-               {
-                 objc_declare_class ($2);
-               }
-
-aliasdecl:
-         ALIAS identifier identifier ';'
-               {
-                 objc_declare_alias ($2, $3);
-               }
-
-classdef:
-         INTERFACE identifier protocolrefs '{'
-               {
-                 objc_interface_context = objc_ivar_context
-                   = start_class (CLASS_INTERFACE_TYPE, $2, NULL_TREE, $3);
-                  objc_public_flag = 0;
-               }
-         ivar_decl_list '}'
-               {
-                  continue_class (objc_interface_context);
-               }
-         methodprotolist
-         END
-               {
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-
-       | INTERFACE identifier protocolrefs
-               {
-                 objc_interface_context
-                   = start_class (CLASS_INTERFACE_TYPE, $2, NULL_TREE, $3);
-                  continue_class (objc_interface_context);
-               }
-         methodprotolist
-         END
-               {
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-
-       | INTERFACE identifier ':' identifier protocolrefs '{'
-               {
-                 objc_interface_context = objc_ivar_context
-                   = start_class (CLASS_INTERFACE_TYPE, $2, $4, $5);
-                  objc_public_flag = 0;
-               }
-         ivar_decl_list '}'
-               {
-                  continue_class (objc_interface_context);
-               }
-         methodprotolist
-         END
-               {
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-
-       | INTERFACE identifier ':' identifier protocolrefs
-               {
-                 objc_interface_context
-                   = start_class (CLASS_INTERFACE_TYPE, $2, $4, $5);
-                  continue_class (objc_interface_context);
-               }
-         methodprotolist
-         END
-               {
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-
-       | IMPLEMENTATION identifier '{'
-               {
-                 objc_implementation_context = objc_ivar_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, $2, NULL_TREE, NULL_TREE);
-                  objc_public_flag = 0;
-               }
-         ivar_decl_list '}'
-               {
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               }
-
-       | IMPLEMENTATION identifier
-               {
-                 objc_implementation_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, $2, NULL_TREE, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               }
-
-       | IMPLEMENTATION identifier ':' identifier '{'
-               {
-                 objc_implementation_context = objc_ivar_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE);
-                  objc_public_flag = 0;
-               }
-         ivar_decl_list '}'
-               {
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               }
-
-       | IMPLEMENTATION identifier ':' identifier
-               {
-                 objc_implementation_context
-                   = start_class (CLASS_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               }
-
-       | INTERFACE identifier '(' identifier ')' protocolrefs
-               {
-                 objc_interface_context
-                   = start_class (CATEGORY_INTERFACE_TYPE, $2, $4, $6);
-                  continue_class (objc_interface_context);
-               }
-         methodprotolist
-         END
-               {
-                 finish_class (objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-
-       | IMPLEMENTATION identifier '(' identifier ')'
-               {
-                 objc_implementation_context
-                   = start_class (CATEGORY_IMPLEMENTATION_TYPE, $2, $4, NULL_TREE);
-                  objc_ivar_chain
-                   = continue_class (objc_implementation_context);
-               }
-       ;
-
-protocoldef:
-         PROTOCOL identifier protocolrefs
-               {
-                 remember_protocol_qualifiers ();
-                 objc_interface_context
-                   = start_protocol(PROTOCOL_INTERFACE_TYPE, $2, $3);
-               }
-         methodprotolist END
-               {
-                 forget_protocol_qualifiers();
-                 finish_protocol(objc_interface_context);
-                 objc_interface_context = NULL_TREE;
-               }
-       ;
-
-protocolrefs:
-         /* empty */
-               {
-                 $$ = NULL_TREE;
-               }
-       | non_empty_protocolrefs
-       ;
-
-non_empty_protocolrefs:
-         ARITHCOMPARE identifier_list ARITHCOMPARE
-               {
-                 if ($1 == LT_EXPR && $3 == GT_EXPR)
-                   $$ = $2;
-                 else
-                   YYERROR1;
-               }
-       ;
-
-ivar_decl_list:
-          ivar_decl_list visibility_spec ivar_decls
-        | ivar_decls
-        ;
-
-visibility_spec:
-         PRIVATE { objc_public_flag = 2; }
-       | PROTECTED { objc_public_flag = 0; }
-       | PUBLIC { objc_public_flag = 1; }
-       ;
-
-ivar_decls:
-          /* empty */
-               {
-                  $$ = NULL_TREE;
-                }
-       | ivar_decls ivar_decl ';'
-       | ivar_decls ';'
-               {
-                  if (pedantic)
-                   pedwarn ("extra semicolon in struct or union specified");
-                }
-       ;
-
-
-/* There is a shift-reduce conflict here, because `components' may
-   start with a `typename'.  It happens that shifting (the default resolution)
-   does the right thing, because it treats the `typename' as part of
-   a `typed_typespecs'.
-
-   It is possible that this same technique would allow the distinction
-   between `notype_initdecls' and `initdecls' to be eliminated.
-   But I am being cautious and not trying it.  */
-
-ivar_decl:
-       typed_typespecs setspecs ivars
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | nonempty_type_quals setspecs ivars
-               { $$ = $3;
-                 current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | error
-               { $$ = NULL_TREE; }
-       ;
-
-ivars:
-         /* empty */
-               { $$ = NULL_TREE; }
-       | ivar_declarator
-       | ivars ',' ivar_declarator
-       ;
-
-ivar_declarator:
-         declarator
-               {
-                 $$ = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             $1, current_declspecs,
-                                             NULL_TREE);
-                }
-       | declarator ':' expr_no_commas
-               {
-                 $$ = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             $1, current_declspecs, $3);
-                }
-       | ':' expr_no_commas
-               {
-                 $$ = add_instance_variable (objc_ivar_context,
-                                             objc_public_flag,
-                                             NULL_TREE,
-                                             current_declspecs, $2);
-                }
-       ;
-
-methoddef:
-         '+'
-               {
-                 remember_protocol_qualifiers ();
-                 if (objc_implementation_context)
-                   objc_inherit_code = CLASS_METHOD_DECL;
-                  else
-                   fatal ("method definition not in class context");
-               }
-         methoddecl
-               {
-                 forget_protocol_qualifiers ();
-                 add_class_method (objc_implementation_context, $3);
-                 start_method_def ($3);
-                 objc_method_context = $3;
-               }
-         optarglist
-               {
-                 continue_method_def ();
-               }
-         compstmt_or_error
-               {
-                 finish_method_def ();
-                 objc_method_context = NULL_TREE;
-               }
-
-       | '-'
-               {
-                 remember_protocol_qualifiers ();
-                 if (objc_implementation_context)
-                   objc_inherit_code = INSTANCE_METHOD_DECL;
-                  else
-                   fatal ("method definition not in class context");
-               }
-         methoddecl
-               {
-                 forget_protocol_qualifiers ();
-                 add_instance_method (objc_implementation_context, $3);
-                 start_method_def ($3);
-                 objc_method_context = $3;
-               }
-         optarglist
-               {
-                 continue_method_def ();
-               }
-         compstmt_or_error
-               {
-                 finish_method_def ();
-                 objc_method_context = NULL_TREE;
-               }
-       ;
-
-/* the reason for the strange actions in this rule
- is so that notype_initdecls when reached via datadef
- can find a valid list of type and sc specs in $0. */
-
-methodprotolist:
-         /* empty  */
-       | {$<ttype>$ = NULL_TREE; } methodprotolist2
-       ;
-
-methodprotolist2:               /* eliminates a shift/reduce conflict */
-          methodproto
-       |  datadef
-       | methodprotolist2 methodproto
-       | methodprotolist2 {$<ttype>$ = NULL_TREE; } datadef
-       ;
-
-semi_or_error:
-         ';'
-       | error
-       ;
-
-methodproto:
-         '+'
-               {
-                 objc_inherit_code = CLASS_METHOD_DECL;
-               }
-         methoddecl
-               {
-                 add_class_method (objc_interface_context, $3);
-               }
-         semi_or_error
-
-       | '-'
-               {
-                 objc_inherit_code = INSTANCE_METHOD_DECL;
-               }
-         methoddecl
-               {
-                 add_instance_method (objc_interface_context, $3);
-               }
-         semi_or_error
-       ;
-
-methoddecl:
-         '(' typename ')' unaryselector
-               {
-                 $$ = build_method_decl (objc_inherit_code, $2, $4, NULL_TREE);
-               }
-
-       | unaryselector
-               {
-                 $$ = build_method_decl (objc_inherit_code, NULL_TREE, $1, NULL_TREE);
-               }
-
-       | '(' typename ')' keywordselector optparmlist
-               {
-                 $$ = build_method_decl (objc_inherit_code, $2, $4, $5);
-               }
-
-       | keywordselector optparmlist
-               {
-                 $$ = build_method_decl (objc_inherit_code, NULL_TREE, $1, $2);
-               }
-       ;
-
-/* "optarglist" assumes that start_method_def has already been called...
-   if it is not, the "xdecls" will not be placed in the proper scope */
-
-optarglist:
-         /* empty */
-       | ';' myxdecls
-       ;
-
-/* to get around the following situation: "int foo (int a) int b; {}" that
-   is synthesized when parsing "- a:a b:b; id c; id d; { ... }" */
-
-myxdecls:
-         /* empty */
-       | mydecls
-       ;
-
-mydecls:
-       mydecl
-       | errstmt
-       | mydecls mydecl
-       | mydecl errstmt
-       ;
-
-mydecl:
-       typed_declspecs setspecs myparms ';'
-               { current_declspecs = TREE_VALUE (declspec_stack);
-                 prefix_attributes = TREE_PURPOSE (declspec_stack);
-                 declspec_stack = TREE_CHAIN (declspec_stack);
-                 resume_momentary ($2); }
-       | typed_declspecs ';'
-               { shadow_tag ($1); }
-       | declmods ';'
-               { pedwarn ("empty declaration"); }
-       ;
-
-myparms:
-       myparm
-               { push_parm_decl ($1); }
-       | myparms ',' myparm
-               { push_parm_decl ($3); }
-       ;
-
-/* A single parameter declaration or parameter type name,
-   as found in a parmlist. DOES NOT ALLOW AN INITIALIZER OR ASMSPEC */
-
-myparm:
-         parm_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $1),
-                                       build_tree_list (prefix_attributes,
-                                                        $2)); }
-       | notype_declarator maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $1),
-                                       build_tree_list (prefix_attributes,
-                                                        $2)); }
-       | absdcl maybe_attribute
-               { $$ = build_tree_list (build_tree_list (current_declspecs,
-                                                        $1),
-                                       build_tree_list (prefix_attributes,
-                                                        $2)); }
-       ;
-
-optparmlist:
-         /* empty */
-               {
-                 $$ = NULL_TREE;
-               }
-       | ',' ELLIPSIS
-               {
-                 /* oh what a kludge! */
-                 $$ = (tree)1;
-               }
-       | ','
-               {
-                 pushlevel (0);
-               }
-         parmlist_2
-               {
-                 /* returns a tree list node generated by get_parm_info */
-                 $$ = $3;
-                 poplevel (0, 0, 0);
-               }
-       ;
-
-unaryselector:
-         selector
-       ;
-
-keywordselector:
-         keyworddecl
-
-       | keywordselector keyworddecl
-               {
-                 $$ = chainon ($1, $2);
-               }
-       ;
-
-selector:
-         IDENTIFIER
-        | TYPENAME
-       | OBJECTNAME
-       | reservedwords
-       ;
-
-reservedwords:
-         ENUM { $$ = get_identifier (token_buffer); }
-       | STRUCT { $$ = get_identifier (token_buffer); }
-       | UNION { $$ = get_identifier (token_buffer); }
-       | IF { $$ = get_identifier (token_buffer); }
-       | ELSE { $$ = get_identifier (token_buffer); }
-       | WHILE { $$ = get_identifier (token_buffer); }
-       | DO { $$ = get_identifier (token_buffer); }
-       | FOR { $$ = get_identifier (token_buffer); }
-       | SWITCH { $$ = get_identifier (token_buffer); }
-       | CASE { $$ = get_identifier (token_buffer); }
-       | DEFAULT { $$ = get_identifier (token_buffer); }
-       | BREAK { $$ = get_identifier (token_buffer); }
-       | CONTINUE { $$ = get_identifier (token_buffer); }
-       | RETURN  { $$ = get_identifier (token_buffer); }
-       | GOTO { $$ = get_identifier (token_buffer); }
-       | ASM_KEYWORD { $$ = get_identifier (token_buffer); }
-        | SIZEOF { $$ = get_identifier (token_buffer); }
-       | TYPEOF { $$ = get_identifier (token_buffer); }
-       | ALIGNOF { $$ = get_identifier (token_buffer); }
-       | TYPESPEC | TYPE_QUAL
-       ;
-
-keyworddecl:
-         selector ':' '(' typename ')' identifier
-               {
-                 $$ = build_keyword_decl ($1, $4, $6);
-               }
-
-       | selector ':' identifier
-               {
-                 $$ = build_keyword_decl ($1, NULL_TREE, $3);
-               }
-
-       | ':' '(' typename ')' identifier
-               {
-                 $$ = build_keyword_decl (NULL_TREE, $3, $5);
-               }
-
-       | ':' identifier
-               {
-                 $$ = build_keyword_decl (NULL_TREE, NULL_TREE, $2);
-               }
-       ;
-
-messageargs:
-         selector
-        | keywordarglist
-       ;
-
-keywordarglist:
-         keywordarg
-       | keywordarglist keywordarg
-               {
-                 $$ = chainon ($1, $2);
-               }
-       ;
-
-
-keywordexpr:
-         nonnull_exprlist
-               {
-                 if (TREE_CHAIN ($1) == NULL_TREE)
-                   /* just return the expr., remove a level of indirection */
-                   $$ = TREE_VALUE ($1);
-                  else
-                   /* we have a comma expr., we will collapse later */
-                   $$ = $1;
-               }
-       ;
-
-keywordarg:
-         selector ':' keywordexpr
-               {
-                 $$ = build_tree_list ($1, $3);
-               }
-       | ':' keywordexpr
-               {
-                 $$ = build_tree_list (NULL_TREE, $2);
-               }
-       ;
-
-receiver:
-         expr
-       | CLASSNAME
-               {
-                 $$ = get_class_reference ($1);
-               }
-       ;
-
-objcmessageexpr:
-         '['
-               { objc_receiver_context = 1; }
-         receiver
-               { objc_receiver_context = 0; }
-         messageargs ']'
-               {
-                 $$ = build_tree_list ($3, $5);
-               }
-       ;
-
-selectorarg:
-         selector
-        | keywordnamelist
-       ;
-
-keywordnamelist:
-         keywordname
-       | keywordnamelist keywordname
-               {
-                 $$ = chainon ($1, $2);
-               }
-       ;
-
-keywordname:
-         selector ':'
-               {
-                 $$ = build_tree_list ($1, NULL_TREE);
-               }
-       | ':'
-               {
-                 $$ = build_tree_list (NULL_TREE, NULL_TREE);
-               }
-       ;
-
-objcselectorexpr:
-         SELECTOR '(' selectorarg ')'
-               {
-                 $$ = $3;
-               }
-       ;
-
-objcprotocolexpr:
-         PROTOCOL '(' identifier ')'
-               {
-                 $$ = $3;
-               }
-       ;
-
-/* extension to support C-structures in the archiver */
-
-objcencodeexpr:
-         ENCODE '(' typename ')'
-               {
-                 $$ = groktypename ($3);
-               }
-       ;
-
-%%
diff --git a/gcc/patch-apollo-includes b/gcc/patch-apollo-includes
new file mode 100755 (executable)
index 0000000..8daf88c
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/sh
+# patch-apollo-includes -- fix some (but not all!) Apollo brain damage.
+
+FILES_TO_PATCH='sys/types.h setjmp.h'
+
+mkdir sys
+
+for i in $FILES_TO_PATCH;
+do
+  cp /bsd4.3/usr/include/$i ./$i
+done
+
+patch -b -apollo <<'EOP'
+*** /bsd4.3/usr/include/sys/types.h    Fri Apr  8 20:29:06 1988
+--- sys/types.h        Wed Feb 26 21:17:57 1992
+***************
+*** 38,44 ****
+--- 38,47 ----
+  typedef      char *  caddr_t;
+  typedef      u_long  ino_t;
+  typedef      long    swblk_t;
++ #ifndef _SIZE_T
++ #define _SIZE_T
+  typedef      long    size_t;
++ #endif
+  typedef      long    time_t;
+  typedef      long    dev_t;
+  typedef      long    off_t;
+*** /bsd4.3/usr/include/setjmp.h       Fri Feb  3 21:40:21 1989
+--- setjmp.h   Sun Feb 23 19:06:55 1992
+***************
+*** 24,30 ****
+--- 24,39 ----
+  #endif
+  
+  
++ #ifdef __GNUC__
+  #ifdef _PROTOTYPES
++ extern int sigsetjmp (sigjmp_buf env, int savemask);
++ extern void siglongjmp (sigjmp_buf env, int val);
++ #else
++ extern int sigsetjmp();
++ extern void siglongjmp();
++ #endif /* _PROTOTYPES */
++ #else /* not __GNUC__ */
++ #ifdef _PROTOTYPES
+  extern int sigsetjmp(
+          sigjmp_buf env,
+          int savemask
+***************
+*** 37,43 ****
+  extern int sigsetjmp() #options(abnormal);
+  extern void siglongjmp() #options(noreturn);
+  #endif /* _PROTOTYPES */
+! 
+  #undef _PROTOTYPES
+  
+  #ifdef __cplusplus
+--- 46,52 ----
+  extern int sigsetjmp() #options(abnormal);
+  extern void siglongjmp() #options(noreturn);
+  #endif /* _PROTOTYPES */
+! #endif /* not __GNUC__ */
+  #undef _PROTOTYPES
+  
+  #ifdef __cplusplus
+EOP
+
+exit 0
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gcc/po/Makefile.in.in b/gcc/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..746d521
--- /dev/null
@@ -0,0 +1,249 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(srcdir)/$(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+       sed -f ../intl/po2msg.sed < $< > $*.msg \
+         && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(srcdir)/cat-id-tbl.c $(CATALOGS)
+all-no:
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES)
+       $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+         --add-comments --keyword=_ --keyword=N_ \
+         --files-from=$(srcdir)/POTFILES.in \
+       && test ! -f $(PACKAGE).po \
+          || ( rm -f $(srcdir)/$(PACKAGE).pot \
+               && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+
+$(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @:
+$(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot
+       rm -f cat-id-tbl.tmp
+       sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+               | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+       if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+         rm cat-id-tbl.tmp; \
+       else \
+         echo cat-id-tbl.c changed; \
+         rm -f $(srcdir)/cat-id-tbl.c; \
+         mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+       fi
+       cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       if test -r "$(MKINSTALLDIRS)"; then \
+         $(MKINSTALLDIRS) $(datadir); \
+       else \
+         $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
+       fi
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         case "$$cat" in \
+           *.gmo) destdir=$(gnulocaledir);; \
+           *)     destdir=$(localedir);; \
+         esac; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         dir=$$destdir/$$lang/LC_MESSAGES; \
+         if test -r "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $$dir; \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+         fi; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $(srcdir)/$$cat as" \
+                "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         fi; \
+         if test -r $$cat.m; then \
+           $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+           echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+         else \
+           if test -r $(srcdir)/$$cat.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$cat.m \
+               $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+             echo "installing $(srcdir)/$$cat as" \
+                  "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+       done
+       rm -f $(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+cat-id-tbl.o: $(srcdir)/cat-id-tbl.c $(top_srcdir)/intl/libgettext.h
+       $(COMPILE) $(srcdir)/cat-id-tbl.c
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f $(GMOFILES) cat-id-tbl.c stamp-cat-id
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(srcdir)/$(PACKAGE).pot
+       PATH=`pwd`/../src:$$PATH; \
+       cd $(srcdir); \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         mv $$lang.po $$lang.old.po; \
+         echo "$$lang:"; \
+         if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+           rm -f $$lang.old.po; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$lang.po; \
+           mv $$lang.old.po $$lang.po; \
+         fi; \
+       done
+
+POTFILES: POTFILES.in
+       ( if test 'x$(srcdir)' != 'x.'; then \
+           posrcprefix='$(top_srcdir)/'; \
+         else \
+           posrcprefix="../"; \
+         fi; \
+         rm -f $@-t $@ \
+           && (sed -e '/^#/d' -e '/^[  ]*$$/d' \
+                   -e "s@.*@   $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+               | sed -e '$$s/\\$$//') > $@-t \
+           && chmod a-w $@-t \
+           && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gcc/po/POTFILES.in b/gcc/po/POTFILES.in
new file mode 100644 (file)
index 0000000..a072713
--- /dev/null
@@ -0,0 +1,816 @@
+# List of files that contain translatable strings.
+# Copyright 1998 Free Software Foundation, Inc.
+
+# This file is part of GNU CC.
+
+# GNU CC 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.
+
+# GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+# the Free Software Foundation, 59 Temple Place - Suite 330,
+# Boston MA 02111-1307, USA.
+
+
+# This should list all .c and .h files in this distribution.
+# Files that are intentionally excluded should be commented out, not removed.
+# To exclude a file, prepend a '#' to its name, and follow it by a space
+# and a comment as to why it was excluded.
+
+# By convention, if any file included in this list defines a function
+# with an argument whose name ends in `msgid', that function
+# is expected to translate the argument before presenting it to the user.
+# ../exgettext uses this convention to scan for strings that need translation.
+# A function can have at most one msgid argument.
+# Two functions with the same name in different programs
+# must agree about which argument (if any) is a msgid.
+
+# Here are some reasons why a file might be commented-out in the list below:
+
+#   It is part of the GCC library.
+
+#   It is part of the translation machinery itself.
+
+#   It is meant to be executed only by GCC maintainers or installers.
+#   Such files do not need to be translated, 
+#   as these people typically need to be able to read English anyway.
+
+#   It is not yet internationalized, because it contains many strings
+#   that require a lot of analysis, and the file is little-used.
+
+
+acconfig.h
+alloca.c
+assert.h
+basic-block.h
+bc-emit.c
+bc-emit.h
+bc-optab.c
+bc-optab.h
+bc-typecd.h
+bi-arity.c
+bi-defs.h
+bi-lexer.c
+bi-opcode.c
+bi-opname.c
+bi-parser.c
+bi-parser.h
+bi-reverse.c
+bi-run.h
+bitmap.c
+bitmap.h
+bytecode.h
+bytetypes.h
+c-aux-info.c
+c-common.c
+c-convert.c
+c-decl.c
+c-gperf.h
+c-iterate.c
+c-lang.c
+c-lex.c
+c-lex.h
+c-parse.c
+c-parse.h
+c-pragma.c
+c-pragma.h
+c-tree.h
+c-typeck.c
+caller-save.c
+calls.c
+cccp.c
+cexp.c
+choose-temp.c
+collect2.c
+combine.c
+conditions.h
+config/a29k/a29k.c
+config/a29k/a29k.h
+config/a29k/udi.h
+config/a29k/unix.h
+config/a29k/vx29k.h
+config/a29k/xm-a29k.h
+config/alpha/alpha.c
+config/alpha/alpha.h
+config/alpha/elf.h
+config/alpha/linux.h
+config/alpha/osf12.h
+config/alpha/osf2or3.h
+config/alpha/vms.h
+config/alpha/vxworks.h
+config/alpha/win-nt.h
+config/alpha/xm-alpha.h
+config/alpha/xm-vms.h
+config/alpha/xm-winnt.h
+config/aoutos.h
+config/arc/arc.c
+config/arc/arc.h
+config/arc/initfini.c
+config/arc/xm-arc.h
+config/arm/aof.h
+config/arm/aout.h
+config/arm/arm.c
+config/arm/arm.h
+config/arm/coff.h
+config/arm/linux-gas.h
+config/arm/linux.h
+config/arm/netbsd.h
+config/arm/riscix.h
+config/arm/riscix1-1.h
+config/arm/rix-gas.h
+config/arm/semi.h
+config/arm/semiaof.h
+config/arm/xm-arm.h
+config/clipper/clipper.c
+config/clipper/clipper.h
+config/clipper/clix.h
+config/clipper/xm-clix.h
+config/convex/convex.c
+config/convex/convex.h
+config/convex/xm-convex.h
+config/dbx.h
+config/dbxcoff.h
+config/dsp16xx/dsp16xx.c
+config/dsp16xx/dsp16xx.h
+config/dsp16xx/xm-dsp16xx.h
+config/elxsi/elxsi.c
+config/elxsi/elxsi.h
+config/elxsi/xm-elxsi.h
+config/float-i128.h
+config/float-i32.h
+config/float-i64.h
+config/float-sh.h
+config/float-vax.h
+config/fp-bit.c
+config/fx80/fx80.c
+config/fx80/fx80.h
+config/fx80/xm-fx80.h
+config/gmicro/gmicro.c
+config/gmicro/gmicro.h
+config/gnu.h
+config/gofast.h
+config/h8300/h8300.c
+config/h8300/h8300.h
+config/h8300/xm-h8300.h
+config/i370/i370.c
+config/i370/i370.h
+config/i370/xm-i370.h
+config/i386/aix386.h
+config/i386/aix386ng.h
+config/i386/att.h
+config/i386/bsd.h
+config/i386/bsd386.h
+config/i386/crtdll.h
+config/i386/cygwin32.h
+config/i386/dgux.c
+config/i386/dgux.h
+config/i386/freebsd-elf.h
+config/i386/freebsd.h
+config/i386/gas.h
+config/i386/gmon-sol2.c
+config/i386/gnu.h
+config/i386/go32-rtems.h
+config/i386/go32.h
+config/i386/gstabs.h
+config/i386/i386-aout.h
+config/i386/i386-coff.h
+config/i386/i386.c
+config/i386/i386.h
+config/i386/isc.h
+config/i386/isccoff.h
+config/i386/iscdbx.h
+config/i386/linux-aout.h
+config/i386/linux-oldld.h
+config/i386/linux.h
+config/i386/lynx-ng.h
+config/i386/lynx.h
+config/i386/mach.h
+config/i386/mingw32.h
+config/i386/moss.h
+config/i386/netbsd.h
+config/i386/next.h
+config/i386/os2.h
+config/i386/osf1elf.h
+config/i386/osf1elfgdb.h
+config/i386/osfelf.h
+config/i386/osfrose.h
+config/i386/perform.h
+config/i386/ptx4-i.h
+config/i386/rtems.h
+config/i386/rtemself.h
+config/i386/sco.h
+config/i386/sco4.h
+config/i386/sco4dbx.h
+config/i386/sco5.h
+config/i386/scodbx.h
+config/i386/seq-gas.h
+config/i386/seq-sysv3.h
+config/i386/seq2-sysv3.h
+config/i386/sequent.h
+config/i386/sol2.h
+config/i386/sol2dbg.h
+config/i386/sun.h
+config/i386/sun386.h
+config/i386/svr3dbx.h
+config/i386/svr3gas.h
+config/i386/sysv3.h
+config/i386/sysv4.h
+config/i386/unix.h
+config/i386/v3gas.h
+config/i386/vsta.h
+config/i386/win-nt.h
+config/i386/winnt.c
+config/i386/xm-aix.h
+config/i386/xm-cygwin32.h
+config/i386/xm-dos.h
+config/i386/xm-go32.h
+config/i386/xm-i386.h
+config/i386/xm-isc.h
+config/i386/xm-lynx.h
+config/i386/xm-mingw32.h
+config/i386/xm-next.h
+config/i386/xm-os2.h
+config/i386/xm-osf.h
+config/i386/xm-osf1elf.h
+config/i386/xm-sco.h
+config/i386/xm-sco5.h
+config/i386/xm-sysv4.h
+config/i386/xm-vsta.h
+config/i860/bsd-gas.h
+config/i860/bsd.h
+config/i860/fx2800.h
+config/i860/i860.c
+config/i860/i860.h
+config/i860/mach.h
+config/i860/paragon.h
+config/i860/sysv3.h
+config/i860/sysv4.h
+config/i860/xm-i860.h
+config/i960/i960-coff.h
+config/i960/i960.c
+config/i960/i960.h
+config/i960/rtems.h
+config/i960/vx960-coff.h
+config/i960/vx960.h
+config/i960/xm-i960.h
+config/libgloss.h
+config/linux-aout.h
+config/linux.h
+config/lynx-ng.h
+config/lynx.h
+config/m32r/initfini.c
+config/m32r/m32r.c
+config/m32r/m32r.h
+config/m32r/xm-m32r.h
+config/m68k/a-ux.h
+config/m68k/altos3068.h
+config/m68k/amix.h
+config/m68k/apollo68.h
+config/m68k/atari.h
+config/m68k/aux-crt1.c
+config/m68k/aux-exit.c
+config/m68k/aux-mcount.c
+config/m68k/auxas.h
+config/m68k/auxgas.h
+config/m68k/auxgld.h
+config/m68k/auxld.h
+config/m68k/ccur-GAS.h
+config/m68k/coff.h
+config/m68k/crds.h
+config/m68k/ctix.h
+config/m68k/dpx2.h
+config/m68k/dpx2cdbx.h
+config/m68k/dpx2g.h
+config/m68k/fpgnulib.c
+config/m68k/hp2bsd.h
+config/m68k/hp310.h
+config/m68k/hp310g.h
+config/m68k/hp320.h
+config/m68k/hp320g.h
+config/m68k/hp3bsd.h
+config/m68k/hp3bsd44.h
+config/m68k/hpux7.h
+config/m68k/isi-nfp.h
+config/m68k/isi.h
+config/m68k/linux-aout.h
+config/m68k/linux.h
+config/m68k/lynx-ng.h
+config/m68k/lynx.h
+config/m68k/m68k-aout.h
+config/m68k/m68k-coff.h
+config/m68k/m68k-none.h
+config/m68k/m68k-psos.h
+config/m68k/m68k.c
+config/m68k/m68k.h
+config/m68k/m68kemb.h
+config/m68k/m68kv4.h
+config/m68k/mot3300.h
+config/m68k/netbsd.h
+config/m68k/news.h
+config/m68k/news3.h
+config/m68k/news3gas.h
+config/m68k/newsgas.h
+config/m68k/next.h
+config/m68k/next21.h
+config/m68k/pbb.h
+config/m68k/plexus.h
+config/m68k/rtems.h
+config/m68k/sgs.h
+config/m68k/sun2.h
+config/m68k/sun2o4.h
+config/m68k/sun3.h
+config/m68k/sun3mach.h
+config/m68k/sun3n.h
+config/m68k/sun3n3.h
+config/m68k/sun3o3.h
+config/m68k/tower-as.h
+config/m68k/tower.h
+config/m68k/vxm68k.h
+config/m68k/xm-3b1.h
+config/m68k/xm-atari.h
+config/m68k/xm-crds.h
+config/m68k/xm-lynx.h
+config/m68k/xm-m68k.h
+config/m68k/xm-mot3300.h
+config/m68k/xm-next.h
+config/m68k/xm-plexus.h
+config/m88k/dgux.h
+config/m88k/dguxbcs.h
+config/m88k/dolph.h
+config/m88k/luna.h
+config/m88k/m88k-aout.h
+config/m88k/m88k-coff.h
+config/m88k/m88k.c
+config/m88k/m88k.h
+config/m88k/sysv3.h
+config/m88k/sysv4.h
+config/m88k/tekXD88.h
+config/m88k/xm-m88k.h
+config/m88k/xm-sysv3.h
+config/mips/abi64.h
+config/mips/bsd-4.h
+config/mips/bsd-5.h
+config/mips/cross64.h
+config/mips/dec-bsd.h
+config/mips/dec-osf1.h
+config/mips/ecoff.h
+config/mips/ecoffl.h
+config/mips/elf.h
+config/mips/elf64.h
+config/mips/elfl.h
+config/mips/elfl64.h
+config/mips/elforion.h
+config/mips/gnu.h
+config/mips/iris3.h
+config/mips/iris4.h
+config/mips/iris4loser.h
+config/mips/iris5.h
+config/mips/iris5gas.h
+config/mips/iris6.h
+config/mips/mips-5.h
+config/mips/mips.c
+config/mips/mips.h
+config/mips/netbsd.h
+config/mips/news4.h
+config/mips/news5.h
+config/mips/osfrose.h
+config/mips/r3900.h
+config/mips/rtems64.h
+config/mips/sni-gas.h
+config/mips/sni-svr4.h
+config/mips/svr3-4.h
+config/mips/svr3-5.h
+config/mips/svr4-4.h
+config/mips/svr4-5.h
+config/mips/svr4-t.h
+config/mips/ultrix.h
+config/mips/xm-iris6.h
+config/mips/xm-mips.h
+config/mn10200/divmod.c
+config/mn10200/mn10200.c
+config/mn10200/mn10200.h
+config/mn10200/udivmod.c
+config/mn10200/udivmodsi4.c
+config/mn10200/xm-mn10200.h
+config/mn10300/mn10300.c
+config/mn10300/mn10300.h
+config/mn10300/xm-mn10300.h
+config/msdos/mklibgcc.c
+config/netbsd.h
+config/nextstep.c
+config/nextstep.h
+config/nextstep21.h
+config/ns32k/encore.h
+config/ns32k/genix.h
+config/ns32k/merlin.h
+config/ns32k/netbsd.h
+config/ns32k/ns32k.c
+config/ns32k/ns32k.h
+config/ns32k/pc532-mach.h
+config/ns32k/pc532-min.h
+config/ns32k/pc532.h
+config/ns32k/sequent.h
+config/ns32k/tek6000.h
+config/ns32k/tek6100.h
+config/ns32k/tek6200.h
+config/ns32k/xm-ns32k.h
+config/ns32k/xm-pc532-min.h
+config/pa/pa-gas.h
+config/pa/pa-hiux.h
+config/pa/pa-hpux.h
+config/pa/pa-hpux10.h
+config/pa/pa-hpux7.h
+config/pa/pa-hpux9.h
+config/pa/pa-oldas.h
+config/pa/pa-osf.h
+config/pa/pa-pro-end.h
+config/pa/pa-pro.h
+config/pa/pa.c
+config/pa/pa.h
+config/pa/pa1.h
+config/pa/rtems.h
+config/pa/xm-pa.h
+config/pa/xm-pahpux.h
+config/pa/xm-papro.h
+config/pdp11/pdp11.c
+config/pdp11/pdp11.h
+config/pdp11/xm-pdp11.h
+config/psos.h
+config/ptx4.h
+config/pyr/pyr.c
+config/pyr/pyr.h
+config/pyr/xm-pyr.h
+config/romp/romp.c
+config/romp/romp.h
+config/romp/xm-romp.h
+config/rs6000/aix31.h
+config/rs6000/aix3newas.h
+config/rs6000/aix41.h
+config/rs6000/cygwin32.h
+config/rs6000/eabi-ctors.c
+config/rs6000/eabi.h
+config/rs6000/eabiaix.h
+config/rs6000/eabile.h
+config/rs6000/eabilesim.h
+config/rs6000/eabisim.h
+config/rs6000/linux.h
+config/rs6000/lynx.h
+config/rs6000/mach.h
+config/rs6000/netware.h
+config/rs6000/powerpc.h
+config/rs6000/rs6000.c
+config/rs6000/rs6000.h
+config/rs6000/rtems.h
+config/rs6000/sol-c0.c
+config/rs6000/sol2.h
+config/rs6000/sysv4.h
+config/rs6000/sysv4le.h
+config/rs6000/vxppc.h
+config/rs6000/win-nt.h
+config/rs6000/xm-cygwin32.h
+config/rs6000/xm-lynx.h
+config/rs6000/xm-mach.h
+config/rs6000/xm-rs6000.h
+config/rs6000/xm-sysv4.h
+config/sh/elf.h
+config/sh/rtems.h
+config/sh/sh.c
+config/sh/sh.h
+config/sh/xm-sh.h
+config/sparc/aout.h
+config/sparc/bsd.h
+config/sparc/elf.h
+config/sparc/gmon-sol2.c
+config/sparc/hal.h
+config/sparc/linux-aout.h
+config/sparc/linux.h
+config/sparc/linux64.h
+config/sparc/lite.h
+config/sparc/litecoff.h
+config/sparc/lynx-ng.h
+config/sparc/lynx.h
+config/sparc/netbsd.h
+config/sparc/pbd.h
+config/sparc/rtems.h
+config/sparc/sol2-sld.h
+config/sparc/sol2.h
+config/sparc/sp64-aout.h
+config/sparc/sp64-elf.h
+config/sparc/sparc.c
+config/sparc/sparc.h
+config/sparc/splet.h
+config/sparc/sun4gas.h
+config/sparc/sun4o3.h
+config/sparc/sunos4.h
+config/sparc/sysv4.h
+config/sparc/vxsim.h
+config/sparc/vxsparc.h
+config/sparc/xm-linux.h
+config/sparc/xm-lynx.h
+config/sparc/xm-sol2.h
+config/sparc/xm-sp64.h
+config/sparc/xm-sparc.h
+config/sparc/xm-sysv4.h
+config/spur/spur.c
+config/spur/spur.h
+config/spur/xm-spur.h
+config/svr3.h
+config/svr4.h
+config/tahoe/harris.h
+config/tahoe/tahoe.c
+config/tahoe/tahoe.h
+config/tahoe/xm-tahoe.h
+config/v850/v850.c
+config/v850/v850.h
+config/v850/xm-v850.h
+config/vax/netbsd.h
+config/vax/ultrix.h
+config/vax/vax.c
+config/vax/vax.h
+config/vax/vaxv.h
+config/vax/vms.h
+config/vax/xm-vax.h
+config/vax/xm-vms.h
+config/we32k/we32k.c
+config/we32k/we32k.h
+config/we32k/xm-we32k.h
+config/winnt/dirent.c
+config/winnt/dirent.h
+config/winnt/fixinc-nt.c
+config/winnt/ld.c
+config/winnt/mklibgcc.c
+config/winnt/oldnames.c
+config/winnt/spawnv.c
+config/winnt/win-nt.h
+config/winnt/xm-winnt.h
+config/xm-alloca.h
+config/xm-gnu.h
+config/xm-lynx.h
+config/xm-siglist.h
+config/xm-std32.h
+convert.c
+convert.h
+cp/call.c
+cp/class.c
+cp/class.h
+cp/cp-tree.h
+cp/cvt.c
+cp/decl.c
+cp/decl.h
+cp/decl2.c
+cp/errfn.c
+cp/error.c
+cp/except.c
+cp/expr.c
+cp/friend.c
+cp/g++spec.c
+cp/hash.h
+cp/inc/new.h
+cp/init.c
+cp/input.c
+cp/lang-options.h
+cp/lang-specs.h
+cp/lex.c
+cp/lex.h
+cp/method.c
+cp/parse.c
+cp/parse.h
+cp/pt.c
+cp/ptree.c
+cp/repo.c
+cp/rtti.c
+cp/search.c
+cp/sig.c
+cp/spew.c
+cp/tinfo.h
+cp/tree.c
+cp/typeck.c
+cp/typeck2.c
+cp/xref.c
+cplus-dem.c
+cppalloc.c
+cpperror.c
+cppexp.c
+cpphash.c
+cpphash.h
+cpplib.c
+cpplib.h
+cppmain.c
+#crtstuff.c is part of the GCC library
+cse.c
+dbxout.c
+dbxstclass.h
+defaults.h
+demangle.h
+doschk.c
+dwarf.h
+dwarf2.h
+dwarf2out.c
+dwarfout.c
+emit-rtl.c
+#enquire.c is used only by GCC maintainers and installers
+except.c
+except.h
+explow.c
+expmed.c
+expr.c
+expr.h
+final.c
+#fix-header.c is used only by GCC maintainers and installers
+flags.h
+floatlib.c
+flow.c
+fold-const.c
+fp-test.c
+frame.c
+#frame.h is part of the GCC library
+function.c
+function.h
+gansidecl.h
+#gbl-ctors.h is part of the GCC library
+gcc.c
+gcov-io.h
+gcov.c
+#gen-protos.c is used only by GCC maintainers and installers
+#genattr.c is used only by GCC maintainers and installers
+#genattrtab.c is used only by GCC maintainers and installers
+#gencheck.c is used only by GCC maintainers and installers
+#gencodes.c is used only by GCC maintainers and installers
+#genconfig.c is used only by GCC maintainers and installers
+#genemit.c is used only by GCC maintainers and installers
+#genextract.c is used only by GCC maintainers and installers
+#genflags.c is used only by GCC maintainers and installers
+#genopinit.c is used only by GCC maintainers and installers
+#genoutput.c is used only by GCC maintainers and installers
+#genpeep.c is used only by GCC maintainers and installers
+#genrecog.c is used only by GCC maintainers and installers
+getopt.c
+getopt.h
+getopt1.c
+getpwd.c
+ginclude/iso646.h
+ginclude/math-3300.h
+ginclude/math-68881.h
+ginclude/ppc-asm.h
+ginclude/proto.h
+ginclude/stdarg.h
+ginclude/stddef.h
+ginclude/va-alpha.h
+ginclude/va-arc.h
+ginclude/va-clipper.h
+ginclude/va-h8300.h
+ginclude/va-i860.h
+ginclude/va-i960.h
+ginclude/va-m32r.h
+ginclude/va-m88k.h
+ginclude/va-mips.h
+ginclude/va-mn10200.h
+ginclude/va-mn10300.h
+ginclude/va-pa.h
+ginclude/va-ppc.h
+ginclude/va-pyr.h
+ginclude/va-sh.h
+ginclude/va-sparc.h
+ginclude/va-spur.h
+ginclude/va-v850.h
+ginclude/varargs.h
+glimits.h
+global.c
+gmon.c
+gstab.h
+gsyms.h
+gsyslimits.h
+halfpic.c
+halfpic.h
+hard-reg-set.h
+input.h
+integrate.c
+integrate.h
+intl.c
+intl.h
+intl/bindtextdom.c
+intl/cat-compat.c
+intl/dcgettext.c
+intl/dgettext.c
+intl/explodename.c
+intl/finddomain.c
+intl/gettext.c
+intl/gettext.h
+intl/gettextP.h
+intl/hash-string.h
+intl/intl-compat.c
+intl/l10nflist.c
+intl/libgettext.h
+intl/loadinfo.h
+intl/loadmsgcat.c
+intl/localealias.c
+intl/textdomain.c
+jump.c
+#libgcc1-test.c is used only by GCC maintainers and installers
+#libgcc1.c is part of the GCC library
+#libgcc2.c is part of the GCC library
+limitx.h
+limity.h
+local-alloc.c
+#longlong.h is part of the GCC library
+loop.c
+loop.h
+machmode.h
+#mips-tdump.c is not yet internationalized
+#mips-tfile.c is not yet internationalized
+objc/NXConstStr.h
+objc/Object.h
+objc/Protocol.h
+objc/archive.c
+objc/class.c
+objc/encoding.c
+objc/encoding.h
+objc/hash.c
+objc/hash.h
+objc/init.c
+objc/libobjc_entry.c
+objc/misc.c
+objc/nil_method.c
+objc/objc-act.c
+objc/objc-act.h
+objc/objc-api.h
+objc/objc-list.h
+objc/objc-parse.c
+objc/objc.h
+objc/objects.c
+objc/runtime.h
+objc/sarray.c
+objc/sarray.h
+objc/selector.c
+objc/sendmsg.c
+objc/thr-decosf1.c
+objc/thr-irix.c
+objc/thr-mach.c
+objc/thr-os2.c
+objc/thr-posix.c
+objc/thr-pthreads.c
+objc/thr-single.c
+objc/thr-solaris.c
+objc/thr-win32.c
+objc/thr.c
+objc/thr.h
+objc/typedstream.h
+obstack.c
+obstack.h
+optabs.c
+output.h
+pcp.h
+pexecute.c
+#po/cat-id-tbl.c contains the translation tables themselves
+prefix.c
+print-rtl.c
+print-tree.c
+profile.c
+protoize.c
+pself.c
+pself1.c
+pself2.c
+pself3.c
+real.c
+real.h
+recog.c
+recog.h
+reg-stack.c
+regclass.c
+regmove.c
+regs.h
+reload.c
+reload.h
+reload1.c
+reorg.c
+rtl.c
+rtl.h
+rtlanal.c
+#scan-decls.c is used only by GCC maintainers and installers
+#scan.c is used only by GCC maintainers and installers
+scan.h
+sched.c
+sdbout.c
+stack.h
+stmt.c
+stor-layout.c
+stupid.c
+sys-protos.h
+sys-types.h
+toplev.c
+tree.c
+tree.h
+typeclass.h
+unprotoize.c
+unroll.c
+varasm.c
+version.c
+xcoffout.c
+xcoffout.h
diff --git a/gcc/po/en_UK.po b/gcc/po/en_UK.po
new file mode 100644 (file)
index 0000000..829b7b5
--- /dev/null
@@ -0,0 +1,491 @@
+# British English messages for GNU CC
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Paul Eggert <eggert@twinsun.com>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cc 2.8.1.19980813\n"
+"POT-Creation-Date: 1998-07-26 00:33-0700\n"
+"PO-Revision-Date: 1998-09-27 21:34-0700\n"
+"Last-Translator: Paul Eggert <eggert@twinsun.com>\n"
+"Language-Team: English <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=us-ascii\n"
+"Content-Transfer-Encoding: 7bit\n"
+
+#: c-common.c:643
+msgid "unrecognized format specifier"
+msgstr "unrecognised format specifier"
+
+#: c-common.c:659
+#, c-format
+msgid "`%s' is an unrecognized format function type"
+msgstr "`%s' is an unrecognised format function type"
+
+#: c-decl.c:3673
+#, c-format
+msgid "typedef `%s' is initialized"
+msgstr "typedef `%s' is initialised"
+
+#: c-decl.c:3680
+#, c-format
+msgid "function `%s' is initialized like a variable"
+msgstr "function `%s' is initialised like a variable"
+
+#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
+#: c-decl.c:3687
+#, c-format
+msgid "parameter `%s' is initialized"
+msgstr "parameter `%s' is initialised"
+
+#: c-decl.c:3702 c-typeck.c:4924
+msgid "variable-sized object may not be initialized"
+msgstr "variable-sized object may not be initialised"
+
+#: c-decl.c:3708
+#, c-format
+msgid "variable `%s' has initializer but incomplete type"
+msgstr "variable `%s' has initialiser but incomplete type"
+
+#: c-decl.c:3726
+#, c-format
+msgid "declaration of `%s' has `extern' and is initialized"
+msgstr "declaration of `%s' has `extern' and is initialised"
+
+#: c-decl.c:3865
+#, c-format
+msgid "initializer fails to determine size of `%s'"
+msgstr "initialiser fails to determine size of `%s'"
+
+#: c-decl.c:4626 cp/decl.c:8536
+#, c-format
+msgid "`%s' initialized and declared `extern'"
+msgstr "`%s' initialised and declared `extern'"
+
+#: c-decl.c:4628 cp/decl.c:8539
+#, c-format
+msgid "`%s' has both `extern' and initializer"
+msgstr "`%s' has both `extern' and initialiser"
+
+#: c-lex.c:406 cp/lex.c:2158
+msgid "stray '\\' in program"
+msgstr "stray '\\' in programme"
+
+#: c-lex.c:859
+msgid "unrecognized text at end of #line"
+msgstr "unrecognised text at end of #line"
+
+#: c-parse.y:1106 objc-parse.y:1212
+msgid "ANSI C forbids empty initializer braces"
+msgstr "ANSI C forbids empty initialiser braces"
+
+#: c-typeck.c:4544
+msgid "initializer for static variable is not constant"
+msgstr "initialiser for static variable is not constant"
+
+#: c-typeck.c:4550
+msgid "initializer for static variable uses complicated arithmetic"
+msgstr "initialiser for static variable uses complicated arithmetic"
+
+#: c-typeck.c:4558
+msgid "aggregate initializer is not constant"
+msgstr "aggregate initialiser is not constant"
+
+#: c-typeck.c:4560
+msgid "aggregate initializer uses complicated arithmetic"
+msgstr "aggregate initialiser uses complicated arithmetic"
+
+#: c-typeck.c:4724 c-typeck.c:4740 c-typeck.c:4756
+#, c-format
+msgid "(near initialization for `%s')"
+msgstr "(near initialisation for `%s')"
+
+#: c-typeck.c:4804 cp/typeck2.c:787
+msgid "char-array initialized from wide string"
+msgstr "char-array initialised from wide string"
+
+#: c-typeck.c:4811 cp/typeck2.c:794
+msgid "int-array initialized from non-wide string"
+msgstr "int-array initialised from non-wide string"
+
+#: c-typeck.c:4828 cp/typeck2.c:815
+msgid "initializer-string for array of chars is too long"
+msgstr "initialiser-string for array of chars is too long"
+
+#: c-typeck.c:4855
+msgid "array initialized from non-constant array expression"
+msgstr "array initialised from non-constant array expression"
+
+#: c-typeck.c:4872 c-typeck.c:4874 c-typeck.c:4880 c-typeck.c:4907
+#: c-typeck.c:6107
+msgid "initializer element is not constant"
+msgstr "initialiser element is not constant"
+
+#: c-typeck.c:4886 c-typeck.c:4913 c-typeck.c:6113
+msgid "initializer element is not computable at load time"
+msgstr "initialiser element is not computable at load time"
+
+#: c-typeck.c:4902
+msgid "initialization"
+msgstr "initialisation"
+
+#: c-typeck.c:4950 c-typeck.c:4966 cp/typeck2.c:893
+msgid "invalid initializer"
+msgstr "invalid initialiser"
+
+#: c-typeck.c:5444
+msgid "extra brace group at end of initializer"
+msgstr "extra brace group at end of initialiser"
+
+#: c-typeck.c:5456
+msgid "missing braces around initializer"
+msgstr "missing braces around initialiser"
+
+#: c-typeck.c:5486
+msgid "braces around scalar initializer"
+msgstr "braces around scalar initialiser"
+
+#: c-typeck.c:5560
+msgid "empty braces in initializer"
+msgstr "empty braces in initialiser"
+
+#: c-typeck.c:5624
+msgid "empty scalar initializer"
+msgstr "empty scalar initialiser"
+
+#: c-typeck.c:5629
+msgid "extra elements in scalar initializer"
+msgstr "extra elements in scalar initialiser"
+
+#: c-typeck.c:5763 c-typeck.c:5765
+msgid "nonconstant array index in initializer"
+msgstr "nonconstant array index in initialiser"
+
+#: c-typeck.c:5767
+msgid "array index in non-array initializer"
+msgstr "array index in non-array initialiser"
+
+#: c-typeck.c:5769
+msgid "duplicate array index in initializer"
+msgstr "duplicate array index in initialiser"
+
+#: c-typeck.c:5776
+msgid "empty index range in initializer"
+msgstr "empty index range in initialiser"
+
+#: c-typeck.c:5780
+msgid "ANSI C forbids specifying element to initialize"
+msgstr "ANSI C forbids specifying element to initialise"
+
+#: c-typeck.c:5810
+#, c-format
+msgid "unknown field `%s' specified in initializer"
+msgstr "unknown field `%s' specified in initialiser"
+
+#: c-typeck.c:5813
+#, c-format
+msgid "field `%s' already initialized"
+msgstr "field `%s' already initialised"
+
+#: c-typeck.c:5819
+msgid "ANSI C forbids specifying structure member to initialize"
+msgstr "ANSI C forbids specifying structure member to initialise"
+
+#: c-typeck.c:6129
+msgid "duplicate initializer"
+msgstr "duplicate initialiser"
+
+#: c-typeck.c:6475 c-typeck.c:6510
+msgid "excess elements in struct initializer"
+msgstr "excess elements in struct initialiser"
+
+#: c-typeck.c:6574
+msgid "excess elements in union initializer"
+msgstr "excess elements in union initialiser"
+
+#: c-typeck.c:6648 c-typeck.c:6659
+msgid "excess elements in array initializer"
+msgstr "excess elements in array initialiser"
+
+#: c-typeck.c:6710
+msgid "excess elements in scalar initializer"
+msgstr "excess elements in scalar initialiser"
+
+#: cccp.c:2708
+msgid "preprocessing directive not recognized within macro arg"
+msgstr "preprocessing directive not recognised within macro arg"
+
+#: config/h8300/h8300.c:2948 config/h8300/h8300.c:2960
+msgid "Only initialized variables can be placed into the 8-bit area."
+msgstr "Only initialised variables can be placed into the 8-bit area."
+
+#: config/nextstep.c:70
+msgid "optimization turned on"
+msgstr "optimisation turned on"
+
+#: config/nextstep.c:76
+msgid "optimization turned off"
+msgstr "optimisation turned off"
+
+#: config/nextstep.c:91
+msgid "optimization level restored"
+msgstr "optimisation level restored"
+
+#: cp/class.c:4897
+#, c-format
+msgid "language string `\"%s\"' not recognized"
+msgstr "language string `\"%s\"' not recognised"
+
+#: cp/decl.c:6372
+msgid "assignment (not initialization) in declaration"
+msgstr "assignment (not initialisation) in declaration"
+
+#: cp/decl.c:8913
+#, c-format
+msgid "can't initialize friend function `%s'"
+msgstr "can't initialise friend function `%s'"
+
+#: cp/decl.c:9385
+msgid "typedef declaration includes an initializer"
+msgstr "typedef declaration includes an initialiser"
+
+#: cp/decl2.c:1609
+msgid "function declarations cannot have initializers in signature"
+msgstr "function declarations cannot have initialisers in signature"
+
+#: cp/decl2.c:1655
+msgid "field initializer is not constant"
+msgstr "field initialiser is not constant"
+
+#: cp/decl2.c:1697
+msgid "initializer invalid for static member with constructor"
+msgstr "initialiser invalid for static member with constructor"
+
+#: cp/decl2.c:1699
+msgid "(you really want to initialize it separately)"
+msgstr "(you really want to initialise it separately)"
+
+#: cp/init.c:213
+msgid "initializer list treated as compound expression"
+msgstr "initialiser list treated as compound expression"
+
+#: cp/init.c:945
+msgid "base class initializer specified, but no base class to initialize"
+msgstr "base class initialiser specified, but no base class to initialise"
+
+#: cp/init.c:951
+msgid "initializer for unnamed base class ambiguous"
+msgstr "initialiser for unnamed base class ambiguous"
+
+#: cp/init.c:979
+msgid "no base class to initialize"
+msgstr "no base class to initialise"
+
+#: cp/init.c:1010
+msgid "   will be re-ordered to precede member initializations"
+msgstr "   will be re-ordered to precede member initialisations"
+
+#. Handle bad initializers like:
+#. class COMPLEX {
+#. public:
+#. double re, im;
+#. COMPLEX(double r = 0.0, double i = 0.0) {re = r; im = i;};
+#. ~COMPLEX() {};
+#. };
+#.
+#. int main(int argc, char **argv) {
+#. COMPLEX zees(1.0, 0.0)[10];
+#. }
+#.
+#: cp/init.c:1199
+msgid "bad array initializer"
+msgstr "bad array initialiser"
+
+#: cp/init.c:1519 cp/typeck.c:6093
+msgid "return value from function receives multiple initializations"
+msgstr "return value from function receives multiple initialisations"
+
+#: cp/init.c:1536 cp/init.c:2590 cp/typeck2.c:601 cp/typeck2.c:1445
+msgid "initializer list being treated as compound expression"
+msgstr "initialiser list being treated as compound expression"
+
+#: cp/init.c:2593
+msgid "initializer list appears where operand should be used"
+msgstr "initialiser list appears where operand should be used"
+
+#: cp/init.c:3069
+msgid "initialization of array from dissimilar array type"
+msgstr "initialisation of array from dissimilar array type"
+
+#: cp/init.c:3083
+msgid "initializer ends prematurely"
+msgstr "initialiser ends prematurely"
+
+#: cp/init.c:3116
+msgid "cannot initialize multi-dimensional array with initializer"
+msgstr "cannot initialise multi-dimensional array with initialiser"
+
+#: parse.y:763
+msgid "no base initializers given following ':'"
+msgstr "no base initialisers given following ':'"
+
+#: parse.y:786
+msgid "base initializers not allowed for non-member functions"
+msgstr "base initialisers not allowed for non-member functions"
+
+#: parse.y:788
+msgid "only constructors take base initializers"
+msgstr "only constructors take base initialisers"
+
+#: parse.y:805 parse.y:811
+msgid "anachronistic old style base class initializer"
+msgstr "anachronistic old style base class initialiser"
+
+#: parse.y:1182
+msgid "ANSI C++ forbids initialization of new expression with `='"
+msgstr "ANSI C++ forbids initialisation of new expression with `='"
+
+#: parse.y:4029
+msgid "ANSI C++ forbids compound statements inside for initializations"
+msgstr "ANSI C++ forbids compound statements inside for initialisations"
+
+#: cp/pt.c:504
+msgid "Explicit specialization not preceded by `template <>'"
+msgstr "Explicit specialisation not preceded by `template <>'"
+
+#: cp/tree.c:1609
+msgid "initializer contains unrecognized tree code"
+msgstr "initialiser contains unrecognised tree code"
+
+#: cp/typeck.c:189
+msgid "argument list may not have an initializer list"
+msgstr "argument list may not have an initialiser list"
+
+#: cp/typeck.c:2643
+msgid "ANSI C++ forbids calling `main' from within program"
+msgstr "ANSI C++ forbids calling `main' from within programme"
+
+#: cp/typeck2.c:576
+msgid "comma expression used to initialize return value"
+msgstr "comma expression used to initialise return value"
+
+#: cp/typeck2.c:592
+msgid "cannot initialize arrays using this syntax"
+msgstr "cannot initialise arrays using this syntax"
+
+#: cp/typeck2.c:658
+msgid "ANSI C++ forbids non-constant aggregate initializer expressions"
+msgstr "ANSI C++ forbids non-constant aggregate initialiser expressions"
+
+#: cp/typeck2.c:741 cp/typeck2.c:757
+msgid "ANSI C++ forbids initializing array from array expression"
+msgstr "ANSI C++ forbids initialising array from array expression"
+
+#: cp/typeck2.c:759
+msgid "ANSI C++ forbids single nonscalar initializer with braces"
+msgstr "ANSI C++ forbids single nonscalar initialiser with braces"
+
+#: cp/typeck2.c:802
+msgid "ANSI C++ forbids string initializer except for `char' elements"
+msgstr "ANSI C++ forbids string initialiser except for `char' elements"
+
+#: cp/typeck2.c:834
+msgid "initializer for scalar variable requires one element"
+msgstr "initialiser for scalar variable requires one element"
+
+#: cp/typeck2.c:931
+msgid "aggregate has a partly bracketed initializer"
+msgstr "aggregate has a partly bracketed initialiser"
+
+#: cp/typeck2.c:974
+msgid "non-empty initializer for array of empty elements"
+msgstr "non-empty initialiser for array of empty elements"
+
+#: cp/typeck2.c:1003
+msgid "initializer list for object of class with virtual baseclasses"
+msgstr "initialiser list for object of class with virtual baseclasses"
+
+#: cp/typeck2.c:1009
+msgid "initializer list for object of class with baseclasses"
+msgstr "initialiser list for object of class with baseclasses"
+
+#: cp/typeck2.c:1015
+msgid "initializer list for object using virtual functions"
+msgstr "initialiser list for object using virtual functions"
+
+#: cp/typeck2.c:1076
+#, c-format
+msgid "uninitialized const member `%s'"
+msgstr "uninitialised const member `%s'"
+
+#: cp/typeck2.c:1080
+#, c-format
+msgid "member `%s' with uninitialized const fields"
+msgstr "member `%s' with uninitialised const fields"
+
+#: cp/typeck2.c:1083
+#, c-format
+msgid "member `%s' is uninitialized reference"
+msgstr "member `%s' is uninitialised reference"
+
+#: cp/typeck2.c:1108
+msgid "index value instead of field name in union initializer"
+msgstr "index value instead of field name in union initialiser"
+
+#: cp/typeck2.c:1120
+#, c-format
+msgid "no field `%s' in union being initialized"
+msgstr "no field `%s' in union being initialised"
+
+#: cp/typeck2.c:1164
+msgid "excess elements in aggregate initializer"
+msgstr "excess elements in aggregate initialiser"
+
+#: function.c:4809
+#, c-format
+msgid "`%s' might be used uninitialized in this function"
+msgstr "`%s' might be used uninitialised in this function"
+
+#: gcc.c:2268
+#, c-format
+msgid "Internal compiler error: program %s got fatal signal %d"
+msgstr "Internal compiler error: programme %s got fatal signal %d"
+
+#: gcc.c:4606
+#, c-format
+msgid "unrecognized option `-%s'"
+msgstr "unrecognised option `-%s'"
+
+#: gcc.c:4862
+#, c-format
+msgid "language %s not recognized"
+msgstr "language %s not recognised"
+
+#: gcov.c:449
+#, c-format
+msgid "Could not open program flow graph file %s.\n"
+msgstr "Could not open programme flow graph file %s.\n"
+
+#. --option
+#: getopt.c:755
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: unrecognised option `--%s'\n"
+
+#. +option or -option
+#: getopt.c:759
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: unrecognised option `%c%s'\n"
+
+#: tree.c:4771
+msgid "invalid initializer for bit string"
+msgstr "invalid initialiser for bit string"
+
+#: varasm.c:4086
+msgid "initializer for integer value is too complicated"
+msgstr "initialiser for integer value is too complicated"
+
+#: varasm.c:4092
+msgid "initializer for floating value is not a floating constant"
+msgstr "initialiser for floating value is not a floating constant"
diff --git a/gcc/prefix.c b/gcc/prefix.c
new file mode 100644 (file)
index 0000000..3ffda1a
--- /dev/null
@@ -0,0 +1,314 @@
+/* Utility to update paths from internal to external forms.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+GCC 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* This file contains routines to update a path, both to canonicalize
+   the directory format and to handle any prefix translation.
+
+   This file must be compiled with -DPREFIX= to specify the "prefix"
+   value used by configure.  If a filename does not begin with this
+   prefix, it will not be affected other than by directory canonicalization.
+
+   Each caller of 'update_path' may specify both a filename and
+   a translation prefix and consist of the name of the package that contains
+   the file ("@GCC", "@BINUTIL", "@GNU", etc).
+
+   If the prefix is not specified, the filename will only undergo
+   directory canonicalization.
+
+   If it is specified, the string given by PREFIX will be replaced
+   by the specified prefix (with a '@' in front unless the prefix begins
+   with a '$') and further translation will be done as follows
+   until none of the two conditions below are met:
+
+   1) If the filename begins with '@', the string between the '@' and
+   the end of the name or the first '/' or directory separator will
+   be considered a "key" and looked up as follows:
+
+   -- If this is a Win32 OS, then the Registry will be examined for
+      an entry of "key" in 
+
+      HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\
+
+      if found, that value will be used.
+
+   -- If not found (or not a Win32 OS), the environment variable
+      key_ROOT (the value of "key" concatenated with the constant "_ROOT")
+      is tried.  If that fails, then PREFIX (see above) is used.
+
+   2) If the filename begins with a '$', the rest of the string up
+   to the end or the first '/' or directory separator will be used
+   as an environment variable, whose value will be returned.
+
+   Once all this is done, any '/' will be converted to DIR_SEPARATOR,
+   if they are different. 
+
+   NOTE:  using resolve_keyed_path under Win32 requires linking with
+   advapi32.dll.  */
+
+
+#include "config.h"
+#include "gansidecl.h"
+#include "stdarg.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+static char *get_key_value     PROTO((char *));
+static char *translate_name    PROTO((char *));
+static char *concat            PVPROTO((char *, ...));
+static char *save_string       PROTO((char *, int));
+
+#ifdef _WIN32
+static char *lookup_key                PROTO((char *));
+static HKEY reg_key = (HKEY) INVALID_HANDLE_VALUE;
+#endif
+
+extern char *getenv ();
+
+/* Given KEY, as above, return its value.  */
+
+static char *
+get_key_value (key)
+     char *key;
+{
+  char *prefix = 0;
+
+#ifdef _WIN32
+  prefix = lookup_key (key);
+#endif
+
+  if (prefix == 0)
+    prefix = getenv (concat (key, "_ROOT", NULL_PTR));
+
+  if (prefix == 0)
+    prefix = PREFIX;
+
+  return prefix;
+}
+
+/* Concatenate a sequence of strings, returning the result.
+
+   This function is based on the one in libiberty.  */
+
+static char *
+concat VPROTO((char *first, ...))
+{
+  register int length;
+  register char *newstr;
+  register char *end;
+  register char *arg;
+  va_list args;
+#ifndef __STDC__
+  char *first;
+#endif
+
+  /* First compute the size of the result and get sufficient memory.  */
+
+  VA_START (args, first);
+#ifndef __STDC__
+  first = va_arg (args, char *);
+#endif
+
+  arg = first;
+  length = 0;
+
+  while (arg != 0)
+    {
+      length += strlen (arg);
+      arg = va_arg (args, char *);
+    }
+
+  newstr = (char *) malloc (length + 1);
+  va_end (args);
+
+  /* Now copy the individual pieces to the result string.  */
+
+  VA_START (args, first);
+#ifndef __STDC__
+  first = va_arg (args, char *);
+#endif
+
+  end = newstr;
+  arg = first;
+  while (arg != 0)
+    {
+      while (*arg)
+       *end++ = *arg++;
+      arg = va_arg (args, char *);
+    }
+  *end = '\000';
+  va_end (args);
+
+  return (newstr);
+}
+
+/* Return a copy of a string that has been placed in the heap.  */
+
+static char *
+save_string (s, len)
+     char *s;
+     int len;
+{
+  register char *result = (char *) malloc (len + 1);
+
+  bcopy (s, result, len);
+  result[len] = 0;
+  return result;
+}
+
+#ifdef _WIN32
+
+/* Look up "key" in the registry, as above.  */
+
+static char *
+lookup_key (key)
+     char *key;
+{
+  char *dst;
+  DWORD size;
+  DWORD type;
+  LONG res;
+
+  if (reg_key == (HKEY) INVALID_HANDLE_VALUE)
+    {
+      res = RegOpenKeyExA (HKEY_LOCAL_MACHINE, "SOFTWARE", 0,
+                          KEY_READ, &reg_key);
+
+      if (res == ERROR_SUCCESS)
+       res = RegOpenKeyExA (reg_key, "Free Software Foundation", 0,
+                            KEY_READ, &reg_key);
+
+      if (res != ERROR_SUCCESS)
+        {
+          reg_key = (HKEY) INVALID_HANDLE_VALUE;
+          return 0;
+        }
+    }
+
+  size = 32;
+  dst = (char *) malloc (size);
+
+  res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size);
+  if (res == ERROR_MORE_DATA && type == REG_SZ)
+    {
+      dst = (char *) realloc (dst, size);
+      res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size);
+    }
+
+  if (type != REG_SZ || res != ERROR_SUCCESS)
+    {
+      free (dst);
+      dst = 0;
+    }
+
+  return dst;
+}
+#endif
+
+/* If NAME starts with a '@' or '$', apply the translation rules above
+   and return a new name.  Otherwise, return the given name.  */
+
+static char *
+translate_name (name)
+     char *name;
+{
+  char code = name[0];
+  char *key, *prefix;
+  int keylen;
+
+  if (code != '@' && code != '$')
+    return name;
+
+  for (keylen = 0;
+       (name[keylen + 1] != 0 && name[keylen + 1] != '/'
+#ifdef DIR_SEPARATOR
+       && name[keylen + 1] != DIR_SEPARATOR
+#endif
+       );
+       keylen++)
+    ;
+
+  key = alloca (keylen + 1);
+  strncpy (key, &name[1], keylen);
+  key[keylen] = 0;
+
+  name = &name[keylen + 1];
+
+  if (code == '@')
+    {
+      prefix = get_key_value (key);
+      if (prefix == 0)
+       prefix = PREFIX;
+    }
+  else
+    {
+      prefix = getenv (key);
+      if (prefix == 0)
+       prefix = concat ("$", key, NULL_PTR);
+    }
+
+  /* Remove any trailing directory separator from what we got.  */
+  if (prefix[strlen (prefix) - 1] == '/'
+#ifdef DIR_SEPARATOR
+      || prefix[strlen (prefix) - 1] == DIR_SEPARATOR
+#endif
+      )
+    {
+      prefix = save_string (prefix, strlen (prefix));
+      prefix[strlen (prefix) - 1] = 0;
+    }
+
+  return concat (prefix, name, NULL_PTR);
+}
+
+/* Update PATH using KEY if PATH starts with PREFIX.  */
+
+char *
+update_path (path, key)
+     char *path;
+     char *key;
+{
+  if (! strncmp (path, PREFIX, strlen (PREFIX)) && key != 0)
+    {
+      if (key[0] != '$')
+       key = concat ("@", key, NULL_PTR);
+
+      path = concat (key, &path[strlen (PREFIX)], NULL_PTR);
+
+      while (path[0] == '@' || path[0] == '$')
+       path = translate_name (path);
+    }
+      
+#ifdef DIR_SEPARATOR
+  if (DIR_SEPARATOR != '/')
+    {
+      int i;
+      int len = strlen (path);
+
+      path = save_string (path, len);
+      for (i = 0; i < len; i++)
+       if (path[i] == '/')
+         path[i] = DIR_SEPARATOR;
+    }
+#endif
+
+  return path;
+}
diff --git a/gcc/regmove.c b/gcc/regmove.c
new file mode 100644 (file)
index 0000000..639059b
--- /dev/null
@@ -0,0 +1,983 @@
+/* Move registers around to reduce number of move instructions needed.
+   Copyright (C) 1987, 88, 89, 92-5, 1996, 1997 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+
+/* This module looks for cases where matching constraints would force
+   an instruction to need a reload, and this reload would be a register
+   to register move.  It then attempts to change the registers used by the
+   instruction to avoid the move instruction.  */
+
+#include "config.h"
+#ifdef __STDC__
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+/* Must precede rtl.h for FFS.  */
+#include <stdio.h>
+
+#include "rtl.h"
+#include "insn-config.h"
+#include "recog.h"
+#include "output.h"
+#include "reload.h"
+#include "regs.h"
+
+static int stable_but_for_p PROTO((rtx, rtx, rtx));
+
+#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) \
+    || defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
+
+/* INC_INSN is an instruction that adds INCREMENT to REG.
+   Try to fold INC_INSN as a post/pre in/decrement into INSN.
+   Iff INC_INSN_SET is nonzero, inc_insn has a destination different from src.
+   Return nonzero for success.  */
+static int
+try_auto_increment (insn, inc_insn, inc_insn_set, reg, increment, pre)
+     rtx reg, insn, inc_insn ,inc_insn_set;
+     HOST_WIDE_INT increment;
+     int pre;
+{
+  enum rtx_code inc_code;
+
+  rtx pset = single_set (insn);
+  if (pset)
+    {
+      /* Can't use the size of SET_SRC, we might have something like
+        (sign_extend:SI (mem:QI ...  */
+      rtx use = find_use_as_address (pset, reg, 0);
+      if (use != 0 && use != (rtx) 1)
+       {
+         int size = GET_MODE_SIZE (GET_MODE (use));
+         if (0
+#ifdef HAVE_POST_INCREMENT
+             || (pre == 0 && (inc_code = POST_INC, increment == size))
+#endif
+#ifdef HAVE_PRE_INCREMENT
+             || (pre == 1 && (inc_code = PRE_INC, increment == size))
+#endif
+#ifdef HAVE_POST_DECREMENT
+             || (pre == 0 && (inc_code = POST_DEC, increment == -size))
+#endif
+#ifdef HAVE_PRE_DECREMENT
+             || (pre == 1 && (inc_code = PRE_DEC, increment == -size))
+#endif
+          )
+            {
+              if (inc_insn_set)
+                validate_change
+                  (inc_insn, 
+                   &SET_SRC (inc_insn_set),
+                  XEXP (SET_SRC (inc_insn_set), 0), 1);
+              validate_change (insn, &XEXP (use, 0),
+                               gen_rtx (inc_code,
+                                        Pmode,
+                                        reg), 1);
+              if (apply_change_group ())
+                {
+                  REG_NOTES (insn)
+                    = gen_rtx (EXPR_LIST, REG_INC,
+                               reg, REG_NOTES (insn));
+                  if (! inc_insn_set)
+                    {
+                      PUT_CODE (inc_insn, NOTE);
+                      NOTE_LINE_NUMBER (inc_insn) = NOTE_INSN_DELETED;
+                      NOTE_SOURCE_FILE (inc_insn) = 0;
+                    }
+                 return 1;
+                }
+            }
+        }
+    }
+  return 0;
+}
+#endif  /* defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) */
+
+void
+regmove_optimize (f, nregs, regmove_dump_file)
+     rtx f;
+     int nregs;
+     FILE *regmove_dump_file;
+{
+#ifdef REGISTER_CONSTRAINTS
+  rtx insn;
+  int matches[MAX_RECOG_OPERANDS][MAX_RECOG_OPERANDS];
+  int modified[MAX_RECOG_OPERANDS];
+  int early_clobber[MAX_RECOG_OPERANDS];
+  int commutative;
+  int pass;
+
+  /* A forward/backward pass.  Replace output operands with input operands.  */
+
+  for (pass = 0; pass < 2; pass++)
+    {
+      if (regmove_dump_file)
+       fprintf (regmove_dump_file, "Starting %s pass...\n",
+                pass ? "backward" : "forward");
+
+      for (insn = pass ? get_last_insn () : f; insn;
+          insn = pass ? PREV_INSN (insn) : NEXT_INSN (insn))
+       {
+         if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
+           {
+             int insn_code_number = recog_memoized (insn);
+             int operand_number, match_number;
+             
+             if (insn_code_number < 0)
+               continue;
+    
+             insn_extract (insn);
+             if (! constrain_operands (insn_code_number, 0))
+               continue;
+             
+             commutative = -1;
+    
+             /* Must initialize this before the loop, because the code for
+                the commutative case may set matches for operands other than
+                the current one.  */
+             bzero (matches, sizeof (matches));
+    
+             for (operand_number = 0;
+                  operand_number < insn_n_operands[insn_code_number];
+                  operand_number++)
+               {
+                 int output_operand = 0;
+                 int matching_operand = operand_number;
+                 char *p, c;
+                 int i = 0;
+    
+                 modified[operand_number] = 0;
+                 early_clobber[operand_number] = 0;
+    
+                 p = insn_operand_constraint[insn_code_number][operand_number];
+
+                 if (*p == '=')
+                   modified[operand_number] = 2;
+                 else if (*p == '+')
+                   modified[operand_number] = 1;
+
+                 for (;*p && i < which_alternative; p++)
+                   if (*p == ',')
+                     i++;
+    
+                 while ((c = *p++) != '\0' && c != ',')
+                   switch (c)
+                     {
+                     case '=':
+                       break;
+                     case '+':
+                       break;
+                     case '&':
+                       early_clobber[operand_number] = 1;
+                       break;
+                     case '%':
+                       commutative = operand_number;
+                       break;
+                     case '0': case '1': case '2': case '3': case '4':
+                     case '5': case '6': case '7': case '8': case '9':
+                       c -= '0';
+                       matches[operand_number][c] = 1;
+                       if (commutative >= 0)
+                         {
+                           if (c == commutative || c == commutative + 1)
+                             {
+                               int other = c + (c == commutative ? 1 : -1);
+                               matches[operand_number][other] = 1;
+                             }
+                           if (operand_number == commutative
+                               || operand_number == commutative + 1)
+                             {
+                               int other = (operand_number
+                                            + (operand_number == commutative
+                                               ? 1 : -1));
+                               matches[other][c] = 1;
+                             }
+                         }
+                       break;
+                     }
+               }
+    
+             /* Now scan through the operands looking for a source operand
+                which is supposed to match the destination operand.
+                Then scan forward for an instruction which uses the dest
+                operand.
+                If it dies there, then replace the dest in both operands with
+                the source operand.  */
+    
+             for (operand_number = 0;
+                  operand_number < insn_n_operands[insn_code_number];
+                  operand_number++)
+               {
+                 for (match_number = 0;
+                      match_number < insn_n_operands[insn_code_number];
+                      match_number++)
+                   {
+                     rtx set, p, src, dst, src_subreg;
+                     rtx post_inc = 0, post_inc_set = 0, search_end = 0;
+                     rtx src_note, dst_note;
+                     int success = 0;
+                     int num_calls = 0;
+                     enum rtx_code code = NOTE;
+                     HOST_WIDE_INT insn_const, newconst;
+                     rtx overlap = 0; /* need to move insn ? */
+    
+                     /* Nothing to do if the two operands aren't supposed to
+                        match.  */
+                     if (matches[operand_number][match_number] == 0)
+                       continue;
+    
+                     src = recog_operand[operand_number];
+                     dst = recog_operand[match_number];
+    
+                     if (GET_CODE (src) != REG
+                         || REGNO (src) < FIRST_PSEUDO_REGISTER)
+                       continue;
+    
+                     src_subreg = src;
+                     if (GET_CODE (dst) == SUBREG
+                         && GET_MODE_SIZE (GET_MODE (dst))
+                            >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (dst))))
+                       {
+                         src_subreg
+                           = gen_rtx(SUBREG,  GET_MODE (SUBREG_REG (dst)),
+                                     src, SUBREG_WORD (dst));
+                         dst = SUBREG_REG (dst);
+                       }
+                     if (GET_CODE (dst) != REG
+                         || REGNO (dst) < FIRST_PSEUDO_REGISTER)
+                       continue;
+    
+                     /* If the operands already match, then there is nothing
+                        to do.  */
+                     if (operands_match_p (src, dst))
+                       continue;
+    
+                     set = single_set (insn);
+                     if (! set)
+                       continue;
+    
+                     /* operand_number/src must be a read-only operand, and
+                        match_operand/dst must be a write-only operand.  */
+                     if (modified[match_number] != 2)
+                       continue;
+    
+                     if (early_clobber[match_number] == 1)
+                       continue;
+    
+                     if (modified[operand_number] != 0)
+                       continue;
+    
+                     /* Make sure match_operand is the destination.  */
+                     if (recog_operand[match_number] != SET_DEST (set))
+                       continue;
+                 
+                     src_note = find_reg_note (insn, REG_DEAD, src);
+    
+                     if (! src_note)
+                       {
+                         /* Look for (set (regX) (op regA constX))
+                                     (set (regY) (op regA constY))
+                            and change that to
+                                     (set (regA) (op regA constX)).
+                                     (set (regY) (op regA constY-constX)).
+                            This works for add and shift operations, if
+                            regA is dead after or set by the second insn.  */
+
+                         code = GET_CODE (SET_SRC (set));
+                         if ((code == PLUS || code == LSHIFTRT
+                              || code == ASHIFT || code == ASHIFTRT)
+                             && XEXP (SET_SRC (set), 0) == src
+                             && (GET_CODE (XEXP (SET_SRC (set), 1))
+                                 == CONST_INT))
+                           insn_const = INTVAL (XEXP (SET_SRC (set), 1));
+                         else if (! stable_but_for_p (SET_SRC (set), src, dst))
+                           continue;
+                         else
+                           /* We might find a src_note while scanning.  */
+                           code = NOTE;
+                       }
+
+                     if (regmove_dump_file)
+                       fprintf (regmove_dump_file,
+                                "Could fix operand %d of insn %d matching operand %d.\n",
+                                operand_number, INSN_UID (insn), match_number);
+    
+                     /* ??? If src is set once, and is set equal to a
+                        constant, then do not use it for this optimization,
+                        as this would make it no longer equivalent to a
+                        constant?  */
+    
+                     /* Scan forward to find the next instruction that
+                        uses the output operand.  If the operand dies here,
+                        then replace it in both instructions with
+                        operand_number.  */
+    
+                     for (p = NEXT_INSN (insn); p; p = NEXT_INSN (p))
+                       {
+                         if (GET_CODE (p) == CODE_LABEL
+                             || GET_CODE (p) == JUMP_INSN
+                             || (GET_CODE (p) == NOTE
+                                 && ((NOTE_LINE_NUMBER (p)
+                                      == NOTE_INSN_LOOP_BEG)
+                                     || (NOTE_LINE_NUMBER (p)
+                                         == NOTE_INSN_LOOP_END))))
+                           break;
+    
+                         if (GET_RTX_CLASS (GET_CODE (p)) != 'i')
+                           continue;
+    
+                         if (reg_set_p (src, p) || reg_set_p (dst, p)
+                             || (GET_CODE (PATTERN (p)) == USE
+                                 && reg_overlap_mentioned_p (src,
+                                                             XEXP (PATTERN (p),
+                                                             0))))
+                           break;
+    
+                         /* See if all of DST dies in P.  This test is
+                            slightly more conservative than it needs to be.  */
+                         if ((dst_note
+                               = find_regno_note (p, REG_DEAD, REGNO (dst)))
+                             && (GET_MODE (XEXP (dst_note, 0))
+                                 == GET_MODE (dst)))
+                           {
+                             if (! src_note)
+                               {
+                                 rtx q;
+                                 rtx set2;
+    
+                                 /* If an optimization is done, the value
+                                    of SRC while P is executed will be
+                                    changed.  Check that this is OK.  */
+                                 if (reg_overlap_mentioned_p (src,
+                                                              PATTERN (p)))
+                                   break;
+                                 for (q = p; q; q = NEXT_INSN (q))
+                                   {
+                                     if (GET_CODE (q) == CODE_LABEL
+                                         || GET_CODE (q) == JUMP_INSN
+                                         || (GET_CODE (q) == NOTE
+                                             && ((NOTE_LINE_NUMBER (q)
+                                                  == NOTE_INSN_LOOP_BEG)
+                                                 || (NOTE_LINE_NUMBER (q)
+                                                     == NOTE_INSN_LOOP_END))))
+                                       {
+                                         q = 0;
+                                         break;
+                                       }
+                                     if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
+                                       continue;
+                                     if (reg_overlap_mentioned_p (src,
+                                                                  PATTERN (q))
+                                         || reg_set_p (src, q))
+                                       break;
+                                   }
+                                 if (q)
+                                   set2 = single_set (q);
+                                 if (! q || ! set2
+                                     || GET_CODE (SET_SRC (set2)) != code
+                                     || XEXP (SET_SRC (set2), 0) != src
+                                     || (GET_CODE (XEXP (SET_SRC (set2), 1))
+                                         != CONST_INT)
+                                     || (SET_DEST (set2) != src
+                                         && !find_reg_note (q, REG_DEAD, src)))
+                                   {
+                                     /* If this is a PLUS, we can still save
+                                        a register by doing
+                                        src += insn_const;
+                                        P;
+                                        src -= insn_const; .
+                                        This also gives opportunities for
+                                        subsequent optimizations in the
+                                        backward pass, so do it there.  */
+                                     if (code == PLUS && pass == 1
+#ifdef HAVE_cc0
+                                         /* We man not emit an insn directly
+                                            after P if the latter sets CC0.  */
+                                         && ! sets_cc0_p (PATTERN (p))
+#endif
+                                         )
+
+                                       {
+                                         search_end = q;
+                                         q = insn;
+                                         set2 = set;
+                                         newconst = -insn_const;
+                                         code = MINUS;
+                                       }
+                                     else
+                                       break;
+                                   }
+                                 else
+                                   {
+                                     newconst
+                                       = (INTVAL (XEXP (SET_SRC (set2), 1))
+                                          - insn_const);
+                                     /* Reject out of range shifts.  */
+                                     if (code != PLUS
+                                         && (newconst < 0
+                                             || (newconst
+                                                 >= GET_MODE_BITSIZE (GET_MODE (SET_SRC (set2))))))
+                                       break;
+                                     if (code == PLUS)
+                                       {
+                                         post_inc = q;
+                                         if (SET_DEST (set2) != src)
+                                           post_inc_set = set2;
+                                       }
+                                   }
+                                 /* We use 1 as last argument to
+                                    validate_change so that all changes
+                                    are accepted or rejected together by
+                                    apply_change_group when it is called
+                                    by validate_replace_rtx .  */
+                                 validate_change (q, &XEXP (SET_SRC (set2), 1),
+                                                  GEN_INT (newconst), 1);
+                               }
+                             validate_change (insn,
+                                              recog_operand_loc[match_number],
+                                              src, 1);
+                             if (validate_replace_rtx (dst, src_subreg, p))
+                               success = 1;
+                             break;
+                           }
+    
+                         if (reg_overlap_mentioned_p (dst, PATTERN (p)))
+                           break;
+                         if (! src_note
+                             && reg_overlap_mentioned_p (src, PATTERN (p)))
+                           {
+                             /* INSN was already checked to be movable when
+                                we found no REG_DEAD note for src on it.  */
+                             overlap = p;
+                             src_note = find_reg_note (p, REG_DEAD, src);
+                           }
+    
+                         /* If we have passed a call instruction, and the
+                            pseudo-reg SRC is not already live across a call,
+                            then don't perform the optimization.  */
+                         if (GET_CODE (p) == CALL_INSN)
+                           {
+                             num_calls++;
+    
+                             if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
+                               break;
+                           }
+                       }
+    
+                     if (success)
+                       {
+                         /* Remove the death note for DST from P.  */
+                         remove_note (p, dst_note);
+                         if (code == MINUS)
+                           {
+                             post_inc
+                               = emit_insn_after (copy_rtx (PATTERN (insn)),
+                                                  p);
+#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
+                             if (search_end
+                                 && try_auto_increment (search_end, post_inc,
+                                                        0, src, newconst, 1))
+                               post_inc = 0;
+#endif
+                             validate_change (insn, &XEXP (SET_SRC (set), 1),
+                                              GEN_INT (insn_const), 0);
+                             REG_N_SETS (REGNO (src))++;
+                           }
+                         if (overlap)
+                           {
+                             /* The lifetime of src and dest overlap,
+                                but we can change this by moving insn.  */
+                             rtx pat = PATTERN (insn);
+                             if (src_note)
+                               remove_note (overlap, src_note);
+#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)
+                             if (code == PLUS
+                                 && try_auto_increment (overlap, insn, 0,
+                                                        src, insn_const, 0))
+                               insn = overlap;
+                             else
+#endif
+                               {
+                                 emit_insn_after_with_line_notes
+                                   (pat, PREV_INSN (p), insn);
+                                 PUT_CODE (insn, NOTE);
+                                 NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
+                                 NOTE_SOURCE_FILE (insn) = 0;
+                                 /* emit_insn_after_with_line_notes
+                                    has no return value, so search
+                                    for the new insn.  */
+                                 for (insn = p; PATTERN (insn) != pat; )
+                                   insn = PREV_INSN (insn);
+                               }
+                           }
+                         /* Sometimes we'd generate src = const; src += n;
+                            if so, replace the instruction that set src
+                            in the first place.  */
+                       
+                         if (! overlap && (code == PLUS || code == MINUS))
+                           {
+                             rtx note
+                               = find_reg_note (insn, REG_EQUAL, NULL_RTX);
+                             rtx q, set2;
+                             int num_calls2 = 0;
+
+                             if (note && CONSTANT_P (XEXP (note, 0)))
+                               {
+                                 for (q = PREV_INSN (insn); q;
+                                      q = PREV_INSN(q))
+                                   {
+                                     if (GET_CODE (q) == JUMP_INSN)
+                                       {
+                                         q = 0;
+                                         break;
+                                       }
+                                     if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
+                                       continue;
+                                     if (reg_set_p (src, q))
+                                       {
+                                         set2 = single_set (q);
+                                         break;
+                                       }
+                                     if (reg_overlap_mentioned_p (src,
+                                         PATTERN (q)))
+                                       {
+                                         q = 0;
+                                         break;
+                                       }
+                                     if (GET_CODE (p) == CALL_INSN)
+                                       num_calls2++;
+                                   }
+                                 if (q && set2 && SET_DEST (set2) == src
+                                     && CONSTANT_P (SET_SRC (set2))
+                                     && validate_change (insn, &SET_SRC (set),
+                                                         XEXP (note, 0), 0))
+                                   {
+                                     PUT_CODE (q, NOTE);
+                                     NOTE_LINE_NUMBER (q) = NOTE_INSN_DELETED;
+                                     NOTE_SOURCE_FILE (q) = 0;
+                                     REG_N_SETS (REGNO (src))--;
+                                     REG_N_CALLS_CROSSED (REGNO (src))
+                                       -= num_calls2;
+                                     insn_const = 0;
+                                   }
+                               }
+                           }
+                         if (0) ;
+#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
+                         else if ((code == PLUS || code == MINUS)
+                                  && insn_const
+                                  && try_auto_increment (p, insn, 0,
+                                                         src, insn_const, 1))
+                           insn = p;
+#endif
+#if defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT)
+                         else if (post_inc
+                                  && try_auto_increment (p, post_inc,
+                                                         post_inc_set, src,
+                                                         newconst, 0))
+                           post_inc = 0;
+#endif
+#if defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT)
+                         /* If post_inc still prevails, try to find an
+                            insn where it can be used as a pre-in/decrement.
+                            If code is MINUS, this was already tried.  */
+                         if (post_inc && code == PLUS
+                         /* Check that newconst is likely to be usable
+                            in a pre-in/decrement before starting the
+                            search.  */
+                             && (0
+#if defined (HAVE_PRE_INCREMENT)
+                                 || (newconst > 0 && newconst <= MOVE_MAX)
+#endif
+#if defined (HAVE_PRE_DECREMENT)
+                                 || (newconst < 0 && newconst >= -MOVE_MAX)
+#endif
+                                ) && exact_log2 (newconst))
+                           {
+                             rtx q, inc_dest;
+
+                             inc_dest
+                               = post_inc_set ? SET_DEST (post_inc_set) : src;
+                             for (q = post_inc; q = NEXT_INSN (q); )
+                               {
+                                 if (GET_CODE (q) == CODE_LABEL
+                                     || GET_CODE (q) == JUMP_INSN
+                                     || (GET_CODE (q) == NOTE
+                                         && ((NOTE_LINE_NUMBER (q)
+                                              == NOTE_INSN_LOOP_BEG)
+                                             || (NOTE_LINE_NUMBER (q)
+                                                 == NOTE_INSN_LOOP_END))))
+                                   break;
+                                 if (GET_RTX_CLASS (GET_CODE (q)) != 'i')
+                                   continue;
+                                 if (src != inc_dest
+                                     && (reg_overlap_mentioned_p (src,
+                                                                  PATTERN (q))
+                                         || reg_set_p (src, q)))
+                                   break;
+                                 if (reg_set_p (inc_dest, q))
+                                   break;
+                                 if (reg_overlap_mentioned_p (inc_dest,
+                                                              PATTERN (q)))
+                                   {
+                                     try_auto_increment (q, post_inc,
+                                                         post_inc_set,
+                                                         inc_dest,
+                                                         newconst, 1);
+                                     break;
+                                   }
+                               }
+                           }
+#endif /* defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) */
+                         /* Move the death note for DST to INSN if it is used
+                            there.  */
+                         if (reg_overlap_mentioned_p (dst, PATTERN (insn)))
+                           {
+                             XEXP (dst_note, 1) = REG_NOTES (insn);
+                             REG_NOTES (insn) = dst_note;
+                           }
+    
+                         if (src_note)
+                           {
+                             /* Move the death note for SRC from INSN to P.  */
+                             if (! overlap)
+                               remove_note (insn, src_note);
+                             XEXP (src_note, 1) = REG_NOTES (p);
+                             REG_NOTES (p) = src_note;
+    
+                             REG_N_CALLS_CROSSED (REGNO (src)) += num_calls;
+                           }
+    
+                         REG_N_SETS (REGNO (src))++;
+                         REG_N_SETS (REGNO (dst))--;
+    
+                         REG_N_CALLS_CROSSED (REGNO (dst)) -= num_calls;
+    
+                         /* ??? Must adjust reg_live_length, and reg_n_refs for
+                            both registers.  Must keep track of loop_depth in
+                            order to get reg_n_refs adjustment correct.  */
+    
+                         if (regmove_dump_file)
+                           fprintf (regmove_dump_file,
+                                    "Fixed operand %d of insn %d matching operand %d.\n",
+                                    operand_number, INSN_UID (insn),
+                                    match_number);
+    
+                         goto done_forwards;
+                       }
+                   }
+               }
+           done_forwards:
+             ;
+           }
+       }
+    }
+
+  /* A backward pass.  Replace input operands with output operands.  */
+
+  if (regmove_dump_file)
+    fprintf (regmove_dump_file, "Starting backward pass...\n");
+
+  for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
+    {
+      if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
+       {
+         int insn_code_number = recog_memoized (insn);
+         int operand_number, match_number;
+         
+         if (insn_code_number < 0)
+           continue;
+
+         insn_extract (insn);
+         if (! constrain_operands (insn_code_number, 0))
+           continue;
+         
+         commutative = -1;
+
+         /* Must initialize this before the loop, because the code for
+            the commutative case may set matches for operands other than
+            the current one.  */
+         bzero (matches, sizeof (matches));
+
+         for (operand_number = 0;
+              operand_number < insn_n_operands[insn_code_number];
+              operand_number++)
+           {
+             int output_operand = 0;
+             int matching_operand = operand_number;
+             char *p, c;
+             int i = 0;
+
+             modified[operand_number] = 0;
+             early_clobber[operand_number] = 0;
+
+             p = insn_operand_constraint[insn_code_number][operand_number];
+
+             if (*p == '=')
+               modified[operand_number] = 2;
+             else if (*p == '+')
+               modified[operand_number] = 1;
+
+             for (; *p && i < which_alternative; p++)
+               if (*p == ',')
+                 i++;
+
+             while ((c = *p++) != '\0' && c != ',')
+               switch (c)
+                 {
+                 case '=':
+                   break;
+                 case '+':
+                   break;
+                 case '&':
+                   early_clobber[operand_number] = 1;
+                   break;
+                 case '%':
+                   commutative = operand_number;
+                   break;
+                 case '0': case '1': case '2': case '3': case '4':
+                 case '5': case '6': case '7': case '8': case '9':
+                   c -= '0';
+                   matches[c][operand_number] = 1;
+                   if (commutative >= 0)
+                     {
+                       if (c == commutative || c == commutative + 1)
+                         {
+                           int other = c + (c == commutative ? 1 : -1);
+                           matches[other][operand_number] = 1;
+                         }
+                       if (operand_number == commutative
+                           || operand_number == commutative + 1)
+                         {
+                           int other = (operand_number
+                                        + (operand_number == commutative
+                                           ? 1 : -1));
+                           matches[c][other] = 1;
+                         }
+                     }
+                   break;
+                 }
+           }
+
+         /* Now scan through the operands looking for a destination operand
+            which is supposed to match a source operand.
+            Then scan backward for an instruction which sets the source
+            operand.  If safe, then replace the source operand with the
+            dest operand in both instructions.  */
+
+         for (operand_number = 0;
+              operand_number < insn_n_operands[insn_code_number];
+              operand_number++)
+           {
+             for (match_number = 0;
+                  match_number < insn_n_operands[insn_code_number];
+                  match_number++)
+               {
+                 rtx set, p, src, dst;
+                 rtx src_note, dst_note;
+                 int success = 0;
+                 int num_calls = 0;
+
+                 /* Nothing to do if the two operands aren't supposed to
+                    match.  */
+                 if (matches[operand_number][match_number] == 0)
+                   continue;
+
+                 dst = recog_operand[operand_number];
+                 src = recog_operand[match_number];
+
+                 if (GET_CODE (src) != REG
+                     || REGNO (src) < FIRST_PSEUDO_REGISTER)
+                   continue;
+
+                 if (GET_CODE (dst) != REG
+                     || REGNO (dst) < FIRST_PSEUDO_REGISTER)
+                   continue;
+
+                 /* If the operands already match, then there is nothing
+                    to do.  */
+                 if (operands_match_p (src, dst))
+                   continue;
+
+                 set = single_set (insn);
+                 if (! set)
+                   continue;
+
+                 /* operand_number/dst must be a write-only operand, and
+                    match_operand/src must be a read-only operand.  */
+                 if (modified[match_number] != 0)
+                   continue;
+
+                 if (early_clobber[operand_number] == 1)
+                   continue;
+
+                 if (modified[operand_number] != 2)
+                   continue;
+
+                 /* Make sure operand_number is the destination.  */
+                 if (recog_operand[operand_number] != SET_DEST (set))
+                   continue;
+             
+                 if (! (src_note = find_reg_note (insn, REG_DEAD, src)))
+                   continue;
+
+                 /* Can not modify an earlier insn to set dst if this insn
+                    uses an old value in the source.  */
+                 if (reg_overlap_mentioned_p (dst, SET_SRC (set)))
+                   continue;
+
+                 if (regmove_dump_file)
+                   fprintf (regmove_dump_file,
+                            "Could fix operand %d of insn %d matching operand %d.\n",
+                            operand_number, INSN_UID (insn), match_number);
+
+                 /* ??? If src is set once, and is set equal to a constant,
+                    then do not use it for this optimization, as this would
+                    make it no longer equivalent to a constant?  */
+
+                 /* Scan backward to find the first instruction that uses
+                    the input operand.  If the operand is set here, then
+                    replace it in both instructions with operand_number.  */
+
+                 for (p = PREV_INSN (insn); p; p = PREV_INSN (p))
+                   {
+                     rtx pset;
+
+                     if (GET_CODE (p) == CODE_LABEL
+                         || GET_CODE (p) == JUMP_INSN
+                         || (GET_CODE (p) == NOTE
+                             && (NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_BEG
+                                 || NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_END)))
+                       break;
+
+                     if (GET_RTX_CLASS (GET_CODE (p)) != 'i')
+                       continue;
+
+                     /* ??? See if all of SRC is set in P.  This test is much
+                        more conservative than it needs to be.  */
+                     pset = single_set (p);
+                     if (pset && SET_DEST (pset) == src)
+                       {
+                         /* We use validate_replace_rtx, in case there
+                            are multiple identical source operands.  All of
+                            them have to be changed at the same time.  */
+                         if (validate_replace_rtx (src, dst, insn))
+                           {
+                             if (validate_change (p, &SET_DEST (pset),
+                                                  dst, 0))
+                               success = 1;
+                             else
+                               {
+                                 /* Change all source operands back.
+                                    This modifies the dst as a side-effect.  */
+                                 validate_replace_rtx (dst, src, insn);
+                                 /* Now make sure the dst is right.  */
+                                 validate_change (insn,
+                                                  recog_operand_loc[operand_number],
+                                                  dst, 0);
+                               }
+                           }
+                         break;
+                       }
+
+                     if (reg_overlap_mentioned_p (src, PATTERN (p))
+                         || reg_overlap_mentioned_p (dst, PATTERN (p)))
+                       break;
+
+                     /* If we have passed a call instruction, and the
+                        pseudo-reg DST is not already live across a call,
+                        then don't perform the optimization.  */
+                     if (GET_CODE (p) == CALL_INSN)
+                       {
+                         num_calls++;
+
+                         if (REG_N_CALLS_CROSSED (REGNO (dst)) == 0)
+                           break;
+                       }
+                   }
+
+                 if (success)
+                   {
+                     /* Remove the death note for SRC from INSN.  */
+                     remove_note (insn, src_note);
+                     /* Move the death note for SRC to P if it is used
+                        there.  */
+                     if (reg_overlap_mentioned_p (src, PATTERN (p)))
+                       {
+                         XEXP (src_note, 1) = REG_NOTES (p);
+                         REG_NOTES (p) = src_note;
+                       }
+                     /* If there is a REG_DEAD note for DST on P, then remove
+                        it, because DST is now set there.  */
+                     if (dst_note = find_reg_note (p, REG_DEAD, dst))
+                       remove_note (p, dst_note);
+
+                     REG_N_SETS (REGNO (dst))++;
+                     REG_N_SETS (REGNO (src))--;
+
+                     REG_N_CALLS_CROSSED (REGNO (dst)) += num_calls;
+                     REG_N_CALLS_CROSSED (REGNO (src)) -= num_calls;
+
+                     /* ??? Must adjust reg_live_length, and reg_n_refs for
+                        both registers.  Must keep track of loop_depth in
+                        order to get reg_n_refs adjustment correct.  */
+
+                     if (regmove_dump_file)
+                       fprintf (regmove_dump_file,
+                                "Fixed operand %d of insn %d matching operand %d.\n",
+                                operand_number, INSN_UID (insn), match_number);
+
+                     goto done_backwards;
+                   }
+               }
+           }
+       done_backwards:
+         ;
+       }
+    }
+#endif /* REGISTER_CONSTRAINTS */
+}
+
+/* return nonzero if X is stable but for mentioning SRC or mentioning /
+   changing DST .  If in doubt, presume it is unstable.  */
+static int
+stable_but_for_p (x, src, dst)
+     rtx x, src, dst;
+{
+  RTX_CODE code = GET_CODE (x);
+  switch (GET_RTX_CLASS (code))
+    {
+    case '<': case '1': case 'c': case '2': case 'b': case '3':
+      {
+       int i;
+       char *fmt = GET_RTX_FORMAT (code);
+       for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
+         if (fmt[i] == 'e' && ! stable_but_for_p (XEXP (x, i), src, dst))
+             return 0;
+       return 1;
+      }
+    case 'o':
+      if (x == src || x == dst)
+       return 1;
+      /* fall through */
+    default:
+      return ! rtx_unstable_p (x);
+    }
+}
diff --git a/gcc/system.h b/gcc/system.h
new file mode 100644 (file)
index 0000000..920e512
--- /dev/null
@@ -0,0 +1,188 @@
+/* system.h - Get common system includes and various definitions and
+   declarations based on autoconf macros.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+
+ */
+
+#ifndef __GCC_SYSTEM_H__
+#define __GCC_SYSTEM_H__
+
+#include <stdio.h>
+#include <ctype.h>
+
+/* Jim Meyering writes:
+   "... Some ctype macros are valid only for character codes that
+   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
+   using /bin/cc or gcc but without giving an ansi option).  So, all
+   ctype uses should be through macros like ISPRINT...  If
+   STDC_HEADERS is defined, then autoconf has verified that the ctype
+   macros don't need to be guarded with references to isascii. ...
+   Defining isascii to 1 should let any compiler worth its salt
+   eliminate the && through constant folding."
+   Bruno Haible adds:
+   "... Furthermore, isupper(c) etc. have an undefined result if c is
+   outside the range -1 <= c <= 255. One is tempted to write isupper(c)
+   with c being of type `char', but this is wrong if c is an 8-bit
+   character >= 128 which gets sign-extended to a negative value.
+   The macro ISUPPER protects against this as well."  */
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+#ifdef isblank
+# define ISBLANK(c) (IN_CTYPE_DOMAIN (c) && isblank (c))
+#else
+# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
+#endif
+#ifdef isgraph
+# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isgraph (c))
+#else
+# define ISGRAPH(c) (IN_CTYPE_DOMAIN (c) && isprint (c) && !isspace (c))
+#endif
+#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
+#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISCNTRL(c) (IN_CTYPE_DOMAIN (c) && iscntrl (c))
+#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
+#define ISPUNCT(c) (IN_CTYPE_DOMAIN (c) && ispunct (c))
+#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char.
+   - It's guaranteed to evaluate its argument exactly once.
+   - It's typically faster.
+   Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+   only '0' through '9' are digits.  Prefer ISDIGIT to ISDIGIT_LOCALE unless
+   it's important to use the locale's definition of `digit' even when the
+   host does not conform to Posix.  */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+#else
+# ifdef HAVE_STRINGS_H
+#  include <strings.h>
+# endif
+#endif
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+#  include <time.h>
+#endif
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#else
+# include <sys/file.h>
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+
+#ifndef bcopy
+# ifdef HAVE_BCOPY
+#  ifdef NEED_DECLARATION_BCOPY
+void bcopy ();
+#  endif
+# else /* ! HAVE_BCOPY */
+#  define bcopy(src,dst,len) memcpy ((dst),(src),(len))
+# endif
+#endif
+
+#ifndef bcmp
+# ifdef HAVE_BCMP
+#  ifdef NEED_DECLARATION_BCMP
+void bcmp ();
+#  endif
+# else /* ! HAVE_BCMP */
+#  define bcmp(left,right,len) memcmp ((left),(right),(len))
+# endif
+#endif
+
+#ifndef bzero
+# ifdef HAVE_BZERO
+#  ifdef NEED_DECLARATION_BZERO
+void bzero ();
+#  endif
+# else /* ! HAVE_BZERO */
+#  define bzero(dst,len) memset ((dst),0,(len))
+# endif
+#endif
+
+#ifndef index
+# ifdef HAVE_INDEX
+#  ifdef NEED_DECLARATION_INDEX
+extern char *index ();
+#  endif
+# else /* ! HAVE_INDEX */
+#  define index strchr
+# endif
+#endif
+
+#ifndef rindex
+# ifdef HAVE_RINDEX
+#  ifdef NEED_DECLARATION_RINDEX
+extern char *rindex ();
+#  endif
+# else /* ! HAVE_RINDEX */
+#  define rindex strrchr
+# endif
+#endif
+
+#ifdef NEED_DECLARATION_FREE
+extern void free ();
+#endif
+
+#endif /* __GCC_SYSTEM_H__ */
diff --git a/gcc/version.c b/gcc/version.c
deleted file mode 100644 (file)
index b1829cb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-char *version_string = "testgcc-2.7.90 970802 experimental";