aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorno-author <no-author@gcc.gnu.org>1998-12-17 06:43:56 +0000
committerno-author <no-author@gcc.gnu.org>1998-12-17 06:43:56 +0000
commit395eb9fb0968f2ba46de5189fde2e2ba32557927 (patch)
tree71c1f8a188167f5d00e862fd4e0f2534533094ba
parentf4295814ad62a8952ce643406597d505e88da7d8 (diff)
This commit was manufactured by cvs2svn to create tagfirst-egcs-checkin
'first-egcs-checkin'. git-svn-id: https://gcc.gnu.org/svn/gcc/tags/first-egcs-checkin@24354 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/.gdbinit95
-rw-r--r--gcc/ABOUT-GCC-NLS542
-rw-r--r--gcc/ABOUT-NLS226
-rw-r--r--gcc/ChangeLog.1110652
-rw-r--r--gcc/INSTALL1906
-rw-r--r--gcc/ORDERS4003
-rw-r--r--gcc/README-bugs144
-rw-r--r--gcc/SERVICE1460
-rw-r--r--gcc/bi-parser.c980
-rw-r--r--gcc/bi-parser.h12
-rw-r--r--gcc/c-parse.c3859
-rw-r--r--gcc/c-parse.h64
-rw-r--r--gcc/c-parse.y2176
-rw-r--r--gcc/cexp.c2142
-rw-r--r--gcc/config.in32
-rw-r--r--gcc/config/alpha/crtbegin.asm104
-rw-r--r--gcc/config/alpha/crtend.asm105
-rw-r--r--gcc/config/alpha/t-crtbe9
-rw-r--r--gcc/config/alpha/vxworks.h57
-rw-r--r--gcc/config/alpha/xm-linux.h3
-rw-r--r--gcc/config/arc/arc.c2212
-rw-r--r--gcc/config/arc/arc.h1643
-rw-r--r--gcc/config/arc/arc.md1630
-rw-r--r--gcc/config/arc/initfini.c157
-rw-r--r--gcc/config/arc/lib1funcs.asm273
-rw-r--r--gcc/config/arc/t-arc72
-rw-r--r--gcc/config/arc/xm-arc.h47
-rw-r--r--gcc/config/arm/xm-netbsd.h10
-rw-r--r--gcc/config/i386/crtdll.h33
-rw-r--r--gcc/config/i386/osf1-ci.asm65
-rw-r--r--gcc/config/i386/osf1-cn.asm46
-rw-r--r--gcc/config/i386/osf1elf.h260
-rw-r--r--gcc/config/i386/osf1elfgdb.h7
-rw-r--r--gcc/config/i386/rtemself.h169
-rw-r--r--gcc/config/i386/t-osf1elf18
-rw-r--r--gcc/config/i386/x-osf1elf8
-rw-r--r--gcc/config/i386/xm-bsd386.h11
-rw-r--r--gcc/config/i386/xm-dgux.h12
-rw-r--r--gcc/config/i386/xm-freebsd.h4
-rw-r--r--gcc/config/i386/xm-gnu.h5
-rw-r--r--gcc/config/i386/xm-netbsd.h4
-rw-r--r--gcc/config/i386/xm-osf1elf.h6
-rw-r--r--gcc/config/i386/xm-sysv3.h4
-rw-r--r--gcc/config/i386/xm-winnt.h24
-rw-r--r--gcc/config/i860/xm-fx2800.h7
-rw-r--r--gcc/config/m68k/xm-altos3068.h7
-rw-r--r--gcc/config/m68k/xm-amix.h47
-rw-r--r--gcc/config/m68k/xm-aux.h9
-rw-r--r--gcc/config/m68k/xm-hp320.h19
-rw-r--r--gcc/config/m68k/xm-linux.h4
-rw-r--r--gcc/config/m68k/xm-m68kv.h15
-rw-r--r--gcc/config/m68k/xm-netbsd.h4
-rw-r--r--gcc/config/m68k/xm-sun3.h5
-rw-r--r--gcc/config/m68k/xm-tower.h4
-rw-r--r--gcc/config/mips/elflorion.h24
-rw-r--r--gcc/config/mips/nws3250v4.h36
-rw-r--r--gcc/config/mips/r3900.h71
-rw-r--r--gcc/config/mips/xm-iris3.h8
-rw-r--r--gcc/config/mips/xm-iris4.h18
-rw-r--r--gcc/config/mips/xm-netbsd.h2
-rw-r--r--gcc/config/mips/xm-news.h6
-rw-r--r--gcc/config/mips/xm-nws3250v4.h9
-rw-r--r--gcc/config/mips/xm-sysv4.h11
-rw-r--r--gcc/config/ns32k/xm-genix.h9
-rw-r--r--gcc/config/ns32k/xm-netbsd.h10
-rw-r--r--gcc/config/sh/rtems.h (renamed from gcc/config/xm-svr3.h)26
-rw-r--r--gcc/config/sparc/elf.h (renamed from gcc/config/mips/xm-sysv.h)34
-rw-r--r--gcc/config/sparc/hal.h (renamed from gcc/config/i386/xm-sun.h)20
-rw-r--r--gcc/config/sparc/linux64.h238
-rw-r--r--gcc/config/sparc/sol2-sld.h18
-rw-r--r--gcc/config/sparc/sun4gas.h (renamed from gcc/config/arm/xm-linux.h)13
-rw-r--r--gcc/config/sparc/t-elf39
-rw-r--r--gcc/config/sparc/t-halos2
-rw-r--r--gcc/config/sparc/xm-netbsd.h4
-rw-r--r--gcc/config/sparc/xm-pbd.h13
-rw-r--r--gcc/config/sparc/xm-sp64.h (renamed from gcc/config/i386/xm-linux.h)11
-rw-r--r--gcc/config/v850/lib1funcs.asm1271
-rw-r--r--gcc/config/v850/t-v85054
-rw-r--r--gcc/config/v850/v850.c1942
-rw-r--r--gcc/config/v850/v850.h1406
-rw-r--r--gcc/config/v850/v850.md1852
-rw-r--r--gcc/config/v850/xm-v850.h (renamed from gcc/config/a29k/xm-unix.h)28
-rw-r--r--gcc/config/vax/x-vax3
-rw-r--r--gcc/config/vax/xm-vaxv.h7
-rw-r--r--gcc/config/xm-alloca.h4
-rw-r--r--gcc/config/xm-freebsd.h33
-rw-r--r--gcc/config/xm-linux.h47
-rw-r--r--gcc/config/xm-netbsd.h27
-rw-r--r--gcc/config/xm-siglist.h6
-rw-r--r--gcc/config/xm-std32.h34
-rw-r--r--gcc/config/xm-svr4.h35
-rwxr-xr-xgcc/configure4911
-rw-r--r--gcc/cp/ChangeLog.19451
-rw-r--r--gcc/cp/NEWS139
-rw-r--r--gcc/cp/g++FAQ.texi2158
-rw-r--r--gcc/cp/parse.c8338
-rw-r--r--gcc/cp/parse.h91
-rw-r--r--gcc/cstamp-h.in1
-rw-r--r--gcc/dyn-string.c100
-rw-r--r--gcc/dyn-string.h31
-rwxr-xr-xgcc/exgettext118
-rwxr-xr-xgcc/fixinc.wrap86
-rw-r--r--gcc/frame.c607
-rw-r--r--gcc/frame.h35
-rw-r--r--gcc/gencheck.c62
-rw-r--r--gcc/gengenrtl.c287
-rw-r--r--gcc/ginclude/va-arc.h111
-rw-r--r--gcc/ginclude/va-v850.h37
-rw-r--r--gcc/intl.c6
-rw-r--r--gcc/intl.h52
-rw-r--r--gcc/intl/ChangeLog1086
-rw-r--r--gcc/intl/Makefile.in218
-rw-r--r--gcc/intl/VERSION1
-rw-r--r--gcc/intl/bindtextdom.c203
-rw-r--r--gcc/intl/dcgettext.c624
-rw-r--r--gcc/intl/dgettext.c59
-rw-r--r--gcc/intl/explodename.c188
-rw-r--r--gcc/intl/finddomain.c216
-rw-r--r--gcc/intl/gettext.c70
-rw-r--r--gcc/intl/gettext.h105
-rw-r--r--gcc/intl/gettextP.h89
-rw-r--r--gcc/intl/hash-string.h59
-rw-r--r--gcc/intl/l10nflist.c411
-rw-r--r--gcc/intl/libgettext.h182
-rw-r--r--gcc/intl/loadinfo.h76
-rw-r--r--gcc/intl/loadmsgcat.c222
-rw-r--r--gcc/intl/localealias.c424
-rw-r--r--gcc/intl/textdomain.c108
-rw-r--r--gcc/mbchar.c288
-rw-r--r--gcc/mbchar.h25
-rw-r--r--gcc/mkinstalldirs40
-rw-r--r--gcc/objc/objc-parse.c5103
-rw-r--r--gcc/objc/objc-parse.y2938
-rwxr-xr-xgcc/patch-apollo-includes69
-rw-r--r--gcc/po/ChangeLog0
-rw-r--r--gcc/po/Makefile.in.in249
-rw-r--r--gcc/po/POTFILES.in816
-rw-r--r--gcc/po/en_UK.po491
-rw-r--r--gcc/prefix.c314
-rw-r--r--gcc/regmove.c983
-rw-r--r--gcc/system.h188
-rw-r--r--gcc/version.c1
142 files changed, 46440 insertions, 38810 deletions
diff --git a/gcc/.gdbinit b/gcc/.gdbinit
deleted file mode 100644
index dea758b5465..00000000000
--- a/gcc/.gdbinit
+++ /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
index 00000000000..b70a7c8df67
--- /dev/null
+++ b/gcc/ABOUT-GCC-NLS
@@ -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
index 00000000000..28d38c76fd6
--- /dev/null
+++ b/gcc/ABOUT-NLS
@@ -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
index 00000000000..29483ba2618
--- /dev/null
+++ b/gcc/ChangeLog.11
@@ -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
index d4ac7c5a2ea..00000000000
--- a/gcc/INSTALL
+++ /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
index ac183c9d4c6..00000000000
--- a/gcc/ORDERS
+++ /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
index 06e15bb8af7..00000000000
--- a/gcc/README-bugs
+++ /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
-
-Local Variables:
-mode: text
-End:
diff --git a/gcc/SERVICE b/gcc/SERVICE
deleted file mode 100644
index 786d4768c68..00000000000
--- a/gcc/SERVICE
+++ /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 **
-
-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
-
-Magnus Alvestad <magnus@itanalyse.no>
-
-GNU Emacs, GCC, the Unix tools, Linux, Jolt.
-
-Rates: Free, or from $50/hour.
-
-Updated: 1997-05-09
-
-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
-
-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
-
-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
-
-
- 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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
- 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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
- 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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
- 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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-
-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
index 9f6f2b02e3c..00000000000
--- a/gcc/bi-parser.c
+++ /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
-
-#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
-
-#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"
-
- 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
index 5beb8628f08..00000000000
--- a/gcc/bi-parser.h
+++ /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
index 0c6f3d2b0b7..00000000000
--- a/gcc/c-parse.c
+++ /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
-
-#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
-
-#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"
-
- 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
index 21b3d0caf6b..00000000000
--- a/gcc/c-parse.h
+++ /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
index fd2b0f94a08..00000000000
--- a/gcc/c-parse.y
+++ /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
-
-
-%{
-/* 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 ();
-%}
-
-%%
-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"); }
- ;
-
-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
- ;
-
-/* 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
- ;
-
-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); }
- ;
-
-/* 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; }
- ;
-
-%%
diff --git a/gcc/cexp.c b/gcc/cexp.c
deleted file mode 100644
index a4f2cc53029..00000000000
--- a/gcc/cexp.c
+++ /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
-
-#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
-
-#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"
-
- 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"
-
-
-/* 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;
-}
-
-/* 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 () */
-}
-
-#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
index 8a04e60e647..00000000000
--- a/gcc/config.in
+++ /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
index 00000000000..dfb11e51eab
--- /dev/null
+++ b/gcc/config/alpha/crtbegin.asm
@@ -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
index 00000000000..36f11b9723a
--- /dev/null
+++ b/gcc/config/alpha/crtend.asm
@@ -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
index 00000000000..5e82b923c72
--- /dev/null
+++ b/gcc/config/alpha/t-crtbe
@@ -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
index 00000000000..6016be9677d
--- /dev/null
+++ b/gcc/config/alpha/vxworks.h
@@ -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
index 9426c4ee5a7..00000000000
--- a/gcc/config/alpha/xm-linux.h
+++ /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
index 00000000000..c9e5411103c
--- /dev/null
+++ b/gcc/config/arc/arc.c
@@ -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;
+}
+
+/* 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;
+}
+
+/* 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;
+ }
+}
+
+/* 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;
+{
+}
+
+/* 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;
+}
+
+/* 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;
+ }
+}
+
+/* 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);
+ }
+}
+
+/* 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;
+}
+
+/* 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;
+}
+
+/* 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;
+ }
+ }
+}
+
+/* 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);
+}
+
+/* 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);
+}
+
+/* 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;
+}
+
+/* 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 */
+}
+
+/* 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 "";
+}
+
+/* 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;
+{
+}
+
+/* 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);
+}
+
+/* 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;
+ }
+}
+
+/* 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
index 00000000000..d92fbdc0b98
--- /dev/null
+++ b/gcc/config/arc/arc.h
@@ -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
+
+/* 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"
+
+/* 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)
+
+/* 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
+
+/* 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
+
+/* 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)
+
+/* 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
+
+/* 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 ()))
+
+/* 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)
+
+/* 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
+
+/* 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)
+
+/* 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)
+
+/* Library calls. */
+
+/* Generate calls to memcpy, memcmp and memset. */
+#define TARGET_MEM_FUNCTIONS
+
+/* 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; \
+}
+
+/* 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*/
+
+/* 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
+
+/* 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
+
+/* 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)*/
+
+/* 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)
+
+/* 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
+
+/* 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
+
+/* 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
index 00000000000..0894f79151a
--- /dev/null
+++ b/gcc/config/arc/arc.md
@@ -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.
+
+;; 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")))
+
+;; 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")])
+
+;; 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.
+
+;; 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;
+;}")
+
+;; 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;
+;}")
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+;; 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")])
+
+(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")])
+
+;; Split up troublesome insns for better scheduling.
+
+;; Peepholes go at the end.
diff --git a/gcc/config/arc/initfini.c b/gcc/config/arc/initfini.c
new file mode 100644
index 00000000000..084e2292bf5
--- /dev/null
+++ b/gcc/config/arc/initfini.c
@@ -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
index 00000000000..a2d509ac765
--- /dev/null
+++ b/gcc/config/arc/lib1funcs.asm
@@ -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
index 00000000000..d922c27ca5f
--- /dev/null
+++ b/gcc/config/arc/t-arc
@@ -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
index 00000000000..ba011e94be6
--- /dev/null
+++ b/gcc/config/arc/xm-arc.h
@@ -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
index 1c7a656486c..00000000000
--- a/gcc/config/arm/xm-netbsd.h
+++ /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
index 00000000000..c6b219ae020
--- /dev/null
+++ b/gcc/config/i386/crtdll.h
@@ -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
index 00000000000..a0f077304a8
--- /dev/null
+++ b/gcc/config/i386/osf1-ci.asm
@@ -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
index 00000000000..a10298fd288
--- /dev/null
+++ b/gcc/config/i386/osf1-cn.asm
@@ -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
index 00000000000..da61e8b5674
--- /dev/null
+++ b/gcc/config/i386/osf1elf.h
@@ -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
index 00000000000..af6efa2d0de
--- /dev/null
+++ b/gcc/config/i386/osf1elfgdb.h
@@ -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
index 00000000000..6486102abdc
--- /dev/null
+++ b/gcc/config/i386/rtemself.h
@@ -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
index 00000000000..77c7df1a6df
--- /dev/null
+++ b/gcc/config/i386/t-osf1elf
@@ -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
index 00000000000..146738107f6
--- /dev/null
+++ b/gcc/config/i386/x-osf1elf
@@ -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
index 7a823b96032..00000000000
--- a/gcc/config/i386/xm-bsd386.h
+++ /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
index 5bdb9be0ebb..00000000000
--- a/gcc/config/i386/xm-dgux.h
+++ /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
index 007a609f263..00000000000
--- a/gcc/config/i386/xm-freebsd.h
+++ /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
index 0b5985f9065..00000000000
--- a/gcc/config/i386/xm-gnu.h
+++ /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
index 3a9f3241990..00000000000
--- a/gcc/config/i386/xm-netbsd.h
+++ /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
index 00000000000..69ca9c14c00
--- /dev/null
+++ b/gcc/config/i386/xm-osf1elf.h
@@ -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
index 72078bb1feb..00000000000
--- a/gcc/config/i386/xm-sysv3.h
+++ /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
index d36d2cdb11e..00000000000
--- a/gcc/config/i386/xm-winnt.h
+++ /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
index f1ab6d8c9c5..00000000000
--- a/gcc/config/i860/xm-fx2800.h
+++ /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
index 294f5645b5e..00000000000
--- a/gcc/config/m68k/xm-altos3068.h
+++ /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
index 69b4bd17c74..00000000000
--- a/gcc/config/m68k/xm-amix.h
+++ /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
index 5ac1f4654d8..00000000000
--- a/gcc/config/m68k/xm-aux.h
+++ /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
index d724c3a26c8..00000000000
--- a/gcc/config/m68k/xm-hp320.h
+++ /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
index 3b1050673fa..00000000000
--- a/gcc/config/m68k/xm-linux.h
+++ /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
index ce3cf665e81..00000000000
--- a/gcc/config/m68k/xm-m68kv.h
+++ /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
index 27a33cd5b83..00000000000
--- a/gcc/config/m68k/xm-netbsd.h
+++ /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
index eafe716e93b..00000000000
--- a/gcc/config/m68k/xm-sun3.h
+++ /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
index fcb456fa621..00000000000
--- a/gcc/config/m68k/xm-tower.h
+++ /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
index 4b7f111873f..00000000000
--- a/gcc/config/mips/elflorion.h
+++ /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
index 611effe02a1..00000000000
--- a/gcc/config/mips/nws3250v4.h
+++ /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
index 00000000000..c1867430129
--- /dev/null
+++ b/gcc/config/mips/r3900.h
@@ -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
index 3d2a59a1447..00000000000
--- a/gcc/config/mips/xm-iris3.h
+++ /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
index e12c226614e..00000000000
--- a/gcc/config/mips/xm-iris4.h
+++ /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
index b9d3c709d9d..00000000000
--- a/gcc/config/mips/xm-netbsd.h
+++ /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
index 9409d7fe0a6..00000000000
--- a/gcc/config/mips/xm-news.h
+++ /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
index 34ab631acb4..00000000000
--- a/gcc/config/mips/xm-nws3250v4.h
+++ /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
index 490a7722995..00000000000
--- a/gcc/config/mips/xm-sysv4.h
+++ /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
index 76be3b76fc8..00000000000
--- a/gcc/config/ns32k/xm-genix.h
+++ /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
index 4040751d1d9..00000000000
--- a/gcc/config/ns32k/xm-netbsd.h
+++ /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>
diff --git a/gcc/config/xm-svr3.h b/gcc/config/sh/rtems.h
index ac1000fb1cb..5cbdf9bb51a 100644
--- a/gcc/config/xm-svr3.h
+++ b/gcc/config/sh/rtems.h
@@ -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 */
diff --git a/gcc/config/mips/xm-sysv.h b/gcc/config/sparc/elf.h
index 170538fb682..70cb26a93be 100644
--- a/gcc/config/mips/xm-sysv.h
+++ b/gcc/config/sparc/elf.h
@@ -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
diff --git a/gcc/config/i386/xm-sun.h b/gcc/config/sparc/hal.h
index d2e714ecf5c..0222b819e0e 100644
--- a/gcc/config/i386/xm-sun.h
+++ b/gcc/config/sparc/hal.h
@@ -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
index 00000000000..cf6015d3adb
--- /dev/null
+++ b/gcc/config/sparc/linux64.h
@@ -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
index 00000000000..90c5ca65724
--- /dev/null
+++ b/gcc/config/sparc/sol2-sld.h
@@ -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
diff --git a/gcc/config/arm/xm-linux.h b/gcc/config/sparc/sun4gas.h
index 955379dab16..3cea9560b4f 100644
--- a/gcc/config/arm/xm-linux.h
+++ b/gcc/config/sparc/sun4gas.h
@@ -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
index 00000000000..da9df38368e
--- /dev/null
+++ b/gcc/config/sparc/t-elf
@@ -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
index 00000000000..0bd5496ac23
--- /dev/null
+++ b/gcc/config/sparc/t-halos
@@ -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
index 5f11b8d2f48..00000000000
--- a/gcc/config/sparc/xm-netbsd.h
+++ /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
index dad9fdc6b34..00000000000
--- a/gcc/config/sparc/xm-pbd.h
+++ /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
-
diff --git a/gcc/config/i386/xm-linux.h b/gcc/config/sparc/xm-sp64.h
index 42f097ddc6c..5954affa3b5 100644
--- a/gcc/config/i386/xm-linux.h
+++ b/gcc/config/sparc/xm-sp64.h
@@ -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
index 00000000000..d441590678f
--- /dev/null
+++ b/gcc/config/v850/lib1funcs.asm
@@ -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
index 00000000000..52034414b70
--- /dev/null
+++ b/gcc/config/v850/t-v850
@@ -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
index 00000000000..6435d409336
--- /dev/null
+++ b/gcc/config/v850/v850.c
@@ -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;
+
+
+/* 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);
+ }
+ }
+ }
+}
+
+
+/* Output assembly code for the start of the file. */
+
+void
+asm_file_start (file)
+ FILE *file;
+{
+ output_file_directive (file, main_input_filename);
+}
+
+
+/* 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;
+}
+
+
+/* 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;
+}
+
+
+/* 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);
+}
+
+
+/* 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;
+ }
+}
+
+
+/* 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;
+
+ }
+}
+
+
+/* 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;
+ }
+}
+
+
+/* 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 "";
+}
+
+
+/* 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";
+}
+
+
+/* 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;
+}
+
+
+/* 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);
+}
+
+
+/* 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;
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* # 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);
+}
+
+
+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);
+}
+
+
+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;
+}
+
+
+/* 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;
+ }
+}
+
+
+/* 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;
+}
+
+
+/* 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;
+}
+
+
+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
index 00000000000..2a05aef749b
--- /dev/null
+++ b/gcc/config/v850/v850.h
@@ -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); \
+}
+
+
+/* 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
+
+/* 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)
+
+
+/* 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)
+
+
+/* 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
+
+
+/* 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. */
+
+
+/* 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)
+
+/* 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)
+
+
+/* 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)
+
+
+/* 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
index 00000000000..30ebf8709c0
--- /dev/null
+++ b/gcc/config/v850/v850.md
@@ -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"))
+
+;; 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)
+
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+;; -----------------------------------------------------------------
+;; 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")])
+
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+;; ----------------------------------------------------------------------
+;; 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);
+}")
+
+;; ----------------------------------------------------------------------
+;; 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")])
+
+
+
+;; ----------------------------------------------------------------------
+;; 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
diff --git a/gcc/config/a29k/xm-unix.h b/gcc/config/v850/xm-v850.h
index 206d8fdc41d..2d67cf81788 100644
--- a/gcc/config/a29k/xm-unix.h
+++ b/gcc/config/v850/xm-v850.h
@@ -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
index bb58a6a1df3..00000000000
--- a/gcc/config/vax/x-vax
+++ /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
index 18a1d73ac98..00000000000
--- a/gcc/config/vax/xm-vaxv.h
+++ /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
index 00000000000..3dbdc37a1f0
--- /dev/null
+++ b/gcc/config/xm-alloca.h
@@ -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
index f73c9aa60fa..00000000000
--- a/gcc/config/xm-freebsd.h
+++ /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
index 88b558cc5bf..00000000000
--- a/gcc/config/xm-linux.h
+++ /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
index 00000ce9706..00000000000
--- a/gcc/config/xm-netbsd.h
+++ /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
index 00000000000..d6133d6a194
--- /dev/null
+++ b/gcc/config/xm-siglist.h
@@ -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
index 00000000000..c52782e9741
--- /dev/null
+++ b/gcc/config/xm-std32.h
@@ -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
index 30084322510..00000000000
--- a/gcc/config/xm-svr4.h
+++ /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
index b3181529acc..00000000000
--- a/gcc/configure
+++ /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
index 00000000000..024a4e62126
--- /dev/null
+++ b/gcc/cp/ChangeLog.1
@@ -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
index 00000000000..8f057ef5815
--- /dev/null
+++ b/gcc/cp/NEWS
@@ -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
index 00000000000..09c812bc585
--- /dev/null
+++ b/gcc/cp/g++FAQ.texi
@@ -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
index 9119e6485d7..00000000000
--- a/gcc/cp/parse.c
+++ /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
-
-#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
-
-#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"
-
- 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
index 432766b00f2..00000000000
--- a/gcc/cp/parse.h
+++ /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
index 9788f70238c..00000000000
--- a/gcc/cstamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/gcc/dyn-string.c b/gcc/dyn-string.c
new file mode 100644
index 00000000000..cfcace95584
--- /dev/null
+++ b/gcc/dyn-string.c
@@ -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
index 00000000000..ed8071f8b08
--- /dev/null
+++ b/gcc/dyn-string.h
@@ -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
index 00000000000..93d553cba76
--- /dev/null
+++ b/gcc/exgettext
@@ -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
index 00000000000..406c87e9c03
--- /dev/null
+++ b/gcc/fixinc.wrap
@@ -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
index 00000000000..a9e5e231e7d
--- /dev/null
+++ b/gcc/frame.c
@@ -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;
+};
+
+/* 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; }
+
+/* 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;
+}
+
+/* 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;
+}
+
+/* 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
index 00000000000..3b380536884
--- /dev/null
+++ b/gcc/frame.h
@@ -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
index 00000000000..6b5612ded31
--- /dev/null
+++ b/gcc/gencheck.c
@@ -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
index 00000000000..977305d9a82
--- /dev/null
+++ b/gcc/gengenrtl.c
@@ -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
index 00000000000..a718ad6245d
--- /dev/null
+++ b/gcc/ginclude/va-arc.h
@@ -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
index 00000000000..3fd812ab228
--- /dev/null
+++ b/gcc/ginclude/va-v850.h
@@ -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
index 00000000000..e0399096d03
--- /dev/null
+++ b/gcc/intl.c
@@ -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
index 00000000000..56c075e6c05
--- /dev/null
+++ b/gcc/intl.h
@@ -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
index 00000000000..198950159da
--- /dev/null
+++ b/gcc/intl/ChangeLog
@@ -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
index 00000000000..cc1d6cef7f9
--- /dev/null
+++ b/gcc/intl/Makefile.in
@@ -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
index 00000000000..ee66b0612bc
--- /dev/null
+++ b/gcc/intl/VERSION
@@ -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
index 00000000000..d9c3f349e04
--- /dev/null
+++ b/gcc/intl/bindtextdom.c
@@ -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
index 00000000000..c4c7a2c7d14
--- /dev/null
+++ b/gcc/intl/dcgettext.c
@@ -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
index 00000000000..0510c2b071f
--- /dev/null
+++ b/gcc/intl/dgettext.c
@@ -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
index 00000000000..8066dc29962
--- /dev/null
+++ b/gcc/intl/explodename.c
@@ -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
index 00000000000..81ea29bf4e4
--- /dev/null
+++ b/gcc/intl/finddomain.c
@@ -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
index 00000000000..d929f98d68a
--- /dev/null
+++ b/gcc/intl/gettext.c
@@ -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
index 00000000000..3cd23d7d6ad
--- /dev/null
+++ b/gcc/intl/gettext.h
@@ -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
index 00000000000..00c52031972
--- /dev/null
+++ b/gcc/intl/gettextP.h
@@ -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
index 00000000000..cacb38e479f
--- /dev/null
+++ b/gcc/intl/hash-string.h
@@ -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
index 00000000000..9c7dc18360f
--- /dev/null
+++ b/gcc/intl/l10nflist.c
@@ -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;
+}
+
+
+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;
+}
+
+/* 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
index 00000000000..3a92960ae3e
--- /dev/null
+++ b/gcc/intl/libgettext.h
@@ -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
index 00000000000..f4ebf6d8112
--- /dev/null
+++ b/gcc/intl/loadinfo.h
@@ -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
index 00000000000..515892dfb86
--- /dev/null
+++ b/gcc/intl/loadmsgcat.c
@@ -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
index 00000000000..bca555a610f
--- /dev/null
+++ b/gcc/intl/localealias.c
@@ -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
index 00000000000..88557460f3b
--- /dev/null
+++ b/gcc/intl/textdomain.c
@@ -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
index 00000000000..d54a49749ce
--- /dev/null
+++ b/gcc/mbchar.c
@@ -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
index 00000000000..a4b82c0558d
--- /dev/null
+++ b/gcc/mbchar.h
@@ -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
index 00000000000..f427ab4a24b
--- /dev/null
+++ b/gcc/mkinstalldirs
@@ -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
index 6a04682d341..00000000000
--- a/gcc/objc/objc-parse.c
+++ /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
-
-#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
-
-#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"
-
- 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
index e06359919fb..00000000000
--- a/gcc/objc/objc-parse.y
+++ /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
-
-/* 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
-
-%{
-/* 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 ();
-%}
-
-%%
-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"); }
- ;
-
-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
- ;
-
-/* 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
- ;
-
-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); }
- ;
-
-/* 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; }
- ;
-
-/* 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
index 00000000000..8daf88cb54e
--- /dev/null
+++ b/gcc/patch-apollo-includes
@@ -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
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/gcc/po/ChangeLog
diff --git a/gcc/po/Makefile.in.in b/gcc/po/Makefile.in.in
new file mode 100644
index 00000000000..746d521d9db
--- /dev/null
+++ b/gcc/po/Makefile.in.in
@@ -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
index 00000000000..a0727132e96
--- /dev/null
+++ b/gcc/po/POTFILES.in
@@ -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
index 00000000000..829b7b5344d
--- /dev/null
+++ b/gcc/po/en_UK.po
@@ -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
index 00000000000..3ffda1ab528
--- /dev/null
+++ b/gcc/prefix.c
@@ -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
index 00000000000..639059b3686
--- /dev/null
+++ b/gcc/regmove.c
@@ -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
index 00000000000..920e5128c68
--- /dev/null
+++ b/gcc/system.h
@@ -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
index b1829cb7c81..00000000000
--- a/gcc/version.c
+++ /dev/null
@@ -1 +0,0 @@
-char *version_string = "testgcc-2.7.90 970802 experimental";