No longer relavent.
authorJeff Law <law@gcc.gnu.org>
Sun, 1 Feb 1998 01:22:52 +0000 (18:22 -0700)
committerJeff Law <law@gcc.gnu.org>
Sun, 1 Feb 1998 01:22:52 +0000 (18:22 -0700)
From-SVN: r17566

gcc/f/gbe/2.7.2.2.diff [deleted file]
gcc/f/gbe/2.7.2.3.diff [deleted file]
gcc/f/gbe/README [deleted file]

diff --git a/gcc/f/gbe/2.7.2.2.diff b/gcc/f/gbe/2.7.2.2.diff
deleted file mode 100644 (file)
index e99ba67..0000000
+++ /dev/null
@@ -1,11296 +0,0 @@
-IMPORTANT: After applying this patch, you must rebuild the
-Info documentation derived from the Texinfo files in the
-gcc distribution, as this patch does not include patches
-to any derived files (due to differences in the way gcc
-version 2.7.2.2 is obtained by users).  Use the following
-command sequence after applying this patch:
-
-  cd gcc-2.7.2.2; make -f Makefile.in gcc.info
-
-If that fails due to `makeinfo' not being installed, obtain
-texinfo-3.11.tar.gz from a GNU distribution site, unpack,
-build, and install it, and try the above command sequence
-again.
-
-
-diff -rcp2N gcc-2.7.2.2/ChangeLog g77-new/ChangeLog
-*** gcc-2.7.2.2/ChangeLog      Thu Feb 20 19:24:10 1997
---- g77-new/ChangeLog  Mon Aug 11 06:48:02 1997
-***************
-*** 1,2 ****
---- 1,244 ----
-+ Sun Aug 10 18:14:24 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      Integrate C front end part of patch for better alias
-+      handling from John Carr <jfc@mit.edu>:
-+      * c-decl.c (grokdeclarator): Check for RID_RESTRICT
-+      flag; diagnose certain misuses; set DECL_RESTRICT as
-+      appropriate.
-+      * c-lex.c (init_lex): Set up RID_RESTRICT pointer.
-+      Unset `restrict' as reserved word.
-+      * c-lex.h: Replace RID_NOALIAS with RID_RESTRICT.
-+      * c-parse.gperf: Add `restrict' and `__restrict'
-+      keywords.
-+      * tree.h: Add DECL_RESTRICT flag.
-+ 
-+ Sun Aug 10 14:50:30 1997  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
-+      has integer TYPE_{MAX,MIN}_VALUE before using them.
-+ 
-+ Mon Jul 28 15:35:38 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * combine.c (num_sign_bit_copies): Speed up the 961126-1.c
-+      case of repeated (neg (neg (neg ...))) so c-torture runs
-+      in less time.
-+ 
-+      * reload.c (find_reloads_toplev, find_reloads_address):
-+      These now return whether replacement by a constant, so
-+      caller can know to do other replacements.  Currently if
-+      caller doesn't want that info and such replacement would
-+      happen, we crash so as to investigate the problem and
-+      learn more about it.  All callers updated.
-+      (find_reloads): If pseudo replaced by constant, always
-+      update duplicates of it.
-+ 
-+ Mon Jul 21 00:00:24 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (size_binop): Make sure overflows
-+      are flagged properly, so as to avoid silently generating
-+      bad code for, e.g., a too-large array.
-+ 
-+ Sun Jul 13 22:23:14 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * stmt.c (expand_expr_stmt): Must generate code for
-+      statements within an expression (gcc's `({ ... )}')
-+      even if -fsyntax-only.
-+ 
-+ Mon Jun 30 17:23:07 1997  Michael Meissner  <meissner@cygnus.com>
-+ 
-+      * gcc.c (process_command): If -save-temps and -pipe were specified
-+      together, don't do -pipe.
-+ 
-+ Thu Jun 26 05:40:46 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * stor-layout.c (get_best_mode): Handle negative bitpos
-+      correctly, so caller doesn't get into infinite recursion
-+      trying to cope with a spurious VOIDmode.
-+ 
-+ Tue Jun 24 19:46:31 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.
-+ 
-+ Sat Jun 21 12:09:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * toplev.c (rest_of_compilation): Also temporarily set
-+      flag_unroll_all_loops to 0 during first of two calls
-+      to loop_optimize, and clean up code a bit to make it
-+      easier to read.
-+ 
-+      * expr.c (safe_from_p_1, safe_from_p): Fix these to use
-+      TREE_SET_CODE instead of TREE_CODE.
-+ 
-+ Thu Jun 19 19:30:47 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * config/alpha/alpha.c: Don't include <stamp.h> on
-+      GNU Linux machines.
-+ 
-+      * config/alpha/elf.c: New file for ELF systems.
-+ 
-+      * config/alpha/xm-alpha.h: Don't declare alloca()
-+      if it's already a macro (probably defined in stdlib.h).
-+ 
-+      * config/alpha/xm-linux.h (HAVE_STRERROR): #define
-+      this, according to what various people suggest.
-+ 
-+      * config.guess, configure: Make some (hopefully safe)
-+      changes, based mostly on gcc-2.8.0-in-development,
-+      in the hopes that these make some systems configure
-+      "out of the box" more easily, especially Alpha systems.
-+ 
-+ Mon Jun  9 04:26:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * expr.c (safe_from_p): Don't examine a given SAVE_EXPR
-+      node more than once, to avoid combinatorial explosion
-+      in complex expressions.  Fortran case that triggered
-+      this had a complicated *and* complex expression with
-+      293 unique nodes, resulting in 28 minutes of compile
-+      time mostly spent in a single top-level safe_from_p()
-+      call due to all the redundant SAVE_EXPR traversals.
-+      This change reduced the time to around 2 seconds.
-+      (safe_from_p_1): New helper function that does almost
-+      exactly what the old safe_from_p() did.
-+ 
-+ Sun May 18 21:18:48 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (fold): Clarify why TRUNC_DIV_EXPR
-+      and FLOOR_DIV_EXPR aren't rewritten to EXACT_DIV_EXPR,
-+      clean up related code.
-+ 
-+ Sat May  3 13:53:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * config.sub: Change all `i[345]' to `i[3456]' to
-+      support Pentium Pro (this change was already made
-+      in configure for gcc-2.7.2.2).
-+ 
-+      From Toon Moene <toon@moene.indiv.nluug.nl>:
-+      * toplev.c (rest_of_compilation): Unroll loops
-+      only the final time through loop optimization.
-+ 
-+ Sun Apr 20 10:45:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
-+      if defined.
-+ 
-+ Wed Apr 16 22:26:16 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * alias.c, cse.c, loop.c, rtl.c, rtl.h, sched.c:
-+      Make changes submitted by <jfc@mit.edu>.
-+ 
-+ Sun Apr 13 19:32:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (fold): If extra warnings enabled,
-+      warn about integer division by zero.
-+ 
-+ Sun Apr 13 08:15:31 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
-+ 
-+      * final.c (profile_function): Save the static chain register
-+      around the call to the profiler function.
-+ 
-+ Sat Apr 12 14:56:42 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * unroll.c (find_splittable_givs): Permit more cases
-+      of mult_val/add_val to agree by using rtx_equal_p
-+      to compare them instead of requiring them to be
-+      integers with the same value.  Also don't bother
-+      checking if ADDRESS_COST not defined (they will be
-+      equal in that case).
-+ 
-+ Fri Apr 11 03:30:04 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * unroll.c (find_splittable_givs): Must create a new
-+      register if the mult_val and add_val fields don't
-+      agree.
-+ 
-+ Fri Apr  4 23:00:55 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (fold): Don't call multiple_of_p if
-+      arg1 is constant zero, to avoid crashing; simplify
-+      code accordingly.
-+ 
-+ Wed Feb 26 13:09:33 1997  Michael Meissner  <meissner@cygnus.com>
-+ 
-+      * reload.c (debug_reload): Fix format string to print
-+      reload_nocombine[r].
-+ 
-+ Sun Feb 23 15:26:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (multiple_of_p): Clean up and improve.
-+      (fold): Clean up invocation of multiple_of_p.
-+ 
-+ Sat Feb  8 04:53:27 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      From <jfc@jfc.tiac.net> Fri, 07 Feb 1997 22:02:21 -0500:
-+      * alias.c (init_alias_analysis): Reduce amount of time
-+      needed to simplify the reg_base_value array in the
-+      typical case (especially involving function inlining).
-+ 
-+ Fri Jan 10 17:22:17 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      Minor improvements/fixes to better alias handling:
-+      * Makefile.in (alias.o): Fix typo in rule (was RLT_H).
-+      * cse.c, sched.c: Fix up some indenting.
-+      * toplev.c: Add -fargument-alias flag, so Fortran users
-+      can turn C-style aliasing on once g77 defaults to
-+      -fargument-noalias-global.
-+ 
-+      Integrate patch for better alias handling from
-+      John Carr <jfc@mit.edu>:
-+      * Makefile.in (OBJS, alias.o): New module and rule.
-+      * alias.c: New source module.
-+      * calls.c (expand_call): Recognize alias status of calls
-+      to malloc().
-+      * combine.c (distribute_notes): New REG_NOALIAS note.
-+      * rtl.h (REG_NOALIAS): Ditto.
-+      Many other changes for new alias.c module.
-+      * cse.c: Many changes, and much code moved into alias.c.
-+      * flags.h (flag_alias_check, flag_argument_noalias):
-+      New flags.
-+      * toplev.c: New flags and related options.
-+      * local-alloc.c (validate_equiv_mem_from_store):
-+      Caller of true_dependence changed.
-+      * loop.c (NUM_STORES): Increase to 50 from 20.
-+      (prescan_loop): "const" functions don't alter unknown addresses.
-+      (invariant_p): Caller of true_dependence changed.
-+      (record_giv): Zero new unrolled and shared flags.
-+      (emit_iv_add_mult): Record base value for register.
-+      * sched.c: Many changes, mostly moving code to alias.c.
-+      (sched_note_set): SCHED_SORT macro def form, but not function,
-+      inexplicably changed.
-+      * unroll.c: Record base values for registers, etc.
-+ 
-+ Fri Jan  3 04:01:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * loop.c (check_final_value): Handle insns with no luid's
-+      appropriately, instead of crashing on INSN_LUID macro
-+      invocations.
-+ 
-+ Mon Dec 23 00:49:19 1996  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * config/alpha/alpha.md: Fix pattern that matches if_then_else
-+      involving DF target, DF comparison, SF source.
-+ 
-+ Fri Dec 20 15:42:52 1996  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (multiple_of_p): New function.
-+      (fold): Use new function to turn *_DIV_EXPR into EXACT_DIV_EXPR.
-+ 
-+ Tue Oct 22 18:32:20 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
-+ 
-+ 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.
-+ 
-+ Mon Aug  5 16:53:36 1996  Doug Evans  <dje@fallis.cygnus.com>
-+ 
-+      * stor-layout.c (layout_record): Correct overflow test for 0 sized
-+      fields.
-+ 
-  Sat Jun 29 12:33:39 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-  
-*************** Tue Jun 11 20:18:03 1996  Per Bothner <b
-*** 8,11 ****
---- 250,259 ----
-       * alpha.h (FIXPROTO_INIT):  Define new macro.
-  
-+ Sat May 18 20:17:27 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * 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.
-+ 
-  Fri May 10 18:35:00 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-  
-*************** Mon Feb 19 07:35:07 1996  Torbjorn Granl
-*** 66,69 ****
---- 314,322 ----
-          * rs6000.md (not:SI with assign and compare): Fix typo.
-  
-+ Tue Feb 13 17:43:46 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * integrate.c (save_constants_in_decl_trees): New function.
-+      (save_for_inline_copying, save_for_inline_nocopy): Call it.
-+ 
-  Wed Jan 24 18:00:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-  
-*************** Tue Jan 16 06:01:28 1996  Thomas Graiche
-*** 81,88 ****
---- 334,357 ----
-       * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
-  
-+ Mon Jan 15 07:22:59 1996  Michel Delval  (mfd@ccv.fr)
-+ 
-+      * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.
-+ 
-  Sun Jan  7 17:11:11 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-  
-       * collect2.c (scan_libraries): Correct Import File ID interpretation.
-  
-+ Mon Jan  1 09:05:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+         * local-alloc.c (reg_equiv_replacement): New variable.
-+         (memref_referenced_p, case REG): Check for reg_equiv_replacement.
-+         (update_equiv_regs): reg_equiv_replacement now file-scope.
-+ 
-+ Fri Dec 22 17:29:42 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * reload.c (find_valid_class): New function.
-+      (push_reload): Use it in cases where a SUBREG and its contents
-+      both need to be reloaded.
-+ 
-  Thu Dec 28 22:24:53 1995  Michael Meissner  <meissner@tiktok.cygnus.com>
-  
-*************** Mon Dec 18 18:40:34 1995  Jim Wilson  <w
-*** 99,102 ****
---- 368,376 ----
-       above.
-  
-+ Sun Dec 17 06:37:00 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
-+      if reload_class is CLASS_CANNOT_CHANGE_SIZE.
-+ 
-  Sat Dec 16 07:03:33 1995  Philippe De Muyter (phdm@info.ucl.ac.be)
-  
-*************** Sat Dec  9 18:05:03 1995  Jim Wilson  <w
-*** 113,116 ****
---- 387,395 ----
-       * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
-       change.
-+ 
-+ Fri Dec  8 19:17:30 1995  Mike Meissner  <meissner@beauty.cygnus.com>
-+ 
-+      * rs6000/rs6000.c (input_operand): Allow any integer constant, not
-+      just integers that fit in 1 instruction.
-  
-  Sun Nov 26 14:47:42 1995  Richard Kenner  <kenner@mole.gnu.ai.mit.edu>
-diff -rcp2N gcc-2.7.2.2/Makefile.in g77-new/Makefile.in
-*** gcc-2.7.2.2/Makefile.in    Sun Nov 26 14:44:25 1995
---- g77-new/Makefile.in        Sun Aug 10 18:46:06 1997
-*************** OBJS = toplev.o version.o tree.o print-t
-*** 519,523 ****
-   integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
-   regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-!  insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
-   insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
-   insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
---- 519,523 ----
-   integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
-   regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-!  insn-peep.o reorg.o alias.o sched.o final.o recog.o reg-stack.o \
-   insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
-   insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
-*************** LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udi
-*** 570,574 ****
-      _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
-      _fixtfdi _fixunstfdi _floatditf \
-!     __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
-      _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
-      _pure
---- 570,575 ----
-      _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
-      _fixtfdi _fixunstfdi _floatditf \
-!     __gcc_bcmp _varargs __dummy _eprintf \
-!     _op_new _op_vnew _new_handler _op_delete \
-      _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
-      _pure
-*************** expr.o : expr.c $(CONFIG_H) $(RTL_H) $(T
-*** 1179,1183 ****
-     insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
-     typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-!    bc-emit.h modemap.def
-  calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
-     insn-flags.h
---- 1180,1184 ----
-     insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
-     typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-!    bc-emit.h modemap.def hard-reg-set.h
-  calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
-     insn-flags.h
-*************** reorg.o : reorg.c $(CONFIG_H) $(RTL_H) c
-*** 1238,1241 ****
---- 1239,1243 ----
-     basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
-     flags.h output.h
-+ alias.o : $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h
-  sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
-     flags.h insn-config.h insn-attr.h
-diff -rcp2N gcc-2.7.2.2/alias.c g77-new/alias.c
-*** gcc-2.7.2.2/alias.c        Wed Dec 31 19:00:00 1969
---- g77-new/alias.c    Thu Jul 10 20:08:43 1997
-***************
-*** 0 ****
---- 1,996 ----
-+ /* Alias analysis for GNU C, by John Carr (jfc@mit.edu).
-+    Derived in part from sched.c  */
-+ #include "config.h"
-+ #include "rtl.h"
-+ #include "expr.h"
-+ #include "regs.h"
-+ #include "hard-reg-set.h"
-+ #include "flags.h"
-+ 
-+ static rtx canon_rtx                 PROTO((rtx));
-+ static int rtx_equal_for_memref_p    PROTO((rtx, rtx));
-+ static rtx find_symbolic_term                PROTO((rtx));
-+ static int memrefs_conflict_p                PROTO((int, rtx, int, rtx,
-+                                             HOST_WIDE_INT));
-+ 
-+ /* Set up all info needed to perform alias analysis on memory references.  */
-+ 
-+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-+ 
-+ /* reg_base_value[N] gives an address to which register N is related.
-+    If all sets after the first add or subtract to the current value
-+    or otherwise modify it so it does not point to a different top level
-+    object, reg_base_value[N] is equal to the address part of the source
-+    of the first set.  The value will be a SYMBOL_REF, a LABEL_REF, or
-+    (address (reg)) to indicate that the address is derived from an
-+    argument or fixed register.  */
-+ rtx *reg_base_value;
-+ unsigned int reg_base_value_size;    /* size of reg_base_value array */
-+ #define REG_BASE_VALUE(X) \
-+      (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
-+ 
-+ /* Vector indexed by N giving the initial (unchanging) value known
-+    for pseudo-register N.  */
-+ rtx *reg_known_value;
-+ 
-+ /* Indicates number of valid entries in reg_known_value.  */
-+ static int reg_known_value_size;
-+ 
-+ /* Vector recording for each reg_known_value whether it is due to a
-+    REG_EQUIV note.  Future passes (viz., reload) may replace the
-+    pseudo with the equivalent expression and so we account for the
-+    dependences that would be introduced if that happens. */
-+ /* ??? This is a problem only on the Convex.  The REG_EQUIV notes created in
-+    assign_parms mention the arg pointer, and there are explicit insns in the
-+    RTL that modify the arg pointer.  Thus we must ensure that such insns don't
-+    get scheduled across each other because that would invalidate the REG_EQUIV
-+    notes.  One could argue that the REG_EQUIV notes are wrong, but solving
-+    the problem in the scheduler will likely give better code, so we do it
-+    here.  */
-+ char *reg_known_equiv_p;
-+ 
-+ /* Inside SRC, the source of a SET, find a base address.  */
-+ 
-+ /* When copying arguments into pseudo-registers, record the (ADDRESS)
-+    expression for the argument directly so that even if the argument
-+    register is changed later (e.g. for a function call) the original
-+    value is noted.  */
-+ static int copying_arguments;
-+ 
-+ static rtx
-+ find_base_value (src)
-+      register rtx src;
-+ {
-+   switch (GET_CODE (src))
-+     {
-+     case SYMBOL_REF:
-+     case LABEL_REF:
-+       return src;
-+ 
-+     case REG:
-+       if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+      return reg_base_value[REGNO (src)];
-+       return src;
-+ 
-+     case MEM:
-+       /* Check for an argument passed in memory.  Only record in the
-+       copying-arguments block; it is too hard to track changes
-+       otherwise.  */
-+       if (copying_arguments
-+        && (XEXP (src, 0) == arg_pointer_rtx
-+            || (GET_CODE (XEXP (src, 0)) == PLUS
-+                && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
-+      return gen_rtx (ADDRESS, VOIDmode, src);
-+       return 0;
-+ 
-+     case CONST:
-+       src = XEXP (src, 0);
-+       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
-+      break;
-+       /* fall through */
-+     case PLUS:
-+     case MINUS:
-+       /* Guess which operand to set the register equivalent to.  */
-+       /* If the first operand is a symbol or the second operand is
-+       an integer, the first operand is the base address.  */
-+       if (GET_CODE (XEXP (src, 0)) == SYMBOL_REF
-+        || GET_CODE (XEXP (src, 0)) == LABEL_REF
-+        || GET_CODE (XEXP (src, 1)) == CONST_INT)
-+      return XEXP (src, 0);
-+       /* If an operand is a register marked as a pointer, it is the base.  */
-+       if (GET_CODE (XEXP (src, 0)) == REG
-+        && REGNO_POINTER_FLAG (REGNO (XEXP (src, 0))))
-+      src = XEXP (src, 0);
-+       else if (GET_CODE (XEXP (src, 1)) == REG
-+        && REGNO_POINTER_FLAG (REGNO (XEXP (src, 1))))
-+      src = XEXP (src, 1);
-+       else
-+      return 0;
-+       if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+      return reg_base_value[REGNO (src)];
-+       return src;
-+ 
-+     case AND:
-+       /* If the second operand is constant set the base
-+       address to the first operand. */
-+       if (GET_CODE (XEXP (src, 1)) == CONST_INT
-+        && GET_CODE (XEXP (src, 0)) == REG)
-+      {
-+        src = XEXP (src, 0);
-+        if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+          return reg_base_value[REGNO (src)];
-+        return src;
-+      }
-+       return 0;
-+ 
-+     case HIGH:
-+       return XEXP (src, 0);
-+     }
-+ 
-+   return 0;
-+ }
-+ 
-+ /* Called from init_alias_analysis indirectly through note_stores.  */
-+ 
-+ /* while scanning insns to find base values, reg_seen[N] is nonzero if
-+    register N has been set in this function.  */
-+ static char *reg_seen;
-+ 
-+ static
-+ void record_set (dest, set)
-+      rtx dest, set;
-+ {
-+   register int regno;
-+   rtx src;
-+ 
-+   if (GET_CODE (dest) != REG)
-+     return;
-+ 
-+   regno = REGNO (dest);
-+ 
-+   if (set)
-+     {
-+       /* A CLOBBER wipes out any old value but does not prevent a previously
-+       unset register from acquiring a base address (i.e. reg_seen is not
-+       set).  */
-+       if (GET_CODE (set) == CLOBBER)
-+      {
-+        reg_base_value[regno] = 0;
-+        return;
-+      }
-+       src = SET_SRC (set);
-+     }
-+   else
-+     {
-+       static int unique_id;
-+       if (reg_seen[regno])
-+      {
-+        reg_base_value[regno] = 0;
-+        return;
-+      }
-+       reg_seen[regno] = 1;
-+       reg_base_value[regno] = gen_rtx (ADDRESS, Pmode,
-+                                     GEN_INT (unique_id++));
-+       return;
-+     }
-+ 
-+   /* This is not the first set.  If the new value is not related to the
-+      old value, forget the base value. Note that the following code is
-+      not detected:
-+      extern int x, y;  int *p = &x; p += (&y-&x);
-+      ANSI C does not allow computing the difference of addresses
-+      of distinct top level objects.  */
-+   if (reg_base_value[regno])
-+     switch (GET_CODE (src))
-+       {
-+       case PLUS:
-+       case MINUS:
-+      if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
-+        reg_base_value[regno] = 0;
-+      break;
-+       case AND:
-+      if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
-+        reg_base_value[regno] = 0;
-+      break;
-+       case LO_SUM:
-+      if (XEXP (src, 0) != dest)
-+        reg_base_value[regno] = 0;
-+      break;
-+       default:
-+      reg_base_value[regno] = 0;
-+      break;
-+       }
-+   /* If this is the first set of a register, record the value.  */
-+   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
-+         && ! reg_seen[regno] && reg_base_value[regno] == 0)
-+     reg_base_value[regno] = find_base_value (src);
-+ 
-+   reg_seen[regno] = 1;
-+ }
-+ 
-+ /* Called from loop optimization when a new pseudo-register is created.  */
-+ void
-+ record_base_value (regno, val)
-+      int regno;
-+      rtx val;
-+ {
-+   if (!flag_alias_check || regno >= reg_base_value_size)
-+     return;
-+   if (GET_CODE (val) == REG)
-+     {
-+       if (REGNO (val) < reg_base_value_size)
-+      reg_base_value[regno] = reg_base_value[REGNO (val)];
-+       return;
-+     }
-+   reg_base_value[regno] = find_base_value (val);
-+ }
-+ 
-+ static rtx
-+ canon_rtx (x)
-+      rtx x;
-+ {
-+   /* Recursively look for equivalences.  */
-+   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-+       && REGNO (x) < reg_known_value_size)
-+     return reg_known_value[REGNO (x)] == x
-+       ? x : canon_rtx (reg_known_value[REGNO (x)]);
-+   else if (GET_CODE (x) == PLUS)
-+     {
-+       rtx x0 = canon_rtx (XEXP (x, 0));
-+       rtx x1 = canon_rtx (XEXP (x, 1));
-+ 
-+       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-+      {
-+        /* We can tolerate LO_SUMs being offset here; these
-+           rtl are used for nothing other than comparisons.  */
-+        if (GET_CODE (x0) == CONST_INT)
-+          return plus_constant_for_output (x1, INTVAL (x0));
-+        else if (GET_CODE (x1) == CONST_INT)
-+          return plus_constant_for_output (x0, INTVAL (x1));
-+        return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-+      }
-+     }
-+   /* This gives us much better alias analysis when called from
-+      the loop optimizer.   Note we want to leave the original
-+      MEM alone, but need to return the canonicalized MEM with
-+      all the flags with their original values.  */
-+   else if (GET_CODE (x) == MEM)
-+     {
-+       rtx addr = canon_rtx (XEXP (x, 0));
-+       if (addr != XEXP (x, 0))
-+      {
-+        rtx new = gen_rtx (MEM, GET_MODE (x), addr);
-+        MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x);
-+        RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
-+        MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x);
-+        x = new;
-+      }
-+     }
-+   return x;
-+ }
-+ 
-+ /* Return 1 if X and Y are identical-looking rtx's.
-+ 
-+    We use the data in reg_known_value above to see if two registers with
-+    different numbers are, in fact, equivalent.  */
-+ 
-+ static int
-+ rtx_equal_for_memref_p (x, y)
-+      rtx x, y;
-+ {
-+   register int i;
-+   register int j;
-+   register enum rtx_code code;
-+   register char *fmt;
-+ 
-+   if (x == 0 && y == 0)
-+     return 1;
-+   if (x == 0 || y == 0)
-+     return 0;
-+   x = canon_rtx (x);
-+   y = canon_rtx (y);
-+ 
-+   if (x == y)
-+     return 1;
-+ 
-+   code = GET_CODE (x);
-+   /* Rtx's of different codes cannot be equal.  */
-+   if (code != GET_CODE (y))
-+     return 0;
-+ 
-+   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-+      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
-+ 
-+   if (GET_MODE (x) != GET_MODE (y))
-+     return 0;
-+ 
-+   /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively.  */
-+ 
-+   if (code == REG)
-+     return REGNO (x) == REGNO (y);
-+   if (code == LABEL_REF)
-+     return XEXP (x, 0) == XEXP (y, 0);
-+   if (code == SYMBOL_REF)
-+     return XSTR (x, 0) == XSTR (y, 0);
-+ 
-+   /* For commutative operations, the RTX match if the operand match in any
-+      order.  Also handle the simple binary and unary cases without a loop.  */
-+   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-+     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+           && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-+          || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-+              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-+   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-+     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+          && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-+   else if (GET_RTX_CLASS (code) == '1')
-+     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-+ 
-+   /* Compare the elements.  If any pair of corresponding elements
-+      fail to match, return 0 for the whole things.  */
-+ 
-+   fmt = GET_RTX_FORMAT (code);
-+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+     {
-+       switch (fmt[i])
-+      {
-+      case 'w':
-+        if (XWINT (x, i) != XWINT (y, i))
-+          return 0;
-+        break;
-+ 
-+      case 'n':
-+      case 'i':
-+        if (XINT (x, i) != XINT (y, i))
-+          return 0;
-+        break;
-+ 
-+      case 'V':
-+      case 'E':
-+        /* Two vectors must have the same length.  */
-+        if (XVECLEN (x, i) != XVECLEN (y, i))
-+          return 0;
-+ 
-+        /* And the corresponding elements must match.  */
-+        for (j = 0; j < XVECLEN (x, i); j++)
-+          if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-+            return 0;
-+        break;
-+ 
-+      case 'e':
-+        if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-+          return 0;
-+        break;
-+ 
-+      case 'S':
-+      case 's':
-+        if (strcmp (XSTR (x, i), XSTR (y, i)))
-+          return 0;
-+        break;
-+ 
-+      case 'u':
-+        /* These are just backpointers, so they don't matter.  */
-+        break;
-+ 
-+      case '0':
-+        break;
-+ 
-+        /* It is believed that rtx's at this level will never
-+           contain anything but integers and other rtx's,
-+           except for within LABEL_REFs and SYMBOL_REFs.  */
-+      default:
-+        abort ();
-+      }
-+     }
-+   return 1;
-+ }
-+ 
-+ /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-+    X and return it, or return 0 if none found.  */
-+ 
-+ static rtx
-+ find_symbolic_term (x)
-+      rtx x;
-+ {
-+   register int i;
-+   register enum rtx_code code;
-+   register char *fmt;
-+ 
-+   code = GET_CODE (x);
-+   if (code == SYMBOL_REF || code == LABEL_REF)
-+     return x;
-+   if (GET_RTX_CLASS (code) == 'o')
-+     return 0;
-+ 
-+   fmt = GET_RTX_FORMAT (code);
-+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+     {
-+       rtx t;
-+ 
-+       if (fmt[i] == 'e')
-+      {
-+        t = find_symbolic_term (XEXP (x, i));
-+        if (t != 0)
-+          return t;
-+      }
-+       else if (fmt[i] == 'E')
-+      break;
-+     }
-+   return 0;
-+ }
-+ 
-+ static rtx
-+ find_base_term (x)
-+      register rtx x;
-+ {
-+   switch (GET_CODE (x))
-+     {
-+     case REG:
-+       return REG_BASE_VALUE (x);
-+ 
-+     case HIGH:
-+       return find_base_term (XEXP (x, 0));
-+ 
-+     case CONST:
-+       x = XEXP (x, 0);
-+       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
-+      return 0;
-+       /* fall through */
-+     case LO_SUM:
-+     case PLUS:
-+     case MINUS:
-+       {
-+      rtx tmp = find_base_term (XEXP (x, 0));
-+      if (tmp)
-+        return tmp;
-+      return find_base_term (XEXP (x, 1));
-+       }
-+ 
-+     case AND:
-+       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+      return REG_BASE_VALUE (XEXP (x, 0));
-+       return 0;
-+ 
-+     case SYMBOL_REF:
-+     case LABEL_REF:
-+       return x;
-+ 
-+     default:
-+       return 0;
-+     }
-+ }
-+ 
-+ /* Return 0 if the addresses X and Y are known to point to different
-+    objects, 1 if they might be pointers to the same object.  */
-+ 
-+ static int
-+ base_alias_check (x, y)
-+      rtx x, y;
-+ {
-+   rtx x_base = find_base_term (x);
-+   rtx y_base = find_base_term (y);
-+ 
-+   /* If either base address is unknown or the base addresses are equal,
-+      nothing is known about aliasing.  */
-+ 
-+   if (x_base == 0 || y_base == 0 || rtx_equal_p (x_base, y_base))
-+     return 1;
-+ 
-+   /* The base addresses of the read and write are different
-+      expressions.  If they are both symbols there is no
-+      conflict.  */
-+   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
-+     return 0;
-+ 
-+   /* If one address is a stack reference there can be no alias:
-+      stack references using different base registers do not alias,
-+      a stack reference can not alias a parameter, and a stack reference
-+      can not alias a global.  */
-+   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
-+       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
-+     return 0;
-+ 
-+   if (! flag_argument_noalias)
-+     return 1;
-+ 
-+   if (flag_argument_noalias > 1)
-+     return 0;
-+ 
-+   /* Weak noalias assertion (arguments are distinct, but may match globals). */
-+   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
-+ }
-+ 
-+ /* Return nonzero if X and Y (memory addresses) could reference the
-+    same location in memory.  C is an offset accumulator.  When
-+    C is nonzero, we are testing aliases between X and Y + C.
-+    XSIZE is the size in bytes of the X reference,
-+    similarly YSIZE is the size in bytes for Y.
-+ 
-+    If XSIZE or YSIZE is zero, we do not know the amount of memory being
-+    referenced (the reference was BLKmode), so make the most pessimistic
-+    assumptions.
-+ 
-+    We recognize the following cases of non-conflicting memory:
-+ 
-+      (1) addresses involving the frame pointer cannot conflict
-+          with addresses involving static variables.
-+      (2) static variables with different addresses cannot conflict.
-+ 
-+    Nice to notice that varying addresses cannot conflict with fp if no
-+    local variables had their addresses taken, but that's too hard now.  */
-+ 
-+ 
-+ static int
-+ memrefs_conflict_p (xsize, x, ysize, y, c)
-+      register rtx x, y;
-+      int xsize, ysize;
-+      HOST_WIDE_INT c;
-+ {
-+   if (GET_CODE (x) == HIGH)
-+     x = XEXP (x, 0);
-+   else if (GET_CODE (x) == LO_SUM)
-+     x = XEXP (x, 1);
-+   else
-+     x = canon_rtx (x);
-+   if (GET_CODE (y) == HIGH)
-+     y = XEXP (y, 0);
-+   else if (GET_CODE (y) == LO_SUM)
-+     y = XEXP (y, 1);
-+   else
-+     y = canon_rtx (y);
-+ 
-+   if (rtx_equal_for_memref_p (x, y))
-+     {
-+       if (xsize == 0 || ysize == 0)
-+      return 1;
-+       if (c >= 0 && xsize > c)
-+      return 1;
-+       if (c < 0 && ysize+c > 0)
-+      return 1;
-+       return 0;
-+     }
-+ 
-+   if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-+       || y == stack_pointer_rtx)
-+     {
-+       rtx t = y;
-+       int tsize = ysize;
-+       y = x; ysize = xsize;
-+       x = t; xsize = tsize;
-+     }
-+ 
-+   if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-+       || x == stack_pointer_rtx)
-+     {
-+       rtx y1;
-+ 
-+       if (CONSTANT_P (y))
-+      return 0;
-+ 
-+       if (GET_CODE (y) == PLUS
-+        && canon_rtx (XEXP (y, 0)) == x
-+        && (y1 = canon_rtx (XEXP (y, 1)))
-+        && GET_CODE (y1) == CONST_INT)
-+      {
-+        c += INTVAL (y1);
-+        return (xsize == 0 || ysize == 0
-+                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+      }
-+ 
-+       if (GET_CODE (y) == PLUS
-+        && (y1 = canon_rtx (XEXP (y, 0)))
-+        && CONSTANT_P (y1))
-+      return 0;
-+ 
-+       return 1;
-+     }
-+ 
-+   if (GET_CODE (x) == PLUS)
-+     {
-+       /* The fact that X is canonicalized means that this
-+       PLUS rtx is canonicalized.  */
-+       rtx x0 = XEXP (x, 0);
-+       rtx x1 = XEXP (x, 1);
-+ 
-+       if (GET_CODE (y) == PLUS)
-+      {
-+        /* The fact that Y is canonicalized means that this
-+           PLUS rtx is canonicalized.  */
-+        rtx y0 = XEXP (y, 0);
-+        rtx y1 = XEXP (y, 1);
-+ 
-+        if (rtx_equal_for_memref_p (x1, y1))
-+          return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+        if (rtx_equal_for_memref_p (x0, y0))
-+          return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-+        if (GET_CODE (x1) == CONST_INT)
-+          if (GET_CODE (y1) == CONST_INT)
-+            return memrefs_conflict_p (xsize, x0, ysize, y0,
-+                                       c - INTVAL (x1) + INTVAL (y1));
-+          else
-+            return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+        else if (GET_CODE (y1) == CONST_INT)
-+          return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+ 
-+        /* Handle case where we cannot understand iteration operators,
-+           but we notice that the base addresses are distinct objects.  */
-+        /* ??? Is this still necessary? */
-+        x = find_symbolic_term (x);
-+        if (x == 0)
-+          return 1;
-+        y = find_symbolic_term (y);
-+        if (y == 0)
-+          return 1;
-+        return rtx_equal_for_memref_p (x, y);
-+      }
-+       else if (GET_CODE (x1) == CONST_INT)
-+      return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+     }
-+   else if (GET_CODE (y) == PLUS)
-+     {
-+       /* The fact that Y is canonicalized means that this
-+       PLUS rtx is canonicalized.  */
-+       rtx y0 = XEXP (y, 0);
-+       rtx y1 = XEXP (y, 1);
-+ 
-+       if (GET_CODE (y1) == CONST_INT)
-+      return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+       else
-+      return 1;
-+     }
-+ 
-+   if (GET_CODE (x) == GET_CODE (y))
-+     switch (GET_CODE (x))
-+       {
-+       case MULT:
-+      {
-+        /* Handle cases where we expect the second operands to be the
-+           same, and check only whether the first operand would conflict
-+           or not.  */
-+        rtx x0, y0;
-+        rtx x1 = canon_rtx (XEXP (x, 1));
-+        rtx y1 = canon_rtx (XEXP (y, 1));
-+        if (! rtx_equal_for_memref_p (x1, y1))
-+          return 1;
-+        x0 = canon_rtx (XEXP (x, 0));
-+        y0 = canon_rtx (XEXP (y, 0));
-+        if (rtx_equal_for_memref_p (x0, y0))
-+          return (xsize == 0 || ysize == 0
-+                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ 
-+        /* Can't properly adjust our sizes.  */
-+        if (GET_CODE (x1) != CONST_INT)
-+          return 1;
-+        xsize /= INTVAL (x1);
-+        ysize /= INTVAL (x1);
-+        c /= INTVAL (x1);
-+        return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+      }
-+       }
-+ 
-+   /* Treat an access through an AND (e.g. a subword access on an Alpha)
-+      as an access with indeterminate size.  */
-+   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+     return memrefs_conflict_p (0, XEXP (x, 0), ysize, y, c);
-+   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
-+     return memrefs_conflict_p (xsize, x, 0, XEXP (y, 0), c);
-+ 
-+   if (CONSTANT_P (x))
-+     {
-+       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-+      {
-+        c += (INTVAL (y) - INTVAL (x));
-+        return (xsize == 0 || ysize == 0
-+                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+      }
-+ 
-+       if (GET_CODE (x) == CONST)
-+      {
-+        if (GET_CODE (y) == CONST)
-+          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+                                     ysize, canon_rtx (XEXP (y, 0)), c);
-+        else
-+          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+                                     ysize, y, c);
-+      }
-+       if (GET_CODE (y) == CONST)
-+      return memrefs_conflict_p (xsize, x, ysize,
-+                                 canon_rtx (XEXP (y, 0)), c);
-+ 
-+       if (CONSTANT_P (y))
-+      return (rtx_equal_for_memref_p (x, y)
-+              && (xsize == 0 || ysize == 0
-+                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-+ 
-+       return 1;
-+     }
-+   return 1;
-+ }
-+ 
-+ /* Functions to compute memory dependencies.
-+ 
-+    Since we process the insns in execution order, we can build tables
-+    to keep track of what registers are fixed (and not aliased), what registers
-+    are varying in known ways, and what registers are varying in unknown
-+    ways.
-+ 
-+    If both memory references are volatile, then there must always be a
-+    dependence between the two references, since their order can not be
-+    changed.  A volatile and non-volatile reference can be interchanged
-+    though. 
-+ 
-+    A MEM_IN_STRUCT reference at a non-QImode varying address can never
-+    conflict with a non-MEM_IN_STRUCT reference at a fixed address.   We must
-+    allow QImode aliasing because the ANSI C standard allows character
-+    pointers to alias anything.  We are assuming that characters are
-+    always QImode here.  */
-+ 
-+ /* Read dependence: X is read after read in MEM takes place.  There can
-+    only be a dependence here if both reads are volatile.  */
-+ 
-+ int
-+ read_dependence (mem, x)
-+      rtx mem;
-+      rtx x;
-+ {
-+   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-+ }
-+ 
-+ /* True dependence: X is read after store in MEM takes place.  */
-+ 
-+ int
-+ true_dependence (mem, mem_mode, x, varies)
-+      rtx mem;
-+      enum machine_mode mem_mode;
-+      rtx x;
-+      int (*varies)();
-+ {
-+   rtx x_addr, mem_addr;
-+ 
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   x_addr = XEXP (x, 0);
-+   mem_addr = XEXP (mem, 0);
-+ 
-+   if (flag_alias_check && ! base_alias_check (x_addr, mem_addr))
-+     return 0;
-+ 
-+   /* If X is an unchanging read, then it can't possibly conflict with any
-+      non-unchanging store.  It may conflict with an unchanging write though,
-+      because there may be a single store to this address to initialize it.
-+      Just fall through to the code below to resolve the case where we have
-+      both an unchanging read and an unchanging write.  This won't handle all
-+      cases optimally, but the possible performance loss should be
-+      negligible.  */
-+   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-+     return 0;
-+ 
-+   x_addr = canon_rtx (x_addr);
-+   mem_addr = canon_rtx (mem_addr);
-+   if (mem_mode == VOIDmode)
-+     mem_mode = GET_MODE (mem);
-+ 
-+   if (! memrefs_conflict_p (mem_mode, mem_addr, SIZE_FOR_MODE (x), x_addr, 0))
-+     return 0;
-+ 
-+   /* If both references are struct references, or both are not, nothing
-+      is known about aliasing.
-+ 
-+      If either reference is QImode or BLKmode, ANSI C permits aliasing.
-+ 
-+      If both addresses are constant, or both are not, nothing is known
-+      about aliasing.  */
-+   if (MEM_IN_STRUCT_P (x) == MEM_IN_STRUCT_P (mem)
-+       || mem_mode == QImode || mem_mode == BLKmode
-+       || GET_MODE (x) == QImode || GET_MODE (mem) == BLKmode
-+       || varies (x_addr) == varies (mem_addr))
-+     return 1;
-+ 
-+   /* One memory reference is to a constant address, one is not.
-+      One is to a structure, the other is not.
-+ 
-+      If either memory reference is a variable structure the other is a
-+      fixed scalar and there is no aliasing.  */
-+   if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr))
-+       || (MEM_IN_STRUCT_P (x) && varies (x)))
-+     return 0;
-+ 
-+   return 1;
-+ }
-+ 
-+ /* Anti dependence: X is written after read in MEM takes place.  */
-+ 
-+ int
-+ anti_dependence (mem, x)
-+      rtx mem;
-+      rtx x;
-+ {
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   if (flag_alias_check && ! base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+     return 0;
-+ 
-+   /* If MEM is an unchanging read, then it can't possibly conflict with
-+      the store to X, because there is at most one store to MEM, and it must
-+      have occurred somewhere before MEM.  */
-+   x = canon_rtx (x);
-+   mem = canon_rtx (mem);
-+   if (RTX_UNCHANGING_P (mem))
-+     return 0;
-+ 
-+   return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+                            SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+        && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+              && GET_MODE (mem) != QImode
-+              && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+        && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+              && GET_MODE (x) != QImode
-+              && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+ 
-+ /* Output dependence: X is written after store in MEM takes place.  */
-+ 
-+ int
-+ output_dependence (mem, x)
-+      register rtx mem;
-+      register rtx x;
-+ {
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   if (flag_alias_check && !base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+     return 0;
-+ 
-+   x = canon_rtx (x);
-+   mem = canon_rtx (mem);
-+   return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+                            SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+        && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+              && GET_MODE (mem) != QImode
-+              && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+        && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+              && GET_MODE (x) != QImode
-+              && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+ 
-+ void
-+ init_alias_analysis ()
-+ {
-+   int maxreg = max_reg_num ();
-+   int changed;
-+   register int i;
-+   register rtx insn;
-+   rtx note;
-+   rtx set;
-+ 
-+   reg_known_value_size = maxreg;
-+ 
-+   reg_known_value
-+     = (rtx *) oballoc ((maxreg - FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-+     - FIRST_PSEUDO_REGISTER;
-+   reg_known_equiv_p =
-+     oballoc (maxreg - FIRST_PSEUDO_REGISTER) - FIRST_PSEUDO_REGISTER;
-+   bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-+       (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-+   bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-+       (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-+ 
-+   if (flag_alias_check)
-+     {
-+       /* Overallocate reg_base_value to allow some growth during loop
-+       optimization.  Loop unrolling can create a large number of
-+       registers.  */
-+       reg_base_value_size = maxreg * 2;
-+       reg_base_value = (rtx *)oballoc (reg_base_value_size * sizeof (rtx));
-+       reg_seen = (char *)alloca (reg_base_value_size);
-+       bzero (reg_base_value, reg_base_value_size * sizeof (rtx));
-+       bzero (reg_seen, reg_base_value_size);
-+ 
-+       /* Mark all hard registers which may contain an address.
-+       The stack, frame and argument pointers may contain an address.
-+       An argument register which can hold a Pmode value may contain
-+       an address even if it is not in BASE_REGS.
-+ 
-+       The address expression is VOIDmode for an argument and
-+       Pmode for other registers.  */
-+ #ifndef OUTGOING_REGNO
-+ #define OUTGOING_REGNO(N) N
-+ #endif
-+       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+      /* Check whether this register can hold an incoming pointer
-+         argument.  FUNCTION_ARG_REGNO_P tests outgoing register
-+         numbers, so translate if necessary due to register windows. */
-+      if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode))
-+        reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
-+                                     gen_rtx (REG, Pmode, i));
-+ 
-+       reg_base_value[STACK_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
-+       reg_base_value[ARG_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
-+       reg_base_value[FRAME_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
-+       reg_base_value[HARD_FRAME_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
-+     }
-+ 
-+   copying_arguments = 1;
-+   /* Fill in the entries with known constant values.  */
-+   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+     {
-+       if (flag_alias_check && GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-+      {
-+        /* If this insn has a noalias note, process it,  Otherwise,
-+           scan for sets.  A simple set will have no side effects
-+           which could change the base value of any other register. */
-+        rtx noalias_note;
-+        if (GET_CODE (PATTERN (insn)) == SET
-+            && (noalias_note = find_reg_note (insn, REG_NOALIAS, NULL_RTX)))
-+            record_set (SET_DEST (PATTERN (insn)), 0);
-+        else
-+          note_stores (PATTERN (insn), record_set);
-+      }
-+       else if (GET_CODE (insn) == NOTE
-+             && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
-+      copying_arguments = 0;
-+ 
-+       if ((set = single_set (insn)) != 0
-+        && GET_CODE (SET_DEST (set)) == REG
-+        && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-+        && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-+             && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-+            || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-+        && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-+      {
-+        int regno = REGNO (SET_DEST (set));
-+        reg_known_value[regno] = XEXP (note, 0);
-+        reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-+      }
-+     }
-+ 
-+   /* Fill in the remaining entries.  */
-+   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
-+     if (reg_known_value[i] == 0)
-+       reg_known_value[i] = regno_reg_rtx[i];
-+ 
-+   if (! flag_alias_check)
-+     return;
-+ 
-+   /* Simplify the reg_base_value array so that no register refers to
-+      another register, except to special registers indirectly through
-+      ADDRESS expressions.
-+ 
-+      In theory this loop can take as long as O(registers^2), but unless
-+      there are very long dependency chains it will run in close to linear
-+      time.  */
-+   do
-+     {
-+       changed = 0;
-+       for (i = FIRST_PSEUDO_REGISTER; i < reg_base_value_size; i++)
-+      {
-+        rtx base = reg_base_value[i];
-+        if (base && GET_CODE (base) == REG)
-+          {
-+            int base_regno = REGNO (base);
-+            if (base_regno == i)              /* register set from itself */
-+              reg_base_value[i] = 0;
-+            else
-+              reg_base_value[i] = reg_base_value[base_regno];
-+            changed = 1;
-+          }
-+      }
-+     }
-+   while (changed);
-+ 
-+   reg_seen = 0;
-+ }
-+ 
-+ void
-+ end_alias_analysis ()
-+ {
-+   reg_known_value = 0;
-+   reg_base_value = 0;
-+   reg_base_value_size = 0;
-+ }
-diff -rcp2N gcc-2.7.2.2/c-decl.c g77-new/c-decl.c
-*** gcc-2.7.2.2/c-decl.c       Fri Oct 27 05:44:43 1995
---- g77-new/c-decl.c   Sun Aug 10 18:46:24 1997
-*************** init_decl_processing ()
-*** 3207,3210 ****
---- 3207,3223 ----
-    builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
-                   BUILT_IN_COS, "cosl");
-+   builtin_function ("__builtin_setjmp",
-+                  build_function_type (integer_type_node,
-+                                       tree_cons (NULL_TREE,
-+                                                  ptr_type_node, endlink)),
-+                  BUILT_IN_SETJMP, NULL_PTR);
-+   builtin_function ("__builtin_longjmp",
-+                  build_function_type
-+                  (void_type_node,
-+                   tree_cons (NULL, ptr_type_node,
-+                              tree_cons (NULL_TREE,
-+                                         integer_type_node,
-+                                         endlink))),
-+                  BUILT_IN_LONGJMP, NULL_PTR);
-  
-    /* In an ANSI C program, it is okay to supply built-in meanings
-*************** grokdeclarator (declarator, declspecs, d
-*** 4049,4052 ****
---- 4062,4066 ----
-    int volatilep;
-    int inlinep;
-+   int restrictp;
-    int explicit_int = 0;
-    int explicit_char = 0;
-*************** grokdeclarator (declarator, declspecs, d
-*** 4342,4349 ****
---- 4356,4366 ----
-    volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
-    inlinep = !! (specbits & (1 << (int) RID_INLINE));
-+   restrictp = !! (specbits & (1 << (int) RID_RESTRICT));
-    if (constp > 1)
-      pedwarn ("duplicate `const'");
-    if (volatilep > 1)
-      pedwarn ("duplicate `volatile'");
-+   if (restrictp)
-+     error ("`restrict' used in non-parameter or non-pointer type declaration");
-    if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
-      type = TYPE_MAIN_VARIANT (type);
-*************** grokdeclarator (declarator, declspecs, d
-*** 4693,4696 ****
---- 4710,4715 ----
-                 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
-                   volatilep++;
-+                else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_RESTRICT])
-+                  restrictp++;
-                 else if (!erred)
-                   {
-*************** grokdeclarator (declarator, declspecs, d
-*** 4703,4706 ****
---- 4722,4727 ----
-             if (volatilep > 1)
-               pedwarn ("duplicate `volatile'");
-+            if (restrictp > 1)
-+              pedwarn ("duplicate `restrict'");
-           }
-  
-*************** grokdeclarator (declarator, declspecs, d
-*** 4844,4847 ****
---- 4865,4875 ----
-         }
-  
-+      if (restrictp)
-+        {
-+          if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
-+            error ("`restrict' applied to non-pointer");
-+          DECL_RESTRICT (decl) = 1;
-+        }
-+ 
-       DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
-        }
-*************** start_struct (code, name)
-*** 5365,5368 ****
---- 5393,5397 ----
-    pushtag (name, ref);
-    C_TYPE_BEING_DEFINED (ref) = 1;
-+   TYPE_PACKED (ref) = flag_pack_struct;
-    return ref;
-  }
-*************** start_enum (name)
-*** 5806,5809 ****
---- 5835,5841 ----
-    enum_overflow = 0;
-  
-+   if (flag_short_enums)
-+     TYPE_PACKED (enumtype) = 1;
-+ 
-    return enumtype;
-  }
-*************** finish_enum (enumtype, values, attribute
-*** 5862,5867 ****
-    precision = MAX (lowprec, highprec);
-  
-!   if (flag_short_enums || TYPE_PACKED (enumtype)
-!       || precision > TYPE_PRECISION (integer_type_node))
-      /* Use the width of the narrowest normal C type which is wide enough.  */
-      TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
---- 5894,5898 ----
-    precision = MAX (lowprec, highprec);
-  
-!   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
-      /* Use the width of the narrowest normal C type which is wide enough.  */
-      TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
-diff -rcp2N gcc-2.7.2.2/c-gperf.h g77-new/c-gperf.h
-*** gcc-2.7.2.2/c-gperf.h      Fri Mar  4 14:15:53 1994
---- g77-new/c-gperf.h  Mon Aug 11 02:58:47 1997
-***************
-*** 1,15 ****
-  /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf  */
-  struct resword { char *name; short token; enum rid rid; };
-  
-! #define TOTAL_KEYWORDS 79
-  #define MIN_WORD_LENGTH 2
-  #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 10
-! #define MAX_HASH_VALUE 144
-! /* maximum key range = 135, duplicates = 0 */
-  
-  #ifdef __GNUC__
-! __inline
-  #endif
-  static unsigned int
---- 1,16 ----
-  /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ../g77-new/c-parse.gperf  */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
-  struct resword { char *name; short token; enum rid rid; };
-  
-! #define TOTAL_KEYWORDS 81
-  #define MIN_WORD_LENGTH 2
-  #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 11
-! #define MAX_HASH_VALUE 157
-! /* maximum key range = 147, duplicates = 0 */
-  
-  #ifdef __GNUC__
-! inline
-  #endif
-  static unsigned int
-*************** hash (str, len)
-*** 20,36 ****
-    static unsigned char asso_values[] =
-      {
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145,  25, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145,   1, 145,  46,   8,  15,
-!       61,   6,  36,  48,   3,   5, 145,  18,  63,  25,
-!       29,  76,   1, 145,  13,   2,   1,  51,  37,   9,
-!        9,   1,   3, 145, 145, 145, 145, 145,
-      };
-    register int hval = len;
---- 21,37 ----
-    static unsigned char asso_values[] =
-      {
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158,   2, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158,   1, 158,  18,   1,  58,
-!       56,   6,  44,  64,  13,  45, 158,   4,  26,  68,
-!        2,  74,   1, 158,   2,  13,   1,  33,  48,   5,
-!        5,   3,  12, 158, 158, 158, 158, 158,
-      };
-    register int hval = len;
-*************** hash (str, len)
-*** 44,47 ****
---- 45,49 ----
-        case 1:
-          hval += asso_values[str[0]];
-+         break;
-      }
-    return hval + asso_values[str[len - 1]];
-*************** hash (str, len)
-*** 50,166 ****
-  static struct resword wordlist[] =
-  {
-!   {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"",}, 
-!   {"int",  TYPESPEC, RID_INT},
-!   {"",}, {"",}, 
-!   {"__typeof__",  TYPEOF, NORID},
-!   {"__signed__",  TYPESPEC, RID_SIGNED},
-!   {"__imag__",  IMAGPART, NORID},
-!   {"switch",  SWITCH, NORID},
-!   {"__inline__",  SCSPEC, RID_INLINE},
-!   {"else",  ELSE, NORID},
-!   {"__iterator__",  SCSPEC, RID_ITERATOR},
-!   {"__inline",  SCSPEC, RID_INLINE},
-!   {"__extension__",  EXTENSION, NORID},
-!   {"struct",  STRUCT, NORID},
-!   {"__real__",  REALPART, NORID},
-!   {"__const",  TYPE_QUAL, RID_CONST},
-!   {"while",  WHILE, NORID},
-!   {"__const__",  TYPE_QUAL, RID_CONST},
-!   {"case",  CASE, NORID},
-!   {"__complex__",  TYPESPEC, RID_COMPLEX},
-!   {"__iterator",  SCSPEC, RID_ITERATOR},
-!   {"bycopy",  TYPE_QUAL, RID_BYCOPY},
-!   {"",}, {"",}, {"",}, 
-!   {"__complex",  TYPESPEC, RID_COMPLEX},
-!   {"",}, 
-!   {"in",  TYPE_QUAL, RID_IN},
-!   {"break",  BREAK, NORID},
-!   {"@defs",  DEFS, NORID},
-!   {"",}, {"",}, {"",}, 
-!   {"extern",  SCSPEC, RID_EXTERN},
-!   {"if",  IF, NORID},
-!   {"typeof",  TYPEOF, NORID},
-!   {"typedef",  SCSPEC, RID_TYPEDEF},
-!   {"__typeof",  TYPEOF, NORID},
-!   {"sizeof",  SIZEOF, NORID},
-!   {"",}, 
-!   {"return",  RETURN, NORID},
-!   {"const",  TYPE_QUAL, RID_CONST},
-!   {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
-!   {"@private",  PRIVATE, NORID},
-!   {"@selector",  SELECTOR, NORID},
-!   {"__volatile",  TYPE_QUAL, RID_VOLATILE},
-!   {"__asm__",  ASM_KEYWORD, NORID},
-!   {"",}, {"",}, 
-!   {"continue",  CONTINUE, NORID},
-!   {"__alignof__",  ALIGNOF, NORID},
-!   {"__imag",  IMAGPART, NORID},
-!   {"__attribute__",  ATTRIBUTE, NORID},
-!   {"",}, {"",}, 
-!   {"__attribute",  ATTRIBUTE, NORID},
-!   {"for",  FOR, NORID},
-!   {"",}, 
-!   {"@encode",  ENCODE, NORID},
-!   {"id",  OBJECTNAME, RID_ID},
-!   {"static",  SCSPEC, RID_STATIC},
-!   {"@interface",  INTERFACE, NORID},
-!   {"",}, 
-!   {"__signed",  TYPESPEC, RID_SIGNED},
-!   {"",}, 
-!   {"__label__",  LABEL, NORID},
-!   {"",}, {"",}, 
-!   {"__asm",  ASM_KEYWORD, NORID},
-!   {"char",  TYPESPEC, RID_CHAR},
-!   {"",}, 
-!   {"inline",  SCSPEC, RID_INLINE},
-!   {"out",  TYPE_QUAL, RID_OUT},
-!   {"register",  SCSPEC, RID_REGISTER},
-!   {"__real",  REALPART, NORID},
-!   {"short",  TYPESPEC, RID_SHORT},
-!   {"",}, 
-!   {"enum",  ENUM, NORID},
-!   {"inout",  TYPE_QUAL, RID_INOUT},
-!   {"",}, 
-!   {"oneway",  TYPE_QUAL, RID_ONEWAY},
-!   {"union",  UNION, NORID},
-!   {"",}, 
-!   {"__alignof",  ALIGNOF, NORID},
-!   {"",}, 
-!   {"@implementation",  IMPLEMENTATION, NORID},
-!   {"",}, 
-!   {"@class",  CLASS, NORID},
-!   {"",}, 
-!   {"@public",  PUBLIC, NORID},
-!   {"asm",  ASM_KEYWORD, NORID},
-!   {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"default",  DEFAULT, NORID},
-!   {"",}, 
-!   {"void",  TYPESPEC, RID_VOID},
-!   {"",}, 
-!   {"@protected",  PROTECTED, NORID},
-!   {"@protocol",  PROTOCOL, NORID},
-!   {"",}, {"",}, {"",}, 
-!   {"volatile",  TYPE_QUAL, RID_VOLATILE},
-!   {"",}, {"",}, 
-!   {"signed",  TYPESPEC, RID_SIGNED},
-!   {"float",  TYPESPEC, RID_FLOAT},
-!   {"@end",  END, NORID},
-!   {"",}, {"",}, 
-!   {"unsigned",  TYPESPEC, RID_UNSIGNED},
-!   {"@compatibility_alias",  ALIAS, NORID},
-!   {"double",  TYPESPEC, RID_DOUBLE},
-!   {"",}, {"",}, 
-!   {"auto",  SCSPEC, RID_AUTO},
-!   {"",}, 
-!   {"goto",  GOTO, NORID},
-!   {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"do",  DO, NORID},
-!   {"",}, {"",}, {"",}, {"",}, 
-!   {"long",  TYPESPEC, RID_LONG},
-  };
-  
-  #ifdef __GNUC__
-! __inline
-  #endif
-  struct resword *
---- 52,167 ----
-  static struct resword wordlist[] =
-  {
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"",}, {"",}, 
-!       {"return",  RETURN, NORID},
-!       {"__real__",  REALPART, NORID},
-!       {"__typeof__",  TYPEOF, NORID},
-!       {"__restrict",  TYPE_QUAL, RID_RESTRICT},
-!       {"extern",  SCSPEC, RID_EXTERN},
-!       {"break",  BREAK, NORID},
-!       {"@encode",  ENCODE, NORID},
-!       {"@private",  PRIVATE, NORID},
-!       {"@selector",  SELECTOR, NORID},
-!       {"@interface",  INTERFACE, NORID},
-!       {"__extension__",  EXTENSION, NORID},
-!       {"struct",  STRUCT, NORID},
-!       {"",}, 
-!       {"restrict",  TYPE_QUAL, RID_RESTRICT},
-!       {"__signed__",  TYPESPEC, RID_SIGNED},
-!       {"@defs",  DEFS, NORID},
-!       {"__asm__",  ASM_KEYWORD, NORID},
-!       {"",}, 
-!       {"else",  ELSE, NORID},
-!       {"",}, 
-!       {"__alignof__",  ALIGNOF, NORID},
-!       {"",}, 
-!       {"__attribute__",  ATTRIBUTE, NORID},
-!       {"",}, 
-!       {"__real",  REALPART, NORID},
-!       {"__attribute",  ATTRIBUTE, NORID},
-!       {"__label__",  LABEL, NORID},
-!       {"",}, 
-!       {"@protocol",  PROTOCOL, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"@class",  CLASS, NORID},
-!       {"",}, 
-!       {"in",  TYPE_QUAL, RID_IN},
-!       {"int",  TYPESPEC, RID_INT},
-!       {"for",  FOR, NORID},
-!       {"typeof",  TYPEOF, NORID},
-!       {"typedef",  SCSPEC, RID_TYPEDEF},
-!       {"__typeof",  TYPEOF, NORID},
-!       {"__imag__",  IMAGPART, NORID},
-!       {"",}, 
-!       {"__inline__",  SCSPEC, RID_INLINE},
-!       {"__iterator",  SCSPEC, RID_ITERATOR},
-!       {"__iterator__",  SCSPEC, RID_ITERATOR},
-!       {"__inline",  SCSPEC, RID_INLINE},
-!       {"while",  WHILE, NORID},
-!       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
-!       {"",}, 
-!       {"@end",  END, NORID},
-!       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
-!       {"const",  TYPE_QUAL, RID_CONST},
-!       {"__const",  TYPE_QUAL, RID_CONST},
-!       {"bycopy",  TYPE_QUAL, RID_BYCOPY},
-!       {"__const__",  TYPE_QUAL, RID_CONST},
-!       {"@protected",  PROTECTED, NORID},
-!       {"__complex__",  TYPESPEC, RID_COMPLEX},
-!       {"__alignof",  ALIGNOF, NORID},
-!       {"__complex",  TYPESPEC, RID_COMPLEX},
-!       {"continue",  CONTINUE, NORID},
-!       {"sizeof",  SIZEOF, NORID},
-!       {"register",  SCSPEC, RID_REGISTER},
-!       {"switch",  SWITCH, NORID},
-!       {"__signed",  TYPESPEC, RID_SIGNED},
-!       {"out",  TYPE_QUAL, RID_OUT},
-!       {"",}, 
-!       {"case",  CASE, NORID},
-!       {"char",  TYPESPEC, RID_CHAR},
-!       {"inline",  SCSPEC, RID_INLINE},
-!       {"",}, 
-!       {"union",  UNION, NORID},
-!       {"",}, 
-!       {"@implementation",  IMPLEMENTATION, NORID},
-!       {"volatile",  TYPE_QUAL, RID_VOLATILE},
-!       {"oneway",  TYPE_QUAL, RID_ONEWAY},
-!       {"",}, 
-!       {"if",  IF, NORID},
-!       {"__asm",  ASM_KEYWORD, NORID},
-!       {"short",  TYPESPEC, RID_SHORT},
-!       {"",}, 
-!       {"static",  SCSPEC, RID_STATIC},
-!       {"long",  TYPESPEC, RID_LONG},
-!       {"auto",  SCSPEC, RID_AUTO},
-!       {"",}, {"",}, 
-!       {"@public",  PUBLIC, NORID},
-!       {"double",  TYPESPEC, RID_DOUBLE},
-!       {"",}, 
-!       {"id",  OBJECTNAME, RID_ID},
-!       {"",}, {"",}, {"",}, {"",}, 
-!       {"default",  DEFAULT, NORID},
-!       {"@compatibility_alias",  ALIAS, NORID},
-!       {"unsigned",  TYPESPEC, RID_UNSIGNED},
-!       {"enum",  ENUM, NORID},
-!       {"",}, {"",}, {"",}, {"",}, 
-!       {"__imag",  IMAGPART, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"float",  TYPESPEC, RID_FLOAT},
-!       {"inout",  TYPE_QUAL, RID_INOUT},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"do",  DO, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"signed",  TYPESPEC, RID_SIGNED},
-!       {"",}, {"",}, {"",}, 
-!       {"goto",  GOTO, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"void",  TYPESPEC, RID_VOID},
-!       {"",}, {"",}, {"",}, 
-!       {"asm",  ASM_KEYWORD, NORID},
-  };
-  
-  #ifdef __GNUC__
-! inline
-  #endif
-  struct resword *
-diff -rcp2N gcc-2.7.2.2/c-lex.c g77-new/c-lex.c
-*** gcc-2.7.2.2/c-lex.c        Thu Jun 15 07:11:39 1995
---- g77-new/c-lex.c    Sun Aug 10 18:46:49 1997
-*************** init_lex ()
-*** 173,176 ****
---- 173,177 ----
-    ridpointers[(int) RID_CONST] = get_identifier ("const");
-    ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
-+   ridpointers[(int) RID_RESTRICT] = get_identifier ("restrict");
-    ridpointers[(int) RID_AUTO] = get_identifier ("auto");
-    ridpointers[(int) RID_STATIC] = get_identifier ("static");
-*************** init_lex ()
-*** 206,209 ****
---- 207,211 ----
-        UNSET_RESERVED_WORD ("iterator");
-        UNSET_RESERVED_WORD ("complex");
-+       UNSET_RESERVED_WORD ("restrict");
-      }
-    if (flag_no_asm)
-*************** init_lex ()
-*** 214,217 ****
---- 216,220 ----
-        UNSET_RESERVED_WORD ("iterator");
-        UNSET_RESERVED_WORD ("complex");
-+       UNSET_RESERVED_WORD ("restrict");
-      }
-  }
-*************** yylex ()
-*** 1433,1437 ****
-           /* Create a node with determined type and value.  */
-           if (imag)
-!            yylval.ttype = build_complex (convert (type, integer_zero_node),
-                                           build_real (type, value));
-           else
---- 1436,1441 ----
-           /* Create a node with determined type and value.  */
-           if (imag)
-!            yylval.ttype = build_complex (NULL_TREE,
-!                                          convert (type, integer_zero_node),
-                                           build_real (type, value));
-           else
-*************** yylex ()
-*** 1624,1629 ****
-                   <= TYPE_PRECISION (integer_type_node))
-                 yylval.ttype
-!                  = build_complex (integer_zero_node,
-!                                   convert (integer_type_node, yylval.ttype));
-               else
-                 error ("complex integer constant is too wide for `complex int'");
---- 1628,1634 ----
-                   <= TYPE_PRECISION (integer_type_node))
-                 yylval.ttype
-!                  = build_complex (NULL_TREE, integer_zero_node,
-!                                   convert (integer_type_node,
-!                                            yylval.ttype));
-               else
-                 error ("complex integer constant is too wide for `complex int'");
-diff -rcp2N gcc-2.7.2.2/c-lex.h g77-new/c-lex.h
-*** gcc-2.7.2.2/c-lex.h        Thu Jun 15 07:12:22 1995
---- g77-new/c-lex.h    Sun Aug 10 18:10:55 1997
-*************** enum rid
-*** 43,47 ****
-    RID_VOLATILE,
-    RID_INLINE,
-!   RID_NOALIAS,
-    RID_ITERATOR,
-    RID_COMPLEX,
---- 43,47 ----
-    RID_VOLATILE,
-    RID_INLINE,
-!   RID_RESTRICT,
-    RID_ITERATOR,
-    RID_COMPLEX,
-diff -rcp2N gcc-2.7.2.2/c-parse.gperf g77-new/c-parse.gperf
-*** gcc-2.7.2.2/c-parse.gperf  Fri Apr  9 19:00:44 1993
---- g77-new/c-parse.gperf      Sun Aug 10 18:10:55 1997
-*************** __label__, LABEL, NORID
-*** 36,39 ****
---- 36,40 ----
-  __real, REALPART, NORID
-  __real__, REALPART, NORID
-+ __restrict, TYPE_QUAL, RID_RESTRICT
-  __signed, TYPESPEC, RID_SIGNED
-  __signed__, TYPESPEC, RID_SIGNED
-*************** oneway, TYPE_QUAL, RID_ONEWAY
-*** 69,72 ****
---- 70,74 ----
-  out, TYPE_QUAL, RID_OUT
-  register, SCSPEC, RID_REGISTER
-+ restrict, TYPE_QUAL, RID_RESTRICT
-  return, RETURN, NORID
-  short, TYPESPEC, RID_SHORT
-diff -rcp2N gcc-2.7.2.2/c-typeck.c g77-new/c-typeck.c
-*** gcc-2.7.2.2/c-typeck.c     Thu Feb 20 19:24:11 1997
---- g77-new/c-typeck.c Sun Aug 10 18:46:29 1997
-*************** pointer_int_sum (resultcode, ptrop, into
-*** 2681,2686 ****
-       so the multiply won't overflow spuriously.  */
-  
-!   if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
-!     intop = convert (type_for_size (POINTER_SIZE, 0), intop);
-  
-    /* Replace the integer argument with a suitable product by the object size.
---- 2681,2688 ----
-       so the multiply won't overflow spuriously.  */
-  
-!   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
-!       || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
-!     intop = convert (type_for_size (TYPE_PRECISION (sizetype), 
-!                                  TREE_UNSIGNED (sizetype)), intop);
-  
-    /* Replace the integer argument with a suitable product by the object size.
-diff -rcp2N gcc-2.7.2.2/calls.c g77-new/calls.c
-*** gcc-2.7.2.2/calls.c        Thu Oct 26 21:53:43 1995
---- g77-new/calls.c    Sun Aug 10 18:46:16 1997
-*************** expand_call (exp, target, ignore)
-*** 564,567 ****
---- 564,569 ----
-    /* Nonzero if it is plausible that this is a call to alloca.  */
-    int may_be_alloca;
-+   /* Nonzero if this is a call to malloc or a related function. */
-+   int is_malloc;
-    /* Nonzero if this is a call to setjmp or a related function.  */
-    int returns_twice;
-*************** expand_call (exp, target, ignore)
-*** 741,745 ****
-         if (stack_arg_under_construction || i >= 0)
-           {
-!            rtx insn = NEXT_INSN (before_call), seq;
-  
-             /* Look for a call in the inline function code.
---- 743,749 ----
-         if (stack_arg_under_construction || i >= 0)
-           {
-!            rtx first_insn
-!              = before_call ? NEXT_INSN (before_call) : get_insns ();
-!            rtx insn, seq;
-  
-             /* Look for a call in the inline function code.
-*************** expand_call (exp, target, ignore)
-*** 749,753 ****
-  
-             if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-!              for (; insn; insn = NEXT_INSN (insn))
-                 if (GET_CODE (insn) == CALL_INSN)
-                   break;
---- 753,757 ----
-  
-             if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-!              for (insn = first_insn; insn; insn = NEXT_INSN (insn))
-                 if (GET_CODE (insn) == CALL_INSN)
-                   break;
-*************** expand_call (exp, target, ignore)
-*** 781,785 ****
-                 seq = get_insns ();
-                 end_sequence ();
-!                emit_insns_before (seq, NEXT_INSN (before_call));
-                 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
-               }
---- 785,789 ----
-                 seq = get_insns ();
-                 end_sequence ();
-!                emit_insns_before (seq, first_insn);
-                 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
-               }
-*************** expand_call (exp, target, ignore)
-*** 852,855 ****
---- 856,860 ----
-    returns_twice = 0;
-    is_longjmp = 0;
-+   is_malloc = 0;
-  
-    if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
-*************** expand_call (exp, target, ignore)
-*** 891,894 ****
---- 896,903 ----
-              && ! strcmp (tname, "longjmp"))
-       is_longjmp = 1;
-+       /* Only recognize malloc when alias analysis is enabled.  */
-+       else if (tname[0] == 'm' && flag_alias_check
-+             && ! strcmp(tname, "malloc"))
-+      is_malloc = 1;
-      }
-  
-*************** expand_call (exp, target, ignore)
-*** 1087,1090 ****
---- 1096,1100 ----
-  
-             store_expr (args[i].tree_value, copy, 0);
-+            is_const = 0;
-  
-             args[i].tree_value = build1 (ADDR_EXPR,
-*************** expand_call (exp, target, ignore)
-*** 1363,1367 ****
-    /* Now we are about to start emitting insns that can be deleted
-       if a libcall is deleted.  */
-!   if (is_const)
-      start_sequence ();
-  
---- 1373,1377 ----
-    /* Now we are about to start emitting insns that can be deleted
-       if a libcall is deleted.  */
-!   if (is_const || is_malloc)
-      start_sequence ();
-  
-*************** expand_call (exp, target, ignore)
-*** 1951,1954 ****
---- 1961,1978 ----
-        end_sequence ();
-        emit_insns (insns);
-+     }
-+   else if (is_malloc)
-+     {
-+       rtx temp = gen_reg_rtx (GET_MODE (valreg));
-+       rtx last, insns;
-+ 
-+       emit_move_insn (temp, valreg);
-+       last = get_last_insn ();
-+       REG_NOTES (last) = 
-+      gen_rtx (EXPR_LIST, REG_NOALIAS, temp, REG_NOTES (last));
-+       insns = get_insns ();
-+       end_sequence ();
-+       emit_insns (insns);
-+       valreg = temp;
-      }
-  
-diff -rcp2N gcc-2.7.2.2/cccp.c g77-new/cccp.c
-*** gcc-2.7.2.2/cccp.c Thu Oct 26 18:07:26 1995
---- g77-new/cccp.c     Sun Aug 10 18:45:53 1997
-*************** initialize_builtins (inp, outp)
-*** 9626,9629 ****
---- 9626,9630 ----
-      so that it is present only when truly compiling with GNU C.  */
-  /*  install ((U_CHAR *) "__GNUC__", -1, T_CONST, "2", -1);  */
-+   install ((U_CHAR *) "__HAVE_BUILTIN_SETJMP__", -1, T_CONST, "1", -1);
-  
-    if (debug_output)
-diff -rcp2N gcc-2.7.2.2/combine.c g77-new/combine.c
-*** gcc-2.7.2.2/combine.c      Sun Nov 26 14:32:07 1995
---- g77-new/combine.c  Mon Jul 28 21:44:17 1997
-*************** num_sign_bit_copies (x, mode)
-*** 7326,7329 ****
---- 7326,7335 ----
-  
-      case NEG:
-+       while (GET_MODE (XEXP (x, 0)) == GET_MODE (x)
-+           && GET_CODE (XEXP (x, 0)) == NEG
-+           && GET_MODE (XEXP (XEXP (x, 0), 0)) == GET_MODE (x)
-+           && GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG)
-+      x = XEXP (XEXP (x, 0), 0);      /* Speed up 961126-1.c */
-+ 
-        /* In general, this subtracts one sign bit copy.  But if the value
-        is known to be positive, the number of sign bit copies is the
-*************** distribute_notes (notes, from_insn, i3, 
-*** 10648,10651 ****
---- 10654,10658 ----
-       case REG_EQUIV:
-       case REG_NONNEG:
-+      case REG_NOALIAS:
-         /* These notes say something about results of an insn.  We can
-            only support them if they used to be on I3 in which case they
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.c g77-new/config/alpha/alpha.c
-*** gcc-2.7.2.2/config/alpha/alpha.c   Thu Feb 20 19:24:11 1997
---- g77-new/config/alpha/alpha.c       Thu Jul 10 20:08:47 1997
-*************** direct_return ()
-*** 1239,1243 ****
-     cross-compiler.  Otherwise, use the versions in /usr/include/stamp.h.  */
-  
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32)
-  #include <stamp.h>
-  #endif
---- 1239,1243 ----
-     cross-compiler.  Otherwise, use the versions in /usr/include/stamp.h.  */
-  
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__)
-  #include <stamp.h>
-  #endif
-*************** output_prolog (file, size)
-*** 1370,1373 ****
---- 1370,1378 ----
-  
-    alpha_function_needs_gp = 0;
-+ #ifdef __linux__
-+   if(profile_flag) {
-+       alpha_function_needs_gp = 1;
-+   }
-+ #endif
-    for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-      if ((GET_CODE (insn) == CALL_INSN)
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.h g77-new/config/alpha/alpha.h
-*** gcc-2.7.2.2/config/alpha/alpha.h   Thu Feb 20 19:24:12 1997
---- g77-new/config/alpha/alpha.h       Sun Aug 10 19:21:39 1997
-*************** extern int target_flags;
-*** 112,116 ****
---- 112,118 ----
-      {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
-  
-+ #ifndef TARGET_DEFAULT
-  #define TARGET_DEFAULT 3
-+ #endif
-  
-  #ifndef TARGET_CPU_DEFAULT
-*************** extern int target_flags;
-*** 252,255 ****
---- 254,260 ----
-  /* No data type wants to be aligned rounder than this.  */
-  #define BIGGEST_ALIGNMENT 64
-+ 
-+ /* For atomic access to objects, must have at least 32-bit alignment.  */
-+ #define MINIMUM_ATOMIC_ALIGNMENT 32
-  
-  /* Make strings word-aligned so strcpy from constants will be faster.  */
-diff -rcp2N gcc-2.7.2.2/config/alpha/alpha.md g77-new/config/alpha/alpha.md
-*** gcc-2.7.2.2/config/alpha/alpha.md  Fri Oct 27 06:49:59 1995
---- g77-new/config/alpha/alpha.md      Thu Jul 10 20:08:48 1997
-***************
-*** 1746,1752 ****
-       (if_then_else:DF 
-        (match_operator 3 "signed_comparison_operator"
-!                       [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG")
-                         (match_operand:DF 2 "fp0_operand" "G,G")])
-!       (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0"))
-        (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
-    "TARGET_FP"
---- 1746,1752 ----
-       (if_then_else:DF 
-        (match_operator 3 "signed_comparison_operator"
-!                       [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
-                         (match_operand:DF 2 "fp0_operand" "G,G")])
-!       (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0"))
-        (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
-    "TARGET_FP"
-diff -rcp2N gcc-2.7.2.2/config/alpha/elf.h g77-new/config/alpha/elf.h
-*** gcc-2.7.2.2/config/alpha/elf.h     Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/elf.h Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,522 ----
-+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
-+    Copyright (C) 1996 Free Software Foundation, Inc.
-+    Contributed by Richard Henderson (rth@tamu.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.    */
-+ 
-+ /* This is used on Alpha platforms that use the ELF format.
-+ Currently only Linux uses this. */
-+ 
-+ #include "alpha/linux.h"
-+ 
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)");
-+ 
-+ #undef OBJECT_FORMAT_COFF
-+ #undef EXTENDED_COFF
-+ #define OBJECT_FORMAT_ELF
-+ 
-+ #define SDB_DEBUGGING_INFO
-+ 
-+ #undef ASM_FINAL_SPEC
-+ 
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
-+ 
-+ #undef LINK_SPEC
-+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1}   \
-+   %{shared:-shared}                                          \
-+   %{!shared:                                                 \
-+     %{!static:                                                       \
-+       %{rdynamic:-export-dynamic}                            \
-+       %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}               \
-+     %{static:-static}}"
-+ 
-+ /* Output at beginning of assembler file.  */
-+ 
-+ #undef ASM_FILE_START
-+ #define ASM_FILE_START(FILE)                                 \
-+ {                                                            \
-+   alpha_write_verstamp (FILE);                                       \
-+   output_file_directive (FILE, main_input_filename);         \
-+   fprintf (FILE, "\t.version\t\"01.01\"\n");                 \
-+   fprintf (FILE, "\t.set noat\n");                           \
-+ }
-+ 
-+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE)                 \
-+   alpha_output_lineno (STREAM, LINE)
-+ extern void alpha_output_lineno ();
-+ 
-+ extern void output_file_directive ();
-+ 
-+ /* Attach a special .ident directive to the end of the file to identify
-+    the version of GCC which compiled this code.  The format of the
-+    .ident string is patterned after the ones produced by native svr4
-+    C compilers.  */
-+ 
-+ #define IDENT_ASM_OP ".ident"
-+ 
-+ #ifdef IDENTIFY_WITH_IDENT
-+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */
-+ #define ASM_IDENTIFY_LANGUAGE(FILE)                          \
-+  fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP,               \
-+       lang_identify(), version_string)
-+ #else
-+ #define ASM_FILE_END(FILE)                                   \
-+ do {                                                         \
-+      fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n",           \
-+            IDENT_ASM_OP, version_string);                    \
-+    } while (0)
-+ #endif
-+ 
-+ /* Allow #sccs in preprocessor.  */
-+ 
-+ #define SCCS_DIRECTIVE
-+ 
-+ /* Output #ident as a .ident.  */
-+ 
-+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
-+   fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-+ 
-+ /* This is how to allocate empty space in some section.  The .zero
-+    pseudo-op is used for this on most svr4 assemblers.  */
-+ 
-+ #define SKIP_ASM_OP  ".zero"
-+ 
-+ #undef ASM_OUTPUT_SKIP
-+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
-+   fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-+ 
-+ /* Output the label which precedes a jumptable.  Note that for all svr4
-+    systems where we actually generate jumptables (which is to say every
-+    svr4 target except i386, where we use casesi instead) we put the jump-
-+    tables into the .rodata section and since other stuff could have been
-+    put into the .rodata section prior to any given jumptable, we have to
-+    make sure that the location counter for the .rodata section gets pro-
-+    perly re-aligned prior to the actual beginning of the jump table.  */
-+ 
-+ #define ALIGN_ASM_OP ".align"
-+ 
-+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
-+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
-+   ASM_OUTPUT_ALIGN ((FILE), 2);
-+ #endif
-+ 
-+ #undef ASM_OUTPUT_CASE_LABEL
-+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE)             \
-+   do {                                                                       \
-+     ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE)              \
-+     ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM);                   \
-+   } while (0)
-+ 
-+ /* The standard SVR4 assembler seems to require that certain builtin
-+    library routines (e.g. .udiv) be explicitly declared as .globl
-+    in each assembly file where they are referenced.  */
-+ 
-+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN)                               \
-+   ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
-+ 
-+ /* This says how to output assembler code to declare an
-+    uninitialized external linkage data object.  Under SVR4,
-+    the linker seems to want the alignment of data objects
-+    to depend on their types.  We do exactly that here.  */
-+ 
-+ #define COMMON_ASM_OP        ".comm"
-+ 
-+ #undef ASM_OUTPUT_ALIGNED_COMMON
-+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)           \
-+ do {                                                                 \
-+   fprintf ((FILE), "\t%s\t", COMMON_ASM_OP);                         \
-+   assemble_name ((FILE), (NAME));                                    \
-+   fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT);     \
-+ } while (0)
-+ 
-+ /* This says how to output assembler code to declare an
-+    uninitialized internal linkage data object.  Under SVR4,
-+    the linker seems to want the alignment of data objects
-+    to depend on their types.  We do exactly that here.  */
-+ 
-+ #define LOCAL_ASM_OP ".local"
-+ 
-+ #undef ASM_OUTPUT_ALIGNED_LOCAL
-+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)            \
-+ do {                                                                 \
-+   fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP);                          \
-+   assemble_name ((FILE), (NAME));                                    \
-+   fprintf ((FILE), "\n");                                            \
-+   ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);                       \
-+ } while (0)
-+ 
-+ /* This is the pseudo-op used to generate a 64-bit word of data with a
-+    specific value in some section.    */
-+ 
-+ #define INT_ASM_OP           ".quad"
-+ 
-+ /* This is the pseudo-op used to generate a contiguous sequence of byte
-+    values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
-+    AUTOMATICALLY APPENDED.  This is the same for most svr4 assemblers.  */
-+ 
-+ #undef ASCII_DATA_ASM_OP
-+ #define ASCII_DATA_ASM_OP    ".ascii"
-+ 
-+ /* Support const sections and the ctors and dtors sections for g++.
-+    Note that there appears to be two different ways to support const
-+    sections at the moment.  You can either #define the symbol
-+    READONLY_DATA_SECTION (giving it some code which switches to the
-+    readonly data section) or else you can #define the symbols
-+    EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+    SELECT_RTX_SECTION.  We do both here just to be on the safe side.  */
-+ 
-+ #define USE_CONST_SECTION    1
-+ 
-+ #define CONST_SECTION_ASM_OP ".section\t.rodata"
-+ 
-+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
-+ 
-+    Note that we want to give these sections the SHF_WRITE attribute
-+    because these sections will actually contain data (i.e. tables of
-+    addresses of functions in the current root executable or shared library
-+    file) and, in the case of a shared library, the relocatable addresses
-+    will have to be properly resolved/relocated (and then written into) by
-+    the dynamic linker when it actually attaches the given shared library
-+    to the executing process.  (Note that on SVR4, you may wish to use the
-+    `-z text' option to the ELF linker, when building a shared library, as
-+    an additional check that you are doing everything right.  But if you do
-+    use the `-z text' option when building a shared library, you will get
-+    errors unless the .ctors and .dtors sections are marked as writable
-+    via the SHF_WRITE attribute.)  */
-+ 
-+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
-+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
-+ 
-+ /* On svr4, we *do* have support for the .init and .fini sections, and we
-+    can put stuff in there to be executed before and after `main'.  We let
-+    crtstuff.c and other files know this by defining the following symbols.
-+    The definitions say how to change sections to the .init and .fini
-+    sections.  This is the same for all known svr4 assemblers.  */
-+ 
-+ #define INIT_SECTION_ASM_OP  ".section\t.init"
-+ #define FINI_SECTION_ASM_OP  ".section\t.fini"
-+ 
-+ /* Support non-common, uninitialized data in the .bss section.  */
-+ 
-+ #define BSS_SECTION_ASM_OP   ".section\t.bss"
-+ 
-+ /* A default list of other sections which we might be "in" at any given
-+    time.  For targets that use additional sections (e.g. .tdesc) you
-+    should override this definition in the target-specific file which
-+    includes this file.  */
-+ 
-+ #undef EXTRA_SECTIONS
-+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_bss
-+ 
-+ /* A default list of extra section function definitions.  For targets
-+    that use additional sections (e.g. .tdesc) you should override this
-+    definition in the target-specific file which includes this file.  */
-+ 
-+ #undef EXTRA_SECTION_FUNCTIONS
-+ #define EXTRA_SECTION_FUNCTIONS                                              \
-+   CONST_SECTION_FUNCTION                                             \
-+   CTORS_SECTION_FUNCTION                                             \
-+   DTORS_SECTION_FUNCTION                                             \
-+   BSS_SECTION_FUNCTION
-+ 
-+ #undef READONLY_DATA_SECTION
-+ #define READONLY_DATA_SECTION() const_section ()
-+ 
-+ extern void text_section ();
-+ 
-+ #define CONST_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ const_section ()                                                     \
-+ {                                                                    \
-+   if (!USE_CONST_SECTION)                                            \
-+     text_section();                                                  \
-+   else if (in_section != in_const)                                   \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP);          \
-+       in_section = in_const;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define CTORS_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ ctors_section ()                                                     \
-+ {                                                                    \
-+   if (in_section != in_ctors)                                                \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP);          \
-+       in_section = in_ctors;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define DTORS_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ dtors_section ()                                                     \
-+ {                                                                    \
-+   if (in_section != in_dtors)                                                \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP);          \
-+       in_section = in_dtors;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define BSS_SECTION_FUNCTION                                         \
-+ void                                                                 \
-+ bss_section ()                                                               \
-+ {                                                                    \
-+   if (in_section != in_bss)                                          \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP);            \
-+       in_section = in_bss;                                           \
-+     }                                                                        \
-+ }
-+ 
-+ 
-+ /* Switch into a generic section.
-+    This is currently only used to support section attributes.
-+ 
-+    We make the section read-only and executable for a function decl,
-+    read-only for a const data decl, and writable for a non-const data decl.  */
-+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
-+   fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
-+         (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
-+         (DECL) && TREE_READONLY (DECL) ? "a" : "aw")
-+ 
-+ 
-+ /* A C statement (sans semicolon) to output an element in the table of
-+    global constructors.  */
-+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)                            \
-+   do {                                                                       \
-+     ctors_section ();                                                        \
-+     fprintf (FILE, "\t%s\t ", INT_ASM_OP);                           \
-+     assemble_name (FILE, NAME);                                              \
-+     fprintf (FILE, "\n");                                            \
-+   } while (0)
-+ 
-+ /* A C statement (sans semicolon) to output an element in the table of
-+    global destructors.  */
-+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)                                     \
-+   do {                                                                       \
-+     dtors_section ();                                                \
-+     fprintf (FILE, "\t%s\t ", INT_ASM_OP);                           \
-+     assemble_name (FILE, NAME);                                              \
-+     fprintf (FILE, "\n");                                            \
-+   } while (0)
-+ 
-+ /* A C statement or statements to switch to the appropriate
-+    section for output of DECL.  DECL is either a `VAR_DECL' node
-+    or a constant of some sort.  RELOC indicates whether forming
-+    the initial value of DECL requires link-time relocations.  */
-+ 
-+ #define SELECT_SECTION(DECL,RELOC)                                   \
-+ {                                                                    \
-+   if (TREE_CODE (DECL) == STRING_CST)                                        \
-+     {                                                                        \
-+       if (! flag_writable_strings)                                   \
-+      const_section ();                                               \
-+       else                                                           \
-+      data_section ();                                                \
-+     }                                                                        \
-+   else if (TREE_CODE (DECL) == VAR_DECL)                             \
-+     {                                                                        \
-+       if ((flag_pic && RELOC)                                                \
-+        || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)          \
-+        || !DECL_INITIAL (DECL)                                       \
-+        || (DECL_INITIAL (DECL) != error_mark_node                    \
-+            && !TREE_CONSTANT (DECL_INITIAL (DECL))))                 \
-+         {                                                            \
-+           if (DECL_COMMON (DECL)                                     \
-+            && !DECL_INITIAL (DECL))                                  \
-+                /* || DECL_INITIAL (DECL) == error_mark_node)) */     \
-+          bss_section();                                              \
-+        else                                                          \
-+          data_section ();                                            \
-+      }                                                               \
-+       else                                                           \
-+      const_section ();                                               \
-+     }                                                                        \
-+   else                                                                       \
-+     const_section ();                                                        \
-+ }
-+ 
-+ /* A C statement or statements to switch to the appropriate
-+    section for output of RTX in mode MODE.  RTX is some kind
-+    of constant in RTL.  The argument MODE is redundant except
-+    in the case of a `const_int' rtx.  Currently, these always
-+    go into the const section.  */
-+ 
-+ #undef SELECT_RTX_SECTION
-+ #define SELECT_RTX_SECTION(MODE,RTX) const_section()
-+ 
-+ /* Define the strings used for the special svr4 .type and .size directives.
-+    These strings generally do not vary from one system running svr4 to
-+    another, but if a given system (e.g. m88k running svr) needs to use
-+    different pseudo-op names for these, they may be overridden in the
-+    file which includes this one.  */
-+ 
-+ #define TYPE_ASM_OP  ".type"
-+ #define SIZE_ASM_OP  ".size"
-+ 
-+ /* This is how we tell the assembler that a symbol is weak.  */
-+ 
-+ #define ASM_WEAKEN_LABEL(FILE,NAME) \
-+   do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-+        fputc ('\n', FILE); } while (0)
-+ 
-+ /* 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)
-+ 
-+ /* The following macro defines the format used to output the second
-+    operand of the .type assembler directive.  Different svr4 assemblers
-+    expect various different forms for this operand.  The one given here
-+    is just a default.  You may need to override it in your machine-
-+    specific tm.h file (depending upon the particulars of your assembler).  */
-+ 
-+ #define TYPE_OPERAND_FMT     "@%s"
-+ 
-+ /* Write the extra assembler code needed to declare a function's result.
-+    Most svr4 assemblers don't require any special declaration of the
-+    result value, but there are exceptions.  */
-+ 
-+ #ifndef ASM_DECLARE_RESULT
-+ #define ASM_DECLARE_RESULT(FILE, RESULT)
-+ #endif
-+ 
-+ /* These macros generate the special .type and .size directives which
-+    are used to set the corresponding fields of the linker symbol table
-+    entries in an ELF object file under SVR4.  These macros also output
-+    the starting labels for the relevant functions/objects.  */
-+ 
-+ /* Write the extra assembler code needed to declare an object properly.  */
-+ 
-+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                    \
-+   do {                                                                       \
-+     fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                          \
-+     assemble_name (FILE, NAME);                                              \
-+     putc (',', FILE);                                                        \
-+     fprintf (FILE, TYPE_OPERAND_FMT, "object");                              \
-+     putc ('\n', FILE);                                                       \
-+     size_directive_output = 0;                                               \
-+     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))            \
-+       {                                                                      \
-+      size_directive_output = 1;                                      \
-+      fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
-+      assemble_name (FILE, NAME);                                     \
-+      fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-+       }                                                                      \
-+     ASM_OUTPUT_LABEL(FILE, NAME);                                    \
-+   } while (0)
-+ 
-+ /* Output the size directive for a decl in rest_of_decl_compilation
-+    in the case where we did not do so before the initializer.
-+    Once we find the error_mark_node, we know that the value of
-+    size_directive_output was set
-+    by ASM_DECLARE_OBJECT_NAME when it was run for the same decl.  */
-+ 
-+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)      \
-+ do {                                                                  \
-+      char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);                        \
-+      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)             \
-+          && ! AT_END && TOP_LEVEL                                     \
-+       && DECL_INITIAL (DECL) == error_mark_node                       \
-+       && !size_directive_output)                                      \
-+        {                                                              \
-+       size_directive_output = 1;                                      \
-+       fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
-+       assemble_name (FILE, name);                                     \
-+       fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-+        }                                                              \
-+    } while (0)
-+ 
-+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-+    ASM_OUTPUT_LIMITED_STRING macros.  Each byte in the table
-+    corresponds to a particular byte value [0..255].  For any
-+    given byte value, if the value in the corresponding table
-+    position is zero, the given character can be output directly.
-+    If the table value is 1, the byte must be output as a \ooo
-+    octal escape.  If the tables value is anything else, then the
-+    byte value should be output as a \ followed by the value
-+    in the table.  Note that we can use standard UN*X escape
-+    sequences for many control characters, but we don't use
-+    \a to represent BEL because some svr4 assemblers (e.g. on
-+    the i386) don't know about that.  Also, we don't use \v
-+    since some versions of gas, such as 2.2 did not accept it.  */
-+ 
-+ #define ESCAPES \
-+ "\1\1\1\1\1\1\1\1btn\1fr\1\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\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\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\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\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\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-+ 
-+ /* Some svr4 assemblers have a limit on the number of characters which
-+    can appear in the operand of a .string directive.  If your assembler
-+    has such a limitation, you should define STRING_LIMIT to reflect that
-+    limit.  Note that at least some svr4 assemblers have a limit on the
-+    actual number of bytes in the double-quoted string, and that they
-+    count each character in an escape sequence as one byte.  Thus, an
-+    escape sequence like \377 would count as four bytes.
-+ 
-+    If your target assembler doesn't support the .string directive, you
-+    should define this to zero.
-+ */
-+ 
-+ #define STRING_LIMIT ((unsigned) 256)
-+ 
-+ #define STRING_ASM_OP        ".string"
-+ 
-+ /*
-+  * We always use gas here, so we don't worry about ECOFF assembler problems.
-+  */
-+ #undef TARGET_GAS
-+ #define TARGET_GAS   (1)
-+ 
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+ 
-+ /* 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 crtbegin.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 \
-+   "crtend.o%s crtn.o%s"
-diff -rcp2N gcc-2.7.2.2/config/alpha/linux.h g77-new/config/alpha/linux.h
-*** gcc-2.7.2.2/config/alpha/linux.h   Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/linux.h       Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,72 ----
-+ /* Definitions of target machine for GNU compiler, for Alpha Linux,
-+    using ECOFF.
-+    Copyright (C) 1995 Free Software Foundation, Inc.
-+    Contributed by Bob Manson.
-+    Derived from work contributed by Cygnus Support,
-+    (c) 1993 Free Software Foundation.
-+ 
-+ 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.  */
-+ 
-+ #define TARGET_DEFAULT (3 | MASK_GAS)
-+ 
-+ #include "alpha/alpha.h"
-+ 
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
-+ 
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha)"
-+ 
-+ /* We don't actually need any of these; the MD_ vars are ignored
-+    anyway for cross-compilers, and the other specs won't get picked up
-+    'coz the user is supposed to do ld -r (hmm, perhaps that should be
-+    the default).  In any case, setting them thus will catch some
-+    common user errors. */
-+ 
-+ #undef       MD_EXEC_PREFIX
-+ #undef       MD_STARTFILE_PREFIX
-+ 
-+ #undef       LIB_SPEC
-+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
-+ 
-+ #undef       LINK_SPEC
-+ #define LINK_SPEC  \
-+   "-G 8 %{O*:-O3} %{!O*:-O1}"
-+ 
-+ #undef ASM_SPEC
-+ #define ASM_SPEC "-nocpp"
-+ 
-+ /* Can't do stabs */
-+ #undef SDB_DEBUGGING_INFO
-+ 
-+ /* Prefer dbx.  */
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+ 
-+ #undef FUNCTION_PROFILER
-+ 
-+ #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-+     do {                                                     \
-+      fputs ("\tlda $27,_mcount\n", (FILE));                  \
-+      fputs ("\tjsr $26,($27),_mcount\n", (FILE));            \
-+      fputs ("\tldgp $29,0($26)\n", (FILE));                  \
-+     } while (0);
-+ 
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-diff -rcp2N gcc-2.7.2.2/config/alpha/t-linux g77-new/config/alpha/t-linux
-*** gcc-2.7.2.2/config/alpha/t-linux   Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/t-linux       Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,3 ----
-+ # Our header files are supposed to be correct, nein?
-+ FIXINCLUDES = 
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.2/config/alpha/x-linux g77-new/config/alpha/x-linux
-*** gcc-2.7.2.2/config/alpha/x-linux   Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/x-linux       Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1 ----
-+ CLIB=-lbfd -liberty
-diff -rcp2N gcc-2.7.2.2/config/alpha/xm-alpha.h g77-new/config/alpha/xm-alpha.h
-*** gcc-2.7.2.2/config/alpha/xm-alpha.h        Thu Aug 31 17:52:27 1995
---- g77-new/config/alpha/xm-alpha.h    Thu Jul 10 20:08:49 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 46,51 ****
---- 46,53 ----
-  #include <alloca.h>
-  #else
-+ #ifndef alloca
-  extern void *alloca ();
-  #endif
-+ #endif
-  
-  /* The host compiler has problems with enum bitfields since it makes
-*************** extern void *malloc (), *realloc (), *ca
-*** 68,72 ****
---- 70,76 ----
-  /* OSF/1 has vprintf.  */
-  
-+ #ifndef linux  /* 1996/02/22 mauro@craftwork.com -- unreliable with Linux */
-  #define HAVE_VPRINTF
-+ #endif
-  
-  /* OSF/1 has putenv.  */
-diff -rcp2N gcc-2.7.2.2/config/alpha/xm-linux.h g77-new/config/alpha/xm-linux.h
-*** gcc-2.7.2.2/config/alpha/xm-linux.h        Wed Dec 31 19:00:00 1969
---- g77-new/config/alpha/xm-linux.h    Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,10 ----
-+ #ifndef _XM_LINUX_H
-+ #define _XM_LINUX_H
-+ 
-+ #include "xm-alpha.h"
-+ 
-+ #define HAVE_STRERROR
-+ 
-+ #define DONT_DECLARE_SYS_SIGLIST
-+ #define USE_BFD
-+ #endif
-diff -rcp2N gcc-2.7.2.2/config/i386/i386.c g77-new/config/i386/i386.c
-*** gcc-2.7.2.2/config/i386/i386.c     Sun Oct 22 07:13:21 1995
---- g77-new/config/i386/i386.c Sun Aug 10 18:46:09 1997
-*************** standard_80387_constant_p (x)
-*** 1290,1294 ****
-    set_float_handler (handler);
-    REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-!   is0 = REAL_VALUES_EQUAL (d, dconst0);
-    is1 = REAL_VALUES_EQUAL (d, dconst1);
-    set_float_handler (NULL_PTR);
---- 1290,1294 ----
-    set_float_handler (handler);
-    REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-!   is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d);
-    is1 = REAL_VALUES_EQUAL (d, dconst1);
-    set_float_handler (NULL_PTR);
-diff -rcp2N gcc-2.7.2.2/config/mips/mips.c g77-new/config/mips/mips.c
-*** gcc-2.7.2.2/config/mips/mips.c     Thu Feb 20 19:24:13 1997
---- g77-new/config/mips/mips.c Sun Aug 10 18:45:43 1997
-*************** expand_block_move (operands)
-*** 2360,2365 ****
-  
-    else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-!     emit_insn (gen_movstrsi_internal (gen_rtx (MEM, BLKmode, dest_reg),
-!                                    gen_rtx (MEM, BLKmode, src_reg),
-                                     bytes_rtx, align_rtx));
-  
---- 2360,2367 ----
-  
-    else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-!     emit_insn (gen_movstrsi_internal (change_address (operands[0],
-!                                                    BLKmode, dest_reg),
-!                                    change_address (orig_src, BLKmode,
-!                                                    src_reg),
-                                     bytes_rtx, align_rtx));
-  
-diff -rcp2N gcc-2.7.2.2/config/mips/mips.h g77-new/config/mips/mips.h
-*** gcc-2.7.2.2/config/mips/mips.h     Thu Nov  9 11:23:09 1995
---- g77-new/config/mips/mips.h Sun Aug 10 18:46:44 1997
-*************** typedef struct mips_args {
-*** 2160,2170 ****
-      }                                                                            \
-                                                                           \
-!   /* Flush the instruction cache.  */                                            \
-!   /* ??? Are the modes right? Maybe they should depend on -mint64/-mlong64? */\
-    /* ??? Should check the return value for errors.  */                           \
-!   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "cacheflush"),                  \
-                    0, VOIDmode, 3, addr, Pmode,                           \
-                    GEN_INT (TRAMPOLINE_SIZE), SImode,                     \
-!                   GEN_INT (1), SImode);                                  \
-  }
-  \f
---- 2160,2170 ----
-      }                                                                            \
-                                                                           \
-!   /* Flush both caches.  We need to flush the data cache in case         \
-!      the system has a write-back cache.  */                              \
-    /* ??? Should check the return value for errors.  */                           \
-!   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"),        \
-                    0, VOIDmode, 3, addr, Pmode,                           \
-                    GEN_INT (TRAMPOLINE_SIZE), SImode,                     \
-!                   GEN_INT (3), TYPE_MODE (integer_type_node));           \
-  }
-  \f
-*************** typedef struct mips_args {
-*** 2388,2392 ****
-    ((GET_CODE (X) != CONST_DOUBLE                                     \
-      || mips_const_double_ok (X, GET_MODE (X)))                               \
-!    && ! (GET_CODE (X) == CONST && ABI_64BIT))
-  
-  /* A C compound statement that attempts to replace X with a valid
---- 2388,2393 ----
-    ((GET_CODE (X) != CONST_DOUBLE                                     \
-      || mips_const_double_ok (X, GET_MODE (X)))                               \
-!    && ! (GET_CODE (X) == CONST                                               \
-!       && (ABI_64BIT || GET_CODE (XEXP (X, 0)) == MINUS)))
-  
-  /* A C compound statement that attempts to replace X with a valid
-diff -rcp2N gcc-2.7.2.2/config/mips/sni-gas.h g77-new/config/mips/sni-gas.h
-*** gcc-2.7.2.2/config/mips/sni-gas.h  Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/sni-gas.h      Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,43 ----
-+ #include "mips/sni-svr4.h"
-+ 
-+ /* Enable debugging.  */
-+ #define DBX_DEBUGGING_INFO
-+ #define SDB_DEBUGGING_INFO
-+ #define MIPS_DEBUGGING_INFO
-+ 
-+ #define DWARF_DEBUGGING_INFO
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
-+ 
-+ /* We need to use .esize and .etype instead of .size and .type to
-+    avoid conflicting with ELF directives.  These are only recognized
-+    by gas, anyhow, not the native assembler.  */
-+ #undef PUT_SDB_SIZE
-+ #define PUT_SDB_SIZE(a)                                       \
-+ do {                                                  \
-+   extern FILE *asm_out_text_file;                     \
-+   fprintf (asm_out_text_file, "\t.esize\t%d;", (a));  \
-+ } while (0)
-+ 
-+ #undef PUT_SDB_TYPE
-+ #define PUT_SDB_TYPE(a)                                       \
-+ do {                                                  \
-+   extern FILE *asm_out_text_file;                     \
-+   fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a));        \
-+ } while (0)
-+ 
-+ 
-+ /* This is how to equate one symbol to another symbol.  The syntax used is
-+    `SYM1=SYM2'.  Note that this is different from the way equates are done
-+    with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'.  */
-+ 
-+ #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)                           \
-+  do {        fprintf ((FILE), "\t");                                         \
-+      assemble_name (FILE, LABEL1);                                   \
-+      fprintf (FILE, " = ");                                          \
-+      assemble_name (FILE, LABEL2);                                   \
-+      fprintf (FILE, "\n");                                           \
-+   } while (0)
-+ 
-+ 
-+ 
-diff -rcp2N gcc-2.7.2.2/config/mips/sni-svr4.h g77-new/config/mips/sni-svr4.h
-*** gcc-2.7.2.2/config/mips/sni-svr4.h Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/sni-svr4.h     Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,103 ----
-+ /* Definitions of target machine for GNU compiler.  SNI SINIX version.
-+    Copyright (C) 1996 Free Software Foundation, Inc.
-+    Contributed by Marco Walther (Marco.Walther@mch.sni.de).
-+ 
-+ 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.  */
-+ 
-+ #define MIPS_SVR4
-+ 
-+ #define CPP_PREDEFINES "\
-+ -Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \
-+ -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \
-+ -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(mips)"
-+ 
-+ #define CPP_SPEC "\
-+ %{.cc:       -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.cxx:      -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.C:        -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.m:        -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C} \
-+ %{.S:        -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{.s:        -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
-+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"
-+ 
-+ #define LINK_SPEC "\
-+ %{G*} \
-+ %{!mgas: \
-+      %{dy} %{dn}}"
-+                  
-+ #define LIB_SPEC "\
-+      %{p:-lprof1} \
-+      %{!p:%{pg:-lprof1} \
-+           %{!pg:-L/usr/ccs/lib/ -lc /usr/ccs/lib/crtn.o%s}}"
-+ 
-+ #define STARTFILE_SPEC "\
-+      %{pg:gcrt0.o%s} \
-+      %{!pg:%{p:mcrt0.o%s} \
-+             %{!p:/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xt.o%s}}"
-+ 
-+ /* Mips System V.4 doesn't have a getpagesize() function needed by the
-+    trampoline code, so use the POSIX sysconf function to get it.
-+    This is only done when compiling the trampoline code.  */
-+ 
-+ #ifdef  L_trampoline
-+ #include <unistd.h>
-+ 
-+ #define getpagesize()        sysconf(_SC_PAGE_SIZE)
-+ #endif /*  L_trampoline */
-+ 
-+ /* Use atexit for static constructors/destructors, instead of defining
-+    our own exit function.  */
-+ #define HAVE_ATEXIT
-+ 
-+ /* Generate calls to memcpy, etc., not bcopy, etc.  */
-+ #define TARGET_MEM_FUNCTIONS
-+ 
-+ #define OBJECT_FORMAT_ELF
-+ 
-+ #define      TARGET_DEFAULT  MASK_ABICALLS
-+ #define ABICALLS_ASM_OP ".option pic2"
-+ 
-+ #define MACHINE_TYPE "SNI running SINIX 5.42"
-+ 
-+ #define MIPS_DEFAULT_GVALUE  0
-+ 
-+ #define NM_FLAGS     "-p"
-+ 
-+ /* wir haben ein Problem, wenn in einem Assembler-File keine .text-section
-+    erzeugt wird. Dann landen diese Pseudo-Labels in irgendeiner anderen
-+    section, z.B. .reginfo. Das macht den ld sehr ungluecklich. */
-+ 
-+ #define ASM_IDENTIFY_GCC(mw_stream) \
-+      fprintf(mw_stream, "\t.ident \"gcc2_compiled.\"\n");
-+ 
-+ #define ASM_IDENTIFY_LANGUAGE(STREAM)
-+ 
-+ #define ASM_LONG     ".word\t"
-+ #define ASM_GLOBAL   ".rdata\n\t\t.globl\t"
-+ 
-+ #include "mips/mips.h"
-+ 
-+ /* We do not want to run mips-tfile!  */
-+ #undef ASM_FINAL_SPEC
-+ 
-+ #undef OBJECT_FORMAT_COFF
-+ 
-+ /* We don't support debugging info for now. */
-+ #undef DBX_DEBUGGING_INFO
-+ #undef SDB_DEBUGGING_INFO
-+ #undef MIPS_DEBUGGING_INFO
-diff -rcp2N gcc-2.7.2.2/config/mips/x-sni-svr4 g77-new/config/mips/x-sni-svr4
-*** gcc-2.7.2.2/config/mips/x-sni-svr4 Wed Dec 31 19:00:00 1969
---- g77-new/config/mips/x-sni-svr4     Sun Aug 10 18:46:33 1997
-***************
-*** 0 ****
---- 1,18 ----
-+ # Define CC and OLDCC as the same, so that the tests:
-+ #    if [ x"$(OLDCC)" = x"$(CC)" ] ...
-+ #
-+ # will succeed (if OLDCC != CC, it is assumed that GCC is
-+ # being used in secondary stage builds).
-+ # -Olimit is so the user can use -O2.  Down with fixed
-+ # size tables!
-+ 
-+ CC           = $(OLDCC)
-+ OPT          =
-+ OLDCC                = cc -Olimit 3000 $(OPT)
-+ 
-+ X_CFLAGS     = -DNO_SYS_SIGLIST
-+ 
-+ # Show we need to use the C version of ALLOCA
-+ # The SVR3 configurations have it, but the SVR4 configurations don't.
-+ # For now, just try using it for all SVR* configurations.
-+ ALLOCA               = alloca.o
-diff -rcp2N gcc-2.7.2.2/config/msdos/configur.bat g77-new/config/msdos/configur.bat
-*** gcc-2.7.2.2/config/msdos/configur.bat      Mon Aug 28 05:55:47 1995
---- g77-new/config/msdos/configur.bat  Sun Aug 10 19:08:05 1997
-*************** sed -f config/msdos/top.sed Makefile.in 
-*** 18,21 ****
---- 18,27 ----
-  set LANG=\r
-  \r
-+ if not exist ada\make-lang.in goto no_ada\r
-+ sed -f config/msdos/top.sed ada\make-lang.in >> Makefile\r
-+ sed -f config/msdos/top.sed ada\makefile.in > ada\Makefile\r
-+ set LANG=%LANG% ada.&        \r
-+ :no_ada\r
-+ \r
-  if not exist cp\make-lang.in goto no_cp\r
-  sed -f config/msdos/top.sed cp\make-lang.in >> Makefile\r
-diff -rcp2N gcc-2.7.2.2/config/pa/pa.c g77-new/config/pa/pa.c
-*** gcc-2.7.2.2/config/pa/pa.c Sun Oct 22 07:45:20 1995
---- g77-new/config/pa/pa.c     Sun Aug 10 18:45:44 1997
-*************** output_move_double (operands)
-*** 1344,1369 ****
-       do them in the other order.
-  
-!      RMS says "This happens only for registers;
-!      such overlap can't happen in memory unless the user explicitly
-!      sets it up, and that is an undefined circumstance."
-! 
-!      but it happens on the HP-PA when loading parameter registers,
-!      so I am going to define that circumstance, and make it work
-!      as expected.  */
-  
-!   if (optype0 == REGOP && (optype1 == MEMOP || optype1 == OFFSOP)
-!         && reg_overlap_mentioned_p (operands[0], XEXP (operands[1], 0)))
-      {
--       /* XXX THIS PROBABLY DOESN'T WORK.  */
-        /* Do the late half first.  */
-        if (addreg1)
-       output_asm_insn ("ldo 4(%0),%0", &addreg1);
-        output_asm_insn (singlemove_string (latehalf), latehalf);
-        if (addreg1)
-       output_asm_insn ("ldo -4(%0),%0", &addreg1);
--       /* Then clobber.  */
-        return singlemove_string (operands);
-      }
-  
-    if (optype0 == REGOP && optype1 == REGOP
-        && REGNO (operands[0]) == REGNO (operands[1]) + 1)
---- 1344,1377 ----
-       do them in the other order.
-  
-!      This can happen in two cases:
-  
-!      mem -> register where the first half of the destination register
-!      is the same register used in the memory's address.  Reload
-!      can create such insns.
-! 
-!      mem in this case will be either register indirect or register
-!      indirect plus a valid offset. 
-! 
-!      register -> register move where REGNO(dst) == REGNO(src + 1)
-!      someone (Tim/Tege?) claimed this can happen for parameter loads. 
-! 
-!      Handle mem -> register case first.  */
-!   if (optype0 == REGOP
-!       && (optype1 == MEMOP || optype1 == OFFSOP)
-!       && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-!                          operands[1], 0))
-      {
-        /* Do the late half first.  */
-        if (addreg1)
-       output_asm_insn ("ldo 4(%0),%0", &addreg1);
-        output_asm_insn (singlemove_string (latehalf), latehalf);
-+ 
-+       /* Then clobber.  */
-        if (addreg1)
-       output_asm_insn ("ldo -4(%0),%0", &addreg1);
-        return singlemove_string (operands);
-      }
-  
-+   /* Now handle register -> register case.  */
-    if (optype0 == REGOP && optype1 == REGOP
-        && REGNO (operands[0]) == REGNO (operands[1]) + 1)
-diff -rcp2N gcc-2.7.2.2/config/pa/pa.md g77-new/config/pa/pa.md
-*** gcc-2.7.2.2/config/pa/pa.md        Mon Aug 14 09:00:49 1995
---- g77-new/config/pa/pa.md    Sun Aug 10 18:45:45 1997
-***************
-*** 1828,1832 ****
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=f,*r,Q,?o,?Q,f,*&r,*&r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "fG,*rG,f,*r,*r,Q,o,Q"))]
---- 1828,1832 ----
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=f,*r,Q,?o,?Q,f,*r,*r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "fG,*rG,f,*r,*r,Q,o,Q"))]
-***************
-*** 1846,1850 ****
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,?o,?Q,&r,&r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "rG,r,r,o,Q"))]
---- 1846,1850 ----
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,?o,?Q,r,r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "rG,r,r,o,Q"))]
-***************
-*** 2019,2023 ****
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,&r,&r,&r,f,f,*T")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i,fM,*T,f"))]
---- 2019,2023 ----
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,r,r,r,f,f,*T")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i,fM,*T,f"))]
-***************
-*** 2037,2041 ****
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,&r,&r,&r")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i"))]
---- 2037,2041 ----
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,r,r,r")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i"))]
-diff -rcp2N gcc-2.7.2.2/config/rs6000/rs6000.c g77-new/config/rs6000/rs6000.c
-*** gcc-2.7.2.2/config/rs6000/rs6000.c Thu Feb 20 19:24:14 1997
---- g77-new/config/rs6000/rs6000.c     Sun Aug 10 04:44:05 1997
-*************** input_operand (op, mode)
-*** 724,730 ****
-      return 1;
-  
-!   /* For HImode and QImode, any constant is valid. */
-!   if ((mode == HImode || mode == QImode)
-!       && GET_CODE (op) == CONST_INT)
-      return 1;
-  
---- 724,729 ----
-      return 1;
-  
-!   /* For integer modes, any constant is ok.  */
-!   if (GET_CODE (op) == CONST_INT)
-      return 1;
-  
-diff -rcp2N gcc-2.7.2.2/config/sparc/sol2.h g77-new/config/sparc/sol2.h
-*** gcc-2.7.2.2/config/sparc/sol2.h    Sat Aug 19 17:36:45 1995
---- g77-new/config/sparc/sol2.h        Sun Aug 10 18:45:53 1997
-*************** do {                                                                   \
-*** 166,168 ****
-  /* Define for support of TFmode long double and REAL_ARITHMETIC.
-     Sparc ABI says that long double is 4 words.  */
-! #define LONG_DOUBLE_TYPE_SIZE 128
---- 166,168 ----
-  /* Define for support of TFmode long double and REAL_ARITHMETIC.
-     Sparc ABI says that long double is 4 words.  */
-! #define LONG_DOUBLE_TYPE_SIZE 64
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.c g77-new/config/sparc/sparc.c
-*** gcc-2.7.2.2/config/sparc/sparc.c   Tue Sep 12 18:32:24 1995
---- g77-new/config/sparc/sparc.c       Sun Aug 10 18:46:03 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 40,46 ****
-  /* 1 if the caller has placed an "unimp" insn immediately after the call.
-     This is used in v8 code when calling a function that returns a structure.
-!    v9 doesn't have this.  */
-  
-! #define SKIP_CALLERS_UNIMP_P (!TARGET_V9 && current_function_returns_struct)
-  
-  /* Global variables for machine-dependent things.  */
---- 40,51 ----
-  /* 1 if the caller has placed an "unimp" insn immediately after the call.
-     This is used in v8 code when calling a function that returns a structure.
-!    v9 doesn't have this.  Be careful to have this test be the same as that
-!    used on the call.  */
-  
-! #define SKIP_CALLERS_UNIMP_P  \
-! (!TARGET_V9 && current_function_returns_struct                       \
-!  && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl)))        \
-!  && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl)))     \
-!      == INTEGER_CST))
-  
-  /* Global variables for machine-dependent things.  */
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.h g77-new/config/sparc/sparc.h
-*** gcc-2.7.2.2/config/sparc/sparc.h   Thu Feb 20 19:24:15 1997
---- g77-new/config/sparc/sparc.h       Sun Aug 10 18:46:13 1997
-*************** extern int leaf_function;
-*** 1526,1533 ****
-  
-  /* Output assembler code to FILE to increment profiler label # LABELNO
-!    for profiling a function entry.  */
-  
-  #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-    do {                                                               \
-      fputs ("\tsethi %hi(", (FILE));                          \
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
---- 1526,1540 ----
-  
-  /* Output assembler code to FILE to increment profiler label # LABELNO
-!    for profiling a function entry.
-! 
-!    32 bit sparc uses %g2 as the STATIC_CHAIN_REGNUM which gets clobbered
-!    during profiling so we need to save/restore it around the call to mcount.
-!    We're guaranteed that a save has just been done, and we use the space
-!    allocated for intreg/fpreg value passing.  */
-  
-  #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-    do {                                                               \
-+     if (! TARGET_V9)                                 \
-+       fputs ("\tst %g2,[%fp-4]\n", FILE);                    \
-      fputs ("\tsethi %hi(", (FILE));                          \
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
-*************** extern int leaf_function;
-*** 1539,1542 ****
---- 1546,1551 ----
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
-      fputs ("),%o0,%o0\n", (FILE));                           \
-+     if (! TARGET_V9)                                 \
-+       fputs ("\tld [%fp-4],%g2\n", FILE);                    \
-    } while (0)
-  
-diff -rcp2N gcc-2.7.2.2/config/sparc/sparc.md g77-new/config/sparc/sparc.md
-*** gcc-2.7.2.2/config/sparc/sparc.md  Tue Sep 12 18:57:35 1995
---- g77-new/config/sparc/sparc.md      Sun Aug 10 18:46:27 1997
-***************
-*** 4799,4803 ****
-      abort ();
-  
-!  if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
-      {
-        /* This is really a PIC sequence.  We want to represent
---- 4799,4803 ----
-      abort ();
-  
-!   if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
-      {
-        /* This is really a PIC sequence.  We want to represent
-***************
-*** 4809,4824 ****
-  
-        if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!      emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-!                               gen_rtx (SET, VOIDmode, pc_rtx,
-!                                        XEXP (operands[0], 0)),
-!                               operands[3],
-!                               gen_rtx (CLOBBER, VOIDmode,
-!                                        gen_rtx (REG, Pmode, 15)))));
-        else
-!      emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-!                               gen_rtx (SET, VOIDmode, pc_rtx,
-!                                        XEXP (operands[0], 0)),
-!                               gen_rtx (CLOBBER, VOIDmode,
-!                                        gen_rtx (REG, Pmode, 15)))));
-        goto finish_call;
-      }
---- 4809,4828 ----
-  
-        if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!      emit_jump_insn
-!        (gen_rtx (PARALLEL, VOIDmode,
-!                  gen_rtvec (3,
-!                             gen_rtx (SET, VOIDmode, pc_rtx,
-!                                      XEXP (operands[0], 0)),
-!                             GEN_INT (INTVAL (operands[3]) & 0xfff),
-!                             gen_rtx (CLOBBER, VOIDmode,
-!                                      gen_rtx (REG, Pmode, 15)))));
-        else
-!      emit_jump_insn
-!        (gen_rtx (PARALLEL, VOIDmode,
-!                  gen_rtvec (2,
-!                             gen_rtx (SET, VOIDmode, pc_rtx,
-!                                      XEXP (operands[0], 0)),
-!                             gen_rtx (CLOBBER, VOIDmode,
-!                                      gen_rtx (REG, Pmode, 15)))));
-        goto finish_call;
-      }
-***************
-*** 4839,4852 ****
-  
-    if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!     emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-!                           gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                           operands[3],
-!                           gen_rtx (CLOBBER, VOIDmode,
-!                                             gen_rtx (REG, Pmode, 15)))));
-    else
-!     emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-!                           gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                           gen_rtx (CLOBBER, VOIDmode,
-!                                             gen_rtx (REG, Pmode, 15)))));
-  
-   finish_call:
---- 4843,4858 ----
-  
-    if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!     emit_call_insn
-!       (gen_rtx (PARALLEL, VOIDmode,
-!              gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                         GEN_INT (INTVAL (operands[3]) & 0xfff),
-!                         gen_rtx (CLOBBER, VOIDmode,
-!                                  gen_rtx (REG, Pmode, 15)))));
-    else
-!     emit_call_insn
-!       (gen_rtx (PARALLEL, VOIDmode,
-!              gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                         gen_rtx (CLOBBER, VOIDmode,
-!                                  gen_rtx (REG, Pmode, 15)))));
-  
-   finish_call:
-***************
-*** 4911,4915 ****
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
---- 4917,4921 ----
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 4923,4927 ****
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
---- 4929,4933 ----
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 5178,5184 ****
-    emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-    emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
--   emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, Pmode, 8)));
-    /* Return, restoring reg window and jumping to goto handler.  */
-    emit_insn (gen_goto_handler_and_restore ());
-    DONE;
-  }")
---- 5184,5190 ----
-    emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-    emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-    /* Return, restoring reg window and jumping to goto handler.  */
-    emit_insn (gen_goto_handler_and_restore ());
-+   emit_barrier ();
-    DONE;
-  }")
-***************
-*** 5192,5200 ****
-  
-  (define_insn "goto_handler_and_restore"
-!   [(unspec_volatile [(const_int 0)] 2)]
-    ""
-    "jmp %%o0+0\;restore"
-    [(set_attr "type" "misc")
-     (set_attr "length" "2")])
-  
-  ;; Special pattern for the FLUSH instruction.
---- 5198,5237 ----
-  
-  (define_insn "goto_handler_and_restore"
-!   [(unspec_volatile [(const_int 0)] 2)
-!    (use (reg:SI 8))]
-    ""
-    "jmp %%o0+0\;restore"
-    [(set_attr "type" "misc")
-     (set_attr "length" "2")])
-+ 
-+ ;; Pattern for use after a setjmp to store FP and the return register
-+ ;; into the stack area.
-+ 
-+ (define_expand "setjmp"
-+   [(const_int 0)]
-+   ""
-+   "
-+ {
-+   if (TARGET_V9)
-+     emit_insn (gen_setjmp_64 ());
-+   else
-+     emit_insn (gen_setjmp_32 ());
-+ 
-+   DONE;
-+ }")
-+ 
-+ (define_expand "setjmp_32"
-+   [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0))
-+    (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))]
-+   ""
-+   "
-+ { operands[0] = frame_pointer_rtx; }")
-+ 
-+ (define_expand "setjmp_64"
-+   [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0))
-+    (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))]
-+   ""
-+   "
-+ { operands[0] = frame_pointer_rtx; }")
-  
-  ;; Special pattern for the FLUSH instruction.
-diff -rcp2N gcc-2.7.2.2/config/x-linux g77-new/config/x-linux
-*** gcc-2.7.2.2/config/x-linux Tue Mar 28 07:43:37 1995
---- g77-new/config/x-linux     Thu Jul 10 20:08:49 1997
-*************** BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-*** 13,14 ****
---- 13,17 ----
-  # Don't run fixproto
-  STMP_FIXPROTO =
-+ 
-+ # Don't install "assert.h" in gcc. We use the one in glibc.
-+ INSTALL_ASSERT_H =
-diff -rcp2N gcc-2.7.2.2/config/x-linux-aout g77-new/config/x-linux-aout
-*** gcc-2.7.2.2/config/x-linux-aout    Wed Dec 31 19:00:00 1969
---- g77-new/config/x-linux-aout        Thu Jul 10 20:08:49 1997
-***************
-*** 0 ****
---- 1,14 ----
-+ # It is defined in config/xm-linux.h.
-+ # X_CFLAGS = -DPOSIX
-+ 
-+ # The following is needed when compiling stages 2 and 3 because gcc's
-+ # limits.h must be picked up before /usr/include/limits.h.  This is because
-+ # each does an #include_next of the other if the other hasn't been included.
-+ # /usr/include/limits.h loses if it gets found first because /usr/include is
-+ # at the end of the search order.  When a new version of gcc is released,
-+ # gcc's limits.h hasn't been installed yet and hence isn't found.
-+ 
-+ BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-+ 
-+ # Don't run fixproto
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.2/config.guess g77-new/config.guess
-*** gcc-2.7.2.2/config.guess   Thu Feb 20 19:24:32 1997
---- g77-new/config.guess       Thu Jul 10 20:08:50 1997
-*************** trap 'rm -f dummy.c dummy.o dummy; exit 
-*** 52,63 ****
-  
-  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
--     alpha:OSF1:V*:*)
--      # After 1.2, OSF1 uses "V1.3" for uname -r.
--      echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
--      exit 0 ;;
-      alpha:OSF1:*:*)
-       # 1.2 uses "1.2" for uname -r.
-!      echo alpha-dec-osf${UNAME_RELEASE}
-!         exit 0 ;;
-      21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
---- 52,62 ----
-  
-  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-      alpha:OSF1:*:*)
-+      # A Vn.n version is a released version.
-+      # A Tn.n version is a released field test version.
-+      # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-!      echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
-!      exit 0 ;;
-      21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
-*** 154,161 ****
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-!    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-!     i[34]86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
---- 153,160 ----
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-!     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-!     i?86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
-*************** EOF
-*** 220,224 ****
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-!          9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
-           9000/8?? )            HP_ARCH=hppa1.0 ;;
-       esac
---- 219,223 ----
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-!          9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
-           9000/8?? )            HP_ARCH=hppa1.0 ;;
-       esac
-*************** EOF
-*** 304,308 ****
-       echo m68k-hp-netbsd${UNAME_RELEASE}
-       exit 0 ;;
-!     i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
---- 303,307 ----
-       echo m68k-hp-netbsd${UNAME_RELEASE}
-       exit 0 ;;
-!     i?86:BSD/386:*:* | *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-*************** EOF
-*** 314,318 ****
-       exit 0 ;;
-      *:GNU:*:*)
-!      echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-      *:Linux:*:*)
---- 313,317 ----
-       exit 0 ;;
-      *:GNU:*:*)
-!      echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-      *:Linux:*:*)
-*************** EOF
-*** 320,330 ****
-       # first see if it will tell us.
-       ld_help_string=`ld --help 2>&1`
-! #    if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
-  #      echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-!      if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
-         echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-!      elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
-         echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
-       elif test "${UNAME_MACHINE}" = "alpha" ; then
-         echo alpha-unknown-linux ; exit 0
-       else
---- 319,333 ----
-       # first see if it will tell us.
-       ld_help_string=`ld --help 2>&1`
-! #    if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then
-  #      echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-!      if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then
-         echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-!      elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then
-         echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
-       elif test "${UNAME_MACHINE}" = "alpha" ; then
-+        as_version_string=`as --version 2>&1`
-+        if echo $as_version_string | grep >/dev/null 2>&1 " version 2.6 "; then
-+          echo alpha-unknown-linuxoldas ; exit 0
-+        fi
-         echo alpha-unknown-linux ; exit 0
-       else
-*************** EOF
-*** 363,370 ****
-  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-  # are messed up and put the nodename in both sysname and nodename.
-!     i[34]86:DYNIX/ptx:4*:*)
-       echo i386-sequent-sysv4
-       exit 0 ;;
-!     i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
---- 366,373 ----
-  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-  # are messed up and put the nodename in both sysname and nodename.
-!     i?86:DYNIX/ptx:4*:*)
-       echo i386-sequent-sysv4
-       exit 0 ;;
-!     i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
-*************** EOF
-*** 373,377 ****
-       fi
-       exit 0 ;;
-!     i[34]86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
---- 376,380 ----
-       fi
-       exit 0 ;;
-!     i?86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-*************** EOF
-*** 380,383 ****
---- 383,388 ----
-               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-+              (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-+                      && UNAME_MACHINE=i586
-               echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
-       else
-*************** EOF
-*** 402,406 ****
-       echo m68010-convergent-sysv
-       exit 0 ;;
-!     M680[234]0:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-      3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
---- 407,411 ----
-       echo m68010-convergent-sysv
-       exit 0 ;;
-!     M68*:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-      3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
-*************** EOF
-*** 410,414 ****
-          uname -p 2>/dev/null | grep 86 >/dev/null \
-            && echo i486-ncr-sysv4 && exit 0 ;;
-!     m680[234]0:LynxOS:2.[23]*:*)
-       echo m68k-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
---- 415,419 ----
-          uname -p 2>/dev/null | grep 86 >/dev/null \
-            && echo i486-ncr-sysv4 && exit 0 ;;
-!     m68*:LynxOS:2.*:*)
-       echo m68k-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-*************** EOF
-*** 416,426 ****
-       echo m68k-atari-sysv4
-       exit 0 ;;
-!     i[34]86:LynxOS:2.[23]*:*)
-       echo i386-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     TSUNAMI:LynxOS:2.[23]*:*)
-       echo sparc-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     rs6000:LynxOS:2.[23]*:*)
-       echo rs6000-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
---- 421,431 ----
-       echo m68k-atari-sysv4
-       exit 0 ;;
-!     i?86:LynxOS:2.*:*)
-       echo i386-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
-       echo rs6000-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-*************** main ()
-*** 479,483 ****
-    int version;
-    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-!   printf ("%s-next-nextstep%s\n", __ARCHITECTURE__,  version==2 ? "2" : "3");
-    exit (0);
-  #endif
---- 484,488 ----
-    int version;
-    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-!   printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-    exit (0);
-  #endif
-diff -rcp2N gcc-2.7.2.2/config.sub g77-new/config.sub
-*** gcc-2.7.2.2/config.sub     Thu Jun 15 17:01:49 1995
---- g77-new/config.sub Thu Jul 10 20:08:50 1997
-*************** case $basic_machine in
-*** 130,134 ****
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-!      tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
-               | arme[lb] | pyramid \
-               | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
---- 130,134 ----
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-!      tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
-               | arme[lb] | pyramid \
-               | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
-*************** case $basic_machine in
-*** 145,149 ****
-               ;;
-       # Recognize the basic CPU types with company name.
-!      vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
-             | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
-             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
---- 145,149 ----
-               ;;
-       # Recognize the basic CPU types with company name.
-!      vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
-             | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
-             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
-*************** case $basic_machine in
-*** 309,325 ****
-               ;;
-  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-!      i[345]86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv32
-               ;;
-!      i[345]86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv4
-               ;;
-!      i[345]86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv
-               ;;
-!      i[345]86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-solaris2
---- 309,325 ----
-               ;;
-  # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-!      i[3456]86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv32
-               ;;
-!      i[3456]86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv4
-               ;;
-!      i[3456]86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-sysv
-               ;;
-!      i[3456]86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
-               os=-solaris2
-diff -rcp2N gcc-2.7.2.2/configure g77-new/configure
-*** gcc-2.7.2.2/configure      Thu Feb 20 19:24:33 1997
---- g77-new/configure  Sun Aug 10 18:46:31 1997
-*************** exec_prefix='$(prefix)'
-*** 82,85 ****
---- 82,86 ----
-  # The default g++ include directory is $(libdir)/g++-include.
-  gxx_include_dir='$(libdir)/g++-include'
-+ #gxx_include_dir='$(exec_prefix)/include/g++'
-  
-  # Default --program-transform-name to nothing.
-*************** for machine in $canon_build $canon_host 
-*** 548,551 ****
---- 549,578 ----
-               use_collect2=yes
-               ;;
-+      alpha-*-linux*oldas*)
-+              tm_file=alpha/linux.h
-+              tmake_file=alpha/t-linux
-+              xmake_file=alpha/x-linux
-+              fixincludes=Makefile.in
-+              xm_file=alpha/xm-linux.h
-+              gas=yes gnu_ld=yes
-+              ;;
-+      alpha-*-linux*ecoff*)
-+              tm_file=alpha/linux.h
-+              tmake_file=alpha/t-linux
-+              xmake_file=alpha/x-linux
-+              fixincludes=Makefile.in
-+              xm_file=alpha/xm-linux.h
-+              extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+              gas=yes gnu_ld=yes
-+              ;;
-+      alpha-*-linux*)
-+                 tm_file=alpha/elf.h
-+                 tmake_file=alpha/t-linux
-+                 xmake_file=alpha/x-linux
-+                 fixincludes=Makefile.in
-+                 xm_file=alpha/xm-linux.h
-+                 extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+                 gas=yes gnu_ld=yes
-+                 ;;
-       alpha-dec-osf[23456789]*)
-               tm_file=alpha/osf2.h
-*************** for machine in $canon_build $canon_host 
-*** 985,989 ****
-               cpu_type=i386           # with a.out format using pre BFD linkers
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux
-               tm_file=i386/linux-oldld.h
-               fixincludes=Makefile.in # The headers are ok already.
---- 1012,1016 ----
-               cpu_type=i386           # with a.out format using pre BFD linkers
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux-aout
-               tm_file=i386/linux-oldld.h
-               fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host 
-*** 994,998 ****
-               cpu_type=i386           # with a.out format
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux
-               tm_file=i386/linux-aout.h
-               fixincludes=Makefile.in # The headers are ok already.
---- 1021,1025 ----
-               cpu_type=i386           # with a.out format
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux-aout
-               tm_file=i386/linux-aout.h
-               fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host 
-*** 1003,1007 ****
-               cpu_type=i386           # with ELF format, using GNU libc v1.
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux
-               tmake_file=t-linux-libc1
-               tm_file=i386/linux.h
---- 1030,1034 ----
-               cpu_type=i386           # with ELF format, using GNU libc v1.
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux-aout
-               tmake_file=t-linux-libc1
-               tm_file=i386/linux.h
-*************** for machine in $canon_build $canon_host 
-*** 1651,1654 ****
---- 1678,1702 ----
-               use_collect2=yes
-               ;;
-+         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 ]
-*************** MAYBE_TARGET_DEFAULT = -DTARGET_CPU_DEFA
-*** 2980,2984 ****
-       rm Makefile.sed
-       echo 's|\f||' > Makefile.sed
-!      echo "s|^target=.*$|target=${target}|" >> Makefile.sed
-       echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
-       echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
---- 3028,3032 ----
-       rm Makefile.sed
-       echo 's|\f||' > Makefile.sed
-!      echo "s|^target=.*$|target=${canon_target}|" >> Makefile.sed
-       echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
-       echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
-diff -rcp2N gcc-2.7.2.2/cse.c g77-new/cse.c
-*** gcc-2.7.2.2/cse.c  Sun Nov 26 14:47:05 1995
---- g77-new/cse.c      Sun Aug 10 18:46:37 1997
-*************** static struct table_elt *last_jump_equiv
-*** 520,544 ****
-  static int constant_pool_entries_cost;
-  
-- /* Bits describing what kind of values in memory must be invalidated
--    for a particular instruction.  If all three bits are zero,
--    no memory refs need to be invalidated.  Each bit is more powerful
--    than the preceding ones, and if a bit is set then the preceding
--    bits are also set.
-- 
--    Here is how the bits are set:
--    Pushing onto the stack invalidates only the stack pointer,
--    writing at a fixed address invalidates only variable addresses,
--    writing in a structure element at variable address
--      invalidates all but scalar variables,
--    and writing in anything else at variable address invalidates everything.  */
-- 
-- struct write_data
-- {
--   int sp : 1;                        /* Invalidate stack pointer. */
--   int var : 1;                       /* Invalidate variable addresses.  */
--   int nonscalar : 1;         /* Invalidate all but scalar variables.  */
--   int all : 1;                       /* Invalidate all memory refs.  */
-- };
-- 
-  /* Define maximum length of a branch path.  */
-  
---- 520,523 ----
-*************** static void merge_equiv_classes PROTO((s
-*** 626,632 ****
-                                      struct table_elt *));
-  static void invalidate               PROTO((rtx, enum machine_mode));
-  static void remove_invalid_refs      PROTO((int));
-  static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory        PROTO((struct write_data *));
-  static void invalidate_for_call      PROTO((void));
-  static rtx use_related_value PROTO((rtx, struct table_elt *));
---- 605,612 ----
-                                      struct table_elt *));
-  static void invalidate               PROTO((rtx, enum machine_mode));
-+ static int cse_rtx_varies_p  PROTO((rtx));
-  static void remove_invalid_refs      PROTO((int));
-  static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory        PROTO((void));
-  static void invalidate_for_call      PROTO((void));
-  static rtx use_related_value PROTO((rtx, struct table_elt *));
-*************** static void set_nonvarying_address_compo
-*** 638,644 ****
-                                                    HOST_WIDE_INT *));
-  static int refers_to_p               PROTO((rtx, rtx));
-- static int refers_to_mem_p   PROTO((rtx, rtx, HOST_WIDE_INT,
--                                     HOST_WIDE_INT));
-- static int cse_rtx_addr_varies_p PROTO((rtx));
-  static rtx canon_reg         PROTO((rtx, rtx));
-  static void find_best_addr   PROTO((rtx, rtx *));
---- 618,621 ----
-*************** static void record_jump_cond   PROTO((enum
-*** 656,661 ****
-                                      rtx, rtx, int));
-  static void cse_insn         PROTO((rtx, int));
-! static void note_mem_written PROTO((rtx, struct write_data *));
-! static void invalidate_from_clobbers PROTO((struct write_data *, rtx));
-  static rtx cse_process_notes PROTO((rtx, rtx));
-  static void cse_around_loop  PROTO((rtx));
---- 633,638 ----
-                                      rtx, rtx, int));
-  static void cse_insn         PROTO((rtx, int));
-! static int note_mem_written  PROTO((rtx));
-! static void invalidate_from_clobbers PROTO((rtx));
-  static rtx cse_process_notes PROTO((rtx, rtx));
-  static void cse_around_loop  PROTO((rtx));
-*************** invalidate (x, full_mode)
-*** 1512,1517 ****
-    register int i;
-    register struct table_elt *p;
--   rtx base;
--   HOST_WIDE_INT start, end;
-  
-    /* If X is a register, dependencies on its contents
---- 1489,1492 ----
-*************** invalidate (x, full_mode)
-*** 1605,1611 ****
-      full_mode = GET_MODE (x);
-  
--   set_nonvarying_address_components (XEXP (x, 0), GET_MODE_SIZE (full_mode),
--                                   &base, &start, &end);
-- 
-    for (i = 0; i < NBUCKETS; i++)
-      {
---- 1580,1583 ----
-*************** invalidate (x, full_mode)
-*** 1614,1618 ****
-       {
-         next = p->next_same_hash;
-!        if (refers_to_mem_p (p->exp, base, start, end))
-           remove_from_table (p, i);
-       }
---- 1586,1594 ----
-       {
-         next = p->next_same_hash;
-!        /* Invalidate ASM_OPERANDS which reference memory (this is easier
-!           than checking all the aliases).  */
-!        if (p->in_memory
-!            && (GET_CODE (p->exp) != MEM
-!                || true_dependence (x, full_mode, p->exp, cse_rtx_varies_p)))
-           remove_from_table (p, i);
-       }
-*************** rehash_using_reg (x)
-*** 1695,1722 ****
-  }
-  \f
-- /* Remove from the hash table all expressions that reference memory,
--    or some of them as specified by *WRITES.  */
-- 
-- static void
-- invalidate_memory (writes)
--      struct write_data *writes;
-- {
--   register int i;
--   register struct table_elt *p, *next;
--   int all = writes->all;
--   int nonscalar = writes->nonscalar;
-- 
--   for (i = 0; i < NBUCKETS; i++)
--     for (p = table[i]; p; p = next)
--       {
--      next = p->next_same_hash;
--      if (p->in_memory
--          && (all
--              || (nonscalar && p->in_struct)
--              || cse_rtx_addr_varies_p (p->exp)))
--        remove_from_table (p, i);
--       }
-- }
-- \f
-  /* Remove from the hash table any expression that is a call-clobbered
-     register.  Also update their TICK values.  */
---- 1671,1674 ----
-*************** invalidate_for_call ()
-*** 1756,1759 ****
---- 1708,1717 ----
-         next = p->next_same_hash;
-  
-+        if (p->in_memory)
-+          {
-+            remove_from_table (p, hash);
-+            continue;
-+          }
-+ 
-         if (GET_CODE (p->exp) != REG
-             || REGNO (p->exp) >= FIRST_PSEUDO_REGISTER)
-*************** canon_hash (x, mode)
-*** 1946,1950 ****
-         return 0;
-       }
-!       if (! RTX_UNCHANGING_P (x))
-       {
-         hash_arg_in_memory = 1;
---- 1904,1908 ----
-         return 0;
-       }
-!       if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
-       {
-         hash_arg_in_memory = 1;
-*************** set_nonvarying_address_components (addr,
-*** 2395,2477 ****
-  }
-  
-! /* Return 1 iff any subexpression of X refers to memory
-!    at an address of BASE plus some offset
-!    such that any of the bytes' offsets fall between START (inclusive)
-!    and END (exclusive).
-! 
-!    The value is undefined if X is a varying address (as determined by
-!    cse_rtx_addr_varies_p).  This function is not used in such cases.
-! 
-!    When used in the cse pass, `qty_const' is nonzero, and it is used
-!    to treat an address that is a register with a known constant value
-!    as if it were that constant value.
-!    In the loop pass, `qty_const' is zero, so this is not done.  */
-! 
-! static int
-! refers_to_mem_p (x, base, start, end)
-!      rtx x, base;
-!      HOST_WIDE_INT start, end;
-! {
-!   register HOST_WIDE_INT i;
-!   register enum rtx_code code;
-!   register char *fmt;
-! 
-!  repeat:
-!   if (x == 0)
-!     return 0;
-! 
-!   code = GET_CODE (x);
-!   if (code == MEM)
-!     {
-!       register rtx addr = XEXP (x, 0);       /* Get the address.  */
-!       rtx mybase;
-!       HOST_WIDE_INT mystart, myend;
-! 
-!       set_nonvarying_address_components (addr, GET_MODE_SIZE (GET_MODE (x)),
-!                                       &mybase, &mystart, &myend);
-! 
-! 
-!       /* refers_to_mem_p is never called with varying addresses. 
-!       If the base addresses are not equal, there is no chance
-!       of the memory addresses conflicting.  */
-!       if (! rtx_equal_p (mybase, base))
-!      return 0;
-! 
-!       return myend > start && mystart < end;
-!     }
-! 
-!   /* X does not match, so try its subexpressions.  */
-! 
-!   fmt = GET_RTX_FORMAT (code);
-!   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-!     if (fmt[i] == 'e')
-!       {
-!      if (i == 0)
-!        {
-!          x = XEXP (x, 0);
-!          goto repeat;
-!        }
-!      else
-!        if (refers_to_mem_p (XEXP (x, i), base, start, end))
-!          return 1;
-!       }
-!     else if (fmt[i] == 'E')
-!       {
-!      int j;
-!      for (j = 0; j < XVECLEN (x, i); j++)
-!        if (refers_to_mem_p (XVECEXP (x, i, j), base, start, end))
-!          return 1;
-!       }
-! 
-!   return 0;
-! }
-! 
-! /* Nonzero if X refers to memory at a varying address;
-     except that a register which has at the moment a known constant value
-     isn't considered variable.  */
-  
-  static int
-! cse_rtx_addr_varies_p (x)
-!      rtx x;
-  {
-    /* We need not check for X and the equivalence class being of the same
---- 2353,2363 ----
-  }
-  
-! /* Nonzero if X, a memory address, refers to a varying address;
-     except that a register which has at the moment a known constant value
-     isn't considered variable.  */
-  
-  static int
-! cse_rtx_varies_p (x)
-!      register rtx x;
-  {
-    /* We need not check for X and the equivalence class being of the same
-*************** cse_rtx_addr_varies_p (x)
-*** 2479,2497 ****
-       doesn't vary in any mode.  */
-  
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && GET_MODE (XEXP (x, 0)) == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]] != 0)
-      return 0;
-  
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == PLUS
-!       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
-!       && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-      return 0;
-  
---- 2365,2381 ----
-       doesn't vary in any mode.  */
-  
-!   if (GET_CODE (x) == REG
-!       && REGNO_QTY_VALID_P (REGNO (x))
-!       && GET_MODE (x) == qty_mode[reg_qty[REGNO (x)]]
-!       && qty_const[reg_qty[REGNO (x)]] != 0)
-      return 0;
-  
-!   if (GET_CODE (x) == PLUS
-!       && GET_CODE (XEXP (x, 1)) == CONST_INT
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && (GET_MODE (XEXP (x, 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]])
-      return 0;
-  
-*************** cse_rtx_addr_varies_p (x)
-*** 2501,2519 ****
-       load fp minus a constant into a register, then a MEM which is the
-       sum of the two `constant' registers.  */
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == PLUS
-!       && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-!       && GET_CODE (XEXP (XEXP (x, 0), 1)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 1)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 1))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-      return 0;
-  
-!   return rtx_addr_varies_p (x);
-  }
-  \f
---- 2385,2402 ----
-       load fp minus a constant into a register, then a MEM which is the
-       sum of the two `constant' registers.  */
-!   if (GET_CODE (x) == PLUS
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && GET_CODE (XEXP (x, 1)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && (GET_MODE (XEXP (x, 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]]
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 1)))
-!       && (GET_MODE (XEXP (x, 1))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 1))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 1))]])
-      return 0;
-  
-!   return rtx_varies_p (x);
-  }
-  \f
-*************** cse_insn (insn, in_libcall_block)
-*** 6105,6110 ****
-    rtx this_insn_cc0 = 0;
-    enum machine_mode this_insn_cc0_mode;
--   struct write_data writes_memory;
--   static struct write_data init = {0, 0, 0, 0};
-  
-    rtx src_eqv = 0;
---- 5988,5991 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6118,6122 ****
-  
-    this_insn = insn;
--   writes_memory = init;
-  
-    /* Find all the SETs and CLOBBERs in this instruction.
---- 5999,6002 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6220,6232 ****
-         else if (GET_CODE (y) == CLOBBER)
-           {
-!            /* If we clobber memory, take note of that,
-!               and canon the address.
-                This does nothing when a register is clobbered
-                because we have already invalidated the reg.  */
-             if (GET_CODE (XEXP (y, 0)) == MEM)
-!              {
-!                canon_reg (XEXP (y, 0), NULL_RTX);
-!                note_mem_written (XEXP (y, 0), &writes_memory);
-!              }
-           }
-         else if (GET_CODE (y) == USE
---- 6100,6108 ----
-         else if (GET_CODE (y) == CLOBBER)
-           {
-!            /* If we clobber memory, canon the address.
-                This does nothing when a register is clobbered
-                because we have already invalidated the reg.  */
-             if (GET_CODE (XEXP (y, 0)) == MEM)
-!              canon_reg (XEXP (y, 0), NULL_RTX);
-           }
-         else if (GET_CODE (y) == USE
-*************** cse_insn (insn, in_libcall_block)
-*** 6247,6254 ****
-      {
-        if (GET_CODE (XEXP (x, 0)) == MEM)
-!      {
-!        canon_reg (XEXP (x, 0), NULL_RTX);
-!        note_mem_written (XEXP (x, 0), &writes_memory);
-!      }
-      }
-  
---- 6123,6127 ----
-      {
-        if (GET_CODE (XEXP (x, 0)) == MEM)
-!      canon_reg (XEXP (x, 0), NULL_RTX);
-      }
-  
-*************** cse_insn (insn, in_libcall_block)
-*** 6674,6678 ****
-       }
-  #endif /* LOAD_EXTEND_OP */
-!  
-        if (src == src_folded)
-          src_folded = 0;
---- 6547,6551 ----
-       }
-  #endif /* LOAD_EXTEND_OP */
-! 
-        if (src == src_folded)
-          src_folded = 0;
-*************** cse_insn (insn, in_libcall_block)
-*** 6860,6864 ****
-                      || (GET_CODE (src_folded) != MEM
-                          && ! src_folded_force_flag))
-!                 && GET_MODE_CLASS (mode) != MODE_CC)
-           {
-             src_folded_force_flag = 1;
---- 6733,6738 ----
-                      || (GET_CODE (src_folded) != MEM
-                          && ! src_folded_force_flag))
-!                 && GET_MODE_CLASS (mode) != MODE_CC
-!                 && mode != VOIDmode)
-           {
-             src_folded_force_flag = 1;
-*************** cse_insn (insn, in_libcall_block)
-*** 6983,6993 ****
-        if (GET_CODE (dest) == MEM)
-       {
-         dest = fold_rtx (dest, insn);
-- 
--        /* Decide whether we invalidate everything in memory,
--           or just things at non-fixed places.
--           Writing a large aggregate must invalidate everything
--           because we don't know how long it is.  */
--        note_mem_written (dest, &writes_memory);
-       }
-  
---- 6857,6869 ----
-        if (GET_CODE (dest) == MEM)
-       {
-+ #ifdef PUSH_ROUNDING
-+        /* Stack pushes invalidate the stack pointer.  */
-+        rtx addr = XEXP (dest, 0);
-+        if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-+             || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-+            && XEXP (addr, 0) == stack_pointer_rtx)
-+          invalidate (stack_pointer_rtx, Pmode);
-+ #endif
-         dest = fold_rtx (dest, insn);
-       }
-  
-*************** cse_insn (insn, in_libcall_block)
-*** 7234,7238 ****
-        sets[i].src_elt = src_eqv_elt;
-  
-!   invalidate_from_clobbers (&writes_memory, x);
-  
-    /* Some registers are invalidated by subroutine calls.  Memory is 
---- 7110,7114 ----
-        sets[i].src_elt = src_eqv_elt;
-  
-!   invalidate_from_clobbers (x);
-  
-    /* Some registers are invalidated by subroutine calls.  Memory is 
-*************** cse_insn (insn, in_libcall_block)
-*** 7241,7248 ****
-    if (GET_CODE (insn) == CALL_INSN)
-      {
--       static struct write_data everything = {0, 1, 1, 1};
-- 
-        if (! CONST_CALL_P (insn))
-!      invalidate_memory (&everything);
-        invalidate_for_call ();
-      }
---- 7117,7122 ----
-    if (GET_CODE (insn) == CALL_INSN)
-      {
-        if (! CONST_CALL_P (insn))
-!      invalidate_memory ();
-        invalidate_for_call ();
-      }
-*************** cse_insn (insn, in_libcall_block)
-*** 7265,7270 ****
-          we have just done an invalidate_memory that covers even those.  */
-       if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!          || (GET_CODE (dest) == MEM && ! writes_memory.all
-!              && ! cse_rtx_addr_varies_p (dest)))
-         invalidate (dest, VOIDmode);
-       else if (GET_CODE (dest) == STRICT_LOW_PART
---- 7139,7143 ----
-          we have just done an invalidate_memory that covers even those.  */
-       if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!          || GET_CODE (dest) == MEM)
-         invalidate (dest, VOIDmode);
-       else if (GET_CODE (dest) == STRICT_LOW_PART
-*************** cse_insn (insn, in_libcall_block)
-*** 7359,7363 ****
-                     sets[i].dest_hash, GET_MODE (dest));
-       elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-!                        && ! RTX_UNCHANGING_P (sets[i].inner_dest));
-  
-       if (elt->in_memory)
---- 7232,7238 ----
-                     sets[i].dest_hash, GET_MODE (dest));
-       elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-!                        && (! RTX_UNCHANGING_P (sets[i].inner_dest)
-!                            || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest,
-!                                                        0))));
-  
-       if (elt->in_memory)
-*************** cse_insn (insn, in_libcall_block)
-*** 7532,7580 ****
-  }
-  \f
-- /* Store 1 in *WRITES_PTR for those categories of memory ref
--    that must be invalidated when the expression WRITTEN is stored in.
--    If WRITTEN is null, say everything must be invalidated.  */
-- 
-  static void
-! note_mem_written (written, writes_ptr)
-!      rtx written;
-!      struct write_data *writes_ptr;
-! {
-!   static struct write_data everything = {0, 1, 1, 1};
-! 
-!   if (written == 0)
-!     *writes_ptr = everything;
-!   else if (GET_CODE (written) == MEM)
-!     {
-!       /* Pushing or popping the stack invalidates just the stack pointer. */
-!       rtx addr = XEXP (written, 0);
-!       if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-!         || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-!        && GET_CODE (XEXP (addr, 0)) == REG
-!        && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-!      {
-!        writes_ptr->sp = 1;
-!        return;
-!      }
-!       else if (GET_MODE (written) == BLKmode)
-!      *writes_ptr = everything;
-!       /* (mem (scratch)) means clobber everything.  */
-!       else if (GET_CODE (addr) == SCRATCH)
-!      *writes_ptr = everything;
-!       else if (cse_rtx_addr_varies_p (written))
-!      {
-!        /* A varying address that is a sum indicates an array element,
-!           and that's just as good as a structure element
-!           in implying that we need not invalidate scalar variables.
-!           However, we must allow QImode aliasing of scalars, because the
-!           ANSI C standard allows character pointers to alias anything.  */
-!        if (! ((MEM_IN_STRUCT_P (written)
-!                || GET_CODE (XEXP (written, 0)) == PLUS)
-!               && GET_MODE (written) != QImode))
-!          writes_ptr->all = 1;
-!        writes_ptr->nonscalar = 1;
-!      }
-!       writes_ptr->var = 1;
-      }
-  }
-  
---- 7407,7450 ----
-  }
-  \f
-  static void
-! invalidate_memory ()
-! {
-!   register int i;
-!   register struct table_elt *p, *next;
-! 
-!   for (i = 0; i < NBUCKETS; i++)
-!     for (p = table[i]; p; p = next)
-!       {
-!      next = p->next_same_hash;
-!      if (p->in_memory)
-!        remove_from_table (p, i);
-!       }
-! }
-! 
-! static int
-! note_mem_written (mem)
-!      register rtx mem;
-! {
-!   if (mem == 0 || GET_CODE(mem) != MEM )
-!      return 0;
-!   else
-!    {
-!       register rtx addr = XEXP (mem, 0);
-!   /* Pushing or popping the stack invalidates just the stack pointer.  */
-!     if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-!        || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-!       && GET_CODE (XEXP (addr, 0)) == REG
-!       && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-!     {
-!       if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-!      reg_tick[STACK_POINTER_REGNUM]++;
-! 
-!       /* This should be *very* rare.  */
-!       if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-!      invalidate (stack_pointer_rtx, VOIDmode);
-!       return 1;
-      }
-+   return 0;
-+   }
-  }
-  
-*************** note_mem_written (written, writes_ptr)
-*** 7584,7612 ****
-     alias with something that is SET or CLOBBERed.
-  
--    W points to the writes_memory for this insn, a struct write_data
--    saying which kinds of memory references must be invalidated.
-     X is the pattern of the insn.  */
-  
-  static void
-! invalidate_from_clobbers (w, x)
-!      struct write_data *w;
-       rtx x;
-  {
--   /* If W->var is not set, W specifies no action.
--      If W->all is set, this step gets all memory refs
--      so they can be ignored in the rest of this function.  */
--   if (w->var)
--     invalidate_memory (w);
-- 
--   if (w->sp)
--     {
--       if (reg_tick[STACK_POINTER_REGNUM] >= 0)
--      reg_tick[STACK_POINTER_REGNUM]++;
-- 
--       /* This should be *very* rare.  */
--       if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
--      invalidate (stack_pointer_rtx, VOIDmode);
--     }
-- 
-    if (GET_CODE (x) == CLOBBER)
-      {
---- 7454,7463 ----
-     alias with something that is SET or CLOBBERed.
-  
-     X is the pattern of the insn.  */
-  
-  static void
-! invalidate_from_clobbers (x)
-       rtx x;
-  {
-    if (GET_CODE (x) == CLOBBER)
-      {
-*************** invalidate_from_clobbers (w, x)
-*** 7615,7619 ****
-       {
-         if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!            || (GET_CODE (ref) == MEM && ! w->all))
-           invalidate (ref, VOIDmode);
-         else if (GET_CODE (ref) == STRICT_LOW_PART
---- 7466,7470 ----
-       {
-         if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!            || GET_CODE (ref) == MEM)
-           invalidate (ref, VOIDmode);
-         else if (GET_CODE (ref) == STRICT_LOW_PART
-*************** invalidate_from_clobbers (w, x)
-*** 7631,7643 ****
-           {
-             rtx ref = XEXP (y, 0);
-!            if (ref)
-!              {
-!                if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!                    || (GET_CODE (ref) == MEM && !w->all))
-!                  invalidate (ref, VOIDmode);
-!                else if (GET_CODE (ref) == STRICT_LOW_PART
-!                         || GET_CODE (ref) == ZERO_EXTRACT)
-!                  invalidate (XEXP (ref, 0), GET_MODE (ref));
-!              }
-           }
-       }
---- 7482,7491 ----
-           {
-             rtx ref = XEXP (y, 0);
-!            if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!                || GET_CODE (ref) == MEM)
-!              invalidate (ref, VOIDmode);
-!            else if (GET_CODE (ref) == STRICT_LOW_PART
-!                     || GET_CODE (ref) == ZERO_EXTRACT)
-!              invalidate (XEXP (ref, 0), GET_MODE (ref));
-           }
-       }
-*************** cse_around_loop (loop_start)
-*** 7800,7807 ****
-  }
-  \f
-- /* Variable used for communications between the next two routines.  */
-- 
-- static struct write_data skipped_writes_memory;
-- 
-  /* Process one SET of an insn that was skipped.  We ignore CLOBBERs
-     since they are done elsewhere.  This function is called via note_stores.  */
---- 7648,7651 ----
-*************** invalidate_skipped_set (dest, set)
-*** 7812,7815 ****
---- 7656,7675 ----
-       rtx dest;
-  {
-+   enum rtx_code code = GET_CODE (dest);
-+   
-+   if (code == MEM
-+       && ! note_mem_written (dest)   /* If this is not a stack push ... */
-+       /* There are times when an address can appear varying and be a PLUS
-+       during this scan when it would be a fixed address were we to know
-+       the proper equivalences.  So invalidate all memory if there is
-+       a BLKmode or nonscalar memory reference or a reference to a
-+       variable address.  */
-+       && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode
-+        || cse_rtx_varies_p (XEXP (dest, 0))))
-+     {
-+       invalidate_memory ();
-+       return;
-+     }
-+ 
-    if (GET_CODE (set) == CLOBBER
-  #ifdef HAVE_cc0
-*************** invalidate_skipped_set (dest, set)
-*** 7819,7837 ****
-      return;
-  
-!   if (GET_CODE (dest) == MEM)
-!     note_mem_written (dest, &skipped_writes_memory);
-! 
-!   /* There are times when an address can appear varying and be a PLUS
-!      during this scan when it would be a fixed address were we to know
-!      the proper equivalences.  So promote "nonscalar" to be "all".  */
-!   if (skipped_writes_memory.nonscalar)
-!     skipped_writes_memory.all = 1;
-! 
-!   if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!       || (! skipped_writes_memory.all && ! cse_rtx_addr_varies_p (dest)))
-!     invalidate (dest, VOIDmode);
-!   else if (GET_CODE (dest) == STRICT_LOW_PART
-!         || GET_CODE (dest) == ZERO_EXTRACT)
-      invalidate (XEXP (dest, 0), GET_MODE (dest));
-  }
-  
---- 7679,7686 ----
-      return;
-  
-!   if (code == STRICT_LOW_PART || code == ZERO_EXTRACT)
-      invalidate (XEXP (dest, 0), GET_MODE (dest));
-+   else if (code == REG || code == SUBREG || code == MEM)
-+     invalidate (dest, VOIDmode);
-  }
-  
-*************** invalidate_skipped_block (start)
-*** 7845,7850 ****
-  {
-    rtx insn;
--   static struct write_data init = {0, 0, 0, 0};
--   static struct write_data everything = {0, 1, 1, 1};
-  
-    for (insn = start; insn && GET_CODE (insn) != CODE_LABEL;
---- 7694,7697 ----
-*************** invalidate_skipped_block (start)
-*** 7854,7867 ****
-       continue;
-  
--       skipped_writes_memory = init;
-- 
-        if (GET_CODE (insn) == CALL_INSN)
-       {
-         invalidate_for_call ();
--        skipped_writes_memory = everything;
-       }
-  
-        note_stores (PATTERN (insn), invalidate_skipped_set);
--       invalidate_from_clobbers (&skipped_writes_memory, PATTERN (insn));
-      }
-  }
---- 7701,7712 ----
-       continue;
-  
-        if (GET_CODE (insn) == CALL_INSN)
-       {
-+        if (! CONST_CALL_P (insn))
-+          invalidate_memory ();
-         invalidate_for_call ();
-       }
-  
-        note_stores (PATTERN (insn), invalidate_skipped_set);
-      }
-  }
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7913,7920 ****
-  {
-    struct table_elt *src_elt;
--   static struct write_data init = {0, 0, 0, 0};
--   struct write_data writes_memory;
-- 
--   writes_memory = init;
-  
-    /* If this is a SET, see if we can replace SET_SRC, but ignore SETs that
---- 7758,7761 ----
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7976,7991 ****
-  
-    /* Now invalidate anything modified by X.  */
-!   note_mem_written (SET_DEST (x), &writes_memory);
-! 
-!   if (writes_memory.var)
-!     invalidate_memory (&writes_memory);
-! 
-!   /* See comment on similar code in cse_insn for explanation of these tests. */
-    if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-!       || (GET_CODE (SET_DEST (x)) == MEM && ! writes_memory.all
-!        && ! cse_rtx_addr_varies_p (SET_DEST (x))))
-      invalidate (SET_DEST (x), VOIDmode);
-    else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-!         || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
-      invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
-  }
---- 7817,7828 ----
-  
-    /* Now invalidate anything modified by X.  */
-!   note_mem_written (SET_DEST (x));
-!   
-!   /* See comment on similar code in cse_insn for explanation of these tests.  */
-    if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-!       || GET_CODE (SET_DEST (x)) == MEM)
-      invalidate (SET_DEST (x), VOIDmode);
-    else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-!         || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
-      invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
-  }
-*************** cse_main (f, nregs, after_loop, file)
-*** 8234,8237 ****
---- 8071,8075 ----
-  
-    init_recog ();
-+   init_alias_analysis ();
-  
-    max_reg = nregs;
-*************** cse_basic_block (from, to, next_branch, 
-*** 8405,8408 ****
---- 8243,8247 ----
-    int to_usage = 0;
-    int in_libcall_block = 0;
-+   int num_insns = 0;
-  
-    /* Each of these arrays is undefined before max_reg, so only allocate
-*************** cse_basic_block (from, to, next_branch, 
-*** 8437,8440 ****
---- 8276,8299 ----
-      {
-        register enum rtx_code code;
-+       int i;
-+       struct table_elt *p, *next;
-+ 
-+       /* If we have processed 1,000 insns, flush the hash table to avoid
-+       extreme quadratic behavior.  */
-+       if (num_insns++ > 1000)
-+      {
-+        for (i = 0; i < NBUCKETS; i++)
-+          for (p = table[i]; p; p = next)
-+            {
-+              next = p->next_same_hash;
-+ 
-+              if (GET_CODE (p->exp) == REG)
-+                invalidate (p->exp, p->mode);
-+              else
-+                remove_from_table (p, i);
-+            }
-+ 
-+        num_insns = 0;
-+      }
-  
-        /* See if this is a branch that is part of the path.  If so, and it is
-diff -rcp2N gcc-2.7.2.2/dwarfout.c g77-new/dwarfout.c
-*** gcc-2.7.2.2/dwarfout.c     Thu Oct 26 21:40:07 1995
---- g77-new/dwarfout.c Sun Aug 10 18:47:19 1997
-*************** output_bound_representation (bound, dim_
-*** 1629,1705 ****
-      {
-  
-!       case ERROR_MARK:
-!      return;
-  
-        /* All fixed-bounds are represented by INTEGER_CST nodes.       */
-  
-!       case INTEGER_CST:
-!      ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-!                              (unsigned) TREE_INT_CST_LOW (bound));
-!      break;
-! 
-!       /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-!       SAVE_EXPR nodes.  */
-! 
-!       case NOP_EXPR:
-!      bound = TREE_OPERAND (bound, 0);
-!      /* ... fall thru... */
-! 
-!       case SAVE_EXPR:
-!      {
-!        char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!        char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! 
-!        sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-!                              current_dienum, dim_num, u_or_l);
-  
-!        sprintf (end_label,   BOUND_END_LABEL_FMT,
-!                              current_dienum, dim_num, u_or_l);
-  
-!        ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-!        ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-  
-!        /* If we are working on a bound for a dynamic dimension in C,
-!           the dynamic dimension in question had better have a static
-!           (zero) lower bound and a dynamic *upper* bound.  */
-  
-!        if (u_or_l != 'u')
-!          abort ();
-  
-!        /* If optimization is turned on, the SAVE_EXPRs that describe
-!           how to access the upper bound values are essentially bogus.
-!           They only describe (at best) how to get at these values at
-!           the points in the generated code right after they have just
-!           been computed.  Worse yet, in the typical case, the upper
-!           bound values will not even *be* computed in the optimized
-!           code, so these SAVE_EXPRs are entirely bogus.
-! 
-!           In order to compensate for this fact, we check here to see
-!           if optimization is enabled, and if so, we effectively create
-!           an empty location description for the (unknown and unknowable)
-!           upper bound.
-! 
-!           This should not cause too much trouble for existing (stupid?)
-!           debuggers because they have to deal with empty upper bounds
-!           location descriptions anyway in order to be able to deal with
-!           incomplete array types.
-! 
-!           Of course an intelligent debugger (GDB?) should be able to
-!           comprehend that a missing upper bound specification in a
-!           array type used for a storage class `auto' local array variable
-!           indicates that the upper bound is both unknown (at compile-
-!           time) and unknowable (at run-time) due to optimization.
-!        */
-! 
-!        if (! optimize)
-!          output_loc_descriptor
-!            (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-  
-!        ASM_OUTPUT_LABEL (asm_out_file, end_label);
-!      }
-!      break;
-  
--       default:
--      abort ();
-      }
-  }
---- 1629,1699 ----
-      {
-  
-!     case ERROR_MARK:
-!       return;
-  
-        /* All fixed-bounds are represented by INTEGER_CST nodes.       */
-  
-!     case INTEGER_CST:
-!       ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-!                            (unsigned) TREE_INT_CST_LOW (bound));
-!       break;
-  
-!     default:
-  
-!       /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-!       SAVE_EXPR nodes, in which case we can do something, or as
-!       an expression, which we cannot represent.  */
-!       {
-!      char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!      char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-  
-!      sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-!               current_dienum, dim_num, u_or_l);
-  
-!      sprintf (end_label, BOUND_END_LABEL_FMT,
-!               current_dienum, dim_num, u_or_l);
-  
-!      ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-!      ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-! 
-!      /* If optimization is turned on, the SAVE_EXPRs that describe
-!         how to access the upper bound values are essentially bogus.
-!         They only describe (at best) how to get at these values at
-!         the points in the generated code right after they have just
-!         been computed.  Worse yet, in the typical case, the upper
-!         bound values will not even *be* computed in the optimized
-!         code, so these SAVE_EXPRs are entirely bogus.
-! 
-!         In order to compensate for this fact, we check here to see
-!         if optimization is enabled, and if so, we effectively create
-!         an empty location description for the (unknown and unknowable)
-!         upper bound.
-! 
-!         This should not cause too much trouble for existing (stupid?)
-!         debuggers because they have to deal with empty upper bounds
-!         location descriptions anyway in order to be able to deal with
-!         incomplete array types.
-! 
-!         Of course an intelligent debugger (GDB?) should be able to
-!         comprehend that a missing upper bound specification in a
-!         array type used for a storage class `auto' local array variable
-!         indicates that the upper bound is both unknown (at compile-
-!         time) and unknowable (at run-time) due to optimization. */
-! 
-!      if (! optimize)
-!        {
-!          while (TREE_CODE (bound) == NOP_EXPR
-!                 || TREE_CODE (bound) == CONVERT_EXPR)
-!            bound = TREE_OPERAND (bound, 0);
-! 
-!          if (TREE_CODE (bound) == SAVE_EXPR)
-!            output_loc_descriptor
-!              (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-!        }
-  
-!      ASM_OUTPUT_LABEL (asm_out_file, end_label);
-!       }
-!       break;
-  
-      }
-  }
-*************** type_attribute (type, decl_const, decl_v
-*** 2857,2861 ****
-    register int root_type_modified;
-  
-!   if (TREE_CODE (type) == ERROR_MARK)
-      return;
-  
---- 2851,2855 ----
-    register int root_type_modified;
-  
-!   if (code == ERROR_MARK)
-      return;
-  
-*************** type_attribute (type, decl_const, decl_v
-*** 2864,2869 ****
-       type `void', so this only applies to function return types.  */
-  
-!   if (TREE_CODE (type) == VOID_TYPE)
-      return;
-  
-    root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
---- 2858,2869 ----
-       type `void', so this only applies to function return types.  */
-  
-!   if (code == VOID_TYPE)
-      return;
-+ 
-+   /* If this is a subtype, find the underlying type.  Eventually,
-+      this should write out the appropriate subtype info.  */
-+   while ((code == INTEGER_TYPE || code == REAL_TYPE)
-+       && TREE_TYPE (type) != 0)
-+     type = TREE_TYPE (type), code = TREE_CODE (type);
-  
-    root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
-diff -rcp2N gcc-2.7.2.2/emit-rtl.c g77-new/emit-rtl.c
-*** gcc-2.7.2.2/emit-rtl.c     Thu Sep 14 16:09:30 1995
---- g77-new/emit-rtl.c Sun Aug 10 18:47:08 1997
-*************** max_label_num ()
-*** 545,548 ****
---- 545,565 ----
-  }
-  
-+ /* Identify REG (which may be a CONCAT) as a user register.  */
-+ 
-+ void
-+ mark_user_reg (reg)
-+      rtx reg;
-+ {
-+   if (GET_CODE (reg) == CONCAT)
-+     {
-+       REG_USERVAR_P (XEXP (reg, 0)) = 1;
-+       REG_USERVAR_P (XEXP (reg, 1)) = 1;
-+     }
-+   else if (GET_CODE (reg) == REG)
-+     REG_USERVAR_P (reg) = 1;
-+   else
-+     abort ();
-+ }
-+ 
-  /* Return first label number used in this function (if any were used).  */
-  
-*************** change_address (memref, mode, addr)
-*** 1315,1318 ****
---- 1332,1338 ----
-      addr = memory_address (mode, addr);
-       
-+   if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
-+     return memref;
-+ 
-    new = gen_rtx (MEM, mode, addr);
-    MEM_VOLATILE_P (new) = MEM_VOLATILE_P (memref);
-diff -rcp2N gcc-2.7.2.2/explow.c g77-new/explow.c
-*** gcc-2.7.2.2/explow.c       Thu Jun 15 07:30:10 1995
---- g77-new/explow.c   Sun Aug 10 18:46:30 1997
-*************** convert_memory_address (to_mode, x)
-*** 305,310 ****
---- 305,313 ----
-       rtx x;
-  {
-+   enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
-    rtx temp;
-  
-+   /* Here we handle some special cases.  If none of them apply, fall through
-+      to the default case.  */
-    switch (GET_CODE (x))
-      {
-*************** convert_memory_address (to_mode, x)
-*** 321,339 ****
-        return temp;
-  
--     case PLUS:
--     case MULT:
--       return gen_rtx (GET_CODE (x), to_mode, 
--                    convert_memory_address (to_mode, XEXP (x, 0)),
--                    convert_memory_address (to_mode, XEXP (x, 1)));
-- 
-      case CONST:
-        return gen_rtx (CONST, to_mode, 
-                     convert_memory_address (to_mode, XEXP (x, 0)));
-  
-!     default:
-!       return convert_modes (to_mode,
-!                          to_mode == ptr_mode ? Pmode : ptr_mode,
-!                          x, POINTERS_EXTEND_UNSIGNED);
-      }
-  }
-  #endif
---- 324,348 ----
-        return temp;
-  
-      case CONST:
-        return gen_rtx (CONST, to_mode, 
-                     convert_memory_address (to_mode, XEXP (x, 0)));
-  
-!     case PLUS:
-!     case MULT:
-!       /* For addition the second operand is a small constant, we can safely
-!       permute the converstion and addition operation.  We can always safely
-!       permute them if we are making the address narrower.  In addition,
-!       always permute the operations if this is a constant.  */
-!       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
-!        || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT
-!            && (INTVAL (XEXP (x, 1)) + 20000 < 40000
-!                || CONSTANT_P (XEXP (x, 0)))))
-!      return gen_rtx (GET_CODE (x), to_mode, 
-!                      convert_memory_address (to_mode, XEXP (x, 0)),
-!                      convert_memory_address (to_mode, XEXP (x, 1)));
-      }
-+ 
-+   return convert_modes (to_mode, from_mode,
-+                      x, POINTERS_EXTEND_UNSIGNED);
-  }
-  #endif
-diff -rcp2N gcc-2.7.2.2/expmed.c g77-new/expmed.c
-*** gcc-2.7.2.2/expmed.c       Thu Jul 13 19:25:37 1995
---- g77-new/expmed.c   Sun Aug 10 18:46:23 1997
-*************** store_bit_field (str_rtx, bitsize, bitnu
-*** 399,402 ****
---- 399,403 ----
-  #ifdef HAVE_insv
-    if (HAVE_insv
-+       && GET_MODE (value) != BLKmode
-        && !(bitsize == 1 && GET_CODE (value) == CONST_INT)
-        /* Ensure insv's size is wide enough for this field.  */
-*************** store_split_bit_field (op0, bitsize, bit
-*** 777,781 ****
-            done in extract_bit_field, so that the two calls to
-            extract_fixed_bit_field will have comparable arguments.  */
-!        if (GET_CODE (value) != MEM)
-           total_bits = BITS_PER_WORD;
-         else
---- 778,782 ----
-            done in extract_bit_field, so that the two calls to
-            extract_fixed_bit_field will have comparable arguments.  */
-!        if (GET_CODE (value) != MEM || GET_MODE (value) == BLKmode)
-           total_bits = BITS_PER_WORD;
-         else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 790,797 ****
-           /* The args are chosen so that the last part includes the
-              lsb.  Give extract_bit_field the value it needs (with
-!             endianness compensation) to fetch the piece we want.  */
-!          part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-!                                          total_bits - bitsize + bitsdone,
-!                                          NULL_RTX, 1, align);
-       }
-        else
---- 791,807 ----
-           /* The args are chosen so that the last part includes the
-              lsb.  Give extract_bit_field the value it needs (with
-!             endianness compensation) to fetch the piece we want.
-! 
-!             ??? We have no idea what the alignment of VALUE is, so
-!             we have to use a guess.  */
-!          part
-!            = extract_fixed_bit_field
-!              (word_mode, value, 0, thissize,
-!               total_bits - bitsize + bitsdone, NULL_RTX, 1,
-!               GET_MODE (value) == VOIDmode
-!               ? UNITS_PER_WORD
-!               : (GET_MODE (value) == BLKmode
-!                  ? 1
-!                  : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
-       }
-        else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 803,808 ****
-                           & (((HOST_WIDE_INT) 1 << thissize) - 1));
-         else
-!          part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-!                                          bitsdone, NULL_RTX, 1, align);
-       }
-  
---- 813,824 ----
-                           & (((HOST_WIDE_INT) 1 << thissize) - 1));
-         else
-!          part
-!            = extract_fixed_bit_field
-!              (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1,
-!               GET_MODE (value) == VOIDmode
-!               ? UNITS_PER_WORD
-!               : (GET_MODE (value) == BLKmode
-!                  ? 1
-!                  : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
-       }
-  
-*************** extract_bit_field (str_rtx, bitsize, bit
-*** 876,882 ****
-    rtx spec_target_subreg = 0;
-  
--   if (GET_CODE (str_rtx) == MEM && ! MEM_IN_STRUCT_P (str_rtx))
--     abort ();
-- 
-    /* Discount the part of the structure before the desired byte.
-       We need to know how many bytes are safe to reference after it.  */
---- 892,895 ----
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3189,3193 ****
-          Notice that we compute also the final remainder value here,
-          and return the result right away.  */
-!      if (target == 0)
-         target = gen_reg_rtx (compute_mode);
-  
---- 3202,3206 ----
-          Notice that we compute also the final remainder value here,
-          and return the result right away.  */
-!      if (target == 0 || GET_MODE (target) != compute_mode)
-         target = gen_reg_rtx (compute_mode);
-  
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3316,3320 ****
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0)
-             target = gen_reg_rtx (compute_mode);
-  
---- 3329,3333 ----
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0 || GET_MODE (target) != compute_mode)
-             target = gen_reg_rtx (compute_mode);
-  
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3418,3422 ****
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0)
-             target = gen_reg_rtx (compute_mode);
-           if (rem_flag)
---- 3431,3435 ----
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0 || GET_MODE (target) != compute_mode)
-             target = gen_reg_rtx (compute_mode);
-           if (rem_flag)
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3602,3605 ****
---- 3615,3621 ----
-    if (quotient == 0)
-      {
-+       if (target && GET_MODE (target) != compute_mode)
-+      target = 0;
-+ 
-        if (rem_flag)
-       {
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3653,3656 ****
---- 3669,3675 ----
-    if (rem_flag)
-      {
-+       if (target && GET_MODE (target) != compute_mode)
-+      target = 0;
-+ 
-        if (quotient == 0)
-       /* No divide instruction either.  Use library for remainder.  */
-diff -rcp2N gcc-2.7.2.2/expr.c g77-new/expr.c
-*** gcc-2.7.2.2/expr.c Thu Feb 20 19:24:17 1997
---- g77-new/expr.c     Sun Aug 10 18:47:21 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 27,30 ****
---- 27,31 ----
-  #include "flags.h"
-  #include "regs.h"
-+ #include "hard-reg-set.h"
-  #include "function.h"
-  #include "insn-flags.h"
-*************** extern int stack_depth;
-*** 139,143 ****
-  extern int max_stack_depth;
-  extern struct obstack permanent_obstack;
-! 
-  
-  static rtx enqueue_insn              PROTO((rtx, rtx));
---- 140,144 ----
-  extern int max_stack_depth;
-  extern struct obstack permanent_obstack;
-! extern rtx arg_pointer_save_area;
-  
-  static rtx enqueue_insn              PROTO((rtx, rtx));
-*************** expand_assignment (to, from, want_value,
-*** 2498,2503 ****
-  
-        push_temp_slots ();
-!       tem = get_inner_reference (to, &bitsize, &bitpos, &offset,
-!                                    &mode1, &unsignedp, &volatilep);
-  
-        /* If we are going to use store_bit_field and extract_bit_field,
---- 2499,2504 ----
-  
-        push_temp_slots ();
-!       tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
-!                               &unsignedp, &volatilep, &alignment);
-  
-        /* If we are going to use store_bit_field and extract_bit_field,
-*************** expand_assignment (to, from, want_value,
-*** 2507,2511 ****
-       tem = stabilize_reference (tem);
-  
--       alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
-        to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0);
-        if (offset != 0)
---- 2508,2511 ----
-*************** expand_assignment (to, from, want_value,
-*** 2518,2529 ****
-                                  gen_rtx (PLUS, ptr_mode, XEXP (to_rtx, 0),
-                                           force_reg (ptr_mode, offset_rtx)));
--        /* If we have a variable offset, the known alignment
--           is only that of the innermost structure containing the field.
--           (Actually, we could sometimes do better by using the
--           align of an element of the innermost array, but no need.)  */
--        if (TREE_CODE (to) == COMPONENT_REF
--            || TREE_CODE (to) == BIT_FIELD_REF)
--          alignment
--            = TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (to, 0))) / BITS_PER_UNIT;
-       }
-        if (volatilep)
---- 2518,2521 ----
-*************** store_expr (exp, target, want_value)
-*** 2775,2780 ****
-        which will often result in some optimizations.  Do the conversion
-        in two steps: first change the signedness, if needed, then
-!       the extend.  */
-!       if (! want_value)
-       {
-         if (TREE_UNSIGNED (TREE_TYPE (exp))
---- 2767,2775 ----
-        which will often result in some optimizations.  Do the conversion
-        in two steps: first change the signedness, if needed, then
-!       the extend.  But don't do this if the type of EXP is a subtype
-!       of something else since then the conversion might involve
-!       more than just converting modes.  */
-!       if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp))
-!        && TREE_TYPE (TREE_TYPE (exp)) == 0)
-       {
-         if (TREE_UNSIGNED (TREE_TYPE (exp))
-*************** store_constructor (exp, target)
-*** 3071,3074 ****
---- 3066,3077 ----
-           }
-  
-+        if (TREE_READONLY (field))
-+          {
-+            if (GET_CODE (to_rtx) == MEM)
-+              to_rtx = change_address (to_rtx, GET_MODE (to_rtx),
-+                                       XEXP (to_rtx, 0));
-+            RTX_UNCHANGING_P (to_rtx) = 1;
-+          }
-+ 
-         store_field (to_rtx, bitsize, bitpos, mode, TREE_VALUE (elt),
-                      /* The alignment of TARGET is
-*************** store_field (target, bitsize, bitpos, mo
-*** 3414,3417 ****
---- 3417,3432 ----
-        rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
-  
-+       /* If BITSIZE is narrower than the size of the type of EXP
-+       we will be narrowing TEMP.  Normally, what's wanted are the
-+       low-order bits.  However, if EXP's type is a record and this is
-+       big-endian machine, we want the upper BITSIZE bits.  */
-+       if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT
-+        && bitsize < GET_MODE_BITSIZE (GET_MODE (temp))
-+        && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
-+      temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp,
-+                           size_int (GET_MODE_BITSIZE (GET_MODE (temp))
-+                                     - bitsize),
-+                           temp, 1);
-+ 
-        /* Unless MODE is VOIDmode or BLKmode, convert TEMP to
-        MODE.  */
-*************** store_field (target, bitsize, bitpos, mo
-*** 3420,3423 ****
---- 3435,3459 ----
-       temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
-  
-+       /* If the modes of TARGET and TEMP are both BLKmode, both
-+       must be in memory and BITPOS must be aligned on a byte
-+       boundary.  If so, we simply do a block copy.  */
-+       if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode)
-+      {
-+        if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM
-+            || bitpos % BITS_PER_UNIT != 0)
-+          abort ();
-+ 
-+        target = change_address (target, VOIDmode,
-+                                 plus_constant (XEXP (target, 0),
-+                                                bitpos / BITS_PER_UNIT));
-+ 
-+        emit_block_move (target, temp,
-+                         GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-+                                  / BITS_PER_UNIT),
-+                         1);
-+ 
-+        return value_mode == VOIDmode ? const0_rtx : target;
-+      }
-+ 
-        /* Store the value in the bitfield.  */
-        store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size);
-*************** get_inner_unaligned_p (exp)
-*** 3515,3518 ****
---- 3551,3557 ----
-     This offset is in addition to the bit position.
-     If the position is not variable, we store 0 in *POFFSET.
-+    We set *PALIGNMENT to the alignment in bytes of the address that will be
-+    computed.  This is the alignment of the thing we return if *POFFSET
-+    is zero, but can be more less strictly aligned if *POFFSET is nonzero.
-  
-     If any of the extraction expressions is volatile,
-*************** get_inner_unaligned_p (exp)
-*** 3525,3533 ****
-     If the field describes a variable-sized object, *PMODE is set to
-     VOIDmode and *PBITSIZE is set to -1.  An access cannot be made in
-!    this case, but the address of the object can be found.  */
-  
-  tree
-  get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-!                   punsignedp, pvolatilep)
-       tree exp;
-       int *pbitsize;
---- 3564,3572 ----
-     If the field describes a variable-sized object, *PMODE is set to
-     VOIDmode and *PBITSIZE is set to -1.  An access cannot be made in
-!    this case, but the address of the object can be found.   */
-  
-  tree
-  get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-!                   punsignedp, pvolatilep, palignment)
-       tree exp;
-       int *pbitsize;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3537,3540 ****
---- 3576,3580 ----
-       int *punsignedp;
-       int *pvolatilep;
-+      int *palignment;
-  {
-    tree orig_exp = exp;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3542,3545 ****
---- 3582,3586 ----
-    enum machine_mode mode = VOIDmode;
-    tree offset = integer_zero_node;
-+   int alignment = BIGGEST_ALIGNMENT;
-  
-    if (TREE_CODE (exp) == COMPONENT_REF)
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3599,3607 ****
-  
-         *pbitpos += TREE_INT_CST_LOW (constant);
-! 
-!        if (var)
-!          offset = size_binop (PLUS_EXPR, offset,
-!                               size_binop (EXACT_DIV_EXPR, var,
-!                                           size_int (BITS_PER_UNIT)));
-       }
-  
---- 3640,3646 ----
-  
-         *pbitpos += TREE_INT_CST_LOW (constant);
-!        offset = size_binop (PLUS_EXPR, offset,
-!                             size_binop (EXACT_DIV_EXPR, var,
-!                                         size_int (BITS_PER_UNIT)));
-       }
-  
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3629,3633 ****
-  
-         index = fold (build (MULT_EXPR, index_type, index,
-!                             TYPE_SIZE (TREE_TYPE (exp))));
-  
-         if (TREE_CODE (index) == INTEGER_CST
---- 3668,3673 ----
-  
-         index = fold (build (MULT_EXPR, index_type, index,
-!                             convert (index_type,
-!                                      TYPE_SIZE (TREE_TYPE (exp)))));
-  
-         if (TREE_CODE (index) == INTEGER_CST
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3652,3666 ****
-        if (TREE_THIS_VOLATILE (exp))
-       *pvolatilep = 1;
-        exp = TREE_OPERAND (exp, 0);
-      }
-  
-!   /* If this was a bit-field, see if there is a mode that allows direct
-!      access in case EXP is in memory.  */
-!   if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0)
-!     {
-!       mode = mode_for_size (*pbitsize, MODE_INT, 0);
-!       if (mode == BLKmode)
-!      mode = VOIDmode;
-!     }
-  
-    if (integer_zerop (offset))
---- 3692,3708 ----
-        if (TREE_THIS_VOLATILE (exp))
-       *pvolatilep = 1;
-+ 
-+       /* If the offset is non-constant already, then we can't assume any
-+       alignment more than the alignment here.  */
-+       if (! integer_zerop (offset))
-+      alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-+ 
-        exp = TREE_OPERAND (exp, 0);
-      }
-  
-!   if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
-!     alignment = MIN (alignment, DECL_ALIGN (exp));
-!   else if (TREE_TYPE (exp) != 0)
-!     alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-  
-    if (integer_zerop (offset))
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3672,3675 ****
---- 3714,3718 ----
-    *pmode = mode;
-    *poffset = offset;
-+   *palignment = alignment / BITS_PER_UNIT;
-    return exp;
-  }
-*************** init_noncopied_parts (lhs, list)
-*** 3812,3820 ****
-  }
-  
-! /* Subroutine of expand_expr: return nonzero iff there is no way that
-     EXP can reference X, which is being modified.  */
-  
-  static int
-! safe_from_p (x, exp)
-       rtx x;
-       tree exp;
---- 3855,3867 ----
-  }
-  
-! static int safe_from_p_count;
-! static int safe_from_p_size;
-! static tree *safe_from_p_rewritten;
-! 
-! /* Subroutine of safe_from_p: return nonzero iff there is no way that
-     EXP can reference X, which is being modified.  */
-  
-  static int
-! safe_from_p_1 (x, exp)
-       rtx x;
-       tree exp;
-*************** safe_from_p (x, exp)
-*** 3822,3825 ****
---- 3869,3873 ----
-    rtx exp_rtl = 0;
-    int i, nops;
-+   int is_save_expr = 0;
-  
-    if (x == 0
-*************** safe_from_p (x, exp)
-*** 3860,3878 ****
-  
-      case 'x':
-!       if (TREE_CODE (exp) == TREE_LIST)
-!      return ((TREE_VALUE (exp) == 0
-!               || safe_from_p (x, TREE_VALUE (exp)))
-!              && (TREE_CHAIN (exp) == 0
-!                  || safe_from_p (x, TREE_CHAIN (exp))));
-!       else
-!      return 0;
-  
-      case '1':
-!       return safe_from_p (x, TREE_OPERAND (exp, 0));
-  
-      case '2':
-      case '<':
-!       return (safe_from_p (x, TREE_OPERAND (exp, 0))
-!            && safe_from_p (x, TREE_OPERAND (exp, 1)));
-  
-      case 'e':
---- 3908,3933 ----
-  
-      case 'x':
-!       switch (TREE_CODE (exp))
-!      {
-!      case TREE_LIST:
-!        return ((TREE_VALUE (exp) == 0
-!                 || safe_from_p_1 (x, TREE_VALUE (exp)))
-!                && (TREE_CHAIN (exp) == 0
-!                    || safe_from_p_1 (x, TREE_CHAIN (exp))));
-! 
-!      case ERROR_MARK:
-!        return 1;
-! 
-!      default:
-!        return 0;
-!      }
-  
-      case '1':
-!       return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-  
-      case '2':
-      case '<':
-!       return (safe_from_p_1 (x, TREE_OPERAND (exp, 0))
-!            && safe_from_p_1 (x, TREE_OPERAND (exp, 1)));
-  
-      case 'e':
-*************** safe_from_p (x, exp)
-*** 3887,3891 ****
-       case ADDR_EXPR:
-         return (staticp (TREE_OPERAND (exp, 0))
-!                || safe_from_p (x, TREE_OPERAND (exp, 0)));
-  
-       case INDIRECT_REF:
---- 3942,3946 ----
-       case ADDR_EXPR:
-         return (staticp (TREE_OPERAND (exp, 0))
-!                || safe_from_p_1 (x, TREE_OPERAND (exp, 0)));
-  
-       case INDIRECT_REF:
-*************** safe_from_p (x, exp)
-*** 3922,3928 ****
-  
-       case CLEANUP_POINT_EXPR:
-!        return safe_from_p (x, TREE_OPERAND (exp, 0));
-  
-       case SAVE_EXPR:
-         exp_rtl = SAVE_EXPR_RTL (exp);
-         break;
---- 3977,3984 ----
-  
-       case CLEANUP_POINT_EXPR:
-!        return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-  
-       case SAVE_EXPR:
-+        is_save_expr = 1;
-         exp_rtl = SAVE_EXPR_RTL (exp);
-         break;
-*************** safe_from_p (x, exp)
-*** 3931,3935 ****
-         /* The only operand we look at is operand 1.  The rest aren't
-            part of the expression.  */
-!        return safe_from_p (x, TREE_OPERAND (exp, 1));
-  
-       case METHOD_CALL_EXPR:
---- 3987,3991 ----
-         /* The only operand we look at is operand 1.  The rest aren't
-            part of the expression.  */
-!        return safe_from_p_1 (x, TREE_OPERAND (exp, 1));
-  
-       case METHOD_CALL_EXPR:
-*************** safe_from_p (x, exp)
-*** 3945,3949 ****
-        for (i = 0; i < nops; i++)
-       if (TREE_OPERAND (exp, i) != 0
-!          && ! safe_from_p (x, TREE_OPERAND (exp, i)))
-         return 0;
-      }
---- 4001,4005 ----
-        for (i = 0; i < nops; i++)
-       if (TREE_OPERAND (exp, i) != 0
-!          && ! safe_from_p_1 (x, TREE_OPERAND (exp, i)))
-         return 0;
-      }
-*************** safe_from_p (x, exp)
-*** 3969,3975 ****
---- 4025,4087 ----
-  
-    /* If we reach here, it is safe.  */
-+   if (is_save_expr)
-+     {
-+       /* This SAVE_EXPR might appear many times in the top-level
-+       safe_from_p() expression, and if it has a complex
-+       subexpression, examining it multiple times could result
-+       in a combinatorial explosion.  E.g. on an Alpha Cabriolet
-+       running at least 200MHz, a Fortran test case compiled with
-+       optimization took about 28 minutes to compile -- even though
-+       it was only a few lines long, and the complicated line causing
-+       so much time to be spent in the earlier version of safe_from_p()
-+       had only 293 or so unique nodes.
-+ 
-+       So, turn this SAVE_EXPR into an ERROR_MARK for now, but remember
-+       where it is so we can turn it back in the top-level safe_from_p()
-+       when we're done.  */
-+ 
-+       if (safe_from_p_count > safe_from_p_size)
-+      return 0;       /* For now, don't bother re-sizing the array. */
-+       safe_from_p_rewritten[safe_from_p_count++] = exp;
-+       TREE_SET_CODE (exp, ERROR_MARK);
-+     }
-+ 
-    return 1;
-  }
-  
-+ /* Subroutine of expand_expr: return nonzero iff there is no way that
-+    EXP can reference X, which is being modified.  */
-+ 
-+ static int
-+ safe_from_p (x, exp)
-+      rtx x;
-+      tree exp;
-+ {
-+   int rtn;
-+   int i;
-+   tree trees[128];
-+ 
-+   safe_from_p_count = 0;
-+   safe_from_p_size = sizeof (trees) / sizeof (trees[0]);
-+   safe_from_p_rewritten = &trees[0];
-+ 
-+   rtn = safe_from_p_1 (x, exp);
-+ 
-+ #if 0
-+   if (safe_from_p_count != 0)
-+     fprintf (stderr, "%s:%d: safe_from_p_count = %d\n",
-+           input_filename, lineno, safe_from_p_count);
-+ #endif
-+ 
-+   for (i = 0; i < safe_from_p_count; ++i)
-+     {
-+       if (TREE_CODE (trees [i]) != ERROR_MARK)
-+      abort ();
-+       TREE_SET_CODE (trees[i], SAVE_EXPR);
-+     }
-+ 
-+   return rtn;
-+ }
-+ 
-  /* Subroutine of expand_expr: return nonzero iff EXP is an
-     expression whose type is statically determinable.  */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4534,4537 ****
---- 4646,4658 ----
-               }
-           }
-+ 
-+        if (TREE_READONLY (exp))
-+          {
-+            if (GET_CODE (target) == MEM)
-+              target = change_address (target, GET_MODE (target),
-+                                       XEXP (target, 0));
-+            RTX_UNCHANGING_P (target) = 1;
-+          }
-+ 
-         store_constructor (exp, target);
-         return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 4543,4567 ****
-       tree exp2;
-  
-!      /* A SAVE_EXPR as the address in an INDIRECT_EXPR is generated
-!         for  *PTR += ANYTHING  where PTR is put inside the SAVE_EXPR.
-!         This code has the same general effect as simply doing
-!         expand_expr on the save expr, except that the expression PTR
-!         is computed for use as a memory address.  This means different
-!         code, suitable for indexing, may be generated.  */
-!      if (TREE_CODE (exp1) == SAVE_EXPR
-!          && SAVE_EXPR_RTL (exp1) == 0
-!          && TYPE_MODE (TREE_TYPE (exp1)) == ptr_mode)
-!        {
-!          temp = expand_expr (TREE_OPERAND (exp1, 0), NULL_RTX,
-!                              VOIDmode, EXPAND_SUM);
-!          op0 = memory_address (mode, temp);
-!          op0 = copy_all_regs (op0);
-!          SAVE_EXPR_RTL (exp1) = op0;
-!        }
-!      else
-!        {
-!          op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-!          op0 = memory_address (mode, op0);
-!        }
-  
-       temp = gen_rtx (MEM, mode, op0);
---- 4664,4669 ----
-       tree exp2;
-  
-!      op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-!      op0 = memory_address (mode, op0);
-  
-       temp = gen_rtx (MEM, mode, op0);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4770,4776 ****
-       tree offset;
-       int volatilep = 0;
--      tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
--                                      &mode1, &unsignedp, &volatilep);
-       int alignment;
-  
-       /* If we got back the original object, something is wrong.  Perhaps
---- 4872,4879 ----
-       tree offset;
-       int volatilep = 0;
-       int alignment;
-+      tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-+                                      &mode1, &unsignedp, &volatilep,
-+                                      &alignment);
-  
-       /* If we got back the original object, something is wrong.  Perhaps
-*************** expand_expr (exp, target, tmode, modifie
-*** 4793,4797 ****
-                               != INTEGER_CST)
-                           ? target : NULL_RTX),
-!                         VOIDmode, EXPAND_SUM);
-  
-       /* If this is a constant, put it into a register if it is a
---- 4896,4901 ----
-                               != INTEGER_CST)
-                           ? target : NULL_RTX),
-!                         VOIDmode,
-!                         modifier == EXPAND_INITIALIZER ? modifier : 0);
-  
-       /* If this is a constant, put it into a register if it is a
-*************** expand_expr (exp, target, tmode, modifie
-*** 4806,4810 ****
-         }
-  
--      alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
-       if (offset != 0)
-         {
---- 4910,4913 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4816,4827 ****
-                                 gen_rtx (PLUS, ptr_mode, XEXP (op0, 0),
-                                          force_reg (ptr_mode, offset_rtx)));
--        /* If we have a variable offset, the known alignment
--           is only that of the innermost structure containing the field.
--           (Actually, we could sometimes do better by using the
--           size of an element of the innermost array, but no need.)  */
--        if (TREE_CODE (exp) == COMPONENT_REF
--            || TREE_CODE (exp) == BIT_FIELD_REF)
--          alignment = (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
--                       / BITS_PER_UNIT);
-         }
-  
---- 4919,4922 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4844,4848 ****
-               && modifier != EXPAND_SUM
-               && modifier != EXPAND_INITIALIZER
-!              && ((mode1 != BLKmode && ! direct_load[(int) mode1])
-                   /* If the field isn't aligned enough to fetch as a memref,
-                      fetch it as a bit field.  */
---- 4939,4945 ----
-               && modifier != EXPAND_SUM
-               && modifier != EXPAND_INITIALIZER
-!              && ((mode1 != BLKmode && ! direct_load[(int) mode1]
-!                   && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
-!                   && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
-                   /* If the field isn't aligned enough to fetch as a memref,
-                      fetch it as a bit field.  */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4857,4861 ****
-  
-           if (ext_mode == BLKmode)
-!            abort ();
-  
-           op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
---- 4954,4982 ----
-  
-           if (ext_mode == BLKmode)
-!            {
-!              /* In this case, BITPOS must start at a byte boundary and
-!                 TARGET, if specified, must be a MEM.  */
-!              if (GET_CODE (op0) != MEM
-!                  || (target != 0 && GET_CODE (target) != MEM)
-!                  || bitpos % BITS_PER_UNIT != 0)
-!                abort ();
-! 
-!              op0 = change_address (op0, VOIDmode,
-!                                    plus_constant (XEXP (op0, 0),
-!                                                   bitpos / BITS_PER_UNIT));
-!              if (target == 0)
-!                {
-!                  target
-!                    = assign_stack_temp (mode, int_size_in_bytes (type), 0);
-!                  MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type);
-!                }
-! 
-!              emit_block_move (target, op0,
-!                               GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-!                                        / BITS_PER_UNIT),
-!                               1);
-!              
-!              return target;
-!            }
-  
-           op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
-*************** expand_expr (exp, target, tmode, modifie
-*** 4863,4866 ****
---- 4984,4999 ----
-                                    alignment,
-                                    int_size_in_bytes (TREE_TYPE (tem)));
-+ 
-+          /* If the result is a record type and BITSIZE is narrower than
-+             the mode of OP0, an integral mode, and this is a big endian
-+             machine, we must put the field into the high-order bits.  */
-+          if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN
-+              && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
-+              && bitsize < GET_MODE_BITSIZE (GET_MODE (op0)))
-+            op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0,
-+                                size_int (GET_MODE_BITSIZE (GET_MODE (op0))
-+                                          - bitsize),
-+                                op0, 1);
-+ 
-           if (mode == BLKmode)
-             {
-*************** expand_expr (exp, target, tmode, modifie
-*** 4877,4880 ****
---- 5010,5018 ----
-         }
-  
-+      /* If the result is BLKmode, use that to access the object
-+         now as well.  */
-+      if (mode == BLKmode)
-+        mode1 = BLKmode;
-+ 
-       /* Get a reference to just this component.  */
-       if (modifier == EXPAND_CONST_ADDRESS
-*************** expand_expr (exp, target, tmode, modifie
-*** 4888,4895 ****
-       MEM_IN_STRUCT_P (op0) = 1;
-       MEM_VOLATILE_P (op0) |= volatilep;
-!      if (mode == mode1 || mode1 == BLKmode || mode1 == tmode)
-         return op0;
-!      if (target == 0)
-         target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-       convert_move (target, op0, unsignedp);
-       return target;
---- 5026,5036 ----
-       MEM_IN_STRUCT_P (op0) = 1;
-       MEM_VOLATILE_P (op0) |= volatilep;
-!      if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
-!          || modifier == EXPAND_CONST_ADDRESS
-!          || modifier == EXPAND_INITIALIZER)
-         return op0;
-!      else if (target == 0)
-         target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-+ 
-       convert_move (target, op0, unsignedp);
-       return target;
-*************** expand_builtin (exp, target, subtarget, 
-*** 7986,7989 ****
---- 8127,8365 ----
-  #endif
-  
-+       /* __builtin_setjmp is passed a pointer to an array of five words
-+       (not all will be used on all machines).  It operates similarly to
-+       the C library function of the same name, but is more efficient.
-+       Much of the code below (and for longjmp) is copied from the handling
-+       of non-local gotos.
-+ 
-+       NOTE: This is intended for use by GNAT and will only work in
-+       the method used by it.  This code will likely NOT survive to 
-+       the GCC 2.8.0 release.  */
-+     case BUILT_IN_SETJMP:
-+       if (arglist == 0
-+        || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+      break;
-+ 
-+       {
-+      rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
-+                                  VOIDmode, 0);
-+      rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
-+      enum machine_mode sa_mode = Pmode;
-+      rtx stack_save;
-+      int old_inhibit_defer_pop = inhibit_defer_pop;
-+      int return_pops = RETURN_POPS_ARGS (get_identifier ("__dummy"),
-+                                          get_identifier ("__dummy"), 0);
-+      rtx next_arg_reg;
-+      CUMULATIVE_ARGS args_so_far;
-+      int current_call_is_indirect = 1;
-+      int i;
-+ 
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+      buf_addr = convert_memory_address (Pmode, buf_addr);
-+ #endif
-+ 
-+      buf_addr = force_reg (Pmode, buf_addr);
-+ 
-+      if (target == 0 || GET_CODE (target) != REG
-+          || REGNO (target) < FIRST_PSEUDO_REGISTER)
-+        target = gen_reg_rtx (value_mode);
-+ 
-+      emit_queue ();
-+ 
-+      CONST_CALL_P (emit_note (NULL_PTR, NOTE_INSN_SETJMP)) = 1;
-+      current_function_calls_setjmp = 1;
-+ 
-+      /* We store the frame pointer and the address of lab1 in the buffer
-+         and use the rest of it for the stack save area, which is
-+         machine-dependent.  */
-+      emit_move_insn (gen_rtx (MEM, Pmode, buf_addr),
-+                      virtual_stack_vars_rtx);
-+      emit_move_insn
-+        (validize_mem (gen_rtx (MEM, Pmode,
-+                                plus_constant (buf_addr,
-+                                               GET_MODE_SIZE (Pmode)))),
-+         gen_rtx (LABEL_REF, Pmode, lab1));
-+ 
-+ #ifdef HAVE_save_stack_nonlocal
-+      if (HAVE_save_stack_nonlocal)
-+        sa_mode = insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0];
-+ #endif
-+ 
-+      current_function_has_nonlocal_goto = 1;
-+ 
-+      stack_save = gen_rtx (MEM, sa_mode,
-+                            plus_constant (buf_addr,
-+                                           2 * GET_MODE_SIZE (Pmode)));
-+      emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
-+ 
-+ #ifdef HAVE_setjmp
-+      if (HAVE_setjmp)
-+        emit_insn (gen_setjmp ());
-+ #endif
-+ 
-+      /* Set TARGET to zero and branch around the other case.  */
-+      emit_move_insn (target, const0_rtx);
-+      emit_jump_insn (gen_jump (lab2));
-+      emit_barrier ();
-+      emit_label (lab1);
-+ 
-+      /* Note that setjmp clobbers FP when we get here, so we have to
-+         make sure it's marked as used by this function. */
-+      emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+ 
-+      /* Mark the static chain as clobbered here so life information
-+         doesn't get messed up for it.  */
-+      emit_insn (gen_rtx (CLOBBER, VOIDmode, static_chain_rtx));
-+ 
-+      /* Now put in the code to restore the frame pointer, and argument
-+         pointer, if needed.  The code below is from expand_end_bindings
-+         in stmt.c; see detailed documentation there.  */
-+ #ifdef HAVE_nonlocal_goto
-+      if (! HAVE_nonlocal_goto)
-+ #endif
-+        emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
-+ 
-+ #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-+      if (fixed_regs[ARG_POINTER_REGNUM])
-+        {
-+ #ifdef ELIMINABLE_REGS
-+          static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS;
-+ 
-+          for (i = 0; i < sizeof elim_regs / sizeof elim_regs[0]; i++)
-+            if (elim_regs[i].from == ARG_POINTER_REGNUM
-+                && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
-+              break;
-+ 
-+          if (i == sizeof elim_regs / sizeof elim_regs [0])
-+ #endif
-+            {
-+              /* Now restore our arg pointer from the address at which it
-+                 was saved in our stack frame.
-+                 If there hasn't be space allocated for it yet, make
-+                 some now.  */
-+              if (arg_pointer_save_area == 0)
-+                arg_pointer_save_area
-+                  = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
-+              emit_move_insn (virtual_incoming_args_rtx,
-+                              copy_to_reg (arg_pointer_save_area));
-+            }
-+        }
-+ #endif
-+ 
-+ #ifdef HAVE_nonlocal_goto_receiver
-+      if (HAVE_nonlocal_goto_receiver)
-+        emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+      /* The static chain pointer contains the address of dummy function.
-+         We need to call it here to handle some PIC cases of restoring
-+         a global pointer.  Then return 1.  */
-+      op0 = copy_to_mode_reg (Pmode, static_chain_rtx);
-+ 
-+      /* We can't actually call emit_library_call here, so do everything
-+         it does, which isn't much for a libfunc with no args.  */
-+      op0 = memory_address (FUNCTION_MODE, op0);
-+ 
-+      INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE,
-+                            gen_rtx (SYMBOL_REF, Pmode, "__dummy"));
-+      next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1);
-+ 
-+ #ifndef ACCUMULATE_OUTGOING_ARGS
-+ #ifdef HAVE_call_pop
-+      if (HAVE_call_pop)
-+        emit_call_insn (gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, op0),
-+                                      const0_rtx, next_arg_reg,
-+                                      GEN_INT (return_pops)));
-+      else
-+ #endif
-+ #endif
-+ 
-+ #ifdef HAVE_call
-+      if (HAVE_call)
-+        emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, op0),
-+                                  const0_rtx, next_arg_reg, const0_rtx));
-+      else
-+ #endif
-+          abort ();
-+ 
-+      emit_move_insn (target, const1_rtx);
-+      emit_label (lab2);
-+      return target;
-+       }
-+ 
-+       /* __builtin_longjmp is passed a pointer to an array of five words
-+       and a value, which is a dummy.  It's similar to the C library longjmp
-+       function but works with __builtin_setjmp above.  */
-+     case BUILT_IN_LONGJMP:
-+       if (arglist == 0 || TREE_CHAIN (arglist) == 0
-+        || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+      break;
-+ 
-+       {
-+      tree dummy_id = get_identifier ("__dummy");
-+      tree dummy_type = build_function_type (void_type_node, NULL_TREE);
-+      tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type); 
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+      rtx buf_addr
-+        = force_reg (Pmode,
-+                     convert_memory_address
-+                     (Pmode,
-+                      expand_expr (TREE_VALUE (arglist),
-+                                   NULL_RTX, VOIDmode, 0)));
-+ #else
-+      rtx buf_addr
-+        = force_reg (Pmode, expand_expr (TREE_VALUE (arglist),
-+                                         NULL_RTX,
-+                                         VOIDmode, 0));
-+ #endif
-+      rtx fp = gen_rtx (MEM, Pmode, buf_addr);
-+      rtx lab = gen_rtx (MEM, Pmode,
-+                         plus_constant (buf_addr, GET_MODE_SIZE (Pmode)));
-+      enum machine_mode sa_mode
-+ #ifdef HAVE_save_stack_nonlocal
-+        = (HAVE_save_stack_nonlocal
-+           ? insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0]
-+           : Pmode);
-+ #else
-+      = Pmode;
-+ #endif
-+      rtx stack = gen_rtx (MEM, sa_mode,
-+                           plus_constant (buf_addr,
-+                                          2 * GET_MODE_SIZE (Pmode)));
-+ 
-+      DECL_EXTERNAL (dummy_decl) = 1;
-+      TREE_PUBLIC (dummy_decl) = 1;
-+      make_decl_rtl (dummy_decl, NULL_PTR, 1);
-+ 
-+      /* Expand the second expression just for side-effects.  */
-+      expand_expr (TREE_VALUE (TREE_CHAIN (arglist)),
-+                   const0_rtx, VOIDmode, 0);
-+ 
-+      assemble_external (dummy_decl);
-+ 
-+      /* Pick up FP, label, and SP from the block and jump.  This code is
-+         from expand_goto in stmt.c; see there for detailed comments.  */
-+ #if HAVE_nonlocal_goto
-+      if (HAVE_nonlocal_goto)
-+        emit_insn (gen_nonlocal_goto (fp, lab, stack,
-+                                      XEXP (DECL_RTL (dummy_decl), 0)));
-+       else
-+ #endif
-+      {
-+        lab = copy_to_reg (lab);
-+        emit_move_insn (hard_frame_pointer_rtx, fp);
-+        emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
-+ 
-+        /* Put in the static chain register the address of the dummy
-+           function.  */
-+        emit_move_insn (static_chain_rtx, XEXP (DECL_RTL (dummy_decl), 0));
-+        emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+        emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-+        emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-+        emit_indirect_jump (lab);
-+      }
-+ 
-+      return const0_rtx;
-+       }
-+ 
-      default:                 /* just do library call, if unknown builtin */
-        error ("built-in function `%s' not currently supported",
-*************** preexpand_calls (exp)
-*** 8688,8701 ****
-      case CALL_EXPR:
-        /* Do nothing if already expanded.  */
-!       if (CALL_EXPR_RTL (exp) != 0)
-       return;
-  
-!       /* Do nothing to built-in functions.  */
-!       if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
-!        || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL
-!        || ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-!        /* Do nothing if the call returns a variable-sized object.  */
-!        || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST)
-!      CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
-        return;
-  
---- 9064,9078 ----
-      case CALL_EXPR:
-        /* Do nothing if already expanded.  */
-!       if (CALL_EXPR_RTL (exp) != 0
-!        /* Do nothing if the call returns a variable-sized object.  */
-!        || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST
-!        /* Do nothing to built-in functions.  */
-!        || (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
-!            && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-!                == FUNCTION_DECL)
-!            && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))))
-       return;
-  
-!       CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
-        return;
-  
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9087,9090 ****
---- 9464,9468 ----
-        push_temp_slots ();
-        expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
-+       preserve_temp_slots (NULL_RTX);
-        free_temp_slots ();
-        pop_temp_slots ();
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9103,9111 ****
-       tree offset;
-       int volatilep = 0;
-  
-       /* Get description of this reference.  We don't actually care
-          about the underlying object here.  */
-       get_inner_reference (exp, &bitsize, &bitpos, &offset,
-!                           &mode, &unsignedp, &volatilep);
-  
-       type = type_for_size (bitsize, unsignedp);
---- 9481,9491 ----
-       tree offset;
-       int volatilep = 0;
-+      int alignment;
-  
-       /* Get description of this reference.  We don't actually care
-          about the underlying object here.  */
-       get_inner_reference (exp, &bitsize, &bitpos, &offset,
-!                           &mode, &unsignedp, &volatilep,
-!                           &alignment);
-  
-       type = type_for_size (bitsize, unsignedp);
-diff -rcp2N gcc-2.7.2.2/final.c g77-new/final.c
-*** gcc-2.7.2.2/final.c        Sun Nov 26 13:50:00 1995
---- g77-new/final.c    Thu Jul 10 20:11:16 1997
-*************** profile_function (file)
-*** 983,991 ****
-    text_section ();
-  
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #ifdef STRUCT_VALUE_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
---- 983,991 ----
-    text_section ();
-  
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
-*************** profile_function (file)
-*** 993,1027 ****
-  #endif
-  
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #ifdef STATIC_CHAIN_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-- #endif                               /* 0 */
-  
-    FUNCTION_PROFILER (file, profile_label_no);
-  
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #ifdef STATIC_CHAIN_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-- #endif                               /* 0 */
-  
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #ifdef STRUCT_VALUE_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
---- 993,1023 ----
-  #endif
-  
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-  
-    FUNCTION_PROFILER (file, profile_label_no);
-  
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-  
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
-diff -rcp2N gcc-2.7.2.2/flags.h g77-new/flags.h
-*** gcc-2.7.2.2/flags.h        Thu Jun 15 07:34:11 1995
---- g77-new/flags.h    Thu Jul 10 20:08:56 1997
-*************** extern int flag_unroll_loops;
-*** 204,207 ****
---- 204,221 ----
-  extern int flag_unroll_all_loops;
-  
-+ /* Nonzero forces all invariant computations in loops to be moved
-+    outside the loop. */
-+ 
-+ extern int flag_move_all_movables;
-+ 
-+ /* Nonzero forces all general induction variables in loops to be
-+    strength reduced. */
-+ 
-+ extern int flag_reduce_all_givs;
-+ 
-+ /* Nonzero gets another run of loop_optimize performed. */
-+ 
-+ extern int flag_rerun_loop_opt;
-+ 
-  /* Nonzero for -fcse-follow-jumps:
-     have cse follow jumps to do a more extensive job.  */
-*************** extern int flag_gnu_linker;
-*** 339,342 ****
---- 353,369 ----
-  /* Tag all structures with __attribute__(packed) */
-  extern int flag_pack_struct;
-+ 
-+ /* 1 if alias checking is enabled: symbols do not alias each other
-+    and parameters do not alias the current stack frame.  */
-+ extern int flag_alias_check;
-+ 
-+ /* This flag is only tested if alias checking is enabled.
-+    0 if pointer arguments may alias each other.  True in C.
-+    1 if pointer arguments may not alias each other but may alias
-+    global variables.
-+    2 if pointer arguments may not alias each other and may not
-+    alias global variables.  True in Fortran.
-+    The value is ignored if flag_alias_check is 0.  */
-+ extern int flag_argument_noalias;
-  \f
-  /* Other basic status info about current function.  */
-diff -rcp2N gcc-2.7.2.2/flow.c g77-new/flow.c
-*** gcc-2.7.2.2/flow.c Mon Aug 28 06:23:34 1995
---- g77-new/flow.c     Sun Aug 10 18:46:11 1997
-*************** static HARD_REG_SET elim_reg_set;
-*** 288,292 ****
-  /* Forward declarations */
-  static void find_basic_blocks                PROTO((rtx, rtx));
-! static int uses_reg_or_mem           PROTO((rtx));
-  static void mark_label_ref           PROTO((rtx, rtx, int));
-  static void life_analysis            PROTO((rtx, int));
---- 288,292 ----
-  /* Forward declarations */
-  static void find_basic_blocks                PROTO((rtx, rtx));
-! static int jmp_uses_reg_or_mem               PROTO((rtx));
-  static void mark_label_ref           PROTO((rtx, rtx, int));
-  static void life_analysis            PROTO((rtx, int));
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 554,563 ****
-                   if (GET_CODE (XVECEXP (pat, 0, i)) == SET
-                       && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-!                      && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
-                     computed_jump = 1;
-             }
-           else if (GET_CODE (pat) == SET
-                    && SET_DEST (pat) == pc_rtx
-!                   && uses_reg_or_mem (SET_SRC (pat)))
-             computed_jump = 1;
-                   
---- 554,563 ----
-                   if (GET_CODE (XVECEXP (pat, 0, i)) == SET
-                       && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-!                      && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
-                     computed_jump = 1;
-             }
-           else if (GET_CODE (pat) == SET
-                    && SET_DEST (pat) == pc_rtx
-!                   && jmp_uses_reg_or_mem (SET_SRC (pat)))
-             computed_jump = 1;
-                   
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 760,767 ****
-  /* Subroutines of find_basic_blocks.  */
-  
-! /* Return 1 if X contain a REG or MEM that is not in the constant pool.  */
-  
-  static int
-! uses_reg_or_mem (x)
-       rtx x;
-  {
---- 760,768 ----
-  /* Subroutines of find_basic_blocks.  */
-  
-! /* Return 1 if X, the SRC_SRC of  SET of (pc) contain a REG or MEM that is
-!    not in the constant pool and not in the condition of an IF_THEN_ELSE.  */
-  
-  static int
-! jmp_uses_reg_or_mem (x)
-       rtx x;
-  {
-*************** uses_reg_or_mem (x)
-*** 770,778 ****
-    char *fmt;
-  
-!   if (code == REG
-!       || (code == MEM
-!        && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-!              && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))))
-!     return 1;
-  
-    fmt = GET_RTX_FORMAT (code);
---- 771,796 ----
-    char *fmt;
-  
-!   switch (code)
-!     {
-!     case CONST:
-!     case LABEL_REF:
-!     case PC:
-!       return 0;
-! 
-!     case REG:
-!       return 1;
-! 
-!     case MEM:
-!       return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-!              && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
-! 
-!     case IF_THEN_ELSE:
-!       return (jmp_uses_reg_or_mem (XEXP (x, 1))
-!            || jmp_uses_reg_or_mem (XEXP (x, 2)));
-! 
-!     case PLUS:  case MINUS:  case MULT:
-!       return (jmp_uses_reg_or_mem (XEXP (x, 0))
-!            || jmp_uses_reg_or_mem (XEXP (x, 1)));
-!     }
-  
-    fmt = GET_RTX_FORMAT (code);
-*************** uses_reg_or_mem (x)
-*** 780,789 ****
-      {
-        if (fmt[i] == 'e'
-!        && uses_reg_or_mem (XEXP (x, i)))
-       return 1;
-  
-        if (fmt[i] == 'E')
-       for (j = 0; j < XVECLEN (x, i); j++)
-!        if (uses_reg_or_mem (XVECEXP (x, i, j)))
-           return 1;
-      }
---- 798,807 ----
-      {
-        if (fmt[i] == 'e'
-!        && jmp_uses_reg_or_mem (XEXP (x, i)))
-       return 1;
-  
-        if (fmt[i] == 'E')
-       for (j = 0; j < XVECLEN (x, i); j++)
-!        if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
-           return 1;
-      }
-*************** propagate_block (old, first, last, final
-*** 1605,1614 ****
-  
-                 /* Each call clobbers all call-clobbered regs that are not
-!                   global.  Note that the function-value reg is a
-                    call-clobbered reg, and mark_set_regs has already had
-                    a chance to handle it.  */
-  
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] && ! global_regs[i])
-                     dead[i / REGSET_ELT_BITS]
-                       |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
---- 1623,1633 ----
-  
-                 /* Each call clobbers all call-clobbered regs that are not
-!                   global or fixed.  Note that the function-value reg is a
-                    call-clobbered reg, and mark_set_regs has already had
-                    a chance to handle it.  */
-  
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] && ! global_regs[i]
-!                      && ! fixed_regs[i])
-                     dead[i / REGSET_ELT_BITS]
-                       |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
-diff -rcp2N gcc-2.7.2.2/fold-const.c g77-new/fold-const.c
-*** gcc-2.7.2.2/fold-const.c   Fri Sep 15 18:26:12 1995
---- g77-new/fold-const.c       Sun Aug 10 18:47:18 1997
-*************** static tree unextend   PROTO((tree, int, i
-*** 80,83 ****
---- 80,84 ----
-  static tree fold_truthop PROTO((enum tree_code, tree, tree, tree));
-  static tree strip_compound_expr PROTO((tree, tree));
-+ static int multiple_of_p PROTO((tree, tree, tree));
-  
-  #ifndef BRANCH_COST
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1077,1080 ****
---- 1078,1083 ----
-         if (int2h == 0 && int2l > 0
-             && TREE_TYPE (arg1) == sizetype
-+            && ! TREE_CONSTANT_OVERFLOW (arg1)
-+            && ! TREE_CONSTANT_OVERFLOW (arg2)
-             && int1h == 0 && int1l >= 0)
-           {
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1230,1233 ****
---- 1233,1237 ----
-    if (TREE_CODE (arg1) == COMPLEX_CST)
-      {
-+       register tree type = TREE_TYPE (arg1);
-        register tree r1 = TREE_REALPART (arg1);
-        register tree i1 = TREE_IMAGPART (arg1);
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1239,1253 ****
-       {
-       case PLUS_EXPR:
-!        t = build_complex (const_binop (PLUS_EXPR, r1, r2, notrunc),
-                            const_binop (PLUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MINUS_EXPR:
-!        t = build_complex (const_binop (MINUS_EXPR, r1, r2, notrunc),
-                            const_binop (MINUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MULT_EXPR:
-!        t = build_complex (const_binop (MINUS_EXPR,
-                                         const_binop (MULT_EXPR,
-                                                      r1, r2, notrunc),
---- 1243,1260 ----
-       {
-       case PLUS_EXPR:
-!        t = build_complex (type,
-!                           const_binop (PLUS_EXPR, r1, r2, notrunc),
-                            const_binop (PLUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MINUS_EXPR:
-!        t = build_complex (type,
-!                           const_binop (MINUS_EXPR, r1, r2, notrunc),
-                            const_binop (MINUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MULT_EXPR:
-!        t = build_complex (type,
-!                           const_binop (MINUS_EXPR,
-                                         const_binop (MULT_EXPR,
-                                                      r1, r2, notrunc),
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1271,1293 ****
-                            notrunc);
-  
-!          t = build_complex
-!            (const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                          ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                          const_binop (PLUS_EXPR,
-!                                       const_binop (MULT_EXPR, r1, r2,
-!                                                    notrunc),
-!                                       const_binop (MULT_EXPR, i1, i2,
-!                                                    notrunc),
-!                                       notrunc),
-!                          magsquared, notrunc),
-!             const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                          ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                          const_binop (MINUS_EXPR,
-!                                       const_binop (MULT_EXPR, i1, r2,
-!                                                    notrunc),
-!                                       const_binop (MULT_EXPR, r1, i2,
-!                                                    notrunc),
-!                                       notrunc),
-!                          magsquared, notrunc));
-         }
-         break;
---- 1278,1302 ----
-                            notrunc);
-  
-!          t = build_complex (type,
-!                             const_binop
-!                             (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                              ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                              const_binop (PLUS_EXPR,
-!                                           const_binop (MULT_EXPR, r1, r2,
-!                                                        notrunc),
-!                                           const_binop (MULT_EXPR, i1, i2,
-!                                                        notrunc),
-!                                           notrunc),
-!                              magsquared, notrunc),
-!                             const_binop
-!                             (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                              ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                              const_binop (MINUS_EXPR,
-!                                           const_binop (MULT_EXPR, i1, r2,
-!                                                        notrunc),
-!                                           const_binop (MULT_EXPR, r1, i2,
-!                                                        notrunc),
-!                                           notrunc),
-!                              magsquared, notrunc));
-         }
-         break;
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1296,1300 ****
-         abort ();
-       }
--       TREE_TYPE (t) = TREE_TYPE (arg1);
-        return t;
-      }
---- 1305,1308 ----
-*************** size_binop (code, arg0, arg1)
-*** 1346,1363 ****
-      {
-        /* And some specific cases even faster than that.  */
-!       if (code == PLUS_EXPR
-!        && TREE_INT_CST_LOW (arg0) == 0
-!        && TREE_INT_CST_HIGH (arg0) == 0)
-       return arg1;
-!       if (code == MINUS_EXPR
-!        && TREE_INT_CST_LOW (arg1) == 0
-!        && TREE_INT_CST_HIGH (arg1) == 0)
-       return arg0;
-!       if (code == MULT_EXPR
-!        && TREE_INT_CST_LOW (arg0) == 1
-!        && TREE_INT_CST_HIGH (arg0) == 0)
-       return arg1;
-        /* Handle general case of two integer constants.  */
-!       return const_binop (code, arg0, arg1, 0);
-      }
-  
---- 1354,1367 ----
-      {
-        /* And some specific cases even faster than that.  */
-!       if (code == PLUS_EXPR && integer_zerop (arg0))
-       return arg1;
-!       else if ((code == MINUS_EXPR || code == PLUS_EXPR)
-!             && integer_zerop (arg1))
-       return arg0;
-!       else if (code == MULT_EXPR && integer_onep (arg0))
-       return arg1;
-+ 
-        /* Handle general case of two integer constants.  */
-!       return const_binop (code, arg0, arg1, 1);
-      }
-  
-*************** fold_convert (t, arg1)
-*** 1482,1486 ****
-       {
-         if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-!          return arg1;
-         else if (setjmp (float_error))
-           {
---- 1486,1494 ----
-       {
-         if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-!          {
-!            t = arg1;
-!            TREE_TYPE (arg1) = type;
-!            return t;
-!          }
-         else if (setjmp (float_error))
-           {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1644,1687 ****
-    STRIP_NOPS (arg1);
-  
-!   /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-!      We don't care about side effects in that case because the SAVE_EXPR
-!      takes care of that for us.  */
-!   if (TREE_CODE (arg0) == SAVE_EXPR && arg0 == arg1)
-!     return ! only_const;
-! 
-!   if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1))
-      return 0;
-  
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == ADDR_EXPR
-!       && TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0))
-!     return 1;
-! 
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == INTEGER_CST
-!       && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-!       && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1))
-      return 1;
-  
-!   /* Detect when real constants are equal.  */
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == REAL_CST)
-!     return !bcmp ((char *) &TREE_REAL_CST (arg0),
-!                (char *) &TREE_REAL_CST (arg1),
-!                sizeof (REAL_VALUE_TYPE));
-  
-    if (only_const)
-      return 0;
-  
--   if (arg0 == arg1)
--     return 1;
-- 
--   if (TREE_CODE (arg0) != TREE_CODE (arg1))
--     return 0;
--   /* This is needed for conversions and for COMPONENT_REF.
--      Might as well play it safe and always test this.  */
--   if (TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
--     return 0;
-- 
-    switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
-      {
---- 1652,1705 ----
-    STRIP_NOPS (arg1);
-  
-!   if (TREE_CODE (arg0) != TREE_CODE (arg1)
-!       /* This is needed for conversions and for COMPONENT_REF.
-!       Might as well play it safe and always test this.  */
-!       || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
-      return 0;
-  
-!   /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-!      We don't care about side effects in that case because the SAVE_EXPR
-!      takes care of that for us. In all other cases, two expressions are
-!      equal if they have no side effects.  If we have two identical
-!      expressions with side effects that should be treated the same due
-!      to the only side effects being identical SAVE_EXPR's, that will
-!      be detected in the recursive calls below.  */
-!   if (arg0 == arg1 && ! only_const
-!       && (TREE_CODE (arg0) == SAVE_EXPR
-!        || (! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg1))))
-      return 1;
-  
-!   /* Next handle constant cases, those for which we can return 1 even
-!      if ONLY_CONST is set.  */
-!   if (TREE_CONSTANT (arg0) && TREE_CONSTANT (arg1))
-!     switch (TREE_CODE (arg0))
-!       {
-!       case INTEGER_CST:
-!      return (TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-!              && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1));
-! 
-!       case REAL_CST:
-!      return REAL_VALUES_EQUAL (TREE_REAL_CST (arg0), TREE_REAL_CST (arg1));
-! 
-!       case COMPLEX_CST:
-!      return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),
-!                               only_const)
-!              && operand_equal_p (TREE_IMAGPART (arg0), TREE_IMAGPART (arg1),
-!                                  only_const));
-! 
-!       case STRING_CST:
-!      return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1)
-!              && ! strncmp (TREE_STRING_POINTER (arg0),
-!                            TREE_STRING_POINTER (arg1),
-!                            TREE_STRING_LENGTH (arg0)));
-! 
-!       case ADDR_EXPR:
-!      return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0),
-!                              0);
-!       }
-  
-    if (only_const)
-      return 0;
-  
-    switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
-      {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1698,1705 ****
-      case '<':
-      case '2':
-!       return (operand_equal_p (TREE_OPERAND (arg0, 0),
-!                             TREE_OPERAND (arg1, 0), 0)
-             && operand_equal_p (TREE_OPERAND (arg0, 1),
-!                                TREE_OPERAND (arg1, 1), 0));
-  
-      case 'r':
---- 1716,1735 ----
-      case '<':
-      case '2':
-!       if (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0)
-!        && operand_equal_p (TREE_OPERAND (arg0, 1), TREE_OPERAND (arg1, 1),
-!                            0))
-!      return 1;
-! 
-!       /* For commutative ops, allow the other order.  */
-!       return ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MULT_EXPR
-!             || TREE_CODE (arg0) == MIN_EXPR || TREE_CODE (arg0) == MAX_EXPR
-!             || TREE_CODE (arg0) == BIT_IOR_EXPR
-!             || TREE_CODE (arg0) == BIT_XOR_EXPR
-!             || TREE_CODE (arg0) == BIT_AND_EXPR
-!             || TREE_CODE (arg0) == NE_EXPR || TREE_CODE (arg0) == EQ_EXPR)
-!            && operand_equal_p (TREE_OPERAND (arg0, 0),
-!                                TREE_OPERAND (arg1, 1), 0)
-             && operand_equal_p (TREE_OPERAND (arg0, 1),
-!                                TREE_OPERAND (arg1, 0), 0));
-  
-      case 'r':
-*************** optimize_bit_field_compare (code, compar
-*** 2212,2215 ****
---- 2242,2246 ----
-    int lunsignedp, runsignedp;
-    int lvolatilep = 0, rvolatilep = 0;
-+   int alignment;
-    tree linner, rinner;
-    tree mask;
-*************** optimize_bit_field_compare (code, compar
-*** 2220,2224 ****
-       extraction at all and so can do nothing.  */
-    linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-!                              &lunsignedp, &lvolatilep);
-    if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
-        || offset != 0)
---- 2251,2255 ----
-       extraction at all and so can do nothing.  */
-    linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-!                              &lunsignedp, &lvolatilep, &alignment);
-    if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
-        || offset != 0)
-*************** optimize_bit_field_compare (code, compar
-*** 2229,2234 ****
-       /* If this is not a constant, we can only do something if bit positions,
-       sizes, and signedness are the same.   */
-!      rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
-!                                 &rmode, &runsignedp, &rvolatilep);
-  
-       if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
---- 2260,2265 ----
-       /* If this is not a constant, we can only do something if bit positions,
-       sizes, and signedness are the same.   */
-!      rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
-!                                 &runsignedp, &rvolatilep, &alignment);
-  
-       if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
-*************** decode_field_reference (exp, pbitsize, p
-*** 2403,2406 ****
---- 2434,2438 ----
-    tree unsigned_type;
-    int precision;
-+   int alignment;
-  
-    /* All the optimizations using this function assume integer fields.  
-*************** decode_field_reference (exp, pbitsize, p
-*** 2423,2427 ****
-  
-    inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-!                             punsignedp, pvolatilep);
-    if ((inner == exp && and_mask == 0)
-        || *pbitsize < 0 || offset != 0)
---- 2455,2459 ----
-  
-    inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-!                             punsignedp, pvolatilep, &alignment);
-    if ((inner == exp && and_mask == 0)
-        || *pbitsize < 0 || offset != 0)
-*************** strip_compound_expr (t, s)
-*** 3065,3068 ****
---- 3097,3200 ----
-  }
-  \f
-+ /* Determine if first argument is a multiple of second argument.
-+    Return 0 if it is not, or is not easily determined to so be.
-+ 
-+    An example of the sort of thing we care about (at this point --
-+    this routine could surely be made more general, and expanded
-+    to do what the *_DIV_EXPR's fold() cases do now) is discovering
-+    that
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+ 
-+    is a multiple of
-+ 
-+      SAVE_EXPR (J * 8)
-+ 
-+    when we know that the two `SAVE_EXPR (J * 8)' nodes are the
-+    same node (which means they will have the same value at run
-+    time, even though we don't know when they'll be assigned).
-+ 
-+    This code also handles discovering that
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+ 
-+    is a multiple of
-+ 
-+      8
-+ 
-+    (of course) so we don't have to worry about dealing with a
-+    possible remainder.
-+ 
-+    Note that we _look_ inside a SAVE_EXPR only to determine
-+    how it was calculated; it is not safe for fold() to do much
-+    of anything else with the internals of a SAVE_EXPR, since
-+    fold() cannot know when it will be evaluated at run time.
-+    For example, the latter example above _cannot_ be implemented
-+    as
-+ 
-+      SAVE_EXPR (I) * J
-+ 
-+    or any variant thereof, since the value of J at evaluation time
-+    of the original SAVE_EXPR is not necessarily the same at the time
-+    the new expression is evaluated.  The only optimization of this
-+    sort that would be valid is changing
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (SAVE_EXPR (J) * 8)
-+    divided by
-+      8
-+ 
-+    to
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J)
-+ 
-+    (where the same SAVE_EXPR (J) is used in the original and the
-+    transformed version).  */
-+ 
-+ static int
-+ multiple_of_p (type, top, bottom)
-+      tree type;
-+      tree top;
-+      tree bottom;
-+ {
-+   if (operand_equal_p (top, bottom, 0))
-+     return 1;
-+ 
-+   if (TREE_CODE (type) != INTEGER_TYPE)
-+     return 0;
-+ 
-+   switch (TREE_CODE (top))
-+     {
-+     case MULT_EXPR:
-+       return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+            || multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+ 
-+     case PLUS_EXPR:
-+     case MINUS_EXPR:
-+       return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+            && multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+ 
-+     case NOP_EXPR:
-+       /* Punt if conversion from non-integral or wider integral type.  */
-+       if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE)
-+        || (TYPE_PRECISION (type)
-+            < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0)))))
-+      return 0;
-+       /* Fall through. */
-+     case SAVE_EXPR:
-+       return multiple_of_p (type, TREE_OPERAND (top, 0), bottom);
-+ 
-+     case INTEGER_CST:
-+       if ((TREE_CODE (bottom) != INTEGER_CST)
-+        || (tree_int_cst_sgn (top) < 0)
-+        || (tree_int_cst_sgn (bottom) < 0))
-+      return 0;
-+       return integer_zerop (const_binop (TRUNC_MOD_EXPR,
-+                                       top, bottom, 0));
-+ 
-+     default:
-+       return 0;
-+     }
-+ }
-+ \f
-  /* Perform constant folding and related simplification of EXPR.
-     The related simplifications include x*1 => x, x*0 => 0, etc.,
-*************** fold (expr) 
-*** 3611,3615 ****
-                                   TREE_OPERAND (arg0, 1))));
-        else if (TREE_CODE (arg0) == COMPLEX_CST)
-!      return build_complex (TREE_OPERAND (arg0, 0),
-                             fold (build1 (NEGATE_EXPR,
-                                           TREE_TYPE (TREE_TYPE (arg0)),
---- 3743,3747 ----
-                                   TREE_OPERAND (arg0, 1))));
-        else if (TREE_CODE (arg0) == COMPLEX_CST)
-!      return build_complex (type, TREE_OPERAND (arg0, 0),
-                             fold (build1 (NEGATE_EXPR,
-                                           TREE_TYPE (TREE_TYPE (arg0)),
-*************** fold (expr) 
-*** 4014,4018 ****
-       return non_lvalue (convert (type, arg0));
-        if (integer_zerop (arg1))
-!      return t;
-  
-        /* If we have ((a / C1) / C2) where both division are the same type, try
---- 4146,4166 ----
-       return non_lvalue (convert (type, arg0));
-        if (integer_zerop (arg1))
-!      {
-!        if (extra_warnings)
-!          warning ("integer division by zero");
-!        return t;
-!      }
-! 
-!       /* If arg0 is a multiple of arg1, then rewrite to the fastest div
-!       operation, EXACT_DIV_EXPR.  Otherwise, handle folding of
-!       general divide.  Note that only CEIL_DIV_EXPR is rewritten now,
-!       only because the others seem to be faster in some cases, e.g. the
-!       nonoptimized TRUNC_DIV_EXPR or FLOOR_DIV_EXPR on DEC Alpha.  This
-!       is probably just due to more work being done on it in expmed.c than
-!       on EXACT_DIV_EXPR, and could presumably be fixed, since
-!       EXACT_DIV_EXPR should _never_ be slower than *_DIV_EXPR.  */
-!       if ((code == CEIL_DIV_EXPR)
-!        && multiple_of_p (type, arg0, arg1))
-!      return fold (build (EXACT_DIV_EXPR, type, arg0, arg1));
-  
-        /* If we have ((a / C1) / C2) where both division are the same type, try
-*************** fold (expr) 
-*** 4049,4053 ****
-         tree xarg0 = arg0;
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
---- 4197,4201 ----
-         tree xarg0 = arg0;
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
-*************** fold (expr) 
-*** 4067,4071 ****
-           }
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
---- 4215,4219 ----
-           }
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
-*************** fold (expr) 
-*** 5050,5054 ****
-      case COMPLEX_EXPR:
-        if (wins)
-!      return build_complex (arg0, arg1);
-        return t;
-  
---- 5198,5202 ----
-      case COMPLEX_EXPR:
-        if (wins)
-!      return build_complex (type, arg0, arg1);
-        return t;
-  
-diff -rcp2N gcc-2.7.2.2/function.c g77-new/function.c
-*** gcc-2.7.2.2/function.c     Sun Nov 26 14:50:26 1995
---- g77-new/function.c Sun Aug 10 18:47:24 1997
-*************** free_temps_for_rtl_expr (t)
-*** 1184,1187 ****
---- 1184,1202 ----
-  }
-  
-+ /* Mark all temporaries ever allocated in this functon as not suitable
-+    for reuse until the current level is exited.  */
-+ 
-+ void
-+ mark_all_temps_used ()
-+ {
-+   struct temp_slot *p;
-+ 
-+   for (p = temp_slots; p; p = p->next)
-+     {
-+       p->in_use = 1;
-+       p->level = MIN (p->level, temp_slot_level);
-+     }
-+ }
-+ 
-  /* Push deeper into the nesting level for stack temporaries.  */
-  
-*************** pop_temp_slots ()
-*** 1208,1211 ****
---- 1223,1237 ----
-    temp_slot_level--;
-  }
-+ 
-+ /* Initialize temporary slots.  */
-+ 
-+ void
-+ init_temp_slots ()
-+ {
-+   /* We have not allocated any temporaries yet.  */
-+   temp_slots = 0;
-+   temp_slot_level = 0;
-+   target_temp_slot_level = 0;
-+ }
-  \f
-  /* Retroactively move an auto variable from a register to a stack slot.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2838,2842 ****
-      case MEM:
-        /* Most cases of MEM that convert to valid addresses have already been
-!       handled by our scan of regno_reg_rtx.  The only special handling we
-        need here is to make a copy of the rtx to ensure it isn't being
-        shared if we have to change it to a pseudo. 
---- 2864,2868 ----
-      case MEM:
-        /* Most cases of MEM that convert to valid addresses have already been
-!       handled by our scan of decls.  The only special handling we
-        need here is to make a copy of the rtx to ensure it isn't being
-        shared if we have to change it to a pseudo. 
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2896,2900 ****
-            has less restrictions on an address that some other insn.
-            In that case, we will modify the shared address.  This case
-!           doesn't seem very likely, though.  */
-  
-         if (instantiate_virtual_regs_1 (&XEXP (x, 0),
---- 2922,2928 ----
-            has less restrictions on an address that some other insn.
-            In that case, we will modify the shared address.  This case
-!           doesn't seem very likely, though.  One case where this could
-!           happen is in the case of a USE or CLOBBER reference, but we
-!           take care of that below.  */
-  
-         if (instantiate_virtual_regs_1 (&XEXP (x, 0),
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2909,2914 ****
-  
-        /* Fall through to generic unary operation case.  */
--     case USE:
--     case CLOBBER:
-      case SUBREG:
-      case STRICT_LOW_PART:
---- 2937,2940 ----
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2927,2930 ****
---- 2953,2973 ----
-        goto restart;
-  
-+     case USE:
-+     case CLOBBER:
-+       /* If the operand is a MEM, see if the change is a valid MEM.  If not,
-+       go ahead and make the invalid one, but do it to a copy.  For a REG,
-+       just make the recursive call, since there's no chance of a problem. */
-+ 
-+       if ((GET_CODE (XEXP (x, 0)) == MEM
-+         && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0),
-+                                        0))
-+        || (GET_CODE (XEXP (x, 0)) == REG
-+            && instantiate_virtual_regs_1 (&XEXP (x, 0), 0, 0)))
-+      return 1;
-+ 
-+       XEXP (x, 0) = copy_rtx (XEXP (x, 0));
-+       loc = &XEXP (x, 0);
-+       goto restart;
-+ 
-      case REG:
-        /* Try to replace with a PLUS.  If that doesn't work, compute the sum
-*************** assign_parms (fndecl, second_time)
-*** 3404,3409 ****
-  
-         /* If this is a memory ref that contains aggregate components,
-!           mark it as such for cse and loop optimize.  */
-         MEM_IN_STRUCT_P (stack_parm) = aggregate;
-       }
-  
---- 3447,3454 ----
-  
-         /* If this is a memory ref that contains aggregate components,
-!           mark it as such for cse and loop optimize.  Likewise if it
-!           is readonly.  */
-         MEM_IN_STRUCT_P (stack_parm) = aggregate;
-+        RTX_UNCHANGING_P (stack_parm) = TREE_READONLY (parm);
-       }
-  
-*************** assign_parms (fndecl, second_time)
-*** 3627,3631 ****
-  
-         parmreg = gen_reg_rtx (promoted_nominal_mode);
-!        REG_USERVAR_P (parmreg) = 1;
-  
-         /* If this was an item that we received a pointer to, set DECL_RTL
---- 3672,3676 ----
-  
-         parmreg = gen_reg_rtx (promoted_nominal_mode);
-!        mark_user_reg (parmreg);
-  
-         /* If this was an item that we received a pointer to, set DECL_RTL
-*************** assign_parms (fndecl, second_time)
-*** 3695,3699 ****
-                Pmode above.  We must use the actual mode of the parm.  */
-             parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-!            REG_USERVAR_P (parmreg) = 1;
-             emit_move_insn (parmreg, DECL_RTL (parm));
-             DECL_RTL (parm) = parmreg;
---- 3740,3744 ----
-                Pmode above.  We must use the actual mode of the parm.  */
-             parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-!            mark_user_reg (parmreg);
-             emit_move_insn (parmreg, DECL_RTL (parm));
-             DECL_RTL (parm) = parmreg;
-*************** init_function_start (subr, filename, lin
-*** 4814,4821 ****
-    rtl_expr_chain = 0;
-  
-!   /* We have not allocated any temporaries yet.  */
-!   temp_slots = 0;
-!   temp_slot_level = 0;
-!   target_temp_slot_level = 0;
-  
-    /* Within function body, compute a type's size as soon it is laid out.  */
---- 4859,4864 ----
-    rtl_expr_chain = 0;
-  
-!   /* Set up to allocate temporaries.  */
-!   init_temp_slots ();
-  
-    /* Within function body, compute a type's size as soon it is laid out.  */
-diff -rcp2N gcc-2.7.2.2/gcc.c g77-new/gcc.c
-*** gcc-2.7.2.2/gcc.c  Tue Sep 12 17:15:11 1995
---- g77-new/gcc.c      Sun Aug 10 18:47:14 1997
-*************** static int is_directory                PROTO((char *, 
-*** 296,300 ****
-  static void validate_switches        PROTO((char *));
-  static void validate_all_switches PROTO((void));
-! static void give_switch              PROTO((int, int));
-  static int used_arg          PROTO((char *, int));
-  static int default_arg               PROTO((char *, int));
---- 296,300 ----
-  static void validate_switches        PROTO((char *));
-  static void validate_all_switches PROTO((void));
-! static void give_switch              PROTO((int, int, int));
-  static int used_arg          PROTO((char *, int));
-  static int default_arg               PROTO((char *, int));
-*************** or with constant text in a single argume
-*** 405,408 ****
---- 405,409 ----
-       name starts with `o'.  %{o*} would substitute this text,
-       including the space; thus, two arguments would be generated.
-+  %{^S*} likewise, but don't put a blank between a switch and any args.
-   %{S*:X} substitutes X if one or more switches whose names start with -S are
-       specified to CC.  Note that the tail part of the -S option
-*************** process_command (argc, argv)
-*** 2828,2831 ****
---- 2829,2835 ----
-         infiles[n_infiles++].name = argv[i];
-       }
-+       /* -save-temps overrides -pipe, so that temp files are produced */
-+       else if (save_temps_flag && strcmp (argv[i], "-pipe") == 0)
-+      ;
-        else if (argv[i][0] == '-' && argv[i][1] != 0)
-       {
-*************** handle_braces (p)
-*** 3832,3835 ****
---- 3836,3844 ----
-    int negate = 0;
-    int suffix = 0;
-+   int include_blanks = 1;
-+ 
-+   if (*p == '^')
-+     /* A '^' after the open-brace means to not give blanks before args.  */
-+     include_blanks = 0, ++p;
-  
-    if (*p == '|')
-*************** handle_braces (p)
-*** 3897,3901 ****
-       if (!strncmp (switches[i].part1, filter, p - filter)
-           && check_live_switch (i, p - filter))
-!        give_switch (i, 0);
-      }
-    else
---- 3906,3910 ----
-       if (!strncmp (switches[i].part1, filter, p - filter)
-           && check_live_switch (i, p - filter))
-!        give_switch (i, 0, include_blanks);
-      }
-    else
-*************** handle_braces (p)
-*** 3936,3940 ****
-                   do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
-                   /* Pass any arguments this switch has.  */
-!                  give_switch (i, 1);
-                 }
-  
---- 3945,3949 ----
-                   do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
-                   /* Pass any arguments this switch has.  */
-!                  give_switch (i, 1, 1);
-                 }
-  
-*************** handle_braces (p)
-*** 3980,3984 ****
-         if (*p == '}')
-           {
-!            give_switch (i, 0);
-           }
-         else
---- 3989,3993 ----
-         if (*p == '}')
-           {
-!            give_switch (i, 0, include_blanks);
-           }
-         else
-*************** check_live_switch (switchnum, prefix_len
-*** 4081,4090 ****
-     This cannot fail since it never finishes a command line.
-  
-!    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.  */
-  
-  static void
-! give_switch (switchnum, omit_first_word)
-       int switchnum;
-       int omit_first_word;
-  {
-    if (!omit_first_word)
---- 4090,4103 ----
-     This cannot fail since it never finishes a command line.
-  
-!    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.
-! 
-!    If INCLUDE_BLANKS is nonzero, then we include blanks before each argument
-!    of the switch.  */
-  
-  static void
-! give_switch (switchnum, omit_first_word, include_blanks)
-       int switchnum;
-       int omit_first_word;
-+      int include_blanks;
-  {
-    if (!omit_first_word)
-*************** give_switch (switchnum, omit_first_word)
-*** 4093,4097 ****
-        do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
-      }
-!   do_spec_1 (" ", 0, NULL_PTR);
-    if (switches[switchnum].args != 0)
-      {
---- 4106,4110 ----
-        do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
-      }
-! 
-    if (switches[switchnum].args != 0)
-      {
-*************** give_switch (switchnum, omit_first_word)
-*** 4099,4106 ****
-        for (p = switches[switchnum].args; *p; p++)
-       {
-         do_spec_1 (*p, 1, NULL_PTR);
--        do_spec_1 (" ", 0, NULL_PTR);
-       }
-      }
-    switches[switchnum].valid = 1;
-  }
---- 4112,4122 ----
-        for (p = switches[switchnum].args; *p; p++)
-       {
-+        if (include_blanks)
-+          do_spec_1 (" ", 0, NULL_PTR);
-         do_spec_1 (*p, 1, NULL_PTR);
-       }
-      }
-+ 
-+   do_spec_1 (" ", 0, NULL_PTR);
-    switches[switchnum].valid = 1;
-  }
-diff -rcp2N gcc-2.7.2.2/gcc.texi g77-new/gcc.texi
-*** gcc-2.7.2.2/gcc.texi       Thu Feb 20 19:24:19 1997
---- g77-new/gcc.texi   Thu Jul 10 20:08:58 1997
-*************** original English.
-*** 149,152 ****
---- 149,153 ----
-  @sp 3
-  @center Last updated 29 June 1996
-+ @center (Revised for GNU Fortran 1997-01-10)
-  @sp 1
-  @c The version number appears twice more in this file.  
-diff -rcp2N gcc-2.7.2.2/glimits.h g77-new/glimits.h
-*** gcc-2.7.2.2/glimits.h      Wed Sep 29 17:30:54 1993
---- g77-new/glimits.h  Thu Jul 10 20:08:58 1997
-***************
-*** 64,68 ****
-     (Same as `int').  */
-  #ifndef __LONG_MAX__
-! #define __LONG_MAX__ 2147483647L
-  #endif
-  #undef LONG_MIN
---- 64,72 ----
-     (Same as `int').  */
-  #ifndef __LONG_MAX__
-! # ifndef __alpha__
-! #  define __LONG_MAX__ 2147483647L
-! # else
-! #  define __LONG_MAX__ 9223372036854775807LL
-! # endif /* __alpha__ */
-  #endif
-  #undef LONG_MIN
-diff -rcp2N gcc-2.7.2.2/integrate.c g77-new/integrate.c
-*** gcc-2.7.2.2/integrate.c    Fri Oct 20 18:48:13 1995
---- g77-new/integrate.c        Sun Aug 10 18:46:31 1997
-*************** static rtx copy_for_inline     PROTO((rtx));
-*** 67,70 ****
---- 67,71 ----
-  static void integrate_parm_decls PROTO((tree, struct inline_remap *, rtvec));
-  static void integrate_decl_tree      PROTO((tree, int, struct inline_remap *));
-+ static void save_constants_in_decl_trees PROTO ((tree));
-  static void subst_constants  PROTO((rtx *, rtx, struct inline_remap *));
-  static void restore_constants        PROTO((rtx *));
-*************** save_for_inline_copying (fndecl)
-*** 435,438 ****
---- 436,443 ----
-         }
-  
-+       /* Also scan all decls, and replace any constant pool references with the
-+       actual constant.  */
-+       save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+ 
-        /* Clear out the constant pool so that we can recreate it with the
-        copied constants below.  */
-*************** save_for_inline_nocopy (fndecl)
-*** 781,784 ****
---- 786,793 ----
-      }
-  
-+   /* Also scan all decls, and replace any constant pool references with the
-+      actual constant.  */
-+   save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+ 
-    /* We have now allocated all that needs to be allocated permanently
-       on the rtx obstack.  Set our high-water mark, so that we
-*************** expand_inline_function (fndecl, parms, t
-*** 1571,1575 ****
-        if (GET_CODE (XEXP (loc, 0)) == REG)
-       {
-!        temp = force_reg (Pmode, structure_value_addr);
-         map->reg_map[REGNO (XEXP (loc, 0))] = temp;
-         if ((CONSTANT_P (structure_value_addr)
---- 1580,1585 ----
-        if (GET_CODE (XEXP (loc, 0)) == REG)
-       {
-!        temp = force_reg (Pmode,
-!                          force_operand (structure_value_addr, NULL_RTX));
-         map->reg_map[REGNO (XEXP (loc, 0))] = temp;
-         if ((CONSTANT_P (structure_value_addr)
-*************** integrate_decl_tree (let, level, map)
-*** 2029,2032 ****
---- 2039,2059 ----
-       }
-      }
-+ }
-+ 
-+ /* Given a BLOCK node LET, search for all DECL_RTL fields, and pass them
-+    through save_constants.  */
-+ 
-+ static void
-+ save_constants_in_decl_trees (let)
-+      tree let;
-+ {
-+   tree t;
-+ 
-+   for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
-+     if (DECL_RTL (t) != 0)
-+       save_constants (&DECL_RTL (t));
-+ 
-+   for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t))
-+     save_constants_in_decl_trees (t);
-  }
-  \f
-diff -rcp2N gcc-2.7.2.2/invoke.texi g77-new/invoke.texi
-*** gcc-2.7.2.2/invoke.texi    Tue Oct  3 11:40:43 1995
---- g77-new/invoke.texi        Thu Jul 10 20:09:00 1997
-***************
-*** 1,3 ****
-! @c Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-  @c This is part of the GCC manual.
-  @c For copying conditions, see the file gcc.texi.
---- 1,3 ----
-! @c Copyright (C) 1988, 89, 92-95, 1997 Free Software Foundation, Inc.
-  @c This is part of the GCC manual.
-  @c For copying conditions, see the file gcc.texi.
-*************** in the following sections.
-*** 149,152 ****
---- 149,153 ----
-  -fschedule-insns2  -fstrength-reduce  -fthread-jumps 
-  -funroll-all-loops  -funroll-loops
-+ -fmove-all-movables  -freduce-all-givs  -frerun-loop-opt
-  -O  -O0  -O1  -O2  -O3
-  @end smallexample
-*************** in addition to the above:
-*** 331,334 ****
---- 332,337 ----
-  -fshort-double  -fvolatile  -fvolatile-global
-  -fverbose-asm -fpack-struct +e0  +e1
-+ -fargument-alias  -fargument-noalias
-+ -fargument-noalias-global
-  @end smallexample
-  @end table
-*************** Print extra warning messages for these e
-*** 1253,1256 ****
---- 1256,1304 ----
-  
-  @itemize @bullet
-+ @cindex division by zero
-+ @cindex zero, division by
-+ @item
-+ An integer division by zero is detected.
-+ 
-+ Some cases of division by zero might occur as the result
-+ of using so-called ``safe'' macros.
-+ For example:
-+ 
-+ @smallexample
-+ #define BUCKETS(b) (((b) != NULL) ? (b)->buckets : 0)
-+ @dots{...}
-+   i = j / BUCKETS(b);
-+ @end smallexample
-+ 
-+ Although analysis of the context of the above code could
-+ prove that @samp{b} is never null when it is executed,
-+ the division-by-zero warning is still useful, because
-+ @code{gcc} generates code to do the division by zero at
-+ run time so as to generate a run-time fault,
-+ and tidy programmers will want to find ways to prevent
-+ this needless code from being generated.
-+ 
-+ Note that @code{gcc} transforms expressions so as to find
-+ opportunities for performing expensive operations
-+ (such as division) at compile time instead of generating
-+ code to perform them at run time.
-+ For example, @code{gcc} transforms:
-+ 
-+ @smallexample
-+ 2 / (i == 0)
-+ @end smallexample
-+ 
-+ into:
-+ 
-+ @smallexample
-+ (i == 0) ? (2 / 1) : (2 / 0)
-+ @end smallexample
-+ 
-+ As a result, the division-by-zero warning might occur
-+ in contexts where the divisor seems to be a non-constant.
-+ It is useful in this case as well, because programmers might want
-+ to clean up the code so the compiled code does not include
-+ dead code to divide by zero.
-+ 
-  @cindex @code{longjmp} warnings
-  @item
-*************** and usually makes programs run more slow
-*** 1941,1944 ****
---- 1989,2037 ----
-  implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
-  
-+ @item -fmove-all-movables
-+ Forces all invariant computations in loops to be moved
-+ outside the loop.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-+ Analysis of Fortran code optimization and the resulting
-+ optimizations triggered by this option, and the
-+ @samp{-freduce-all-givs} and @samp{-frerun-loop-opt}
-+ options as well, were
-+ contributed by Toon Moene (@code{toon@@moene.indiv.nluug.nl}).
-+ 
-+ These three options are intended to be removed someday, once
-+ they have helped determine the efficacy of various
-+ approaches to improving the performance of Fortran code.
-+ 
-+ Please let us (@code{fortran@@gnu.ai.mit.edu})
-+ know how use of these options affects
-+ the performance of your production code.
-+ We're very interested in code that runs @emph{slower}
-+ when these options are @emph{enabled}.
-+ 
-+ @item -freduce-all-givs
-+ Forces all general-induction variables in loops to be
-+ strength-reduced.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-+ @item -frerun-loop-opt
-+ Runs loop optimizations a second time.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-  @item -fno-peephole
-  Disable any machine-specific peephole optimizations.
-*************** compilation).
-*** 4229,4232 ****
---- 4322,4397 ----
-  With @samp{+e1}, G++ actually generates the code implementing virtual
-  functions defined in the code, and makes them publicly visible.
-+ 
-+ @cindex aliasing of parameters
-+ @cindex parameters, aliased
-+ @item -fargument-alias
-+ @item -fargument-noalias
-+ @item -fargument-noalias-global
-+ Specify the possible relationships among parameters and between
-+ parameters and global data.
-+ 
-+ @samp{-fargument-alias} specifies that arguments (parameters) may
-+ alias each other and may alias global storage.
-+ @samp{-fargument-noalias} specifies that arguments do not alias
-+ each other, but may alias global storage.
-+ @samp{-fargument-noalias-global} specifies that arguments do not
-+ alias each other and do not alias global storage.
-+ 
-+ For code written in C, C++, and Objective-C, @samp{-fargument-alias}
-+ is the default.
-+ For code written in Fortran, @samp{-fargument-noalias-global} is
-+ the default, though this is pertinent only on systems where
-+ @code{g77} is installed.
-+ (See the documentation for other compilers for information on the
-+ defaults for their respective languages.)
-+ 
-+ Normally, @code{gcc} assumes that a write through a pointer
-+ passed as a parameter to the current function might modify a
-+ value pointed to by another pointer passed as a parameter, or
-+ in global storage.
-+ 
-+ For example, consider this code:
-+ 
-+ @example
-+ void x(int *i, int *j)
-+ @{
-+   extern int k;
-+ 
-+   ++*i;
-+   ++*j;
-+   ++k;
-+ @}
-+ @end example
-+ 
-+ When compiling the above function, @code{gcc} assumes that @samp{i} might
-+ be a pointer to the same variable as @samp{j}, and that either @samp{i},
-+ @samp{j}, or both might be a pointer to @samp{k}.
-+ 
-+ Therefore, @code{gcc} does not assume it can generate code to read
-+ @samp{*i}, @samp{*j}, and @samp{k} into separate registers, increment
-+ each register, then write the incremented values back out.
-+ 
-+ Instead, @code{gcc} must generate code that reads @samp{*i},
-+ increments it, and writes it back before reading @samp{*j},
-+ in case @samp{i} and @samp{j} are aliased, and, similarly,
-+ that writes @samp{*j} before reading @samp{k}.
-+ The result is code that, on many systems, takes longer to execute,
-+ due to the way many processors schedule instruction execution.
-+ 
-+ Compiling the above code with the @samp{-fargument-noalias} option
-+ allows @code{gcc} to assume that @samp{i} and @samp{j} do not alias
-+ each other, but either might alias @samp{k}.
-+ 
-+ Compiling the above code with the @samp{-fargument-noalias-global}
-+ option allows @code{gcc} to assume that no combination of @samp{i},
-+ @samp{j}, and @samp{k} are aliases for each other.
-+ 
-+ @emph{Note:} Use the @samp{-fargument-noalias} and
-+ @samp{-fargument-noalias-global} options with care.
-+ While they can result in faster executables, they can
-+ also result in executables with subtle bugs, bugs that
-+ show up only when compiled for specific target systems,
-+ or bugs that show up only when compiled by specific versions
-+ of @code{g77}.
-  @end table
-  
-diff -rcp2N gcc-2.7.2.2/libgcc2.c g77-new/libgcc2.c
-*** gcc-2.7.2.2/libgcc2.c      Sun Nov 26 14:39:21 1995
---- g77-new/libgcc2.c  Sun Aug 10 18:46:07 1997
-*************** __gcc_bcmp (s1, s2, size)
-*** 1193,1196 ****
---- 1193,1201 ----
-  #endif
-  \f\f
-+ #ifdef L__dummy
-+ void
-+ __dummy () {}
-+ #endif
-+ 
-  #ifdef L_varargs
-  #ifdef __i860__
-diff -rcp2N gcc-2.7.2.2/local-alloc.c g77-new/local-alloc.c
-*** gcc-2.7.2.2/local-alloc.c  Mon Aug 21 13:15:44 1995
---- g77-new/local-alloc.c      Sun Aug 10 18:46:10 1997
-*************** static int this_insn_number;
-*** 243,246 ****
---- 243,250 ----
-  static rtx this_insn;
-  
-+ /* Used to communicate changes made by update_equiv_regs to
-+    memref_referenced_p.  */
-+ static rtx *reg_equiv_replacement;
-+ 
-  static void alloc_qty                PROTO((int, enum machine_mode, int, int));
-  static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int));
-*************** validate_equiv_mem_from_store (dest, set
-*** 545,549 ****
-         && reg_overlap_mentioned_p (dest, equiv_mem))
-        || (GET_CODE (dest) == MEM
-!        && true_dependence (dest, equiv_mem)))
-      equiv_mem_modified = 1;
-  }
---- 549,553 ----
-         && reg_overlap_mentioned_p (dest, equiv_mem))
-        || (GET_CODE (dest) == MEM
-!        && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
-      equiv_mem_modified = 1;
-  }
-*************** memref_referenced_p (memref, x)
-*** 617,621 ****
-    switch (code)
-      {
--     case REG:
-      case CONST_INT:
-      case CONST:
---- 621,624 ----
-*************** memref_referenced_p (memref, x)
-*** 629,634 ****
-        return 0;
-  
-      case MEM:
-!       if (true_dependence (memref, x))
-       return 1;
-        break;
---- 632,642 ----
-        return 0;
-  
-+     case REG:
-+       return (reg_equiv_replacement[REGNO (x)] == 0
-+            || memref_referenced_p (memref,
-+                                    reg_equiv_replacement[REGNO (x)]));
-+ 
-      case MEM:
-!       if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
-       return 1;
-        break;
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 818,827 ****
-             if (sregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                reg_live_length[sregno] -= length;
-!                /* reg_live_length is only an approximation after combine
-!                   if sched is not run, so make sure that we still have
-!                   a reasonable value.  */
-!                if (reg_live_length[sregno] < 2)
-!                  reg_live_length[sregno] = 2;
-                 reg_n_calls_crossed[sregno] -= n_calls;
-               }
---- 826,839 ----
-             if (sregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                if (reg_live_length[sregno] >= 0)
-!                  {
-!                    reg_live_length[sregno] -= length;
-!                    /* reg_live_length is only an approximation after
-!                       combine if sched is not run, so make sure that we
-!                       still have a reasonable value.  */
-!                    if (reg_live_length[sregno] < 2)
-!                      reg_live_length[sregno] = 2;
-!                  }
-! 
-                 reg_n_calls_crossed[sregno] -= n_calls;
-               }
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 829,833 ****
-             if (dregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                reg_live_length[dregno] += d_length;
-                 reg_n_calls_crossed[dregno] += d_n_calls;
-               }
---- 841,847 ----
-             if (dregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                if (reg_live_length[dregno] >= 0)
-!                  reg_live_length[dregno] += d_length;
-! 
-                 reg_n_calls_crossed[dregno] += d_n_calls;
-               }
-*************** update_equiv_regs ()
-*** 948,953 ****
-  {
-    rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
--   rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-    rtx insn;
-  
-    bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
---- 962,968 ----
-  {
-    rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
-    rtx insn;
-+ 
-+   reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-  
-    bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
-diff -rcp2N gcc-2.7.2.2/loop.c g77-new/loop.c
-*** gcc-2.7.2.2/loop.c Thu Feb 20 19:24:20 1997
---- g77-new/loop.c     Sun Aug 10 18:46:43 1997
-*************** int *loop_number_exit_count;
-*** 111,116 ****
-  unsigned HOST_WIDE_INT loop_n_iterations;
-  
-! /* Nonzero if there is a subroutine call in the current loop.
-!    (unknown_address_altered is also nonzero in this case.)  */
-  
-  static int loop_has_call;
---- 111,115 ----
-  unsigned HOST_WIDE_INT loop_n_iterations;
-  
-! /* Nonzero if there is a subroutine call in the current loop.  */
-  
-  static int loop_has_call;
-*************** static char *moved_once;
-*** 160,164 ****
-     here, we just turn on unknown_address_altered.  */
-  
-! #define NUM_STORES 20
-  static rtx loop_store_mems[NUM_STORES];
-  
---- 159,163 ----
-     here, we just turn on unknown_address_altered.  */
-  
-! #define NUM_STORES 30
-  static rtx loop_store_mems[NUM_STORES];
-  
-*************** scan_loop (loop_start, end, nregs)
-*** 669,673 ****
-           {
-             temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-!            if (temp && CONSTANT_P (XEXP (temp, 0)))
-               src = XEXP (temp, 0), move_insn = 1;
-             if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
---- 668,673 ----
-           {
-             temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-!            if (temp && CONSTANT_P (XEXP (temp, 0))
-!                && LEGITIMATE_CONSTANT_P (XEXP (temp, 0)))
-               src = XEXP (temp, 0), move_insn = 1;
-             if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
-*************** move_movables (movables, threshold, insn
-*** 1629,1632 ****
---- 1629,1633 ----
-  
-         if (already_moved[regno]
-+            || flag_move_all_movables
-             || (threshold * savings * m->lifetime) >= insn_count
-             || (m->forces && m->forces->done
-*************** prescan_loop (start, end)
-*** 2199,2203 ****
-        else if (GET_CODE (insn) == CALL_INSN)
-       {
-!        unknown_address_altered = 1;
-         loop_has_call = 1;
-       }
---- 2200,2205 ----
-        else if (GET_CODE (insn) == CALL_INSN)
-       {
-!        if (! CONST_CALL_P (insn))
-!          unknown_address_altered = 1;
-         loop_has_call = 1;
-       }
-*************** invariant_p (x)
-*** 2777,2781 ****
-        /* See if there is any dependence between a store and this load.  */
-        for (i = loop_store_mems_idx - 1; i >= 0; i--)
-!      if (true_dependence (loop_store_mems[i], x))
-         return 0;
-  
---- 2779,2783 ----
-        /* See if there is any dependence between a store and this load.  */
-        for (i = loop_store_mems_idx - 1; i >= 0; i--)
-!      if (true_dependence (loop_store_mems[i], VOIDmode, x, rtx_varies_p))
-         return 0;
-  
-*************** strength_reduce (scan_start, end, loop_t
-*** 3821,3826 ****
-            exit.  */
-  
-!        if (v->lifetime * threshold * benefit < insn_count
-!            && ! bl->reversed)
-           {
-             if (loop_dump_stream)
---- 3823,3828 ----
-            exit.  */
-  
-!        if ( ! flag_reduce_all_givs && v->lifetime * threshold * benefit < insn_count
-!            && ! bl->reversed )
-           {
-             if (loop_dump_stream)
-*************** record_giv (v, insn, src_reg, dest_reg, 
-*** 4375,4378 ****
---- 4377,4382 ----
-    v->final_value = 0;
-    v->same_insn = 0;
-+   v->unrolled = 0;
-+   v->shared = 0;
-  
-    /* The v->always_computable field is used in update_giv_derive, to
-*************** check_final_value (v, loop_start, loop_e
-*** 4652,4657 ****
-             if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
-                 && LABEL_NAME (JUMP_LABEL (p))
-!                && ((INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-!                     && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
-                     || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
-                         && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
---- 4656,4664 ----
-             if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
-                 && LABEL_NAME (JUMP_LABEL (p))
-!                && ((INSN_UID (JUMP_LABEL (p)) >= max_uid_for_loop)
-!                    || (INSN_UID (v->insn) >= max_uid_for_loop)
-!                    || (INSN_UID (last_giv_use) >= max_uid_for_loop)
-!                    || (INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-!                        && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
-                     || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
-                         && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
-*************** emit_iv_add_mult (b, m, a, reg, insert_b
-*** 5560,5563 ****
---- 5567,5572 ----
-  
-    emit_insn_before (seq, insert_before);
-+ 
-+   record_base_value (REGNO (reg), b);
-  }
-  \f
-diff -rcp2N gcc-2.7.2.2/loop.h g77-new/loop.h
-*** gcc-2.7.2.2/loop.h Fri Jul 14 08:23:28 1995
---- g77-new/loop.h     Thu Jul 10 20:09:03 1997
-*************** struct induction
-*** 89,92 ****
---- 89,95 ----
-                                  we won't use it to eliminate a biv, it
-                                  would probably lose. */
-+   unsigned unrolled : 1;     /* 1 if new register has been allocated in
-+                                 unrolled loop.  */
-+   unsigned shared : 1;
-    int lifetime;                      /* Length of life of this giv */
-    int times_used;            /* # times this giv is used. */
-diff -rcp2N gcc-2.7.2.2/real.c g77-new/real.c
-*** gcc-2.7.2.2/real.c Tue Aug 15 17:57:18 1995
---- g77-new/real.c     Thu Jul 10 20:09:04 1997
-*************** make_nan (nan, sign, mode)
-*** 5625,5633 ****
-  }
-  
-! /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-!    This is the inverse of the function `etarsingle' invoked by
-     REAL_VALUE_TO_TARGET_SINGLE.  */
-  
-  REAL_VALUE_TYPE
-  ereal_from_float (f)
-       HOST_WIDE_INT f;
---- 5625,5699 ----
-  }
-  
-! /* This is the inverse of the function `etarsingle' invoked by
-     REAL_VALUE_TO_TARGET_SINGLE.  */
-  
-  REAL_VALUE_TYPE
-+ ereal_unto_float (f)
-+      long f;
-+ {
-+   REAL_VALUE_TYPE r;
-+   unsigned EMUSHORT s[2];
-+   unsigned EMUSHORT e[NE];
-+ 
-+   /* Convert 32 bit integer to array of 16 bit pieces in target machine order.
-+    This is the inverse operation to what the function `endian' does.  */
-+   if (REAL_WORDS_BIG_ENDIAN)
-+     {
-+       s[0] = (unsigned EMUSHORT) (f >> 16);
-+       s[1] = (unsigned EMUSHORT) f;
-+     }
-+   else
-+     {
-+       s[0] = (unsigned EMUSHORT) f;
-+       s[1] = (unsigned EMUSHORT) (f >> 16);
-+     }
-+   /* Convert and promote the target float to E-type. */
-+   e24toe (s, e);
-+   /* Output E-type to REAL_VALUE_TYPE. */
-+   PUT_REAL (e, &r);
-+   return r;
-+ }
-+ 
-+ 
-+ /* This is the inverse of the function `etardouble' invoked by
-+    REAL_VALUE_TO_TARGET_DOUBLE.  */
-+ 
-+ REAL_VALUE_TYPE
-+ ereal_unto_double (d)
-+      long d[];
-+ {
-+   REAL_VALUE_TYPE r;
-+   unsigned EMUSHORT s[4];
-+   unsigned EMUSHORT e[NE];
-+ 
-+   /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces.  */
-+   if (REAL_WORDS_BIG_ENDIAN)
-+     {
-+       s[0] = (unsigned EMUSHORT) (d[0] >> 16);
-+       s[1] = (unsigned EMUSHORT) d[0];
-+       s[2] = (unsigned EMUSHORT) (d[1] >> 16);
-+       s[3] = (unsigned EMUSHORT) d[1];
-+     }
-+   else
-+     {
-+       /* Target float words are little-endian.  */
-+       s[0] = (unsigned EMUSHORT) d[0];
-+       s[1] = (unsigned EMUSHORT) (d[0] >> 16);
-+       s[2] = (unsigned EMUSHORT) d[1];
-+       s[3] = (unsigned EMUSHORT) (d[1] >> 16);
-+     }
-+   /* Convert target double to E-type. */
-+   e53toe (s, e);
-+   /* Output E-type to REAL_VALUE_TYPE. */
-+   PUT_REAL (e, &r);
-+   return r;
-+ }
-+ 
-+ 
-+ /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-+    This is somewhat like ereal_unto_float, but the input types
-+    for these are different.  */
-+ 
-+ REAL_VALUE_TYPE
-  ereal_from_float (f)
-       HOST_WIDE_INT f;
-*************** ereal_from_float (f)
-*** 5658,5663 ****
-  
-  /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-!    This is the inverse of the function `etardouble' invoked by
-!    REAL_VALUE_TO_TARGET_DOUBLE.
-  
-     The DFmode is stored as an array of HOST_WIDE_INT in the target's
---- 5724,5729 ----
-  
-  /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-!    This is somewhat like ereal_unto_double, but the input types
-!    for these are different.
-  
-     The DFmode is stored as an array of HOST_WIDE_INT in the target's
-diff -rcp2N gcc-2.7.2.2/real.h g77-new/real.h
-*** gcc-2.7.2.2/real.h Thu Jun 15 07:57:56 1995
---- g77-new/real.h     Thu Jul 10 20:09:05 1997
-*************** extern void ereal_to_decimal   PROTO((REAL
-*** 152,155 ****
---- 152,157 ----
-  extern int ereal_cmp         PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE));
-  extern int ereal_isneg               PROTO((REAL_VALUE_TYPE));
-+ extern REAL_VALUE_TYPE ereal_unto_float PROTO((long));
-+ extern REAL_VALUE_TYPE ereal_unto_double PROTO((long *));
-  extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT));
-  extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *));
-*************** extern REAL_VALUE_TYPE real_value_trunca
-*** 197,200 ****
---- 199,208 ----
-  /* IN is a REAL_VALUE_TYPE.  OUT is a long. */
-  #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN)))
-+ 
-+ /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */
-+ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d)  (ereal_unto_double (d))
-+ 
-+ /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */
-+ #define REAL_VALUE_UNTO_TARGET_SINGLE(f)  (ereal_unto_float (f))
-  
-  /* d is an array of HOST_WIDE_INT that holds a double precision
-diff -rcp2N gcc-2.7.2.2/recog.c g77-new/recog.c
-*** gcc-2.7.2.2/recog.c        Sat Jul  1 06:52:35 1995
---- g77-new/recog.c    Sun Aug 10 18:46:55 1997
-*************** register_operand (op, mode)
-*** 872,876 ****
-                               REGNO (SUBREG_REG (op)))
-         && (GET_MODE_SIZE (mode)
-!            != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))))
-       return 0;
-  #endif
---- 872,878 ----
-                               REGNO (SUBREG_REG (op)))
-         && (GET_MODE_SIZE (mode)
-!            != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))
-!        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_INT
-!        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_FLOAT)
-       return 0;
-  #endif
-diff -rcp2N gcc-2.7.2.2/reload.c g77-new/reload.c
-*** gcc-2.7.2.2/reload.c       Sat Nov 11 08:23:54 1995
---- g77-new/reload.c   Sun Aug 10 04:58:03 1997
-***************
-*** 1,4 ****
-  /* Search an insn for pseudo regs that must be in hard regs and are not.
-!    Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-  
-  This file is part of GNU CC.
---- 1,4 ----
-  /* Search an insn for pseudo regs that must be in hard regs and are not.
-!    Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
-  
-  This file is part of GNU CC.
-*************** static int push_secondary_reload PROTO((
-*** 292,295 ****
---- 292,296 ----
-                                       enum machine_mode, enum reload_type,
-                                       enum insn_code *));
-+ static enum reg_class find_valid_class PROTO((enum machine_mode, int));
-  static int push_reload               PROTO((rtx, rtx, rtx *, rtx *, enum reg_class,
-                                      enum machine_mode, enum machine_mode,
-*************** static struct decomposition decompose PR
-*** 305,312 ****
-  static int immune_p          PROTO((rtx, rtx, struct decomposition));
-  static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev       PROTO((rtx, int, enum reload_type, int, int));
-  static rtx make_memloc               PROTO((rtx, int));
-  static int find_reloads_address      PROTO((enum machine_mode, rtx *, rtx, rtx *,
-!                                     int, enum reload_type, int));
-  static rtx subst_reg_equivs  PROTO((rtx));
-  static rtx subst_indexed_address PROTO((rtx));
---- 306,313 ----
-  static int immune_p          PROTO((rtx, rtx, struct decomposition));
-  static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev       PROTO((rtx, int, enum reload_type, int, int, short *));
-  static rtx make_memloc               PROTO((rtx, int));
-  static int find_reloads_address      PROTO((enum machine_mode, rtx *, rtx, rtx *,
-!                                     int, enum reload_type, int, short *));
-  static rtx subst_reg_equivs  PROTO((rtx));
-  static rtx subst_indexed_address PROTO((rtx));
-*************** push_secondary_reload (in_p, x, opnum, o
-*** 590,599 ****
-  
-        if (in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
-!      get_secondary_mem (x, reload_mode, opnum, type);
-  
-        if (! in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
-!      get_secondary_mem (x, reload_mode, opnum, type);
-  #endif
-      }
---- 591,600 ----
-  
-        if (in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
-!      get_secondary_mem (x, mode, opnum, type);
-  
-        if (! in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
-!      get_secondary_mem (x, mode, opnum, type);
-  #endif
-      }
-*************** get_secondary_mem (x, mode, opnum, type)
-*** 673,677 ****
-  
-        find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-!                          opnum, type, 0);
-      }
-  
---- 674,678 ----
-  
-        find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-!                          opnum, type, 0, NULL);
-      }
-  
-*************** clear_secondary_mem ()
-*** 689,692 ****
---- 690,725 ----
-  #endif /* SECONDARY_MEMORY_NEEDED */
-  \f
-+ /* Find the largest class for which every register number plus N is valid in
-+    M1 (if in range).  Abort if no such class exists.  */
-+ 
-+ static enum reg_class
-+ find_valid_class (m1, n)
-+      enum machine_mode  m1;
-+      int n;
-+ {
-+   int class;
-+   int regno;
-+   enum reg_class best_class;
-+   int best_size = 0;
-+ 
-+   for (class = 1; class < N_REG_CLASSES; class++)
-+     {
-+       int bad = 0;
-+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
-+      if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
-+          && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
-+          && ! HARD_REGNO_MODE_OK (regno + n, m1))
-+        bad = 1;
-+ 
-+       if (! bad && reg_class_size[class] > best_size)
-+      best_class = class, best_size = reg_class_size[class];
-+     }
-+ 
-+   if (best_size == 0)
-+     abort ();
-+ 
-+   return best_class;
-+ }
-+ \f
-  /* Record one reload that needs to be performed.
-     IN is an rtx saying where the data are to be found before this instruction.
-*************** push_reload (in, out, inloc, outloc, cla
-*** 894,898 ****
-        && GET_CODE (SUBREG_REG (in)) == REG
-        && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
-         || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
---- 927,932 ----
-        && GET_CODE (SUBREG_REG (in)) == REG
-        && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)) + SUBREG_WORD (in),
-!                              inmode)
-         || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 909,913 ****
-        output before the outer reload.  */
-        push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-!                 GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
-        dont_remove_subreg = 1;
-      }
---- 943,948 ----
-        output before the outer reload.  */
-        push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-!                 find_valid_class (inmode, SUBREG_WORD (in)),
-!                 VOIDmode, VOIDmode, 0, 0, opnum, type);
-        dont_remove_subreg = 1;
-      }
-*************** push_reload (in, out, inloc, outloc, cla
-*** 982,986 ****
-        && GET_CODE (SUBREG_REG (out)) == REG
-        && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode)
-         || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
---- 1017,1022 ----
-        && GET_CODE (SUBREG_REG (out)) == REG
-        && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)) + SUBREG_WORD (out),
-!                              outmode)
-         || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 998,1002 ****
-        dont_remove_subreg = 1;
-        push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-!                 &SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0,
-                  opnum, RELOAD_OTHER);
-      }
---- 1034,1040 ----
-        dont_remove_subreg = 1;
-        push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-!                 &SUBREG_REG (out),
-!                 find_valid_class (outmode, SUBREG_WORD (out)),
-!                 VOIDmode, VOIDmode, 0, 0,
-                  opnum, RELOAD_OTHER);
-      }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2241,2244 ****
---- 2279,2283 ----
-    int goal_earlyclobber, this_earlyclobber;
-    enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
-+   short force_update[MAX_RECOG_OPERANDS];
-  
-    this_insn = insn;
-*************** find_reloads (insn, replace, ind_levels,
-*** 2272,2275 ****
---- 2311,2316 ----
-  #endif
-  
-+   bzero ((char *) force_update, sizeof force_update);
-+ 
-    /* Find what kind of insn this is.  NOPERANDS gets number of operands.
-       Make OPERANDS point to a vector of operand values.
-*************** find_reloads (insn, replace, ind_levels,
-*** 2469,2473 ****
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, operand_type[i], ind_levels);
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-       }
---- 2510,2515 ----
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, operand_type[i], ind_levels,
-!                              &force_update[i]);
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-       }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2478,2482 ****
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels))
-           address_reloaded[i] = 1;
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
---- 2520,2525 ----
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels,
-!                                  &force_update[i]))
-           address_reloaded[i] = 1;
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-*************** find_reloads (insn, replace, ind_levels,
-*** 2487,2491 ****
-                                ind_levels,
-                                set != 0
-!                               && &SET_DEST (set) == recog_operand_loc[i]);
-        else if (code == PLUS)
-       /* We can get a PLUS as an "operand" as a result of
---- 2530,2535 ----
-                                ind_levels,
-                                set != 0
-!                               && &SET_DEST (set) == recog_operand_loc[i],
-!                               &force_update[i]);
-        else if (code == PLUS)
-       /* We can get a PLUS as an "operand" as a result of
-*************** find_reloads (insn, replace, ind_levels,
-*** 2493,2497 ****
-       substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, address_type[i],
-!                               ind_levels, 0);
-        else if (code == REG)
-       {
---- 2537,2541 ----
-       substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, address_type[i],
-!                               ind_levels, 0, &force_update[i]);
-        else if (code == REG)
-       {
-*************** find_reloads (insn, replace, ind_levels,
-*** 2505,2510 ****
-         if (reg_equiv_constant[regno] != 0
-             && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-!          substed_operand[i] = recog_operand[i]
-!            = reg_equiv_constant[regno];
-  #if 0 /* This might screw code in reload1.c to delete prior output-reload
-        that feeds this insn.  */
---- 2549,2557 ----
-         if (reg_equiv_constant[regno] != 0
-             && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-!          {
-!            substed_operand[i] = recog_operand[i]
-!              = reg_equiv_constant[regno];
-!            force_update[i] = 1;
-!          }
-  #if 0 /* This might screw code in reload1.c to delete prior output-reload
-        that feeds this insn.  */
-*************** find_reloads (insn, replace, ind_levels,
-*** 2545,2549 ****
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels);
-             substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-           }
---- 2592,2597 ----
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels,
-!                                  &force_update[i]);
-             substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-           }
-*************** find_reloads (insn, replace, ind_levels,
-*** 3415,3419 ****
-         = find_reloads_toplev (force_const_mem (operand_mode[i],
-                                                 recog_operand[i]),
-!                               i, address_type[i], ind_levels, 0);
-       if (alternative_allows_memconst (constraints1[i],
-                                        goal_alternative_number))
---- 3463,3467 ----
-         = find_reloads_toplev (force_const_mem (operand_mode[i],
-                                                 recog_operand[i]),
-!                               i, address_type[i], ind_levels, 0, NULL);
-       if (alternative_allows_memconst (constraints1[i],
-                                        goal_alternative_number))
-*************** find_reloads (insn, replace, ind_levels,
-*** 3595,3609 ****
-       Don't do this if we aren't making replacements because we might be
-       propagating things allocated by frame pointer elimination into places
-!      it doesn't expect.  */
-  
-!   if (insn_code_number >= 0 && replace)
-!     for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-!       {
-!      int opno = recog_dup_num[i];
-!      *recog_dup_loc[i] = *recog_operand_loc[opno];
-!      if (operand_reloadnum[opno] >= 0)
-!        push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
-!                          insn_operand_mode[insn_code_number][opno]);
-!       }
-  
-  #if 0
---- 3643,3664 ----
-       Don't do this if we aren't making replacements because we might be
-       propagating things allocated by frame pointer elimination into places
-!      it doesn't expect.  However, always do it for replaces of pseudos
-!      by constants.  */
-  
-!   for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-!     {
-!       int opno = recog_dup_num[i];
-! 
-!       if (! (insn_code_number >= 0 && replace))
-!      {
-!        if (! force_update[opno])
-!          continue;
-!      }
-! 
-!       *recog_dup_loc[i] = *recog_operand_loc[opno];
-!       if (operand_reloadnum[opno] >= 0)
-!      push_replacement (recog_dup_loc[i], operand_reloadnum[opno],
-!                        insn_operand_mode[insn_code_number][opno]);
-!     }
-  
-  #if 0
-*************** find_reloads (insn, replace, ind_levels,
-*** 3829,3832 ****
---- 3884,3888 ----
-        register RTX_CODE code = GET_CODE (recog_operand[i]);
-        int is_set_dest = GET_CODE (body) == SET && (i == 0);
-+       short ign;
-  
-        if (insn_code_number >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3834,3838 ****
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, RELOAD_FOR_INPUT, ind_levels);
-  
-        /* In these cases, we can't tell if the operand is an input
---- 3890,3894 ----
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, RELOAD_FOR_INPUT, ind_levels, &ign);
-  
-        /* In these cases, we can't tell if the operand is an input
-*************** find_reloads (insn, replace, ind_levels,
-*** 3845,3853 ****
-                             XEXP (recog_operand[i], 0),
-                             &XEXP (recog_operand[i], 0),
-!                            i, RELOAD_OTHER, ind_levels);
-        if (code == SUBREG)
-       recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-!                               ind_levels, is_set_dest);
-        if (code == REG)
-       {
---- 3901,3909 ----
-                             XEXP (recog_operand[i], 0),
-                             &XEXP (recog_operand[i], 0),
-!                            i, RELOAD_OTHER, ind_levels, &ign);
-        if (code == SUBREG)
-       recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-!                               ind_levels, is_set_dest, &ign);
-        if (code == REG)
-       {
-*************** alternative_allows_memconst (constraint,
-*** 3908,3915 ****
-  
-     IS_SET_DEST is true if X is the destination of a SET, which is not
-!    appropriate to be replaced by a constant.  */
-  
-  static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest)
-       rtx x;
-       int opnum;
---- 3964,3974 ----
-  
-     IS_SET_DEST is true if X is the destination of a SET, which is not
-!    appropriate to be replaced by a constant.
-! 
-!    FORCE_UPDATE, if non-NULL, is the address of a SHORT that is set to
-!    1 if X is replaced with something based on reg_equiv_constant.  */
-  
-  static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, force_update)
-       rtx x;
-       int opnum;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3917,3920 ****
---- 3976,3980 ----
-       int ind_levels;
-       int is_set_dest;
-+      short *force_update;
-  {
-    register RTX_CODE code = GET_CODE (x);
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3928,3932 ****
-        register int regno = REGNO (x);
-        if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-!      x = reg_equiv_constant[regno];
-  #if 0
-  /*  This creates (subreg (mem...)) which would cause an unnecessary
---- 3988,3998 ----
-        register int regno = REGNO (x);
-        if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-!      {
-!        x = reg_equiv_constant[regno];
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!      }
-  #if 0
-  /*  This creates (subreg (mem...)) which would cause an unnecessary
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3951,3955 ****
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels);
-       }
-        return x;
---- 4017,4022 ----
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels,
-!                              force_update);
-       }
-        return x;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3959,3963 ****
-        rtx tem = x;
-        find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels);
-        return tem;
-      }
---- 4026,4030 ----
-        rtx tem = x;
-        find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels, force_update);
-        return tem;
-      }
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3982,3986 ****
-         && (tem = gen_lowpart_common (GET_MODE (x),
-                                       reg_equiv_constant[regno])) != 0)
-!      return tem;
-  
-        if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
---- 4049,4059 ----
-         && (tem = gen_lowpart_common (GET_MODE (x),
-                                       reg_equiv_constant[regno])) != 0)
-!      {
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!        return tem;
-!      }
-  
-        if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3990,3994 ****
-                                    SUBREG_WORD (x), 0,
-                                    GET_MODE (SUBREG_REG (x)))) != 0)
-!      return tem;
-  
-        if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
---- 4063,4073 ----
-                                    SUBREG_WORD (x), 0,
-                                    GET_MODE (SUBREG_REG (x)))) != 0)
-!      {
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!        return tem;
-!      }
-  
-        if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4040,4044 ****
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels);
-       }
-  
---- 4119,4124 ----
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels,
-!                              force_update);
-       }
-  
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4049,4053 ****
-        if (fmt[i] == 'e')
-       XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-!                                         ind_levels, is_set_dest);
-      }
-    return x;
---- 4129,4133 ----
-        if (fmt[i] == 'e')
-       XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-!                                         ind_levels, is_set_dest, NULL);
-      }
-    return x;
-*************** make_memloc (ad, regno)
-*** 4110,4114 ****
-  
-  static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
-       enum machine_mode mode;
-       rtx *memrefloc;
---- 4190,4195 ----
-  
-  static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels,
-!                    force_update)
-       enum machine_mode mode;
-       rtx *memrefloc;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4118,4121 ****
---- 4199,4203 ----
-       enum reload_type type;
-       int ind_levels;
-+      short *force_update;
-  {
-    register int regno;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4134,4137 ****
---- 4216,4223 ----
-       {
-         *loc = ad = reg_equiv_constant[regno];
-+        if (force_update)
-+          *force_update = 1;
-+        else
-+          abort ();   /* Learn why this happens. */
-         return 1;
-       }
-*************** find_reloads_address (mode, memrefloc, a
-*** 4141,4145 ****
-         tem = make_memloc (ad, regno);
-         find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-!                              &XEXP (tem, 0), opnum, type, ind_levels);
-         push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
-                      GET_MODE (ad), VOIDmode, 0, 0,
---- 4227,4231 ----
-         tem = make_memloc (ad, regno);
-         find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-!                              &XEXP (tem, 0), opnum, type, ind_levels, NULL);
-         push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
-                      GET_MODE (ad), VOIDmode, 0, 0,
-*************** find_reloads_address (mode, memrefloc, a
-*** 4214,4218 ****
-        tem = ad;
-        find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-!                          opnum, type, ind_levels == 0 ? 0 : ind_levels - 1);
-  
-        /* If tem was changed, then we must create a new memory reference to
---- 4300,4305 ----
-        tem = ad;
-        find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-!                          opnum, type, ind_levels == 0 ? 0 : ind_levels - 1,
-!                          NULL);
-  
-        /* If tem was changed, then we must create a new memory reference to
-*************** find_reloads_address_1 (x, context, loc,
-*** 4722,4726 ****
-             /* First reload the memory location's address.  */
-             find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-!                                  &XEXP (tem, 0), opnum, type, ind_levels);
-             /* Put this inside a new increment-expression.  */
-             x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
---- 4809,4814 ----
-             /* First reload the memory location's address.  */
-             find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-!                                  &XEXP (tem, 0), opnum, type, ind_levels,
-!                                  NULL);
-             /* Put this inside a new increment-expression.  */
-             x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
-*************** find_reloads_address_1 (x, context, loc,
-*** 4788,4792 ****
-         find_reloads_address (GET_MODE (x), &XEXP (x, 0),
-                               XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-!                              opnum, type, ind_levels);
-  
-         reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
---- 4876,4880 ----
-         find_reloads_address (GET_MODE (x), &XEXP (x, 0),
-                               XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-!                              opnum, type, ind_levels, NULL);
-  
-         reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4818,4822 ****
-  
-        find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels);
-        push_reload (*loc, NULL_RTX, loc, NULL_PTR,
-                  context ? INDEX_REG_CLASS : BASE_REG_CLASS,
---- 4906,4910 ----
-  
-        find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels, NULL);
-        push_reload (*loc, NULL_RTX, loc, NULL_PTR,
-                  context ? INDEX_REG_CLASS : BASE_REG_CLASS,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4852,4856 ****
-           x = make_memloc (x, regno);
-           find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-!                                opnum, type, ind_levels);
-         }
-  
---- 4940,4944 ----
-           x = make_memloc (x, regno);
-           find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-!                                opnum, type, ind_levels, NULL);
-         }
-  
-*************** find_reloads_address_part (x, loc, class
-*** 4965,4969 ****
-        rtx tem = x = force_const_mem (mode, x);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels);
-      }
-  
---- 5053,5057 ----
-        rtx tem = x = force_const_mem (mode, x);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels, NULL);
-      }
-  
-*************** find_reloads_address_part (x, loc, class
-*** 4977,4981 ****
-        x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels);
-      }
-  
---- 5065,5069 ----
-        x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels, NULL);
-      }
-  
-*************** find_equiv_reg (goal, insn, class, other
-*** 5518,5522 ****
-       and is also a register that appears in the address of GOAL.  */
-  
-!   if (goal_mem && value == SET_DEST (PATTERN (where))
-        && refers_to_regno_for_reload_p (valueno,
-                                      (valueno
---- 5606,5610 ----
-       and is also a register that appears in the address of GOAL.  */
-  
-!   if (goal_mem && value == SET_DEST (single_set (where))
-        && refers_to_regno_for_reload_p (valueno,
-                                      (valueno
-*************** debug_reload()
-*** 5900,5904 ****
-  
-        if (reload_nocombine[r])
-!      fprintf (stderr, ", can combine", reload_nocombine[r]);
-  
-        if (reload_secondary_p[r])
---- 5988,5992 ----
-  
-        if (reload_nocombine[r])
-!      fprintf (stderr, ", can't combine %d", reload_nocombine[r]);
-  
-        if (reload_secondary_p[r])
-diff -rcp2N gcc-2.7.2.2/reload1.c g77-new/reload1.c
-*** gcc-2.7.2.2/reload1.c      Sun Nov  5 11:22:22 1995
---- g77-new/reload1.c  Sun Aug 10 18:47:00 1997
-*************** reload (first, global, dumpfile)
-*** 542,546 ****
-       Also find all paradoxical subregs and find largest such for each pseudo.
-       On machines with small register classes, record hard registers that
-!      are used for user variables.  These can never be used for spills.  */
-  
-    for (insn = first; insn; insn = NEXT_INSN (insn))
---- 542,548 ----
-       Also find all paradoxical subregs and find largest such for each pseudo.
-       On machines with small register classes, record hard registers that
-!      are used for user variables.  These can never be used for spills. 
-!      Also look for a "constant" NOTE_INSN_SETJMP.  This means that all
-!      caller-saved registers must be marked live.  */
-  
-    for (insn = first; insn; insn = NEXT_INSN (insn))
-*************** reload (first, global, dumpfile)
-*** 548,551 ****
---- 550,559 ----
-        rtx set = single_set (insn);
-  
-+       if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
-+        && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+        if (! call_used_regs[i])
-+          regs_ever_live[i] = 1;
-+ 
-        if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
-       {
-*************** reload (first, global, dumpfile)
-*** 564,568 ****
-                 if (GET_CODE (x) == MEM)
-                   reg_equiv_memory_loc[i] = x;
-!                else if (CONSTANT_P (x))
-                   {
-                     if (LEGITIMATE_CONSTANT_P (x))
---- 572,578 ----
-                 if (GET_CODE (x) == MEM)
-                   reg_equiv_memory_loc[i] = x;
-!                else if (CONSTANT_P (x)
-!                         && ! (GET_CODE (x) == CONST
-!                               && GET_CODE (XEXP (x, 0)) == MINUS))
-                   {
-                     if (LEGITIMATE_CONSTANT_P (x))
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2886,2890 ****
-  
-        /* Fall through to generic unary operation case.  */
--     case USE:
-      case STRICT_LOW_PART:
-      case NEG:          case NOT:
---- 2896,2899 ----
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2975,2978 ****
---- 2984,3000 ----
-        return x;
-  
-+     case USE:
-+       /* If using a register that is the source of an eliminate we still
-+       think can be performed, note it cannot be performed since we don't
-+       know how this register is used.  */
-+       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-+      if (ep->from_rtx == XEXP (x, 0))
-+        ep->can_eliminate = 0;
-+ 
-+       new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
-+       if (new != XEXP (x, 0))
-+      return gen_rtx (code, GET_MODE (x), new);
-+       return x;
-+ 
-      case CLOBBER:
-        /* If clobbering a register that is the replacement register for an
-*************** gen_reload (out, in, opnum, type)
-*** 6736,6741 ****
---- 6758,6765 ----
-    if (GET_CODE (in) == PLUS
-        && (GET_CODE (XEXP (in, 0)) == REG
-+        || GET_CODE (XEXP (in, 0)) == SUBREG
-         || GET_CODE (XEXP (in, 0)) == MEM)
-        && (GET_CODE (XEXP (in, 1)) == REG
-+        || GET_CODE (XEXP (in, 1)) == SUBREG
-         || CONSTANT_P (XEXP (in, 1))
-         || GET_CODE (XEXP (in, 1)) == MEM))
-*************** gen_reload (out, in, opnum, type)
-*** 6798,6807 ****
-        we emit below.  */
-  
-!       if (CONSTANT_P (op1) || GET_CODE (op1) == MEM
-         || (GET_CODE (op1) == REG
-             && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
-       tem = op0, op0 = op1, op1 = tem;
-  
-!       emit_insn (gen_move_insn (out, op0));
-  
-        /* If OP0 and OP1 are the same, we can use OUT for OP1.
---- 6822,6831 ----
-        we emit below.  */
-  
-!       if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
-         || (GET_CODE (op1) == REG
-             && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
-       tem = op0, op0 = op1, op1 = tem;
-  
-!       gen_reload (out, op0, opnum, type);
-  
-        /* If OP0 and OP1 are the same, we can use OUT for OP1.
-*************** gen_reload (out, in, opnum, type)
-*** 6831,6835 ****
-        delete_insns_since (last);
-  
-!       emit_insn (gen_move_insn (out, op1));
-        emit_insn (gen_add2_insn (out, op0));
-      }
---- 6855,6859 ----
-        delete_insns_since (last);
-  
-!       gen_reload (out, op1, opnum, type);
-        emit_insn (gen_add2_insn (out, op0));
-      }
-*************** gen_reload (out, in, opnum, type)
-*** 6852,6857 ****
-       in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-  
-!       emit_insn (gen_move_insn (loc, in));
-!       emit_insn (gen_move_insn (out, loc));
-      }
-  #endif
---- 6876,6881 ----
-       in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-  
-!       gen_reload (loc, in, opnum, type);
-!       gen_reload (out, loc, opnum, type);
-      }
-  #endif
-diff -rcp2N gcc-2.7.2.2/rtl.c g77-new/rtl.c
-*** gcc-2.7.2.2/rtl.c  Thu Jun 15 08:02:59 1995
---- g77-new/rtl.c      Thu Jul 10 20:09:06 1997
-*************** char *reg_note_name[] = { "", "REG_DEAD"
-*** 179,183 ****
-                         "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
-                         "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-!                        "REG_DEP_ANTI", "REG_DEP_OUTPUT" };
-  
-  /* Allocate an rtx vector of N elements.
---- 179,183 ----
-                         "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
-                         "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-!                        "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_NOALIAS" };
-  
-  /* Allocate an rtx vector of N elements.
-diff -rcp2N gcc-2.7.2.2/rtl.h g77-new/rtl.h
-*** gcc-2.7.2.2/rtl.h  Thu Jun 15 08:03:16 1995
---- g77-new/rtl.h      Thu Jul 10 20:09:07 1997
-*************** enum reg_note { REG_DEAD = 1, REG_INC = 
-*** 349,353 ****
-               REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
-               REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-!              REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };
-  
-  /* Define macros to extract and insert the reg-note kind in an EXPR_LIST.  */
---- 349,353 ----
-               REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
-               REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-!              REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_NOALIAS = 16 };
-  
-  /* Define macros to extract and insert the reg-note kind in an EXPR_LIST.  */
-*************** extern char *reg_note_name[];
-*** 432,436 ****
-  #define NOTE_INSN_FUNCTION_BEG -13
-  
-- 
-  #if 0 /* These are not used, and I don't know what they were for. --rms.  */
-  #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
---- 432,435 ----
-*************** extern char *note_insn_name[];
-*** 576,579 ****
---- 575,579 ----
-  /* For a TRAP_IF rtx, TRAP_CONDITION is an expression.  */
-  #define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx)
-+ #define TRAP_CODE(RTX) ((RTX)->fld[1].rtint)
-  
-  /* 1 in a SYMBOL_REF if it addresses this function's constants pool.  */
-*************** extern rtx eliminate_constant_term     PROTO
-*** 817,820 ****
---- 817,830 ----
-  extern rtx expand_complex_abs                PROTO((enum machine_mode, rtx, rtx, int));
-  extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
-+ extern int rtx_varies_p              PROTO((rtx));
-+ extern int may_trap_p                PROTO((rtx));
-+ extern int side_effects_p    PROTO((rtx));
-+ extern int volatile_refs_p   PROTO((rtx));
-+ extern int volatile_insn_p   PROTO((rtx));
-+ extern void remove_note              PROTO((rtx, rtx));
-+ extern void note_stores              PROTO((rtx, void (*)()));
-+ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
-+ extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
-+ 
-  
-  /* Maximum number of parallel sets and clobbers in any insn in this fn.
-*************** extern rtx *regno_reg_rtx;
-*** 967,968 ****
---- 977,987 ----
-  
-  extern int rtx_to_tree_code  PROTO((enum rtx_code));
-+ 
-+ extern int true_dependence   PROTO((rtx, enum machine_mode, rtx, int (*)()));
-+ extern int read_dependence   PROTO((rtx, rtx));
-+ extern int anti_dependence   PROTO((rtx, rtx));
-+ extern int output_dependence PROTO((rtx, rtx));
-+ extern void init_alias_analysis      PROTO((void));
-+ extern void end_alias_analysis       PROTO((void));
-+ extern void mark_user_reg    PROTO((rtx));
-+ extern void mark_reg_pointer PROTO((rtx));
-diff -rcp2N gcc-2.7.2.2/sched.c g77-new/sched.c
-*** gcc-2.7.2.2/sched.c        Thu Jun 15 08:06:39 1995
---- g77-new/sched.c    Sun Aug 10 18:46:13 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 126,129 ****
---- 126,132 ----
-  #include "insn-attr.h"
-  
-+ extern char *reg_known_equiv_p;
-+ extern rtx *reg_known_value;
-+ 
-  #ifdef INSN_SCHEDULING
-  /* Arrays set up by scheduling for the same respective purposes as
-*************** static int *sched_reg_live_length;
-*** 143,146 ****
---- 146,150 ----
-     by splitting insns.  */
-  static rtx *reg_last_uses;
-+ static int reg_last_uses_size;
-  static rtx *reg_last_sets;
-  static regset reg_pending_sets;
-*************** struct sometimes
-*** 294,302 ****
-  
-  /* Forward declarations.  */
-- static rtx canon_rtx                 PROTO((rtx));
-- static int rtx_equal_for_memref_p    PROTO((rtx, rtx));
-- static rtx find_symbolic_term                PROTO((rtx));
-- static int memrefs_conflict_p                PROTO((int, rtx, int, rtx,
--                                             HOST_WIDE_INT));
-  static void add_dependence           PROTO((rtx, rtx, enum reg_note));
-  static void remove_dependence                PROTO((rtx, rtx));
---- 298,301 ----
-*************** static int priority                    PROTO((rtx));
-*** 314,318 ****
-  static void free_pending_lists               PROTO((void));
-  static void add_insn_mem_dependence  PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists              PROTO((rtx));
-  static void sched_analyze_1          PROTO((rtx, rtx));
-  static void sched_analyze_2          PROTO((rtx, rtx));
---- 313,317 ----
-  static void free_pending_lists               PROTO((void));
-  static void add_insn_mem_dependence  PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists              PROTO((rtx, int));
-  static void sched_analyze_1          PROTO((rtx, rtx));
-  static void sched_analyze_2          PROTO((rtx, rtx));
-*************** void schedule_insns    PROTO((FILE *));
-*** 346,885 ****
-  #endif /* INSN_SCHEDULING */
-  \f
-- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-- 
-- /* Vector indexed by N giving the initial (unchanging) value known
--    for pseudo-register N.  */
-- static rtx *reg_known_value;
-- 
-- /* Vector recording for each reg_known_value whether it is due to a
--    REG_EQUIV note.  Future passes (viz., reload) may replace the
--    pseudo with the equivalent expression and so we account for the
--    dependences that would be introduced if that happens. */
-- /* ??? This is a problem only on the Convex.  The REG_EQUIV notes created in
--    assign_parms mention the arg pointer, and there are explicit insns in the
--    RTL that modify the arg pointer.  Thus we must ensure that such insns don't
--    get scheduled across each other because that would invalidate the REG_EQUIV
--    notes.  One could argue that the REG_EQUIV notes are wrong, but solving
--    the problem in the scheduler will likely give better code, so we do it
--    here.  */
-- static char *reg_known_equiv_p;
-- 
-- /* Indicates number of valid entries in reg_known_value.  */
-- static int reg_known_value_size;
-- 
-- static rtx
-- canon_rtx (x)
--      rtx x;
-- {
--   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
--       && REGNO (x) <= reg_known_value_size)
--     return reg_known_value[REGNO (x)];
--   else if (GET_CODE (x) == PLUS)
--     {
--       rtx x0 = canon_rtx (XEXP (x, 0));
--       rtx x1 = canon_rtx (XEXP (x, 1));
-- 
--       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
--      {
--        /* We can tolerate LO_SUMs being offset here; these
--           rtl are used for nothing other than comparisons.  */
--        if (GET_CODE (x0) == CONST_INT)
--          return plus_constant_for_output (x1, INTVAL (x0));
--        else if (GET_CODE (x1) == CONST_INT)
--          return plus_constant_for_output (x0, INTVAL (x1));
--        return gen_rtx (PLUS, GET_MODE (x), x0, x1);
--      }
--     }
--   return x;
-- }
-- 
-- /* Set up all info needed to perform alias analysis on memory references.  */
-- 
-- void
-- init_alias_analysis ()
-- {
--   int maxreg = max_reg_num ();
--   rtx insn;
--   rtx note;
--   rtx set;
-- 
--   reg_known_value_size = maxreg;
-- 
--   reg_known_value
--     = (rtx *) oballoc ((maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx))
--       - FIRST_PSEUDO_REGISTER;
--   bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
--       (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-- 
--   reg_known_equiv_p
--     = (char *) oballoc ((maxreg -FIRST_PSEUDO_REGISTER) * sizeof (char))
--       - FIRST_PSEUDO_REGISTER;
--   bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
--       (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-- 
--   /* Fill in the entries with known constant values.  */
--   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
--     if ((set = single_set (insn)) != 0
--      && GET_CODE (SET_DEST (set)) == REG
--      && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
--      && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
--           && reg_n_sets[REGNO (SET_DEST (set))] == 1)
--          || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
--      && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
--       {
--      int regno = REGNO (SET_DEST (set));
--      reg_known_value[regno] = XEXP (note, 0);
--      reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
--       }
-- 
--   /* Fill in the remaining entries.  */
--   while (--maxreg >= FIRST_PSEUDO_REGISTER)
--     if (reg_known_value[maxreg] == 0)
--       reg_known_value[maxreg] = regno_reg_rtx[maxreg];
-- }
-- 
-- /* Return 1 if X and Y are identical-looking rtx's.
-- 
--    We use the data in reg_known_value above to see if two registers with
--    different numbers are, in fact, equivalent.  */
-- 
-- static int
-- rtx_equal_for_memref_p (x, y)
--      rtx x, y;
-- {
--   register int i;
--   register int j;
--   register enum rtx_code code;
--   register char *fmt;
-- 
--   if (x == 0 && y == 0)
--     return 1;
--   if (x == 0 || y == 0)
--     return 0;
--   x = canon_rtx (x);
--   y = canon_rtx (y);
-- 
--   if (x == y)
--     return 1;
-- 
--   code = GET_CODE (x);
--   /* Rtx's of different codes cannot be equal.  */
--   if (code != GET_CODE (y))
--     return 0;
-- 
--   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
--      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
-- 
--   if (GET_MODE (x) != GET_MODE (y))
--     return 0;
-- 
--   /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively.  */
-- 
--   if (code == REG)
--     return REGNO (x) == REGNO (y);
--   if (code == LABEL_REF)
--     return XEXP (x, 0) == XEXP (y, 0);
--   if (code == SYMBOL_REF)
--     return XSTR (x, 0) == XSTR (y, 0);
-- 
--   /* For commutative operations, the RTX match if the operand match in any
--      order.  Also handle the simple binary and unary cases without a loop.  */
--   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
--     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
--           && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
--          || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
--              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
--   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
--     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
--          && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
--   else if (GET_RTX_CLASS (code) == '1')
--     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-- 
--   /* Compare the elements.  If any pair of corresponding elements
--      fail to match, return 0 for the whole things.  */
-- 
--   fmt = GET_RTX_FORMAT (code);
--   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
--     {
--       switch (fmt[i])
--      {
--      case 'w':
--        if (XWINT (x, i) != XWINT (y, i))
--          return 0;
--        break;
-- 
--      case 'n':
--      case 'i':
--        if (XINT (x, i) != XINT (y, i))
--          return 0;
--        break;
-- 
--      case 'V':
--      case 'E':
--        /* Two vectors must have the same length.  */
--        if (XVECLEN (x, i) != XVECLEN (y, i))
--          return 0;
-- 
--        /* And the corresponding elements must match.  */
--        for (j = 0; j < XVECLEN (x, i); j++)
--          if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
--            return 0;
--        break;
-- 
--      case 'e':
--        if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
--          return 0;
--        break;
-- 
--      case 'S':
--      case 's':
--        if (strcmp (XSTR (x, i), XSTR (y, i)))
--          return 0;
--        break;
-- 
--      case 'u':
--        /* These are just backpointers, so they don't matter.  */
--        break;
-- 
--      case '0':
--        break;
-- 
--        /* It is believed that rtx's at this level will never
--           contain anything but integers and other rtx's,
--           except for within LABEL_REFs and SYMBOL_REFs.  */
--      default:
--        abort ();
--      }
--     }
--   return 1;
-- }
-- 
-- /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
--    X and return it, or return 0 if none found.  */
-- 
-- static rtx
-- find_symbolic_term (x)
--      rtx x;
-- {
--   register int i;
--   register enum rtx_code code;
--   register char *fmt;
-- 
--   code = GET_CODE (x);
--   if (code == SYMBOL_REF || code == LABEL_REF)
--     return x;
--   if (GET_RTX_CLASS (code) == 'o')
--     return 0;
-- 
--   fmt = GET_RTX_FORMAT (code);
--   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
--     {
--       rtx t;
-- 
--       if (fmt[i] == 'e')
--      {
--        t = find_symbolic_term (XEXP (x, i));
--        if (t != 0)
--          return t;
--      }
--       else if (fmt[i] == 'E')
--      break;
--     }
--   return 0;
-- }
-- 
-- /* Return nonzero if X and Y (memory addresses) could reference the
--    same location in memory.  C is an offset accumulator.  When
--    C is nonzero, we are testing aliases between X and Y + C.
--    XSIZE is the size in bytes of the X reference,
--    similarly YSIZE is the size in bytes for Y.
-- 
--    If XSIZE or YSIZE is zero, we do not know the amount of memory being
--    referenced (the reference was BLKmode), so make the most pessimistic
--    assumptions.
-- 
--    We recognize the following cases of non-conflicting memory:
-- 
--      (1) addresses involving the frame pointer cannot conflict
--          with addresses involving static variables.
--      (2) static variables with different addresses cannot conflict.
-- 
--    Nice to notice that varying addresses cannot conflict with fp if no
--    local variables had their addresses taken, but that's too hard now.  */
-- 
-- /* ??? In Fortran, references to a array parameter can never conflict with
--    another array parameter.  */
-- 
-- static int
-- memrefs_conflict_p (xsize, x, ysize, y, c)
--      rtx x, y;
--      int xsize, ysize;
--      HOST_WIDE_INT c;
-- {
--   if (GET_CODE (x) == HIGH)
--     x = XEXP (x, 0);
--   else if (GET_CODE (x) == LO_SUM)
--     x = XEXP (x, 1);
--   else
--     x = canon_rtx (x);
--   if (GET_CODE (y) == HIGH)
--     y = XEXP (y, 0);
--   else if (GET_CODE (y) == LO_SUM)
--     y = XEXP (y, 1);
--   else
--     y = canon_rtx (y);
-- 
--   if (rtx_equal_for_memref_p (x, y))
--     return (xsize == 0 || ysize == 0 ||
--          (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- 
--   if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
--       || y == stack_pointer_rtx)
--     {
--       rtx t = y;
--       int tsize = ysize;
--       y = x; ysize = xsize;
--       x = t; xsize = tsize;
--     }
-- 
--   if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
--       || x == stack_pointer_rtx)
--     {
--       rtx y1;
-- 
--       if (CONSTANT_P (y))
--      return 0;
-- 
--       if (GET_CODE (y) == PLUS
--        && canon_rtx (XEXP (y, 0)) == x
--        && (y1 = canon_rtx (XEXP (y, 1)))
--        && GET_CODE (y1) == CONST_INT)
--      {
--        c += INTVAL (y1);
--        return (xsize == 0 || ysize == 0
--                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--      }
-- 
--       if (GET_CODE (y) == PLUS
--        && (y1 = canon_rtx (XEXP (y, 0)))
--        && CONSTANT_P (y1))
--      return 0;
-- 
--       return 1;
--     }
-- 
--   if (GET_CODE (x) == PLUS)
--     {
--       /* The fact that X is canonicalized means that this
--       PLUS rtx is canonicalized.  */
--       rtx x0 = XEXP (x, 0);
--       rtx x1 = XEXP (x, 1);
-- 
--       if (GET_CODE (y) == PLUS)
--      {
--        /* The fact that Y is canonicalized means that this
--           PLUS rtx is canonicalized.  */
--        rtx y0 = XEXP (y, 0);
--        rtx y1 = XEXP (y, 1);
-- 
--        if (rtx_equal_for_memref_p (x1, y1))
--          return memrefs_conflict_p (xsize, x0, ysize, y0, c);
--        if (rtx_equal_for_memref_p (x0, y0))
--          return memrefs_conflict_p (xsize, x1, ysize, y1, c);
--        if (GET_CODE (x1) == CONST_INT)
--          if (GET_CODE (y1) == CONST_INT)
--            return memrefs_conflict_p (xsize, x0, ysize, y0,
--                                       c - INTVAL (x1) + INTVAL (y1));
--          else
--            return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
--        else if (GET_CODE (y1) == CONST_INT)
--          return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-- 
--        /* Handle case where we cannot understand iteration operators,
--           but we notice that the base addresses are distinct objects.  */
--        x = find_symbolic_term (x);
--        if (x == 0)
--          return 1;
--        y = find_symbolic_term (y);
--        if (y == 0)
--          return 1;
--        return rtx_equal_for_memref_p (x, y);
--      }
--       else if (GET_CODE (x1) == CONST_INT)
--      return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
--     }
--   else if (GET_CODE (y) == PLUS)
--     {
--       /* The fact that Y is canonicalized means that this
--       PLUS rtx is canonicalized.  */
--       rtx y0 = XEXP (y, 0);
--       rtx y1 = XEXP (y, 1);
-- 
--       if (GET_CODE (y1) == CONST_INT)
--      return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
--       else
--      return 1;
--     }
-- 
--   if (GET_CODE (x) == GET_CODE (y))
--     switch (GET_CODE (x))
--       {
--       case MULT:
--      {
--        /* Handle cases where we expect the second operands to be the
--           same, and check only whether the first operand would conflict
--           or not.  */
--        rtx x0, y0;
--        rtx x1 = canon_rtx (XEXP (x, 1));
--        rtx y1 = canon_rtx (XEXP (y, 1));
--        if (! rtx_equal_for_memref_p (x1, y1))
--          return 1;
--        x0 = canon_rtx (XEXP (x, 0));
--        y0 = canon_rtx (XEXP (y, 0));
--        if (rtx_equal_for_memref_p (x0, y0))
--          return (xsize == 0 || ysize == 0
--                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- 
--        /* Can't properly adjust our sizes.  */
--        if (GET_CODE (x1) != CONST_INT)
--          return 1;
--        xsize /= INTVAL (x1);
--        ysize /= INTVAL (x1);
--        c /= INTVAL (x1);
--        return memrefs_conflict_p (xsize, x0, ysize, y0, c);
--      }
--       }
-- 
--   if (CONSTANT_P (x))
--     {
--       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
--      {
--        c += (INTVAL (y) - INTVAL (x));
--        return (xsize == 0 || ysize == 0
--                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--      }
-- 
--       if (GET_CODE (x) == CONST)
--      {
--        if (GET_CODE (y) == CONST)
--          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
--                                     ysize, canon_rtx (XEXP (y, 0)), c);
--        else
--          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
--                                     ysize, y, c);
--      }
--       if (GET_CODE (y) == CONST)
--      return memrefs_conflict_p (xsize, x, ysize,
--                                 canon_rtx (XEXP (y, 0)), c);
-- 
--       if (CONSTANT_P (y))
--      return (rtx_equal_for_memref_p (x, y)
--              && (xsize == 0 || ysize == 0
--                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-- 
--       return 1;
--     }
--   return 1;
-- }
-- 
-- /* Functions to compute memory dependencies.
-- 
--    Since we process the insns in execution order, we can build tables
--    to keep track of what registers are fixed (and not aliased), what registers
--    are varying in known ways, and what registers are varying in unknown
--    ways.
-- 
--    If both memory references are volatile, then there must always be a
--    dependence between the two references, since their order can not be
--    changed.  A volatile and non-volatile reference can be interchanged
--    though. 
-- 
--    A MEM_IN_STRUCT reference at a non-QImode varying address can never
--    conflict with a non-MEM_IN_STRUCT reference at a fixed address.   We must
--    allow QImode aliasing because the ANSI C standard allows character
--    pointers to alias anything.  We are assuming that characters are
--    always QImode here.  */
-- 
-- /* Read dependence: X is read after read in MEM takes place.  There can
--    only be a dependence here if both reads are volatile.  */
-- 
-- int
-- read_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-- }
-- 
-- /* True dependence: X is read after store in MEM takes place.  */
-- 
-- int
-- true_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   /* If X is an unchanging read, then it can't possibly conflict with any
--      non-unchanging store.  It may conflict with an unchanging write though,
--      because there may be a single store to this address to initialize it.
--      Just fall through to the code below to resolve the case where we have
--      both an unchanging read and an unchanging write.  This won't handle all
--      cases optimally, but the possible performance loss should be
--      negligible.  */
--   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
--     return 0;
-- 
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- 
-- /* Anti dependence: X is written after read in MEM takes place.  */
-- 
-- int
-- anti_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   /* If MEM is an unchanging read, then it can't possibly conflict with
--      the store to X, because there is at most one store to MEM, and it must
--      have occurred somewhere before MEM.  */
--   if (RTX_UNCHANGING_P (mem))
--     return 0;
-- 
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- 
-- /* Output dependence: X is written after store in MEM takes place.  */
-- 
-- int
-- output_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- \f
-  /* Helper functions for instruction scheduling.  */
-  
---- 345,348 ----
-*************** add_insn_mem_dependence (insn_list, mem_
-*** 1609,1621 ****
-  \f
-  /* Make a dependency between every memory reference on the pending lists
-!    and INSN, thus flushing the pending lists.  */
-  
-  static void
-! flush_pending_lists (insn)
-       rtx insn;
-  {
-    rtx link;
-  
-!   while (pending_read_insns)
-      {
-        add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
---- 1072,1086 ----
-  \f
-  /* Make a dependency between every memory reference on the pending lists
-!    and INSN, thus flushing the pending lists.  If ONLY_WRITE, don't flush
-!    the read list.  */
-  
-  static void
-! flush_pending_lists (insn, only_write)
-       rtx insn;
-+      int only_write;
-  {
-    rtx link;
-  
-!   while (pending_read_insns && ! only_write)
-      {
-        add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
-*************** sched_analyze_1 (x, insn)
-*** 1746,1750 ****
-            this flush occurs 8 times for sparc, and 10 times for m88k using
-            the number 32.  */
-!        flush_pending_lists (insn);
-       }
-        else
---- 1211,1215 ----
-            this flush occurs 8 times for sparc, and 10 times for m88k using
-            the number 32.  */
-!        flush_pending_lists (insn, 0);
-       }
-        else
-*************** sched_analyze_2 (x, insn)
-*** 1922,1926 ****
-           /* If a dependency already exists, don't create a new one.  */
-           if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-!            if (true_dependence (XEXP (pending_mem, 0), x))
-               add_dependence (insn, XEXP (pending, 0), 0);
-  
---- 1387,1392 ----
-           /* If a dependency already exists, don't create a new one.  */
-           if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-!            if (true_dependence (XEXP (pending_mem, 0), VOIDmode,
-!                                 x, rtx_varies_p))
-               add_dependence (insn, XEXP (pending, 0), 0);
-  
-*************** sched_analyze_2 (x, insn)
-*** 1968,1972 ****
-           reg_pending_sets_all = 1;
-  
-!          flush_pending_lists (insn);
-         }
-  
---- 1434,1438 ----
-           reg_pending_sets_all = 1;
-  
-!          flush_pending_lists (insn, 0);
-         }
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2021,2025 ****
-    register RTX_CODE code = GET_CODE (x);
-    rtx link;
-!   int maxreg = max_reg_num ();
-    int i;
-  
---- 1487,1491 ----
-    register RTX_CODE code = GET_CODE (x);
-    rtx link;
-!   int maxreg = reg_last_uses_size;
-    int i;
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2058,2062 ****
-    if (loop_notes)
-      {
-!       int max_reg = max_reg_num ();
-        rtx link;
-  
---- 1524,1528 ----
-    if (loop_notes)
-      {
-!       int max_reg = reg_last_uses_size;
-        rtx link;
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2072,2076 ****
-        reg_pending_sets_all = 1;
-  
-!       flush_pending_lists (insn);
-  
-        link = loop_notes;
---- 1538,1542 ----
-        reg_pending_sets_all = 1;
-  
-!       flush_pending_lists (insn, 0);
-  
-        link = loop_notes;
-*************** sched_analyze (head, tail)
-*** 2202,2207 ****
-             && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
-           {
-!            int max_reg = max_reg_num ();
-!            for (i = 0; i < max_reg; i++)
-               {
-                 for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
---- 1668,1672 ----
-             && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
-           {
-!            for (i = 0; i < reg_last_uses_size; i++)
-               {
-                 for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
-*************** sched_analyze (head, tail)
-*** 2247,2259 ****
-         loop_notes = 0;
-  
-!        /* We don't need to flush memory for a function call which does
-!           not involve memory.  */
-!        if (! CONST_CALL_P (insn))
-!          {
-!            /* In the absence of interprocedural alias analysis,
-!               we must flush all pending reads and writes, and
-!               start new dependencies starting from here.  */
-!            flush_pending_lists (insn);
-!          }
-  
-         /* Depend this function call (actually, the user of this
---- 1712,1720 ----
-         loop_notes = 0;
-  
-!        /* In the absence of interprocedural alias analysis, we must flush
-!           all pending reads and writes, and start new dependencies starting
-!           from here.  But only flush writes for constant calls (which may
-!           be passed a pointer to something we haven't written yet).  */
-!        flush_pending_lists (insn, CONST_CALL_P (insn));
-  
-         /* Depend this function call (actually, the user of this
-*************** sched_analyze (head, tail)
-*** 2264,2270 ****
-        else if (GET_CODE (insn) == NOTE
-              && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-!                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
-!      loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-!                            GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-  
-        if (insn == tail)
---- 1725,1736 ----
-        else if (GET_CODE (insn) == NOTE
-              && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-!                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END
-!                 || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP
-!                     && GET_CODE (PREV_INSN (insn)) != CALL_INSN)))
-!      {
-!        loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-!                              GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-!        CONST_CALL_P (loop_notes) = CONST_CALL_P (insn);
-!      }
-  
-        if (insn == tail)
-*************** sched_note_set (b, x, death)
-*** 2372,2380 ****
-  
-  #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-!   do { if ((NEW_READY) - (OLD_READY) == 1)                           \
-!       swap_sort (READY, NEW_READY);                                  \
-!        else if ((NEW_READY) - (OLD_READY) > 1)                               \
-!       qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); }   \
-!   while (0)
-  
-  /* Returns a positive value if y is preferred; returns a negative value if
---- 1838,1845 ----
-  
-  #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-!   if ((NEW_READY) - (OLD_READY) == 1)                                        \
-!     swap_sort (READY, NEW_READY);                                    \
-!   else if ((NEW_READY) - (OLD_READY) > 1)                            \
-!     qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); else  \
-  
-  /* Returns a positive value if y is preferred; returns a negative value if
-*************** reemit_notes (insn, last)
-*** 3128,3132 ****
-       {
-         if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-!          emit_note_after (INTVAL (XEXP (note, 0)), insn);
-         else
-           last = emit_note_before (INTVAL (XEXP (note, 0)), last);
---- 2593,2598 ----
-       {
-         if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-!          CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn))
-!            = CONST_CALL_P (note);
-         else
-           last = emit_note_before (INTVAL (XEXP (note, 0)), last);
-*************** schedule_block (b, file)
-*** 3174,3178 ****
-            b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-  
-!   i = max_reg_num ();
-    reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
-    bzero ((char *) reg_last_uses, i * sizeof (rtx));
---- 2640,2644 ----
-            b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-  
-!   reg_last_uses_size = i = max_reg_num ();
-    reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
-    bzero ((char *) reg_last_uses, i * sizeof (rtx));
-*************** schedule_block (b, file)
-*** 3800,3804 ****
-                    made live again later.  */
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] || global_regs[i])
-                     {
-                       register int offset = i / REGSET_ELT_BITS;
---- 3266,3271 ----
-                    made live again later.  */
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if ((call_used_regs[i] && ! fixed_regs[i])
-!                      || global_regs[i])
-                     {
-                       register int offset = i / REGSET_ELT_BITS;
-*************** schedule_insns (dump_file)
-*** 4717,4721 ****
-        bcopy ((char *) reg_n_deaths, (char *) sched_reg_n_deaths,
-            max_regno * sizeof (short));
--       init_alias_analysis ();
-      }
-    else
---- 4184,4187 ----
-*************** schedule_insns (dump_file)
-*** 4726,4732 ****
-        bb_dead_regs = 0;
-        bb_live_regs = 0;
--       if (! flag_schedule_insns)
--      init_alias_analysis ();
-      }
-  
-    if (write_symbols != NO_DEBUG)
---- 4192,4213 ----
-        bb_dead_regs = 0;
-        bb_live_regs = 0;
-      }
-+   init_alias_analysis ();
-+ #if 0
-+   if (dump_file)
-+     {
-+       extern rtx *reg_base_value;
-+       extern int reg_base_value_size;
-+       int i;
-+       for (i = 0; i < reg_base_value_size; i++)
-+      if (reg_base_value[i])
-+        {
-+          fprintf (dump_file, ";; reg_base_value[%d] = ", i);
-+          print_rtl (dump_file, reg_base_value[i]);
-+          fputc ('\n', dump_file);
-+        }
-+     }
-+ #endif
-+ 
-  
-    if (write_symbols != NO_DEBUG)
-diff -rcp2N gcc-2.7.2.2/sdbout.c g77-new/sdbout.c
-*** gcc-2.7.2.2/sdbout.c       Thu Jun 15 08:07:11 1995
---- g77-new/sdbout.c   Mon Aug 11 01:42:22 1997
-*************** plain_type_1 (type, level)
-*** 539,543 ****
-         sdb_dims[sdb_n_dims++]
-           = (TYPE_DOMAIN (type)
-!             ? TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1
-              : 0);
-       return PUSH_DERIVED_LEVEL (DT_ARY, m);
---- 539,546 ----
-         sdb_dims[sdb_n_dims++]
-           = (TYPE_DOMAIN (type)
-!             && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-!             && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-!             ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-!                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
-              : 0);
-       return PUSH_DERIVED_LEVEL (DT_ARY, m);
-diff -rcp2N gcc-2.7.2.2/stmt.c g77-new/stmt.c
-*** gcc-2.7.2.2/stmt.c Tue Sep 12 19:01:54 1995
---- g77-new/stmt.c     Sun Aug 10 18:46:56 1997
-*************** fixup_gotos (thisblock, stack_level, cle
-*** 1244,1249 ****
-             poplevel (1, 0, 0);
-             end_sequence ();
-!            f->before_jump
-!              = emit_insns_after (cleanup_insns, f->before_jump);
-  
-             f->cleanup_list_list = TREE_CHAIN (lists);
---- 1244,1250 ----
-             poplevel (1, 0, 0);
-             end_sequence ();
-!            if (cleanup_insns != 0)
-!              f->before_jump
-!                = emit_insns_after (cleanup_insns, f->before_jump);
-  
-             f->cleanup_list_list = TREE_CHAIN (lists);
-*************** expand_expr_stmt (exp)
-*** 1721,1725 ****
-  
-    last_expr_type = TREE_TYPE (exp);
-!   if (! flag_syntax_only)
-      last_expr_value = expand_expr (exp,
-                                  (expr_stmts_for_value
---- 1722,1726 ----
-  
-    last_expr_type = TREE_TYPE (exp);
-!   if (! flag_syntax_only || expr_stmts_for_value)
-      last_expr_value = expand_expr (exp,
-                                  (expr_stmts_for_value
-*************** expand_end_bindings (vars, mark_ends, do
-*** 3160,3163 ****
---- 3161,3169 ----
-  #endif
-  
-+ #ifdef HAVE_nonlocal_goto_receiver
-+       if (HAVE_nonlocal_goto_receiver)
-+      emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+ 
-        /* The handler expects the desired label address in the static chain
-        register.  It tests the address and does an appropriate jump
-*************** expand_decl (decl)
-*** 3369,3393 ****
-       = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-  
-!       if (TREE_CODE (type) == COMPLEX_TYPE)
-!      {
-!        rtx realpart, imagpart;
-!        enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type));
-  
-!        /* For a complex type variable, make a CONCAT of two pseudos
-!           so that the real and imaginary parts
-!           can be allocated separately.  */
-!        realpart = gen_reg_rtx (partmode);
-!        REG_USERVAR_P (realpart) = 1;
-!        imagpart = gen_reg_rtx (partmode);
-!        REG_USERVAR_P (imagpart) = 1;
-!        DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart);
-!      }
-!       else
-!      {
-!        DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-!        if (TREE_CODE (type) == POINTER_TYPE)
-!          mark_reg_pointer (DECL_RTL (decl));
-!        REG_USERVAR_P (DECL_RTL (decl)) = 1;
-!      }
-      }
-    else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
---- 3375,3383 ----
-       = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-  
-!       DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-!       mark_user_reg (DECL_RTL (decl));
-  
-!       if (TREE_CODE (type) == POINTER_TYPE)
-!      mark_reg_pointer (DECL_RTL (decl));
-      }
-    else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
-*************** expand_decl (decl)
-*** 3462,3468 ****
-        free_temp_slots ();
-  
-!       /* Allocate space on the stack for the variable.  */
-        address = allocate_dynamic_stack_space (size, NULL_RTX,
-!                                            DECL_ALIGN (decl));
-  
-        /* Reference the variable indirect through that rtx.  */
---- 3452,3461 ----
-        free_temp_slots ();
-  
-!       /* Allocate space on the stack for the variable.  Note that
-!       DECL_ALIGN says how the variable is to be aligned and we 
-!       cannot use it to conclude anything about the alignment of
-!       the size.  */
-        address = allocate_dynamic_stack_space (size, NULL_RTX,
-!                                            TYPE_ALIGN (TREE_TYPE (decl)));
-  
-        /* Reference the variable indirect through that rtx.  */
-diff -rcp2N gcc-2.7.2.2/stor-layout.c g77-new/stor-layout.c
-*** gcc-2.7.2.2/stor-layout.c  Thu Feb 20 19:24:20 1997
---- g77-new/stor-layout.c      Mon Aug 11 06:47:50 1997
-*************** layout_decl (decl, known_align)
-*** 255,259 ****
-        if (maximum_field_alignment != 0)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-!       else if (flag_pack_struct)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
-      }
---- 255,259 ----
-        if (maximum_field_alignment != 0)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-!       else if (DECL_PACKED (decl))
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
-      }
-*************** layout_decl (decl, known_align)
-*** 261,265 ****
-    if (DECL_BIT_FIELD (decl)
-        && TYPE_SIZE (type) != 0
-!       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
-      {
-        register enum machine_mode xmode
---- 261,266 ----
-    if (DECL_BIT_FIELD (decl)
-        && TYPE_SIZE (type) != 0
-!       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-!       && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
-      {
-        register enum machine_mode xmode
-*************** layout_decl (decl, known_align)
-*** 278,281 ****
---- 279,291 ----
-      }
-  
-+   /* Turn off DECL_BIT_FIELD if we won't need it set.  */
-+   if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode
-+       && known_align % TYPE_ALIGN (type) == 0
-+       && DECL_SIZE (decl) != 0
-+       && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
-+        || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0)
-+       && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
-+     DECL_BIT_FIELD (decl) = 0;
-+ 
-    /* Evaluate nonconstant size only once, either now or as soon as safe.  */
-    if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-*************** layout_record (rec)
-*** 380,384 ****
-             if (maximum_field_alignment != 0)
-               type_align = MIN (type_align, maximum_field_alignment);
-!            else if (flag_pack_struct)
-               type_align = MIN (type_align, BITS_PER_UNIT);
-  
---- 390,394 ----
-             if (maximum_field_alignment != 0)
-               type_align = MIN (type_align, maximum_field_alignment);
-!            else if (TYPE_PACKED (rec))
-               type_align = MIN (type_align, BITS_PER_UNIT);
-  
-*************** layout_record (rec)
-*** 422,428 ****
-         && DECL_BIT_FIELD_TYPE (field)
-         && !DECL_PACKED (field)
--        /* If #pragma pack is in effect, turn off this feature.  */
-         && maximum_field_alignment == 0
--        && !flag_pack_struct
-         && !integer_zerop (DECL_SIZE (field)))
-       {
---- 432,436 ----
-*************** layout_record (rec)
-*** 459,463 ****
-         if (maximum_field_alignment != 0)
-           type_align = MIN (type_align, maximum_field_alignment);
-!        else if (flag_pack_struct)
-           type_align = MIN (type_align, BITS_PER_UNIT);
-  
---- 467,471 ----
-         if (maximum_field_alignment != 0)
-           type_align = MIN (type_align, maximum_field_alignment);
-!        else if (TYPE_PACKED (rec))
-           type_align = MIN (type_align, BITS_PER_UNIT);
-  
-*************** layout_record (rec)
-*** 500,505 ****
-         /* Do nothing.  */;
-       else if (TREE_CODE (dsize) == INTEGER_CST
-                && TREE_INT_CST_HIGH (dsize) == 0
-!               && TREE_INT_CST_LOW (dsize) + const_size > const_size)
-         /* Use const_size if there's no overflow.  */
-         const_size += TREE_INT_CST_LOW (dsize);
---- 508,514 ----
-         /* Do nothing.  */;
-       else if (TREE_CODE (dsize) == INTEGER_CST
-+               && ! TREE_CONSTANT_OVERFLOW (dsize)
-                && TREE_INT_CST_HIGH (dsize) == 0
-!               && TREE_INT_CST_LOW (dsize) + const_size >= const_size)
-         /* Use const_size if there's no overflow.  */
-         const_size += TREE_INT_CST_LOW (dsize);
-*************** get_best_mode (bitsize, bitpos, align, l
-*** 1172,1175 ****
---- 1181,1192 ----
-    enum machine_mode mode;
-    int unit;
-+ 
-+   if (bitpos < 0)
-+     {
-+       /* For correct calculations and convenience, bias negative bitpos
-+       to become a non-negative value that is [1,bitsize], such that
-+       the relative bit offset to a multiple of bitsize is preserved.  */
-+       bitpos = bitsize - ((-bitpos) % bitsize);
-+     }
-  
-    /* Find the narrowest integer mode that contains the bit field.  */
-diff -rcp2N gcc-2.7.2.2/stupid.c g77-new/stupid.c
-*** gcc-2.7.2.2/stupid.c       Sun Oct 29 07:45:22 1995
---- g77-new/stupid.c   Sun Aug 10 18:46:01 1997
-*************** static int *uid_suid;
-*** 66,69 ****
---- 66,74 ----
-  static int last_call_suid;
-  
-+ /* Record the suid of the last NOTE_INSN_SETJMP
-+    so we can tell whether a pseudo reg crosses any setjmp.  */
-+ 
-+ static int last_setjmp_suid;
-+ 
-  /* Element N is suid of insn where life span of pseudo reg N ends.
-     Element is  0 if register N has not been seen yet on backward scan.  */
-*************** static char *regs_live;
-*** 89,92 ****
---- 94,101 ----
-  static char *regs_change_size;
-  
-+ /* Indexed by reg number, nonzero if reg crosses a setjmp.  */
-+ 
-+ static char *regs_crosses_setjmp;
-+ 
-  /* Indexed by insn's suid, the set of hard regs live after that insn.  */
-  
-*************** stupid_life_analysis (f, nregs, file)
-*** 149,152 ****
---- 158,162 ----
-  
-    last_call_suid = i + 1;
-+   last_setjmp_suid = i + 1;
-    max_suid = i + 1;
-  
-*************** stupid_life_analysis (f, nregs, file)
-*** 167,170 ****
---- 177,183 ----
-    bzero ((char *) regs_change_size, nregs * sizeof (char));
-  
-+   regs_crosses_setjmp = (char *) alloca (nregs * sizeof (char));
-+   bzero ((char *) regs_crosses_setjmp, nregs * sizeof (char));
-+ 
-    reg_renumber = (short *) oballoc (nregs * sizeof (short));
-    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-*************** stupid_life_analysis (f, nregs, file)
-*** 216,219 ****
---- 229,236 ----
-       stupid_mark_refs (PATTERN (insn), insn);
-  
-+       if (GET_CODE (insn) == NOTE
-+        && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+      last_setjmp_suid = INSN_SUID (insn);
-+ 
-        /* Mark all call-clobbered regs as live after each call insn
-        so that a pseudo whose life span includes this insn
-*************** stupid_life_analysis (f, nregs, file)
-*** 254,259 ****
-        register int r = reg_order[i];
-  
-!       /* Some regnos disappear from the rtl.  Ignore them to avoid crash.  */
-!       if (regno_reg_rtx[r] == 0)
-       continue;
-  
---- 271,277 ----
-        register int r = reg_order[i];
-  
-!       /* Some regnos disappear from the rtl.  Ignore them to avoid crash. 
-!       Also don't allocate registers that cross a setjmp.  */
-!       if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r])
-       continue;
-  
-*************** stupid_reg_compare (r1p, r2p)
-*** 309,314 ****
-     that can hold a value of machine-mode MODE
-       (but actually we test only the first of the block for holding MODE)
-!    currently free from after insn whose suid is BIRTH
-!    through the insn whose suid is DEATH,
-     and return the number of the first of them.
-     Return -1 if such a block cannot be found.
---- 327,332 ----
-     that can hold a value of machine-mode MODE
-       (but actually we test only the first of the block for holding MODE)
-!    currently free from after insn whose suid is BORN_INSN
-!    through the insn whose suid is DEAD_INSN,
-     and return the number of the first of them.
-     Return -1 if such a block cannot be found.
-*************** stupid_find_reg (call_preserved, class, 
-*** 338,341 ****
---- 356,366 ----
-  #endif
-  
-+   /* If this register's life is more than 5,000 insns, we probably
-+      can't allocate it, so don't waste the time trying.  This avoid
-+      quadratic behavior on programs that have regularly-occurring
-+      SAVE_EXPRs.  */
-+   if (dead_insn > born_insn + 5000)
-+     return -1;
-+ 
-    COPY_HARD_REG_SET (used,
-                    call_preserved ? call_used_reg_set : fixed_reg_set);
-*************** stupid_mark_refs (x, insn)
-*** 488,491 ****
---- 513,519 ----
-             if (last_call_suid < reg_where_dead[regno])
-               reg_n_calls_crossed[regno] += 1;
-+ 
-+            if (last_setjmp_suid < reg_where_dead[regno])
-+              regs_crosses_setjmp[regno] = 1;
-           }
-       }
-diff -rcp2N gcc-2.7.2.2/toplev.c g77-new/toplev.c
-*** gcc-2.7.2.2/toplev.c       Fri Oct 20 17:56:35 1995
---- g77-new/toplev.c   Sun Aug 10 18:43:36 1997
-*************** int flag_unroll_loops;
-*** 388,391 ****
---- 388,405 ----
-  int flag_unroll_all_loops;
-  
-+ /* Nonzero forces all invariant computations in loops to be moved
-+    outside the loop. */
-+ 
-+ int flag_move_all_movables = 0;
-+ 
-+ /* Nonzero forces all general induction variables in loops to be
-+    strength reduced. */
-+ 
-+ int flag_reduce_all_givs = 0;
-+ 
-+ /* Nonzero gets another run of loop_optimize performed. */
-+ 
-+ int flag_rerun_loop_opt = 0;
-+ 
-  /* Nonzero for -fwritable-strings:
-     store string constants in data segment and don't uniquize them.  */
-*************** int flag_gnu_linker = 1;
-*** 522,525 ****
---- 536,550 ----
-  int flag_pack_struct = 0;
-  
-+ /* 1 if alias checking is on (by default, when -O).  */
-+ int flag_alias_check = 0;
-+ 
-+ /* 0 if pointer arguments may alias each other.  True in C.
-+    1 if pointer arguments may not alias each other but may alias
-+    global variables.
-+    2 if pointer arguments may not alias each other and may not
-+    alias global variables.  True in Fortran.
-+    This defaults to 0 for C.  */
-+ int flag_argument_noalias = 0;
-+ 
-  /* Table of language-independent -f options.
-     STRING is the option name.  VARIABLE is the address of the variable.
-*************** struct { char *string; int *variable; in
-*** 542,545 ****
---- 567,573 ----
-    {"unroll-loops", &flag_unroll_loops, 1},
-    {"unroll-all-loops", &flag_unroll_all_loops, 1},
-+   {"move-all-movables", &flag_move_all_movables, 1},
-+   {"reduce-all-givs", &flag_reduce_all_givs, 1},
-+   {"rerun-loop-opt", &flag_rerun_loop_opt, 1},
-    {"writable-strings", &flag_writable_strings, 1},
-    {"peephole", &flag_no_peephole, 0},
-*************** struct { char *string; int *variable; in
-*** 568,572 ****
-    {"gnu-linker", &flag_gnu_linker, 1},
-    {"pack-struct", &flag_pack_struct, 1},
-!   {"bytecode", &output_bytecode, 1}
-  };
-  
---- 596,604 ----
-    {"gnu-linker", &flag_gnu_linker, 1},
-    {"pack-struct", &flag_pack_struct, 1},
-!   {"bytecode", &output_bytecode, 1},
-!   {"alias-check", &flag_alias_check, 1},
-!   {"argument-alias", &flag_argument_noalias, 0},
-!   {"argument-noalias", &flag_argument_noalias, 1},
-!   {"argument-noalias-global", &flag_argument_noalias, 2}
-  };
-  
-*************** rest_of_compilation (decl)
-*** 2715,2725 ****
-        finish_compilation will call rest_of_compilation again
-        for those functions that need to be output.  Also defer those
-!       functions that we are supposed to defer.  */
-! 
-!       if (DECL_DEFER_OUTPUT (decl)
-!        || ((specd || DECL_INLINE (decl))
-!            && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-!                 && ! flag_keep_inline_functions)
-!                || DECL_EXTERNAL (decl))))
-       {
-         DECL_DEFER_OUTPUT (decl) = 1;
---- 2747,2760 ----
-        finish_compilation will call rest_of_compilation again
-        for those functions that need to be output.  Also defer those
-!       functions that we are supposed to defer.  We cannot defer
-!       functions containing nested functions since the nested function
-!       data is in our non-saved obstack.  */
-! 
-!       if (! current_function_contains_functions
-!        && (DECL_DEFER_OUTPUT (decl)
-!            || ((specd || DECL_INLINE (decl))
-!                && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-!                     && ! flag_keep_inline_functions)
-!                    || DECL_EXTERNAL (decl)))))
-       {
-         DECL_DEFER_OUTPUT (decl) = 1;
-*************** rest_of_compilation (decl)
-*** 2893,2897 ****
---- 2928,2951 ----
-        TIMEVAR (loop_time,
-              {
-+               int save_unroll_flag;
-+               int save_unroll_all_flag;
-+ 
-+               if (flag_rerun_loop_opt)
-+                 {
-+                   save_unroll_flag = flag_unroll_loops;
-+                   save_unroll_all_flag = flag_unroll_all_loops;
-+                   flag_unroll_loops = 0;
-+                   flag_unroll_all_loops = 0;
-+                 }
-+ 
-                loop_optimize (insns, loop_dump_file);
-+ 
-+               if (flag_rerun_loop_opt)
-+                 {
-+                   flag_unroll_loops = save_unroll_flag;
-+                   flag_unroll_all_loops = save_unroll_all_flag;
-+ 
-+                   loop_optimize (insns, loop_dump_file);
-+                 }
-              });
-      }
-*************** rest_of_compilation (decl)
-*** 3280,3283 ****
---- 3334,3341 ----
-    resume_temporary_allocation ();
-  
-+   /* Show no temporary slots allocated.  */
-+ 
-+   init_temp_slots ();
-+ 
-    /* The parsing time is all the time spent in yyparse
-       *except* what is spent in this function.  */
-*************** main (argc, argv, envp)
-*** 3383,3386 ****
---- 3441,3445 ----
-        flag_omit_frame_pointer = 1;
-  #endif
-+       flag_alias_check = 1;
-      }
-  
-diff -rcp2N gcc-2.7.2.2/tree.c g77-new/tree.c
-*** gcc-2.7.2.2/tree.c Sun Oct  1 21:26:56 1995
---- g77-new/tree.c     Sun Aug 10 18:47:23 1997
-*************** build_string (len, str)
-*** 1428,1436 ****
-  /* Return a newly constructed COMPLEX_CST node whose value is
-     specified by the real and imaginary parts REAL and IMAG.
-!    Both REAL and IMAG should be constant nodes.
-!    The TREE_TYPE is not initialized.  */
-  
-  tree
-! build_complex (real, imag)
-       tree real, imag;
-  {
---- 1428,1437 ----
-  /* Return a newly constructed COMPLEX_CST node whose value is
-     specified by the real and imaginary parts REAL and IMAG.
-!    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
-!    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
-  
-  tree
-! build_complex (type, real, imag)
-!      tree type;
-       tree real, imag;
-  {
-*************** build_complex (real, imag)
-*** 1439,1443 ****
-    TREE_REALPART (t) = real;
-    TREE_IMAGPART (t) = imag;
-!   TREE_TYPE (t) = build_complex_type (TREE_TYPE (real));
-    TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
-    TREE_CONSTANT_OVERFLOW (t)
---- 1440,1444 ----
-    TREE_REALPART (t) = real;
-    TREE_IMAGPART (t) = imag;
-!   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
-    TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
-    TREE_CONSTANT_OVERFLOW (t)
-*************** integer_zerop (expr)
-*** 1484,1487 ****
---- 1485,1489 ----
-  
-    return ((TREE_CODE (expr) == INTEGER_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && TREE_INT_CST_LOW (expr) == 0
-          && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_onep (expr)
-*** 1501,1504 ****
---- 1503,1507 ----
-  
-    return ((TREE_CODE (expr) == INTEGER_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && TREE_INT_CST_LOW (expr) == 1
-          && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_all_onesp (expr)
-*** 1525,1529 ****
-      return 1;
-  
-!   else if (TREE_CODE (expr) != INTEGER_CST)
-      return 0;
-  
---- 1528,1533 ----
-      return 1;
-  
-!   else if (TREE_CODE (expr) != INTEGER_CST
-!         || TREE_CONSTANT_OVERFLOW (expr))
-      return 0;
-  
-*************** integer_pow2p (expr)
-*** 1574,1578 ****
-      return 1;
-  
-!   if (TREE_CODE (expr) != INTEGER_CST)
-      return 0;
-  
---- 1578,1582 ----
-      return 1;
-  
-!   if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
-      return 0;
-  
-*************** real_zerop (expr)
-*** 1596,1599 ****
---- 1600,1604 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_onep (expr)
-*** 1611,1614 ****
---- 1616,1620 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_twop (expr)
-*** 1626,1629 ****
---- 1632,1636 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** staticp (arg)
-*** 2055,2061 ****
-        return 1;
-  
-      case COMPONENT_REF:
-      case BIT_FIELD_REF:
-!       return staticp (TREE_OPERAND (arg, 0));
-  
-  #if 0
---- 2062,2073 ----
-        return 1;
-  
-+       /* If we are referencing a bitfield, we can't evaluate an
-+       ADDR_EXPR at compile time and so it isn't a constant.  */
-      case COMPONENT_REF:
-+       return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
-+            && staticp (TREE_OPERAND (arg, 0)));
-+ 
-      case BIT_FIELD_REF:
-!       return 0;
-  
-  #if 0
-*************** contains_placeholder_p (exp)
-*** 2157,2160 ****
---- 2169,2174 ----
-    if (code == WITH_RECORD_EXPR)
-      return 0;
-+   else if (code == PLACEHOLDER_EXPR)
-+     return 1;
-  
-    switch (TREE_CODE_CLASS (code))
-*************** substitute_in_expr (exp, f, r)
-*** 2204,2207 ****
---- 2218,2222 ----
-  {
-    enum tree_code code = TREE_CODE (exp);
-+   tree op0, op1, op2;
-    tree new = 0;
-    tree inner;
-*************** substitute_in_expr (exp, f, r)
-*** 2225,2231 ****
-       {
-       case 1:
-!        new = fold (build1 (code, TREE_TYPE (exp),
-!                            substitute_in_expr (TREE_OPERAND (exp, 0),
-!                                                f, r)));
-         break;
-  
---- 2240,2248 ----
-       {
-       case 1:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-!        
-!        new = fold (build1 (code, TREE_TYPE (exp), op0));
-         break;
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2238,2245 ****
-           abort ();
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1),
-!                                               f, r)));
-         break;
-  
---- 2255,2264 ----
-           abort ();
-  
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1));
-         break;
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2253,2261 ****
-           abort ();
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 2),
-!                                               f, r)));
-       }
-  
---- 2272,2283 ----
-           abort ();
-  
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-!            && op2 == TREE_OPERAND (exp, 2))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
-       }
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2276,2302 ****
-           return r;
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-                            TREE_OPERAND (exp, 1)));
-         break;
-  
-       case BIT_FIELD_REF:
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 2), f, r)));
-         break;
-  
-       case INDIRECT_REF:
-       case BUFFER_REF:
-!        new = fold (build1 (code, TREE_TYPE (exp),
-!                            substitute_in_expr (TREE_OPERAND (exp, 0),
-!                                                f, r)));
-         break;
-  
-       case OFFSET_REF:
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r)));
-         break;
-       }
---- 2298,2342 ----
-           return r;
-  
-!        /* If this expression hasn't been completed let, leave it 
-!           alone.  */
-!        if (TREE_CODE (inner) == PLACEHOLDER_EXPR
-!            && TREE_TYPE (inner) == 0)
-!          return exp;
-! 
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0,
-                            TREE_OPERAND (exp, 1)));
-         break;
-  
-       case BIT_FIELD_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-!            && op2 == TREE_OPERAND (exp, 2))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
-         break;
-  
-       case INDIRECT_REF:
-       case BUFFER_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-! 
-!        new = fold (build1 (code, TREE_TYPE (exp), op0));
-         break;
-  
-       case OFFSET_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1));
-         break;
-       }
-*************** substitute_in_expr (exp, f, r)
-*** 2311,2454 ****
-  }
-  \f
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
--    return a new type with all size expressions that contain F
--    updated by replacing F with R.  */
-- 
-- tree
-- substitute_in_type (t, f, r)
--      tree t, f, r;
-- {
--   switch (TREE_CODE (t))
--     {
--     case POINTER_TYPE:
--     case VOID_TYPE:
--       return t;
--     case INTEGER_TYPE:
--     case ENUMERAL_TYPE:
--     case BOOLEAN_TYPE:
--     case CHAR_TYPE:
--       if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST
--         && contains_placeholder_p (TYPE_MIN_VALUE (t)))
--        || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST
--            && contains_placeholder_p (TYPE_MAX_VALUE (t))))
--      return build_range_type (t,
--                               substitute_in_expr (TYPE_MIN_VALUE (t), f, r),
--                               substitute_in_expr (TYPE_MAX_VALUE (t), f, r));
--       return t;
-- 
--     case REAL_TYPE:
--       if ((TYPE_MIN_VALUE (t) != 0
--         && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST
--         && contains_placeholder_p (TYPE_MIN_VALUE (t)))
--        || (TYPE_MAX_VALUE (t) != 0
--            && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST
--            && contains_placeholder_p (TYPE_MAX_VALUE (t))))
--      {
--        t = build_type_copy (t);
-- 
--        if (TYPE_MIN_VALUE (t))
--          TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
--        if (TYPE_MAX_VALUE (t))
--          TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
--      }
--       return t;
-- 
--     case COMPLEX_TYPE:
--       return build_complex_type (substitute_in_type (TREE_TYPE (t), f, r));
-- 
--     case OFFSET_TYPE:
--     case METHOD_TYPE:
--     case REFERENCE_TYPE:
--     case FILE_TYPE:
--     case SET_TYPE:
--     case FUNCTION_TYPE:
--     case LANG_TYPE:
--       /* Don't know how to do these yet.  */
--       abort ();
-- 
--     case ARRAY_TYPE:
--       t = build_array_type (substitute_in_type (TREE_TYPE (t), f, r),
--                          substitute_in_type (TYPE_DOMAIN (t), f, r));
--       TYPE_SIZE (t) = 0;
--       layout_type (t);
--       return t;
-- 
--     case RECORD_TYPE:
--     case UNION_TYPE:
--     case QUAL_UNION_TYPE:
--       {
--      tree new = copy_node (t);
--      tree field;
--      tree last_field = 0;
-- 
--      /* Start out with no fields, make new fields, and chain them
--         in.  */
-- 
--      TYPE_FIELDS (new) = 0;
--      TYPE_SIZE (new) = 0;
-- 
--      for (field = TYPE_FIELDS (t); field;
--           field = TREE_CHAIN (field))
--        {
--          tree new_field = copy_node (field);
-- 
--          TREE_TYPE (new_field)
--            = substitute_in_type (TREE_TYPE (new_field), f, r);
-- 
--          /* If this is an anonymous field and the type of this field is
--             a UNION_TYPE or RECORD_TYPE with no elements, ignore it.  If
--             the type just has one element, treat that as the field. 
--             But don't do this if we are processing a QUAL_UNION_TYPE.  */
--          if (TREE_CODE (t) != QUAL_UNION_TYPE && DECL_NAME (new_field) == 0
--              && (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
--                  || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
--            {
--              if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0)
--                continue;
-- 
--              if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0)
--                new_field = TYPE_FIELDS (TREE_TYPE (new_field));
--            }
-- 
--          DECL_CONTEXT (new_field) = new;
--          DECL_SIZE (new_field) = 0;
-- 
--          if (TREE_CODE (t) == QUAL_UNION_TYPE)
--            {
--              /* Do the substitution inside the qualifier and if we find
--                 that this field will not be present, omit it.  */
--              DECL_QUALIFIER (new_field)
--                = substitute_in_expr (DECL_QUALIFIER (field), f, r);
--              if (integer_zerop (DECL_QUALIFIER (new_field)))
--                continue;
--            }
-- 
--          if (last_field == 0)
--            TYPE_FIELDS (new) = new_field;
--          else
--            TREE_CHAIN (last_field) = new_field;
-- 
--          last_field = new_field;
-- 
--          /* If this is a qualified type and this field will always be
--             present, we are done.  */
--          if (TREE_CODE (t) == QUAL_UNION_TYPE
--              && integer_onep (DECL_QUALIFIER (new_field)))
--            break;
--        }
-- 
--      /* If this used to be a qualified union type, but we now know what
--         field will be present, make this a normal union.  */
--      if (TREE_CODE (new) == QUAL_UNION_TYPE
--          && (TYPE_FIELDS (new) == 0
--              || integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
--        TREE_SET_CODE (new, UNION_TYPE);
-- 
--      layout_type (new);
--      return new;
--       }
--     }
-- }
-- \f
-  /* Stabilize a reference so that we can use it any number of times
-     without causing its operands to be evaluated more than once.
---- 2351,2354 ----
-*************** build_type_variant (type, constp, volati
-*** 3141,3145 ****
-       preserve the TYPE_NAME, since there is code that depends on this.  */
-  
-!   for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
-      if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
-       && TYPE_NAME (t) == TYPE_NAME (type))
---- 3041,3045 ----
-       preserve the TYPE_NAME, since there is code that depends on this.  */
-  
-!   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
-      if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
-       && TYPE_NAME (t) == TYPE_NAME (type))
-*************** get_unwidened (op, for_type)
-*** 4051,4055 ****
-    if (TREE_CODE (op) == COMPONENT_REF
-        /* Since type_for_size always gives an integer type.  */
-!       && TREE_CODE (type) != REAL_TYPE)
-      {
-        unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
---- 3951,3957 ----
-    if (TREE_CODE (op) == COMPONENT_REF
-        /* Since type_for_size always gives an integer type.  */
-!       && TREE_CODE (type) != REAL_TYPE
-!       /* Don't crash if field not layed out yet.  */
-!       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
-      {
-        unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
-diff -rcp2N gcc-2.7.2.2/tree.h g77-new/tree.h
-*** gcc-2.7.2.2/tree.h Mon Sep 25 17:49:40 1995
---- g77-new/tree.h     Sun Aug 10 18:47:08 1997
-*************** enum built_in_function
-*** 98,101 ****
---- 98,103 ----
-    BUILT_IN_APPLY,
-    BUILT_IN_RETURN,
-+   BUILT_IN_SETJMP,
-+   BUILT_IN_LONGJMP,
-  
-    /* C++ extensions */
-*************** struct tree_int_cst
-*** 408,411 ****
---- 410,415 ----
-  {
-    char common[sizeof (struct tree_common)];
-+   struct rtx_def *rtl;       /* acts as link to register transfer language
-+                         (rtl) info */
-    HOST_WIDE_INT int_cst_low;
-    HOST_WIDE_INT int_cst_high;
-*************** struct tree_type
-*** 957,960 ****
---- 961,967 ----
-  #define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag)
-  
-+ /* In a PARM_DECL, nonzero if this is a restricted pointer.  */
-+ #define DECL_RESTRICT(NODE) (NODE)->decl.static_ctor_flag
-+ 
-  /* Used to indicate that this DECL represents a compiler-generated entity.  */
-  #define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag)
-*************** extern tree build_int_2_wide           PROTO((HOS
-*** 1176,1180 ****
-  extern tree build_real                       PROTO((tree, REAL_VALUE_TYPE));
-  extern tree build_real_from_int_cst  PROTO((tree, tree));
-! extern tree build_complex            PROTO((tree, tree));
-  extern tree build_string             PROTO((int, char *));
-  extern tree build1                   PROTO((enum tree_code, tree, tree));
---- 1183,1187 ----
-  extern tree build_real                       PROTO((tree, REAL_VALUE_TYPE));
-  extern tree build_real_from_int_cst  PROTO((tree, tree));
-! extern tree build_complex            PROTO((tree, tree, tree));
-  extern tree build_string             PROTO((int, char *));
-  extern tree build1                   PROTO((enum tree_code, tree, tree));
-*************** extern int contains_placeholder_p      PROTO(
-*** 1378,1387 ****
-  extern tree substitute_in_expr               PROTO((tree, tree, tree));
-  
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
--    return a new type with all size expressions that contain F
--    updated by replacing the reference to F with R.  */
-- 
-- extern tree substitute_in_type               PROTO((tree, tree, tree));
-- 
-  /* variable_size (EXP) is like save_expr (EXP) except that it
-     is for the special case of something that is part of a
---- 1385,1388 ----
-*************** extern tree maybe_build_cleanup                PROTO((
-*** 1456,1460 ****
-     and find the ultimate containing object, which is returned.  */
-  
-! extern tree get_inner_reference              PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *));
-  
-  /* Return the FUNCTION_DECL which provides this _DECL with its context,
---- 1457,1463 ----
-     and find the ultimate containing object, which is returned.  */
-  
-! extern tree get_inner_reference              PROTO((tree, int *, int *, tree *,
-!                                             enum machine_mode *, int *,
-!                                             int *, int *));
-  
-  /* Return the FUNCTION_DECL which provides this _DECL with its context,
-diff -rcp2N gcc-2.7.2.2/unroll.c g77-new/unroll.c
-*** gcc-2.7.2.2/unroll.c       Sat Aug 19 17:33:26 1995
---- g77-new/unroll.c   Thu Jul 10 20:09:10 1997
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 268,273 ****
-       structure of the function.  This can happen as a result of the
-       "if (foo) bar; else break;" optimization in jump.c.  */
-  
-!   if (write_symbols != NO_DEBUG)
-      {
-        int block_begins = 0;
---- 268,277 ----
-       structure of the function.  This can happen as a result of the
-       "if (foo) bar; else break;" optimization in jump.c.  */
-+   /* ??? Gcc has a general policy that -g is never supposed to change the code
-+      that the compiler emits, so we must disable this optimization always,
-+      even if debug info is not being output.  This is rare, so this should
-+      not be a significant performance problem.  */
-  
-!   if (1 /* write_symbols != NO_DEBUG */)
-      {
-        int block_begins = 0;
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 633,636 ****
---- 637,657 ----
-      }
-  
-+   if (unroll_type == UNROLL_NAIVE
-+       && GET_CODE (last_loop_insn) == JUMP_INSN
-+       && start_label != JUMP_LABEL (last_loop_insn))
-+     {
-+       /* ??? The loop ends with a conditional branch that does not branch back
-+       to the loop start label.  In this case, we must emit an unconditional
-+       branch to the loop exit after emitting the final branch.
-+       copy_loop_body does not have support for this currently, so we
-+       give up.  It doesn't seem worthwhile to unroll anyways since
-+       unrolling would increase the number of branch instructions
-+       executed.  */
-+       if (loop_dump_stream)
-+      fprintf (loop_dump_stream,
-+               "Unrolling failure: final conditional branch not to loop start\n");
-+       return;
-+     }
-+ 
-    /* Allocate a translation table for the labels and insn numbers.
-       They will be filled in as we copy the insns in the loop.  */
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 995,999 ****
-             for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-               if (local_regno[j])
-!                map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-  
-             /* The last copy needs the compare/branch insns at the end,
---- 1016,1024 ----
-             for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-               if (local_regno[j])
-!                {
-!                  map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-!                  record_base_value (REGNO (map->reg_map[j]),
-!                                     regno_reg_rtx[j]);
-!                }
-  
-             /* The last copy needs the compare/branch insns at the end,
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 1136,1140 ****
-        for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-       if (local_regno[j])
-!        map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-  
-        /* If loop starts with a branch to the test, then fix it so that
---- 1161,1169 ----
-        for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-       if (local_regno[j])
-!        {
-!          map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-!          record_base_value (REGNO (map->reg_map[j]),
-!                             regno_reg_rtx[j]);
-!        }
-  
-        /* If loop starts with a branch to the test, then fix it so that
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1605,1608 ****
---- 1634,1641 ----
-                   int this_giv_inc = INTVAL (giv_inc);
-  
-+                  /* If this DEST_ADDR giv was not split, then ignore it.  */
-+                  if (*tv->location != tv->dest_reg)
-+                    continue;
-+ 
-                   /* Scale this_giv_inc if the multiplicative factors of
-                      the two givs are different.  */
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1631,1635 ****
-                          incrementing the shared pseudo reg more than
-                          once.  */
-!                      if (! tv->same_insn)
-                         {
-                           /* tv->dest_reg may actually be a (PLUS (REG)
---- 1664,1668 ----
-                          incrementing the shared pseudo reg more than
-                          once.  */
-!                      if (! tv->same_insn && ! tv->shared)
-                         {
-                           /* tv->dest_reg may actually be a (PLUS (REG)
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1757,1760 ****
---- 1790,1794 ----
-                     giv_dest_reg = tem;
-                     map->reg_map[regno] = tem;
-+                    record_base_value (REGNO (tem), giv_src_reg);
-                   }
-                 else
-*************** iteration_info (iteration_var, initial_v
-*** 2220,2231 ****
-        return;
-      }
-!   /* Reject iteration variables larger than the host long size, since they
-       could result in a number of iterations greater than the range of our
-!      `unsigned long' variable loop_n_iterations.  */
-!   else if (GET_MODE_BITSIZE (GET_MODE (iteration_var)) > HOST_BITS_PER_LONG)
-      {
-        if (loop_dump_stream)
-       fprintf (loop_dump_stream,
-!               "Loop unrolling: Iteration var rejected because mode larger than host long.\n");
-        return;
-      }
---- 2254,2266 ----
-        return;
-      }
-!   /* Reject iteration variables larger than the host wide int size, since they
-       could result in a number of iterations greater than the range of our
-!      `unsigned HOST_WIDE_INT' variable loop_n_iterations.  */
-!   else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
-!          > HOST_BITS_PER_WIDE_INT))
-      {
-        if (loop_dump_stream)
-       fprintf (loop_dump_stream,
-!               "Loop unrolling: Iteration var rejected because mode too large.\n");
-        return;
-      }
-*************** find_splittable_regs (unroll_type, loop_
-*** 2443,2447 ****
-               {
-                 rtx tem = gen_reg_rtx (bl->biv->mode);
-!                
-                 emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                                   loop_start);
---- 2478,2483 ----
-               {
-                 rtx tem = gen_reg_rtx (bl->biv->mode);
-! 
-!                record_base_value (REGNO (tem), bl->biv->add_val);
-                 emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                                   loop_start);
-*************** find_splittable_regs (unroll_type, loop_
-*** 2500,2503 ****
---- 2536,2541 ----
-                exits.  */
-             rtx tem = gen_reg_rtx (bl->biv->mode);
-+            record_base_value (REGNO (tem), bl->biv->add_val);
-+ 
-             emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                               loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2675,2678 ****
---- 2713,2717 ----
-             rtx tem = gen_reg_rtx (bl->biv->mode);
-  
-+            record_base_value (REGNO (tem), bl->biv->add_val);
-             emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                               loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2716,2719 ****
---- 2755,2759 ----
-               {
-                 rtx tem = gen_reg_rtx (v->mode);
-+                record_base_value (REGNO (tem), v->add_val);
-                 emit_iv_add_mult (bl->initial_value, v->mult_val,
-                                   v->add_val, tem, loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2734,2747 ****
-                register for the split addr giv, just to be safe.  */
-  
-!            /* ??? If there are multiple address givs which have been
-!               combined with the same dest_reg giv, then we may only need
-!               one new register for them.  Pulling out constants below will
-!               catch some of the common cases of this.  Currently, I leave
-!               the work of simplifying multiple address givs to the
-!               following cse pass.  */
-!            
-!            /* As a special case, if we have multiple identical address givs
-!               within a single instruction, then we do use a single pseudo
-!               reg for both.  This is necessary in case one is a match_dup
-                of the other.  */
-  
---- 2774,2780 ----
-                register for the split addr giv, just to be safe.  */
-  
-!            /* If we have multiple identical address givs within a
-!               single instruction, then use a single pseudo reg for
-!               both.  This is necessary in case one is a match_dup
-                of the other.  */
-  
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2756,2759 ****
---- 2789,2812 ----
-                            INSN_UID (v->insn));
-               }
-+            /* If multiple address GIVs have been combined with the
-+               same dest_reg GIV, do not create a new register for
-+               each.  */
-+            else if (unroll_type != UNROLL_COMPLETELY
-+                     && v->giv_type == DEST_ADDR
-+                     && v->same && v->same->giv_type == DEST_ADDR
-+                     && v->same->unrolled
-+ #ifdef ADDRESS_COST
-+                     /* combine_givs_p may return true when ADDRESS_COST is
-+                        defined even if the multiply and add values are
-+                        not equal.  To share a register here, the values
-+                        must be equal, as well as related.  */
-+                     && rtx_equal_p (v->mult_val, v->same->mult_val)
-+                     && rtx_equal_p (v->add_val, v->same->add_val)
-+ #endif
-+                     )
-+              {
-+                v->dest_reg = v->same->dest_reg;
-+                v->shared = 1;
-+              }
-             else if (unroll_type != UNROLL_COMPLETELY)
-               {
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2761,2765 ****
-                    register to hold the split value of the DEST_ADDR giv.
-                    Emit insn to initialize its value before loop start.  */
-!                tem = gen_reg_rtx (v->mode);
-  
-                 /* If the address giv has a constant in its new_reg value,
---- 2814,2821 ----
-                    register to hold the split value of the DEST_ADDR giv.
-                    Emit insn to initialize its value before loop start.  */
-! 
-!                rtx tem = gen_reg_rtx (v->mode);
-!                record_base_value (REGNO (tem), v->add_val);
-!                v->unrolled = 1;
-  
-                 /* If the address giv has a constant in its new_reg value,
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2772,2781 ****
-                     v->dest_reg
-                       = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!                    
-                     /* Only succeed if this will give valid addresses.
-                        Try to validate both the first and the last
-                        address resulting from loop unrolling, if
-                        one fails, then can't do const elim here.  */
-!                    if (! verify_addresses (v, giv_inc, unroll_number))
-                       {
-                         /* Save the negative of the eliminated const, so
---- 2828,2837 ----
-                     v->dest_reg
-                       = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-! 
-                     /* Only succeed if this will give valid addresses.
-                        Try to validate both the first and the last
-                        address resulting from loop unrolling, if
-                        one fails, then can't do const elim here.  */
-!                    if (verify_addresses (v, giv_inc, unroll_number))
-                       {
-                         /* Save the negative of the eliminated const, so
-*************** final_biv_value (bl, loop_start, loop_en
-*** 3061,3064 ****
---- 3117,3121 ----
-  
-         tem = gen_reg_rtx (bl->biv->mode);
-+        record_base_value (REGNO (tem), bl->biv->add_val);
-         /* Make sure loop_end is not the last insn.  */
-         if (NEXT_INSN (loop_end) == 0)
-*************** final_giv_value (v, loop_start, loop_end
-*** 3154,3157 ****
---- 3211,3215 ----
-         /* Put the final biv value in tem.  */
-         tem = gen_reg_rtx (bl->biv->mode);
-+        record_base_value (REGNO (tem), bl->biv->add_val);
-         emit_iv_add_mult (increment, GEN_INT (loop_n_iterations),
-                           bl->initial_value, tem, insert_before);
-diff -rcp2N gcc-2.7.2.2/varasm.c g77-new/varasm.c
-*** gcc-2.7.2.2/varasm.c       Thu Aug 31 19:02:53 1995
---- g77-new/varasm.c   Sun Aug 10 22:26:32 1997
-*************** assemble_variable (decl, top_level, at_e
-*** 1067,1070 ****
---- 1067,1072 ----
-    if (! dont_output_data)
-      {
-+       int size;
-+ 
-        if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-       goto finish;
-*************** assemble_variable (decl, top_level, at_e
-*** 1072,1078 ****
-        /* This is better than explicit arithmetic, since it avoids overflow.  */
-        size_tree = size_binop (CEIL_DIV_EXPR,
-!                        DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-  
-!       if (TREE_INT_CST_HIGH (size_tree) != 0)
-       {
-         error_with_decl (decl, "size of variable `%s' is too large");
---- 1074,1082 ----
-        /* This is better than explicit arithmetic, since it avoids overflow.  */
-        size_tree = size_binop (CEIL_DIV_EXPR,
-!                            DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-  
-!       size = TREE_INT_CST_LOW (size_tree);
-!       if (TREE_INT_CST_HIGH (size_tree) != 0
-!        || size != TREE_INT_CST_LOW (size_tree))
-       {
-         error_with_decl (decl, "size of variable `%s' is too large");
-*************** decode_addr_const (exp, value)
-*** 2132,2135 ****
---- 2136,2140 ----
-      case COMPLEX_CST:
-      case CONSTRUCTOR:
-+     case INTEGER_CST:
-        x = TREE_CST_RTL (target);
-        break;
-*************** const_hash (exp)
-*** 2247,2251 ****
-      return const_hash (TREE_OPERAND (exp, 0)) * 9
-        +  const_hash (TREE_OPERAND (exp, 1));
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR)
-      return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-  
---- 2252,2256 ----
-      return const_hash (TREE_OPERAND (exp, 0)) * 9
-        +  const_hash (TREE_OPERAND (exp, 1));
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
-      return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-  
-*************** compare_constant_1 (exp, p)
-*** 2401,2405 ****
-        return p;
-      }
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR)
-      {
-        p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
---- 2406,2410 ----
-        return p;
-      }
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
-      {
-        p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
-*************** copy_constant (exp)
-*** 2633,2637 ****
-  
-      case COMPLEX_CST:
-!       return build_complex (copy_constant (TREE_REALPART (exp)),
-                           copy_constant (TREE_IMAGPART (exp)));
-  
---- 2638,2643 ----
-  
-      case COMPLEX_CST:
-!       return build_complex (TREE_TYPE (exp),
-!                          copy_constant (TREE_REALPART (exp)),
-                           copy_constant (TREE_IMAGPART (exp)));
-  
-*************** copy_constant (exp)
-*** 2644,2647 ****
---- 2650,2654 ----
-      case NOP_EXPR:
-      case CONVERT_EXPR:
-+     case NON_LVALUE_EXPR:
-        return build1 (TREE_CODE (exp), TREE_TYPE (exp),
-                    copy_constant (TREE_OPERAND (exp, 0)));
-*************** output_constant_def (exp)
-*** 2690,2696 ****
-    register rtx def;
-  
--   if (TREE_CODE (exp) == INTEGER_CST)
--     abort ();                        /* No TREE_CST_RTL slot in these.  */
-- 
-    if (TREE_CST_RTL (exp))
-      return TREE_CST_RTL (exp);
---- 2697,2700 ----
-*************** bc_assemble_integer (exp, size)
-*** 3620,3624 ****
-    exp = fold (exp);
-    
-!   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR)
-      exp = TREE_OPERAND (exp, 0);
-    if (TREE_CODE (exp) == INTEGER_CST)
---- 3624,3629 ----
-    exp = fold (exp);
-    
-!   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
-!       || TREE_CODE (exp) == NON_LVALUE_EXPR)
-      exp = TREE_OPERAND (exp, 0);
-    if (TREE_CODE (exp) == INTEGER_CST)
-*************** bc_assemble_integer (exp, size)
-*** 3631,3639 ****
-        const_part = TREE_OPERAND (exp, 0);
-        while (TREE_CODE (const_part) == NOP_EXPR
-!           || TREE_CODE (const_part) == CONVERT_EXPR)
-       const_part = TREE_OPERAND (const_part, 0);
-        addr_part = TREE_OPERAND (exp, 1);
-        while (TREE_CODE (addr_part) == NOP_EXPR
-!           || TREE_CODE (addr_part) == CONVERT_EXPR)
-       addr_part = TREE_OPERAND (addr_part, 0);
-        if (TREE_CODE (const_part) != INTEGER_CST)
---- 3636,3646 ----
-        const_part = TREE_OPERAND (exp, 0);
-        while (TREE_CODE (const_part) == NOP_EXPR
-!           || TREE_CODE (const_part) == CONVERT_EXPR
-!           || TREE_CODE (const_part) == NON_LVALUE_EXPR)
-       const_part = TREE_OPERAND (const_part, 0);
-        addr_part = TREE_OPERAND (exp, 1);
-        while (TREE_CODE (addr_part) == NOP_EXPR
-!           || TREE_CODE (addr_part) == CONVERT_EXPR
-!           || TREE_CODE (addr_part) == NON_LVALUE_EXPR)
-       addr_part = TREE_OPERAND (addr_part, 0);
-        if (TREE_CODE (const_part) != INTEGER_CST)
-diff -rcp2N gcc-2.7.2.2/version.c g77-new/version.c
-*** gcc-2.7.2.2/version.c      Thu Feb 20 19:24:33 1997
---- g77-new/version.c  Sun Aug 10 19:28:55 1997
-***************
-*** 1 ****
-! char *version_string = "2.7.2.2";
---- 1 ----
-! char *version_string = "2.7.2.2.f.3b";
diff --git a/gcc/f/gbe/2.7.2.3.diff b/gcc/f/gbe/2.7.2.3.diff
deleted file mode 100644 (file)
index d064bd8..0000000
+++ /dev/null
@@ -1,13492 +0,0 @@
-IMPORTANT: After applying this patch, you must rebuild the
-Info documentation derived from the Texinfo files in the
-gcc distribution, as this patch does not include patches
-to any derived files (due to differences in the way gcc
-version 2.7.2.2 is obtained by users).  Use the following
-command sequence after applying this patch:
-
-  cd gcc-2.7.2.3; make -f Makefile.in gcc.info
-
-If that fails due to `makeinfo' not being installed, obtain
-texinfo-3.11.tar.gz from a GNU distribution site, unpack,
-build, and install it, and try the above command sequence
-again.
-
-NOTE: You probably will have trouble with the `ChangeLog'
-file in this patch.  That's because gcc version 2.7.2.2 itself
-had an incomplete patch file (gcc-2.7.2.2-2.7.2.3.diff.gz
-omitted the patch to gcc/ChangeLog), which in turn "infected"
-both forms of the 2.7.2.3 distribution (the .tar.gz and .diff.gz
-file, neither of which has the proper gcc/ChangeLog file).
-
-The following patch's gcc/ChangeLog patchlet assumes a
-"fixed" gcc-2.7.2.3/ChangeLog, and then further "fixes" it
-to sort the pertinent entries in the usual chronological order.
-
-If you start with the gcc-2.7.2.2.tar.gz distribution, apply
-the gcc-2.7.2.2-2.7.2.3.diff.gz patch, "fix up" the gcc/ChangeLog
-file so the new material ends up "above" the single large
-2.7.2.2 release entry (dated "Tue Jan 29 02:47:13 1997"), then
-you *should* be able to apply this patch file cleanly.
-
-In any case, don't worry; the contents of gcc/ChangeLog aren't
-really important to non-developers of gcc.
-
-
-diff -rcp2N gcc-2.7.2.3/ChangeLog gcc-2.7.2.3.f.1/ChangeLog
-*** gcc-2.7.2.3/ChangeLog      Sun Aug 31 09:41:00 1997
---- gcc-2.7.2.3.f.1/ChangeLog  Tue Sep  9 04:24:28 1997
-***************
-*** 1,6 ****
---- 1,36 ----
-+ Wed Sep  3 12:26:33 1997  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * alias.c (true_dependence): Address with AND can alias scalars.
-+      (anti_dependence, output_dependence): Likewise.
-+      
-+ Wed Sep  3 10:36:51 1997  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * alias.c (true_dependence): Test x for BLKmode, in addition to mem.
-+ 
-+ Sat Aug 30 16:42:50 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * reload.c (find_reloads): Fix 1997-07-28 fix so the
-+      loop to handle MATCH_DUPs is disabled when insn_code_number
-+      is <= 0, because in that case recog_dup_loc is not
-+      relevant.
-+ 
-+ Tue Aug 26 01:52:17 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      From Stan Cox <coxs@dg-rtp.dg.com>
-+      * reg-stack.c (subst_stack_regs): Cope with computed goto
-+      (`GOTO I' in FORTRAN; `goto *lab;' in GNU C).
-+ 
-  Thu Aug 22 23:47:38 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-  
-       * Version 2.7.2.3 released.
-  
-+ Fri Aug 22 21:31:54 1997  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * alias.c (true_dependence): Pass x_addr not x to varies.
-+ 
-+ Sun Aug 17 03:31:44 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * Makefile.in: Comment out lines containing just formfeeds.
-+ 
-  Wed Aug 13 08:28:18 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-  
-*************** Wed Aug 13 08:28:18 1997  H.J. Lu  (hjl@
-*** 26,33 ****
-       (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
-  
-! 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.
-  
-  Fri Aug  8 08:15:55 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
---- 56,81 ----
-       (FINALIZE_TRAMPOLINE, CLEAR_INSN_CACHE): New.
-  
-! Sun Aug 10 22:23:10 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-  
-!      * explow.c (probe_stack_range): Add USE for test_addr if -O0.
-! 
-! Sun Aug 10 18:14:24 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      Integrate C front end part of patch for better alias
-!      handling from John Carr <jfc@mit.edu>:
-!      * c-decl.c (grokdeclarator): Check for RID_RESTRICT
-!      flag; diagnose certain misuses; set DECL_RESTRICT as
-!      appropriate.
-!      * c-lex.c (init_lex): Set up RID_RESTRICT pointer.
-!      Unset `restrict' as reserved word.
-!      * c-lex.h: Replace RID_NOALIAS with RID_RESTRICT.
-!      * c-parse.gperf: Add `restrict' and `__restrict'
-!      keywords.
-!      * tree.h: Add DECL_RESTRICT flag.
-! 
-! Sun Aug 10 14:50:30 1997  Jim Wilson  <wilson@cygnus.com>
-! 
-!      * sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
-!      has integer TYPE_{MAX,MIN}_VALUE before using them.
-  
-  Fri Aug  8 08:15:55 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-*************** Fri Aug  8 08:15:55 1997  H.J. Lu  (hjl@
-*** 38,41 ****
---- 86,143 ----
-       * install1.texi: New.
-  
-+ Mon Aug  4 17:49:14 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * combine.c (try_combine): If have PARALLEL of independent SETs
-+      and have cc0, ensure insn using CC0 come first.
-+ 
-+ Sat Aug  2 08:03:04 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * varasm.c (compare_constant_1, case STRING_CST): Compare TYPE_MODE.
-+      (record_constant_1, case STRING_CST): Record TYPE_MODE.
-+ 
-+ Sat Aug  2 08:03:04 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * 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.
-+ 
-+ Mon Jul 28 15:35:38 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * combine.c (num_sign_bit_copies): Speed up the 961126-1.c
-+      case of repeated (neg (neg (neg ...))) so c-torture runs
-+      in less time.
-+ 
-+      * reload.c (find_reloads_toplev, find_reloads_address):
-+      These now return whether replacement by a constant, so
-+      caller can know to do other replacements.  Currently if
-+      caller doesn't want that info and such replacement would
-+      happen, we crash so as to investigate the problem and
-+      learn more about it.  All callers updated.
-+      (find_reloads): If pseudo replaced by constant, always
-+      update duplicates of it.
-+ 
-+ Sun Jul 27 12:13:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * expr.c (expand_expr, case SAVE_EXPR): Handle top-level SAVE_EXPR by
-+      moving into current function; abort if in odd context.
-+      * fold-const.c (fold_truthop, fold): Avoid making SAVE_EXPR
-+      if at top level.
-+ 
-+      * 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 08:38:37 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.
-+ 
-  Mon Jul 21 22:47:13 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-  
-*************** Mon Jul 21 22:47:13 1997  H.J. Lu  (hjl@
-*** 43,46 ****
---- 145,213 ----
-       for Linux.
-  
-+ Mon Jul 21 00:00:24 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (size_binop): Make sure overflows
-+      are flagged properly, so as to avoid silently generating
-+      bad code for, e.g., a too-large array.
-+ 
-+ Sun Jul 20 06:10:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * 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 17:54:28 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * alpha.h (STACK_CHECK_BUILTIN): New macro.
-+ 
-+ Thu Jul 17 07:02:10 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".
-+ 
-+ Sun Jul 13 22:23:14 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * stmt.c (expand_expr_stmt): Must generate code for
-+      statements within an expression (gcc's `({ ... )}')
-+      even if -fsyntax-only.
-+ 
-+ Sun Jul 13 15:14:48 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-+ 
-+      * m68k.md (tstdi, cmpdi): Disable.
-+ 
-+ Tue Jul  1 23:27:43 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.
-+ 
-+ Mon Jun 30 17:23:07 1997  Michael Meissner  <meissner@cygnus.com>
-+ 
-+      * gcc.c (process_command): If -save-temps and -pipe were specified
-+      together, don't do -pipe.
-+ 
-+ Thu Jun 26 05:40:46 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * stor-layout.c (get_best_mode): Handle negative bitpos
-+      correctly, so caller doesn't get into infinite recursion
-+      trying to cope with a spurious VOIDmode.
-+ 
-+ Tue Jun 24 19:46:31 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.
-+ 
-  Tue Jun 24 11:24:56 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)
-  
-*************** Mon Jun 23 22:48:00 1997  Jim Wilson  <w
-*** 69,92 ****
-       to biv_count for reduced givs.
-  
-! 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} (FINISH_INIT_TRAMPOLINE):
-!      Rename to FINALIZE_TRAMPOLINE.
-  
-! 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.
-  
-  Tue Jan 29 02:47:13 1997  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
---- 236,433 ----
-       to biv_count for reduced givs.
-  
-! Sat Jun 21 12:09:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-  
-!      * toplev.c (rest_of_compilation): Also temporarily set
-!      flag_unroll_all_loops to 0 during first of two calls
-!      to loop_optimize, and clean up code a bit to make it
-!      easier to read.
-  
-!      * expr.c (safe_from_p_1, safe_from_p): Fix these to use
-!      TREE_SET_CODE instead of TREE_CODE.
-  
-! Thu Jun 19 19:30:47 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * config/alpha/alpha.c: Don't include <stamp.h> on
-!      GNU Linux machines.
-! 
-!      * config/alpha/elf.c: New file for ELF systems.
-! 
-!      * config/alpha/xm-alpha.h: Don't declare alloca()
-!      if it's already a macro (probably defined in stdlib.h).
-! 
-!      * config/alpha/xm-linux.h (HAVE_STRERROR): #define
-!      this, according to what various people suggest.
-! 
-!      * config.guess, configure: Make some (hopefully safe)
-!      changes, based mostly on gcc-2.8.0-in-development,
-!      in the hopes that these make some systems configure
-!      "out of the box" more easily, especially Alpha systems.
-! 
-! Mon Jun  9 04:26:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * expr.c (safe_from_p): Don't examine a given SAVE_EXPR
-!      node more than once, to avoid combinatorial explosion
-!      in complex expressions.  Fortran case that triggered
-!      this had a complicated *and* complex expression with
-!      293 unique nodes, resulting in 28 minutes of compile
-!      time mostly spent in a single top-level safe_from_p()
-!      call due to all the redundant SAVE_EXPR traversals.
-!      This change reduced the time to around 2 seconds.
-!      (safe_from_p_1): New helper function that does almost
-!      exactly what the old safe_from_p() did.
-! 
-! Fri May 30 11:40:10 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * rs6000.md (movdi): Emit a CLOBBER before the two movsi insns
-!      in constant case.
-! 
-! Sun May 18 21:18:48 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * fold-const.c (fold): Clarify why TRUNC_DIV_EXPR
-!      and FLOOR_DIV_EXPR aren't rewritten to EXACT_DIV_EXPR,
-!      clean up related code.
-! 
-! Sat May 17 15:15: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.
-! 
-! Sat May  3 13:53:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * config.sub: Change all `i[345]' to `i[3456]' to
-!      support Pentium Pro (this change was already made
-!      in configure for gcc-2.7.2.2).
-! 
-!      From Toon Moene <toon@moene.indiv.nluug.nl>:
-!      * toplev.c (rest_of_compilation): Unroll loops
-!      only the final time through loop optimization.
-! 
-! Thu Apr 24 16:39:53 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * stmt.c (pushcase_range): Check for null range first.
-! 
-! Mon Apr 21 16:31:50 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.
-! 
-! Sun Apr 20 10:46:24 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * fold-const.c (operand_equal_p): Constants are not equal if there
-!      has been an overflow.
-! 
-! Sun Apr 20 10:45:35 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * final.c (profile_function): Only call ASM_OUTPUT_REG_{PUSH,POP}
-!      if defined.
-! 
-! Wed Apr 16 22:26:16 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * alias.c, cse.c, loop.c, rtl.c, rtl.h, sched.c:
-!      Make changes submitted by <jfc@mit.edu>.
-! 
-! Wed Apr 16 16:54:18 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * function.c (find_temp_slot_from_address): Compare slots using
-!      rtx_equal_p, not identity comparison.
-!      * expr.c (store_expr): Check if TEMP and TARGET are the
-!      same using rtx_equal_p.
-! 
-! Tue Apr 15 18:03:58 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * rs6000.c (rs6000_output_load_toc_table): New function.
-!      (output_prolog): Delete code from here and call new function.
-!      * rs6000.md (nonlocal_goto_receiver): New pattern.
-! 
-!      * expr.c (expand_assignment, store_field): Use copy_rtx when
-!      need to copy rtx instead of change_address.
-!      (expand_expr, case CONSTRUCTOR, COMPONENT_REF): Likewise.
-! 
-! Sun Apr 13 19:32:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * fold-const.c (fold): If extra warnings enabled,
-!      warn about integer division by zero.
-! 
-! Sun Apr 13 08:15:31 1997  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
-! 
-!      * final.c (profile_function): Save the static chain register
-!      around the call to the profiler function.
-! 
-! Sat Apr 12 14:56:42 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * unroll.c (find_splittable_givs): Permit more cases
-!      of mult_val/add_val to agree by using rtx_equal_p
-!      to compare them instead of requiring them to be
-!      integers with the same value.  Also don't bother
-!      checking if ADDRESS_COST not defined (they will be
-!      equal in that case).
-! 
-! Fri Apr 11 03:30:04 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * unroll.c (find_splittable_givs): Must create a new
-!      register if the mult_val and add_val fields don't
-!      agree.
-! 
-! Fri Apr  4 23:00:55 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * fold-const.c (fold): Don't call multiple_of_p if
-!      arg1 is constant zero, to avoid crashing; simplify
-!      code accordingly.
-! 
-! Mon Mar 24 22:33:40 1997  Dave Love  <d.love@dl.ac.uk>
-! 
-!      * config/i386/i386.h (STACK_BOUNDARY): Define as BIGGEST_ALIGNMENT
-!      so that -malign-double works for stack-allocated data.
-! 
-! Wed Mar 19 12:24:11 1997  Jim Wilson  <wilson@cygnus.com>
-! 
-!      * combine.c (move_deaths): Handle partial REG_DEAD note for
-!      multi-reg hard register.
-! 
-! 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.
-! 
-! Sun Mar 16 19:53:13 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-! 
-!      * expr.c (expand_expr, case PLACEHOLDER_EXPR): Refine which
-!      object is picked.
-! 
-! Mon Mar 10 16:01:44 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.
-! 
-! Wed Feb 26 13:09:33 1997  Michael Meissner  <meissner@cygnus.com>
-! 
-!      * reload.c (debug_reload): Fix format string to print
-!      reload_nocombine[r].
-! 
-! Sun Feb 23 15:26:53 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      * fold-const.c (multiple_of_p): Clean up and improve.
-!      (fold): Clean up invocation of multiple_of_p.
-! 
-! Sun Feb  9 14:03:53 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-! 
-!      * function.c (assign_stack_temp): Clear MEM flags from reuse.
-! 
-! Sat Feb  8 04:53:27 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-! 
-!      From <jfc@jfc.tiac.net> Fri, 07 Feb 1997 22:02:21 -0500:
-!      * alias.c (init_alias_analysis): Reduce amount of time
-!      needed to simplify the reg_base_value array in the
-!      typical case (especially involving function inlining).
-! 
-! Fri Feb  7 07:56:12 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-! 
-!      * function.c (instantiate_virtual_regs_1, case USE, CLOBBER):
-!      Fix error in last change.
-! 
-! Sat Feb  1 18:51:47 1997  Douglas B. Rupp  (rupp@gnat.com)
-! 
-!      * gcc.c (process_command): Fix improper use of strncpy.
-  
-  Tue Jan 29 02:47:13 1997  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>
-*************** Tue Jan 29 02:47:13 1997  Richard Stallm
-*** 109,112 ****
---- 450,532 ----
-       [! LIBC_VERSION_1] (LIB_SPEC): New override definition.
-  
-+ Tue Jan 21 16:09:37 1997  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * function.c (mark_all_temps_used): Set KEEP as well.
-+ 
-+ Fri Jan 10 17:22:17 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      Minor improvements/fixes to better alias handling:
-+      * Makefile.in (alias.o): Fix typo in rule (was RLT_H).
-+      * cse.c, sched.c: Fix up some indenting.
-+      * toplev.c: Add -fargument-alias flag, so Fortran users
-+      can turn C-style aliasing on once g77 defaults to
-+      -fargument-noalias-global.
-+ 
-+      Integrate patch for better alias handling from
-+      John Carr <jfc@mit.edu>:
-+      * Makefile.in (OBJS, alias.o): New module and rule.
-+      * alias.c: New source module.
-+      * calls.c (expand_call): Recognize alias status of calls
-+      to malloc().
-+      * combine.c (distribute_notes): New REG_NOALIAS note.
-+      * rtl.h (REG_NOALIAS): Ditto.
-+      Many other changes for new alias.c module.
-+      * cse.c: Many changes, and much code moved into alias.c.
-+      * flags.h (flag_alias_check, flag_argument_noalias):
-+      New flags.
-+      * toplev.c: New flags and related options.
-+      * local-alloc.c (validate_equiv_mem_from_store):
-+      Caller of true_dependence changed.
-+      * loop.c (NUM_STORES): Increase to 50 from 20.
-+      (prescan_loop): "const" functions don't alter unknown addresses.
-+      (invariant_p): Caller of true_dependence changed.
-+      (record_giv): Zero new unrolled and shared flags.
-+      (emit_iv_add_mult): Record base value for register.
-+      * sched.c: Many changes, mostly moving code to alias.c.
-+      (sched_note_set): SCHED_SORT macro def form, but not function,
-+      inexplicably changed.
-+      * unroll.c: Record base values for registers, etc.
-+ 
-+ Fri Jan  3 04:01:00 1997  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * loop.c (check_final_value): Handle insns with no luid's
-+      appropriately, instead of crashing on INSN_LUID macro
-+      invocations.
-+ 
-+ Mon Dec 23 00:49:19 1996  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * config/alpha/alpha.md: Fix pattern that matches if_then_else
-+      involving DF target, DF comparison, SF source.
-+ 
-+ Fri Dec 20 15:42:52 1996  Craig Burley  <burley@gnu.ai.mit.edu>
-+ 
-+      * fold-const.c (multiple_of_p): New function.
-+      (fold): Use new function to turn *_DIV_EXPR into EXACT_DIV_EXPR.
-+ 
-+ 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.
-+ 
-+ Tue Oct 22 18:32:20 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * unroll.c (unroll_loop): Always reject loops with unbalanced blocks.
-+ 
-+ 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.
-+ 
-+ Mon Aug 12 07:48:54 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.
-+ 
-+ Mon Aug  5 16:53:36 1996  Doug Evans  <dje@fallis.cygnus.com>
-+ 
-+      * stor-layout.c (layout_record): Correct overflow test for 0 sized
-+      fields.
-+ 
-  Sat Jun 29 12:33:39 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
-  
-*************** Tue Jun 11 20:18:03 1996  Per Bothner <b
-*** 118,121 ****
---- 538,551 ----
-       * alpha.h (FIXPROTO_INIT):  Define new macro.
-  
-+ Thu Jun  6 18:24:39 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * fold-cont.c (fold): Don't do anything with evaluated SAVE_EXPR.
-+ 
-+ Sat May 18 20:17:27 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * 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.
-+ 
-  Fri May 10 18:35:00 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-  
-*************** Wed Apr 17 17:53:23 1996  Michael Meissn
-*** 136,139 ****
---- 566,597 ----
-       bits.
-  
-+ 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} (FINISH_INIT_TRAMPOLINE):
-+      Rename to FINALIZE_TRAMPOLINE.
-+ 
-+ 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.
-+ 
-+ Sat Apr 13 07:47:09 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.
-+ 
-  Mon Apr  8 13:46:28 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
-  
-*************** Mon Feb 19 07:35:07 1996  Torbjorn Granl
-*** 176,179 ****
---- 634,642 ----
-          * rs6000.md (not:SI with assign and compare): Fix typo.
-  
-+ Tue Feb 13 17:43:46 1996  Jim Wilson  <wilson@cygnus.com>
-+ 
-+      * integrate.c (save_constants_in_decl_trees): New function.
-+      (save_for_inline_copying, save_for_inline_nocopy): Call it.
-+ 
-  Wed Jan 24 18:00:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
-  
-*************** Tue Jan 16 06:01:28 1996  Thomas Graiche
-*** 191,198 ****
---- 654,686 ----
-       * i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
-  
-+ Mon Jan 15 07:22:59 1996  Michel Delval  (mfd@ccv.fr)
-+ 
-+      * reload.c (find_equiv_reg): Apply single_set, not PATTERN, to WHERE.
-+ 
-  Sun Jan  7 17:11:11 1996  David Edelsohn  <edelsohn@mhpcc.edu>
-  
-       * collect2.c (scan_libraries): Correct Import File ID interpretation.
-  
-+ Sat Jan  6 03:27:49 1996  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>
-+ 
-+         * expr.c (emit_move_insn_1): Don't emit lobber when moving
-+         by parts and source equals destination.
-+ 
-+ Sat Jan  6 03:27:49 1996  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>
-+ 
-+         * optabs.c (expand_fix): Don't copy TARGET to TO if same.
-+ 
-+ Mon Jan  1 09:05:07 1996  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+         * local-alloc.c (reg_equiv_replacement): New variable.
-+         (memref_referenced_p, case REG): Check for reg_equiv_replacement.
-+         (update_equiv_regs): reg_equiv_replacement now file-scope.
-+ 
-+ Fri Dec 22 17:29:42 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * reload.c (find_valid_class): New function.
-+      (push_reload): Use it in cases where a SUBREG and its contents
-+      both need to be reloaded.
-+ 
-  Thu Dec 28 22:24:53 1995  Michael Meissner  <meissner@tiktok.cygnus.com>
-  
-*************** Mon Dec 18 18:40:34 1995  Jim Wilson  <w
-*** 209,212 ****
---- 697,705 ----
-       above.
-  
-+ Sun Dec 17 06:37:00 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
-+ 
-+      * reload.c (push_secondary_reload): Don't strip paradoxical SUBREG
-+      if reload_class is CLASS_CANNOT_CHANGE_SIZE.
-+ 
-  Sat Dec 16 07:03:33 1995  Philippe De Muyter (phdm@info.ucl.ac.be)
-  
-*************** Sat Dec  9 18:05:03 1995  Jim Wilson  <w
-*** 223,226 ****
---- 716,724 ----
-       * expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
-       change.
-+ 
-+ Fri Dec  8 19:17:30 1995  Mike Meissner  <meissner@beauty.cygnus.com>
-+ 
-+      * rs6000/rs6000.c (input_operand): Allow any integer constant, not
-+      just integers that fit in 1 instruction.
-  
-  Sun Nov 26 14:47:42 1995  Richard Kenner  <kenner@mole.gnu.ai.mit.edu>
-diff -rcp2N gcc-2.7.2.3/Makefile.in gcc-2.7.2.3.f.1/Makefile.in
-*** gcc-2.7.2.3/Makefile.in    Sun Aug 31 09:39:41 1997
---- gcc-2.7.2.3.f.1/Makefile.in        Sun Aug 31 09:29:51 1997
-*************** all: all.indirect
-*** 397,401 ****
-  ####cross overrides
-  ####build overrides
-! \f
-  # Now figure out from those variables how to compile and link.
-  
---- 397,401 ----
-  ####cross overrides
-  ####build overrides
-! #\f
-  # Now figure out from those variables how to compile and link.
-  
-*************** INCLUDES = -I. -I$(srcdir) -I$(srcdir)/c
-*** 454,458 ****
-  # defined in this file into the environment.
-  .NOEXPORT:
-! \f
-  # Support for additional languages (other than c and objc).
-  # ??? objc can be supported this way too (leave for later).
---- 454,458 ----
-  # defined in this file into the environment.
-  .NOEXPORT:
-! #\f
-  # Support for additional languages (other than c and objc).
-  # ??? objc can be supported this way too (leave for later).
-*************** FLAGS_TO_PASS = \
-*** 491,495 ****
-       "bindir=$(bindir)" \
-       "libsubdir=$(libsubdir)"
-! \f
-  # Lists of files for various purposes.
-  
---- 491,495 ----
-       "bindir=$(bindir)" \
-       "libsubdir=$(libsubdir)"
-! #\f
-  # Lists of files for various purposes.
-  
-*************** OBJS = toplev.o version.o tree.o print-t
-*** 519,523 ****
-   integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
-   regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-!  insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
-   insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
-   insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
---- 519,523 ----
-   integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
-   regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
-!  insn-peep.o reorg.o alias.o sched.o final.o recog.o reg-stack.o \
-   insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
-   insn-attrtab.o $(out_object_file) getpwd.o convert.o $(EXTRA_OBJS)
-*************** LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udi
-*** 570,574 ****
-      _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
-      _fixtfdi _fixunstfdi _floatditf \
-!     __gcc_bcmp _varargs _eprintf _op_new _op_vnew _new_handler _op_delete \
-      _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
-      _pure
---- 570,575 ----
-      _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
-      _fixtfdi _fixunstfdi _floatditf \
-!     __gcc_bcmp _varargs __dummy _eprintf \
-!     _op_new _op_vnew _new_handler _op_delete \
-      _op_vdel _bb _shtab _clear_cache _trampoline __main _exit _ctors _eh \
-      _pure
-*************** RTL_H = rtl.h rtl.def machmode.h machmod
-*** 585,589 ****
-  TREE_H = tree.h real.h tree.def machmode.h machmode.def
-  BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
-! \f
-  # Language makefile fragments.
-  
---- 586,590 ----
-  TREE_H = tree.h real.h tree.def machmode.h machmode.def
-  BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
-! #\f
-  # Language makefile fragments.
-  
-*************** BYTECODE_H = bytecode.h bc-emit.h bc-opt
-*** 607,611 ****
-  
-  # End of language makefile fragments.
-! \f
-  # Avoid a lot of time thinking about remaking Makefile.in and *.def.
-  .SUFFIXES: .in .def
---- 608,612 ----
-  
-  # End of language makefile fragments.
-! #\f
-  # Avoid a lot of time thinking about remaking Makefile.in and *.def.
-  .SUFFIXES: .in .def
-*************** xlimits.h: glimits.h limitx.h limity.h
-*** 730,734 ****
-       fi
-       mv tmp-xlimits.h xlimits.h
-! \f
-  # Build libgcc.a.
-  # This is done in two parts because some functions, in libgcc1.c,
---- 731,735 ----
-       fi
-       mv tmp-xlimits.h xlimits.h
-! #\f
-  # Build libgcc.a.
-  # This is done in two parts because some functions, in libgcc1.c,
-*************** stamp-crtS:    stamp-crt crtstuff.c $(GCC_P
-*** 1042,1046 ****
-       mv crtstuff$(objext) crtendS$(objext)
-       touch stamp-crtS
-! \f
-  # Compiling object files from source files.
-  
---- 1043,1047 ----
-       mv crtstuff$(objext) crtendS$(objext)
-       touch stamp-crtS
-! #\f
-  # Compiling object files from source files.
-  
-*************** expr.o : expr.c $(CONFIG_H) $(RTL_H) $(T
-*** 1179,1183 ****
-     insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
-     typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-!    bc-emit.h modemap.def
-  calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
-     insn-flags.h
---- 1180,1184 ----
-     insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
-     typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
-!    bc-emit.h modemap.def hard-reg-set.h
-  calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
-     insn-flags.h
-*************** reorg.o : reorg.c $(CONFIG_H) $(RTL_H) c
-*** 1238,1241 ****
---- 1239,1243 ----
-     basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
-     flags.h output.h
-+ alias.o : $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h
-  sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
-     flags.h insn-config.h insn-attr.h
-*************** alloca.o:      alloca.c
-*** 1275,1279 ****
-         -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
-       $(ALLOCA_FINISH)
-! \f
-  # Generate header and source files from the machine description, 
-  # and compile them.
---- 1277,1281 ----
-         -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
-       $(ALLOCA_FINISH)
-! #\f
-  # Generate header and source files from the machine description, 
-  # and compile them.
-*************** stamp-output : $(md_file) genoutput $(sr
-*** 1400,1404 ****
-       $(srcdir)/move-if-change tmp-output.c insn-output.c
-       touch stamp-output
-! \f
-  # Compile the programs that generate insn-* from the machine description.
-  # They are compiled with $(HOST_CC), and associated libraries,
---- 1402,1406 ----
-       $(srcdir)/move-if-change tmp-output.c insn-output.c
-       touch stamp-output
-! #\f
-  # Compile the programs that generate insn-* from the machine description.
-  # They are compiled with $(HOST_CC), and associated libraries,
-*************** genoutput : genoutput.o $(HOST_RTL) $(HO
-*** 1493,1497 ****
-  genoutput.o : genoutput.c $(RTL_H) $(build_xm_file)
-       $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
-! \f
-  # Compile the libraries to be used by gen*.
-  # If we are not cross-building, gen* use the same .o's that cc1 will use,
---- 1495,1499 ----
-  genoutput.o : genoutput.c $(RTL_H) $(build_xm_file)
-       $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
-! #\f
-  # Compile the libraries to be used by gen*.
-  # If we are not cross-building, gen* use the same .o's that cc1 will use,
-*************** $(HOST_PREFIX_1)malloc.o: malloc.c
-*** 1532,1536 ****
-  $(HOST_PREFIX_1): 
-       touch $(HOST_PREFIX_1)
-! \f
-  # Remake bytecode files.
-  BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
---- 1534,1538 ----
-  $(HOST_PREFIX_1): 
-       touch $(HOST_PREFIX_1)
-! #\f
-  # Remake bytecode files.
-  BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
-*************** bytecode.maintainer-clean: bytecode.clea
-*** 1601,1605 ****
-       -rm -f bi-parser.c bi-parser.h
-  
-! \f
-  # Remake cpp and protoize.
-  
---- 1603,1607 ----
-       -rm -f bi-parser.c bi-parser.h
-  
-! #\f
-  # Remake cpp and protoize.
-  
-*************** test-protoize-simple: ./protoize ./unpro
-*** 1724,1728 ****
-       diff $(srcdir)/protoize.c tmp-proto.c | cat
-       -rm -f tmp-proto.[cs] tmp-proto$(objext)
-! \f
-  # Build the include directory.  The stamp files are stmp-* rather than
-  # stamp-* so that mostlyclean does not force the include directory to
---- 1726,1730 ----
-       diff $(srcdir)/protoize.c tmp-proto.c | cat
-       -rm -f tmp-proto.[cs] tmp-proto$(objext)
-! #\f
-  # Build the include directory.  The stamp files are stmp-* rather than
-  # stamp-* so that mostlyclean does not force the include directory to
-*************** stmp-fixproto: fixhdr.ready fixproto stm
-*** 1862,1866 ****
-       fi
-       touch stmp-fixproto
-! \f
-  # Remake the info files.
-  
---- 1864,1868 ----
-       fi
-       touch stmp-fixproto
-! #\f
-  # Remake the info files.
-  
-*************** $(srcdir)/INSTALL: install1.texi install
-*** 1889,1893 ****
-       cd $(srcdir); $(MAKEINFO) -D INSTALLONLY --no-header \
-               --no-split install1.texi -o INSTALL
-! \f
-  # Deletion of files made during compilation.
-  # There are four levels of this:
---- 1891,1895 ----
-       cd $(srcdir); $(MAKEINFO) -D INSTALLONLY --no-header \
-               --no-split install1.texi -o INSTALL
-! #\f
-  # Deletion of files made during compilation.
-  # There are four levels of this:
-*************** maintainer-clean: distclean bytecode.mai
-*** 2010,2014 ****
-       -rm -f cpp.info* cpp.??s cpp.*aux
-       -rm -f gcc.info* gcc.??s gcc.*aux
-! \f
-  # Entry points `install' and `uninstall'.
-  # Also use `install-collect2' to install collect2 when the config files don't.
---- 2012,2016 ----
-       -rm -f cpp.info* cpp.??s cpp.*aux
-       -rm -f gcc.info* gcc.??s gcc.*aux
-! #\f
-  # Entry points `install' and `uninstall'.
-  # Also use `install-collect2' to install collect2 when the config files don't.
-*************** uninstall: lang.uninstall
-*** 2256,2260 ****
-       -rm -rf $(mandir)/protoize$(manext)
-       -rm -rf $(mandir)/unprotoize$(manext)
-! \f
-  # These exist for maintenance purposes.
-  
---- 2258,2262 ----
-       -rm -rf $(mandir)/protoize$(manext)
-       -rm -rf $(mandir)/unprotoize$(manext)
-! #\f
-  # These exist for maintenance purposes.
-  
-diff -rcp2N gcc-2.7.2.3/alias.c gcc-2.7.2.3.f.1/alias.c
-*** gcc-2.7.2.3/alias.c        Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/alias.c    Tue Sep  9 04:23:32 1997
-***************
-*** 0 ****
---- 1,1004 ----
-+ /* Alias analysis for GNU C, by John Carr (jfc@mit.edu).
-+    Derived in part from sched.c  */
-+ #include "config.h"
-+ #include "rtl.h"
-+ #include "expr.h"
-+ #include "regs.h"
-+ #include "hard-reg-set.h"
-+ #include "flags.h"
-+ 
-+ static rtx canon_rtx                 PROTO((rtx));
-+ static int rtx_equal_for_memref_p    PROTO((rtx, rtx));
-+ static rtx find_symbolic_term                PROTO((rtx));
-+ static int memrefs_conflict_p                PROTO((int, rtx, int, rtx,
-+                                             HOST_WIDE_INT));
-+ 
-+ /* Set up all info needed to perform alias analysis on memory references.  */
-+ 
-+ #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-+ 
-+ /* reg_base_value[N] gives an address to which register N is related.
-+    If all sets after the first add or subtract to the current value
-+    or otherwise modify it so it does not point to a different top level
-+    object, reg_base_value[N] is equal to the address part of the source
-+    of the first set.  The value will be a SYMBOL_REF, a LABEL_REF, or
-+    (address (reg)) to indicate that the address is derived from an
-+    argument or fixed register.  */
-+ rtx *reg_base_value;
-+ unsigned int reg_base_value_size;    /* size of reg_base_value array */
-+ #define REG_BASE_VALUE(X) \
-+      (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
-+ 
-+ /* Vector indexed by N giving the initial (unchanging) value known
-+    for pseudo-register N.  */
-+ rtx *reg_known_value;
-+ 
-+ /* Indicates number of valid entries in reg_known_value.  */
-+ static int reg_known_value_size;
-+ 
-+ /* Vector recording for each reg_known_value whether it is due to a
-+    REG_EQUIV note.  Future passes (viz., reload) may replace the
-+    pseudo with the equivalent expression and so we account for the
-+    dependences that would be introduced if that happens. */
-+ /* ??? This is a problem only on the Convex.  The REG_EQUIV notes created in
-+    assign_parms mention the arg pointer, and there are explicit insns in the
-+    RTL that modify the arg pointer.  Thus we must ensure that such insns don't
-+    get scheduled across each other because that would invalidate the REG_EQUIV
-+    notes.  One could argue that the REG_EQUIV notes are wrong, but solving
-+    the problem in the scheduler will likely give better code, so we do it
-+    here.  */
-+ char *reg_known_equiv_p;
-+ 
-+ /* Inside SRC, the source of a SET, find a base address.  */
-+ 
-+ /* When copying arguments into pseudo-registers, record the (ADDRESS)
-+    expression for the argument directly so that even if the argument
-+    register is changed later (e.g. for a function call) the original
-+    value is noted.  */
-+ static int copying_arguments;
-+ 
-+ static rtx
-+ find_base_value (src)
-+      register rtx src;
-+ {
-+   switch (GET_CODE (src))
-+     {
-+     case SYMBOL_REF:
-+     case LABEL_REF:
-+       return src;
-+ 
-+     case REG:
-+       if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+      return reg_base_value[REGNO (src)];
-+       return src;
-+ 
-+     case MEM:
-+       /* Check for an argument passed in memory.  Only record in the
-+       copying-arguments block; it is too hard to track changes
-+       otherwise.  */
-+       if (copying_arguments
-+        && (XEXP (src, 0) == arg_pointer_rtx
-+            || (GET_CODE (XEXP (src, 0)) == PLUS
-+                && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
-+      return gen_rtx (ADDRESS, VOIDmode, src);
-+       return 0;
-+ 
-+     case CONST:
-+       src = XEXP (src, 0);
-+       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
-+      break;
-+       /* fall through */
-+     case PLUS:
-+     case MINUS:
-+       /* Guess which operand to set the register equivalent to.  */
-+       /* If the first operand is a symbol or the second operand is
-+       an integer, the first operand is the base address.  */
-+       if (GET_CODE (XEXP (src, 0)) == SYMBOL_REF
-+        || GET_CODE (XEXP (src, 0)) == LABEL_REF
-+        || GET_CODE (XEXP (src, 1)) == CONST_INT)
-+      return XEXP (src, 0);
-+       /* If an operand is a register marked as a pointer, it is the base.  */
-+       if (GET_CODE (XEXP (src, 0)) == REG
-+        && REGNO_POINTER_FLAG (REGNO (XEXP (src, 0))))
-+      src = XEXP (src, 0);
-+       else if (GET_CODE (XEXP (src, 1)) == REG
-+        && REGNO_POINTER_FLAG (REGNO (XEXP (src, 1))))
-+      src = XEXP (src, 1);
-+       else
-+      return 0;
-+       if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+      return reg_base_value[REGNO (src)];
-+       return src;
-+ 
-+     case AND:
-+       /* If the second operand is constant set the base
-+       address to the first operand. */
-+       if (GET_CODE (XEXP (src, 1)) == CONST_INT
-+        && GET_CODE (XEXP (src, 0)) == REG)
-+      {
-+        src = XEXP (src, 0);
-+        if (copying_arguments && REGNO (src) < FIRST_PSEUDO_REGISTER)
-+          return reg_base_value[REGNO (src)];
-+        return src;
-+      }
-+       return 0;
-+ 
-+     case HIGH:
-+       return XEXP (src, 0);
-+     }
-+ 
-+   return 0;
-+ }
-+ 
-+ /* Called from init_alias_analysis indirectly through note_stores.  */
-+ 
-+ /* while scanning insns to find base values, reg_seen[N] is nonzero if
-+    register N has been set in this function.  */
-+ static char *reg_seen;
-+ 
-+ static
-+ void record_set (dest, set)
-+      rtx dest, set;
-+ {
-+   register int regno;
-+   rtx src;
-+ 
-+   if (GET_CODE (dest) != REG)
-+     return;
-+ 
-+   regno = REGNO (dest);
-+ 
-+   if (set)
-+     {
-+       /* A CLOBBER wipes out any old value but does not prevent a previously
-+       unset register from acquiring a base address (i.e. reg_seen is not
-+       set).  */
-+       if (GET_CODE (set) == CLOBBER)
-+      {
-+        reg_base_value[regno] = 0;
-+        return;
-+      }
-+       src = SET_SRC (set);
-+     }
-+   else
-+     {
-+       static int unique_id;
-+       if (reg_seen[regno])
-+      {
-+        reg_base_value[regno] = 0;
-+        return;
-+      }
-+       reg_seen[regno] = 1;
-+       reg_base_value[regno] = gen_rtx (ADDRESS, Pmode,
-+                                     GEN_INT (unique_id++));
-+       return;
-+     }
-+ 
-+   /* This is not the first set.  If the new value is not related to the
-+      old value, forget the base value. Note that the following code is
-+      not detected:
-+      extern int x, y;  int *p = &x; p += (&y-&x);
-+      ANSI C does not allow computing the difference of addresses
-+      of distinct top level objects.  */
-+   if (reg_base_value[regno])
-+     switch (GET_CODE (src))
-+       {
-+       case PLUS:
-+       case MINUS:
-+      if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
-+        reg_base_value[regno] = 0;
-+      break;
-+       case AND:
-+      if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
-+        reg_base_value[regno] = 0;
-+      break;
-+       case LO_SUM:
-+      if (XEXP (src, 0) != dest)
-+        reg_base_value[regno] = 0;
-+      break;
-+       default:
-+      reg_base_value[regno] = 0;
-+      break;
-+       }
-+   /* If this is the first set of a register, record the value.  */
-+   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
-+         && ! reg_seen[regno] && reg_base_value[regno] == 0)
-+     reg_base_value[regno] = find_base_value (src);
-+ 
-+   reg_seen[regno] = 1;
-+ }
-+ 
-+ /* Called from loop optimization when a new pseudo-register is created.  */
-+ void
-+ record_base_value (regno, val)
-+      int regno;
-+      rtx val;
-+ {
-+   if (!flag_alias_check || regno >= reg_base_value_size)
-+     return;
-+   if (GET_CODE (val) == REG)
-+     {
-+       if (REGNO (val) < reg_base_value_size)
-+      reg_base_value[regno] = reg_base_value[REGNO (val)];
-+       return;
-+     }
-+   reg_base_value[regno] = find_base_value (val);
-+ }
-+ 
-+ static rtx
-+ canon_rtx (x)
-+      rtx x;
-+ {
-+   /* Recursively look for equivalences.  */
-+   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
-+       && REGNO (x) < reg_known_value_size)
-+     return reg_known_value[REGNO (x)] == x
-+       ? x : canon_rtx (reg_known_value[REGNO (x)]);
-+   else if (GET_CODE (x) == PLUS)
-+     {
-+       rtx x0 = canon_rtx (XEXP (x, 0));
-+       rtx x1 = canon_rtx (XEXP (x, 1));
-+ 
-+       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
-+      {
-+        /* We can tolerate LO_SUMs being offset here; these
-+           rtl are used for nothing other than comparisons.  */
-+        if (GET_CODE (x0) == CONST_INT)
-+          return plus_constant_for_output (x1, INTVAL (x0));
-+        else if (GET_CODE (x1) == CONST_INT)
-+          return plus_constant_for_output (x0, INTVAL (x1));
-+        return gen_rtx (PLUS, GET_MODE (x), x0, x1);
-+      }
-+     }
-+   /* This gives us much better alias analysis when called from
-+      the loop optimizer.   Note we want to leave the original
-+      MEM alone, but need to return the canonicalized MEM with
-+      all the flags with their original values.  */
-+   else if (GET_CODE (x) == MEM)
-+     {
-+       rtx addr = canon_rtx (XEXP (x, 0));
-+       if (addr != XEXP (x, 0))
-+      {
-+        rtx new = gen_rtx (MEM, GET_MODE (x), addr);
-+        MEM_VOLATILE_P (new) = MEM_VOLATILE_P (x);
-+        RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
-+        MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (x);
-+        x = new;
-+      }
-+     }
-+   return x;
-+ }
-+ 
-+ /* Return 1 if X and Y are identical-looking rtx's.
-+ 
-+    We use the data in reg_known_value above to see if two registers with
-+    different numbers are, in fact, equivalent.  */
-+ 
-+ static int
-+ rtx_equal_for_memref_p (x, y)
-+      rtx x, y;
-+ {
-+   register int i;
-+   register int j;
-+   register enum rtx_code code;
-+   register char *fmt;
-+ 
-+   if (x == 0 && y == 0)
-+     return 1;
-+   if (x == 0 || y == 0)
-+     return 0;
-+   x = canon_rtx (x);
-+   y = canon_rtx (y);
-+ 
-+   if (x == y)
-+     return 1;
-+ 
-+   code = GET_CODE (x);
-+   /* Rtx's of different codes cannot be equal.  */
-+   if (code != GET_CODE (y))
-+     return 0;
-+ 
-+   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
-+      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
-+ 
-+   if (GET_MODE (x) != GET_MODE (y))
-+     return 0;
-+ 
-+   /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively.  */
-+ 
-+   if (code == REG)
-+     return REGNO (x) == REGNO (y);
-+   if (code == LABEL_REF)
-+     return XEXP (x, 0) == XEXP (y, 0);
-+   if (code == SYMBOL_REF)
-+     return XSTR (x, 0) == XSTR (y, 0);
-+ 
-+   /* For commutative operations, the RTX match if the operand match in any
-+      order.  Also handle the simple binary and unary cases without a loop.  */
-+   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
-+     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+           && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
-+          || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
-+              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
-+   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
-+     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
-+          && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
-+   else if (GET_RTX_CLASS (code) == '1')
-+     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-+ 
-+   /* Compare the elements.  If any pair of corresponding elements
-+      fail to match, return 0 for the whole things.  */
-+ 
-+   fmt = GET_RTX_FORMAT (code);
-+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+     {
-+       switch (fmt[i])
-+      {
-+      case 'w':
-+        if (XWINT (x, i) != XWINT (y, i))
-+          return 0;
-+        break;
-+ 
-+      case 'n':
-+      case 'i':
-+        if (XINT (x, i) != XINT (y, i))
-+          return 0;
-+        break;
-+ 
-+      case 'V':
-+      case 'E':
-+        /* Two vectors must have the same length.  */
-+        if (XVECLEN (x, i) != XVECLEN (y, i))
-+          return 0;
-+ 
-+        /* And the corresponding elements must match.  */
-+        for (j = 0; j < XVECLEN (x, i); j++)
-+          if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
-+            return 0;
-+        break;
-+ 
-+      case 'e':
-+        if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
-+          return 0;
-+        break;
-+ 
-+      case 'S':
-+      case 's':
-+        if (strcmp (XSTR (x, i), XSTR (y, i)))
-+          return 0;
-+        break;
-+ 
-+      case 'u':
-+        /* These are just backpointers, so they don't matter.  */
-+        break;
-+ 
-+      case '0':
-+        break;
-+ 
-+        /* It is believed that rtx's at this level will never
-+           contain anything but integers and other rtx's,
-+           except for within LABEL_REFs and SYMBOL_REFs.  */
-+      default:
-+        abort ();
-+      }
-+     }
-+   return 1;
-+ }
-+ 
-+ /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
-+    X and return it, or return 0 if none found.  */
-+ 
-+ static rtx
-+ find_symbolic_term (x)
-+      rtx x;
-+ {
-+   register int i;
-+   register enum rtx_code code;
-+   register char *fmt;
-+ 
-+   code = GET_CODE (x);
-+   if (code == SYMBOL_REF || code == LABEL_REF)
-+     return x;
-+   if (GET_RTX_CLASS (code) == 'o')
-+     return 0;
-+ 
-+   fmt = GET_RTX_FORMAT (code);
-+   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-+     {
-+       rtx t;
-+ 
-+       if (fmt[i] == 'e')
-+      {
-+        t = find_symbolic_term (XEXP (x, i));
-+        if (t != 0)
-+          return t;
-+      }
-+       else if (fmt[i] == 'E')
-+      break;
-+     }
-+   return 0;
-+ }
-+ 
-+ static rtx
-+ find_base_term (x)
-+      register rtx x;
-+ {
-+   switch (GET_CODE (x))
-+     {
-+     case REG:
-+       return REG_BASE_VALUE (x);
-+ 
-+     case HIGH:
-+       return find_base_term (XEXP (x, 0));
-+ 
-+     case CONST:
-+       x = XEXP (x, 0);
-+       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
-+      return 0;
-+       /* fall through */
-+     case LO_SUM:
-+     case PLUS:
-+     case MINUS:
-+       {
-+      rtx tmp = find_base_term (XEXP (x, 0));
-+      if (tmp)
-+        return tmp;
-+      return find_base_term (XEXP (x, 1));
-+       }
-+ 
-+     case AND:
-+       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+      return REG_BASE_VALUE (XEXP (x, 0));
-+       return 0;
-+ 
-+     case SYMBOL_REF:
-+     case LABEL_REF:
-+       return x;
-+ 
-+     default:
-+       return 0;
-+     }
-+ }
-+ 
-+ /* Return 0 if the addresses X and Y are known to point to different
-+    objects, 1 if they might be pointers to the same object.  */
-+ 
-+ static int
-+ base_alias_check (x, y)
-+      rtx x, y;
-+ {
-+   rtx x_base = find_base_term (x);
-+   rtx y_base = find_base_term (y);
-+ 
-+   /* If either base address is unknown or the base addresses are equal,
-+      nothing is known about aliasing.  */
-+ 
-+   if (x_base == 0 || y_base == 0 || rtx_equal_p (x_base, y_base))
-+     return 1;
-+ 
-+   /* The base addresses of the read and write are different
-+      expressions.  If they are both symbols there is no
-+      conflict.  */
-+   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
-+     return 0;
-+ 
-+   /* If one address is a stack reference there can be no alias:
-+      stack references using different base registers do not alias,
-+      a stack reference can not alias a parameter, and a stack reference
-+      can not alias a global.  */
-+   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
-+       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
-+     return 0;
-+ 
-+   if (! flag_argument_noalias)
-+     return 1;
-+ 
-+   if (flag_argument_noalias > 1)
-+     return 0;
-+ 
-+   /* Weak noalias assertion (arguments are distinct, but may match globals). */
-+   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
-+ }
-+ 
-+ /* Return nonzero if X and Y (memory addresses) could reference the
-+    same location in memory.  C is an offset accumulator.  When
-+    C is nonzero, we are testing aliases between X and Y + C.
-+    XSIZE is the size in bytes of the X reference,
-+    similarly YSIZE is the size in bytes for Y.
-+ 
-+    If XSIZE or YSIZE is zero, we do not know the amount of memory being
-+    referenced (the reference was BLKmode), so make the most pessimistic
-+    assumptions.
-+ 
-+    We recognize the following cases of non-conflicting memory:
-+ 
-+      (1) addresses involving the frame pointer cannot conflict
-+          with addresses involving static variables.
-+      (2) static variables with different addresses cannot conflict.
-+ 
-+    Nice to notice that varying addresses cannot conflict with fp if no
-+    local variables had their addresses taken, but that's too hard now.  */
-+ 
-+ 
-+ static int
-+ memrefs_conflict_p (xsize, x, ysize, y, c)
-+      register rtx x, y;
-+      int xsize, ysize;
-+      HOST_WIDE_INT c;
-+ {
-+   if (GET_CODE (x) == HIGH)
-+     x = XEXP (x, 0);
-+   else if (GET_CODE (x) == LO_SUM)
-+     x = XEXP (x, 1);
-+   else
-+     x = canon_rtx (x);
-+   if (GET_CODE (y) == HIGH)
-+     y = XEXP (y, 0);
-+   else if (GET_CODE (y) == LO_SUM)
-+     y = XEXP (y, 1);
-+   else
-+     y = canon_rtx (y);
-+ 
-+   if (rtx_equal_for_memref_p (x, y))
-+     {
-+       if (xsize == 0 || ysize == 0)
-+      return 1;
-+       if (c >= 0 && xsize > c)
-+      return 1;
-+       if (c < 0 && ysize+c > 0)
-+      return 1;
-+       return 0;
-+     }
-+ 
-+   if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
-+       || y == stack_pointer_rtx)
-+     {
-+       rtx t = y;
-+       int tsize = ysize;
-+       y = x; ysize = xsize;
-+       x = t; xsize = tsize;
-+     }
-+ 
-+   if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
-+       || x == stack_pointer_rtx)
-+     {
-+       rtx y1;
-+ 
-+       if (CONSTANT_P (y))
-+      return 0;
-+ 
-+       if (GET_CODE (y) == PLUS
-+        && canon_rtx (XEXP (y, 0)) == x
-+        && (y1 = canon_rtx (XEXP (y, 1)))
-+        && GET_CODE (y1) == CONST_INT)
-+      {
-+        c += INTVAL (y1);
-+        return (xsize == 0 || ysize == 0
-+                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+      }
-+ 
-+       if (GET_CODE (y) == PLUS
-+        && (y1 = canon_rtx (XEXP (y, 0)))
-+        && CONSTANT_P (y1))
-+      return 0;
-+ 
-+       return 1;
-+     }
-+ 
-+   if (GET_CODE (x) == PLUS)
-+     {
-+       /* The fact that X is canonicalized means that this
-+       PLUS rtx is canonicalized.  */
-+       rtx x0 = XEXP (x, 0);
-+       rtx x1 = XEXP (x, 1);
-+ 
-+       if (GET_CODE (y) == PLUS)
-+      {
-+        /* The fact that Y is canonicalized means that this
-+           PLUS rtx is canonicalized.  */
-+        rtx y0 = XEXP (y, 0);
-+        rtx y1 = XEXP (y, 1);
-+ 
-+        if (rtx_equal_for_memref_p (x1, y1))
-+          return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+        if (rtx_equal_for_memref_p (x0, y0))
-+          return memrefs_conflict_p (xsize, x1, ysize, y1, c);
-+        if (GET_CODE (x1) == CONST_INT)
-+          if (GET_CODE (y1) == CONST_INT)
-+            return memrefs_conflict_p (xsize, x0, ysize, y0,
-+                                       c - INTVAL (x1) + INTVAL (y1));
-+          else
-+            return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+        else if (GET_CODE (y1) == CONST_INT)
-+          return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+ 
-+        /* Handle case where we cannot understand iteration operators,
-+           but we notice that the base addresses are distinct objects.  */
-+        /* ??? Is this still necessary? */
-+        x = find_symbolic_term (x);
-+        if (x == 0)
-+          return 1;
-+        y = find_symbolic_term (y);
-+        if (y == 0)
-+          return 1;
-+        return rtx_equal_for_memref_p (x, y);
-+      }
-+       else if (GET_CODE (x1) == CONST_INT)
-+      return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
-+     }
-+   else if (GET_CODE (y) == PLUS)
-+     {
-+       /* The fact that Y is canonicalized means that this
-+       PLUS rtx is canonicalized.  */
-+       rtx y0 = XEXP (y, 0);
-+       rtx y1 = XEXP (y, 1);
-+ 
-+       if (GET_CODE (y1) == CONST_INT)
-+      return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-+       else
-+      return 1;
-+     }
-+ 
-+   if (GET_CODE (x) == GET_CODE (y))
-+     switch (GET_CODE (x))
-+       {
-+       case MULT:
-+      {
-+        /* Handle cases where we expect the second operands to be the
-+           same, and check only whether the first operand would conflict
-+           or not.  */
-+        rtx x0, y0;
-+        rtx x1 = canon_rtx (XEXP (x, 1));
-+        rtx y1 = canon_rtx (XEXP (y, 1));
-+        if (! rtx_equal_for_memref_p (x1, y1))
-+          return 1;
-+        x0 = canon_rtx (XEXP (x, 0));
-+        y0 = canon_rtx (XEXP (y, 0));
-+        if (rtx_equal_for_memref_p (x0, y0))
-+          return (xsize == 0 || ysize == 0
-+                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+ 
-+        /* Can't properly adjust our sizes.  */
-+        if (GET_CODE (x1) != CONST_INT)
-+          return 1;
-+        xsize /= INTVAL (x1);
-+        ysize /= INTVAL (x1);
-+        c /= INTVAL (x1);
-+        return memrefs_conflict_p (xsize, x0, ysize, y0, c);
-+      }
-+       }
-+ 
-+   /* Treat an access through an AND (e.g. a subword access on an Alpha)
-+      as an access with indeterminate size.  */
-+   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
-+     return memrefs_conflict_p (0, XEXP (x, 0), ysize, y, c);
-+   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
-+     return memrefs_conflict_p (xsize, x, 0, XEXP (y, 0), c);
-+ 
-+   if (CONSTANT_P (x))
-+     {
-+       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
-+      {
-+        c += (INTVAL (y) - INTVAL (x));
-+        return (xsize == 0 || ysize == 0
-+                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-+      }
-+ 
-+       if (GET_CODE (x) == CONST)
-+      {
-+        if (GET_CODE (y) == CONST)
-+          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+                                     ysize, canon_rtx (XEXP (y, 0)), c);
-+        else
-+          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
-+                                     ysize, y, c);
-+      }
-+       if (GET_CODE (y) == CONST)
-+      return memrefs_conflict_p (xsize, x, ysize,
-+                                 canon_rtx (XEXP (y, 0)), c);
-+ 
-+       if (CONSTANT_P (y))
-+      return (rtx_equal_for_memref_p (x, y)
-+              && (xsize == 0 || ysize == 0
-+                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-+ 
-+       return 1;
-+     }
-+   return 1;
-+ }
-+ 
-+ /* Functions to compute memory dependencies.
-+ 
-+    Since we process the insns in execution order, we can build tables
-+    to keep track of what registers are fixed (and not aliased), what registers
-+    are varying in known ways, and what registers are varying in unknown
-+    ways.
-+ 
-+    If both memory references are volatile, then there must always be a
-+    dependence between the two references, since their order can not be
-+    changed.  A volatile and non-volatile reference can be interchanged
-+    though. 
-+ 
-+    A MEM_IN_STRUCT reference at a non-QImode non-AND varying address can never
-+    conflict with a non-MEM_IN_STRUCT reference at a fixed address.   We must
-+    allow QImode aliasing because the ANSI C standard allows character
-+    pointers to alias anything.  We are assuming that characters are
-+    always QImode here.  We also must allow AND addresses, because they may
-+    generate accesses outside the object being referenced.  This is used to
-+    generate aligned addresses from unaligned addresses, for instance, the
-+    alpha storeqi_unaligned pattern.  */
-+ 
-+ /* Read dependence: X is read after read in MEM takes place.  There can
-+    only be a dependence here if both reads are volatile.  */
-+ 
-+ int
-+ read_dependence (mem, x)
-+      rtx mem;
-+      rtx x;
-+ {
-+   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-+ }
-+ 
-+ /* True dependence: X is read after store in MEM takes place.  */
-+ 
-+ int
-+ true_dependence (mem, mem_mode, x, varies)
-+      rtx mem;
-+      enum machine_mode mem_mode;
-+      rtx x;
-+      int (*varies)();
-+ {
-+   rtx x_addr, mem_addr;
-+ 
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   x_addr = XEXP (x, 0);
-+   mem_addr = XEXP (mem, 0);
-+ 
-+   if (flag_alias_check && ! base_alias_check (x_addr, mem_addr))
-+     return 0;
-+ 
-+   /* If X is an unchanging read, then it can't possibly conflict with any
-+      non-unchanging store.  It may conflict with an unchanging write though,
-+      because there may be a single store to this address to initialize it.
-+      Just fall through to the code below to resolve the case where we have
-+      both an unchanging read and an unchanging write.  This won't handle all
-+      cases optimally, but the possible performance loss should be
-+      negligible.  */
-+   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
-+     return 0;
-+ 
-+   x_addr = canon_rtx (x_addr);
-+   mem_addr = canon_rtx (mem_addr);
-+   if (mem_mode == VOIDmode)
-+     mem_mode = GET_MODE (mem);
-+ 
-+   if (! memrefs_conflict_p (mem_mode, mem_addr, SIZE_FOR_MODE (x), x_addr, 0))
-+     return 0;
-+ 
-+   /* If both references are struct references, or both are not, nothing
-+      is known about aliasing.
-+ 
-+      If either reference is QImode or BLKmode, ANSI C permits aliasing.
-+ 
-+      If both addresses are constant, or both are not, nothing is known
-+      about aliasing.  */
-+   if (MEM_IN_STRUCT_P (x) == MEM_IN_STRUCT_P (mem)
-+       || mem_mode == QImode || mem_mode == BLKmode
-+       || GET_MODE (x) == QImode || GET_MODE (x) == BLKmode
-+       || GET_CODE (x_addr) == AND || GET_CODE (mem_addr) == AND
-+       || varies (x_addr) == varies (mem_addr))
-+     return 1;
-+ 
-+   /* One memory reference is to a constant address, one is not.
-+      One is to a structure, the other is not.
-+ 
-+      If either memory reference is a variable structure the other is a
-+      fixed scalar and there is no aliasing.  */
-+   if ((MEM_IN_STRUCT_P (mem) && varies (mem_addr))
-+       || (MEM_IN_STRUCT_P (x) && varies (x_addr)))
-+     return 0;
-+ 
-+   return 1;
-+ }
-+ 
-+ /* Anti dependence: X is written after read in MEM takes place.  */
-+ 
-+ int
-+ anti_dependence (mem, x)
-+      rtx mem;
-+      rtx x;
-+ {
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   if (flag_alias_check && ! base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+     return 0;
-+ 
-+   /* If MEM is an unchanging read, then it can't possibly conflict with
-+      the store to X, because there is at most one store to MEM, and it must
-+      have occurred somewhere before MEM.  */
-+   x = canon_rtx (x);
-+   mem = canon_rtx (mem);
-+   if (RTX_UNCHANGING_P (mem))
-+     return 0;
-+ 
-+   return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+                            SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+        && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+              && GET_MODE (mem) != QImode
-+              && GET_CODE (XEXP (mem, 0)) != AND
-+              && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+        && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+              && GET_MODE (x) != QImode
-+              && GET_CODE (XEXP (x, 0)) != AND
-+              && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+ 
-+ /* Output dependence: X is written after store in MEM takes place.  */
-+ 
-+ int
-+ output_dependence (mem, x)
-+      register rtx mem;
-+      register rtx x;
-+ {
-+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
-+     return 1;
-+ 
-+   if (flag_alias_check && !base_alias_check (XEXP (x, 0), XEXP (mem, 0)))
-+     return 0;
-+ 
-+   x = canon_rtx (x);
-+   mem = canon_rtx (mem);
-+   return (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
-+                            SIZE_FOR_MODE (x), XEXP (x, 0), 0)
-+        && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
-+              && GET_MODE (mem) != QImode
-+              && GET_CODE (XEXP (mem, 0)) != AND
-+              && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
-+        && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
-+              && GET_MODE (x) != QImode
-+              && GET_CODE (XEXP (x, 0)) != AND
-+              && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)));
-+ }
-+ 
-+ void
-+ init_alias_analysis ()
-+ {
-+   int maxreg = max_reg_num ();
-+   int changed;
-+   register int i;
-+   register rtx insn;
-+   rtx note;
-+   rtx set;
-+ 
-+   reg_known_value_size = maxreg;
-+ 
-+   reg_known_value
-+     = (rtx *) oballoc ((maxreg - FIRST_PSEUDO_REGISTER) * sizeof (rtx))
-+     - FIRST_PSEUDO_REGISTER;
-+   reg_known_equiv_p =
-+     oballoc (maxreg - FIRST_PSEUDO_REGISTER) - FIRST_PSEUDO_REGISTER;
-+   bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
-+       (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-+   bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
-+       (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-+ 
-+   if (flag_alias_check)
-+     {
-+       /* Overallocate reg_base_value to allow some growth during loop
-+       optimization.  Loop unrolling can create a large number of
-+       registers.  */
-+       reg_base_value_size = maxreg * 2;
-+       reg_base_value = (rtx *)oballoc (reg_base_value_size * sizeof (rtx));
-+       reg_seen = (char *)alloca (reg_base_value_size);
-+       bzero (reg_base_value, reg_base_value_size * sizeof (rtx));
-+       bzero (reg_seen, reg_base_value_size);
-+ 
-+       /* Mark all hard registers which may contain an address.
-+       The stack, frame and argument pointers may contain an address.
-+       An argument register which can hold a Pmode value may contain
-+       an address even if it is not in BASE_REGS.
-+ 
-+       The address expression is VOIDmode for an argument and
-+       Pmode for other registers.  */
-+ #ifndef OUTGOING_REGNO
-+ #define OUTGOING_REGNO(N) N
-+ #endif
-+       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+      /* Check whether this register can hold an incoming pointer
-+         argument.  FUNCTION_ARG_REGNO_P tests outgoing register
-+         numbers, so translate if necessary due to register windows. */
-+      if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i)) && HARD_REGNO_MODE_OK (i, Pmode))
-+        reg_base_value[i] = gen_rtx (ADDRESS, VOIDmode,
-+                                     gen_rtx (REG, Pmode, i));
-+ 
-+       reg_base_value[STACK_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, stack_pointer_rtx);
-+       reg_base_value[ARG_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, arg_pointer_rtx);
-+       reg_base_value[FRAME_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, frame_pointer_rtx);
-+       reg_base_value[HARD_FRAME_POINTER_REGNUM]
-+      = gen_rtx (ADDRESS, Pmode, hard_frame_pointer_rtx);
-+     }
-+ 
-+   copying_arguments = 1;
-+   /* Fill in the entries with known constant values.  */
-+   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+     {
-+       if (flag_alias_check && GET_RTX_CLASS (GET_CODE (insn)) == 'i')
-+      {
-+        /* If this insn has a noalias note, process it,  Otherwise,
-+           scan for sets.  A simple set will have no side effects
-+           which could change the base value of any other register. */
-+        rtx noalias_note;
-+        if (GET_CODE (PATTERN (insn)) == SET
-+            && (noalias_note = find_reg_note (insn, REG_NOALIAS, NULL_RTX)))
-+            record_set (SET_DEST (PATTERN (insn)), 0);
-+        else
-+          note_stores (PATTERN (insn), record_set);
-+      }
-+       else if (GET_CODE (insn) == NOTE
-+             && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
-+      copying_arguments = 0;
-+ 
-+       if ((set = single_set (insn)) != 0
-+        && GET_CODE (SET_DEST (set)) == REG
-+        && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
-+        && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
-+             && reg_n_sets[REGNO (SET_DEST (set))] == 1)
-+            || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
-+        && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
-+      {
-+        int regno = REGNO (SET_DEST (set));
-+        reg_known_value[regno] = XEXP (note, 0);
-+        reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
-+      }
-+     }
-+ 
-+   /* Fill in the remaining entries.  */
-+   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
-+     if (reg_known_value[i] == 0)
-+       reg_known_value[i] = regno_reg_rtx[i];
-+ 
-+   if (! flag_alias_check)
-+     return;
-+ 
-+   /* Simplify the reg_base_value array so that no register refers to
-+      another register, except to special registers indirectly through
-+      ADDRESS expressions.
-+ 
-+      In theory this loop can take as long as O(registers^2), but unless
-+      there are very long dependency chains it will run in close to linear
-+      time.  */
-+   do
-+     {
-+       changed = 0;
-+       for (i = FIRST_PSEUDO_REGISTER; i < reg_base_value_size; i++)
-+      {
-+        rtx base = reg_base_value[i];
-+        if (base && GET_CODE (base) == REG)
-+          {
-+            int base_regno = REGNO (base);
-+            if (base_regno == i)              /* register set from itself */
-+              reg_base_value[i] = 0;
-+            else
-+              reg_base_value[i] = reg_base_value[base_regno];
-+            changed = 1;
-+          }
-+      }
-+     }
-+   while (changed);
-+ 
-+   reg_seen = 0;
-+ }
-+ 
-+ void
-+ end_alias_analysis ()
-+ {
-+   reg_known_value = 0;
-+   reg_base_value = 0;
-+   reg_base_value_size = 0;
-+ }
-diff -rcp2N gcc-2.7.2.3/c-decl.c gcc-2.7.2.3.f.1/c-decl.c
-*** gcc-2.7.2.3/c-decl.c       Fri Oct 27 09:44:43 1995
---- gcc-2.7.2.3.f.1/c-decl.c   Sun Aug 10 22:46:24 1997
-*************** init_decl_processing ()
-*** 3207,3210 ****
---- 3207,3223 ----
-    builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, 
-                   BUILT_IN_COS, "cosl");
-+   builtin_function ("__builtin_setjmp",
-+                  build_function_type (integer_type_node,
-+                                       tree_cons (NULL_TREE,
-+                                                  ptr_type_node, endlink)),
-+                  BUILT_IN_SETJMP, NULL_PTR);
-+   builtin_function ("__builtin_longjmp",
-+                  build_function_type
-+                  (void_type_node,
-+                   tree_cons (NULL, ptr_type_node,
-+                              tree_cons (NULL_TREE,
-+                                         integer_type_node,
-+                                         endlink))),
-+                  BUILT_IN_LONGJMP, NULL_PTR);
-  
-    /* In an ANSI C program, it is okay to supply built-in meanings
-*************** grokdeclarator (declarator, declspecs, d
-*** 4049,4052 ****
---- 4062,4066 ----
-    int volatilep;
-    int inlinep;
-+   int restrictp;
-    int explicit_int = 0;
-    int explicit_char = 0;
-*************** grokdeclarator (declarator, declspecs, d
-*** 4342,4349 ****
---- 4356,4366 ----
-    volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
-    inlinep = !! (specbits & (1 << (int) RID_INLINE));
-+   restrictp = !! (specbits & (1 << (int) RID_RESTRICT));
-    if (constp > 1)
-      pedwarn ("duplicate `const'");
-    if (volatilep > 1)
-      pedwarn ("duplicate `volatile'");
-+   if (restrictp)
-+     error ("`restrict' used in non-parameter or non-pointer type declaration");
-    if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
-      type = TYPE_MAIN_VARIANT (type);
-*************** grokdeclarator (declarator, declspecs, d
-*** 4693,4696 ****
---- 4710,4715 ----
-                 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
-                   volatilep++;
-+                else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_RESTRICT])
-+                  restrictp++;
-                 else if (!erred)
-                   {
-*************** grokdeclarator (declarator, declspecs, d
-*** 4703,4706 ****
---- 4722,4727 ----
-             if (volatilep > 1)
-               pedwarn ("duplicate `volatile'");
-+            if (restrictp > 1)
-+              pedwarn ("duplicate `restrict'");
-           }
-  
-*************** grokdeclarator (declarator, declspecs, d
-*** 4844,4847 ****
---- 4865,4875 ----
-         }
-  
-+      if (restrictp)
-+        {
-+          if (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
-+            error ("`restrict' applied to non-pointer");
-+          DECL_RESTRICT (decl) = 1;
-+        }
-+ 
-       DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
-        }
-*************** start_struct (code, name)
-*** 5365,5368 ****
---- 5393,5397 ----
-    pushtag (name, ref);
-    C_TYPE_BEING_DEFINED (ref) = 1;
-+   TYPE_PACKED (ref) = flag_pack_struct;
-    return ref;
-  }
-*************** start_enum (name)
-*** 5806,5809 ****
---- 5835,5841 ----
-    enum_overflow = 0;
-  
-+   if (flag_short_enums)
-+     TYPE_PACKED (enumtype) = 1;
-+ 
-    return enumtype;
-  }
-*************** finish_enum (enumtype, values, attribute
-*** 5862,5867 ****
-    precision = MAX (lowprec, highprec);
-  
-!   if (flag_short_enums || TYPE_PACKED (enumtype)
-!       || precision > TYPE_PRECISION (integer_type_node))
-      /* Use the width of the narrowest normal C type which is wide enough.  */
-      TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
---- 5894,5898 ----
-    precision = MAX (lowprec, highprec);
-  
-!   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
-      /* Use the width of the narrowest normal C type which is wide enough.  */
-      TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
-diff -rcp2N gcc-2.7.2.3/c-gperf.h gcc-2.7.2.3.f.1/c-gperf.h
-*** gcc-2.7.2.3/c-gperf.h      Fri Mar  4 19:15:53 1994
---- gcc-2.7.2.3.f.1/c-gperf.h  Mon Aug 11 06:58:47 1997
-***************
-*** 1,15 ****
-  /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf  */
-  struct resword { char *name; short token; enum rid rid; };
-  
-! #define TOTAL_KEYWORDS 79
-  #define MIN_WORD_LENGTH 2
-  #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 10
-! #define MAX_HASH_VALUE 144
-! /* maximum key range = 135, duplicates = 0 */
-  
-  #ifdef __GNUC__
-! __inline
-  #endif
-  static unsigned int
---- 1,16 ----
-  /* C code produced by gperf version 2.5 (GNU C++ version) */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ ../g77-new/c-parse.gperf  */
-! /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
-  struct resword { char *name; short token; enum rid rid; };
-  
-! #define TOTAL_KEYWORDS 81
-  #define MIN_WORD_LENGTH 2
-  #define MAX_WORD_LENGTH 20
-! #define MIN_HASH_VALUE 11
-! #define MAX_HASH_VALUE 157
-! /* maximum key range = 147, duplicates = 0 */
-  
-  #ifdef __GNUC__
-! inline
-  #endif
-  static unsigned int
-*************** hash (str, len)
-*** 20,36 ****
-    static unsigned char asso_values[] =
-      {
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145,  25, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
-!      145, 145, 145, 145, 145,   1, 145,  46,   8,  15,
-!       61,   6,  36,  48,   3,   5, 145,  18,  63,  25,
-!       29,  76,   1, 145,  13,   2,   1,  51,  37,   9,
-!        9,   1,   3, 145, 145, 145, 145, 145,
-      };
-    register int hval = len;
---- 21,37 ----
-    static unsigned char asso_values[] =
-      {
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158,   2, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
-!      158, 158, 158, 158, 158,   1, 158,  18,   1,  58,
-!       56,   6,  44,  64,  13,  45, 158,   4,  26,  68,
-!        2,  74,   1, 158,   2,  13,   1,  33,  48,   5,
-!        5,   3,  12, 158, 158, 158, 158, 158,
-      };
-    register int hval = len;
-*************** hash (str, len)
-*** 44,47 ****
---- 45,49 ----
-        case 1:
-          hval += asso_values[str[0]];
-+         break;
-      }
-    return hval + asso_values[str[len - 1]];
-*************** hash (str, len)
-*** 50,166 ****
-  static struct resword wordlist[] =
-  {
-!   {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"",}, 
-!   {"int",  TYPESPEC, RID_INT},
-!   {"",}, {"",}, 
-!   {"__typeof__",  TYPEOF, NORID},
-!   {"__signed__",  TYPESPEC, RID_SIGNED},
-!   {"__imag__",  IMAGPART, NORID},
-!   {"switch",  SWITCH, NORID},
-!   {"__inline__",  SCSPEC, RID_INLINE},
-!   {"else",  ELSE, NORID},
-!   {"__iterator__",  SCSPEC, RID_ITERATOR},
-!   {"__inline",  SCSPEC, RID_INLINE},
-!   {"__extension__",  EXTENSION, NORID},
-!   {"struct",  STRUCT, NORID},
-!   {"__real__",  REALPART, NORID},
-!   {"__const",  TYPE_QUAL, RID_CONST},
-!   {"while",  WHILE, NORID},
-!   {"__const__",  TYPE_QUAL, RID_CONST},
-!   {"case",  CASE, NORID},
-!   {"__complex__",  TYPESPEC, RID_COMPLEX},
-!   {"__iterator",  SCSPEC, RID_ITERATOR},
-!   {"bycopy",  TYPE_QUAL, RID_BYCOPY},
-!   {"",}, {"",}, {"",}, 
-!   {"__complex",  TYPESPEC, RID_COMPLEX},
-!   {"",}, 
-!   {"in",  TYPE_QUAL, RID_IN},
-!   {"break",  BREAK, NORID},
-!   {"@defs",  DEFS, NORID},
-!   {"",}, {"",}, {"",}, 
-!   {"extern",  SCSPEC, RID_EXTERN},
-!   {"if",  IF, NORID},
-!   {"typeof",  TYPEOF, NORID},
-!   {"typedef",  SCSPEC, RID_TYPEDEF},
-!   {"__typeof",  TYPEOF, NORID},
-!   {"sizeof",  SIZEOF, NORID},
-!   {"",}, 
-!   {"return",  RETURN, NORID},
-!   {"const",  TYPE_QUAL, RID_CONST},
-!   {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
-!   {"@private",  PRIVATE, NORID},
-!   {"@selector",  SELECTOR, NORID},
-!   {"__volatile",  TYPE_QUAL, RID_VOLATILE},
-!   {"__asm__",  ASM_KEYWORD, NORID},
-!   {"",}, {"",}, 
-!   {"continue",  CONTINUE, NORID},
-!   {"__alignof__",  ALIGNOF, NORID},
-!   {"__imag",  IMAGPART, NORID},
-!   {"__attribute__",  ATTRIBUTE, NORID},
-!   {"",}, {"",}, 
-!   {"__attribute",  ATTRIBUTE, NORID},
-!   {"for",  FOR, NORID},
-!   {"",}, 
-!   {"@encode",  ENCODE, NORID},
-!   {"id",  OBJECTNAME, RID_ID},
-!   {"static",  SCSPEC, RID_STATIC},
-!   {"@interface",  INTERFACE, NORID},
-!   {"",}, 
-!   {"__signed",  TYPESPEC, RID_SIGNED},
-!   {"",}, 
-!   {"__label__",  LABEL, NORID},
-!   {"",}, {"",}, 
-!   {"__asm",  ASM_KEYWORD, NORID},
-!   {"char",  TYPESPEC, RID_CHAR},
-!   {"",}, 
-!   {"inline",  SCSPEC, RID_INLINE},
-!   {"out",  TYPE_QUAL, RID_OUT},
-!   {"register",  SCSPEC, RID_REGISTER},
-!   {"__real",  REALPART, NORID},
-!   {"short",  TYPESPEC, RID_SHORT},
-!   {"",}, 
-!   {"enum",  ENUM, NORID},
-!   {"inout",  TYPE_QUAL, RID_INOUT},
-!   {"",}, 
-!   {"oneway",  TYPE_QUAL, RID_ONEWAY},
-!   {"union",  UNION, NORID},
-!   {"",}, 
-!   {"__alignof",  ALIGNOF, NORID},
-!   {"",}, 
-!   {"@implementation",  IMPLEMENTATION, NORID},
-!   {"",}, 
-!   {"@class",  CLASS, NORID},
-!   {"",}, 
-!   {"@public",  PUBLIC, NORID},
-!   {"asm",  ASM_KEYWORD, NORID},
-!   {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"default",  DEFAULT, NORID},
-!   {"",}, 
-!   {"void",  TYPESPEC, RID_VOID},
-!   {"",}, 
-!   {"@protected",  PROTECTED, NORID},
-!   {"@protocol",  PROTOCOL, NORID},
-!   {"",}, {"",}, {"",}, 
-!   {"volatile",  TYPE_QUAL, RID_VOLATILE},
-!   {"",}, {"",}, 
-!   {"signed",  TYPESPEC, RID_SIGNED},
-!   {"float",  TYPESPEC, RID_FLOAT},
-!   {"@end",  END, NORID},
-!   {"",}, {"",}, 
-!   {"unsigned",  TYPESPEC, RID_UNSIGNED},
-!   {"@compatibility_alias",  ALIAS, NORID},
-!   {"double",  TYPESPEC, RID_DOUBLE},
-!   {"",}, {"",}, 
-!   {"auto",  SCSPEC, RID_AUTO},
-!   {"",}, 
-!   {"goto",  GOTO, NORID},
-!   {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!   {"do",  DO, NORID},
-!   {"",}, {"",}, {"",}, {"",}, 
-!   {"long",  TYPESPEC, RID_LONG},
-  };
-  
-  #ifdef __GNUC__
-! __inline
-  #endif
-  struct resword *
---- 52,167 ----
-  static struct resword wordlist[] =
-  {
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"",}, {"",}, 
-!       {"return",  RETURN, NORID},
-!       {"__real__",  REALPART, NORID},
-!       {"__typeof__",  TYPEOF, NORID},
-!       {"__restrict",  TYPE_QUAL, RID_RESTRICT},
-!       {"extern",  SCSPEC, RID_EXTERN},
-!       {"break",  BREAK, NORID},
-!       {"@encode",  ENCODE, NORID},
-!       {"@private",  PRIVATE, NORID},
-!       {"@selector",  SELECTOR, NORID},
-!       {"@interface",  INTERFACE, NORID},
-!       {"__extension__",  EXTENSION, NORID},
-!       {"struct",  STRUCT, NORID},
-!       {"",}, 
-!       {"restrict",  TYPE_QUAL, RID_RESTRICT},
-!       {"__signed__",  TYPESPEC, RID_SIGNED},
-!       {"@defs",  DEFS, NORID},
-!       {"__asm__",  ASM_KEYWORD, NORID},
-!       {"",}, 
-!       {"else",  ELSE, NORID},
-!       {"",}, 
-!       {"__alignof__",  ALIGNOF, NORID},
-!       {"",}, 
-!       {"__attribute__",  ATTRIBUTE, NORID},
-!       {"",}, 
-!       {"__real",  REALPART, NORID},
-!       {"__attribute",  ATTRIBUTE, NORID},
-!       {"__label__",  LABEL, NORID},
-!       {"",}, 
-!       {"@protocol",  PROTOCOL, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"@class",  CLASS, NORID},
-!       {"",}, 
-!       {"in",  TYPE_QUAL, RID_IN},
-!       {"int",  TYPESPEC, RID_INT},
-!       {"for",  FOR, NORID},
-!       {"typeof",  TYPEOF, NORID},
-!       {"typedef",  SCSPEC, RID_TYPEDEF},
-!       {"__typeof",  TYPEOF, NORID},
-!       {"__imag__",  IMAGPART, NORID},
-!       {"",}, 
-!       {"__inline__",  SCSPEC, RID_INLINE},
-!       {"__iterator",  SCSPEC, RID_ITERATOR},
-!       {"__iterator__",  SCSPEC, RID_ITERATOR},
-!       {"__inline",  SCSPEC, RID_INLINE},
-!       {"while",  WHILE, NORID},
-!       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
-!       {"",}, 
-!       {"@end",  END, NORID},
-!       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
-!       {"const",  TYPE_QUAL, RID_CONST},
-!       {"__const",  TYPE_QUAL, RID_CONST},
-!       {"bycopy",  TYPE_QUAL, RID_BYCOPY},
-!       {"__const__",  TYPE_QUAL, RID_CONST},
-!       {"@protected",  PROTECTED, NORID},
-!       {"__complex__",  TYPESPEC, RID_COMPLEX},
-!       {"__alignof",  ALIGNOF, NORID},
-!       {"__complex",  TYPESPEC, RID_COMPLEX},
-!       {"continue",  CONTINUE, NORID},
-!       {"sizeof",  SIZEOF, NORID},
-!       {"register",  SCSPEC, RID_REGISTER},
-!       {"switch",  SWITCH, NORID},
-!       {"__signed",  TYPESPEC, RID_SIGNED},
-!       {"out",  TYPE_QUAL, RID_OUT},
-!       {"",}, 
-!       {"case",  CASE, NORID},
-!       {"char",  TYPESPEC, RID_CHAR},
-!       {"inline",  SCSPEC, RID_INLINE},
-!       {"",}, 
-!       {"union",  UNION, NORID},
-!       {"",}, 
-!       {"@implementation",  IMPLEMENTATION, NORID},
-!       {"volatile",  TYPE_QUAL, RID_VOLATILE},
-!       {"oneway",  TYPE_QUAL, RID_ONEWAY},
-!       {"",}, 
-!       {"if",  IF, NORID},
-!       {"__asm",  ASM_KEYWORD, NORID},
-!       {"short",  TYPESPEC, RID_SHORT},
-!       {"",}, 
-!       {"static",  SCSPEC, RID_STATIC},
-!       {"long",  TYPESPEC, RID_LONG},
-!       {"auto",  SCSPEC, RID_AUTO},
-!       {"",}, {"",}, 
-!       {"@public",  PUBLIC, NORID},
-!       {"double",  TYPESPEC, RID_DOUBLE},
-!       {"",}, 
-!       {"id",  OBJECTNAME, RID_ID},
-!       {"",}, {"",}, {"",}, {"",}, 
-!       {"default",  DEFAULT, NORID},
-!       {"@compatibility_alias",  ALIAS, NORID},
-!       {"unsigned",  TYPESPEC, RID_UNSIGNED},
-!       {"enum",  ENUM, NORID},
-!       {"",}, {"",}, {"",}, {"",}, 
-!       {"__imag",  IMAGPART, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"float",  TYPESPEC, RID_FLOAT},
-!       {"inout",  TYPE_QUAL, RID_INOUT},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"do",  DO, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"signed",  TYPESPEC, RID_SIGNED},
-!       {"",}, {"",}, {"",}, 
-!       {"goto",  GOTO, NORID},
-!       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
-!       {"void",  TYPESPEC, RID_VOID},
-!       {"",}, {"",}, {"",}, 
-!       {"asm",  ASM_KEYWORD, NORID},
-  };
-  
-  #ifdef __GNUC__
-! inline
-  #endif
-  struct resword *
-diff -rcp2N gcc-2.7.2.3/c-lex.c gcc-2.7.2.3.f.1/c-lex.c
-*** gcc-2.7.2.3/c-lex.c        Thu Jun 15 11:11:39 1995
---- gcc-2.7.2.3.f.1/c-lex.c    Sun Aug 10 22:46:49 1997
-*************** init_lex ()
-*** 173,176 ****
---- 173,177 ----
-    ridpointers[(int) RID_CONST] = get_identifier ("const");
-    ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile");
-+   ridpointers[(int) RID_RESTRICT] = get_identifier ("restrict");
-    ridpointers[(int) RID_AUTO] = get_identifier ("auto");
-    ridpointers[(int) RID_STATIC] = get_identifier ("static");
-*************** init_lex ()
-*** 206,209 ****
---- 207,211 ----
-        UNSET_RESERVED_WORD ("iterator");
-        UNSET_RESERVED_WORD ("complex");
-+       UNSET_RESERVED_WORD ("restrict");
-      }
-    if (flag_no_asm)
-*************** init_lex ()
-*** 214,217 ****
---- 216,220 ----
-        UNSET_RESERVED_WORD ("iterator");
-        UNSET_RESERVED_WORD ("complex");
-+       UNSET_RESERVED_WORD ("restrict");
-      }
-  }
-*************** yylex ()
-*** 1433,1437 ****
-           /* Create a node with determined type and value.  */
-           if (imag)
-!            yylval.ttype = build_complex (convert (type, integer_zero_node),
-                                           build_real (type, value));
-           else
---- 1436,1441 ----
-           /* Create a node with determined type and value.  */
-           if (imag)
-!            yylval.ttype = build_complex (NULL_TREE,
-!                                          convert (type, integer_zero_node),
-                                           build_real (type, value));
-           else
-*************** yylex ()
-*** 1624,1629 ****
-                   <= TYPE_PRECISION (integer_type_node))
-                 yylval.ttype
-!                  = build_complex (integer_zero_node,
-!                                   convert (integer_type_node, yylval.ttype));
-               else
-                 error ("complex integer constant is too wide for `complex int'");
---- 1628,1634 ----
-                   <= TYPE_PRECISION (integer_type_node))
-                 yylval.ttype
-!                  = build_complex (NULL_TREE, integer_zero_node,
-!                                   convert (integer_type_node,
-!                                            yylval.ttype));
-               else
-                 error ("complex integer constant is too wide for `complex int'");
-diff -rcp2N gcc-2.7.2.3/c-lex.h gcc-2.7.2.3.f.1/c-lex.h
-*** gcc-2.7.2.3/c-lex.h        Thu Jun 15 11:12:22 1995
---- gcc-2.7.2.3.f.1/c-lex.h    Sun Aug 10 22:10:55 1997
-*************** enum rid
-*** 43,47 ****
-    RID_VOLATILE,
-    RID_INLINE,
-!   RID_NOALIAS,
-    RID_ITERATOR,
-    RID_COMPLEX,
---- 43,47 ----
-    RID_VOLATILE,
-    RID_INLINE,
-!   RID_RESTRICT,
-    RID_ITERATOR,
-    RID_COMPLEX,
-diff -rcp2N gcc-2.7.2.3/c-parse.gperf gcc-2.7.2.3.f.1/c-parse.gperf
-*** gcc-2.7.2.3/c-parse.gperf  Fri Apr  9 23:00:44 1993
---- gcc-2.7.2.3.f.1/c-parse.gperf      Sun Aug 10 22:10:55 1997
-*************** __label__, LABEL, NORID
-*** 36,39 ****
---- 36,40 ----
-  __real, REALPART, NORID
-  __real__, REALPART, NORID
-+ __restrict, TYPE_QUAL, RID_RESTRICT
-  __signed, TYPESPEC, RID_SIGNED
-  __signed__, TYPESPEC, RID_SIGNED
-*************** oneway, TYPE_QUAL, RID_ONEWAY
-*** 69,72 ****
---- 70,74 ----
-  out, TYPE_QUAL, RID_OUT
-  register, SCSPEC, RID_REGISTER
-+ restrict, TYPE_QUAL, RID_RESTRICT
-  return, RETURN, NORID
-  short, TYPESPEC, RID_SHORT
-diff -rcp2N gcc-2.7.2.3/c-typeck.c gcc-2.7.2.3.f.1/c-typeck.c
-*** gcc-2.7.2.3/c-typeck.c     Sat Jun 29 16:27:15 1996
---- gcc-2.7.2.3.f.1/c-typeck.c Sun Aug 10 22:46:29 1997
-*************** pointer_int_sum (resultcode, ptrop, into
-*** 2681,2686 ****
-       so the multiply won't overflow spuriously.  */
-  
-!   if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
-!     intop = convert (type_for_size (POINTER_SIZE, 0), intop);
-  
-    /* Replace the integer argument with a suitable product by the object size.
---- 2681,2688 ----
-       so the multiply won't overflow spuriously.  */
-  
-!   if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
-!       || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
-!     intop = convert (type_for_size (TYPE_PRECISION (sizetype), 
-!                                  TREE_UNSIGNED (sizetype)), intop);
-  
-    /* Replace the integer argument with a suitable product by the object size.
-diff -rcp2N gcc-2.7.2.3/calls.c gcc-2.7.2.3.f.1/calls.c
-*** gcc-2.7.2.3/calls.c        Fri Oct 27 01:53:43 1995
---- gcc-2.7.2.3.f.1/calls.c    Fri Aug 29 07:52:07 1997
-*************** expand_call (exp, target, ignore)
-*** 564,567 ****
---- 564,569 ----
-    /* Nonzero if it is plausible that this is a call to alloca.  */
-    int may_be_alloca;
-+   /* Nonzero if this is a call to malloc or a related function. */
-+   int is_malloc;
-    /* Nonzero if this is a call to setjmp or a related function.  */
-    int returns_twice;
-*************** expand_call (exp, target, ignore)
-*** 741,745 ****
-         if (stack_arg_under_construction || i >= 0)
-           {
-!            rtx insn = NEXT_INSN (before_call), seq;
-  
-             /* Look for a call in the inline function code.
---- 743,749 ----
-         if (stack_arg_under_construction || i >= 0)
-           {
-!            rtx first_insn
-!              = before_call ? NEXT_INSN (before_call) : get_insns ();
-!            rtx insn, seq;
-  
-             /* Look for a call in the inline function code.
-*************** expand_call (exp, target, ignore)
-*** 749,753 ****
-  
-             if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-!              for (; insn; insn = NEXT_INSN (insn))
-                 if (GET_CODE (insn) == CALL_INSN)
-                   break;
---- 753,757 ----
-  
-             if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
-!              for (insn = first_insn; insn; insn = NEXT_INSN (insn))
-                 if (GET_CODE (insn) == CALL_INSN)
-                   break;
-*************** expand_call (exp, target, ignore)
-*** 781,785 ****
-                 seq = get_insns ();
-                 end_sequence ();
-!                emit_insns_before (seq, NEXT_INSN (before_call));
-                 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
-               }
---- 785,789 ----
-                 seq = get_insns ();
-                 end_sequence ();
-!                emit_insns_before (seq, first_insn);
-                 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
-               }
-*************** expand_call (exp, target, ignore)
-*** 852,855 ****
---- 856,860 ----
-    returns_twice = 0;
-    is_longjmp = 0;
-+   is_malloc = 0;
-  
-    if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
-*************** expand_call (exp, target, ignore)
-*** 891,894 ****
---- 896,903 ----
-              && ! strcmp (tname, "longjmp"))
-       is_longjmp = 1;
-+       /* Only recognize malloc when alias analysis is enabled.  */
-+       else if (tname[0] == 'm' && flag_alias_check
-+             && ! strcmp(tname, "malloc"))
-+      is_malloc = 1;
-      }
-  
-*************** expand_call (exp, target, ignore)
-*** 1060,1064 ****
-  
-             if (TYPE_SIZE (type) == 0
-!                || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
-               {
-                 /* This is a variable-sized object.  Make space on the stack
---- 1069,1077 ----
-  
-             if (TYPE_SIZE (type) == 0
-!                || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
-!                || (flag_stack_check && ! STACK_CHECK_BUILTIN
-!                    && (TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0
-!                        || (TREE_INT_CST_LOW (TYPE_SIZE (type))
-!                            > STACK_CHECK_MAX_VAR_SIZE * BITS_PER_UNIT))))
-               {
-                 /* This is a variable-sized object.  Make space on the stack
-*************** expand_call (exp, target, ignore)
-*** 1087,1090 ****
---- 1100,1104 ----
-  
-             store_expr (args[i].tree_value, copy, 0);
-+            is_const = 0;
-  
-             args[i].tree_value = build1 (ADDR_EXPR,
-*************** expand_call (exp, target, ignore)
-*** 1363,1367 ****
-    /* Now we are about to start emitting insns that can be deleted
-       if a libcall is deleted.  */
-!   if (is_const)
-      start_sequence ();
-  
---- 1377,1381 ----
-    /* Now we are about to start emitting insns that can be deleted
-       if a libcall is deleted.  */
-!   if (is_const || is_malloc)
-      start_sequence ();
-  
-*************** expand_call (exp, target, ignore)
-*** 1951,1954 ****
---- 1965,1982 ----
-        end_sequence ();
-        emit_insns (insns);
-+     }
-+   else if (is_malloc)
-+     {
-+       rtx temp = gen_reg_rtx (GET_MODE (valreg));
-+       rtx last, insns;
-+ 
-+       emit_move_insn (temp, valreg);
-+       last = get_last_insn ();
-+       REG_NOTES (last) = 
-+      gen_rtx (EXPR_LIST, REG_NOALIAS, temp, REG_NOTES (last));
-+       insns = get_insns ();
-+       end_sequence ();
-+       emit_insns (insns);
-+       valreg = temp;
-      }
-  
-diff -rcp2N gcc-2.7.2.3/cccp.c gcc-2.7.2.3.f.1/cccp.c
-*** gcc-2.7.2.3/cccp.c Thu Oct 26 22:07:26 1995
---- gcc-2.7.2.3.f.1/cccp.c     Sun Aug 10 22:45:53 1997
-*************** initialize_builtins (inp, outp)
-*** 9626,9629 ****
---- 9626,9630 ----
-      so that it is present only when truly compiling with GNU C.  */
-  /*  install ((U_CHAR *) "__GNUC__", -1, T_CONST, "2", -1);  */
-+   install ((U_CHAR *) "__HAVE_BUILTIN_SETJMP__", -1, T_CONST, "1", -1);
-  
-    if (debug_output)
-diff -rcp2N gcc-2.7.2.3/combine.c gcc-2.7.2.3.f.1/combine.c
-*** gcc-2.7.2.3/combine.c      Sun Nov 26 19:32:07 1995
---- gcc-2.7.2.3.f.1/combine.c  Fri Aug 29 07:52:16 1997
-*************** try_combine (i3, i2, i1)
-*** 2011,2016 ****
-                                 XVECEXP (newpat, 0, 1)))
-      {
-!       newi2pat = XVECEXP (newpat, 0, 1);
-!       newpat = XVECEXP (newpat, 0, 0);
-  
-        i2_code_number
---- 2011,2029 ----
-                                 XVECEXP (newpat, 0, 1)))
-      {
-!       /* Normally, it doesn't matter which of the two is done first,
-!       but it does if one references cc0.  In that case, it has to
-!       be first.  */
-! #ifdef HAVE_cc0
-!       if (reg_referenced_p (cc0_rtx, XVECEXP (newpat, 0, 0)))
-!      {
-!        newi2pat = XVECEXP (newpat, 0, 0);
-!        newpat = XVECEXP (newpat, 0, 1);
-!      }
-!       else
-! #endif
-!      {
-!        newi2pat = XVECEXP (newpat, 0, 1);
-!        newpat = XVECEXP (newpat, 0, 0);
-!      }
-  
-        i2_code_number
-*************** simplify_rtx (x, op0_mode, last, in_dest
-*** 3278,3282 ****
-        if (CONSTANT_P (SUBREG_REG (x)) && op0_mode != VOIDmode
-         && GET_MODE_SIZE (mode) == UNITS_PER_WORD
-!        && GET_MODE_SIZE (op0_mode) < UNITS_PER_WORD
-         && GET_MODE_CLASS (mode) == MODE_INT)
-       {
---- 3291,3295 ----
-        if (CONSTANT_P (SUBREG_REG (x)) && op0_mode != VOIDmode
-         && GET_MODE_SIZE (mode) == UNITS_PER_WORD
-!        && GET_MODE_SIZE (op0_mode) > UNITS_PER_WORD
-         && GET_MODE_CLASS (mode) == MODE_INT)
-       {
-*************** simplify_rtx (x, op0_mode, last, in_dest
-*** 3290,3295 ****
-        take the low bits.  On a little-endian machine, that's
-        always valid.  On a big-endian machine, it's valid
-!       only if the constant's mode fits in one word.  */
-!       if (CONSTANT_P (SUBREG_REG (x)) && subreg_lowpart_p (x)
-         && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode)
-         && (! WORDS_BIG_ENDIAN
---- 3303,3316 ----
-        take the low bits.  On a little-endian machine, that's
-        always valid.  On a big-endian machine, it's valid
-!       only if the constant's mode fits in one word.   Note that we
-!       cannot use subreg_lowpart_p since we SUBREG_REG may be VOIDmode.  */
-!       if (CONSTANT_P (SUBREG_REG (x))
-!        && ((GET_MODE_SIZE (op0_mode) <= UNITS_PER_WORD
-!            || ! WORDS_BIG_ENDIAN)
-!            ? SUBREG_WORD (x) == 0
-!            : (SUBREG_WORD (x)
-!               == ((GET_MODE_SIZE (op0_mode)
-!                    - MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD))
-!                   / UNITS_PER_WORD)))
-         && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode)
-         && (! WORDS_BIG_ENDIAN
-*************** num_sign_bit_copies (x, mode)
-*** 7326,7329 ****
---- 7347,7356 ----
-  
-      case NEG:
-+       while (GET_MODE (XEXP (x, 0)) == GET_MODE (x)
-+           && GET_CODE (XEXP (x, 0)) == NEG
-+           && GET_MODE (XEXP (XEXP (x, 0), 0)) == GET_MODE (x)
-+           && GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG)
-+      x = XEXP (XEXP (x, 0), 0);      /* Speed up 961126-1.c */
-+ 
-        /* In general, this subtracts one sign bit copy.  But if the value
-        is known to be positive, the number of sign bit copies is the
-*************** move_deaths (x, from_cuid, to_insn, pnot
-*** 10421,10425 ****
-         if (note != 0 && regno < FIRST_PSEUDO_REGISTER
-             && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-!                != GET_MODE_SIZE (GET_MODE (x))))
-           {
-             int deadregno = REGNO (XEXP (note, 0));
---- 10448,10452 ----
-         if (note != 0 && regno < FIRST_PSEUDO_REGISTER
-             && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-!                > GET_MODE_SIZE (GET_MODE (x))))
-           {
-             int deadregno = REGNO (XEXP (note, 0));
-*************** move_deaths (x, from_cuid, to_insn, pnot
-*** 10437,10452 ****
-                              REG_NOTES (where_dead));
-           }
-!        /* If we didn't find any note, and we have a multi-reg hard
-            register, then to be safe we must check for REG_DEAD notes
-            for each register other than the first.  They could have
-            their own REG_DEAD notes lying around.  */
-!        else if (note == 0 && regno < FIRST_PSEUDO_REGISTER
-                  && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
-           {
-             int ourend = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
-!            int i;
-             rtx oldnotes = 0;
-  
-!            for (i = regno + 1; i < ourend; i++)
-               move_deaths (gen_rtx (REG, reg_raw_mode[i], i),
-                            from_cuid, to_insn, &oldnotes);
---- 10464,10489 ----
-                              REG_NOTES (where_dead));
-           }
-!        /* If we didn't find any note, or if we found a REG_DEAD note that
-!           covers only part of the given reg, and we have a multi-reg hard
-            register, then to be safe we must check for REG_DEAD notes
-            for each register other than the first.  They could have
-            their own REG_DEAD notes lying around.  */
-!        else if ((note == 0
-!                  || (note != 0
-!                      && (GET_MODE_SIZE (GET_MODE (XEXP (note, 0)))
-!                          < GET_MODE_SIZE (GET_MODE (x)))))
-!                 && regno < FIRST_PSEUDO_REGISTER
-                  && HARD_REGNO_NREGS (regno, GET_MODE (x)) > 1)
-           {
-             int ourend = regno + HARD_REGNO_NREGS (regno, GET_MODE (x));
-!            int i, offset;
-             rtx oldnotes = 0;
-  
-!            if (note)
-!              offset = HARD_REGNO_NREGS (regno, GET_MODE (XEXP (note, 0)));
-!            else
-!              offset = 1;
-! 
-!            for (i = regno + offset; i < ourend; i++)
-               move_deaths (gen_rtx (REG, reg_raw_mode[i], i),
-                            from_cuid, to_insn, &oldnotes);
-*************** distribute_notes (notes, from_insn, i3, 
-*** 10648,10651 ****
---- 10685,10689 ----
-       case REG_EQUIV:
-       case REG_NONNEG:
-+      case REG_NOALIAS:
-         /* These notes say something about results of an insn.  We can
-            only support them if they used to be on I3 in which case they
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.c gcc-2.7.2.3.f.1/config/alpha/alpha.c
-*** gcc-2.7.2.3/config/alpha/alpha.c   Sat Jun 29 16:26:53 1996
---- gcc-2.7.2.3.f.1/config/alpha/alpha.c       Fri Aug 29 07:51:37 1997
-*************** extern int rtx_equal_function_value_matt
-*** 64,67 ****
---- 64,69 ----
-  /* Declarations of static functions.  */
-  static void alpha_set_memflags_1  PROTO((rtx, int, int, int));
-+ static rtx alpha_emit_set_const_1 PROTO((rtx, enum machine_mode,
-+                                       HOST_WIDE_INT, int));
-  static void add_long_const   PROTO((FILE *, HOST_WIDE_INT, int, int, int));
-  \f
-*************** alpha_emit_set_const (target, mode, c, n
-*** 670,673 ****
---- 672,695 ----
-       int n;
-  {
-+   rtx pat;
-+   int i;
-+ 
-+   /* Try 1 insn, then 2, then up to N. */
-+   for (i = 1; i <= n; i++)
-+     if ((pat = alpha_emit_set_const_1 (target, mode, c, i)) != 0)
-+       return pat;
-+ 
-+   return 0;
-+ }
-+ 
-+ /* Internal routine for the above to check for N or below insns.  */
-+ 
-+ static rtx
-+ alpha_emit_set_const_1 (target, mode, c, n)
-+      rtx target;
-+      enum machine_mode mode;
-+      HOST_WIDE_INT c;
-+      int n;
-+ {
-    HOST_WIDE_INT new = c;
-    int i, bits;
-*************** alpha_emit_set_const (target, mode, c, n
-*** 714,723 ****
-        if (c == low || (low == 0 && extra == 0))
-       return copy_to_suggested_reg (GEN_INT (c), target, mode);
-!       else if (n >= 2 + (extra != 0)
-!             /* We can't do this when SImode if HIGH required adjustment.
-!                This is because the code relies on an implicit overflow
-!                which is invisible to the RTL.  We can thus get incorrect
-!                code if the two ldah instructions are combined.  */
-!             && ! (mode == SImode && extra != 0))
-       {
-         temp = copy_to_suggested_reg (GEN_INT (low), subtarget, mode);
---- 736,740 ----
-        if (c == low || (low == 0 && extra == 0))
-       return copy_to_suggested_reg (GEN_INT (c), target, mode);
-!       else if (n >= 2 + (extra != 0))
-       {
-         temp = copy_to_suggested_reg (GEN_INT (low), subtarget, mode);
-*************** direct_return ()
-*** 1239,1243 ****
-     cross-compiler.  Otherwise, use the versions in /usr/include/stamp.h.  */
-  
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32)
-  #include <stamp.h>
-  #endif
---- 1256,1260 ----
-     cross-compiler.  Otherwise, use the versions in /usr/include/stamp.h.  */
-  
-! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__)
-  #include <stamp.h>
-  #endif
-*************** output_prolog (file, size)
-*** 1370,1373 ****
---- 1387,1395 ----
-  
-    alpha_function_needs_gp = 0;
-+ #ifdef __linux__
-+   if(profile_flag) {
-+       alpha_function_needs_gp = 1;
-+   }
-+ #endif
-    for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-      if ((GET_CODE (insn) == CALL_INSN)
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.h gcc-2.7.2.3.f.1/config/alpha/alpha.h
-*** gcc-2.7.2.3/config/alpha/alpha.h   Sat Jun 29 16:27:31 1996
---- gcc-2.7.2.3.f.1/config/alpha/alpha.h       Fri Aug 29 07:52:06 1997
-*************** extern int target_flags;
-*** 112,116 ****
---- 112,118 ----
-      {"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} }
-  
-+ #ifndef TARGET_DEFAULT
-  #define TARGET_DEFAULT 3
-+ #endif
-  
-  #ifndef TARGET_CPU_DEFAULT
-*************** extern int target_flags;
-*** 253,256 ****
---- 255,261 ----
-  #define BIGGEST_ALIGNMENT 64
-  
-+ /* For atomic access to objects, must have at least 32-bit alignment.  */
-+ #define MINIMUM_ATOMIC_ALIGNMENT 32
-+ 
-  /* Make strings word-aligned so strcpy from constants will be faster.  */
-  #define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
-*************** enum reg_class { NO_REGS, GENERAL_REGS, 
-*** 664,667 ****
---- 669,675 ----
-     On Alpha, don't define this because there are no push insns.  */
-  /*  #define PUSH_ROUNDING(BYTES) */
-+ 
-+ /* Define this to be nonzero if stack checking is built into the ABI.  */
-+ #define STACK_CHECK_BUILTIN 1
-  
-  /* Define this if the maximum size of all the outgoing args is to be
-diff -rcp2N gcc-2.7.2.3/config/alpha/alpha.md gcc-2.7.2.3.f.1/config/alpha/alpha.md
-*** gcc-2.7.2.3/config/alpha/alpha.md  Fri Oct 27 10:49:59 1995
---- gcc-2.7.2.3.f.1/config/alpha/alpha.md      Fri Jul 11 00:08:48 1997
-***************
-*** 1746,1752 ****
-       (if_then_else:DF 
-        (match_operator 3 "signed_comparison_operator"
-!                       [(match_operand:DF 1 "reg_or_fp0_operand" "fG,fG")
-                         (match_operand:DF 2 "fp0_operand" "G,G")])
-!       (float_extend:DF (match_operand:SF 4 "reg_or_fp0_operand" "fG,0"))
-        (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
-    "TARGET_FP"
---- 1746,1752 ----
-       (if_then_else:DF 
-        (match_operator 3 "signed_comparison_operator"
-!                       [(match_operand:DF 4 "reg_or_fp0_operand" "fG,fG")
-                         (match_operand:DF 2 "fp0_operand" "G,G")])
-!       (float_extend:DF (match_operand:SF 1 "reg_or_fp0_operand" "fG,0"))
-        (match_operand:DF 5 "reg_or_fp0_operand" "0,fG")))]
-    "TARGET_FP"
-diff -rcp2N gcc-2.7.2.3/config/alpha/elf.h gcc-2.7.2.3.f.1/config/alpha/elf.h
-*** gcc-2.7.2.3/config/alpha/elf.h     Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/elf.h Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,522 ----
-+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
-+    Copyright (C) 1996 Free Software Foundation, Inc.
-+    Contributed by Richard Henderson (rth@tamu.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.    */
-+ 
-+ /* This is used on Alpha platforms that use the ELF format.
-+ Currently only Linux uses this. */
-+ 
-+ #include "alpha/linux.h"
-+ 
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)");
-+ 
-+ #undef OBJECT_FORMAT_COFF
-+ #undef EXTENDED_COFF
-+ #define OBJECT_FORMAT_ELF
-+ 
-+ #define SDB_DEBUGGING_INFO
-+ 
-+ #undef ASM_FINAL_SPEC
-+ 
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
-+ 
-+ #undef LINK_SPEC
-+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1}   \
-+   %{shared:-shared}                                          \
-+   %{!shared:                                                 \
-+     %{!static:                                                       \
-+       %{rdynamic:-export-dynamic}                            \
-+       %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}               \
-+     %{static:-static}}"
-+ 
-+ /* Output at beginning of assembler file.  */
-+ 
-+ #undef ASM_FILE_START
-+ #define ASM_FILE_START(FILE)                                 \
-+ {                                                            \
-+   alpha_write_verstamp (FILE);                                       \
-+   output_file_directive (FILE, main_input_filename);         \
-+   fprintf (FILE, "\t.version\t\"01.01\"\n");                 \
-+   fprintf (FILE, "\t.set noat\n");                           \
-+ }
-+ 
-+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE)                 \
-+   alpha_output_lineno (STREAM, LINE)
-+ extern void alpha_output_lineno ();
-+ 
-+ extern void output_file_directive ();
-+ 
-+ /* Attach a special .ident directive to the end of the file to identify
-+    the version of GCC which compiled this code.  The format of the
-+    .ident string is patterned after the ones produced by native svr4
-+    C compilers.  */
-+ 
-+ #define IDENT_ASM_OP ".ident"
-+ 
-+ #ifdef IDENTIFY_WITH_IDENT
-+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */
-+ #define ASM_IDENTIFY_LANGUAGE(FILE)                          \
-+  fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP,               \
-+       lang_identify(), version_string)
-+ #else
-+ #define ASM_FILE_END(FILE)                                   \
-+ do {                                                         \
-+      fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n",           \
-+            IDENT_ASM_OP, version_string);                    \
-+    } while (0)
-+ #endif
-+ 
-+ /* Allow #sccs in preprocessor.  */
-+ 
-+ #define SCCS_DIRECTIVE
-+ 
-+ /* Output #ident as a .ident.  */
-+ 
-+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
-+   fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-+ 
-+ /* This is how to allocate empty space in some section.  The .zero
-+    pseudo-op is used for this on most svr4 assemblers.  */
-+ 
-+ #define SKIP_ASM_OP  ".zero"
-+ 
-+ #undef ASM_OUTPUT_SKIP
-+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
-+   fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-+ 
-+ /* Output the label which precedes a jumptable.  Note that for all svr4
-+    systems where we actually generate jumptables (which is to say every
-+    svr4 target except i386, where we use casesi instead) we put the jump-
-+    tables into the .rodata section and since other stuff could have been
-+    put into the .rodata section prior to any given jumptable, we have to
-+    make sure that the location counter for the .rodata section gets pro-
-+    perly re-aligned prior to the actual beginning of the jump table.  */
-+ 
-+ #define ALIGN_ASM_OP ".align"
-+ 
-+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
-+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
-+   ASM_OUTPUT_ALIGN ((FILE), 2);
-+ #endif
-+ 
-+ #undef ASM_OUTPUT_CASE_LABEL
-+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE)             \
-+   do {                                                                       \
-+     ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE)              \
-+     ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM);                   \
-+   } while (0)
-+ 
-+ /* The standard SVR4 assembler seems to require that certain builtin
-+    library routines (e.g. .udiv) be explicitly declared as .globl
-+    in each assembly file where they are referenced.  */
-+ 
-+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN)                               \
-+   ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
-+ 
-+ /* This says how to output assembler code to declare an
-+    uninitialized external linkage data object.  Under SVR4,
-+    the linker seems to want the alignment of data objects
-+    to depend on their types.  We do exactly that here.  */
-+ 
-+ #define COMMON_ASM_OP        ".comm"
-+ 
-+ #undef ASM_OUTPUT_ALIGNED_COMMON
-+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)           \
-+ do {                                                                 \
-+   fprintf ((FILE), "\t%s\t", COMMON_ASM_OP);                         \
-+   assemble_name ((FILE), (NAME));                                    \
-+   fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT);     \
-+ } while (0)
-+ 
-+ /* This says how to output assembler code to declare an
-+    uninitialized internal linkage data object.  Under SVR4,
-+    the linker seems to want the alignment of data objects
-+    to depend on their types.  We do exactly that here.  */
-+ 
-+ #define LOCAL_ASM_OP ".local"
-+ 
-+ #undef ASM_OUTPUT_ALIGNED_LOCAL
-+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)            \
-+ do {                                                                 \
-+   fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP);                          \
-+   assemble_name ((FILE), (NAME));                                    \
-+   fprintf ((FILE), "\n");                                            \
-+   ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);                       \
-+ } while (0)
-+ 
-+ /* This is the pseudo-op used to generate a 64-bit word of data with a
-+    specific value in some section.    */
-+ 
-+ #define INT_ASM_OP           ".quad"
-+ 
-+ /* This is the pseudo-op used to generate a contiguous sequence of byte
-+    values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
-+    AUTOMATICALLY APPENDED.  This is the same for most svr4 assemblers.  */
-+ 
-+ #undef ASCII_DATA_ASM_OP
-+ #define ASCII_DATA_ASM_OP    ".ascii"
-+ 
-+ /* Support const sections and the ctors and dtors sections for g++.
-+    Note that there appears to be two different ways to support const
-+    sections at the moment.  You can either #define the symbol
-+    READONLY_DATA_SECTION (giving it some code which switches to the
-+    readonly data section) or else you can #define the symbols
-+    EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+    SELECT_RTX_SECTION.  We do both here just to be on the safe side.  */
-+ 
-+ #define USE_CONST_SECTION    1
-+ 
-+ #define CONST_SECTION_ASM_OP ".section\t.rodata"
-+ 
-+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
-+ 
-+    Note that we want to give these sections the SHF_WRITE attribute
-+    because these sections will actually contain data (i.e. tables of
-+    addresses of functions in the current root executable or shared library
-+    file) and, in the case of a shared library, the relocatable addresses
-+    will have to be properly resolved/relocated (and then written into) by
-+    the dynamic linker when it actually attaches the given shared library
-+    to the executing process.  (Note that on SVR4, you may wish to use the
-+    `-z text' option to the ELF linker, when building a shared library, as
-+    an additional check that you are doing everything right.  But if you do
-+    use the `-z text' option when building a shared library, you will get
-+    errors unless the .ctors and .dtors sections are marked as writable
-+    via the SHF_WRITE attribute.)  */
-+ 
-+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
-+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
-+ 
-+ /* On svr4, we *do* have support for the .init and .fini sections, and we
-+    can put stuff in there to be executed before and after `main'.  We let
-+    crtstuff.c and other files know this by defining the following symbols.
-+    The definitions say how to change sections to the .init and .fini
-+    sections.  This is the same for all known svr4 assemblers.  */
-+ 
-+ #define INIT_SECTION_ASM_OP  ".section\t.init"
-+ #define FINI_SECTION_ASM_OP  ".section\t.fini"
-+ 
-+ /* Support non-common, uninitialized data in the .bss section.  */
-+ 
-+ #define BSS_SECTION_ASM_OP   ".section\t.bss"
-+ 
-+ /* A default list of other sections which we might be "in" at any given
-+    time.  For targets that use additional sections (e.g. .tdesc) you
-+    should override this definition in the target-specific file which
-+    includes this file.  */
-+ 
-+ #undef EXTRA_SECTIONS
-+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_bss
-+ 
-+ /* A default list of extra section function definitions.  For targets
-+    that use additional sections (e.g. .tdesc) you should override this
-+    definition in the target-specific file which includes this file.  */
-+ 
-+ #undef EXTRA_SECTION_FUNCTIONS
-+ #define EXTRA_SECTION_FUNCTIONS                                              \
-+   CONST_SECTION_FUNCTION                                             \
-+   CTORS_SECTION_FUNCTION                                             \
-+   DTORS_SECTION_FUNCTION                                             \
-+   BSS_SECTION_FUNCTION
-+ 
-+ #undef READONLY_DATA_SECTION
-+ #define READONLY_DATA_SECTION() const_section ()
-+ 
-+ extern void text_section ();
-+ 
-+ #define CONST_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ const_section ()                                                     \
-+ {                                                                    \
-+   if (!USE_CONST_SECTION)                                            \
-+     text_section();                                                  \
-+   else if (in_section != in_const)                                   \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP);          \
-+       in_section = in_const;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define CTORS_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ ctors_section ()                                                     \
-+ {                                                                    \
-+   if (in_section != in_ctors)                                                \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP);          \
-+       in_section = in_ctors;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define DTORS_SECTION_FUNCTION                                               \
-+ void                                                                 \
-+ dtors_section ()                                                     \
-+ {                                                                    \
-+   if (in_section != in_dtors)                                                \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP);          \
-+       in_section = in_dtors;                                         \
-+     }                                                                        \
-+ }
-+ 
-+ #define BSS_SECTION_FUNCTION                                         \
-+ void                                                                 \
-+ bss_section ()                                                               \
-+ {                                                                    \
-+   if (in_section != in_bss)                                          \
-+     {                                                                        \
-+       fprintf (asm_out_file, "%s\n", BSS_SECTION_ASM_OP);            \
-+       in_section = in_bss;                                           \
-+     }                                                                        \
-+ }
-+ 
-+ 
-+ /* Switch into a generic section.
-+    This is currently only used to support section attributes.
-+ 
-+    We make the section read-only and executable for a function decl,
-+    read-only for a const data decl, and writable for a non-const data decl.  */
-+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
-+   fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
-+         (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
-+         (DECL) && TREE_READONLY (DECL) ? "a" : "aw")
-+ 
-+ 
-+ /* A C statement (sans semicolon) to output an element in the table of
-+    global constructors.  */
-+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)                            \
-+   do {                                                                       \
-+     ctors_section ();                                                        \
-+     fprintf (FILE, "\t%s\t ", INT_ASM_OP);                           \
-+     assemble_name (FILE, NAME);                                              \
-+     fprintf (FILE, "\n");                                            \
-+   } while (0)
-+ 
-+ /* A C statement (sans semicolon) to output an element in the table of
-+    global destructors.  */
-+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)                                     \
-+   do {                                                                       \
-+     dtors_section ();                                                \
-+     fprintf (FILE, "\t%s\t ", INT_ASM_OP);                           \
-+     assemble_name (FILE, NAME);                                              \
-+     fprintf (FILE, "\n");                                            \
-+   } while (0)
-+ 
-+ /* A C statement or statements to switch to the appropriate
-+    section for output of DECL.  DECL is either a `VAR_DECL' node
-+    or a constant of some sort.  RELOC indicates whether forming
-+    the initial value of DECL requires link-time relocations.  */
-+ 
-+ #define SELECT_SECTION(DECL,RELOC)                                   \
-+ {                                                                    \
-+   if (TREE_CODE (DECL) == STRING_CST)                                        \
-+     {                                                                        \
-+       if (! flag_writable_strings)                                   \
-+      const_section ();                                               \
-+       else                                                           \
-+      data_section ();                                                \
-+     }                                                                        \
-+   else if (TREE_CODE (DECL) == VAR_DECL)                             \
-+     {                                                                        \
-+       if ((flag_pic && RELOC)                                                \
-+        || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)          \
-+        || !DECL_INITIAL (DECL)                                       \
-+        || (DECL_INITIAL (DECL) != error_mark_node                    \
-+            && !TREE_CONSTANT (DECL_INITIAL (DECL))))                 \
-+         {                                                            \
-+           if (DECL_COMMON (DECL)                                     \
-+            && !DECL_INITIAL (DECL))                                  \
-+                /* || DECL_INITIAL (DECL) == error_mark_node)) */     \
-+          bss_section();                                              \
-+        else                                                          \
-+          data_section ();                                            \
-+      }                                                               \
-+       else                                                           \
-+      const_section ();                                               \
-+     }                                                                        \
-+   else                                                                       \
-+     const_section ();                                                        \
-+ }
-+ 
-+ /* A C statement or statements to switch to the appropriate
-+    section for output of RTX in mode MODE.  RTX is some kind
-+    of constant in RTL.  The argument MODE is redundant except
-+    in the case of a `const_int' rtx.  Currently, these always
-+    go into the const section.  */
-+ 
-+ #undef SELECT_RTX_SECTION
-+ #define SELECT_RTX_SECTION(MODE,RTX) const_section()
-+ 
-+ /* Define the strings used for the special svr4 .type and .size directives.
-+    These strings generally do not vary from one system running svr4 to
-+    another, but if a given system (e.g. m88k running svr) needs to use
-+    different pseudo-op names for these, they may be overridden in the
-+    file which includes this one.  */
-+ 
-+ #define TYPE_ASM_OP  ".type"
-+ #define SIZE_ASM_OP  ".size"
-+ 
-+ /* This is how we tell the assembler that a symbol is weak.  */
-+ 
-+ #define ASM_WEAKEN_LABEL(FILE,NAME) \
-+   do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-+        fputc ('\n', FILE); } while (0)
-+ 
-+ /* 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)
-+ 
-+ /* The following macro defines the format used to output the second
-+    operand of the .type assembler directive.  Different svr4 assemblers
-+    expect various different forms for this operand.  The one given here
-+    is just a default.  You may need to override it in your machine-
-+    specific tm.h file (depending upon the particulars of your assembler).  */
-+ 
-+ #define TYPE_OPERAND_FMT     "@%s"
-+ 
-+ /* Write the extra assembler code needed to declare a function's result.
-+    Most svr4 assemblers don't require any special declaration of the
-+    result value, but there are exceptions.  */
-+ 
-+ #ifndef ASM_DECLARE_RESULT
-+ #define ASM_DECLARE_RESULT(FILE, RESULT)
-+ #endif
-+ 
-+ /* These macros generate the special .type and .size directives which
-+    are used to set the corresponding fields of the linker symbol table
-+    entries in an ELF object file under SVR4.  These macros also output
-+    the starting labels for the relevant functions/objects.  */
-+ 
-+ /* Write the extra assembler code needed to declare an object properly.  */
-+ 
-+ #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                    \
-+   do {                                                                       \
-+     fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                          \
-+     assemble_name (FILE, NAME);                                              \
-+     putc (',', FILE);                                                        \
-+     fprintf (FILE, TYPE_OPERAND_FMT, "object");                              \
-+     putc ('\n', FILE);                                                       \
-+     size_directive_output = 0;                                               \
-+     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))            \
-+       {                                                                      \
-+      size_directive_output = 1;                                      \
-+      fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
-+      assemble_name (FILE, NAME);                                     \
-+      fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-+       }                                                                      \
-+     ASM_OUTPUT_LABEL(FILE, NAME);                                    \
-+   } while (0)
-+ 
-+ /* Output the size directive for a decl in rest_of_decl_compilation
-+    in the case where we did not do so before the initializer.
-+    Once we find the error_mark_node, we know that the value of
-+    size_directive_output was set
-+    by ASM_DECLARE_OBJECT_NAME when it was run for the same decl.  */
-+ 
-+ #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)      \
-+ do {                                                                  \
-+      char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);                        \
-+      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)             \
-+          && ! AT_END && TOP_LEVEL                                     \
-+       && DECL_INITIAL (DECL) == error_mark_node                       \
-+       && !size_directive_output)                                      \
-+        {                                                              \
-+       size_directive_output = 1;                                      \
-+       fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
-+       assemble_name (FILE, name);                                     \
-+       fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
-+        }                                                              \
-+    } while (0)
-+ 
-+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-+    ASM_OUTPUT_LIMITED_STRING macros.  Each byte in the table
-+    corresponds to a particular byte value [0..255].  For any
-+    given byte value, if the value in the corresponding table
-+    position is zero, the given character can be output directly.
-+    If the table value is 1, the byte must be output as a \ooo
-+    octal escape.  If the tables value is anything else, then the
-+    byte value should be output as a \ followed by the value
-+    in the table.  Note that we can use standard UN*X escape
-+    sequences for many control characters, but we don't use
-+    \a to represent BEL because some svr4 assemblers (e.g. on
-+    the i386) don't know about that.  Also, we don't use \v
-+    since some versions of gas, such as 2.2 did not accept it.  */
-+ 
-+ #define ESCAPES \
-+ "\1\1\1\1\1\1\1\1btn\1fr\1\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\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\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\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\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\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-+ 
-+ /* Some svr4 assemblers have a limit on the number of characters which
-+    can appear in the operand of a .string directive.  If your assembler
-+    has such a limitation, you should define STRING_LIMIT to reflect that
-+    limit.  Note that at least some svr4 assemblers have a limit on the
-+    actual number of bytes in the double-quoted string, and that they
-+    count each character in an escape sequence as one byte.  Thus, an
-+    escape sequence like \377 would count as four bytes.
-+ 
-+    If your target assembler doesn't support the .string directive, you
-+    should define this to zero.
-+ */
-+ 
-+ #define STRING_LIMIT ((unsigned) 256)
-+ 
-+ #define STRING_ASM_OP        ".string"
-+ 
-+ /*
-+  * We always use gas here, so we don't worry about ECOFF assembler problems.
-+  */
-+ #undef TARGET_GAS
-+ #define TARGET_GAS   (1)
-+ 
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+ 
-+ /* 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 crtbegin.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 \
-+   "crtend.o%s crtn.o%s"
-diff -rcp2N gcc-2.7.2.3/config/alpha/linux.h gcc-2.7.2.3.f.1/config/alpha/linux.h
-*** gcc-2.7.2.3/config/alpha/linux.h   Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/linux.h       Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,72 ----
-+ /* Definitions of target machine for GNU compiler, for Alpha Linux,
-+    using ECOFF.
-+    Copyright (C) 1995 Free Software Foundation, Inc.
-+    Contributed by Bob Manson.
-+    Derived from work contributed by Cygnus Support,
-+    (c) 1993 Free Software Foundation.
-+ 
-+ 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.  */
-+ 
-+ #define TARGET_DEFAULT (3 | MASK_GAS)
-+ 
-+ #include "alpha/alpha.h"
-+ 
-+ #undef TARGET_VERSION
-+ #define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)");
-+ 
-+ #undef CPP_PREDEFINES
-+ #define CPP_PREDEFINES "\
-+ -D__alpha -D__alpha__ -D__linux__ -D__linux -D_LONGLONG -Dlinux -Dunix \
-+ -Asystem(linux) -Acpu(alpha) -Amachine(alpha)"
-+ 
-+ /* We don't actually need any of these; the MD_ vars are ignored
-+    anyway for cross-compilers, and the other specs won't get picked up
-+    'coz the user is supposed to do ld -r (hmm, perhaps that should be
-+    the default).  In any case, setting them thus will catch some
-+    common user errors. */
-+ 
-+ #undef       MD_EXEC_PREFIX
-+ #undef       MD_STARTFILE_PREFIX
-+ 
-+ #undef       LIB_SPEC
-+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
-+ 
-+ #undef       LINK_SPEC
-+ #define LINK_SPEC  \
-+   "-G 8 %{O*:-O3} %{!O*:-O1}"
-+ 
-+ #undef ASM_SPEC
-+ #define ASM_SPEC "-nocpp"
-+ 
-+ /* Can't do stabs */
-+ #undef SDB_DEBUGGING_INFO
-+ 
-+ /* Prefer dbx.  */
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+ 
-+ #undef FUNCTION_PROFILER
-+ 
-+ #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-+     do {                                                     \
-+      fputs ("\tlda $27,_mcount\n", (FILE));                  \
-+      fputs ("\tjsr $26,($27),_mcount\n", (FILE));            \
-+      fputs ("\tldgp $29,0($26)\n", (FILE));                  \
-+     } while (0);
-+ 
-+ /* Generate calls to memcpy, etc., not bcopy, etc. */
-+ #define TARGET_MEM_FUNCTIONS
-diff -rcp2N gcc-2.7.2.3/config/alpha/t-linux gcc-2.7.2.3.f.1/config/alpha/t-linux
-*** gcc-2.7.2.3/config/alpha/t-linux   Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/t-linux       Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,3 ----
-+ # Our header files are supposed to be correct, nein?
-+ FIXINCLUDES = 
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.3/config/alpha/x-linux gcc-2.7.2.3.f.1/config/alpha/x-linux
-*** gcc-2.7.2.3/config/alpha/x-linux   Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/x-linux       Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1 ----
-+ CLIB=-lbfd -liberty
-diff -rcp2N gcc-2.7.2.3/config/alpha/xm-alpha.h gcc-2.7.2.3.f.1/config/alpha/xm-alpha.h
-*** gcc-2.7.2.3/config/alpha/xm-alpha.h        Thu Aug 31 21:52:27 1995
---- gcc-2.7.2.3.f.1/config/alpha/xm-alpha.h    Fri Jul 11 00:08:49 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 46,51 ****
---- 46,53 ----
-  #include <alloca.h>
-  #else
-+ #ifndef alloca
-  extern void *alloca ();
-  #endif
-+ #endif
-  
-  /* The host compiler has problems with enum bitfields since it makes
-*************** extern void *malloc (), *realloc (), *ca
-*** 68,72 ****
---- 70,76 ----
-  /* OSF/1 has vprintf.  */
-  
-+ #ifndef linux  /* 1996/02/22 mauro@craftwork.com -- unreliable with Linux */
-  #define HAVE_VPRINTF
-+ #endif
-  
-  /* OSF/1 has putenv.  */
-diff -rcp2N gcc-2.7.2.3/config/alpha/xm-linux.h gcc-2.7.2.3.f.1/config/alpha/xm-linux.h
-*** gcc-2.7.2.3/config/alpha/xm-linux.h        Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/alpha/xm-linux.h    Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,10 ----
-+ #ifndef _XM_LINUX_H
-+ #define _XM_LINUX_H
-+ 
-+ #include "xm-alpha.h"
-+ 
-+ #define HAVE_STRERROR
-+ 
-+ #define DONT_DECLARE_SYS_SIGLIST
-+ #define USE_BFD
-+ #endif
-diff -rcp2N gcc-2.7.2.3/config/i386/i386.c gcc-2.7.2.3.f.1/config/i386/i386.c
-*** gcc-2.7.2.3/config/i386/i386.c     Sun Oct 22 11:13:21 1995
---- gcc-2.7.2.3.f.1/config/i386/i386.c Sun Aug 10 22:46:09 1997
-*************** standard_80387_constant_p (x)
-*** 1290,1294 ****
-    set_float_handler (handler);
-    REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-!   is0 = REAL_VALUES_EQUAL (d, dconst0);
-    is1 = REAL_VALUES_EQUAL (d, dconst1);
-    set_float_handler (NULL_PTR);
---- 1290,1294 ----
-    set_float_handler (handler);
-    REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-!   is0 = REAL_VALUES_EQUAL (d, dconst0) && !REAL_VALUE_MINUS_ZERO (d);
-    is1 = REAL_VALUES_EQUAL (d, dconst1);
-    set_float_handler (NULL_PTR);
-diff -rcp2N gcc-2.7.2.3/config/i386/i386.h gcc-2.7.2.3.f.1/config/i386/i386.h
-*** gcc-2.7.2.3/config/i386/i386.h     Fri Sep 22 22:42:57 1995
---- gcc-2.7.2.3.f.1/config/i386/i386.h Sun Aug 24 10:33:50 1997
-*************** extern int target_flags;
-*** 245,249 ****
-  
-  /* Boundary (in *bits*) on which stack pointer should be aligned.  */
-! #define STACK_BOUNDARY 32
-  
-  /* Allocation boundary (in *bits*) for the code of a function.
---- 245,249 ----
-  
-  /* Boundary (in *bits*) on which stack pointer should be aligned.  */
-! #define STACK_BOUNDARY BIGGEST_ALIGNMENT
-  
-  /* Allocation boundary (in *bits*) for the code of a function.
-diff -rcp2N gcc-2.7.2.3/config/m68k/m68k.md gcc-2.7.2.3.f.1/config/m68k/m68k.md
-*** gcc-2.7.2.3/config/m68k/m68k.md    Sun Aug 31 09:39:43 1997
---- gcc-2.7.2.3.f.1/config/m68k/m68k.md        Sun Aug 31 09:21:09 1997
-***************
-*** 288,292 ****
-         (match_operand:DI 0 "nonimmediate_operand" "d"))
-       (clobber (match_dup 1))])]
-!   ""
-    "operands[1] = gen_reg_rtx (DImode);")
-  
---- 288,292 ----
-         (match_operand:DI 0 "nonimmediate_operand" "d"))
-       (clobber (match_dup 1))])]
-!   "0"
-    "operands[1] = gen_reg_rtx (DImode);")
-  
-***************
-*** 411,415 ****
-                  (match_operand:DI 1 "general_operand" "")))
-       (clobber (match_dup 2))])]
-!   ""
-    "operands[2] = gen_reg_rtx (DImode);")
-  
---- 411,415 ----
-                  (match_operand:DI 1 "general_operand" "")))
-       (clobber (match_dup 2))])]
-!   "0"
-    "operands[2] = gen_reg_rtx (DImode);")
-  
-diff -rcp2N gcc-2.7.2.3/config/mips/mips.c gcc-2.7.2.3.f.1/config/mips/mips.c
-*** gcc-2.7.2.3/config/mips/mips.c     Sat Jun 29 16:26:44 1996
---- gcc-2.7.2.3.f.1/config/mips/mips.c Sun Aug 10 22:45:43 1997
-*************** expand_block_move (operands)
-*** 2360,2365 ****
-  
-    else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-!     emit_insn (gen_movstrsi_internal (gen_rtx (MEM, BLKmode, dest_reg),
-!                                    gen_rtx (MEM, BLKmode, src_reg),
-                                     bytes_rtx, align_rtx));
-  
---- 2360,2367 ----
-  
-    else if (constp && bytes <= 2*MAX_MOVE_BYTES)
-!     emit_insn (gen_movstrsi_internal (change_address (operands[0],
-!                                                    BLKmode, dest_reg),
-!                                    change_address (orig_src, BLKmode,
-!                                                    src_reg),
-                                     bytes_rtx, align_rtx));
-  
-diff -rcp2N gcc-2.7.2.3/config/mips/mips.h gcc-2.7.2.3.f.1/config/mips/mips.h
-*** gcc-2.7.2.3/config/mips/mips.h     Thu Nov  9 16:23:09 1995
---- gcc-2.7.2.3.f.1/config/mips/mips.h Sun Aug 10 22:46:44 1997
-*************** typedef struct mips_args {
-*** 2160,2170 ****
-      }                                                                            \
-                                                                           \
-!   /* Flush the instruction cache.  */                                            \
-!   /* ??? Are the modes right? Maybe they should depend on -mint64/-mlong64? */\
-    /* ??? Should check the return value for errors.  */                           \
-!   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "cacheflush"),                  \
-                    0, VOIDmode, 3, addr, Pmode,                           \
-                    GEN_INT (TRAMPOLINE_SIZE), SImode,                     \
-!                   GEN_INT (1), SImode);                                  \
-  }
-  \f
---- 2160,2170 ----
-      }                                                                            \
-                                                                           \
-!   /* Flush both caches.  We need to flush the data cache in case         \
-!      the system has a write-back cache.  */                              \
-    /* ??? Should check the return value for errors.  */                           \
-!   emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "_flush_cache"),        \
-                    0, VOIDmode, 3, addr, Pmode,                           \
-                    GEN_INT (TRAMPOLINE_SIZE), SImode,                     \
-!                   GEN_INT (3), TYPE_MODE (integer_type_node));           \
-  }
-  \f
-*************** typedef struct mips_args {
-*** 2388,2392 ****
-    ((GET_CODE (X) != CONST_DOUBLE                                     \
-      || mips_const_double_ok (X, GET_MODE (X)))                               \
-!    && ! (GET_CODE (X) == CONST && ABI_64BIT))
-  
-  /* A C compound statement that attempts to replace X with a valid
---- 2388,2393 ----
-    ((GET_CODE (X) != CONST_DOUBLE                                     \
-      || mips_const_double_ok (X, GET_MODE (X)))                               \
-!    && ! (GET_CODE (X) == CONST                                               \
-!       && (ABI_64BIT || GET_CODE (XEXP (X, 0)) == MINUS)))
-  
-  /* A C compound statement that attempts to replace X with a valid
-diff -rcp2N gcc-2.7.2.3/config/mips/sni-gas.h gcc-2.7.2.3.f.1/config/mips/sni-gas.h
-*** gcc-2.7.2.3/config/mips/sni-gas.h  Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/sni-gas.h      Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,43 ----
-+ #include "mips/sni-svr4.h"
-+ 
-+ /* Enable debugging.  */
-+ #define DBX_DEBUGGING_INFO
-+ #define SDB_DEBUGGING_INFO
-+ #define MIPS_DEBUGGING_INFO
-+ 
-+ #define DWARF_DEBUGGING_INFO
-+ #undef PREFERRED_DEBUGGING_TYPE
-+ #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
-+ 
-+ /* We need to use .esize and .etype instead of .size and .type to
-+    avoid conflicting with ELF directives.  These are only recognized
-+    by gas, anyhow, not the native assembler.  */
-+ #undef PUT_SDB_SIZE
-+ #define PUT_SDB_SIZE(a)                                       \
-+ do {                                                  \
-+   extern FILE *asm_out_text_file;                     \
-+   fprintf (asm_out_text_file, "\t.esize\t%d;", (a));  \
-+ } while (0)
-+ 
-+ #undef PUT_SDB_TYPE
-+ #define PUT_SDB_TYPE(a)                                       \
-+ do {                                                  \
-+   extern FILE *asm_out_text_file;                     \
-+   fprintf (asm_out_text_file, "\t.etype\t0x%x;", (a));        \
-+ } while (0)
-+ 
-+ 
-+ /* This is how to equate one symbol to another symbol.  The syntax used is
-+    `SYM1=SYM2'.  Note that this is different from the way equates are done
-+    with most svr4 assemblers, where the syntax is `.set SYM1,SYM2'.  */
-+ 
-+ #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)                           \
-+  do {        fprintf ((FILE), "\t");                                         \
-+      assemble_name (FILE, LABEL1);                                   \
-+      fprintf (FILE, " = ");                                          \
-+      assemble_name (FILE, LABEL2);                                   \
-+      fprintf (FILE, "\n");                                           \
-+   } while (0)
-+ 
-+ 
-+ 
-diff -rcp2N gcc-2.7.2.3/config/mips/sni-svr4.h gcc-2.7.2.3.f.1/config/mips/sni-svr4.h
-*** gcc-2.7.2.3/config/mips/sni-svr4.h Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/sni-svr4.h     Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,103 ----
-+ /* Definitions of target machine for GNU compiler.  SNI SINIX version.
-+    Copyright (C) 1996 Free Software Foundation, Inc.
-+    Contributed by Marco Walther (Marco.Walther@mch.sni.de).
-+ 
-+ 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.  */
-+ 
-+ #define MIPS_SVR4
-+ 
-+ #define CPP_PREDEFINES "\
-+ -Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_SVR4 \
-+ -D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_SVR4 \
-+ -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(mips)"
-+ 
-+ #define CPP_SPEC "\
-+ %{.cc:       -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.cxx:      -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.C:        -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \
-+ %{.m:        -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C} \
-+ %{.S:        -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{.s:        -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
-+ %{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
-+ -D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int"
-+ 
-+ #define LINK_SPEC "\
-+ %{G*} \
-+ %{!mgas: \
-+      %{dy} %{dn}}"
-+                  
-+ #define LIB_SPEC "\
-+      %{p:-lprof1} \
-+      %{!p:%{pg:-lprof1} \
-+           %{!pg:-L/usr/ccs/lib/ -lc /usr/ccs/lib/crtn.o%s}}"
-+ 
-+ #define STARTFILE_SPEC "\
-+      %{pg:gcrt0.o%s} \
-+      %{!pg:%{p:mcrt0.o%s} \
-+             %{!p:/usr/ccs/lib/crt1.o /usr/ccs/lib/crti.o /usr/ccs/lib/values-Xt.o%s}}"
-+ 
-+ /* Mips System V.4 doesn't have a getpagesize() function needed by the
-+    trampoline code, so use the POSIX sysconf function to get it.
-+    This is only done when compiling the trampoline code.  */
-+ 
-+ #ifdef  L_trampoline
-+ #include <unistd.h>
-+ 
-+ #define getpagesize()        sysconf(_SC_PAGE_SIZE)
-+ #endif /*  L_trampoline */
-+ 
-+ /* Use atexit for static constructors/destructors, instead of defining
-+    our own exit function.  */
-+ #define HAVE_ATEXIT
-+ 
-+ /* Generate calls to memcpy, etc., not bcopy, etc.  */
-+ #define TARGET_MEM_FUNCTIONS
-+ 
-+ #define OBJECT_FORMAT_ELF
-+ 
-+ #define      TARGET_DEFAULT  MASK_ABICALLS
-+ #define ABICALLS_ASM_OP ".option pic2"
-+ 
-+ #define MACHINE_TYPE "SNI running SINIX 5.42"
-+ 
-+ #define MIPS_DEFAULT_GVALUE  0
-+ 
-+ #define NM_FLAGS     "-p"
-+ 
-+ /* wir haben ein Problem, wenn in einem Assembler-File keine .text-section
-+    erzeugt wird. Dann landen diese Pseudo-Labels in irgendeiner anderen
-+    section, z.B. .reginfo. Das macht den ld sehr ungluecklich. */
-+ 
-+ #define ASM_IDENTIFY_GCC(mw_stream) \
-+      fprintf(mw_stream, "\t.ident \"gcc2_compiled.\"\n");
-+ 
-+ #define ASM_IDENTIFY_LANGUAGE(STREAM)
-+ 
-+ #define ASM_LONG     ".word\t"
-+ #define ASM_GLOBAL   ".rdata\n\t\t.globl\t"
-+ 
-+ #include "mips/mips.h"
-+ 
-+ /* We do not want to run mips-tfile!  */
-+ #undef ASM_FINAL_SPEC
-+ 
-+ #undef OBJECT_FORMAT_COFF
-+ 
-+ /* We don't support debugging info for now. */
-+ #undef DBX_DEBUGGING_INFO
-+ #undef SDB_DEBUGGING_INFO
-+ #undef MIPS_DEBUGGING_INFO
-diff -rcp2N gcc-2.7.2.3/config/mips/x-sni-svr4 gcc-2.7.2.3.f.1/config/mips/x-sni-svr4
-*** gcc-2.7.2.3/config/mips/x-sni-svr4 Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/mips/x-sni-svr4     Sun Aug 10 22:46:33 1997
-***************
-*** 0 ****
---- 1,18 ----
-+ # Define CC and OLDCC as the same, so that the tests:
-+ #    if [ x"$(OLDCC)" = x"$(CC)" ] ...
-+ #
-+ # will succeed (if OLDCC != CC, it is assumed that GCC is
-+ # being used in secondary stage builds).
-+ # -Olimit is so the user can use -O2.  Down with fixed
-+ # size tables!
-+ 
-+ CC           = $(OLDCC)
-+ OPT          =
-+ OLDCC                = cc -Olimit 3000 $(OPT)
-+ 
-+ X_CFLAGS     = -DNO_SYS_SIGLIST
-+ 
-+ # Show we need to use the C version of ALLOCA
-+ # The SVR3 configurations have it, but the SVR4 configurations don't.
-+ # For now, just try using it for all SVR* configurations.
-+ ALLOCA               = alloca.o
-diff -rcp2N gcc-2.7.2.3/config/msdos/configur.bat gcc-2.7.2.3.f.1/config/msdos/configur.bat
-*** gcc-2.7.2.3/config/msdos/configur.bat      Mon Aug 28 09:55:47 1995
---- gcc-2.7.2.3.f.1/config/msdos/configur.bat  Sun Aug 10 23:08:05 1997
-*************** sed -f config/msdos/top.sed Makefile.in 
-*** 18,21 ****
---- 18,27 ----
-  set LANG=\r
-  \r
-+ if not exist ada\make-lang.in goto no_ada\r
-+ sed -f config/msdos/top.sed ada\make-lang.in >> Makefile\r
-+ sed -f config/msdos/top.sed ada\makefile.in > ada\Makefile\r
-+ set LANG=%LANG% ada.&        \r
-+ :no_ada\r
-+ \r
-  if not exist cp\make-lang.in goto no_cp\r
-  sed -f config/msdos/top.sed cp\make-lang.in >> Makefile\r
-diff -rcp2N gcc-2.7.2.3/config/pa/pa.c gcc-2.7.2.3.f.1/config/pa/pa.c
-*** gcc-2.7.2.3/config/pa/pa.c Sun Oct 22 11:45:20 1995
---- gcc-2.7.2.3.f.1/config/pa/pa.c     Sun Aug 10 22:45:44 1997
-*************** output_move_double (operands)
-*** 1344,1369 ****
-       do them in the other order.
-  
-!      RMS says "This happens only for registers;
-!      such overlap can't happen in memory unless the user explicitly
-!      sets it up, and that is an undefined circumstance."
-! 
-!      but it happens on the HP-PA when loading parameter registers,
-!      so I am going to define that circumstance, and make it work
-!      as expected.  */
-  
-!   if (optype0 == REGOP && (optype1 == MEMOP || optype1 == OFFSOP)
-!         && reg_overlap_mentioned_p (operands[0], XEXP (operands[1], 0)))
-      {
--       /* XXX THIS PROBABLY DOESN'T WORK.  */
-        /* Do the late half first.  */
-        if (addreg1)
-       output_asm_insn ("ldo 4(%0),%0", &addreg1);
-        output_asm_insn (singlemove_string (latehalf), latehalf);
-        if (addreg1)
-       output_asm_insn ("ldo -4(%0),%0", &addreg1);
--       /* Then clobber.  */
-        return singlemove_string (operands);
-      }
-  
-    if (optype0 == REGOP && optype1 == REGOP
-        && REGNO (operands[0]) == REGNO (operands[1]) + 1)
---- 1344,1377 ----
-       do them in the other order.
-  
-!      This can happen in two cases:
-  
-!      mem -> register where the first half of the destination register
-!      is the same register used in the memory's address.  Reload
-!      can create such insns.
-! 
-!      mem in this case will be either register indirect or register
-!      indirect plus a valid offset. 
-! 
-!      register -> register move where REGNO(dst) == REGNO(src + 1)
-!      someone (Tim/Tege?) claimed this can happen for parameter loads. 
-! 
-!      Handle mem -> register case first.  */
-!   if (optype0 == REGOP
-!       && (optype1 == MEMOP || optype1 == OFFSOP)
-!       && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-!                          operands[1], 0))
-      {
-        /* Do the late half first.  */
-        if (addreg1)
-       output_asm_insn ("ldo 4(%0),%0", &addreg1);
-        output_asm_insn (singlemove_string (latehalf), latehalf);
-+ 
-+       /* Then clobber.  */
-        if (addreg1)
-       output_asm_insn ("ldo -4(%0),%0", &addreg1);
-        return singlemove_string (operands);
-      }
-  
-+   /* Now handle register -> register case.  */
-    if (optype0 == REGOP && optype1 == REGOP
-        && REGNO (operands[0]) == REGNO (operands[1]) + 1)
-diff -rcp2N gcc-2.7.2.3/config/pa/pa.md gcc-2.7.2.3.f.1/config/pa/pa.md
-*** gcc-2.7.2.3/config/pa/pa.md        Mon Aug 14 13:00:49 1995
---- gcc-2.7.2.3.f.1/config/pa/pa.md    Sun Aug 10 22:45:45 1997
-***************
-*** 1828,1832 ****
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=f,*r,Q,?o,?Q,f,*&r,*&r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "fG,*rG,f,*r,*r,Q,o,Q"))]
---- 1828,1832 ----
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=f,*r,Q,?o,?Q,f,*r,*r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "fG,*rG,f,*r,*r,Q,o,Q"))]
-***************
-*** 1846,1850 ****
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,?o,?Q,&r,&r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "rG,r,r,o,Q"))]
---- 1846,1850 ----
-  (define_insn ""
-    [(set (match_operand:DF 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,?o,?Q,r,r")
-       (match_operand:DF 1 "reg_or_0_or_nonsymb_mem_operand"
-                         "rG,r,r,o,Q"))]
-***************
-*** 2019,2023 ****
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,&r,&r,&r,f,f,*T")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i,fM,*T,f"))]
---- 2019,2023 ----
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,r,r,r,f,f,*T")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i,fM,*T,f"))]
-***************
-*** 2037,2041 ****
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,&r,&r,&r")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i"))]
---- 2037,2041 ----
-  (define_insn ""
-    [(set (match_operand:DI 0 "reg_or_nonsymb_mem_operand"
-!                        "=r,o,Q,r,r,r")
-       (match_operand:DI 1 "general_operand"
-                         "rM,r,r,o,Q,i"))]
-diff -rcp2N gcc-2.7.2.3/config/rs6000/rs6000.c gcc-2.7.2.3.f.1/config/rs6000/rs6000.c
-*** gcc-2.7.2.3/config/rs6000/rs6000.c Sat Jun 29 16:26:26 1996
---- gcc-2.7.2.3.f.1/config/rs6000/rs6000.c     Fri Aug 29 07:51:51 1997
-*************** input_operand (op, mode)
-*** 724,730 ****
-      return 1;
-  
-!   /* For HImode and QImode, any constant is valid. */
-!   if ((mode == HImode || mode == QImode)
-!       && GET_CODE (op) == CONST_INT)
-      return 1;
-  
---- 724,729 ----
-      return 1;
-  
-!   /* For integer modes, any constant is ok.  */
-!   if (GET_CODE (op) == CONST_INT)
-      return 1;
-  
-*************** svr4_traceback (file, name, decl)
-*** 2611,2614 ****
---- 2610,2682 ----
-  #endif /* USING_SVR4_H */
-  \f
-+ /* Write out an instruction to load the TOC_TABLE address into register 30.
-+    This is only needed when TARGET_TOC, TARGET_MINIMAL_TOC, and there is
-+    a constant pool.  */
-+ 
-+ void
-+ rs6000_output_load_toc_table (file)
-+      FILE *file;
-+ {
-+   char buf[256];
-+ 
-+ #ifdef USING_SVR4_H
-+   if (TARGET_RELOCATABLE)
-+     {
-+       ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-+       fprintf (file, "\tbl ");
-+       assemble_name (file, buf);
-+       fprintf (file, "\n");
-+ 
-+       ASM_OUTPUT_INTERNAL_LABEL (file, "LCF", rs6000_pic_labelno);
-+       fprintf (file, "\tmflr %s\n", reg_names[30]);
-+ 
-+       if (TARGET_POWERPC64)
-+      fprintf (file, "\tld");
-+       else if (TARGET_NEW_MNEMONICS)
-+      fprintf (file, "\tlwz");
-+       else
-+      fprintf (file, "\tl");
-+ 
-+       fprintf (file, " %s,(", reg_names[0]);
-+       ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
-+       assemble_name (file, buf);
-+       fprintf (file, "-");
-+       ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-+       assemble_name (file, buf);
-+       fprintf (file, ")(%s)\n", reg_names[30]);
-+       asm_fprintf (file, "\t{cax|add} %s,%s,%s\n",
-+                 reg_names[30], reg_names[0], reg_names[30]);
-+       rs6000_pic_labelno++;
-+     }
-+   else if (!TARGET_64BIT)
-+     {
-+       ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
-+       asm_fprintf (file, "\t{cau|addis} %s,%s,", reg_names[30], reg_names[0]);
-+       assemble_name (file, buf);
-+       asm_fprintf (file, "@ha\n");
-+       if (TARGET_NEW_MNEMONICS)
-+      {
-+        asm_fprintf (file, "\taddi %s,%s,", reg_names[30], reg_names[30]);
-+        assemble_name (file, buf);
-+        asm_fprintf (file, "@l\n");
-+      }
-+       else
-+      {
-+        asm_fprintf (file, "\tcal %s,", reg_names[30]);
-+        assemble_name (file, buf);
-+        asm_fprintf (file, "@l(%s)\n", reg_names[30]);
-+      }
-+     }
-+   else
-+     abort ();
-+ 
-+ #else        /* !USING_SVR4_H */
-+   ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 0);
-+   asm_fprintf (file, "\t{l|lwz} %s,", reg_names[30]);
-+   assemble_name (file, buf);
-+   asm_fprintf (file, "(%s)\n", reg_names[2]);
-+ #endif /* USING_SVR4_H */
-+ }
-+ 
-  /* Write function prologue.  */
-  void
-*************** output_prolog (file, size)
-*** 2770,2834 ****
-       TOC_TABLE address into register 30.  */
-    if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
-!     {
-!       char buf[256];
-! 
-! #ifdef USING_SVR4_H
-!       if (TARGET_RELOCATABLE)
-!      {
-!        ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-!        fprintf (file, "\tbl ");
-!        assemble_name (file, buf);
-!        fprintf (file, "\n");
-! 
-!        ASM_OUTPUT_INTERNAL_LABEL (file, "LCF", rs6000_pic_labelno);
-!        fprintf (file, "\tmflr %s\n", reg_names[30]);
-! 
-!        if (TARGET_POWERPC64)
-!          fprintf (file, "\tld");
-!        else if (TARGET_NEW_MNEMONICS)
-!          fprintf (file, "\tlwz");
-!        else
-!          fprintf (file, "\tl");
-! 
-!        fprintf (file, " %s,(", reg_names[0]);
-!        ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
-!        assemble_name (file, buf);
-!        fprintf (file, "-");
-!        ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
-!        assemble_name (file, buf);
-!        fprintf (file, ")(%s)\n", reg_names[30]);
-!        asm_fprintf (file, "\t{cax|add} %s,%s,%s\n",
-!                     reg_names[30], reg_names[0], reg_names[30]);
-!        rs6000_pic_labelno++;
-!      }
-!       else if (!TARGET_64BIT)
-!      {
-!        ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
-!        asm_fprintf (file, "\t{cau|addis} %s,%s,", reg_names[30], reg_names[0]);
-!        assemble_name (file, buf);
-!        asm_fprintf (file, "@ha\n");
-!        if (TARGET_NEW_MNEMONICS)
-!          {
-!            asm_fprintf (file, "\taddi %s,%s,", reg_names[30], reg_names[30]);
-!            assemble_name (file, buf);
-!            asm_fprintf (file, "@l\n");
-!          }
-!        else
-!          {
-!            asm_fprintf (file, "\tcal %s,", reg_names[30]);
-!            assemble_name (file, buf);
-!            asm_fprintf (file, "@l(%s)\n", reg_names[30]);
-!          }
-!      }
-!       else
-!      abort ();
-! 
-! #else        /* !USING_SVR4_H */
-!       ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 0);
-!       asm_fprintf (file, "\t{l|lwz} %s,", reg_names[30]);
-!       assemble_name (file, buf);
-!       asm_fprintf (file, "(%s)\n", reg_names[2]);
-! #endif /* USING_SVR4_H */
-!     }
-  }
-  
---- 2838,2842 ----
-       TOC_TABLE address into register 30.  */
-    if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
-!     rs6000_output_load_toc_table (file);
-  }
-  
-diff -rcp2N gcc-2.7.2.3/config/rs6000/rs6000.md gcc-2.7.2.3.f.1/config/rs6000/rs6000.md
-*** gcc-2.7.2.3/config/rs6000/rs6000.md        Sat Jun 29 16:27:24 1996
---- gcc-2.7.2.3.f.1/config/rs6000/rs6000.md    Fri Aug 29 07:52:00 1997
-***************
-*** 4420,4423 ****
---- 4420,4424 ----
-       }
-  
-+       emit_insn (gen_rtx (CLOBBER, VOIDmode, operands[0]));
-        emit_move_insn (gen_rtx (SUBREG, SImode, operands[0], WORDS_BIG_ENDIAN),
-                     GEN_INT (low));
-***************
-*** 5409,5412 ****
---- 5410,5425 ----
-    DONE;
-  }")
-+ 
-+ ;; If we have -mmiminal-toc, we need to reload r30 after a nonlocal goto.
-+ 
-+ (define_insn "nonlocal_goto_receiver"
-+   [(unspec_volatile [(const_int 0)] 1)]
-+   "TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0"
-+   "*
-+ {
-+   rs6000_output_load_toc_table (asm_out_file);
-+   return \"\";
-+ }"
-+   [(set_attr "type" "load")])
-  \f
-  ;; A function pointer is a pointer to a data area whose first word contains
-diff -rcp2N gcc-2.7.2.3/config/sparc/sol2.h gcc-2.7.2.3.f.1/config/sparc/sol2.h
-*** gcc-2.7.2.3/config/sparc/sol2.h    Sat Aug 19 21:36:45 1995
---- gcc-2.7.2.3.f.1/config/sparc/sol2.h        Sun Aug 10 22:45:53 1997
-*************** do {                                                                   \
-*** 166,168 ****
-  /* Define for support of TFmode long double and REAL_ARITHMETIC.
-     Sparc ABI says that long double is 4 words.  */
-! #define LONG_DOUBLE_TYPE_SIZE 128
---- 166,168 ----
-  /* Define for support of TFmode long double and REAL_ARITHMETIC.
-     Sparc ABI says that long double is 4 words.  */
-! #define LONG_DOUBLE_TYPE_SIZE 64
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.c gcc-2.7.2.3.f.1/config/sparc/sparc.c
-*** gcc-2.7.2.3/config/sparc/sparc.c   Tue Sep 12 22:32:24 1995
---- gcc-2.7.2.3.f.1/config/sparc/sparc.c       Sun Aug 10 22:46:03 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 40,46 ****
-  /* 1 if the caller has placed an "unimp" insn immediately after the call.
-     This is used in v8 code when calling a function that returns a structure.
-!    v9 doesn't have this.  */
-  
-! #define SKIP_CALLERS_UNIMP_P (!TARGET_V9 && current_function_returns_struct)
-  
-  /* Global variables for machine-dependent things.  */
---- 40,51 ----
-  /* 1 if the caller has placed an "unimp" insn immediately after the call.
-     This is used in v8 code when calling a function that returns a structure.
-!    v9 doesn't have this.  Be careful to have this test be the same as that
-!    used on the call.  */
-  
-! #define SKIP_CALLERS_UNIMP_P  \
-! (!TARGET_V9 && current_function_returns_struct                       \
-!  && ! integer_zerop (DECL_SIZE (DECL_RESULT (current_function_decl)))        \
-!  && (TREE_CODE (DECL_SIZE (DECL_RESULT (current_function_decl)))     \
-!      == INTEGER_CST))
-  
-  /* Global variables for machine-dependent things.  */
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.h gcc-2.7.2.3.f.1/config/sparc/sparc.h
-*** gcc-2.7.2.3/config/sparc/sparc.h   Sat Jun 29 16:25:54 1996
---- gcc-2.7.2.3.f.1/config/sparc/sparc.h       Sun Aug 10 22:46:13 1997
-*************** extern int leaf_function;
-*** 1526,1533 ****
-  
-  /* Output assembler code to FILE to increment profiler label # LABELNO
-!    for profiling a function entry.  */
-  
-  #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-    do {                                                               \
-      fputs ("\tsethi %hi(", (FILE));                          \
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
---- 1526,1540 ----
-  
-  /* Output assembler code to FILE to increment profiler label # LABELNO
-!    for profiling a function entry.
-! 
-!    32 bit sparc uses %g2 as the STATIC_CHAIN_REGNUM which gets clobbered
-!    during profiling so we need to save/restore it around the call to mcount.
-!    We're guaranteed that a save has just been done, and we use the space
-!    allocated for intreg/fpreg value passing.  */
-  
-  #define FUNCTION_PROFILER(FILE, LABELNO)                     \
-    do {                                                               \
-+     if (! TARGET_V9)                                 \
-+       fputs ("\tst %g2,[%fp-4]\n", FILE);                    \
-      fputs ("\tsethi %hi(", (FILE));                          \
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
-*************** extern int leaf_function;
-*** 1539,1542 ****
---- 1546,1551 ----
-      ASM_OUTPUT_INTERNAL_LABELREF (FILE, "LP", LABELNO);              \
-      fputs ("),%o0,%o0\n", (FILE));                           \
-+     if (! TARGET_V9)                                 \
-+       fputs ("\tld [%fp-4],%g2\n", FILE);                    \
-    } while (0)
-  
-diff -rcp2N gcc-2.7.2.3/config/sparc/sparc.md gcc-2.7.2.3.f.1/config/sparc/sparc.md
-*** gcc-2.7.2.3/config/sparc/sparc.md  Tue Sep 12 22:57:35 1995
---- gcc-2.7.2.3.f.1/config/sparc/sparc.md      Sun Aug 10 22:46:27 1997
-***************
-*** 4799,4803 ****
-      abort ();
-  
-!  if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
-      {
-        /* This is really a PIC sequence.  We want to represent
---- 4799,4803 ----
-      abort ();
-  
-!   if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
-      {
-        /* This is really a PIC sequence.  We want to represent
-***************
-*** 4809,4824 ****
-  
-        if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!      emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-!                               gen_rtx (SET, VOIDmode, pc_rtx,
-!                                        XEXP (operands[0], 0)),
-!                               operands[3],
-!                               gen_rtx (CLOBBER, VOIDmode,
-!                                        gen_rtx (REG, Pmode, 15)))));
-        else
-!      emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-!                               gen_rtx (SET, VOIDmode, pc_rtx,
-!                                        XEXP (operands[0], 0)),
-!                               gen_rtx (CLOBBER, VOIDmode,
-!                                        gen_rtx (REG, Pmode, 15)))));
-        goto finish_call;
-      }
---- 4809,4828 ----
-  
-        if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!      emit_jump_insn
-!        (gen_rtx (PARALLEL, VOIDmode,
-!                  gen_rtvec (3,
-!                             gen_rtx (SET, VOIDmode, pc_rtx,
-!                                      XEXP (operands[0], 0)),
-!                             GEN_INT (INTVAL (operands[3]) & 0xfff),
-!                             gen_rtx (CLOBBER, VOIDmode,
-!                                      gen_rtx (REG, Pmode, 15)))));
-        else
-!      emit_jump_insn
-!        (gen_rtx (PARALLEL, VOIDmode,
-!                  gen_rtvec (2,
-!                             gen_rtx (SET, VOIDmode, pc_rtx,
-!                                      XEXP (operands[0], 0)),
-!                             gen_rtx (CLOBBER, VOIDmode,
-!                                      gen_rtx (REG, Pmode, 15)))));
-        goto finish_call;
-      }
-***************
-*** 4839,4852 ****
-  
-    if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!     emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (3,
-!                           gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                           operands[3],
-!                           gen_rtx (CLOBBER, VOIDmode,
-!                                             gen_rtx (REG, Pmode, 15)))));
-    else
-!     emit_call_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2,
-!                           gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                           gen_rtx (CLOBBER, VOIDmode,
-!                                             gen_rtx (REG, Pmode, 15)))));
-  
-   finish_call:
---- 4843,4858 ----
-  
-    if (! TARGET_V9 && INTVAL (operands[3]) != 0)
-!     emit_call_insn
-!       (gen_rtx (PARALLEL, VOIDmode,
-!              gen_rtvec (3, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                         GEN_INT (INTVAL (operands[3]) & 0xfff),
-!                         gen_rtx (CLOBBER, VOIDmode,
-!                                  gen_rtx (REG, Pmode, 15)))));
-    else
-!     emit_call_insn
-!       (gen_rtx (PARALLEL, VOIDmode,
-!              gen_rtvec (2, gen_rtx (CALL, VOIDmode, fn_rtx, nregs_rtx),
-!                         gen_rtx (CLOBBER, VOIDmode,
-!                                  gen_rtx (REG, Pmode, 15)))));
-  
-   finish_call:
-***************
-*** 4911,4915 ****
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
---- 4917,4921 ----
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 4923,4927 ****
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) > 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
---- 4929,4933 ----
-     (clobber (reg:SI 15))]
-    ;;- Do not use operand 1 for most machines.
-!   "! TARGET_V9 && GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0"
-    "call %a0,%1\;nop\;unimp %2"
-    [(set_attr "type" "call_no_delay_slot")])
-***************
-*** 5178,5184 ****
-    emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-    emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
--   emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, Pmode, 8)));
-    /* Return, restoring reg window and jumping to goto handler.  */
-    emit_insn (gen_goto_handler_and_restore ());
-    DONE;
-  }")
---- 5184,5190 ----
-    emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-    emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-    /* Return, restoring reg window and jumping to goto handler.  */
-    emit_insn (gen_goto_handler_and_restore ());
-+   emit_barrier ();
-    DONE;
-  }")
-***************
-*** 5192,5200 ****
-  
-  (define_insn "goto_handler_and_restore"
-!   [(unspec_volatile [(const_int 0)] 2)]
-    ""
-    "jmp %%o0+0\;restore"
-    [(set_attr "type" "misc")
-     (set_attr "length" "2")])
-  
-  ;; Special pattern for the FLUSH instruction.
---- 5198,5237 ----
-  
-  (define_insn "goto_handler_and_restore"
-!   [(unspec_volatile [(const_int 0)] 2)
-!    (use (reg:SI 8))]
-    ""
-    "jmp %%o0+0\;restore"
-    [(set_attr "type" "misc")
-     (set_attr "length" "2")])
-+ 
-+ ;; Pattern for use after a setjmp to store FP and the return register
-+ ;; into the stack area.
-+ 
-+ (define_expand "setjmp"
-+   [(const_int 0)]
-+   ""
-+   "
-+ {
-+   if (TARGET_V9)
-+     emit_insn (gen_setjmp_64 ());
-+   else
-+     emit_insn (gen_setjmp_32 ());
-+ 
-+   DONE;
-+ }")
-+ 
-+ (define_expand "setjmp_32"
-+   [(set (mem:SI (plus:SI (reg:SI 14) (const_int 56))) (match_dup 0))
-+    (set (mem:SI (plus:SI (reg:SI 14) (const_int 60))) (reg:SI 31))]
-+   ""
-+   "
-+ { operands[0] = frame_pointer_rtx; }")
-+ 
-+ (define_expand "setjmp_64"
-+   [(set (mem:DI (plus:DI (reg:DI 14) (const_int 112))) (match_dup 0))
-+    (set (mem:DI (plus:DI (reg:DI 14) (const_int 120))) (reg:DI 31))]
-+   ""
-+   "
-+ { operands[0] = frame_pointer_rtx; }")
-  
-  ;; Special pattern for the FLUSH instruction.
-diff -rcp2N gcc-2.7.2.3/config/x-linux gcc-2.7.2.3.f.1/config/x-linux
-*** gcc-2.7.2.3/config/x-linux Tue Mar 28 12:43:37 1995
---- gcc-2.7.2.3.f.1/config/x-linux     Fri Jul 11 00:08:49 1997
-*************** BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-*** 13,14 ****
---- 13,17 ----
-  # Don't run fixproto
-  STMP_FIXPROTO =
-+ 
-+ # Don't install "assert.h" in gcc. We use the one in glibc.
-+ INSTALL_ASSERT_H =
-diff -rcp2N gcc-2.7.2.3/config/x-linux-aout gcc-2.7.2.3.f.1/config/x-linux-aout
-*** gcc-2.7.2.3/config/x-linux-aout    Thu Jan  1 00:00:00 1970
---- gcc-2.7.2.3.f.1/config/x-linux-aout        Fri Jul 11 00:08:49 1997
-***************
-*** 0 ****
---- 1,14 ----
-+ # It is defined in config/xm-linux.h.
-+ # X_CFLAGS = -DPOSIX
-+ 
-+ # The following is needed when compiling stages 2 and 3 because gcc's
-+ # limits.h must be picked up before /usr/include/limits.h.  This is because
-+ # each does an #include_next of the other if the other hasn't been included.
-+ # /usr/include/limits.h loses if it gets found first because /usr/include is
-+ # at the end of the search order.  When a new version of gcc is released,
-+ # gcc's limits.h hasn't been installed yet and hence isn't found.
-+ 
-+ BOOT_CFLAGS = -O $(CFLAGS) -Iinclude
-+ 
-+ # Don't run fixproto
-+ STMP_FIXPROTO =
-diff -rcp2N gcc-2.7.2.3/config.guess gcc-2.7.2.3.f.1/config.guess
-*** gcc-2.7.2.3/config.guess   Sun Aug 31 09:39:43 1997
---- gcc-2.7.2.3.f.1/config.guess       Sun Aug 31 09:21:10 1997
-*************** trap 'rm -f dummy.c dummy.o dummy; exit 
-*** 52,63 ****
-  
-  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
--     alpha:OSF1:V*:*)
--      # After 1.2, OSF1 uses "V1.3" for uname -r.
--      echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
--      exit 0 ;;
-      alpha:OSF1:*:*)
-       # 1.2 uses "1.2" for uname -r.
-!      echo alpha-dec-osf${UNAME_RELEASE}
-!         exit 0 ;;
-      21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
---- 52,62 ----
-  
-  case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-      alpha:OSF1:*:*)
-+      # A Vn.n version is a released version.
-+      # A Tn.n version is a released field test version.
-+      # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-!      echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
-!      exit 0 ;;
-      21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-*************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
-*** 154,161 ****
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-!    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-!     i[34]86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
---- 153,160 ----
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-!     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-!     i?86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
-*************** EOF
-*** 220,224 ****
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-!          9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
-           9000/8?? )            HP_ARCH=hppa1.0 ;;
-       esac
---- 219,223 ----
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-!          9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
-           9000/8?? )            HP_ARCH=hppa1.0 ;;
-       esac
-*************** EOF
-*** 304,308 ****
-       echo m68k-hp-netbsd${UNAME_RELEASE}
-       exit 0 ;;
-!     i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
---- 303,307 ----
-       echo m68k-hp-netbsd${UNAME_RELEASE}
-       exit 0 ;;
-!     i?86:BSD/386:*:* | *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-*************** EOF
-*** 314,318 ****
-       exit 0 ;;
-      *:GNU:*:*)
-!      echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-      *:Linux:*:*)
---- 313,317 ----
-       exit 0 ;;
-      *:GNU:*:*)
-!      echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-      *:Linux:*:*)
-*************** EOF
-*** 320,330 ****
-       # first see if it will tell us.
-       ld_help_string=`ld --help 2>&1`
-! #    if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
-  #      echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-!      if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
-         echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-!      elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
-         echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
-       elif test "${UNAME_MACHINE}" = "alpha" ; then
-         echo alpha-unknown-linux ; exit 0
-       else
---- 319,333 ----
-       # first see if it will tell us.
-       ld_help_string=`ld --help 2>&1`
-! #    if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then
-  #      echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
-!      if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then
-         echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
-!      elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then
-         echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
-       elif test "${UNAME_MACHINE}" = "alpha" ; then
-+        as_version_string=`as --version 2>&1`
-+        if echo $as_version_string | grep >/dev/null 2>&1 " version 2.6 "; then
-+          echo alpha-unknown-linuxoldas ; exit 0
-+        fi
-         echo alpha-unknown-linux ; exit 0
-       else
-*************** EOF
-*** 362,369 ****
-  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-  # are messed up and put the nodename in both sysname and nodename.
-!     i[34]86:DYNIX/ptx:4*:*)
-       echo i386-sequent-sysv4
-       exit 0 ;;
-!     i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
---- 365,372 ----
-  # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-  # are messed up and put the nodename in both sysname and nodename.
-!     i?86:DYNIX/ptx:4*:*)
-       echo i386-sequent-sysv4
-       exit 0 ;;
-!     i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
-*************** EOF
-*** 372,376 ****
-       fi
-       exit 0 ;;
-!     i[34]86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
---- 375,379 ----
-       fi
-       exit 0 ;;
-!     i?86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-*************** EOF
-*** 379,382 ****
---- 382,387 ----
-               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-+              (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
-+                      && UNAME_MACHINE=i586
-               echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
-       else
-*************** EOF
-*** 401,405 ****
-       echo m68010-convergent-sysv
-       exit 0 ;;
-!     M680[234]0:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-      3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
---- 406,410 ----
-       echo m68010-convergent-sysv
-       exit 0 ;;
-!     M68*:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-      3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
-*************** EOF
-*** 409,413 ****
-          uname -p 2>/dev/null | grep 86 >/dev/null \
-            && echo i486-ncr-sysv4 && exit 0 ;;
-!     m680[234]0:LynxOS:2.[23]*:*)
-       echo m68k-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
---- 414,418 ----
-          uname -p 2>/dev/null | grep 86 >/dev/null \
-            && echo i486-ncr-sysv4 && exit 0 ;;
-!     m68*:LynxOS:2.*:*)
-       echo m68k-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-*************** EOF
-*** 415,425 ****
-       echo m68k-atari-sysv4
-       exit 0 ;;
-!     i[34]86:LynxOS:2.[23]*:*)
-       echo i386-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     TSUNAMI:LynxOS:2.[23]*:*)
-       echo sparc-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     rs6000:LynxOS:2.[23]*:*)
-       echo rs6000-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
---- 420,430 ----
-       echo m68k-atari-sysv4
-       exit 0 ;;
-!     i?86:LynxOS:2.*:*)
-       echo i386-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-!     rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
-       echo rs6000-lynx-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-*************** main ()
-*** 478,482 ****
-    int version;
-    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-!   printf ("%s-next-nextstep%s\n", __ARCHITECTURE__,  version==2 ? "2" : "3");
-    exit (0);
-  #endif
---- 483,487 ----
-    int version;
-    version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-!   printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-    exit (0);
-  #endif
-diff -rcp2N gcc-2.7.2.3/configure gcc-2.7.2.3.f.1/configure
-*** gcc-2.7.2.3/configure      Sun Aug 31 09:39:44 1997
---- gcc-2.7.2.3.f.1/configure  Sun Aug 31 09:35:10 1997
-*************** exec_prefix='$(prefix)'
-*** 82,85 ****
---- 82,86 ----
-  # The default g++ include directory is $(libdir)/g++-include.
-  gxx_include_dir='$(libdir)/g++-include'
-+ #gxx_include_dir='$(exec_prefix)/include/g++'
-  
-  # Default --program-transform-name to nothing.
-*************** for machine in $canon_build $canon_host 
-*** 548,551 ****
---- 549,578 ----
-               use_collect2=yes
-               ;;
-+      alpha-*-linux*oldas*)
-+              tm_file=alpha/linux.h
-+              tmake_file=alpha/t-linux
-+              xmake_file=alpha/x-linux
-+              fixincludes=Makefile.in
-+              xm_file=alpha/xm-linux.h
-+              gas=yes gnu_ld=yes
-+              ;;
-+      alpha-*-linux*ecoff*)
-+              tm_file=alpha/linux.h
-+              tmake_file=alpha/t-linux
-+              xmake_file=alpha/x-linux
-+              fixincludes=Makefile.in
-+              xm_file=alpha/xm-linux.h
-+              extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+              gas=yes gnu_ld=yes
-+              ;;
-+      alpha-*-linux*)
-+                 tm_file=alpha/elf.h
-+                 tmake_file=alpha/t-linux
-+                 xmake_file=alpha/x-linux
-+                 fixincludes=Makefile.in
-+                 xm_file=alpha/xm-linux.h
-+                 extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
-+                 gas=yes gnu_ld=yes
-+                 ;;
-       alpha-dec-osf[23456789]*)
-               tm_file=alpha/osf2.h
-*************** for machine in $canon_build $canon_host 
-*** 982,986 ****
-               cpu_type=i386           # with a.out format using pre BFD linkers
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux
-               tm_file=i386/linux-oldld.h
-               fixincludes=Makefile.in # The headers are ok already.
---- 1009,1013 ----
-               cpu_type=i386           # with a.out format using pre BFD linkers
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux-aout
-               tm_file=i386/linux-oldld.h
-               fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host 
-*** 991,995 ****
-               cpu_type=i386           # with a.out format
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux
-               tm_file=i386/linux-aout.h
-               fixincludes=Makefile.in # The headers are ok already.
---- 1018,1022 ----
-               cpu_type=i386           # with a.out format
-               xm_file=i386/xm-linux.h
-!              xmake_file=x-linux-aout
-               tm_file=i386/linux-aout.h
-               fixincludes=Makefile.in # The headers are ok already.
-*************** for machine in $canon_build $canon_host 
-*** 1663,1666 ****
---- 1690,1714 ----
-               use_collect2=yes
-               ;;
-+         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 ]
-*************** MAYBE_TARGET_DEFAULT = -DTARGET_CPU_DEFA
-*** 2995,2999 ****
-       rm Makefile.sed
-       echo 's|\f||' > Makefile.sed
-!      echo "s|^target=.*$|target=${target}|" >> Makefile.sed
-       echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
-       echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
---- 3043,3047 ----
-       rm Makefile.sed
-       echo 's|\f||' > Makefile.sed
-!      echo "s|^target=.*$|target=${canon_target}|" >> Makefile.sed
-       echo "s|^xmake_file=.*$|xmake_file=${dep_host_xmake_file}|" >> Makefile.sed
-       echo "s|^tmake_file=.*$|tmake_file=${dep_tmake_file}|" >> Makefile.sed
-diff -rcp2N gcc-2.7.2.3/cse.c gcc-2.7.2.3.f.1/cse.c
-*** gcc-2.7.2.3/cse.c  Sun Aug 31 09:39:46 1997
---- gcc-2.7.2.3.f.1/cse.c      Sun Aug 31 09:21:14 1997
-*************** static struct table_elt *last_jump_equiv
-*** 520,544 ****
-  static int constant_pool_entries_cost;
-  
-- /* Bits describing what kind of values in memory must be invalidated
--    for a particular instruction.  If all three bits are zero,
--    no memory refs need to be invalidated.  Each bit is more powerful
--    than the preceding ones, and if a bit is set then the preceding
--    bits are also set.
-- 
--    Here is how the bits are set:
--    Pushing onto the stack invalidates only the stack pointer,
--    writing at a fixed address invalidates only variable addresses,
--    writing in a structure element at variable address
--      invalidates all but scalar variables,
--    and writing in anything else at variable address invalidates everything.  */
-- 
-- struct write_data
-- {
--   int sp : 1;                        /* Invalidate stack pointer. */
--   int var : 1;                       /* Invalidate variable addresses.  */
--   int nonscalar : 1;         /* Invalidate all but scalar variables.  */
--   int all : 1;                       /* Invalidate all memory refs.  */
-- };
-- 
-  /* Define maximum length of a branch path.  */
-  
---- 520,523 ----
-*************** static void merge_equiv_classes PROTO((s
-*** 626,632 ****
-                                      struct table_elt *));
-  static void invalidate               PROTO((rtx, enum machine_mode));
-  static void remove_invalid_refs      PROTO((int));
-  static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory        PROTO((struct write_data *));
-  static void invalidate_for_call      PROTO((void));
-  static rtx use_related_value PROTO((rtx, struct table_elt *));
---- 605,612 ----
-                                      struct table_elt *));
-  static void invalidate               PROTO((rtx, enum machine_mode));
-+ static int cse_rtx_varies_p  PROTO((rtx));
-  static void remove_invalid_refs      PROTO((int));
-  static void rehash_using_reg PROTO((rtx));
-! static void invalidate_memory        PROTO((void));
-  static void invalidate_for_call      PROTO((void));
-  static rtx use_related_value PROTO((rtx, struct table_elt *));
-*************** static void set_nonvarying_address_compo
-*** 638,644 ****
-                                                    HOST_WIDE_INT *));
-  static int refers_to_p               PROTO((rtx, rtx));
-- static int refers_to_mem_p   PROTO((rtx, rtx, HOST_WIDE_INT,
--                                     HOST_WIDE_INT));
-- static int cse_rtx_addr_varies_p PROTO((rtx));
-  static rtx canon_reg         PROTO((rtx, rtx));
-  static void find_best_addr   PROTO((rtx, rtx *));
---- 618,621 ----
-*************** static void record_jump_cond   PROTO((enum
-*** 656,661 ****
-                                      rtx, rtx, int));
-  static void cse_insn         PROTO((rtx, int));
-! static void note_mem_written PROTO((rtx, struct write_data *));
-! static void invalidate_from_clobbers PROTO((struct write_data *, rtx));
-  static rtx cse_process_notes PROTO((rtx, rtx));
-  static void cse_around_loop  PROTO((rtx));
---- 633,638 ----
-                                      rtx, rtx, int));
-  static void cse_insn         PROTO((rtx, int));
-! static int note_mem_written  PROTO((rtx));
-! static void invalidate_from_clobbers PROTO((rtx));
-  static rtx cse_process_notes PROTO((rtx, rtx));
-  static void cse_around_loop  PROTO((rtx));
-*************** invalidate (x, full_mode)
-*** 1512,1517 ****
-    register int i;
-    register struct table_elt *p;
--   rtx base;
--   HOST_WIDE_INT start, end;
-  
-    /* If X is a register, dependencies on its contents
---- 1489,1492 ----
-*************** invalidate (x, full_mode)
-*** 1605,1611 ****
-      full_mode = GET_MODE (x);
-  
--   set_nonvarying_address_components (XEXP (x, 0), GET_MODE_SIZE (full_mode),
--                                   &base, &start, &end);
-- 
-    for (i = 0; i < NBUCKETS; i++)
-      {
---- 1580,1583 ----
-*************** invalidate (x, full_mode)
-*** 1614,1618 ****
-       {
-         next = p->next_same_hash;
-!        if (refers_to_mem_p (p->exp, base, start, end))
-           remove_from_table (p, i);
-       }
---- 1586,1594 ----
-       {
-         next = p->next_same_hash;
-!        /* Invalidate ASM_OPERANDS which reference memory (this is easier
-!           than checking all the aliases).  */
-!        if (p->in_memory
-!            && (GET_CODE (p->exp) != MEM
-!                || true_dependence (x, full_mode, p->exp, cse_rtx_varies_p)))
-           remove_from_table (p, i);
-       }
-*************** rehash_using_reg (x)
-*** 1695,1722 ****
-  }
-  \f
-- /* Remove from the hash table all expressions that reference memory,
--    or some of them as specified by *WRITES.  */
-- 
-- static void
-- invalidate_memory (writes)
--      struct write_data *writes;
-- {
--   register int i;
--   register struct table_elt *p, *next;
--   int all = writes->all;
--   int nonscalar = writes->nonscalar;
-- 
--   for (i = 0; i < NBUCKETS; i++)
--     for (p = table[i]; p; p = next)
--       {
--      next = p->next_same_hash;
--      if (p->in_memory
--          && (all
--              || (nonscalar && p->in_struct)
--              || cse_rtx_addr_varies_p (p->exp)))
--        remove_from_table (p, i);
--       }
-- }
-- \f
-  /* Remove from the hash table any expression that is a call-clobbered
-     register.  Also update their TICK values.  */
---- 1671,1674 ----
-*************** invalidate_for_call ()
-*** 1756,1759 ****
---- 1708,1717 ----
-         next = p->next_same_hash;
-  
-+        if (p->in_memory)
-+          {
-+            remove_from_table (p, hash);
-+            continue;
-+          }
-+ 
-         if (GET_CODE (p->exp) != REG
-             || REGNO (p->exp) >= FIRST_PSEUDO_REGISTER)
-*************** canon_hash (x, mode)
-*** 1946,1950 ****
-         return 0;
-       }
-!       if (! RTX_UNCHANGING_P (x))
-       {
-         hash_arg_in_memory = 1;
---- 1904,1908 ----
-         return 0;
-       }
-!       if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0)))
-       {
-         hash_arg_in_memory = 1;
-*************** set_nonvarying_address_components (addr,
-*** 2395,2477 ****
-  }
-  
-! /* Return 1 iff any subexpression of X refers to memory
-!    at an address of BASE plus some offset
-!    such that any of the bytes' offsets fall between START (inclusive)
-!    and END (exclusive).
-! 
-!    The value is undefined if X is a varying address (as determined by
-!    cse_rtx_addr_varies_p).  This function is not used in such cases.
-! 
-!    When used in the cse pass, `qty_const' is nonzero, and it is used
-!    to treat an address that is a register with a known constant value
-!    as if it were that constant value.
-!    In the loop pass, `qty_const' is zero, so this is not done.  */
-! 
-! static int
-! refers_to_mem_p (x, base, start, end)
-!      rtx x, base;
-!      HOST_WIDE_INT start, end;
-! {
-!   register HOST_WIDE_INT i;
-!   register enum rtx_code code;
-!   register char *fmt;
-! 
-!  repeat:
-!   if (x == 0)
-!     return 0;
-! 
-!   code = GET_CODE (x);
-!   if (code == MEM)
-!     {
-!       register rtx addr = XEXP (x, 0);       /* Get the address.  */
-!       rtx mybase;
-!       HOST_WIDE_INT mystart, myend;
-! 
-!       set_nonvarying_address_components (addr, GET_MODE_SIZE (GET_MODE (x)),
-!                                       &mybase, &mystart, &myend);
-! 
-! 
-!       /* refers_to_mem_p is never called with varying addresses. 
-!       If the base addresses are not equal, there is no chance
-!       of the memory addresses conflicting.  */
-!       if (! rtx_equal_p (mybase, base))
-!      return 0;
-! 
-!       return myend > start && mystart < end;
-!     }
-! 
-!   /* X does not match, so try its subexpressions.  */
-! 
-!   fmt = GET_RTX_FORMAT (code);
-!   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
-!     if (fmt[i] == 'e')
-!       {
-!      if (i == 0)
-!        {
-!          x = XEXP (x, 0);
-!          goto repeat;
-!        }
-!      else
-!        if (refers_to_mem_p (XEXP (x, i), base, start, end))
-!          return 1;
-!       }
-!     else if (fmt[i] == 'E')
-!       {
-!      int j;
-!      for (j = 0; j < XVECLEN (x, i); j++)
-!        if (refers_to_mem_p (XVECEXP (x, i, j), base, start, end))
-!          return 1;
-!       }
-! 
-!   return 0;
-! }
-! 
-! /* Nonzero if X refers to memory at a varying address;
-     except that a register which has at the moment a known constant value
-     isn't considered variable.  */
-  
-  static int
-! cse_rtx_addr_varies_p (x)
-!      rtx x;
-  {
-    /* We need not check for X and the equivalence class being of the same
---- 2353,2363 ----
-  }
-  
-! /* Nonzero if X, a memory address, refers to a varying address;
-     except that a register which has at the moment a known constant value
-     isn't considered variable.  */
-  
-  static int
-! cse_rtx_varies_p (x)
-!      register rtx x;
-  {
-    /* We need not check for X and the equivalence class being of the same
-*************** cse_rtx_addr_varies_p (x)
-*** 2479,2497 ****
-       doesn't vary in any mode.  */
-  
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && GET_MODE (XEXP (x, 0)) == qty_mode[reg_qty[REGNO (XEXP (x, 0))]]
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]] != 0)
-      return 0;
-  
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == PLUS
-!       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
-!       && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-      return 0;
-  
---- 2365,2381 ----
-       doesn't vary in any mode.  */
-  
-!   if (GET_CODE (x) == REG
-!       && REGNO_QTY_VALID_P (REGNO (x))
-!       && GET_MODE (x) == qty_mode[reg_qty[REGNO (x)]]
-!       && qty_const[reg_qty[REGNO (x)]] != 0)
-      return 0;
-  
-!   if (GET_CODE (x) == PLUS
-!       && GET_CODE (XEXP (x, 1)) == CONST_INT
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && (GET_MODE (XEXP (x, 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]])
-      return 0;
-  
-*************** cse_rtx_addr_varies_p (x)
-*** 2501,2519 ****
-       load fp minus a constant into a register, then a MEM which is the
-       sum of the two `constant' registers.  */
-!   if (GET_CODE (x) == MEM
-!       && GET_CODE (XEXP (x, 0)) == PLUS
-!       && GET_CODE (XEXP (XEXP (x, 0), 0)) == REG
-!       && GET_CODE (XEXP (XEXP (x, 0), 1)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 0)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 0))]]
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (XEXP (x, 0), 1)))
-!       && (GET_MODE (XEXP (XEXP (x, 0), 1))
-!        == qty_mode[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-!       && qty_const[reg_qty[REGNO (XEXP (XEXP (x, 0), 1))]])
-      return 0;
-  
-!   return rtx_addr_varies_p (x);
-  }
-  \f
---- 2385,2402 ----
-       load fp minus a constant into a register, then a MEM which is the
-       sum of the two `constant' registers.  */
-!   if (GET_CODE (x) == PLUS
-!       && GET_CODE (XEXP (x, 0)) == REG
-!       && GET_CODE (XEXP (x, 1)) == REG
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 0)))
-!       && (GET_MODE (XEXP (x, 0))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 0))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 0))]]
-!       && REGNO_QTY_VALID_P (REGNO (XEXP (x, 1)))
-!       && (GET_MODE (XEXP (x, 1))
-!        == qty_mode[reg_qty[REGNO (XEXP (x, 1))]])
-!       && qty_const[reg_qty[REGNO (XEXP (x, 1))]])
-      return 0;
-  
-!   return rtx_varies_p (x);
-  }
-  \f
-*************** fold_rtx (x, insn)
-*** 5542,5550 ****
-            CONST_INT, see if we can find a register equivalent to the
-            positive constant.  Make a MINUS if so.  Don't do this for
-!           a negative constant since we might then alternate between
-            chosing positive and negative constants.  Having the positive
-!           constant previously-used is the more common case.  */
-!        if (const_arg1 && GET_CODE (const_arg1) == CONST_INT
-!            && INTVAL (const_arg1) < 0 && GET_CODE (folded_arg1) == REG)
-           {
-             rtx new_const = GEN_INT (- INTVAL (const_arg1));
---- 5425,5439 ----
-            CONST_INT, see if we can find a register equivalent to the
-            positive constant.  Make a MINUS if so.  Don't do this for
-!           a non-negative constant since we might then alternate between
-            chosing positive and negative constants.  Having the positive
-!           constant previously-used is the more common case.  Be sure
-!           the resulting constant is non-negative; if const_arg1 were
-!           the smallest negative number this would overflow: depending
-!           on the mode, this would either just be the same value (and
-!           hence not save anything) or be incorrect.  */
-!        if (const_arg1 != 0 && GET_CODE (const_arg1) == CONST_INT
-!            && INTVAL (const_arg1) < 0
-!            && - INTVAL (const_arg1) >= 0
-!            && GET_CODE (folded_arg1) == REG)
-           {
-             rtx new_const = GEN_INT (- INTVAL (const_arg1));
-*************** cse_insn (insn, in_libcall_block)
-*** 6105,6110 ****
-    rtx this_insn_cc0 = 0;
-    enum machine_mode this_insn_cc0_mode;
--   struct write_data writes_memory;
--   static struct write_data init = {0, 0, 0, 0};
-  
-    rtx src_eqv = 0;
---- 5994,5997 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6118,6122 ****
-  
-    this_insn = insn;
--   writes_memory = init;
-  
-    /* Find all the SETs and CLOBBERs in this instruction.
---- 6005,6008 ----
-*************** cse_insn (insn, in_libcall_block)
-*** 6220,6232 ****
-         else if (GET_CODE (y) == CLOBBER)
-           {
-!            /* If we clobber memory, take note of that,
-!               and canon the address.
-                This does nothing when a register is clobbered
-                because we have already invalidated the reg.  */
-             if (GET_CODE (XEXP (y, 0)) == MEM)
-!              {
-!                canon_reg (XEXP (y, 0), NULL_RTX);
-!                note_mem_written (XEXP (y, 0), &writes_memory);
-!              }
-           }
-         else if (GET_CODE (y) == USE
---- 6106,6114 ----
-         else if (GET_CODE (y) == CLOBBER)
-           {
-!            /* If we clobber memory, canon the address.
-                This does nothing when a register is clobbered
-                because we have already invalidated the reg.  */
-             if (GET_CODE (XEXP (y, 0)) == MEM)
-!              canon_reg (XEXP (y, 0), NULL_RTX);
-           }
-         else if (GET_CODE (y) == USE
-*************** cse_insn (insn, in_libcall_block)
-*** 6247,6254 ****
-      {
-        if (GET_CODE (XEXP (x, 0)) == MEM)
-!      {
-!        canon_reg (XEXP (x, 0), NULL_RTX);
-!        note_mem_written (XEXP (x, 0), &writes_memory);
-!      }
-      }
-  
---- 6129,6133 ----
-      {
-        if (GET_CODE (XEXP (x, 0)) == MEM)
-!      canon_reg (XEXP (x, 0), NULL_RTX);
-      }
-  
-*************** cse_insn (insn, in_libcall_block)
-*** 6430,6433 ****
---- 6309,6327 ----
-        sets[i].src_in_struct = hash_arg_in_struct;
-  
-+       /* If SRC is a MEM, there is a REG_EQUIV note for SRC, and DEST is
-+       a pseudo that is set more than once, do not record SRC.  Using
-+       SRC as a replacement for anything else will be incorrect in that
-+       situation.  Note that this usually occurs only for stack slots,
-+       in which case all the RTL would be refering to SRC, so we don't
-+       lose any optimization opportunities by not having SRC in the
-+       hash table.  */
-+ 
-+       if (GET_CODE (src) == MEM
-+        && find_reg_note (insn, REG_EQUIV, src) != 0
-+        && GET_CODE (dest) == REG
-+        && REGNO (dest) >= FIRST_PSEUDO_REGISTER
-+        && reg_n_sets[REGNO (dest)] != 1)
-+      sets[i].src_volatile = 1;
-+ 
-  #if 0
-        /* It is no longer clear why we used to do this, but it doesn't
-*************** cse_insn (insn, in_libcall_block)
-*** 6674,6678 ****
-       }
-  #endif /* LOAD_EXTEND_OP */
-!  
-        if (src == src_folded)
-          src_folded = 0;
---- 6568,6572 ----
-       }
-  #endif /* LOAD_EXTEND_OP */
-! 
-        if (src == src_folded)
-          src_folded = 0;
-*************** cse_insn (insn, in_libcall_block)
-*** 6860,6864 ****
-                      || (GET_CODE (src_folded) != MEM
-                          && ! src_folded_force_flag))
-!                 && GET_MODE_CLASS (mode) != MODE_CC)
-           {
-             src_folded_force_flag = 1;
---- 6754,6759 ----
-                      || (GET_CODE (src_folded) != MEM
-                          && ! src_folded_force_flag))
-!                 && GET_MODE_CLASS (mode) != MODE_CC
-!                 && mode != VOIDmode)
-           {
-             src_folded_force_flag = 1;
-*************** cse_insn (insn, in_libcall_block)
-*** 6983,6993 ****
-        if (GET_CODE (dest) == MEM)
-       {
-         dest = fold_rtx (dest, insn);
-- 
--        /* Decide whether we invalidate everything in memory,
--           or just things at non-fixed places.
--           Writing a large aggregate must invalidate everything
--           because we don't know how long it is.  */
--        note_mem_written (dest, &writes_memory);
-       }
-  
---- 6878,6890 ----
-        if (GET_CODE (dest) == MEM)
-       {
-+ #ifdef PUSH_ROUNDING
-+        /* Stack pushes invalidate the stack pointer.  */
-+        rtx addr = XEXP (dest, 0);
-+        if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-+             || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-+            && XEXP (addr, 0) == stack_pointer_rtx)
-+          invalidate (stack_pointer_rtx, Pmode);
-+ #endif
-         dest = fold_rtx (dest, insn);
-       }
-  
-*************** cse_insn (insn, in_libcall_block)
-*** 7234,7238 ****
-        sets[i].src_elt = src_eqv_elt;
-  
-!   invalidate_from_clobbers (&writes_memory, x);
-  
-    /* Some registers are invalidated by subroutine calls.  Memory is 
---- 7131,7135 ----
-        sets[i].src_elt = src_eqv_elt;
-  
-!   invalidate_from_clobbers (x);
-  
-    /* Some registers are invalidated by subroutine calls.  Memory is 
-*************** cse_insn (insn, in_libcall_block)
-*** 7241,7248 ****
-    if (GET_CODE (insn) == CALL_INSN)
-      {
--       static struct write_data everything = {0, 1, 1, 1};
-- 
-        if (! CONST_CALL_P (insn))
-!      invalidate_memory (&everything);
-        invalidate_for_call ();
-      }
---- 7138,7143 ----
-    if (GET_CODE (insn) == CALL_INSN)
-      {
-        if (! CONST_CALL_P (insn))
-!      invalidate_memory ();
-        invalidate_for_call ();
-      }
-*************** cse_insn (insn, in_libcall_block)
-*** 7265,7270 ****
-          we have just done an invalidate_memory that covers even those.  */
-       if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!          || (GET_CODE (dest) == MEM && ! writes_memory.all
-!              && ! cse_rtx_addr_varies_p (dest)))
-         invalidate (dest, VOIDmode);
-       else if (GET_CODE (dest) == STRICT_LOW_PART
---- 7160,7164 ----
-          we have just done an invalidate_memory that covers even those.  */
-       if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!          || GET_CODE (dest) == MEM)
-         invalidate (dest, VOIDmode);
-       else if (GET_CODE (dest) == STRICT_LOW_PART
-*************** cse_insn (insn, in_libcall_block)
-*** 7359,7363 ****
-                     sets[i].dest_hash, GET_MODE (dest));
-       elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-!                        && ! RTX_UNCHANGING_P (sets[i].inner_dest));
-  
-       if (elt->in_memory)
---- 7253,7259 ----
-                     sets[i].dest_hash, GET_MODE (dest));
-       elt->in_memory = (GET_CODE (sets[i].inner_dest) == MEM
-!                        && (! RTX_UNCHANGING_P (sets[i].inner_dest)
-!                            || FIXED_BASE_PLUS_P (XEXP (sets[i].inner_dest,
-!                                                        0))));
-  
-       if (elt->in_memory)
-*************** cse_insn (insn, in_libcall_block)
-*** 7532,7580 ****
-  }
-  \f
-- /* Store 1 in *WRITES_PTR for those categories of memory ref
--    that must be invalidated when the expression WRITTEN is stored in.
--    If WRITTEN is null, say everything must be invalidated.  */
-- 
-  static void
-! note_mem_written (written, writes_ptr)
-!      rtx written;
-!      struct write_data *writes_ptr;
-! {
-!   static struct write_data everything = {0, 1, 1, 1};
-! 
-!   if (written == 0)
-!     *writes_ptr = everything;
-!   else if (GET_CODE (written) == MEM)
-!     {
-!       /* Pushing or popping the stack invalidates just the stack pointer. */
-!       rtx addr = XEXP (written, 0);
-!       if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-!         || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-!        && GET_CODE (XEXP (addr, 0)) == REG
-!        && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-!      {
-!        writes_ptr->sp = 1;
-!        return;
-!      }
-!       else if (GET_MODE (written) == BLKmode)
-!      *writes_ptr = everything;
-!       /* (mem (scratch)) means clobber everything.  */
-!       else if (GET_CODE (addr) == SCRATCH)
-!      *writes_ptr = everything;
-!       else if (cse_rtx_addr_varies_p (written))
-!      {
-!        /* A varying address that is a sum indicates an array element,
-!           and that's just as good as a structure element
-!           in implying that we need not invalidate scalar variables.
-!           However, we must allow QImode aliasing of scalars, because the
-!           ANSI C standard allows character pointers to alias anything.  */
-!        if (! ((MEM_IN_STRUCT_P (written)
-!                || GET_CODE (XEXP (written, 0)) == PLUS)
-!               && GET_MODE (written) != QImode))
-!          writes_ptr->all = 1;
-!        writes_ptr->nonscalar = 1;
-!      }
-!       writes_ptr->var = 1;
-      }
-  }
-  
---- 7428,7471 ----
-  }
-  \f
-  static void
-! invalidate_memory ()
-! {
-!   register int i;
-!   register struct table_elt *p, *next;
-! 
-!   for (i = 0; i < NBUCKETS; i++)
-!     for (p = table[i]; p; p = next)
-!       {
-!      next = p->next_same_hash;
-!      if (p->in_memory)
-!        remove_from_table (p, i);
-!       }
-! }
-! 
-! static int
-! note_mem_written (mem)
-!      register rtx mem;
-! {
-!   if (mem == 0 || GET_CODE(mem) != MEM )
-!      return 0;
-!   else
-!    {
-!       register rtx addr = XEXP (mem, 0);
-!   /* Pushing or popping the stack invalidates just the stack pointer.  */
-!     if ((GET_CODE (addr) == PRE_DEC || GET_CODE (addr) == PRE_INC
-!        || GET_CODE (addr) == POST_DEC || GET_CODE (addr) == POST_INC)
-!       && GET_CODE (XEXP (addr, 0)) == REG
-!       && REGNO (XEXP (addr, 0)) == STACK_POINTER_REGNUM)
-!     {
-!       if (reg_tick[STACK_POINTER_REGNUM] >= 0)
-!      reg_tick[STACK_POINTER_REGNUM]++;
-! 
-!       /* This should be *very* rare.  */
-!       if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
-!      invalidate (stack_pointer_rtx, VOIDmode);
-!       return 1;
-      }
-+   return 0;
-+   }
-  }
-  
-*************** note_mem_written (written, writes_ptr)
-*** 7584,7612 ****
-     alias with something that is SET or CLOBBERed.
-  
--    W points to the writes_memory for this insn, a struct write_data
--    saying which kinds of memory references must be invalidated.
-     X is the pattern of the insn.  */
-  
-  static void
-! invalidate_from_clobbers (w, x)
-!      struct write_data *w;
-       rtx x;
-  {
--   /* If W->var is not set, W specifies no action.
--      If W->all is set, this step gets all memory refs
--      so they can be ignored in the rest of this function.  */
--   if (w->var)
--     invalidate_memory (w);
-- 
--   if (w->sp)
--     {
--       if (reg_tick[STACK_POINTER_REGNUM] >= 0)
--      reg_tick[STACK_POINTER_REGNUM]++;
-- 
--       /* This should be *very* rare.  */
--       if (TEST_HARD_REG_BIT (hard_regs_in_table, STACK_POINTER_REGNUM))
--      invalidate (stack_pointer_rtx, VOIDmode);
--     }
-- 
-    if (GET_CODE (x) == CLOBBER)
-      {
---- 7475,7484 ----
-     alias with something that is SET or CLOBBERed.
-  
-     X is the pattern of the insn.  */
-  
-  static void
-! invalidate_from_clobbers (x)
-       rtx x;
-  {
-    if (GET_CODE (x) == CLOBBER)
-      {
-*************** invalidate_from_clobbers (w, x)
-*** 7615,7619 ****
-       {
-         if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!            || (GET_CODE (ref) == MEM && ! w->all))
-           invalidate (ref, VOIDmode);
-         else if (GET_CODE (ref) == STRICT_LOW_PART
---- 7487,7491 ----
-       {
-         if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!            || GET_CODE (ref) == MEM)
-           invalidate (ref, VOIDmode);
-         else if (GET_CODE (ref) == STRICT_LOW_PART
-*************** invalidate_from_clobbers (w, x)
-*** 7631,7643 ****
-           {
-             rtx ref = XEXP (y, 0);
-!            if (ref)
-!              {
-!                if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!                    || (GET_CODE (ref) == MEM && !w->all))
-!                  invalidate (ref, VOIDmode);
-!                else if (GET_CODE (ref) == STRICT_LOW_PART
-!                         || GET_CODE (ref) == ZERO_EXTRACT)
-!                  invalidate (XEXP (ref, 0), GET_MODE (ref));
-!              }
-           }
-       }
---- 7503,7512 ----
-           {
-             rtx ref = XEXP (y, 0);
-!            if (GET_CODE (ref) == REG || GET_CODE (ref) == SUBREG
-!                || GET_CODE (ref) == MEM)
-!              invalidate (ref, VOIDmode);
-!            else if (GET_CODE (ref) == STRICT_LOW_PART
-!                     || GET_CODE (ref) == ZERO_EXTRACT)
-!              invalidate (XEXP (ref, 0), GET_MODE (ref));
-           }
-       }
-*************** cse_around_loop (loop_start)
-*** 7800,7807 ****
-  }
-  \f
-- /* Variable used for communications between the next two routines.  */
-- 
-- static struct write_data skipped_writes_memory;
-- 
-  /* Process one SET of an insn that was skipped.  We ignore CLOBBERs
-     since they are done elsewhere.  This function is called via note_stores.  */
---- 7669,7672 ----
-*************** invalidate_skipped_set (dest, set)
-*** 7812,7823 ****
-       rtx dest;
-  {
-!   if (GET_CODE (dest) == MEM)
-!     note_mem_written (dest, &skipped_writes_memory);
-! 
-!   /* There are times when an address can appear varying and be a PLUS
-!      during this scan when it would be a fixed address were we to know
-!      the proper equivalences.  So promote "nonscalar" to be "all".  */
-!   if (skipped_writes_memory.nonscalar)
-!     skipped_writes_memory.all = 1;
-  
-    if (GET_CODE (set) == CLOBBER
---- 7677,7695 ----
-       rtx dest;
-  {
-!   enum rtx_code code = GET_CODE (dest);
-!   
-!   if (code == MEM
-!       && ! note_mem_written (dest)   /* If this is not a stack push ... */
-!       /* There are times when an address can appear varying and be a PLUS
-!       during this scan when it would be a fixed address were we to know
-!       the proper equivalences.  So invalidate all memory if there is
-!       a BLKmode or nonscalar memory reference or a reference to a
-!       variable address.  */
-!       && (MEM_IN_STRUCT_P (dest) || GET_MODE (dest) == BLKmode
-!        || cse_rtx_varies_p (XEXP (dest, 0))))
-!     {
-!       invalidate_memory ();
-!       return;
-!     }
-  
-    if (GET_CODE (set) == CLOBBER
-*************** invalidate_skipped_set (dest, set)
-*** 7828,7837 ****
-      return;
-  
-!   if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG
-!       || (! skipped_writes_memory.all && ! cse_rtx_addr_varies_p (dest)))
-!     invalidate (dest, VOIDmode);
-!   else if (GET_CODE (dest) == STRICT_LOW_PART
-!         || GET_CODE (dest) == ZERO_EXTRACT)
-      invalidate (XEXP (dest, 0), GET_MODE (dest));
-  }
-  
---- 7700,7707 ----
-      return;
-  
-!   if (code == STRICT_LOW_PART || code == ZERO_EXTRACT)
-      invalidate (XEXP (dest, 0), GET_MODE (dest));
-+   else if (code == REG || code == SUBREG || code == MEM)
-+     invalidate (dest, VOIDmode);
-  }
-  
-*************** invalidate_skipped_block (start)
-*** 7845,7850 ****
-  {
-    rtx insn;
--   static struct write_data init = {0, 0, 0, 0};
--   static struct write_data everything = {0, 1, 1, 1};
-  
-    for (insn = start; insn && GET_CODE (insn) != CODE_LABEL;
---- 7715,7718 ----
-*************** invalidate_skipped_block (start)
-*** 7854,7867 ****
-       continue;
-  
--       skipped_writes_memory = init;
-- 
-        if (GET_CODE (insn) == CALL_INSN)
-       {
-         invalidate_for_call ();
--        skipped_writes_memory = everything;
-       }
-  
-        note_stores (PATTERN (insn), invalidate_skipped_set);
--       invalidate_from_clobbers (&skipped_writes_memory, PATTERN (insn));
-      }
-  }
---- 7722,7733 ----
-       continue;
-  
-        if (GET_CODE (insn) == CALL_INSN)
-       {
-+        if (! CONST_CALL_P (insn))
-+          invalidate_memory ();
-         invalidate_for_call ();
-       }
-  
-        note_stores (PATTERN (insn), invalidate_skipped_set);
-      }
-  }
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7913,7920 ****
-  {
-    struct table_elt *src_elt;
--   static struct write_data init = {0, 0, 0, 0};
--   struct write_data writes_memory;
-- 
--   writes_memory = init;
-  
-    /* If this is a SET, see if we can replace SET_SRC, but ignore SETs that
---- 7779,7782 ----
-*************** cse_set_around_loop (x, insn, loop_start
-*** 7976,7991 ****
-  
-    /* Now invalidate anything modified by X.  */
-!   note_mem_written (SET_DEST (x), &writes_memory);
-! 
-!   if (writes_memory.var)
-!     invalidate_memory (&writes_memory);
-! 
-!   /* See comment on similar code in cse_insn for explanation of these tests. */
-    if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-!       || (GET_CODE (SET_DEST (x)) == MEM && ! writes_memory.all
-!        && ! cse_rtx_addr_varies_p (SET_DEST (x))))
-      invalidate (SET_DEST (x), VOIDmode);
-    else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-!         || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
-      invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
-  }
---- 7838,7849 ----
-  
-    /* Now invalidate anything modified by X.  */
-!   note_mem_written (SET_DEST (x));
-!   
-!   /* See comment on similar code in cse_insn for explanation of these tests.  */
-    if (GET_CODE (SET_DEST (x)) == REG || GET_CODE (SET_DEST (x)) == SUBREG
-!       || GET_CODE (SET_DEST (x)) == MEM)
-      invalidate (SET_DEST (x), VOIDmode);
-    else if (GET_CODE (SET_DEST (x)) == STRICT_LOW_PART
-!         || GET_CODE (SET_DEST (x)) == ZERO_EXTRACT)
-      invalidate (XEXP (SET_DEST (x), 0), GET_MODE (SET_DEST (x)));
-  }
-*************** cse_main (f, nregs, after_loop, file)
-*** 8234,8237 ****
---- 8092,8096 ----
-  
-    init_recog ();
-+   init_alias_analysis ();
-  
-    max_reg = nregs;
-*************** cse_basic_block (from, to, next_branch, 
-*** 8405,8408 ****
---- 8264,8268 ----
-    int to_usage = 0;
-    int in_libcall_block = 0;
-+   int num_insns = 0;
-  
-    /* Each of these arrays is undefined before max_reg, so only allocate
-*************** cse_basic_block (from, to, next_branch, 
-*** 8437,8440 ****
---- 8297,8320 ----
-      {
-        register enum rtx_code code;
-+       int i;
-+       struct table_elt *p, *next;
-+ 
-+       /* If we have processed 1,000 insns, flush the hash table to avoid
-+       extreme quadratic behavior.  */
-+       if (num_insns++ > 1000)
-+      {
-+        for (i = 0; i < NBUCKETS; i++)
-+          for (p = table[i]; p; p = next)
-+            {
-+              next = p->next_same_hash;
-+ 
-+              if (GET_CODE (p->exp) == REG)
-+                invalidate (p->exp, p->mode);
-+              else
-+                remove_from_table (p, i);
-+            }
-+ 
-+        num_insns = 0;
-+      }
-  
-        /* See if this is a branch that is part of the path.  If so, and it is
-diff -rcp2N gcc-2.7.2.3/dwarfout.c gcc-2.7.2.3.f.1/dwarfout.c
-*** gcc-2.7.2.3/dwarfout.c     Fri Oct 27 01:40:07 1995
---- gcc-2.7.2.3.f.1/dwarfout.c Sun Aug 10 22:47:19 1997
-*************** output_bound_representation (bound, dim_
-*** 1629,1705 ****
-      {
-  
-!       case ERROR_MARK:
-!      return;
-  
-        /* All fixed-bounds are represented by INTEGER_CST nodes.       */
-  
-!       case INTEGER_CST:
-!      ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-!                              (unsigned) TREE_INT_CST_LOW (bound));
-!      break;
-! 
-!       /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-!       SAVE_EXPR nodes.  */
-! 
-!       case NOP_EXPR:
-!      bound = TREE_OPERAND (bound, 0);
-!      /* ... fall thru... */
-! 
-!       case SAVE_EXPR:
-!      {
-!        char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!        char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-! 
-!        sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-!                              current_dienum, dim_num, u_or_l);
-  
-!        sprintf (end_label,   BOUND_END_LABEL_FMT,
-!                              current_dienum, dim_num, u_or_l);
-  
-!        ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-!        ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-  
-!        /* If we are working on a bound for a dynamic dimension in C,
-!           the dynamic dimension in question had better have a static
-!           (zero) lower bound and a dynamic *upper* bound.  */
-  
-!        if (u_or_l != 'u')
-!          abort ();
-  
-!        /* If optimization is turned on, the SAVE_EXPRs that describe
-!           how to access the upper bound values are essentially bogus.
-!           They only describe (at best) how to get at these values at
-!           the points in the generated code right after they have just
-!           been computed.  Worse yet, in the typical case, the upper
-!           bound values will not even *be* computed in the optimized
-!           code, so these SAVE_EXPRs are entirely bogus.
-! 
-!           In order to compensate for this fact, we check here to see
-!           if optimization is enabled, and if so, we effectively create
-!           an empty location description for the (unknown and unknowable)
-!           upper bound.
-! 
-!           This should not cause too much trouble for existing (stupid?)
-!           debuggers because they have to deal with empty upper bounds
-!           location descriptions anyway in order to be able to deal with
-!           incomplete array types.
-! 
-!           Of course an intelligent debugger (GDB?) should be able to
-!           comprehend that a missing upper bound specification in a
-!           array type used for a storage class `auto' local array variable
-!           indicates that the upper bound is both unknown (at compile-
-!           time) and unknowable (at run-time) due to optimization.
-!        */
-! 
-!        if (! optimize)
-!          output_loc_descriptor
-!            (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-  
-!        ASM_OUTPUT_LABEL (asm_out_file, end_label);
-!      }
-!      break;
-  
--       default:
--      abort ();
-      }
-  }
---- 1629,1699 ----
-      {
-  
-!     case ERROR_MARK:
-!       return;
-  
-        /* All fixed-bounds are represented by INTEGER_CST nodes.       */
-  
-!     case INTEGER_CST:
-!       ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
-!                            (unsigned) TREE_INT_CST_LOW (bound));
-!       break;
-  
-!     default:
-  
-!       /* Dynamic bounds may be represented by NOP_EXPR nodes containing
-!       SAVE_EXPR nodes, in which case we can do something, or as
-!       an expression, which we cannot represent.  */
-!       {
-!      char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
-!      char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
-  
-!      sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
-!               current_dienum, dim_num, u_or_l);
-  
-!      sprintf (end_label, BOUND_END_LABEL_FMT,
-!               current_dienum, dim_num, u_or_l);
-  
-!      ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
-!      ASM_OUTPUT_LABEL (asm_out_file, begin_label);
-! 
-!      /* If optimization is turned on, the SAVE_EXPRs that describe
-!         how to access the upper bound values are essentially bogus.
-!         They only describe (at best) how to get at these values at
-!         the points in the generated code right after they have just
-!         been computed.  Worse yet, in the typical case, the upper
-!         bound values will not even *be* computed in the optimized
-!         code, so these SAVE_EXPRs are entirely bogus.
-! 
-!         In order to compensate for this fact, we check here to see
-!         if optimization is enabled, and if so, we effectively create
-!         an empty location description for the (unknown and unknowable)
-!         upper bound.
-! 
-!         This should not cause too much trouble for existing (stupid?)
-!         debuggers because they have to deal with empty upper bounds
-!         location descriptions anyway in order to be able to deal with
-!         incomplete array types.
-! 
-!         Of course an intelligent debugger (GDB?) should be able to
-!         comprehend that a missing upper bound specification in a
-!         array type used for a storage class `auto' local array variable
-!         indicates that the upper bound is both unknown (at compile-
-!         time) and unknowable (at run-time) due to optimization. */
-! 
-!      if (! optimize)
-!        {
-!          while (TREE_CODE (bound) == NOP_EXPR
-!                 || TREE_CODE (bound) == CONVERT_EXPR)
-!            bound = TREE_OPERAND (bound, 0);
-! 
-!          if (TREE_CODE (bound) == SAVE_EXPR)
-!            output_loc_descriptor
-!              (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
-!        }
-  
-!      ASM_OUTPUT_LABEL (asm_out_file, end_label);
-!       }
-!       break;
-  
-      }
-  }
-*************** type_attribute (type, decl_const, decl_v
-*** 2857,2861 ****
-    register int root_type_modified;
-  
-!   if (TREE_CODE (type) == ERROR_MARK)
-      return;
-  
---- 2851,2855 ----
-    register int root_type_modified;
-  
-!   if (code == ERROR_MARK)
-      return;
-  
-*************** type_attribute (type, decl_const, decl_v
-*** 2864,2869 ****
-       type `void', so this only applies to function return types.  */
-  
-!   if (TREE_CODE (type) == VOID_TYPE)
-      return;
-  
-    root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
---- 2858,2869 ----
-       type `void', so this only applies to function return types.  */
-  
-!   if (code == VOID_TYPE)
-      return;
-+ 
-+   /* If this is a subtype, find the underlying type.  Eventually,
-+      this should write out the appropriate subtype info.  */
-+   while ((code == INTEGER_TYPE || code == REAL_TYPE)
-+       && TREE_TYPE (type) != 0)
-+     type = TREE_TYPE (type), code = TREE_CODE (type);
-  
-    root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
-diff -rcp2N gcc-2.7.2.3/emit-rtl.c gcc-2.7.2.3.f.1/emit-rtl.c
-*** gcc-2.7.2.3/emit-rtl.c     Thu Sep 14 20:09:30 1995
---- gcc-2.7.2.3.f.1/emit-rtl.c Fri Aug 29 07:51:46 1997
-*************** max_label_num ()
-*** 545,548 ****
---- 545,565 ----
-  }
-  
-+ /* Identify REG (which may be a CONCAT) as a user register.  */
-+ 
-+ void
-+ mark_user_reg (reg)
-+      rtx reg;
-+ {
-+   if (GET_CODE (reg) == CONCAT)
-+     {
-+       REG_USERVAR_P (XEXP (reg, 0)) = 1;
-+       REG_USERVAR_P (XEXP (reg, 1)) = 1;
-+     }
-+   else if (GET_CODE (reg) == REG)
-+     REG_USERVAR_P (reg) = 1;
-+   else
-+     abort ();
-+ }
-+ 
-  /* Return first label number used in this function (if any were used).  */
-  
-*************** subreg_lowpart_p (x)
-*** 975,978 ****
---- 992,997 ----
-    if (GET_CODE (x) != SUBREG)
-      return 1;
-+   else if (GET_MODE (SUBREG_REG (x)) == VOIDmode)
-+     return 0;
-  
-    if (WORDS_BIG_ENDIAN
-*************** change_address (memref, mode, addr)
-*** 1315,1318 ****
---- 1334,1340 ----
-      addr = memory_address (mode, addr);
-       
-+   if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
-+     return memref;
-+ 
-    new = gen_rtx (MEM, mode, addr);
-    MEM_VOLATILE_P (new) = MEM_VOLATILE_P (memref);
-diff -rcp2N gcc-2.7.2.3/explow.c gcc-2.7.2.3.f.1/explow.c
-*** gcc-2.7.2.3/explow.c       Thu Jun 15 11:30:10 1995
---- gcc-2.7.2.3.f.1/explow.c   Fri Aug 29 07:52:03 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 32,36 ****
-  
-  static rtx break_out_memory_refs     PROTO((rtx));
-! 
-  /* Return an rtx for the sum of X and the integer C.
-  
---- 32,36 ----
-  
-  static rtx break_out_memory_refs     PROTO((rtx));
-! static void emit_stack_probe         PROTO((rtx));
-  /* Return an rtx for the sum of X and the integer C.
-  
-*************** convert_memory_address (to_mode, x)
-*** 305,310 ****
---- 305,313 ----
-       rtx x;
-  {
-+   enum machine_mode from_mode = to_mode == ptr_mode ? Pmode : ptr_mode;
-    rtx temp;
-  
-+   /* Here we handle some special cases.  If none of them apply, fall through
-+      to the default case.  */
-    switch (GET_CODE (x))
-      {
-*************** convert_memory_address (to_mode, x)
-*** 321,339 ****
-        return temp;
-  
--     case PLUS:
--     case MULT:
--       return gen_rtx (GET_CODE (x), to_mode, 
--                    convert_memory_address (to_mode, XEXP (x, 0)),
--                    convert_memory_address (to_mode, XEXP (x, 1)));
-- 
-      case CONST:
-        return gen_rtx (CONST, to_mode, 
-                     convert_memory_address (to_mode, XEXP (x, 0)));
-  
-!     default:
-!       return convert_modes (to_mode,
-!                          to_mode == ptr_mode ? Pmode : ptr_mode,
-!                          x, POINTERS_EXTEND_UNSIGNED);
-      }
-  }
-  #endif
---- 324,348 ----
-        return temp;
-  
-      case CONST:
-        return gen_rtx (CONST, to_mode, 
-                     convert_memory_address (to_mode, XEXP (x, 0)));
-  
-!     case PLUS:
-!     case MULT:
-!       /* For addition the second operand is a small constant, we can safely
-!       permute the converstion and addition operation.  We can always safely
-!       permute them if we are making the address narrower.  In addition,
-!       always permute the operations if this is a constant.  */
-!       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
-!        || (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT
-!            && (INTVAL (XEXP (x, 1)) + 20000 < 40000
-!                || CONSTANT_P (XEXP (x, 0)))))
-!      return gen_rtx (GET_CODE (x), to_mode, 
-!                      convert_memory_address (to_mode, XEXP (x, 0)),
-!                      convert_memory_address (to_mode, XEXP (x, 1)));
-      }
-+ 
-+   return convert_modes (to_mode, from_mode,
-+                      x, POINTERS_EXTEND_UNSIGNED);
-  }
-  #endif
-*************** allocate_dynamic_stack_space (size, targ
-*** 1066,1069 ****
---- 1075,1083 ----
-    do_pending_stack_adjust ();
-  
-+   /* If needed, check that we have the required amount of stack.  Take into
-+      account what has already been checked.  */
-+   if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+     probe_stack_range (STACK_CHECK_MAX_FRAME_SIZE + STACK_CHECK_PROTECT, size);
-+ 
-    /* Don't use a TARGET that isn't a pseudo.  */
-    if (target == 0 || GET_CODE (target) != REG
-*************** allocate_dynamic_stack_space (size, targ
-*** 1133,1136 ****
---- 1147,1281 ----
-  
-    return target;
-+ }
-+ \f
-+ /* Emit one stack probe at ADDRESS, an address within the stack.  */
-+ 
-+ static void
-+ emit_stack_probe (address)
-+      rtx address;
-+ {
-+   rtx memref = gen_rtx (MEM, word_mode, address);
-+ 
-+   MEM_VOLATILE_P (memref) = 1;
-+ 
-+   if (STACK_CHECK_PROBE_LOAD)
-+     emit_move_insn (gen_reg_rtx (word_mode), memref);
-+   else
-+     emit_move_insn (memref, const0_rtx);
-+ }
-+ 
-+ /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive. 
-+    FIRST is a constant and size is a Pmode RTX.  These are offsets from the
-+    current stack pointer.  STACK_GROWS_DOWNWARD says whether to add or
-+    subtract from the stack.  If SIZE is constant, this is done
-+    with a fixed number of probes.  Otherwise, we must make a loop.  */
-+ 
-+ #ifdef STACK_GROWS_DOWNWARD
-+ #define STACK_GROW_OP MINUS
-+ #else
-+ #define STACK_GROW_OP PLUS
-+ #endif
-+ 
-+ void
-+ probe_stack_range (first, size)
-+      HOST_WIDE_INT first;
-+      rtx size;
-+ {
-+   /* First see if we have an insn to check the stack.  Use it if so.  */
-+ #ifdef HAVE_check_stack
-+   if (HAVE_check_stack)
-+     {
-+       rtx last_addr = force_operand (gen_rtx (STACK_GROW_OP, Pmode,
-+                                            stack_pointer_rtx,
-+                                            plus_constant (size, first)),
-+                                   NULL_RTX);
-+ 
-+       if (insn_operand_predicate[(int) CODE_FOR_check_stack][0]
-+        && ! ((*insn_operand_predicate[(int) CODE_FOR_check_stack][0])
-+              (last_address, Pmode)))
-+      last_address = copy_to_mode_reg (Pmode, last_address);
-+ 
-+       emit_insn (gen_check_stack (last_address));
-+       return;
-+     }
-+ #endif
-+ 
-+   /* If we have to generate explicit probes, see if we have a constant
-+      small number of them to generate.  If so, that's the easy case.  */
-+   if (GET_CODE (size) == CONST_INT && INTVAL (size) < 10)
-+     {
-+       HOST_WIDE_INT offset;
-+ 
-+       /* Start probing at FIRST + N * STACK_CHECK_PROBE_INTERVAL
-+       for values of N from 1 until it exceeds LAST.  If only one
-+       probe is needed, this will not generate any code.  Then probe
-+       at LAST.  */
-+       for (offset = first + STACK_CHECK_PROBE_INTERVAL;
-+         offset < INTVAL (size);
-+         offset = offset + STACK_CHECK_PROBE_INTERVAL)
-+      emit_stack_probe (gen_rtx (STACK_GROW_OP, Pmode,
-+                                 stack_pointer_rtx, GEN_INT (offset)));
-+ 
-+       emit_stack_probe (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+                               plus_constant (size, first)));
-+     }
-+ 
-+   /* In the variable case, do the same as above, but in a loop.  We emit loop
-+      notes so that loop optimization can be done.  */
-+   else
-+     {
-+       rtx test_addr
-+      = force_operand (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+                                GEN_INT (first
-+                                         + STACK_CHECK_PROBE_INTERVAL)),
-+                       NULL_RTX);
-+       rtx last_addr
-+      = force_operand (gen_rtx (STACK_GROW_OP, Pmode, stack_pointer_rtx,
-+                                plus_constant (size, first)),
-+                       NULL_RTX);
-+       rtx incr = GEN_INT (STACK_CHECK_PROBE_INTERVAL);
-+       rtx loop_lab = gen_label_rtx ();
-+       rtx test_lab = gen_label_rtx ();
-+       rtx end_lab = gen_label_rtx ();
-+       rtx temp;
-+ 
-+       if (GET_CODE (test_addr) != REG
-+        || REGNO (test_addr) < FIRST_PSEUDO_REGISTER)
-+      test_addr = force_reg (Pmode, test_addr);
-+ 
-+       emit_note (NULL_PTR, NOTE_INSN_LOOP_BEG);
-+       emit_jump (test_lab);
-+ 
-+       emit_label (loop_lab);
-+       emit_stack_probe (test_addr);
-+ 
-+       emit_note (NULL_PTR, NOTE_INSN_LOOP_CONT);
-+ 
-+ #ifdef STACK_GROWS_DOWNWARD
-+ #define CMP_OPCODE GTU
-+       temp = expand_binop (Pmode, sub_optab, test_addr, incr, test_addr,
-+                         1, OPTAB_WIDEN);
-+ #else
-+ #define CMP_OPCODE LTU
-+       temp = expand_binop (Pmode, add_optab, test_addr, incr, test_addr,
-+                         1, OPTAB_WIDEN);
-+ #endif
-+ 
-+       if (temp != test_addr)
-+      abort ();
-+ 
-+       emit_label (test_lab);
-+       emit_cmp_insn (test_addr, last_addr, CMP_OPCODE, NULL_RTX, Pmode, 1, 0);
-+       emit_jump_insn ((*bcc_gen_fctn[(int) CMP_OPCODE]) (loop_lab));
-+       emit_jump (end_lab);
-+       emit_note (NULL_PTR, NOTE_INSN_LOOP_END);
-+       emit_label (end_lab);
-+ 
-+       /* If will be doing stupid optimization, show test_addr is still live. */
-+       if (obey_regdecls)
-+      emit_insn (gen_rtx (USE, VOIDmode, test_addr));
-+ 
-+       emit_stack_probe (last_addr);
-+     }
-  }
-  \f
-diff -rcp2N gcc-2.7.2.3/expmed.c gcc-2.7.2.3.f.1/expmed.c
-*** gcc-2.7.2.3/expmed.c       Thu Jul 13 23:25:37 1995
---- gcc-2.7.2.3.f.1/expmed.c   Sun Aug 10 22:46:23 1997
-*************** store_bit_field (str_rtx, bitsize, bitnu
-*** 399,402 ****
---- 399,403 ----
-  #ifdef HAVE_insv
-    if (HAVE_insv
-+       && GET_MODE (value) != BLKmode
-        && !(bitsize == 1 && GET_CODE (value) == CONST_INT)
-        /* Ensure insv's size is wide enough for this field.  */
-*************** store_split_bit_field (op0, bitsize, bit
-*** 777,781 ****
-            done in extract_bit_field, so that the two calls to
-            extract_fixed_bit_field will have comparable arguments.  */
-!        if (GET_CODE (value) != MEM)
-           total_bits = BITS_PER_WORD;
-         else
---- 778,782 ----
-            done in extract_bit_field, so that the two calls to
-            extract_fixed_bit_field will have comparable arguments.  */
-!        if (GET_CODE (value) != MEM || GET_MODE (value) == BLKmode)
-           total_bits = BITS_PER_WORD;
-         else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 790,797 ****
-           /* The args are chosen so that the last part includes the
-              lsb.  Give extract_bit_field the value it needs (with
-!             endianness compensation) to fetch the piece we want.  */
-!          part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-!                                          total_bits - bitsize + bitsdone,
-!                                          NULL_RTX, 1, align);
-       }
-        else
---- 791,807 ----
-           /* The args are chosen so that the last part includes the
-              lsb.  Give extract_bit_field the value it needs (with
-!             endianness compensation) to fetch the piece we want.
-! 
-!             ??? We have no idea what the alignment of VALUE is, so
-!             we have to use a guess.  */
-!          part
-!            = extract_fixed_bit_field
-!              (word_mode, value, 0, thissize,
-!               total_bits - bitsize + bitsdone, NULL_RTX, 1,
-!               GET_MODE (value) == VOIDmode
-!               ? UNITS_PER_WORD
-!               : (GET_MODE (value) == BLKmode
-!                  ? 1
-!                  : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
-       }
-        else
-*************** store_split_bit_field (op0, bitsize, bit
-*** 803,808 ****
-                           & (((HOST_WIDE_INT) 1 << thissize) - 1));
-         else
-!          part = extract_fixed_bit_field (word_mode, value, 0, thissize,
-!                                          bitsdone, NULL_RTX, 1, align);
-       }
-  
---- 813,824 ----
-                           & (((HOST_WIDE_INT) 1 << thissize) - 1));
-         else
-!          part
-!            = extract_fixed_bit_field
-!              (word_mode, value, 0, thissize, bitsdone, NULL_RTX, 1,
-!               GET_MODE (value) == VOIDmode
-!               ? UNITS_PER_WORD
-!               : (GET_MODE (value) == BLKmode
-!                  ? 1
-!                  : GET_MODE_ALIGNMENT (GET_MODE (value)) / BITS_PER_UNIT));
-       }
-  
-*************** extract_bit_field (str_rtx, bitsize, bit
-*** 876,882 ****
-    rtx spec_target_subreg = 0;
-  
--   if (GET_CODE (str_rtx) == MEM && ! MEM_IN_STRUCT_P (str_rtx))
--     abort ();
-- 
-    /* Discount the part of the structure before the desired byte.
-       We need to know how many bytes are safe to reference after it.  */
---- 892,895 ----
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3189,3193 ****
-          Notice that we compute also the final remainder value here,
-          and return the result right away.  */
-!      if (target == 0)
-         target = gen_reg_rtx (compute_mode);
-  
---- 3202,3206 ----
-          Notice that we compute also the final remainder value here,
-          and return the result right away.  */
-!      if (target == 0 || GET_MODE (target) != compute_mode)
-         target = gen_reg_rtx (compute_mode);
-  
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3316,3320 ****
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0)
-             target = gen_reg_rtx (compute_mode);
-  
---- 3329,3333 ----
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0 || GET_MODE (target) != compute_mode)
-             target = gen_reg_rtx (compute_mode);
-  
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3418,3422 ****
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0)
-             target = gen_reg_rtx (compute_mode);
-           if (rem_flag)
---- 3431,3435 ----
-              remainder.  Notice that we compute also the final remainder
-              value here, and return the result right away.  */
-!          if (target == 0 || GET_MODE (target) != compute_mode)
-             target = gen_reg_rtx (compute_mode);
-           if (rem_flag)
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3602,3605 ****
---- 3615,3621 ----
-    if (quotient == 0)
-      {
-+       if (target && GET_MODE (target) != compute_mode)
-+      target = 0;
-+ 
-        if (rem_flag)
-       {
-*************** expand_divmod (rem_flag, code, mode, op0
-*** 3653,3656 ****
---- 3669,3675 ----
-    if (rem_flag)
-      {
-+       if (target && GET_MODE (target) != compute_mode)
-+      target = 0;
-+ 
-        if (quotient == 0)
-       /* No divide instruction either.  Use library for remainder.  */
-diff -rcp2N gcc-2.7.2.3/expr.c gcc-2.7.2.3.f.1/expr.c
-*** gcc-2.7.2.3/expr.c Sat Jun 29 16:26:15 1996
---- gcc-2.7.2.3.f.1/expr.c     Fri Aug 29 08:01:24 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 27,30 ****
---- 27,31 ----
-  #include "flags.h"
-  #include "regs.h"
-+ #include "hard-reg-set.h"
-  #include "function.h"
-  #include "insn-flags.h"
-*************** extern int stack_depth;
-*** 139,143 ****
-  extern int max_stack_depth;
-  extern struct obstack permanent_obstack;
-! 
-  
-  static rtx enqueue_insn              PROTO((rtx, rtx));
---- 140,144 ----
-  extern int max_stack_depth;
-  extern struct obstack permanent_obstack;
-! extern rtx arg_pointer_save_area;
-  
-  static rtx enqueue_insn              PROTO((rtx, rtx));
-*************** static void store_constructor  PROTO((tre
-*** 151,155 ****
-  static rtx store_field               PROTO((rtx, int, int, enum machine_mode, tree,
-                                      enum machine_mode, int, int, int));
-- static int get_inner_unaligned_p PROTO((tree));
-  static tree save_noncopied_parts PROTO((tree, tree));
-  static tree init_noncopied_parts PROTO((tree, tree));
---- 152,155 ----
-*************** move_by_pieces (to, from, len, align)
-*** 1494,1498 ****
-  
-    /* The code above should have handled everything.  */
-!   if (data.len != 0)
-      abort ();
-  }
---- 1494,1498 ----
-  
-    /* The code above should have handled everything.  */
-!   if (data.len > 0)
-      abort ();
-  }
-*************** emit_move_insn_1 (x, y)
-*** 1989,1993 ****
-                            
-        /* Show the output dies here.  */
-!       emit_insn (gen_rtx (CLOBBER, VOIDmode, x));
-  
-        for (i = 0;
---- 1989,1994 ----
-                            
-        /* Show the output dies here.  */
-!       if (x != y)
-!         emit_insn (gen_rtx (CLOBBER, VOIDmode, x));
-  
-        for (i = 0;
-*************** expand_assignment (to, from, want_value,
-*** 2481,2490 ****
-       problem.  */
-  
-!   if (TREE_CODE (to) == COMPONENT_REF
-!       || TREE_CODE (to) == BIT_FIELD_REF
-!       || (TREE_CODE (to) == ARRAY_REF
-!        && ((TREE_CODE (TREE_OPERAND (to, 1)) == INTEGER_CST
-!             && TREE_CODE (TYPE_SIZE (TREE_TYPE (to))) == INTEGER_CST)
-!            || (SLOW_UNALIGNED_ACCESS && get_inner_unaligned_p (to)))))
-      {
-        enum machine_mode mode1;
---- 2482,2487 ----
-       problem.  */
-  
-!   if (TREE_CODE (to) == COMPONENT_REF || TREE_CODE (to) == BIT_FIELD_REF
-!       || TREE_CODE (to) == ARRAY_REF)
-      {
-        enum machine_mode mode1;
-*************** expand_assignment (to, from, want_value,
-*** 2498,2503 ****
-  
-        push_temp_slots ();
-!       tem = get_inner_reference (to, &bitsize, &bitpos, &offset,
-!                                    &mode1, &unsignedp, &volatilep);
-  
-        /* If we are going to use store_bit_field and extract_bit_field,
---- 2495,2500 ----
-  
-        push_temp_slots ();
-!       tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
-!                               &unsignedp, &volatilep, &alignment);
-  
-        /* If we are going to use store_bit_field and extract_bit_field,
-*************** expand_assignment (to, from, want_value,
-*** 2507,2511 ****
-       tem = stabilize_reference (tem);
-  
--       alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
-        to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, 0);
-        if (offset != 0)
---- 2504,2507 ----
-*************** expand_assignment (to, from, want_value,
-*** 2518,2529 ****
-                                  gen_rtx (PLUS, ptr_mode, XEXP (to_rtx, 0),
-                                           force_reg (ptr_mode, offset_rtx)));
--        /* If we have a variable offset, the known alignment
--           is only that of the innermost structure containing the field.
--           (Actually, we could sometimes do better by using the
--           align of an element of the innermost array, but no need.)  */
--        if (TREE_CODE (to) == COMPONENT_REF
--            || TREE_CODE (to) == BIT_FIELD_REF)
--          alignment
--            = TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (to, 0))) / BITS_PER_UNIT;
-       }
-        if (volatilep)
---- 2514,2517 ----
-*************** expand_assignment (to, from, want_value,
-*** 2535,2539 ****
-                We must make a new MEM before setting the volatile bit.  */
-             if (offset == 0)
-!              to_rtx = change_address (to_rtx, VOIDmode, XEXP (to_rtx, 0));
-             MEM_VOLATILE_P (to_rtx) = 1;
-           }
---- 2523,2527 ----
-                We must make a new MEM before setting the volatile bit.  */
-             if (offset == 0)
-!              to_rtx = copy_rtx (to_rtx);
-             MEM_VOLATILE_P (to_rtx) = 1;
-           }
-*************** store_expr (exp, target, want_value)
-*** 2775,2780 ****
-        which will often result in some optimizations.  Do the conversion
-        in two steps: first change the signedness, if needed, then
-!       the extend.  */
-!       if (! want_value)
-       {
-         if (TREE_UNSIGNED (TREE_TYPE (exp))
---- 2763,2771 ----
-        which will often result in some optimizations.  Do the conversion
-        in two steps: first change the signedness, if needed, then
-!       the extend.  But don't do this if the type of EXP is a subtype
-!       of something else since then the conversion might involve
-!       more than just converting modes.  */
-!       if (! want_value && INTEGRAL_TYPE_P (TREE_TYPE (exp))
-!        && TREE_TYPE (TREE_TYPE (exp)) == 0)
-       {
-         if (TREE_UNSIGNED (TREE_TYPE (exp))
-*************** store_expr (exp, target, want_value)
-*** 2843,2847 ****
-       Convert the value to TARGET's type first if nec.  */
-  
-!   if (temp != target && TREE_CODE (exp) != ERROR_MARK)
-      {
-        target = protect_from_queue (target, 1);
---- 2834,2838 ----
-       Convert the value to TARGET's type first if nec.  */
-  
-!   if (! rtx_equal_p (temp, target) && TREE_CODE (exp) != ERROR_MARK)
-      {
-        target = protect_from_queue (target, 1);
-*************** store_constructor (exp, target)
-*** 3071,3074 ****
---- 3062,3073 ----
-           }
-  
-+        if (TREE_READONLY (field))
-+          {
-+            if (GET_CODE (to_rtx) == MEM)
-+              to_rtx = copy_rtx (to_rtx);
-+ 
-+            RTX_UNCHANGING_P (to_rtx) = 1;
-+          }
-+ 
-         store_field (to_rtx, bitsize, bitpos, mode, TREE_VALUE (elt),
-                      /* The alignment of TARGET is
-*************** store_field (target, bitsize, bitpos, mo
-*** 3414,3417 ****
---- 3413,3428 ----
-        rtx temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
-  
-+       /* If BITSIZE is narrower than the size of the type of EXP
-+       we will be narrowing TEMP.  Normally, what's wanted are the
-+       low-order bits.  However, if EXP's type is a record and this is
-+       big-endian machine, we want the upper BITSIZE bits.  */
-+       if (BYTES_BIG_ENDIAN && GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT
-+        && bitsize < GET_MODE_BITSIZE (GET_MODE (temp))
-+        && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
-+      temp = expand_shift (RSHIFT_EXPR, GET_MODE (temp), temp,
-+                           size_int (GET_MODE_BITSIZE (GET_MODE (temp))
-+                                     - bitsize),
-+                           temp, 1);
-+ 
-        /* Unless MODE is VOIDmode or BLKmode, convert TEMP to
-        MODE.  */
-*************** store_field (target, bitsize, bitpos, mo
-*** 3420,3423 ****
---- 3431,3455 ----
-       temp = convert_modes (mode, TYPE_MODE (TREE_TYPE (exp)), temp, 1);
-  
-+       /* If the modes of TARGET and TEMP are both BLKmode, both
-+       must be in memory and BITPOS must be aligned on a byte
-+       boundary.  If so, we simply do a block copy.  */
-+       if (GET_MODE (target) == BLKmode && GET_MODE (temp) == BLKmode)
-+      {
-+        if (GET_CODE (target) != MEM || GET_CODE (temp) != MEM
-+            || bitpos % BITS_PER_UNIT != 0)
-+          abort ();
-+ 
-+        target = change_address (target, VOIDmode,
-+                                 plus_constant (XEXP (target, 0),
-+                                                bitpos / BITS_PER_UNIT));
-+ 
-+        emit_block_move (target, temp,
-+                         GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-+                                  / BITS_PER_UNIT),
-+                         1);
-+ 
-+        return value_mode == VOIDmode ? const0_rtx : target;
-+      }
-+ 
-        /* Store the value in the bitfield.  */
-        store_bit_field (target, bitsize, bitpos, mode, temp, align, total_size);
-*************** store_field (target, bitsize, bitpos, mo
-*** 3466,3471 ****
-        /* Now build a reference to just the desired component.  */
-  
-!       to_rtx = change_address (target, mode,
-!                             plus_constant (addr, (bitpos / BITS_PER_UNIT)));
-        MEM_IN_STRUCT_P (to_rtx) = 1;
-  
---- 3498,3505 ----
-        /* Now build a reference to just the desired component.  */
-  
-!       to_rtx
-!      = copy_rtx (change_address (target, mode,
-!                                  plus_constant (addr,
-!                                                 (bitpos / BITS_PER_UNIT))));
-        MEM_IN_STRUCT_P (to_rtx) = 1;
-  
-*************** store_field (target, bitsize, bitpos, mo
-*** 3474,3508 ****
-  }
-  \f
-- /* Return true if any object containing the innermost array is an unaligned
--    packed structure field.  */
-- 
-- static int
-- get_inner_unaligned_p (exp)
--      tree exp;
-- {
--   int needed_alignment = TYPE_ALIGN (TREE_TYPE (exp));
-- 
--   while (1)
--     {
--       if (TREE_CODE (exp) == COMPONENT_REF || TREE_CODE (exp) == BIT_FIELD_REF)
--      {
--        if (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
--            < needed_alignment)
--          return 1;
--      }
--       else if (TREE_CODE (exp) != ARRAY_REF
--             && TREE_CODE (exp) != NON_LVALUE_EXPR
--             && ! ((TREE_CODE (exp) == NOP_EXPR
--                    || TREE_CODE (exp) == CONVERT_EXPR)
--                   && (TYPE_MODE (TREE_TYPE (exp))
--                       == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))))
--      break;
-- 
--       exp = TREE_OPERAND (exp, 0);
--     }
-- 
--   return 0;
-- }
-- 
-  /* Given an expression EXP that may be a COMPONENT_REF, a BIT_FIELD_REF,
-     or an ARRAY_REF, look for nested COMPONENT_REFs, BIT_FIELD_REFs, or
---- 3508,3511 ----
-*************** get_inner_unaligned_p (exp)
-*** 3515,3518 ****
---- 3518,3524 ----
-     This offset is in addition to the bit position.
-     If the position is not variable, we store 0 in *POFFSET.
-+    We set *PALIGNMENT to the alignment in bytes of the address that will be
-+    computed.  This is the alignment of the thing we return if *POFFSET
-+    is zero, but can be more less strictly aligned if *POFFSET is nonzero.
-  
-     If any of the extraction expressions is volatile,
-*************** get_inner_unaligned_p (exp)
-*** 3525,3533 ****
-     If the field describes a variable-sized object, *PMODE is set to
-     VOIDmode and *PBITSIZE is set to -1.  An access cannot be made in
-!    this case, but the address of the object can be found.  */
-  
-  tree
-  get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-!                   punsignedp, pvolatilep)
-       tree exp;
-       int *pbitsize;
---- 3531,3539 ----
-     If the field describes a variable-sized object, *PMODE is set to
-     VOIDmode and *PBITSIZE is set to -1.  An access cannot be made in
-!    this case, but the address of the object can be found.   */
-  
-  tree
-  get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
-!                   punsignedp, pvolatilep, palignment)
-       tree exp;
-       int *pbitsize;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3537,3540 ****
---- 3543,3547 ----
-       int *punsignedp;
-       int *pvolatilep;
-+      int *palignment;
-  {
-    tree orig_exp = exp;
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3542,3545 ****
---- 3549,3553 ----
-    enum machine_mode mode = VOIDmode;
-    tree offset = integer_zero_node;
-+   int alignment = BIGGEST_ALIGNMENT;
-  
-    if (TREE_CODE (exp) == COMPONENT_REF)
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3599,3607 ****
-  
-         *pbitpos += TREE_INT_CST_LOW (constant);
-! 
-!        if (var)
-!          offset = size_binop (PLUS_EXPR, offset,
-!                               size_binop (EXACT_DIV_EXPR, var,
-!                                           size_int (BITS_PER_UNIT)));
-       }
-  
---- 3607,3613 ----
-  
-         *pbitpos += TREE_INT_CST_LOW (constant);
-!        offset = size_binop (PLUS_EXPR, offset,
-!                             size_binop (EXACT_DIV_EXPR, var,
-!                                         size_int (BITS_PER_UNIT)));
-       }
-  
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3629,3633 ****
-  
-         index = fold (build (MULT_EXPR, index_type, index,
-!                             TYPE_SIZE (TREE_TYPE (exp))));
-  
-         if (TREE_CODE (index) == INTEGER_CST
---- 3635,3640 ----
-  
-         index = fold (build (MULT_EXPR, index_type, index,
-!                             convert (index_type,
-!                                      TYPE_SIZE (TREE_TYPE (exp)))));
-  
-         if (TREE_CODE (index) == INTEGER_CST
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3652,3666 ****
-        if (TREE_THIS_VOLATILE (exp))
-       *pvolatilep = 1;
-        exp = TREE_OPERAND (exp, 0);
-      }
-  
-!   /* If this was a bit-field, see if there is a mode that allows direct
-!      access in case EXP is in memory.  */
-!   if (mode == VOIDmode && *pbitsize != 0 && *pbitpos % *pbitsize == 0)
-!     {
-!       mode = mode_for_size (*pbitsize, MODE_INT, 0);
-!       if (mode == BLKmode)
-!      mode = VOIDmode;
-!     }
-  
-    if (integer_zerop (offset))
---- 3659,3675 ----
-        if (TREE_THIS_VOLATILE (exp))
-       *pvolatilep = 1;
-+ 
-+       /* If the offset is non-constant already, then we can't assume any
-+       alignment more than the alignment here.  */
-+       if (! integer_zerop (offset))
-+      alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-+ 
-        exp = TREE_OPERAND (exp, 0);
-      }
-  
-!   if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
-!     alignment = MIN (alignment, DECL_ALIGN (exp));
-!   else if (TREE_TYPE (exp) != 0)
-!     alignment = MIN (alignment, TYPE_ALIGN (TREE_TYPE (exp)));
-  
-    if (integer_zerop (offset))
-*************** get_inner_reference (exp, pbitsize, pbit
-*** 3672,3675 ****
---- 3681,3685 ----
-    *pmode = mode;
-    *poffset = offset;
-+   *palignment = alignment / BITS_PER_UNIT;
-    return exp;
-  }
-*************** init_noncopied_parts (lhs, list)
-*** 3812,3820 ****
-  }
-  
-! /* Subroutine of expand_expr: return nonzero iff there is no way that
-     EXP can reference X, which is being modified.  */
-  
-  static int
-! safe_from_p (x, exp)
-       rtx x;
-       tree exp;
---- 3822,3834 ----
-  }
-  
-! static int safe_from_p_count;
-! static int safe_from_p_size;
-! static tree *safe_from_p_rewritten;
-! 
-! /* Subroutine of safe_from_p: return nonzero iff there is no way that
-     EXP can reference X, which is being modified.  */
-  
-  static int
-! safe_from_p_1 (x, exp)
-       rtx x;
-       tree exp;
-*************** safe_from_p (x, exp)
-*** 3822,3825 ****
---- 3836,3840 ----
-    rtx exp_rtl = 0;
-    int i, nops;
-+   int is_save_expr = 0;
-  
-    if (x == 0
-*************** safe_from_p (x, exp)
-*** 3860,3878 ****
-  
-      case 'x':
-!       if (TREE_CODE (exp) == TREE_LIST)
-!      return ((TREE_VALUE (exp) == 0
-!               || safe_from_p (x, TREE_VALUE (exp)))
-!              && (TREE_CHAIN (exp) == 0
-!                  || safe_from_p (x, TREE_CHAIN (exp))));
-!       else
-!      return 0;
-  
-      case '1':
-!       return safe_from_p (x, TREE_OPERAND (exp, 0));
-  
-      case '2':
-      case '<':
-!       return (safe_from_p (x, TREE_OPERAND (exp, 0))
-!            && safe_from_p (x, TREE_OPERAND (exp, 1)));
-  
-      case 'e':
---- 3875,3900 ----
-  
-      case 'x':
-!       switch (TREE_CODE (exp))
-!      {
-!      case TREE_LIST:
-!        return ((TREE_VALUE (exp) == 0
-!                 || safe_from_p_1 (x, TREE_VALUE (exp)))
-!                && (TREE_CHAIN (exp) == 0
-!                    || safe_from_p_1 (x, TREE_CHAIN (exp))));
-! 
-!      case ERROR_MARK:
-!        return 1;
-! 
-!      default:
-!        return 0;
-!      }
-  
-      case '1':
-!       return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-  
-      case '2':
-      case '<':
-!       return (safe_from_p_1 (x, TREE_OPERAND (exp, 0))
-!            && safe_from_p_1 (x, TREE_OPERAND (exp, 1)));
-  
-      case 'e':
-*************** safe_from_p (x, exp)
-*** 3887,3891 ****
-       case ADDR_EXPR:
-         return (staticp (TREE_OPERAND (exp, 0))
-!                || safe_from_p (x, TREE_OPERAND (exp, 0)));
-  
-       case INDIRECT_REF:
---- 3909,3913 ----
-       case ADDR_EXPR:
-         return (staticp (TREE_OPERAND (exp, 0))
-!                || safe_from_p_1 (x, TREE_OPERAND (exp, 0)));
-  
-       case INDIRECT_REF:
-*************** safe_from_p (x, exp)
-*** 3922,3928 ****
-  
-       case CLEANUP_POINT_EXPR:
-!        return safe_from_p (x, TREE_OPERAND (exp, 0));
-  
-       case SAVE_EXPR:
-         exp_rtl = SAVE_EXPR_RTL (exp);
-         break;
---- 3944,3951 ----
-  
-       case CLEANUP_POINT_EXPR:
-!        return safe_from_p_1 (x, TREE_OPERAND (exp, 0));
-  
-       case SAVE_EXPR:
-+        is_save_expr = 1;
-         exp_rtl = SAVE_EXPR_RTL (exp);
-         break;
-*************** safe_from_p (x, exp)
-*** 3931,3935 ****
-         /* The only operand we look at is operand 1.  The rest aren't
-            part of the expression.  */
-!        return safe_from_p (x, TREE_OPERAND (exp, 1));
-  
-       case METHOD_CALL_EXPR:
---- 3954,3958 ----
-         /* The only operand we look at is operand 1.  The rest aren't
-            part of the expression.  */
-!        return safe_from_p_1 (x, TREE_OPERAND (exp, 1));
-  
-       case METHOD_CALL_EXPR:
-*************** safe_from_p (x, exp)
-*** 3945,3949 ****
-        for (i = 0; i < nops; i++)
-       if (TREE_OPERAND (exp, i) != 0
-!          && ! safe_from_p (x, TREE_OPERAND (exp, i)))
-         return 0;
-      }
---- 3968,3972 ----
-        for (i = 0; i < nops; i++)
-       if (TREE_OPERAND (exp, i) != 0
-!          && ! safe_from_p_1 (x, TREE_OPERAND (exp, i)))
-         return 0;
-      }
-*************** safe_from_p (x, exp)
-*** 3969,3975 ****
---- 3992,4054 ----
-  
-    /* If we reach here, it is safe.  */
-+   if (is_save_expr)
-+     {
-+       /* This SAVE_EXPR might appear many times in the top-level
-+       safe_from_p() expression, and if it has a complex
-+       subexpression, examining it multiple times could result
-+       in a combinatorial explosion.  E.g. on an Alpha Cabriolet
-+       running at least 200MHz, a Fortran test case compiled with
-+       optimization took about 28 minutes to compile -- even though
-+       it was only a few lines long, and the complicated line causing
-+       so much time to be spent in the earlier version of safe_from_p()
-+       had only 293 or so unique nodes.
-+ 
-+       So, turn this SAVE_EXPR into an ERROR_MARK for now, but remember
-+       where it is so we can turn it back in the top-level safe_from_p()
-+       when we're done.  */
-+ 
-+       if (safe_from_p_count > safe_from_p_size)
-+      return 0;       /* For now, don't bother re-sizing the array. */
-+       safe_from_p_rewritten[safe_from_p_count++] = exp;
-+       TREE_SET_CODE (exp, ERROR_MARK);
-+     }
-+ 
-    return 1;
-  }
-  
-+ /* Subroutine of expand_expr: return nonzero iff there is no way that
-+    EXP can reference X, which is being modified.  */
-+ 
-+ static int
-+ safe_from_p (x, exp)
-+      rtx x;
-+      tree exp;
-+ {
-+   int rtn;
-+   int i;
-+   tree trees[128];
-+ 
-+   safe_from_p_count = 0;
-+   safe_from_p_size = sizeof (trees) / sizeof (trees[0]);
-+   safe_from_p_rewritten = &trees[0];
-+ 
-+   rtn = safe_from_p_1 (x, exp);
-+ 
-+ #if 0
-+   if (safe_from_p_count != 0)
-+     fprintf (stderr, "%s:%d: safe_from_p_count = %d\n",
-+           input_filename, lineno, safe_from_p_count);
-+ #endif
-+ 
-+   for (i = 0; i < safe_from_p_count; ++i)
-+     {
-+       if (TREE_CODE (trees [i]) != ERROR_MARK)
-+      abort ();
-+       TREE_SET_CODE (trees[i], SAVE_EXPR);
-+     }
-+ 
-+   return rtn;
-+ }
-+ 
-  /* Subroutine of expand_expr: return nonzero iff EXP is an
-     expression whose type is statically determinable.  */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4300,4303 ****
---- 4379,4387 ----
-        context = decl_function_context (exp);
-  
-+       /* If this SAVE_EXPR was at global context, assume we are an
-+       initialization function and move it into our context.  */
-+       if (context == 0)
-+      SAVE_EXPR_CONTEXT (exp) = current_function_decl;
-+ 
-        /* We treat inline_function_decl as an alias for the current function
-        because that is the inline function whose vars, types, etc.
-*************** expand_expr (exp, target, tmode, modifie
-*** 4310,4313 ****
---- 4394,4401 ----
-        if (context)
-       {
-+        /* The following call just exists to abort if the context is
-+           not of a containing function.  */
-+        find_function_data (context);
-+ 
-         temp = SAVE_EXPR_RTL (exp);
-         if (temp && GET_CODE (temp) == REG)
-*************** expand_expr (exp, target, tmode, modifie
-*** 4381,4400 ****
-        if (placeholder_list)
-       {
-!        tree object;
-         tree old_list = placeholder_list;
-  
-!        for (object = TREE_PURPOSE (placeholder_list);
-!             (TYPE_MAIN_VARIANT (TREE_TYPE (object))
-!              != TYPE_MAIN_VARIANT (type))
-!             && (TREE_CODE_CLASS (TREE_CODE (object)) == 'r'
-!                 || TREE_CODE_CLASS (TREE_CODE (object)) == '1'
-!                 || TREE_CODE_CLASS (TREE_CODE (object)) == '2'
-!                 || TREE_CODE_CLASS (TREE_CODE (object)) == 'e');
-!             object = TREE_OPERAND (object, 0))
-!          ;
-! 
-!        if (object != 0
-!            && (TYPE_MAIN_VARIANT (TREE_TYPE (object))
-!                == TYPE_MAIN_VARIANT (type)))
-           {
-             /* Expand this object skipping the list entries before
---- 4469,4501 ----
-        if (placeholder_list)
-       {
-!        tree need_type = TYPE_MAIN_VARIANT (type);
-!        tree object = 0;
-         tree old_list = placeholder_list;
-+        tree elt;
-+ 
-+        /* See if the object is the type that we want.  */
-+        if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_PURPOSE (placeholder_list)))
-+             == need_type))
-+          object = TREE_PURPOSE (placeholder_list);
-+ 
-+        /* Find the innermost reference that is of the type we want.  */
-+        for (elt = TREE_PURPOSE (placeholder_list);
-+             elt != 0
-+             && (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
-+                 || TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
-+                 || TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
-+                 || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e');
-+             elt = ((TREE_CODE (elt) == COMPOUND_EXPR
-+                     || TREE_CODE (elt) == COND_EXPR)
-+                    ? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0)))
-+          if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
-+              && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
-+                  == need_type))
-+            {
-+              object = TREE_OPERAND (elt, 0);
-+              break;
-+            }
-  
-!        if (object != 0)
-           {
-             /* Expand this object skipping the list entries before
-*************** expand_expr (exp, target, tmode, modifie
-*** 4534,4537 ****
---- 4635,4647 ----
-               }
-           }
-+ 
-+        if (TREE_READONLY (exp))
-+          {
-+            if (GET_CODE (target) == MEM)
-+              target = copy_rtx (target);
-+ 
-+            RTX_UNCHANGING_P (target) = 1;
-+          }
-+ 
-         store_constructor (exp, target);
-         return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 4543,4567 ****
-       tree exp2;
-  
-!      /* A SAVE_EXPR as the address in an INDIRECT_EXPR is generated
-!         for  *PTR += ANYTHING  where PTR is put inside the SAVE_EXPR.
-!         This code has the same general effect as simply doing
-!         expand_expr on the save expr, except that the expression PTR
-!         is computed for use as a memory address.  This means different
-!         code, suitable for indexing, may be generated.  */
-!      if (TREE_CODE (exp1) == SAVE_EXPR
-!          && SAVE_EXPR_RTL (exp1) == 0
-!          && TYPE_MODE (TREE_TYPE (exp1)) == ptr_mode)
-!        {
-!          temp = expand_expr (TREE_OPERAND (exp1, 0), NULL_RTX,
-!                              VOIDmode, EXPAND_SUM);
-!          op0 = memory_address (mode, temp);
-!          op0 = copy_all_regs (op0);
-!          SAVE_EXPR_RTL (exp1) = op0;
-!        }
-!      else
-!        {
-!          op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-!          op0 = memory_address (mode, op0);
-!        }
-  
-       temp = gen_rtx (MEM, mode, op0);
---- 4653,4658 ----
-       tree exp2;
-  
-!      op0 = expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM);
-!      op0 = memory_address (mode, op0);
-  
-       temp = gen_rtx (MEM, mode, op0);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4597,4605 ****
-       tree index = TREE_OPERAND (exp, 1);
-       tree index_type = TREE_TYPE (index);
-!      int i;
-! 
-!      if (TREE_CODE (low_bound) != INTEGER_CST
-!          && contains_placeholder_p (low_bound))
-!        low_bound = build (WITH_RECORD_EXPR, sizetype, low_bound, exp);
-  
-       /* Optimize the special-case of a zero lower bound.
---- 4688,4692 ----
-       tree index = TREE_OPERAND (exp, 1);
-       tree index_type = TREE_TYPE (index);
-!      HOST_WIDE_INT i;
-  
-       /* Optimize the special-case of a zero lower bound.
-*************** expand_expr (exp, target, tmode, modifie
-*** 4618,4684 ****
-                              convert (sizetype, low_bound)));
-  
--      if ((TREE_CODE (index) != INTEGER_CST
--           || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
--          && (! SLOW_UNALIGNED_ACCESS || ! get_inner_unaligned_p (exp)))
--        {
--          /* Nonconstant array index or nonconstant element size, and
--             not an array in an unaligned (packed) structure field.
--             Generate the tree for *(&array+index) and expand that,
--             except do it in a language-independent way
--             and don't complain about non-lvalue arrays.
--             `mark_addressable' should already have been called
--             for any array for which this case will be reached.  */
-- 
--          /* Don't forget the const or volatile flag from the array
--             element. */
--          tree variant_type = build_type_variant (type,
--                                                  TREE_READONLY (exp),
--                                                  TREE_THIS_VOLATILE (exp));
--          tree array_adr = build1 (ADDR_EXPR,
--                                   build_pointer_type (variant_type), array);
--          tree elt;
--          tree size = size_in_bytes (type);
-- 
--          /* Convert the integer argument to a type the same size as sizetype
--             so the multiply won't overflow spuriously.  */
--          if (TYPE_PRECISION (index_type) != TYPE_PRECISION (sizetype))
--            index = convert (type_for_size (TYPE_PRECISION (sizetype), 0),
--                             index);
-- 
--          if (TREE_CODE (size) != INTEGER_CST
--              && contains_placeholder_p (size))
--            size = build (WITH_RECORD_EXPR, sizetype, size, exp);
-- 
--          /* Don't think the address has side effects
--             just because the array does.
--             (In some cases the address might have side effects,
--             and we fail to record that fact here.  However, it should not
--             matter, since expand_expr should not care.)  */
--          TREE_SIDE_EFFECTS (array_adr) = 0;
-- 
--          elt
--            = build1
--              (INDIRECT_REF, type,
--               fold (build (PLUS_EXPR,
--                            TYPE_POINTER_TO (variant_type),
--                            array_adr,
--                            fold
--                            (build1
--                             (NOP_EXPR,
--                              TYPE_POINTER_TO (variant_type),
--                              fold (build (MULT_EXPR, TREE_TYPE (index),
--                                           index,
--                                           convert (TREE_TYPE (index),
--                                                    size))))))));;
-- 
--          /* Volatility, etc., of new expression is same as old
--             expression.  */
--          TREE_SIDE_EFFECTS (elt) = TREE_SIDE_EFFECTS (exp);
--          TREE_THIS_VOLATILE (elt) = TREE_THIS_VOLATILE (exp);
--          TREE_READONLY (elt) = TREE_READONLY (exp);
-- 
--          return expand_expr (elt, target, tmode, modifier);
--        }
-- 
-       /* Fold an expression like: "foo"[2].
-          This is not done in fold so it won't happen inside &.
---- 4705,4708 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4720,4725 ****
-                && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK)
-         {
-!          if (TREE_CODE (index) == INTEGER_CST
-!              && TREE_INT_CST_HIGH (index) == 0)
-             {
-               tree init = DECL_INITIAL (array);
---- 4744,4748 ----
-                && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK)
-         {
-!          if (TREE_CODE (index) == INTEGER_CST)
-             {
-               tree init = DECL_INITIAL (array);
-*************** expand_expr (exp, target, tmode, modifie
-*** 4738,4748 ****
-                 }
-               else if (TREE_CODE (init) == STRING_CST
-!                       && i < TREE_STRING_LENGTH (init))
-!                return GEN_INT (TREE_STRING_POINTER (init)[i]);
-             }
-         }
-        }
-  
-!       /* Treat array-ref with constant index as a component-ref.  */
-  
-      case COMPONENT_REF:
---- 4761,4775 ----
-                 }
-               else if (TREE_CODE (init) == STRING_CST
-!                       && TREE_INT_CST_HIGH (index) == 0
-!                       && (TREE_INT_CST_LOW (index)
-!                           < TREE_STRING_LENGTH (init)))
-!                return (GEN_INT
-!                        (TREE_STRING_POINTER
-!                         (init)[TREE_INT_CST_LOW (index)]));
-             }
-         }
-        }
-  
-!       /* ... fall through ... */
-  
-      case COMPONENT_REF:
-*************** expand_expr (exp, target, tmode, modifie
-*** 4770,4776 ****
-       tree offset;
-       int volatilep = 0;
--      tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
--                                      &mode1, &unsignedp, &volatilep);
-       int alignment;
-  
-       /* If we got back the original object, something is wrong.  Perhaps
---- 4797,4804 ----
-       tree offset;
-       int volatilep = 0;
-       int alignment;
-+      tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
-+                                      &mode1, &unsignedp, &volatilep,
-+                                      &alignment);
-  
-       /* If we got back the original object, something is wrong.  Perhaps
-*************** expand_expr (exp, target, tmode, modifie
-*** 4793,4797 ****
-                               != INTEGER_CST)
-                           ? target : NULL_RTX),
-!                         VOIDmode, EXPAND_SUM);
-  
-       /* If this is a constant, put it into a register if it is a
---- 4821,4826 ----
-                               != INTEGER_CST)
-                           ? target : NULL_RTX),
-!                         VOIDmode,
-!                         modifier == EXPAND_INITIALIZER ? modifier : 0);
-  
-       /* If this is a constant, put it into a register if it is a
-*************** expand_expr (exp, target, tmode, modifie
-*** 4806,4810 ****
-         }
-  
--      alignment = TYPE_ALIGN (TREE_TYPE (tem)) / BITS_PER_UNIT;
-       if (offset != 0)
-         {
---- 4835,4838 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4816,4827 ****
-                                 gen_rtx (PLUS, ptr_mode, XEXP (op0, 0),
-                                          force_reg (ptr_mode, offset_rtx)));
--        /* If we have a variable offset, the known alignment
--           is only that of the innermost structure containing the field.
--           (Actually, we could sometimes do better by using the
--           size of an element of the innermost array, but no need.)  */
--        if (TREE_CODE (exp) == COMPONENT_REF
--            || TREE_CODE (exp) == BIT_FIELD_REF)
--          alignment = (TYPE_ALIGN (TREE_TYPE (TREE_OPERAND (exp, 0)))
--                       / BITS_PER_UNIT);
-         }
-  
---- 4844,4847 ----
-*************** expand_expr (exp, target, tmode, modifie
-*** 4844,4848 ****
-               && modifier != EXPAND_SUM
-               && modifier != EXPAND_INITIALIZER
-!              && ((mode1 != BLKmode && ! direct_load[(int) mode1])
-                   /* If the field isn't aligned enough to fetch as a memref,
-                      fetch it as a bit field.  */
---- 4864,4870 ----
-               && modifier != EXPAND_SUM
-               && modifier != EXPAND_INITIALIZER
-!              && ((mode1 != BLKmode && ! direct_load[(int) mode1]
-!                   && GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
-!                   && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
-                   /* If the field isn't aligned enough to fetch as a memref,
-                      fetch it as a bit field.  */
-*************** expand_expr (exp, target, tmode, modifie
-*** 4857,4861 ****
-  
-           if (ext_mode == BLKmode)
-!            abort ();
-  
-           op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
---- 4879,4907 ----
-  
-           if (ext_mode == BLKmode)
-!            {
-!              /* In this case, BITPOS must start at a byte boundary and
-!                 TARGET, if specified, must be a MEM.  */
-!              if (GET_CODE (op0) != MEM
-!                  || (target != 0 && GET_CODE (target) != MEM)
-!                  || bitpos % BITS_PER_UNIT != 0)
-!                abort ();
-! 
-!              op0 = change_address (op0, VOIDmode,
-!                                    plus_constant (XEXP (op0, 0),
-!                                                   bitpos / BITS_PER_UNIT));
-!              if (target == 0)
-!                {
-!                  target
-!                    = assign_stack_temp (mode, int_size_in_bytes (type), 0);
-!                  MEM_IN_STRUCT_P (target) = AGGREGATE_TYPE_P (type);
-!                }
-! 
-!              emit_block_move (target, op0,
-!                               GEN_INT ((bitsize + BITS_PER_UNIT - 1)
-!                                        / BITS_PER_UNIT),
-!                               1);
-!              
-!              return target;
-!            }
-  
-           op0 = extract_bit_field (validize_mem (op0), bitsize, bitpos,
-*************** expand_expr (exp, target, tmode, modifie
-*** 4863,4866 ****
---- 4909,4924 ----
-                                    alignment,
-                                    int_size_in_bytes (TREE_TYPE (tem)));
-+ 
-+          /* If the result is a record type and BITSIZE is narrower than
-+             the mode of OP0, an integral mode, and this is a big endian
-+             machine, we must put the field into the high-order bits.  */
-+          if (TREE_CODE (type) == RECORD_TYPE && BYTES_BIG_ENDIAN
-+              && GET_MODE_CLASS (GET_MODE (op0)) == MODE_INT
-+              && bitsize < GET_MODE_BITSIZE (GET_MODE (op0)))
-+            op0 = expand_shift (LSHIFT_EXPR, GET_MODE (op0), op0,
-+                                size_int (GET_MODE_BITSIZE (GET_MODE (op0))
-+                                          - bitsize),
-+                                op0, 1);
-+ 
-           if (mode == BLKmode)
-             {
-*************** expand_expr (exp, target, tmode, modifie
-*** 4877,4880 ****
---- 4935,4943 ----
-         }
-  
-+      /* If the result is BLKmode, use that to access the object
-+         now as well.  */
-+      if (mode == BLKmode)
-+        mode1 = BLKmode;
-+ 
-       /* Get a reference to just this component.  */
-       if (modifier == EXPAND_CONST_ADDRESS
-*************** expand_expr (exp, target, tmode, modifie
-*** 4883,4895 ****
-                                                   (bitpos / BITS_PER_UNIT)));
-       else
-!        op0 = change_address (op0, mode1,
-!                              plus_constant (XEXP (op0, 0),
-!                                             (bitpos / BITS_PER_UNIT)));
-       MEM_IN_STRUCT_P (op0) = 1;
-       MEM_VOLATILE_P (op0) |= volatilep;
-!      if (mode == mode1 || mode1 == BLKmode || mode1 == tmode)
-         return op0;
-!      if (target == 0)
-         target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-       convert_move (target, op0, unsignedp);
-       return target;
---- 4946,4964 ----
-                                                   (bitpos / BITS_PER_UNIT)));
-       else
-!        op0
-!          = copy_rtx
-!            (change_address (op0, mode1,
-!                             plus_constant (XEXP (op0, 0),
-!                                            (bitpos / BITS_PER_UNIT))));
-! 
-       MEM_IN_STRUCT_P (op0) = 1;
-       MEM_VOLATILE_P (op0) |= volatilep;
-!      if (mode == mode1 || mode1 == BLKmode || mode1 == tmode
-!          || modifier == EXPAND_CONST_ADDRESS
-!          || modifier == EXPAND_INITIALIZER)
-         return op0;
-!      else if (target == 0)
-         target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode);
-+ 
-       convert_move (target, op0, unsignedp);
-       return target;
-*************** expand_expr (exp, target, tmode, modifie
-*** 6199,6203 ****
-       if (TREE_CODE (lhs) != VAR_DECL
-           && TREE_CODE (lhs) != RESULT_DECL
-!          && TREE_CODE (lhs) != PARM_DECL)
-         preexpand_calls (exp);
-  
---- 6268,6274 ----
-       if (TREE_CODE (lhs) != VAR_DECL
-           && TREE_CODE (lhs) != RESULT_DECL
-!          && TREE_CODE (lhs) != PARM_DECL
-!          && ! (TREE_CODE (lhs) == INDIRECT_REF
-!                && TYPE_READONLY (TREE_TYPE (TREE_OPERAND (lhs, 0)))))
-         preexpand_calls (exp);
-  
-*************** expand_builtin (exp, target, subtarget, 
-*** 7986,7989 ****
---- 8057,8295 ----
-  #endif
-  
-+       /* __builtin_setjmp is passed a pointer to an array of five words
-+       (not all will be used on all machines).  It operates similarly to
-+       the C library function of the same name, but is more efficient.
-+       Much of the code below (and for longjmp) is copied from the handling
-+       of non-local gotos.
-+ 
-+       NOTE: This is intended for use by GNAT and will only work in
-+       the method used by it.  This code will likely NOT survive to 
-+       the GCC 2.8.0 release.  */
-+     case BUILT_IN_SETJMP:
-+       if (arglist == 0
-+        || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+      break;
-+ 
-+       {
-+      rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
-+                                  VOIDmode, 0);
-+      rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
-+      enum machine_mode sa_mode = Pmode;
-+      rtx stack_save;
-+      int old_inhibit_defer_pop = inhibit_defer_pop;
-+      int return_pops = RETURN_POPS_ARGS (get_identifier ("__dummy"),
-+                                          get_identifier ("__dummy"), 0);
-+      rtx next_arg_reg;
-+      CUMULATIVE_ARGS args_so_far;
-+      int current_call_is_indirect = 1;
-+      int i;
-+ 
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+      buf_addr = convert_memory_address (Pmode, buf_addr);
-+ #endif
-+ 
-+      buf_addr = force_reg (Pmode, buf_addr);
-+ 
-+      if (target == 0 || GET_CODE (target) != REG
-+          || REGNO (target) < FIRST_PSEUDO_REGISTER)
-+        target = gen_reg_rtx (value_mode);
-+ 
-+      emit_queue ();
-+ 
-+      CONST_CALL_P (emit_note (NULL_PTR, NOTE_INSN_SETJMP)) = 1;
-+      current_function_calls_setjmp = 1;
-+ 
-+      /* We store the frame pointer and the address of lab1 in the buffer
-+         and use the rest of it for the stack save area, which is
-+         machine-dependent.  */
-+      emit_move_insn (gen_rtx (MEM, Pmode, buf_addr),
-+                      virtual_stack_vars_rtx);
-+      emit_move_insn
-+        (validize_mem (gen_rtx (MEM, Pmode,
-+                                plus_constant (buf_addr,
-+                                               GET_MODE_SIZE (Pmode)))),
-+         gen_rtx (LABEL_REF, Pmode, lab1));
-+ 
-+ #ifdef HAVE_save_stack_nonlocal
-+      if (HAVE_save_stack_nonlocal)
-+        sa_mode = insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0];
-+ #endif
-+ 
-+      current_function_has_nonlocal_goto = 1;
-+ 
-+      stack_save = gen_rtx (MEM, sa_mode,
-+                            plus_constant (buf_addr,
-+                                           2 * GET_MODE_SIZE (Pmode)));
-+      emit_stack_save (SAVE_NONLOCAL, &stack_save, NULL_RTX);
-+ 
-+ #ifdef HAVE_setjmp
-+      if (HAVE_setjmp)
-+        emit_insn (gen_setjmp ());
-+ #endif
-+ 
-+      /* Set TARGET to zero and branch around the other case.  */
-+      emit_move_insn (target, const0_rtx);
-+      emit_jump_insn (gen_jump (lab2));
-+      emit_barrier ();
-+      emit_label (lab1);
-+ 
-+      /* Note that setjmp clobbers FP when we get here, so we have to
-+         make sure it's marked as used by this function. */
-+      emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+ 
-+      /* Mark the static chain as clobbered here so life information
-+         doesn't get messed up for it.  */
-+      emit_insn (gen_rtx (CLOBBER, VOIDmode, static_chain_rtx));
-+ 
-+      /* Now put in the code to restore the frame pointer, and argument
-+         pointer, if needed.  The code below is from expand_end_bindings
-+         in stmt.c; see detailed documentation there.  */
-+ #ifdef HAVE_nonlocal_goto
-+      if (! HAVE_nonlocal_goto)
-+ #endif
-+        emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
-+ 
-+ #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
-+      if (fixed_regs[ARG_POINTER_REGNUM])
-+        {
-+ #ifdef ELIMINABLE_REGS
-+          static struct elims {int from, to;} elim_regs[] = ELIMINABLE_REGS;
-+ 
-+          for (i = 0; i < sizeof elim_regs / sizeof elim_regs[0]; i++)
-+            if (elim_regs[i].from == ARG_POINTER_REGNUM
-+                && elim_regs[i].to == HARD_FRAME_POINTER_REGNUM)
-+              break;
-+ 
-+          if (i == sizeof elim_regs / sizeof elim_regs [0])
-+ #endif
-+            {
-+              /* Now restore our arg pointer from the address at which it
-+                 was saved in our stack frame.
-+                 If there hasn't be space allocated for it yet, make
-+                 some now.  */
-+              if (arg_pointer_save_area == 0)
-+                arg_pointer_save_area
-+                  = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
-+              emit_move_insn (virtual_incoming_args_rtx,
-+                              copy_to_reg (arg_pointer_save_area));
-+            }
-+        }
-+ #endif
-+ 
-+ #ifdef HAVE_nonlocal_goto_receiver
-+      if (HAVE_nonlocal_goto_receiver)
-+        emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+      /* The static chain pointer contains the address of dummy function.
-+         We need to call it here to handle some PIC cases of restoring
-+         a global pointer.  Then return 1.  */
-+      op0 = copy_to_mode_reg (Pmode, static_chain_rtx);
-+ 
-+      /* We can't actually call emit_library_call here, so do everything
-+         it does, which isn't much for a libfunc with no args.  */
-+      op0 = memory_address (FUNCTION_MODE, op0);
-+ 
-+      INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE,
-+                            gen_rtx (SYMBOL_REF, Pmode, "__dummy"));
-+      next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1);
-+ 
-+ #ifndef ACCUMULATE_OUTGOING_ARGS
-+ #ifdef HAVE_call_pop
-+      if (HAVE_call_pop)
-+        emit_call_insn (gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, op0),
-+                                      const0_rtx, next_arg_reg,
-+                                      GEN_INT (return_pops)));
-+      else
-+ #endif
-+ #endif
-+ 
-+ #ifdef HAVE_call
-+      if (HAVE_call)
-+        emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, op0),
-+                                  const0_rtx, next_arg_reg, const0_rtx));
-+      else
-+ #endif
-+          abort ();
-+ 
-+      emit_move_insn (target, const1_rtx);
-+      emit_label (lab2);
-+      return target;
-+       }
-+ 
-+       /* __builtin_longjmp is passed a pointer to an array of five words
-+       and a value, which is a dummy.  It's similar to the C library longjmp
-+       function but works with __builtin_setjmp above.  */
-+     case BUILT_IN_LONGJMP:
-+       if (arglist == 0 || TREE_CHAIN (arglist) == 0
-+        || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
-+      break;
-+ 
-+       {
-+      tree dummy_id = get_identifier ("__dummy");
-+      tree dummy_type = build_function_type (void_type_node, NULL_TREE);
-+      tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type); 
-+ #ifdef POINTERS_EXTEND_UNSIGNED
-+      rtx buf_addr
-+        = force_reg (Pmode,
-+                     convert_memory_address
-+                     (Pmode,
-+                      expand_expr (TREE_VALUE (arglist),
-+                                   NULL_RTX, VOIDmode, 0)));
-+ #else
-+      rtx buf_addr
-+        = force_reg (Pmode, expand_expr (TREE_VALUE (arglist),
-+                                         NULL_RTX,
-+                                         VOIDmode, 0));
-+ #endif
-+      rtx fp = gen_rtx (MEM, Pmode, buf_addr);
-+      rtx lab = gen_rtx (MEM, Pmode,
-+                         plus_constant (buf_addr, GET_MODE_SIZE (Pmode)));
-+      enum machine_mode sa_mode
-+ #ifdef HAVE_save_stack_nonlocal
-+        = (HAVE_save_stack_nonlocal
-+           ? insn_operand_mode[(int) CODE_FOR_save_stack_nonlocal][0]
-+           : Pmode);
-+ #else
-+      = Pmode;
-+ #endif
-+      rtx stack = gen_rtx (MEM, sa_mode,
-+                           plus_constant (buf_addr,
-+                                          2 * GET_MODE_SIZE (Pmode)));
-+ 
-+      DECL_EXTERNAL (dummy_decl) = 1;
-+      TREE_PUBLIC (dummy_decl) = 1;
-+      make_decl_rtl (dummy_decl, NULL_PTR, 1);
-+ 
-+      /* Expand the second expression just for side-effects.  */
-+      expand_expr (TREE_VALUE (TREE_CHAIN (arglist)),
-+                   const0_rtx, VOIDmode, 0);
-+ 
-+      assemble_external (dummy_decl);
-+ 
-+      /* Pick up FP, label, and SP from the block and jump.  This code is
-+         from expand_goto in stmt.c; see there for detailed comments.  */
-+ #if HAVE_nonlocal_goto
-+      if (HAVE_nonlocal_goto)
-+        emit_insn (gen_nonlocal_goto (fp, lab, stack,
-+                                      XEXP (DECL_RTL (dummy_decl), 0)));
-+       else
-+ #endif
-+      {
-+        lab = copy_to_reg (lab);
-+        emit_move_insn (hard_frame_pointer_rtx, fp);
-+        emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
-+ 
-+        /* Put in the static chain register the address of the dummy
-+           function.  */
-+        emit_move_insn (static_chain_rtx, XEXP (DECL_RTL (dummy_decl), 0));
-+        emit_insn (gen_rtx (USE, VOIDmode, hard_frame_pointer_rtx));
-+        emit_insn (gen_rtx (USE, VOIDmode, stack_pointer_rtx));
-+        emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
-+        emit_indirect_jump (lab);
-+      }
-+ 
-+      return const0_rtx;
-+       }
-+ 
-      default:                 /* just do library call, if unknown builtin */
-        error ("built-in function `%s' not currently supported",
-*************** preexpand_calls (exp)
-*** 8688,8701 ****
-      case CALL_EXPR:
-        /* Do nothing if already expanded.  */
-!       if (CALL_EXPR_RTL (exp) != 0)
-       return;
-  
-!       /* Do nothing to built-in functions.  */
-!       if (TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
-!        || TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) != FUNCTION_DECL
-!        || ! DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-!        /* Do nothing if the call returns a variable-sized object.  */
-!        || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST)
-!      CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
-        return;
-  
---- 8994,9008 ----
-      case CALL_EXPR:
-        /* Do nothing if already expanded.  */
-!       if (CALL_EXPR_RTL (exp) != 0
-!        /* Do nothing if the call returns a variable-sized object.  */
-!        || TREE_CODE (TYPE_SIZE (TREE_TYPE(exp))) != INTEGER_CST
-!        /* Do nothing to built-in functions.  */
-!        || (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
-!            && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
-!                == FUNCTION_DECL)
-!            && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))))
-       return;
-  
-!       CALL_EXPR_RTL (exp) = expand_call (exp, NULL_RTX, 0);
-        return;
-  
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9087,9090 ****
---- 9394,9398 ----
-        push_temp_slots ();
-        expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
-+       preserve_temp_slots (NULL_RTX);
-        free_temp_slots ();
-        pop_temp_slots ();
-*************** do_jump (exp, if_false_label, if_true_la
-*** 9103,9111 ****
-       tree offset;
-       int volatilep = 0;
-  
-       /* Get description of this reference.  We don't actually care
-          about the underlying object here.  */
-       get_inner_reference (exp, &bitsize, &bitpos, &offset,
-!                           &mode, &unsignedp, &volatilep);
-  
-       type = type_for_size (bitsize, unsignedp);
---- 9411,9421 ----
-       tree offset;
-       int volatilep = 0;
-+      int alignment;
-  
-       /* Get description of this reference.  We don't actually care
-          about the underlying object here.  */
-       get_inner_reference (exp, &bitsize, &bitpos, &offset,
-!                           &mode, &unsignedp, &volatilep,
-!                           &alignment);
-  
-       type = type_for_size (bitsize, unsignedp);
-diff -rcp2N gcc-2.7.2.3/expr.h gcc-2.7.2.3.f.1/expr.h
-*** gcc-2.7.2.3/expr.h Fri Oct 27 10:16:56 1995
---- gcc-2.7.2.3.f.1/expr.h     Fri Aug 29 07:52:02 1997
-*************** enum direction {none, upward, downward};
-*** 229,232 ****
---- 229,272 ----
-  #define RETURN_IN_MEMORY(TYPE) (TYPE_MODE (TYPE) == BLKmode)
-  #endif
-+ 
-+ /* Provide default values for the macros controlling stack checking.  */
-+ 
-+ #ifndef STACK_CHECK_BUILTIN
-+ #define STACK_CHECK_BUILTIN 0
-+ #endif
-+ 
-+ /* The default interval is one page.  */
-+ #ifndef STACK_CHECK_PROBE_INTERVAL
-+ #define STACK_CHECK_PROBE_INTERVAL 4096
-+ #endif
-+ 
-+ /* The default is to do a store into the stack.  */
-+ #ifndef STACK_CHECK_PROBE_LOAD
-+ #define STACK_CHECK_PROBE_LOAD 0
-+ #endif
-+ 
-+ /* This value is arbitrary, but should be sufficient for most machines.  */
-+ #ifndef STACK_CHECK_PROTECT
-+ #define STACK_CHECK_PROTECT (75 * UNITS_PER_WORD)
-+ #endif
-+ 
-+ /* Make the maximum frame size be the largest we can and still only need
-+    one probe per function.  */
-+ #ifndef STACK_CHECK_MAX_FRAME_SIZE
-+ #define STACK_CHECK_MAX_FRAME_SIZE \
-+   (STACK_CHECK_PROBE_INTERVAL - UNITS_PER_WORD)
-+ #endif
-+ 
-+ /* This is arbitrary, but should be large enough everywhere.  */
-+ #ifndef STACK_CHECK_FIXED_FRAME_SIZE
-+ #define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD)
-+ #endif
-+ 
-+ /* Provide a reasonable default for the maximum size of an object to
-+    allocate in the fixed frame.  We may need to be able to make this
-+    controllable by the user at some point.  */
-+ #ifndef STACK_CHECK_MAX_VAR_SIZE
-+ #define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100)
-+ #endif
-  \f
-  /* Optabs are tables saying how to generate insn bodies
-*************** extern void emit_stack_restore PROTO((en
-*** 828,831 ****
---- 868,878 ----
-     says how many bytes.  */
-  extern rtx allocate_dynamic_stack_space PROTO((rtx, rtx, int));
-+ 
-+ /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive. 
-+    FIRST is a constant and size is a Pmode RTX.  These are offsets from the
-+    current stack pointer.  STACK_GROWS_DOWNWARD says whether to add or
-+    subtract from the stack.  If SIZE is constant, this is done
-+    with a fixed number of probes.  Otherwise, we must make a loop.  */
-+ extern void probe_stack_range PROTO((HOST_WIDE_INT, rtx));
-  
-  /* Emit code to copy function value to a new temp reg and return that reg.  */
-diff -rcp2N gcc-2.7.2.3/final.c gcc-2.7.2.3.f.1/final.c
-*** gcc-2.7.2.3/final.c        Sun Nov 26 18:50:00 1995
---- gcc-2.7.2.3.f.1/final.c    Fri Jul 11 00:11:16 1997
-*************** profile_function (file)
-*** 983,991 ****
-    text_section ();
-  
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #ifdef STRUCT_VALUE_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
---- 983,991 ----
-    text_section ();
-  
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_PUSH (file, STRUCT_VALUE_REGNUM);
-*************** profile_function (file)
-*** 993,1027 ****
-  #endif
-  
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #ifdef STATIC_CHAIN_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-- #endif                               /* 0 */
-  
-    FUNCTION_PROFILER (file, profile_label_no);
-  
-! #if 0
-! #ifdef STATIC_CHAIN_INCOMING_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #ifdef STATIC_CHAIN_REGNUM
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-- #endif                               /* 0 */
-  
-! #ifdef STRUCT_VALUE_INCOMING_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #ifdef STRUCT_VALUE_REGNUM
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
---- 993,1023 ----
-  #endif
-  
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_PUSH (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-  
-    FUNCTION_PROFILER (file, profile_label_no);
-  
-! #if defined(STATIC_CHAIN_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_INCOMING_REGNUM);
-  #else
-! #if defined(STATIC_CHAIN_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (cxt)
-      ASM_OUTPUT_REG_POP (file, STATIC_CHAIN_REGNUM);
-  #endif
-  #endif
-  
-! #if defined(STRUCT_VALUE_INCOMING_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_INCOMING_REGNUM);
-  #else
-! #if defined(STRUCT_VALUE_REGNUM) && defined(ASM_OUTPUT_REG_PUSH)
-    if (sval)
-      ASM_OUTPUT_REG_POP (file, STRUCT_VALUE_REGNUM);
-diff -rcp2N gcc-2.7.2.3/flags.h gcc-2.7.2.3.f.1/flags.h
-*** gcc-2.7.2.3/flags.h        Thu Jun 15 11:34:11 1995
---- gcc-2.7.2.3.f.1/flags.h    Fri Aug 29 08:40:01 1997
-*************** extern int flag_unroll_loops;
-*** 204,207 ****
---- 204,221 ----
-  extern int flag_unroll_all_loops;
-  
-+ /* Nonzero forces all invariant computations in loops to be moved
-+    outside the loop. */
-+ 
-+ extern int flag_move_all_movables;
-+ 
-+ /* Nonzero forces all general induction variables in loops to be
-+    strength reduced. */
-+ 
-+ extern int flag_reduce_all_givs;
-+ 
-+ /* Nonzero gets another run of loop_optimize performed. */
-+ 
-+ extern int flag_rerun_loop_opt;
-+ 
-  /* Nonzero for -fcse-follow-jumps:
-     have cse follow jumps to do a more extensive job.  */
-*************** extern int flag_gnu_linker;
-*** 339,342 ****
---- 353,373 ----
-  /* Tag all structures with __attribute__(packed) */
-  extern int flag_pack_struct;
-+ 
-+ /* Emit code to check for stack overflow; also may cause large objects
-+    to be allocated dynamically.  */
-+ extern int flag_stack_check;
-+ 
-+ /* 1 if alias checking is enabled: symbols do not alias each other
-+    and parameters do not alias the current stack frame.  */
-+ extern int flag_alias_check;
-+ 
-+ /* This flag is only tested if alias checking is enabled.
-+    0 if pointer arguments may alias each other.  True in C.
-+    1 if pointer arguments may not alias each other but may alias
-+    global variables.
-+    2 if pointer arguments may not alias each other and may not
-+    alias global variables.  True in Fortran.
-+    The value is ignored if flag_alias_check is 0.  */
-+ extern int flag_argument_noalias;
-  \f
-  /* Other basic status info about current function.  */
-diff -rcp2N gcc-2.7.2.3/flow.c gcc-2.7.2.3.f.1/flow.c
-*** gcc-2.7.2.3/flow.c Mon Aug 28 10:23:34 1995
---- gcc-2.7.2.3.f.1/flow.c     Wed Aug 27 11:46:36 1997
-*************** static HARD_REG_SET elim_reg_set;
-*** 288,292 ****
-  /* Forward declarations */
-  static void find_basic_blocks                PROTO((rtx, rtx));
-! static int uses_reg_or_mem           PROTO((rtx));
-  static void mark_label_ref           PROTO((rtx, rtx, int));
-  static void life_analysis            PROTO((rtx, int));
---- 288,292 ----
-  /* Forward declarations */
-  static void find_basic_blocks                PROTO((rtx, rtx));
-! static int jmp_uses_reg_or_mem               PROTO((rtx));
-  static void mark_label_ref           PROTO((rtx, rtx, int));
-  static void life_analysis            PROTO((rtx, int));
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 554,563 ****
-                   if (GET_CODE (XVECEXP (pat, 0, i)) == SET
-                       && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-!                      && uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
-                     computed_jump = 1;
-             }
-           else if (GET_CODE (pat) == SET
-                    && SET_DEST (pat) == pc_rtx
-!                   && uses_reg_or_mem (SET_SRC (pat)))
-             computed_jump = 1;
-                   
---- 554,563 ----
-                   if (GET_CODE (XVECEXP (pat, 0, i)) == SET
-                       && SET_DEST (XVECEXP (pat, 0, i)) == pc_rtx
-!                      && jmp_uses_reg_or_mem (SET_SRC (XVECEXP (pat, 0, i))))
-                     computed_jump = 1;
-             }
-           else if (GET_CODE (pat) == SET
-                    && SET_DEST (pat) == pc_rtx
-!                   && jmp_uses_reg_or_mem (SET_SRC (pat)))
-             computed_jump = 1;
-                   
-*************** find_basic_blocks (f, nonlocal_label_lis
-*** 760,767 ****
-  /* Subroutines of find_basic_blocks.  */
-  
-! /* Return 1 if X contain a REG or MEM that is not in the constant pool.  */
-  
-  static int
-! uses_reg_or_mem (x)
-       rtx x;
-  {
---- 760,768 ----
-  /* Subroutines of find_basic_blocks.  */
-  
-! /* Return 1 if X, the SRC_SRC of  SET of (pc) contain a REG or MEM that is
-!    not in the constant pool and not in the condition of an IF_THEN_ELSE.  */
-  
-  static int
-! jmp_uses_reg_or_mem (x)
-       rtx x;
-  {
-*************** uses_reg_or_mem (x)
-*** 770,778 ****
-    char *fmt;
-  
-!   if (code == REG
-!       || (code == MEM
-!        && ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-!              && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))))
-!     return 1;
-  
-    fmt = GET_RTX_FORMAT (code);
---- 771,796 ----
-    char *fmt;
-  
-!   switch (code)
-!     {
-!     case CONST:
-!     case LABEL_REF:
-!     case PC:
-!       return 0;
-! 
-!     case REG:
-!       return 1;
-! 
-!     case MEM:
-!       return ! (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
-!              && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)));
-! 
-!     case IF_THEN_ELSE:
-!       return (jmp_uses_reg_or_mem (XEXP (x, 1))
-!            || jmp_uses_reg_or_mem (XEXP (x, 2)));
-! 
-!     case PLUS:  case MINUS:  case MULT:
-!       return (jmp_uses_reg_or_mem (XEXP (x, 0))
-!            || jmp_uses_reg_or_mem (XEXP (x, 1)));
-!     }
-  
-    fmt = GET_RTX_FORMAT (code);
-*************** uses_reg_or_mem (x)
-*** 780,789 ****
-      {
-        if (fmt[i] == 'e'
-!        && uses_reg_or_mem (XEXP (x, i)))
-       return 1;
-  
-        if (fmt[i] == 'E')
-       for (j = 0; j < XVECLEN (x, i); j++)
-!        if (uses_reg_or_mem (XVECEXP (x, i, j)))
-           return 1;
-      }
---- 798,807 ----
-      {
-        if (fmt[i] == 'e'
-!        && jmp_uses_reg_or_mem (XEXP (x, i)))
-       return 1;
-  
-        if (fmt[i] == 'E')
-       for (j = 0; j < XVECLEN (x, i); j++)
-!        if (jmp_uses_reg_or_mem (XVECEXP (x, i, j)))
-           return 1;
-      }
-*************** propagate_block (old, first, last, final
-*** 1605,1614 ****
-  
-                 /* Each call clobbers all call-clobbered regs that are not
-!                   global.  Note that the function-value reg is a
-                    call-clobbered reg, and mark_set_regs has already had
-                    a chance to handle it.  */
-  
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] && ! global_regs[i])
-                     dead[i / REGSET_ELT_BITS]
-                       |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
---- 1623,1633 ----
-  
-                 /* Each call clobbers all call-clobbered regs that are not
-!                   global or fixed.  Note that the function-value reg is a
-                    call-clobbered reg, and mark_set_regs has already had
-                    a chance to handle it.  */
-  
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] && ! global_regs[i]
-!                      && ! fixed_regs[i])
-                     dead[i / REGSET_ELT_BITS]
-                       |= ((REGSET_ELT_TYPE) 1 << (i % REGSET_ELT_BITS));
-diff -rcp2N gcc-2.7.2.3/fold-const.c gcc-2.7.2.3.f.1/fold-const.c
-*** gcc-2.7.2.3/fold-const.c   Fri Sep 15 22:26:12 1995
---- gcc-2.7.2.3.f.1/fold-const.c       Fri Aug 29 07:52:10 1997
-*************** static tree unextend   PROTO((tree, int, i
-*** 80,83 ****
---- 80,84 ----
-  static tree fold_truthop PROTO((enum tree_code, tree, tree, tree));
-  static tree strip_compound_expr PROTO((tree, tree));
-+ static int multiple_of_p PROTO((tree, tree, tree));
-  
-  #ifndef BRANCH_COST
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1077,1080 ****
---- 1078,1083 ----
-         if (int2h == 0 && int2l > 0
-             && TREE_TYPE (arg1) == sizetype
-+            && ! TREE_CONSTANT_OVERFLOW (arg1)
-+            && ! TREE_CONSTANT_OVERFLOW (arg2)
-             && int1h == 0 && int1l >= 0)
-           {
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1230,1233 ****
---- 1233,1237 ----
-    if (TREE_CODE (arg1) == COMPLEX_CST)
-      {
-+       register tree type = TREE_TYPE (arg1);
-        register tree r1 = TREE_REALPART (arg1);
-        register tree i1 = TREE_IMAGPART (arg1);
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1239,1253 ****
-       {
-       case PLUS_EXPR:
-!        t = build_complex (const_binop (PLUS_EXPR, r1, r2, notrunc),
-                            const_binop (PLUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MINUS_EXPR:
-!        t = build_complex (const_binop (MINUS_EXPR, r1, r2, notrunc),
-                            const_binop (MINUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MULT_EXPR:
-!        t = build_complex (const_binop (MINUS_EXPR,
-                                         const_binop (MULT_EXPR,
-                                                      r1, r2, notrunc),
---- 1243,1260 ----
-       {
-       case PLUS_EXPR:
-!        t = build_complex (type,
-!                           const_binop (PLUS_EXPR, r1, r2, notrunc),
-                            const_binop (PLUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MINUS_EXPR:
-!        t = build_complex (type,
-!                           const_binop (MINUS_EXPR, r1, r2, notrunc),
-                            const_binop (MINUS_EXPR, i1, i2, notrunc));
-         break;
-  
-       case MULT_EXPR:
-!        t = build_complex (type,
-!                           const_binop (MINUS_EXPR,
-                                         const_binop (MULT_EXPR,
-                                                      r1, r2, notrunc),
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1271,1293 ****
-                            notrunc);
-  
-!          t = build_complex
-!            (const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                          ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                          const_binop (PLUS_EXPR,
-!                                       const_binop (MULT_EXPR, r1, r2,
-!                                                    notrunc),
-!                                       const_binop (MULT_EXPR, i1, i2,
-!                                                    notrunc),
-!                                       notrunc),
-!                          magsquared, notrunc),
-!             const_binop (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                          ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                          const_binop (MINUS_EXPR,
-!                                       const_binop (MULT_EXPR, i1, r2,
-!                                                    notrunc),
-!                                       const_binop (MULT_EXPR, r1, i2,
-!                                                    notrunc),
-!                                       notrunc),
-!                          magsquared, notrunc));
-         }
-         break;
---- 1278,1302 ----
-                            notrunc);
-  
-!          t = build_complex (type,
-!                             const_binop
-!                             (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                              ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                              const_binop (PLUS_EXPR,
-!                                           const_binop (MULT_EXPR, r1, r2,
-!                                                        notrunc),
-!                                           const_binop (MULT_EXPR, i1, i2,
-!                                                        notrunc),
-!                                           notrunc),
-!                              magsquared, notrunc),
-!                             const_binop
-!                             (INTEGRAL_TYPE_P (TREE_TYPE (r1))
-!                              ? TRUNC_DIV_EXPR : RDIV_EXPR,
-!                              const_binop (MINUS_EXPR,
-!                                           const_binop (MULT_EXPR, i1, r2,
-!                                                        notrunc),
-!                                           const_binop (MULT_EXPR, r1, i2,
-!                                                        notrunc),
-!                                           notrunc),
-!                              magsquared, notrunc));
-         }
-         break;
-*************** const_binop (code, arg1, arg2, notrunc)
-*** 1296,1300 ****
-         abort ();
-       }
--       TREE_TYPE (t) = TREE_TYPE (arg1);
-        return t;
-      }
---- 1305,1308 ----
-*************** size_binop (code, arg0, arg1)
-*** 1346,1363 ****
-      {
-        /* And some specific cases even faster than that.  */
-!       if (code == PLUS_EXPR
-!        && TREE_INT_CST_LOW (arg0) == 0
-!        && TREE_INT_CST_HIGH (arg0) == 0)
-       return arg1;
-!       if (code == MINUS_EXPR
-!        && TREE_INT_CST_LOW (arg1) == 0
-!        && TREE_INT_CST_HIGH (arg1) == 0)
-       return arg0;
-!       if (code == MULT_EXPR
-!        && TREE_INT_CST_LOW (arg0) == 1
-!        && TREE_INT_CST_HIGH (arg0) == 0)
-       return arg1;
-        /* Handle general case of two integer constants.  */
-!       return const_binop (code, arg0, arg1, 0);
-      }
-  
---- 1354,1367 ----
-      {
-        /* And some specific cases even faster than that.  */
-!       if (code == PLUS_EXPR && integer_zerop (arg0))
-       return arg1;
-!       else if ((code == MINUS_EXPR || code == PLUS_EXPR)
-!             && integer_zerop (arg1))
-       return arg0;
-!       else if (code == MULT_EXPR && integer_onep (arg0))
-       return arg1;
-+ 
-        /* Handle general case of two integer constants.  */
-!       return const_binop (code, arg0, arg1, 1);
-      }
-  
-*************** fold_convert (t, arg1)
-*** 1482,1486 ****
-       {
-         if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-!          return arg1;
-         else if (setjmp (float_error))
-           {
---- 1486,1494 ----
-       {
-         if (REAL_VALUE_ISNAN (TREE_REAL_CST (arg1)))
-!          {
-!            t = arg1;
-!            TREE_TYPE (arg1) = type;
-!            return t;
-!          }
-         else if (setjmp (float_error))
-           {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1644,1687 ****
-    STRIP_NOPS (arg1);
-  
-!   /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-!      We don't care about side effects in that case because the SAVE_EXPR
-!      takes care of that for us.  */
-!   if (TREE_CODE (arg0) == SAVE_EXPR && arg0 == arg1)
-!     return ! only_const;
-! 
-!   if (TREE_SIDE_EFFECTS (arg0) || TREE_SIDE_EFFECTS (arg1))
-      return 0;
-  
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == ADDR_EXPR
-!       && TREE_OPERAND (arg0, 0) == TREE_OPERAND (arg1, 0))
-!     return 1;
-! 
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == INTEGER_CST
-!       && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-!       && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1))
-      return 1;
-  
-!   /* Detect when real constants are equal.  */
-!   if (TREE_CODE (arg0) == TREE_CODE (arg1)
-!       && TREE_CODE (arg0) == REAL_CST)
-!     return !bcmp ((char *) &TREE_REAL_CST (arg0),
-!                (char *) &TREE_REAL_CST (arg1),
-!                sizeof (REAL_VALUE_TYPE));
-  
-    if (only_const)
-      return 0;
-  
--   if (arg0 == arg1)
--     return 1;
-- 
--   if (TREE_CODE (arg0) != TREE_CODE (arg1))
--     return 0;
--   /* This is needed for conversions and for COMPONENT_REF.
--      Might as well play it safe and always test this.  */
--   if (TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
--     return 0;
-- 
-    switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
-      {
---- 1652,1710 ----
-    STRIP_NOPS (arg1);
-  
-!   if (TREE_CODE (arg0) != TREE_CODE (arg1)
-!       /* This is needed for conversions and for COMPONENT_REF.
-!       Might as well play it safe and always test this.  */
-!       || TYPE_MODE (TREE_TYPE (arg0)) != TYPE_MODE (TREE_TYPE (arg1)))
-      return 0;
-  
-!   /* If ARG0 and ARG1 are the same SAVE_EXPR, they are necessarily equal.
-!      We don't care about side effects in that case because the SAVE_EXPR
-!      takes care of that for us. In all other cases, two expressions are
-!      equal if they have no side effects.  If we have two identical
-!      expressions with side effects that should be treated the same due
-!      to the only side effects being identical SAVE_EXPR's, that will
-!      be detected in the recursive calls below.  */
-!   if (arg0 == arg1 && ! only_const
-!       && (TREE_CODE (arg0) == SAVE_EXPR
-!        || (! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg1))))
-      return 1;
-  
-!   /* Next handle constant cases, those for which we can return 1 even
-!      if ONLY_CONST is set.  */
-!   if (TREE_CONSTANT (arg0) && TREE_CONSTANT (arg1))
-!     switch (TREE_CODE (arg0))
-!       {
-!       case INTEGER_CST:
-!      return (! TREE_CONSTANT_OVERFLOW (arg0)
-!              && ! TREE_CONSTANT_OVERFLOW (arg1)
-!              && TREE_INT_CST_LOW (arg0) == TREE_INT_CST_LOW (arg1)
-!              && TREE_INT_CST_HIGH (arg0) == TREE_INT_CST_HIGH (arg1));
-! 
-!       case REAL_CST:
-!      return (! TREE_CONSTANT_OVERFLOW (arg0)
-!              && ! TREE_CONSTANT_OVERFLOW (arg1)
-!              && REAL_VALUES_EQUAL (TREE_REAL_CST (arg0),
-!                                    TREE_REAL_CST (arg1)));
-! 
-!       case COMPLEX_CST:
-!      return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1),
-!                               only_const)
-!              && operand_equal_p (TREE_IMAGPART (arg0), TREE_IMAGPART (arg1),
-!                                  only_const));
-! 
-!       case STRING_CST:
-!      return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1)
-!              && ! strncmp (TREE_STRING_POINTER (arg0),
-!                            TREE_STRING_POINTER (arg1),
-!                            TREE_STRING_LENGTH (arg0)));
-! 
-!       case ADDR_EXPR:
-!      return operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0),
-!                              0);
-!       }
-  
-    if (only_const)
-      return 0;
-  
-    switch (TREE_CODE_CLASS (TREE_CODE (arg0)))
-      {
-*************** operand_equal_p (arg0, arg1, only_const)
-*** 1698,1705 ****
-      case '<':
-      case '2':
-!       return (operand_equal_p (TREE_OPERAND (arg0, 0),
-!                             TREE_OPERAND (arg1, 0), 0)
-             && operand_equal_p (TREE_OPERAND (arg0, 1),
-!                                TREE_OPERAND (arg1, 1), 0));
-  
-      case 'r':
---- 1721,1740 ----
-      case '<':
-      case '2':
-!       if (operand_equal_p (TREE_OPERAND (arg0, 0), TREE_OPERAND (arg1, 0), 0)
-!        && operand_equal_p (TREE_OPERAND (arg0, 1), TREE_OPERAND (arg1, 1),
-!                            0))
-!      return 1;
-! 
-!       /* For commutative ops, allow the other order.  */
-!       return ((TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MULT_EXPR
-!             || TREE_CODE (arg0) == MIN_EXPR || TREE_CODE (arg0) == MAX_EXPR
-!             || TREE_CODE (arg0) == BIT_IOR_EXPR
-!             || TREE_CODE (arg0) == BIT_XOR_EXPR
-!             || TREE_CODE (arg0) == BIT_AND_EXPR
-!             || TREE_CODE (arg0) == NE_EXPR || TREE_CODE (arg0) == EQ_EXPR)
-!            && operand_equal_p (TREE_OPERAND (arg0, 0),
-!                                TREE_OPERAND (arg1, 1), 0)
-             && operand_equal_p (TREE_OPERAND (arg0, 1),
-!                                TREE_OPERAND (arg1, 0), 0));
-  
-      case 'r':
-*************** optimize_bit_field_compare (code, compar
-*** 2212,2215 ****
---- 2247,2251 ----
-    int lunsignedp, runsignedp;
-    int lvolatilep = 0, rvolatilep = 0;
-+   int alignment;
-    tree linner, rinner;
-    tree mask;
-*************** optimize_bit_field_compare (code, compar
-*** 2220,2224 ****
-       extraction at all and so can do nothing.  */
-    linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-!                              &lunsignedp, &lvolatilep);
-    if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
-        || offset != 0)
---- 2256,2260 ----
-       extraction at all and so can do nothing.  */
-    linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
-!                              &lunsignedp, &lvolatilep, &alignment);
-    if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
-        || offset != 0)
-*************** optimize_bit_field_compare (code, compar
-*** 2229,2234 ****
-       /* If this is not a constant, we can only do something if bit positions,
-       sizes, and signedness are the same.   */
-!      rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
-!                                 &rmode, &runsignedp, &rvolatilep);
-  
-       if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
---- 2265,2270 ----
-       /* If this is not a constant, we can only do something if bit positions,
-       sizes, and signedness are the same.   */
-!      rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
-!                                 &runsignedp, &rvolatilep, &alignment);
-  
-       if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
-*************** decode_field_reference (exp, pbitsize, p
-*** 2403,2406 ****
---- 2439,2443 ----
-    tree unsigned_type;
-    int precision;
-+   int alignment;
-  
-    /* All the optimizations using this function assume integer fields.  
-*************** decode_field_reference (exp, pbitsize, p
-*** 2423,2427 ****
-  
-    inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-!                             punsignedp, pvolatilep);
-    if ((inner == exp && and_mask == 0)
-        || *pbitsize < 0 || offset != 0)
---- 2460,2464 ----
-  
-    inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
-!                             punsignedp, pvolatilep, &alignment);
-    if ((inner == exp && and_mask == 0)
-        || *pbitsize < 0 || offset != 0)
-*************** fold_truthop (code, truth_type, lhs, rhs
-*** 2767,2770 ****
---- 2804,2810 ----
-           {
-             /* Avoid evaluating the variable part twice.  */
-+            if (current_function_decl == 0)
-+              return 0;
-+ 
-             ll_arg = save_expr (ll_arg);
-             lhs = build (lcode, TREE_TYPE (lhs), ll_arg, lr_arg);
-*************** strip_compound_expr (t, s)
-*** 3065,3068 ****
---- 3105,3208 ----
-  }
-  \f
-+ /* Determine if first argument is a multiple of second argument.
-+    Return 0 if it is not, or is not easily determined to so be.
-+ 
-+    An example of the sort of thing we care about (at this point --
-+    this routine could surely be made more general, and expanded
-+    to do what the *_DIV_EXPR's fold() cases do now) is discovering
-+    that
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+ 
-+    is a multiple of
-+ 
-+      SAVE_EXPR (J * 8)
-+ 
-+    when we know that the two `SAVE_EXPR (J * 8)' nodes are the
-+    same node (which means they will have the same value at run
-+    time, even though we don't know when they'll be assigned).
-+ 
-+    This code also handles discovering that
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J * 8)
-+ 
-+    is a multiple of
-+ 
-+      8
-+ 
-+    (of course) so we don't have to worry about dealing with a
-+    possible remainder.
-+ 
-+    Note that we _look_ inside a SAVE_EXPR only to determine
-+    how it was calculated; it is not safe for fold() to do much
-+    of anything else with the internals of a SAVE_EXPR, since
-+    fold() cannot know when it will be evaluated at run time.
-+    For example, the latter example above _cannot_ be implemented
-+    as
-+ 
-+      SAVE_EXPR (I) * J
-+ 
-+    or any variant thereof, since the value of J at evaluation time
-+    of the original SAVE_EXPR is not necessarily the same at the time
-+    the new expression is evaluated.  The only optimization of this
-+    sort that would be valid is changing
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (SAVE_EXPR (J) * 8)
-+    divided by
-+      8
-+ 
-+    to
-+ 
-+      SAVE_EXPR (I) * SAVE_EXPR (J)
-+ 
-+    (where the same SAVE_EXPR (J) is used in the original and the
-+    transformed version).  */
-+ 
-+ static int
-+ multiple_of_p (type, top, bottom)
-+      tree type;
-+      tree top;
-+      tree bottom;
-+ {
-+   if (operand_equal_p (top, bottom, 0))
-+     return 1;
-+ 
-+   if (TREE_CODE (type) != INTEGER_TYPE)
-+     return 0;
-+ 
-+   switch (TREE_CODE (top))
-+     {
-+     case MULT_EXPR:
-+       return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+            || multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+ 
-+     case PLUS_EXPR:
-+     case MINUS_EXPR:
-+       return (multiple_of_p (type, TREE_OPERAND (top, 0), bottom)
-+            && multiple_of_p (type, TREE_OPERAND (top, 1), bottom));
-+ 
-+     case NOP_EXPR:
-+       /* Punt if conversion from non-integral or wider integral type.  */
-+       if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (top, 0))) != INTEGER_TYPE)
-+        || (TYPE_PRECISION (type)
-+            < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (top, 0)))))
-+      return 0;
-+       /* Fall through. */
-+     case SAVE_EXPR:
-+       return multiple_of_p (type, TREE_OPERAND (top, 0), bottom);
-+ 
-+     case INTEGER_CST:
-+       if ((TREE_CODE (bottom) != INTEGER_CST)
-+        || (tree_int_cst_sgn (top) < 0)
-+        || (tree_int_cst_sgn (bottom) < 0))
-+      return 0;
-+       return integer_zerop (const_binop (TRUNC_MOD_EXPR,
-+                                       top, bottom, 0));
-+ 
-+     default:
-+       return 0;
-+     }
-+ }
-+ \f
-  /* Perform constant folding and related simplification of EXPR.
-     The related simplifications include x*1 => x, x*0 => 0, etc.,
-*************** fold (expr) 
-*** 3091,3096 ****
-    int wins = 1;
-  
-!   /* Don't try to process an RTL_EXPR since its operands aren't trees.  */
-!   if (code == RTL_EXPR)
-      return t;
-  
---- 3231,3237 ----
-    int wins = 1;
-  
-!   /* Don't try to process an RTL_EXPR since its operands aren't trees. 
-!      Likewise for a SAVE_EXPR that's already been evaluated.  */
-!   if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t)) != 0)
-      return t;
-  
-*************** fold (expr) 
-*** 3280,3285 ****
-                     fold (build (code, type,
-                                  arg0, TREE_OPERAND (arg1, 1))));
-!       else if (TREE_CODE (arg1) == COND_EXPR
-!             || TREE_CODE_CLASS (TREE_CODE (arg1)) == '<')
-       {
-         tree test, true_value, false_value;
---- 3421,3427 ----
-                     fold (build (code, type,
-                                  arg0, TREE_OPERAND (arg1, 1))));
-!       else if ((TREE_CODE (arg1) == COND_EXPR
-!              || TREE_CODE_CLASS (TREE_CODE (arg1)) == '<')
-!             && (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0))
-       {
-         tree test, true_value, false_value;
-*************** fold (expr) 
-*** 3319,3323 ****
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
-  
-!            arg0 = save_expr (arg0);
-           }
-  
---- 3461,3466 ----
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
-  
-!            if (current_function_decl != 0)
-!              arg0 = save_expr (arg0);
-           }
-  
-*************** fold (expr) 
-*** 3336,3341 ****
-       return build (COMPOUND_EXPR, type, TREE_OPERAND (arg0, 0),
-                     fold (build (code, type, TREE_OPERAND (arg0, 1), arg1)));
-!       else if (TREE_CODE (arg0) == COND_EXPR
-!             || TREE_CODE_CLASS (TREE_CODE (arg0)) == '<')
-       {
-         tree test, true_value, false_value;
---- 3479,3485 ----
-       return build (COMPOUND_EXPR, type, TREE_OPERAND (arg0, 0),
-                     fold (build (code, type, TREE_OPERAND (arg0, 1), arg1)));
-!       else if ((TREE_CODE (arg0) == COND_EXPR
-!              || TREE_CODE_CLASS (TREE_CODE (arg0)) == '<')
-!             && (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0))
-       {
-         tree test, true_value, false_value;
-*************** fold (expr) 
-*** 3367,3371 ****
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
-  
-!            arg1 = save_expr (arg1);
-           }
-  
---- 3511,3516 ----
-               return fold (build (COND_EXPR, type, test, lhs, rhs));
-  
-!            if (current_function_decl != 0)
-!              arg1 = save_expr (arg1);
-           }
-  
-*************** fold (expr) 
-*** 3611,3615 ****
-                                   TREE_OPERAND (arg0, 1))));
-        else if (TREE_CODE (arg0) == COMPLEX_CST)
-!      return build_complex (TREE_OPERAND (arg0, 0),
-                             fold (build1 (NEGATE_EXPR,
-                                           TREE_TYPE (TREE_TYPE (arg0)),
---- 3756,3760 ----
-                                   TREE_OPERAND (arg0, 1))));
-        else if (TREE_CODE (arg0) == COMPLEX_CST)
-!      return build_complex (type, TREE_OPERAND (arg0, 0),
-                             fold (build1 (NEGATE_EXPR,
-                                           TREE_TYPE (TREE_TYPE (arg0)),
-*************** fold (expr) 
-*** 3889,3893 ****
-           return non_lvalue (convert (type, arg0));
-         /* x*2 is x+x */
-!        if (! wins && real_twop (arg1))
-           {
-             tree arg = save_expr (arg0);
---- 4034,4038 ----
-           return non_lvalue (convert (type, arg0));
-         /* x*2 is x+x */
-!        if (! wins && real_twop (arg1) && current_function_decl != 0)
-           {
-             tree arg = save_expr (arg0);
-*************** fold (expr) 
-*** 4014,4018 ****
-       return non_lvalue (convert (type, arg0));
-        if (integer_zerop (arg1))
-!      return t;
-  
-        /* If we have ((a / C1) / C2) where both division are the same type, try
---- 4159,4179 ----
-       return non_lvalue (convert (type, arg0));
-        if (integer_zerop (arg1))
-!      {
-!        if (extra_warnings)
-!          warning ("integer division by zero");
-!        return t;
-!      }
-! 
-!       /* If arg0 is a multiple of arg1, then rewrite to the fastest div
-!       operation, EXACT_DIV_EXPR.  Otherwise, handle folding of
-!       general divide.  Note that only CEIL_DIV_EXPR is rewritten now,
-!       only because the others seem to be faster in some cases, e.g. the
-!       nonoptimized TRUNC_DIV_EXPR or FLOOR_DIV_EXPR on DEC Alpha.  This
-!       is probably just due to more work being done on it in expmed.c than
-!       on EXACT_DIV_EXPR, and could presumably be fixed, since
-!       EXACT_DIV_EXPR should _never_ be slower than *_DIV_EXPR.  */
-!       if ((code == CEIL_DIV_EXPR)
-!        && multiple_of_p (type, arg0, arg1))
-!      return fold (build (EXACT_DIV_EXPR, type, arg0, arg1));
-  
-        /* If we have ((a / C1) / C2) where both division are the same type, try
-*************** fold (expr) 
-*** 4049,4053 ****
-         tree xarg0 = arg0;
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
---- 4210,4214 ----
-         tree xarg0 = arg0;
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
-*************** fold (expr) 
-*** 4067,4071 ****
-           }
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
---- 4228,4232 ----
-           }
-  
-!        if (TREE_CODE (xarg0) == SAVE_EXPR && SAVE_EXPR_RTL (xarg0) == 0)
-           have_save_expr = 1, xarg0 = TREE_OPERAND (xarg0, 0);
-  
-*************** fold (expr) 
-*** 5050,5054 ****
-      case COMPLEX_EXPR:
-        if (wins)
-!      return build_complex (arg0, arg1);
-        return t;
-  
---- 5211,5215 ----
-      case COMPLEX_EXPR:
-        if (wins)
-!      return build_complex (type, arg0, arg1);
-        return t;
-  
-diff -rcp2N gcc-2.7.2.3/function.c gcc-2.7.2.3.f.1/function.c
-*** gcc-2.7.2.3/function.c     Sun Aug 31 09:39:47 1997
---- gcc-2.7.2.3.f.1/function.c Sun Aug 31 09:21:15 1997
-*************** assign_stack_temp (mode, size, keep)
-*** 917,920 ****
---- 917,925 ----
-        p->keep = keep;
-      }
-+ 
-+   /* We may be reusing an old slot, so clear any MEM flags that may have been
-+      set from before.  */
-+   RTX_UNCHANGING_P (p->slot) = 0;
-+   MEM_IN_STRUCT_P (p->slot) = 0;
-    return p->slot;
-  }
-*************** find_temp_slot_from_address (x)
-*** 994,999 ****
-        if (! p->in_use)
-       continue;
-!       else if (XEXP (p->slot, 0) == x
-!             || p->address == x)
-       return p;
-  
---- 999,1004 ----
-        if (! p->in_use)
-       continue;
-!       else if (rtx_equal_p (XEXP (p->slot, 0), x)
-!             || rtx_equal_p (p->address, x))
-       return p;
-  
-*************** free_temps_for_rtl_expr (t)
-*** 1184,1187 ****
---- 1189,1207 ----
-  }
-  
-+ /* Mark all temporaries ever allocated in this functon as not suitable
-+    for reuse until the current level is exited.  */
-+ 
-+ void
-+ mark_all_temps_used ()
-+ {
-+   struct temp_slot *p;
-+ 
-+   for (p = temp_slots; p; p = p->next)
-+     {
-+       p->in_use = p->keep = 1;
-+       p->level = MIN (p->level, temp_slot_level);
-+     }
-+ }
-+ 
-  /* Push deeper into the nesting level for stack temporaries.  */
-  
-*************** pop_temp_slots ()
-*** 1208,1211 ****
---- 1228,1242 ----
-    temp_slot_level--;
-  }
-+ 
-+ /* Initialize temporary slots.  */
-+ 
-+ void
-+ init_temp_slots ()
-+ {
-+   /* We have not allocated any temporaries yet.  */
-+   temp_slots = 0;
-+   temp_slot_level = 0;
-+   target_temp_slot_level = 0;
-+ }
-  \f
-  /* Retroactively move an auto variable from a register to a stack slot.
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2838,2842 ****
-      case MEM:
-        /* Most cases of MEM that convert to valid addresses have already been
-!       handled by our scan of regno_reg_rtx.  The only special handling we
-        need here is to make a copy of the rtx to ensure it isn't being
-        shared if we have to change it to a pseudo. 
---- 2869,2873 ----
-      case MEM:
-        /* Most cases of MEM that convert to valid addresses have already been
-!       handled by our scan of decls.  The only special handling we
-        need here is to make a copy of the rtx to ensure it isn't being
-        shared if we have to change it to a pseudo. 
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2896,2900 ****
-            has less restrictions on an address that some other insn.
-            In that case, we will modify the shared address.  This case
-!           doesn't seem very likely, though.  */
-  
-         if (instantiate_virtual_regs_1 (&XEXP (x, 0),
---- 2927,2933 ----
-            has less restrictions on an address that some other insn.
-            In that case, we will modify the shared address.  This case
-!           doesn't seem very likely, though.  One case where this could
-!           happen is in the case of a USE or CLOBBER reference, but we
-!           take care of that below.  */
-  
-         if (instantiate_virtual_regs_1 (&XEXP (x, 0),
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2909,2914 ****
-  
-        /* Fall through to generic unary operation case.  */
--     case USE:
--     case CLOBBER:
-      case SUBREG:
-      case STRICT_LOW_PART:
---- 2942,2945 ----
-*************** instantiate_virtual_regs_1 (loc, object,
-*** 2927,2930 ****
---- 2958,2978 ----
-        goto restart;
-  
-+     case USE:
-+     case CLOBBER:
-+       /* If the operand is a MEM, see if the change is a valid MEM.  If not,
-+       go ahead and make the invalid one, but do it to a copy.  For a REG,
-+       just make the recursive call, since there's no chance of a problem. */
-+ 
-+       if ((GET_CODE (XEXP (x, 0)) == MEM
-+         && instantiate_virtual_regs_1 (&XEXP (XEXP (x, 0), 0), XEXP (x, 0),
-+                                        0))
-+        || (GET_CODE (XEXP (x, 0)) == REG
-+            && instantiate_virtual_regs_1 (&XEXP (x, 0), object, 0)))
-+      return 1;
-+ 
-+       XEXP (x, 0) = copy_rtx (XEXP (x, 0));
-+       loc = &XEXP (x, 0);
-+       goto restart;
-+ 
-      case REG:
-        /* Try to replace with a PLUS.  If that doesn't work, compute the sum
-*************** assign_parms (fndecl, second_time)
-*** 3404,3409 ****
-  
-         /* If this is a memory ref that contains aggregate components,
-!           mark it as such for cse and loop optimize.  */
-         MEM_IN_STRUCT_P (stack_parm) = aggregate;
-       }
-  
---- 3452,3459 ----
-  
-         /* If this is a memory ref that contains aggregate components,
-!           mark it as such for cse and loop optimize.  Likewise if it
-!           is readonly.  */
-         MEM_IN_STRUCT_P (stack_parm) = aggregate;
-+        RTX_UNCHANGING_P (stack_parm) = TREE_READONLY (parm);
-       }
-  
-*************** assign_parms (fndecl, second_time)
-*** 3627,3631 ****
-  
-         parmreg = gen_reg_rtx (promoted_nominal_mode);
-!        REG_USERVAR_P (parmreg) = 1;
-  
-         /* If this was an item that we received a pointer to, set DECL_RTL
---- 3677,3681 ----
-  
-         parmreg = gen_reg_rtx (promoted_nominal_mode);
-!        mark_user_reg (parmreg);
-  
-         /* If this was an item that we received a pointer to, set DECL_RTL
-*************** assign_parms (fndecl, second_time)
-*** 3695,3699 ****
-                Pmode above.  We must use the actual mode of the parm.  */
-             parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-!            REG_USERVAR_P (parmreg) = 1;
-             emit_move_insn (parmreg, DECL_RTL (parm));
-             DECL_RTL (parm) = parmreg;
---- 3745,3749 ----
-                Pmode above.  We must use the actual mode of the parm.  */
-             parmreg = gen_reg_rtx (TYPE_MODE (TREE_TYPE (parm)));
-!            mark_user_reg (parmreg);
-             emit_move_insn (parmreg, DECL_RTL (parm));
-             DECL_RTL (parm) = parmreg;
-*************** init_function_start (subr, filename, lin
-*** 4814,4821 ****
-    rtl_expr_chain = 0;
-  
-!   /* We have not allocated any temporaries yet.  */
-!   temp_slots = 0;
-!   temp_slot_level = 0;
-!   target_temp_slot_level = 0;
-  
-    /* Within function body, compute a type's size as soon it is laid out.  */
---- 4864,4869 ----
-    rtl_expr_chain = 0;
-  
-!   /* Set up to allocate temporaries.  */
-!   init_temp_slots ();
-  
-    /* Within function body, compute a type's size as soon it is laid out.  */
-*************** expand_function_end (filename, line, end
-*** 5295,5298 ****
---- 5343,5366 ----
-        /* Put those insns at entry to the containing function (this one).  */
-        emit_insns_before (seq, tail_recursion_reentry);
-+     }
-+ 
-+   /* If we are doing stack checking and this function makes calls,
-+      do a stack probe at the start of the function to ensure we have enough
-+      space for another stack frame.  */
-+   if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+     {
-+       rtx insn, seq;
-+ 
-+       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-+      if (GET_CODE (insn) == CALL_INSN)
-+        {
-+          start_sequence ();
-+          probe_stack_range (STACK_CHECK_PROTECT,
-+                             GEN_INT (STACK_CHECK_MAX_FRAME_SIZE));
-+          seq = get_insns ();
-+          end_sequence ();
-+          emit_insns_before (seq, tail_recursion_reentry);
-+          break;
-+        }
-      }
-  
-diff -rcp2N gcc-2.7.2.3/gcc.c gcc-2.7.2.3.f.1/gcc.c
-*** gcc-2.7.2.3/gcc.c  Sun Aug 31 09:39:48 1997
---- gcc-2.7.2.3.f.1/gcc.c      Sun Aug 31 09:21:16 1997
-*************** static int is_directory                PROTO((char *, 
-*** 296,300 ****
-  static void validate_switches        PROTO((char *));
-  static void validate_all_switches PROTO((void));
-! static void give_switch              PROTO((int, int));
-  static int used_arg          PROTO((char *, int));
-  static int default_arg               PROTO((char *, int));
---- 296,300 ----
-  static void validate_switches        PROTO((char *));
-  static void validate_all_switches PROTO((void));
-! static void give_switch              PROTO((int, int, int));
-  static int used_arg          PROTO((char *, int));
-  static int default_arg               PROTO((char *, int));
-*************** or with constant text in a single argume
-*** 405,408 ****
---- 405,409 ----
-       name starts with `o'.  %{o*} would substitute this text,
-       including the space; thus, two arguments would be generated.
-+  %{^S*} likewise, but don't put a blank between a switch and any args.
-   %{S*:X} substitutes X if one or more switches whose names start with -S are
-       specified to CC.  Note that the tail part of the -S option
-*************** process_command (argc, argv)
-*** 2649,2655 ****
-                     else
-                       {
-!                        char *string = xmalloc (len + 1);
-                         strncpy (string, value, len-7);
-!                        strcat (string, "include");
-                         add_prefix (&include_prefixes, string, 1, 0, 0);
-                       }
---- 2650,2656 ----
-                     else
-                       {
-!                        char *string = xmalloc (len);
-                         strncpy (string, value, len-7);
-!                        strcpy (string+len-7, "include");
-                         add_prefix (&include_prefixes, string, 1, 0, 0);
-                       }
-*************** process_command (argc, argv)
-*** 2828,2831 ****
---- 2829,2835 ----
-         infiles[n_infiles++].name = argv[i];
-       }
-+       /* -save-temps overrides -pipe, so that temp files are produced */
-+       else if (save_temps_flag && strcmp (argv[i], "-pipe") == 0)
-+      ;
-        else if (argv[i][0] == '-' && argv[i][1] != 0)
-       {
-*************** handle_braces (p)
-*** 3832,3835 ****
---- 3836,3844 ----
-    int negate = 0;
-    int suffix = 0;
-+   int include_blanks = 1;
-+ 
-+   if (*p == '^')
-+     /* A '^' after the open-brace means to not give blanks before args.  */
-+     include_blanks = 0, ++p;
-  
-    if (*p == '|')
-*************** handle_braces (p)
-*** 3897,3901 ****
-       if (!strncmp (switches[i].part1, filter, p - filter)
-           && check_live_switch (i, p - filter))
-!        give_switch (i, 0);
-      }
-    else
---- 3906,3910 ----
-       if (!strncmp (switches[i].part1, filter, p - filter)
-           && check_live_switch (i, p - filter))
-!        give_switch (i, 0, include_blanks);
-      }
-    else
-*************** handle_braces (p)
-*** 3936,3940 ****
-                   do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
-                   /* Pass any arguments this switch has.  */
-!                  give_switch (i, 1);
-                 }
-  
---- 3945,3949 ----
-                   do_spec_1 (string, 0, &switches[i].part1[hard_match_len]);
-                   /* Pass any arguments this switch has.  */
-!                  give_switch (i, 1, 1);
-                 }
-  
-*************** handle_braces (p)
-*** 3980,3984 ****
-         if (*p == '}')
-           {
-!            give_switch (i, 0);
-           }
-         else
---- 3989,3993 ----
-         if (*p == '}')
-           {
-!            give_switch (i, 0, include_blanks);
-           }
-         else
-*************** check_live_switch (switchnum, prefix_len
-*** 4081,4090 ****
-     This cannot fail since it never finishes a command line.
-  
-!    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.  */
-  
-  static void
-! give_switch (switchnum, omit_first_word)
-       int switchnum;
-       int omit_first_word;
-  {
-    if (!omit_first_word)
---- 4090,4103 ----
-     This cannot fail since it never finishes a command line.
-  
-!    If OMIT_FIRST_WORD is nonzero, then we omit .part1 of the argument.
-! 
-!    If INCLUDE_BLANKS is nonzero, then we include blanks before each argument
-!    of the switch.  */
-  
-  static void
-! give_switch (switchnum, omit_first_word, include_blanks)
-       int switchnum;
-       int omit_first_word;
-+      int include_blanks;
-  {
-    if (!omit_first_word)
-*************** give_switch (switchnum, omit_first_word)
-*** 4093,4097 ****
-        do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
-      }
-!   do_spec_1 (" ", 0, NULL_PTR);
-    if (switches[switchnum].args != 0)
-      {
---- 4106,4110 ----
-        do_spec_1 (switches[switchnum].part1, 1, NULL_PTR);
-      }
-! 
-    if (switches[switchnum].args != 0)
-      {
-*************** give_switch (switchnum, omit_first_word)
-*** 4099,4106 ****
-        for (p = switches[switchnum].args; *p; p++)
-       {
-         do_spec_1 (*p, 1, NULL_PTR);
--        do_spec_1 (" ", 0, NULL_PTR);
-       }
-      }
-    switches[switchnum].valid = 1;
-  }
---- 4112,4122 ----
-        for (p = switches[switchnum].args; *p; p++)
-       {
-+        if (include_blanks)
-+          do_spec_1 (" ", 0, NULL_PTR);
-         do_spec_1 (*p, 1, NULL_PTR);
-       }
-      }
-+ 
-+   do_spec_1 (" ", 0, NULL_PTR);
-    switches[switchnum].valid = 1;
-  }
-diff -rcp2N gcc-2.7.2.3/gcc.texi gcc-2.7.2.3.f.1/gcc.texi
-*** gcc-2.7.2.3/gcc.texi       Wed Jul 24 18:57:41 1996
---- gcc-2.7.2.3.f.1/gcc.texi   Fri Jul 11 00:08:58 1997
-*************** original English.
-*** 149,152 ****
---- 149,153 ----
-  @sp 3
-  @center Last updated 29 June 1996
-+ @center (Revised for GNU Fortran 1997-01-10)
-  @sp 1
-  @c The version number appears twice more in this file.  
-diff -rcp2N gcc-2.7.2.3/glimits.h gcc-2.7.2.3.f.1/glimits.h
-*** gcc-2.7.2.3/glimits.h      Wed Sep 29 21:30:54 1993
---- gcc-2.7.2.3.f.1/glimits.h  Fri Jul 11 00:08:58 1997
-***************
-*** 64,68 ****
-     (Same as `int').  */
-  #ifndef __LONG_MAX__
-! #define __LONG_MAX__ 2147483647L
-  #endif
-  #undef LONG_MIN
---- 64,72 ----
-     (Same as `int').  */
-  #ifndef __LONG_MAX__
-! # ifndef __alpha__
-! #  define __LONG_MAX__ 2147483647L
-! # else
-! #  define __LONG_MAX__ 9223372036854775807LL
-! # endif /* __alpha__ */
-  #endif
-  #undef LONG_MIN
-diff -rcp2N gcc-2.7.2.3/integrate.c gcc-2.7.2.3.f.1/integrate.c
-*** gcc-2.7.2.3/integrate.c    Fri Oct 20 22:48:13 1995
---- gcc-2.7.2.3.f.1/integrate.c        Sun Aug 10 22:46:31 1997
-*************** static rtx copy_for_inline     PROTO((rtx));
-*** 67,70 ****
---- 67,71 ----
-  static void integrate_parm_decls PROTO((tree, struct inline_remap *, rtvec));
-  static void integrate_decl_tree      PROTO((tree, int, struct inline_remap *));
-+ static void save_constants_in_decl_trees PROTO ((tree));
-  static void subst_constants  PROTO((rtx *, rtx, struct inline_remap *));
-  static void restore_constants        PROTO((rtx *));
-*************** save_for_inline_copying (fndecl)
-*** 435,438 ****
---- 436,443 ----
-         }
-  
-+       /* Also scan all decls, and replace any constant pool references with the
-+       actual constant.  */
-+       save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+ 
-        /* Clear out the constant pool so that we can recreate it with the
-        copied constants below.  */
-*************** save_for_inline_nocopy (fndecl)
-*** 781,784 ****
---- 786,793 ----
-      }
-  
-+   /* Also scan all decls, and replace any constant pool references with the
-+      actual constant.  */
-+   save_constants_in_decl_trees (DECL_INITIAL (fndecl));
-+ 
-    /* We have now allocated all that needs to be allocated permanently
-       on the rtx obstack.  Set our high-water mark, so that we
-*************** expand_inline_function (fndecl, parms, t
-*** 1571,1575 ****
-        if (GET_CODE (XEXP (loc, 0)) == REG)
-       {
-!        temp = force_reg (Pmode, structure_value_addr);
-         map->reg_map[REGNO (XEXP (loc, 0))] = temp;
-         if ((CONSTANT_P (structure_value_addr)
---- 1580,1585 ----
-        if (GET_CODE (XEXP (loc, 0)) == REG)
-       {
-!        temp = force_reg (Pmode,
-!                          force_operand (structure_value_addr, NULL_RTX));
-         map->reg_map[REGNO (XEXP (loc, 0))] = temp;
-         if ((CONSTANT_P (structure_value_addr)
-*************** integrate_decl_tree (let, level, map)
-*** 2029,2032 ****
---- 2039,2059 ----
-       }
-      }
-+ }
-+ 
-+ /* Given a BLOCK node LET, search for all DECL_RTL fields, and pass them
-+    through save_constants.  */
-+ 
-+ static void
-+ save_constants_in_decl_trees (let)
-+      tree let;
-+ {
-+   tree t;
-+ 
-+   for (t = BLOCK_VARS (let); t; t = TREE_CHAIN (t))
-+     if (DECL_RTL (t) != 0)
-+       save_constants (&DECL_RTL (t));
-+ 
-+   for (t = BLOCK_SUBBLOCKS (let); t; t = TREE_CHAIN (t))
-+     save_constants_in_decl_trees (t);
-  }
-  \f
-diff -rcp2N gcc-2.7.2.3/invoke.texi gcc-2.7.2.3.f.1/invoke.texi
-*** gcc-2.7.2.3/invoke.texi    Tue Oct  3 15:40:43 1995
---- gcc-2.7.2.3.f.1/invoke.texi        Fri Aug 29 07:52:17 1997
-***************
-*** 1,3 ****
-! @c Copyright (C) 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-  @c This is part of the GCC manual.
-  @c For copying conditions, see the file gcc.texi.
---- 1,3 ----
-! @c Copyright (C) 1988, 89, 92-95, 1997 Free Software Foundation, Inc.
-  @c This is part of the GCC manual.
-  @c For copying conditions, see the file gcc.texi.
-*************** in the following sections.
-*** 149,152 ****
---- 149,153 ----
-  -fschedule-insns2  -fstrength-reduce  -fthread-jumps 
-  -funroll-all-loops  -funroll-loops
-+ -fmove-all-movables  -freduce-all-givs  -frerun-loop-opt
-  -O  -O0  -O1  -O2  -O3
-  @end smallexample
-*************** in addition to the above:
-*** 330,334 ****
-  -freg-struct-return  -fshared-data  -fshort-enums
-  -fshort-double  -fvolatile  -fvolatile-global
-! -fverbose-asm -fpack-struct +e0  +e1
-  @end smallexample
-  @end table
---- 331,337 ----
-  -freg-struct-return  -fshared-data  -fshort-enums
-  -fshort-double  -fvolatile  -fvolatile-global
-! -fverbose-asm -fpack-struct -fstack-check +e0  +e1
-! -fargument-alias  -fargument-noalias
-! -fargument-noalias-global
-  @end smallexample
-  @end table
-*************** Print extra warning messages for these e
-*** 1253,1256 ****
---- 1256,1304 ----
-  
-  @itemize @bullet
-+ @cindex division by zero
-+ @cindex zero, division by
-+ @item
-+ An integer division by zero is detected.
-+ 
-+ Some cases of division by zero might occur as the result
-+ of using so-called ``safe'' macros.
-+ For example:
-+ 
-+ @smallexample
-+ #define BUCKETS(b) (((b) != NULL) ? (b)->buckets : 0)
-+ @dots{...}
-+   i = j / BUCKETS(b);
-+ @end smallexample
-+ 
-+ Although analysis of the context of the above code could
-+ prove that @samp{b} is never null when it is executed,
-+ the division-by-zero warning is still useful, because
-+ @code{gcc} generates code to do the division by zero at
-+ run time so as to generate a run-time fault,
-+ and tidy programmers will want to find ways to prevent
-+ this needless code from being generated.
-+ 
-+ Note that @code{gcc} transforms expressions so as to find
-+ opportunities for performing expensive operations
-+ (such as division) at compile time instead of generating
-+ code to perform them at run time.
-+ For example, @code{gcc} transforms:
-+ 
-+ @smallexample
-+ 2 / (i == 0)
-+ @end smallexample
-+ 
-+ into:
-+ 
-+ @smallexample
-+ (i == 0) ? (2 / 1) : (2 / 0)
-+ @end smallexample
-+ 
-+ As a result, the division-by-zero warning might occur
-+ in contexts where the divisor seems to be a non-constant.
-+ It is useful in this case as well, because programmers might want
-+ to clean up the code so the compiled code does not include
-+ dead code to divide by zero.
-+ 
-  @cindex @code{longjmp} warnings
-  @item
-*************** and usually makes programs run more slow
-*** 1941,1944 ****
---- 1989,2037 ----
-  implies @samp{-fstrength-reduce} as well as @samp{-frerun-cse-after-loop}.
-  
-+ @item -fmove-all-movables
-+ Forces all invariant computations in loops to be moved
-+ outside the loop.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-+ Analysis of Fortran code optimization and the resulting
-+ optimizations triggered by this option, and the
-+ @samp{-freduce-all-givs} and @samp{-frerun-loop-opt}
-+ options as well, were
-+ contributed by Toon Moene (@code{toon@@moene.indiv.nluug.nl}).
-+ 
-+ These three options are intended to be removed someday, once
-+ they have helped determine the efficacy of various
-+ approaches to improving the performance of Fortran code.
-+ 
-+ Please let us (@code{fortran@@gnu.ai.mit.edu})
-+ know how use of these options affects
-+ the performance of your production code.
-+ We're very interested in code that runs @emph{slower}
-+ when these options are @emph{enabled}.
-+ 
-+ @item -freduce-all-givs
-+ Forces all general-induction variables in loops to be
-+ strength-reduced.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-+ @item -frerun-loop-opt
-+ Runs loop optimizations a second time.
-+ This option is provided primarily to improve performance
-+ for some Fortran code, though it might improve code written
-+ in other languages.
-+ 
-+ @emph{Note:} When compiling programs written in Fortran,
-+ this option is enabled by default.
-+ 
-  @item -fno-peephole
-  Disable any machine-specific peephole optimizations.
-*************** not want to use this option, since it ma
-*** 4212,4215 ****
---- 4305,4315 ----
-  the offsets of structure members won't agree with system libraries.
-  
-+ @item -fstack-check
-+ Generate code to verify that you do not go beyond the boundary of the
-+ stack.  You should specify this flag if you are running in an
-+ environment with multiple threads, but only rarely need to specify it in
-+ a single-threaded environment since stack overflow is automatically
-+ detected on nearly all systems if there is only one stack.
-+ 
-  @item +e0
-  @itemx +e1
-*************** compilation).
-*** 4229,4232 ****
---- 4329,4404 ----
-  With @samp{+e1}, G++ actually generates the code implementing virtual
-  functions defined in the code, and makes them publicly visible.
-+ 
-+ @cindex aliasing of parameters
-+ @cindex parameters, aliased
-+ @item -fargument-alias
-+ @item -fargument-noalias
-+ @item -fargument-noalias-global
-+ Specify the possible relationships among parameters and between
-+ parameters and global data.
-+ 
-+ @samp{-fargument-alias} specifies that arguments (parameters) may
-+ alias each other and may alias global storage.
-+ @samp{-fargument-noalias} specifies that arguments do not alias
-+ each other, but may alias global storage.
-+ @samp{-fargument-noalias-global} specifies that arguments do not
-+ alias each other and do not alias global storage.
-+ 
-+ For code written in C, C++, and Objective-C, @samp{-fargument-alias}
-+ is the default.
-+ For code written in Fortran, @samp{-fargument-noalias-global} is
-+ the default, though this is pertinent only on systems where
-+ @code{g77} is installed.
-+ (See the documentation for other compilers for information on the
-+ defaults for their respective languages.)
-+ 
-+ Normally, @code{gcc} assumes that a write through a pointer
-+ passed as a parameter to the current function might modify a
-+ value pointed to by another pointer passed as a parameter, or
-+ in global storage.
-+ 
-+ For example, consider this code:
-+ 
-+ @example
-+ void x(int *i, int *j)
-+ @{
-+   extern int k;
-+ 
-+   ++*i;
-+   ++*j;
-+   ++k;
-+ @}
-+ @end example
-+ 
-+ When compiling the above function, @code{gcc} assumes that @samp{i} might
-+ be a pointer to the same variable as @samp{j}, and that either @samp{i},
-+ @samp{j}, or both might be a pointer to @samp{k}.
-+ 
-+ Therefore, @code{gcc} does not assume it can generate code to read
-+ @samp{*i}, @samp{*j}, and @samp{k} into separate registers, increment
-+ each register, then write the incremented values back out.
-+ 
-+ Instead, @code{gcc} must generate code that reads @samp{*i},
-+ increments it, and writes it back before reading @samp{*j},
-+ in case @samp{i} and @samp{j} are aliased, and, similarly,
-+ that writes @samp{*j} before reading @samp{k}.
-+ The result is code that, on many systems, takes longer to execute,
-+ due to the way many processors schedule instruction execution.
-+ 
-+ Compiling the above code with the @samp{-fargument-noalias} option
-+ allows @code{gcc} to assume that @samp{i} and @samp{j} do not alias
-+ each other, but either might alias @samp{k}.
-+ 
-+ Compiling the above code with the @samp{-fargument-noalias-global}
-+ option allows @code{gcc} to assume that no combination of @samp{i},
-+ @samp{j}, and @samp{k} are aliases for each other.
-+ 
-+ @emph{Note:} Use the @samp{-fargument-noalias} and
-+ @samp{-fargument-noalias-global} options with care.
-+ While they can result in faster executables, they can
-+ also result in executables with subtle bugs, bugs that
-+ show up only when compiled for specific target systems,
-+ or bugs that show up only when compiled by specific versions
-+ of @code{g77}.
-  @end table
-  
-diff -rcp2N gcc-2.7.2.3/libgcc2.c gcc-2.7.2.3.f.1/libgcc2.c
-*** gcc-2.7.2.3/libgcc2.c      Sun Nov 26 19:39:21 1995
---- gcc-2.7.2.3.f.1/libgcc2.c  Sun Aug 10 22:46:07 1997
-*************** __gcc_bcmp (s1, s2, size)
-*** 1193,1196 ****
---- 1193,1201 ----
-  #endif
-  \f\f
-+ #ifdef L__dummy
-+ void
-+ __dummy () {}
-+ #endif
-+ 
-  #ifdef L_varargs
-  #ifdef __i860__
-diff -rcp2N gcc-2.7.2.3/local-alloc.c gcc-2.7.2.3.f.1/local-alloc.c
-*** gcc-2.7.2.3/local-alloc.c  Mon Aug 21 17:15:44 1995
---- gcc-2.7.2.3.f.1/local-alloc.c      Sun Aug 10 22:46:10 1997
-*************** static int this_insn_number;
-*** 243,246 ****
---- 243,250 ----
-  static rtx this_insn;
-  
-+ /* Used to communicate changes made by update_equiv_regs to
-+    memref_referenced_p.  */
-+ static rtx *reg_equiv_replacement;
-+ 
-  static void alloc_qty                PROTO((int, enum machine_mode, int, int));
-  static void alloc_qty_for_scratch PROTO((rtx, int, rtx, int, int));
-*************** validate_equiv_mem_from_store (dest, set
-*** 545,549 ****
-         && reg_overlap_mentioned_p (dest, equiv_mem))
-        || (GET_CODE (dest) == MEM
-!        && true_dependence (dest, equiv_mem)))
-      equiv_mem_modified = 1;
-  }
---- 549,553 ----
-         && reg_overlap_mentioned_p (dest, equiv_mem))
-        || (GET_CODE (dest) == MEM
-!        && true_dependence (dest, VOIDmode, equiv_mem, rtx_varies_p)))
-      equiv_mem_modified = 1;
-  }
-*************** memref_referenced_p (memref, x)
-*** 617,621 ****
-    switch (code)
-      {
--     case REG:
-      case CONST_INT:
-      case CONST:
---- 621,624 ----
-*************** memref_referenced_p (memref, x)
-*** 629,634 ****
-        return 0;
-  
-      case MEM:
-!       if (true_dependence (memref, x))
-       return 1;
-        break;
---- 632,642 ----
-        return 0;
-  
-+     case REG:
-+       return (reg_equiv_replacement[REGNO (x)] == 0
-+            || memref_referenced_p (memref,
-+                                    reg_equiv_replacement[REGNO (x)]));
-+ 
-      case MEM:
-!       if (true_dependence (memref, VOIDmode, x, rtx_varies_p))
-       return 1;
-        break;
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 818,827 ****
-             if (sregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                reg_live_length[sregno] -= length;
-!                /* reg_live_length is only an approximation after combine
-!                   if sched is not run, so make sure that we still have
-!                   a reasonable value.  */
-!                if (reg_live_length[sregno] < 2)
-!                  reg_live_length[sregno] = 2;
-                 reg_n_calls_crossed[sregno] -= n_calls;
-               }
---- 826,839 ----
-             if (sregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                if (reg_live_length[sregno] >= 0)
-!                  {
-!                    reg_live_length[sregno] -= length;
-!                    /* reg_live_length is only an approximation after
-!                       combine if sched is not run, so make sure that we
-!                       still have a reasonable value.  */
-!                    if (reg_live_length[sregno] < 2)
-!                      reg_live_length[sregno] = 2;
-!                  }
-! 
-                 reg_n_calls_crossed[sregno] -= n_calls;
-               }
-*************** optimize_reg_copy_1 (insn, dest, src)
-*** 829,833 ****
-             if (dregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                reg_live_length[dregno] += d_length;
-                 reg_n_calls_crossed[dregno] += d_n_calls;
-               }
---- 841,847 ----
-             if (dregno >= FIRST_PSEUDO_REGISTER)
-               {
-!                if (reg_live_length[dregno] >= 0)
-!                  reg_live_length[dregno] += d_length;
-! 
-                 reg_n_calls_crossed[dregno] += d_n_calls;
-               }
-*************** update_equiv_regs ()
-*** 948,953 ****
-  {
-    rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
--   rtx *reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-    rtx insn;
-  
-    bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
---- 962,968 ----
-  {
-    rtx *reg_equiv_init_insn = (rtx *) alloca (max_regno * sizeof (rtx *));
-    rtx insn;
-+ 
-+   reg_equiv_replacement = (rtx *) alloca (max_regno * sizeof (rtx *));
-  
-    bzero ((char *) reg_equiv_init_insn, max_regno * sizeof (rtx *));
-diff -rcp2N gcc-2.7.2.3/loop.c gcc-2.7.2.3.f.1/loop.c
-*** gcc-2.7.2.3/loop.c Sat Jun 29 16:26:59 1996
---- gcc-2.7.2.3.f.1/loop.c     Sun Aug 10 22:46:43 1997
-*************** int *loop_number_exit_count;
-*** 111,116 ****
-  unsigned HOST_WIDE_INT loop_n_iterations;
-  
-! /* Nonzero if there is a subroutine call in the current loop.
-!    (unknown_address_altered is also nonzero in this case.)  */
-  
-  static int loop_has_call;
---- 111,115 ----
-  unsigned HOST_WIDE_INT loop_n_iterations;
-  
-! /* Nonzero if there is a subroutine call in the current loop.  */
-  
-  static int loop_has_call;
-*************** static char *moved_once;
-*** 160,164 ****
-     here, we just turn on unknown_address_altered.  */
-  
-! #define NUM_STORES 20
-  static rtx loop_store_mems[NUM_STORES];
-  
---- 159,163 ----
-     here, we just turn on unknown_address_altered.  */
-  
-! #define NUM_STORES 30
-  static rtx loop_store_mems[NUM_STORES];
-  
-*************** scan_loop (loop_start, end, nregs)
-*** 669,673 ****
-           {
-             temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-!            if (temp && CONSTANT_P (XEXP (temp, 0)))
-               src = XEXP (temp, 0), move_insn = 1;
-             if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
---- 668,673 ----
-           {
-             temp = find_reg_note (p, REG_EQUAL, NULL_RTX);
-!            if (temp && CONSTANT_P (XEXP (temp, 0))
-!                && LEGITIMATE_CONSTANT_P (XEXP (temp, 0)))
-               src = XEXP (temp, 0), move_insn = 1;
-             if (temp && find_reg_note (p, REG_RETVAL, NULL_RTX))
-*************** move_movables (movables, threshold, insn
-*** 1629,1632 ****
---- 1629,1633 ----
-  
-         if (already_moved[regno]
-+            || flag_move_all_movables
-             || (threshold * savings * m->lifetime) >= insn_count
-             || (m->forces && m->forces->done
-*************** prescan_loop (start, end)
-*** 2199,2203 ****
-        else if (GET_CODE (insn) == CALL_INSN)
-       {
-!        unknown_address_altered = 1;
-         loop_has_call = 1;
-       }
---- 2200,2205 ----
-        else if (GET_CODE (insn) == CALL_INSN)
-       {
-!        if (! CONST_CALL_P (insn))
-!          unknown_address_altered = 1;
-         loop_has_call = 1;
-       }
-*************** invariant_p (x)
-*** 2777,2781 ****
-        /* See if there is any dependence between a store and this load.  */
-        for (i = loop_store_mems_idx - 1; i >= 0; i--)
-!      if (true_dependence (loop_store_mems[i], x))
-         return 0;
-  
---- 2779,2783 ----
-        /* See if there is any dependence between a store and this load.  */
-        for (i = loop_store_mems_idx - 1; i >= 0; i--)
-!      if (true_dependence (loop_store_mems[i], VOIDmode, x, rtx_varies_p))
-         return 0;
-  
-*************** strength_reduce (scan_start, end, loop_t
-*** 3821,3826 ****
-            exit.  */
-  
-!        if (v->lifetime * threshold * benefit < insn_count
-!            && ! bl->reversed)
-           {
-             if (loop_dump_stream)
---- 3823,3828 ----
-            exit.  */
-  
-!        if ( ! flag_reduce_all_givs && v->lifetime * threshold * benefit < insn_count
-!            && ! bl->reversed )
-           {
-             if (loop_dump_stream)
-*************** record_giv (v, insn, src_reg, dest_reg, 
-*** 4375,4378 ****
---- 4377,4382 ----
-    v->final_value = 0;
-    v->same_insn = 0;
-+   v->unrolled = 0;
-+   v->shared = 0;
-  
-    /* The v->always_computable field is used in update_giv_derive, to
-*************** check_final_value (v, loop_start, loop_e
-*** 4652,4657 ****
-             if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
-                 && LABEL_NAME (JUMP_LABEL (p))
-!                && ((INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-!                     && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
-                     || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
-                         && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
---- 4656,4664 ----
-             if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p)
-                 && LABEL_NAME (JUMP_LABEL (p))
-!                && ((INSN_UID (JUMP_LABEL (p)) >= max_uid_for_loop)
-!                    || (INSN_UID (v->insn) >= max_uid_for_loop)
-!                    || (INSN_UID (last_giv_use) >= max_uid_for_loop)
-!                    || (INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (v->insn)
-!                        && INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (loop_start))
-                     || (INSN_LUID (JUMP_LABEL (p)) > INSN_LUID (last_giv_use)
-                         && INSN_LUID (JUMP_LABEL (p)) < INSN_LUID (loop_end))))
-*************** emit_iv_add_mult (b, m, a, reg, insert_b
-*** 5560,5563 ****
---- 5567,5572 ----
-  
-    emit_insn_before (seq, insert_before);
-+ 
-+   record_base_value (REGNO (reg), b);
-  }
-  \f
-diff -rcp2N gcc-2.7.2.3/loop.h gcc-2.7.2.3.f.1/loop.h
-*** gcc-2.7.2.3/loop.h Fri Jul 14 12:23:28 1995
---- gcc-2.7.2.3.f.1/loop.h     Fri Jul 11 00:09:03 1997
-*************** struct induction
-*** 89,92 ****
---- 89,95 ----
-                                  we won't use it to eliminate a biv, it
-                                  would probably lose. */
-+   unsigned unrolled : 1;     /* 1 if new register has been allocated in
-+                                 unrolled loop.  */
-+   unsigned shared : 1;
-    int lifetime;                      /* Length of life of this giv */
-    int times_used;            /* # times this giv is used. */
-diff -rcp2N gcc-2.7.2.3/md.texi gcc-2.7.2.3.f.1/md.texi
-*** gcc-2.7.2.3/md.texi        Sun Nov 26 19:05:33 1995
---- gcc-2.7.2.3.f.1/md.texi    Fri Aug 29 07:52:18 1997
-*************** Some machines require other operations s
-*** 2334,2337 ****
---- 2334,2347 ----
-  maintaining the back chain.  Define this pattern to emit those
-  operations in addition to updating the stack pointer.
-+  
-+ @cindex @code{check_stack} instruction pattern
-+ @item @samp{check_stack}
-+ If stack checking cannot be done on your system by probing the stack with
-+ a load or store instruction (@pxref{Stack Checking}), define this pattern
-+ to perform the needed check and signaling an error if the stack
-+ has overflowed.  The single operand is the location in the stack furthest
-+ from the current stack pointer that you need to validate.  Normally,
-+ on machines where this pattern is needed, you would obtain the stack
-+ limit from a global or thread-specific variable or register.
-  @end table
-  
-diff -rcp2N gcc-2.7.2.3/optabs.c gcc-2.7.2.3.f.1/optabs.c
-*** gcc-2.7.2.3/optabs.c       Sat Oct 21 22:16:13 1995
---- gcc-2.7.2.3.f.1/optabs.c   Fri Aug 29 07:51:36 1997
-*************** expand_fix (to, from, unsignedp)
-*** 3878,3885 ****
-      }
-        
-!   if (GET_MODE (to) == GET_MODE (target))
-!     emit_move_insn (to, target);
-!   else
-!     convert_move (to, target, 0);
-  }
-  \f
---- 3878,3888 ----
-      }
-        
-!   if (target != to)
-!     {
-!       if (GET_MODE (to) == GET_MODE (target))
-!         emit_move_insn (to, target);
-!       else
-!         convert_move (to, target, 0);
-!     }
-  }
-  \f
-diff -rcp2N gcc-2.7.2.3/real.c gcc-2.7.2.3.f.1/real.c
-*** gcc-2.7.2.3/real.c Tue Aug 15 21:57:18 1995
---- gcc-2.7.2.3.f.1/real.c     Fri Jul 11 00:09:04 1997
-*************** make_nan (nan, sign, mode)
-*** 5625,5633 ****
-  }
-  
-! /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-!    This is the inverse of the function `etarsingle' invoked by
-     REAL_VALUE_TO_TARGET_SINGLE.  */
-  
-  REAL_VALUE_TYPE
-  ereal_from_float (f)
-       HOST_WIDE_INT f;
---- 5625,5699 ----
-  }
-  
-! /* This is the inverse of the function `etarsingle' invoked by
-     REAL_VALUE_TO_TARGET_SINGLE.  */
-  
-  REAL_VALUE_TYPE
-+ ereal_unto_float (f)
-+      long f;
-+ {
-+   REAL_VALUE_TYPE r;
-+   unsigned EMUSHORT s[2];
-+   unsigned EMUSHORT e[NE];
-+ 
-+   /* Convert 32 bit integer to array of 16 bit pieces in target machine order.
-+    This is the inverse operation to what the function `endian' does.  */
-+   if (REAL_WORDS_BIG_ENDIAN)
-+     {
-+       s[0] = (unsigned EMUSHORT) (f >> 16);
-+       s[1] = (unsigned EMUSHORT) f;
-+     }
-+   else
-+     {
-+       s[0] = (unsigned EMUSHORT) f;
-+       s[1] = (unsigned EMUSHORT) (f >> 16);
-+     }
-+   /* Convert and promote the target float to E-type. */
-+   e24toe (s, e);
-+   /* Output E-type to REAL_VALUE_TYPE. */
-+   PUT_REAL (e, &r);
-+   return r;
-+ }
-+ 
-+ 
-+ /* This is the inverse of the function `etardouble' invoked by
-+    REAL_VALUE_TO_TARGET_DOUBLE.  */
-+ 
-+ REAL_VALUE_TYPE
-+ ereal_unto_double (d)
-+      long d[];
-+ {
-+   REAL_VALUE_TYPE r;
-+   unsigned EMUSHORT s[4];
-+   unsigned EMUSHORT e[NE];
-+ 
-+   /* Convert array of HOST_WIDE_INT to equivalent array of 16-bit pieces.  */
-+   if (REAL_WORDS_BIG_ENDIAN)
-+     {
-+       s[0] = (unsigned EMUSHORT) (d[0] >> 16);
-+       s[1] = (unsigned EMUSHORT) d[0];
-+       s[2] = (unsigned EMUSHORT) (d[1] >> 16);
-+       s[3] = (unsigned EMUSHORT) d[1];
-+     }
-+   else
-+     {
-+       /* Target float words are little-endian.  */
-+       s[0] = (unsigned EMUSHORT) d[0];
-+       s[1] = (unsigned EMUSHORT) (d[0] >> 16);
-+       s[2] = (unsigned EMUSHORT) d[1];
-+       s[3] = (unsigned EMUSHORT) (d[1] >> 16);
-+     }
-+   /* Convert target double to E-type. */
-+   e53toe (s, e);
-+   /* Output E-type to REAL_VALUE_TYPE. */
-+   PUT_REAL (e, &r);
-+   return r;
-+ }
-+ 
-+ 
-+ /* Convert an SFmode target `float' value to a REAL_VALUE_TYPE.
-+    This is somewhat like ereal_unto_float, but the input types
-+    for these are different.  */
-+ 
-+ REAL_VALUE_TYPE
-  ereal_from_float (f)
-       HOST_WIDE_INT f;
-*************** ereal_from_float (f)
-*** 5658,5663 ****
-  
-  /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-!    This is the inverse of the function `etardouble' invoked by
-!    REAL_VALUE_TO_TARGET_DOUBLE.
-  
-     The DFmode is stored as an array of HOST_WIDE_INT in the target's
---- 5724,5729 ----
-  
-  /* Convert a DFmode target `double' value to a REAL_VALUE_TYPE.
-!    This is somewhat like ereal_unto_double, but the input types
-!    for these are different.
-  
-     The DFmode is stored as an array of HOST_WIDE_INT in the target's
-diff -rcp2N gcc-2.7.2.3/real.h gcc-2.7.2.3.f.1/real.h
-*** gcc-2.7.2.3/real.h Thu Jun 15 11:57:56 1995
---- gcc-2.7.2.3.f.1/real.h     Fri Jul 11 00:09:05 1997
-*************** extern void ereal_to_decimal   PROTO((REAL
-*** 152,155 ****
---- 152,157 ----
-  extern int ereal_cmp         PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE));
-  extern int ereal_isneg               PROTO((REAL_VALUE_TYPE));
-+ extern REAL_VALUE_TYPE ereal_unto_float PROTO((long));
-+ extern REAL_VALUE_TYPE ereal_unto_double PROTO((long *));
-  extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT));
-  extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *));
-*************** extern REAL_VALUE_TYPE real_value_trunca
-*** 197,200 ****
---- 199,208 ----
-  /* IN is a REAL_VALUE_TYPE.  OUT is a long. */
-  #define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN)))
-+ 
-+ /* Inverse of REAL_VALUE_TO_TARGET_DOUBLE. */
-+ #define REAL_VALUE_UNTO_TARGET_DOUBLE(d)  (ereal_unto_double (d))
-+ 
-+ /* Inverse of REAL_VALUE_TO_TARGET_SINGLE. */
-+ #define REAL_VALUE_UNTO_TARGET_SINGLE(f)  (ereal_unto_float (f))
-  
-  /* d is an array of HOST_WIDE_INT that holds a double precision
-diff -rcp2N gcc-2.7.2.3/recog.c gcc-2.7.2.3.f.1/recog.c
-*** gcc-2.7.2.3/recog.c        Sat Jul  1 10:52:35 1995
---- gcc-2.7.2.3.f.1/recog.c    Sun Aug 10 22:46:55 1997
-*************** register_operand (op, mode)
-*** 872,876 ****
-                               REGNO (SUBREG_REG (op)))
-         && (GET_MODE_SIZE (mode)
-!            != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op)))))
-       return 0;
-  #endif
---- 872,878 ----
-                               REGNO (SUBREG_REG (op)))
-         && (GET_MODE_SIZE (mode)
-!            != GET_MODE_SIZE (GET_MODE (SUBREG_REG (op))))
-!        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_INT
-!        && GET_MODE_CLASS (GET_MODE (SUBREG_REG (op))) != MODE_COMPLEX_FLOAT)
-       return 0;
-  #endif
-diff -rcp2N gcc-2.7.2.3/reg-stack.c gcc-2.7.2.3.f.1/reg-stack.c
-*** gcc-2.7.2.3/reg-stack.c    Thu Jun 15 21:36:05 1995
---- gcc-2.7.2.3.f.1/reg-stack.c        Wed Aug 27 11:44:55 1997
-*************** subst_stack_regs (insn, regstack)
-*** 2620,2623 ****
---- 2620,2624 ----
-    register rtx *note_link, note;
-    register int i;
-+   rtx head, jump, pat, cipat;
-    int n_operands;
-  
-*************** subst_stack_regs (insn, regstack)
-*** 2690,2693 ****
---- 2691,2728 ----
-    if (GET_CODE (insn) == NOTE)
-      return;
-+ 
-+   /* If we are reached by a computed goto which sets this same stack register,
-+      then pop this stack register, but maintain regstack. */
-+ 
-+   if (INSN_UID (insn) <= max_uid)
-+     {
-+       head = block_begin[BLOCK_NUM(insn)];
-+       pat = PATTERN(insn);
-+       if (GET_CODE (head) == CODE_LABEL
-+        && GET_CODE (pat) == SET && STACK_REG_P (SET_DEST (pat)))
-+      for (jump = LABEL_REFS (head);
-+           jump != head;
-+           jump = LABEL_NEXTREF (jump))
-+        {
-+          cipat = PATTERN (CONTAINING_INSN (jump));
-+          if (GET_CODE (cipat) == SET
-+              && SET_DEST (cipat) == pc_rtx
-+              && uses_reg_or_mem (SET_SRC (cipat))
-+              && INSN_UID (CONTAINING_INSN (jump)) <= max_uid)
-+            {
-+              int from_block = BLOCK_NUM (CONTAINING_INSN (jump));
-+              if (TEST_HARD_REG_BIT (block_out_reg_set[from_block],
-+                                     REGNO (SET_DEST (pat))))
-+                {
-+                  struct stack_def old;
-+                  bcopy (regstack->reg, old.reg, sizeof (old.reg));
-+                  emit_pop_insn (insn, regstack, SET_DEST (pat), emit_insn_before);
-+                  regstack->top += 1;
-+                  bcopy (old.reg, regstack->reg, sizeof (old.reg));
-+                  SET_HARD_REG_BIT (regstack->reg_set, REGNO (SET_DEST (pat)));
-+                }
-+            }
-+        }
-+     }
-  
-    /* If there is a REG_UNUSED note on a stack register on this insn,
-diff -rcp2N gcc-2.7.2.3/reload.c gcc-2.7.2.3.f.1/reload.c
-*** gcc-2.7.2.3/reload.c       Sat Nov 11 13:23:54 1995
---- gcc-2.7.2.3.f.1/reload.c   Sat Aug 30 20:42:37 1997
-***************
-*** 1,4 ****
-  /* Search an insn for pseudo regs that must be in hard regs and are not.
-!    Copyright (C) 1987, 88, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
-  
-  This file is part of GNU CC.
---- 1,4 ----
-  /* Search an insn for pseudo regs that must be in hard regs and are not.
-!    Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc.
-  
-  This file is part of GNU CC.
-*************** static int push_secondary_reload PROTO((
-*** 292,295 ****
---- 292,296 ----
-                                       enum machine_mode, enum reload_type,
-                                       enum insn_code *));
-+ static enum reg_class find_valid_class PROTO((enum machine_mode, int));
-  static int push_reload               PROTO((rtx, rtx, rtx *, rtx *, enum reg_class,
-                                      enum machine_mode, enum machine_mode,
-*************** static struct decomposition decompose PR
-*** 305,312 ****
-  static int immune_p          PROTO((rtx, rtx, struct decomposition));
-  static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev       PROTO((rtx, int, enum reload_type, int, int));
-  static rtx make_memloc               PROTO((rtx, int));
-  static int find_reloads_address      PROTO((enum machine_mode, rtx *, rtx, rtx *,
-!                                     int, enum reload_type, int));
-  static rtx subst_reg_equivs  PROTO((rtx));
-  static rtx subst_indexed_address PROTO((rtx));
---- 306,313 ----
-  static int immune_p          PROTO((rtx, rtx, struct decomposition));
-  static int alternative_allows_memconst PROTO((char *, int));
-! static rtx find_reloads_toplev       PROTO((rtx, int, enum reload_type, int, int, short *));
-  static rtx make_memloc               PROTO((rtx, int));
-  static int find_reloads_address      PROTO((enum machine_mode, rtx *, rtx, rtx *,
-!                                     int, enum reload_type, int, short *));
-  static rtx subst_reg_equivs  PROTO((rtx));
-  static rtx subst_indexed_address PROTO((rtx));
-*************** push_secondary_reload (in_p, x, opnum, o
-*** 590,599 ****
-  
-        if (in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode))
-!      get_secondary_mem (x, reload_mode, opnum, type);
-  
-        if (! in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode))
-!      get_secondary_mem (x, reload_mode, opnum, type);
-  #endif
-      }
---- 591,600 ----
-  
-        if (in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (class, reload_class, mode))
-!      get_secondary_mem (x, mode, opnum, type);
-  
-        if (! in_p && icode == CODE_FOR_nothing
-!        && SECONDARY_MEMORY_NEEDED (reload_class, class, mode))
-!      get_secondary_mem (x, mode, opnum, type);
-  #endif
-      }
-*************** get_secondary_mem (x, mode, opnum, type)
-*** 673,677 ****
-  
-        find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-!                          opnum, type, 0);
-      }
-  
---- 674,678 ----
-  
-        find_reloads_address (mode, NULL_PTR, XEXP (loc, 0), &XEXP (loc, 0),
-!                          opnum, type, 0, NULL);
-      }
-  
-*************** clear_secondary_mem ()
-*** 689,692 ****
---- 690,725 ----
-  #endif /* SECONDARY_MEMORY_NEEDED */
-  \f
-+ /* Find the largest class for which every register number plus N is valid in
-+    M1 (if in range).  Abort if no such class exists.  */
-+ 
-+ static enum reg_class
-+ find_valid_class (m1, n)
-+      enum machine_mode  m1;
-+      int n;
-+ {
-+   int class;
-+   int regno;
-+   enum reg_class best_class;
-+   int best_size = 0;
-+ 
-+   for (class = 1; class < N_REG_CLASSES; class++)
-+     {
-+       int bad = 0;
-+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER && ! bad; regno++)
-+      if (TEST_HARD_REG_BIT (reg_class_contents[class], regno)
-+          && TEST_HARD_REG_BIT (reg_class_contents[class], regno + n)
-+          && ! HARD_REGNO_MODE_OK (regno + n, m1))
-+        bad = 1;
-+ 
-+       if (! bad && reg_class_size[class] > best_size)
-+      best_class = class, best_size = reg_class_size[class];
-+     }
-+ 
-+   if (best_size == 0)
-+     abort ();
-+ 
-+   return best_class;
-+ }
-+ \f
-  /* Record one reload that needs to be performed.
-     IN is an rtx saying where the data are to be found before this instruction.
-*************** push_reload (in, out, inloc, outloc, cla
-*** 894,898 ****
-        && GET_CODE (SUBREG_REG (in)) == REG
-        && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)), inmode)
-         || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
---- 927,932 ----
-        && GET_CODE (SUBREG_REG (in)) == REG
-        && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (in)) + SUBREG_WORD (in),
-!                              inmode)
-         || (GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 909,913 ****
-        output before the outer reload.  */
-        push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-!                 GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
-        dont_remove_subreg = 1;
-      }
---- 943,948 ----
-        output before the outer reload.  */
-        push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
-!                 find_valid_class (inmode, SUBREG_WORD (in)),
-!                 VOIDmode, VOIDmode, 0, 0, opnum, type);
-        dont_remove_subreg = 1;
-      }
-*************** push_reload (in, out, inloc, outloc, cla
-*** 982,986 ****
-        && GET_CODE (SUBREG_REG (out)) == REG
-        && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)), outmode)
-         || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
---- 1017,1022 ----
-        && GET_CODE (SUBREG_REG (out)) == REG
-        && REGNO (SUBREG_REG (out)) < FIRST_PSEUDO_REGISTER
-!       && (! HARD_REGNO_MODE_OK (REGNO (SUBREG_REG (out)) + SUBREG_WORD (out),
-!                              outmode)
-         || (GET_MODE_SIZE (outmode) <= UNITS_PER_WORD
-             && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (out)))
-*************** push_reload (in, out, inloc, outloc, cla
-*** 998,1002 ****
-        dont_remove_subreg = 1;
-        push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-!                 &SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0,
-                  opnum, RELOAD_OTHER);
-      }
---- 1034,1040 ----
-        dont_remove_subreg = 1;
-        push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
-!                 &SUBREG_REG (out),
-!                 find_valid_class (outmode, SUBREG_WORD (out)),
-!                 VOIDmode, VOIDmode, 0, 0,
-                  opnum, RELOAD_OTHER);
-      }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2241,2244 ****
---- 2279,2283 ----
-    int goal_earlyclobber, this_earlyclobber;
-    enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
-+   short force_update[MAX_RECOG_OPERANDS];
-  
-    this_insn = insn;
-*************** find_reloads (insn, replace, ind_levels,
-*** 2272,2275 ****
---- 2311,2316 ----
-  #endif
-  
-+   bzero ((char *) force_update, sizeof force_update);
-+ 
-    /* Find what kind of insn this is.  NOPERANDS gets number of operands.
-       Make OPERANDS point to a vector of operand values.
-*************** find_reloads (insn, replace, ind_levels,
-*** 2469,2473 ****
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, operand_type[i], ind_levels);
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-       }
---- 2510,2515 ----
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, operand_type[i], ind_levels,
-!                              &force_update[i]);
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-       }
-*************** find_reloads (insn, replace, ind_levels,
-*** 2478,2482 ****
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels))
-           address_reloaded[i] = 1;
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
---- 2520,2525 ----
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels,
-!                                  &force_update[i]))
-           address_reloaded[i] = 1;
-         substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-*************** find_reloads (insn, replace, ind_levels,
-*** 2487,2491 ****
-                                ind_levels,
-                                set != 0
-!                               && &SET_DEST (set) == recog_operand_loc[i]);
-        else if (code == PLUS)
-       /* We can get a PLUS as an "operand" as a result of
---- 2530,2535 ----
-                                ind_levels,
-                                set != 0
-!                               && &SET_DEST (set) == recog_operand_loc[i],
-!                               &force_update[i]);
-        else if (code == PLUS)
-       /* We can get a PLUS as an "operand" as a result of
-*************** find_reloads (insn, replace, ind_levels,
-*** 2493,2497 ****
-       substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, address_type[i],
-!                               ind_levels, 0);
-        else if (code == REG)
-       {
---- 2537,2541 ----
-       substed_operand[i] = recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, address_type[i],
-!                               ind_levels, 0, &force_update[i]);
-        else if (code == REG)
-       {
-*************** find_reloads (insn, replace, ind_levels,
-*** 2505,2510 ****
-         if (reg_equiv_constant[regno] != 0
-             && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-!          substed_operand[i] = recog_operand[i]
-!            = reg_equiv_constant[regno];
-  #if 0 /* This might screw code in reload1.c to delete prior output-reload
-        that feeds this insn.  */
---- 2549,2557 ----
-         if (reg_equiv_constant[regno] != 0
-             && (set == 0 || &SET_DEST (set) != recog_operand_loc[i]))
-!          {
-!            substed_operand[i] = recog_operand[i]
-!              = reg_equiv_constant[regno];
-!            force_update[i] = 1;
-!          }
-  #if 0 /* This might screw code in reload1.c to delete prior output-reload
-        that feeds this insn.  */
-*************** find_reloads (insn, replace, ind_levels,
-*** 2545,2549 ****
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels);
-             substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-           }
---- 2592,2597 ----
-                                   XEXP (recog_operand[i], 0),
-                                   &XEXP (recog_operand[i], 0),
-!                                  i, address_type[i], ind_levels,
-!                                  &force_update[i]);
-             substed_operand[i] = recog_operand[i] = *recog_operand_loc[i];
-           }
-*************** find_reloads (insn, replace, ind_levels,
-*** 3415,3419 ****
-         = find_reloads_toplev (force_const_mem (operand_mode[i],
-                                                 recog_operand[i]),
-!                               i, address_type[i], ind_levels, 0);
-       if (alternative_allows_memconst (constraints1[i],
-                                        goal_alternative_number))
---- 3463,3467 ----
-         = find_reloads_toplev (force_const_mem (operand_mode[i],
-                                                 recog_operand[i]),
-!                               i, address_type[i], ind_levels, 0, NULL);
-       if (alternative_allows_memconst (constraints1[i],
-                                        goal_alternative_number))
-*************** find_reloads (insn, replace, ind_levels,
-*** 3595,3604 ****
-       Don't do this if we aren't making replacements because we might be
-       propagating things allocated by frame pointer elimination into places
-!      it doesn't expect.  */
-  
-!   if (insn_code_number >= 0 && replace)
-      for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-        {
-       int opno = recog_dup_num[i];
-       *recog_dup_loc[i] = *recog_operand_loc[opno];
-       if (operand_reloadnum[opno] >= 0)
---- 3643,3657 ----
-       Don't do this if we aren't making replacements because we might be
-       propagating things allocated by frame pointer elimination into places
-!      it doesn't expect.  However, always do it for replaces of pseudos
-!      by constants.  */
-  
-!   if (insn_code_number >= 0)
-      for (i = insn_n_dups[insn_code_number] - 1; i >= 0; i--)
-        {
-       int opno = recog_dup_num[i];
-+ 
-+      if (! replace && ! force_update[opno])
-+        continue;
-+ 
-       *recog_dup_loc[i] = *recog_operand_loc[opno];
-       if (operand_reloadnum[opno] >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3829,3832 ****
---- 3882,3886 ----
-        register RTX_CODE code = GET_CODE (recog_operand[i]);
-        int is_set_dest = GET_CODE (body) == SET && (i == 0);
-+       short ign;
-  
-        if (insn_code_number >= 0)
-*************** find_reloads (insn, replace, ind_levels,
-*** 3834,3838 ****
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, RELOAD_FOR_INPUT, ind_levels);
-  
-        /* In these cases, we can't tell if the operand is an input
---- 3888,3892 ----
-         find_reloads_address (VOIDmode, NULL_PTR,
-                               recog_operand[i], recog_operand_loc[i],
-!                              i, RELOAD_FOR_INPUT, ind_levels, &ign);
-  
-        /* In these cases, we can't tell if the operand is an input
-*************** find_reloads (insn, replace, ind_levels,
-*** 3845,3853 ****
-                             XEXP (recog_operand[i], 0),
-                             &XEXP (recog_operand[i], 0),
-!                            i, RELOAD_OTHER, ind_levels);
-        if (code == SUBREG)
-       recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-!                               ind_levels, is_set_dest);
-        if (code == REG)
-       {
---- 3899,3907 ----
-                             XEXP (recog_operand[i], 0),
-                             &XEXP (recog_operand[i], 0),
-!                            i, RELOAD_OTHER, ind_levels, &ign);
-        if (code == SUBREG)
-       recog_operand[i] = *recog_operand_loc[i]
-         = find_reloads_toplev (recog_operand[i], i, RELOAD_OTHER,
-!                               ind_levels, is_set_dest, &ign);
-        if (code == REG)
-       {
-*************** alternative_allows_memconst (constraint,
-*** 3908,3915 ****
-  
-     IS_SET_DEST is true if X is the destination of a SET, which is not
-!    appropriate to be replaced by a constant.  */
-  
-  static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest)
-       rtx x;
-       int opnum;
---- 3962,3972 ----
-  
-     IS_SET_DEST is true if X is the destination of a SET, which is not
-!    appropriate to be replaced by a constant.
-! 
-!    FORCE_UPDATE, if non-NULL, is the address of a SHORT that is set to
-!    1 if X is replaced with something based on reg_equiv_constant.  */
-  
-  static rtx
-! find_reloads_toplev (x, opnum, type, ind_levels, is_set_dest, force_update)
-       rtx x;
-       int opnum;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3917,3920 ****
---- 3974,3978 ----
-       int ind_levels;
-       int is_set_dest;
-+      short *force_update;
-  {
-    register RTX_CODE code = GET_CODE (x);
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3928,3932 ****
-        register int regno = REGNO (x);
-        if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-!      x = reg_equiv_constant[regno];
-  #if 0
-  /*  This creates (subreg (mem...)) which would cause an unnecessary
---- 3986,3996 ----
-        register int regno = REGNO (x);
-        if (reg_equiv_constant[regno] != 0 && !is_set_dest)
-!      {
-!        x = reg_equiv_constant[regno];
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!      }
-  #if 0
-  /*  This creates (subreg (mem...)) which would cause an unnecessary
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3951,3955 ****
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels);
-       }
-        return x;
---- 4015,4020 ----
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels,
-!                              force_update);
-       }
-        return x;
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3959,3963 ****
-        rtx tem = x;
-        find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels);
-        return tem;
-      }
---- 4024,4028 ----
-        rtx tem = x;
-        find_reloads_address (GET_MODE (x), &tem, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels, force_update);
-        return tem;
-      }
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3982,3986 ****
-         && (tem = gen_lowpart_common (GET_MODE (x),
-                                       reg_equiv_constant[regno])) != 0)
-!      return tem;
-  
-        if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
---- 4047,4057 ----
-         && (tem = gen_lowpart_common (GET_MODE (x),
-                                       reg_equiv_constant[regno])) != 0)
-!      {
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!        return tem;
-!      }
-  
-        if (GET_MODE_BITSIZE (GET_MODE (x)) == BITS_PER_WORD
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 3990,3994 ****
-                                    SUBREG_WORD (x), 0,
-                                    GET_MODE (SUBREG_REG (x)))) != 0)
-!      return tem;
-  
-        if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
---- 4061,4071 ----
-                                    SUBREG_WORD (x), 0,
-                                    GET_MODE (SUBREG_REG (x)))) != 0)
-!      {
-!        if (force_update)
-!          *force_update = 1;
-!        else
-!          abort ();   /* Learn why this happens. */
-!        return tem;
-!      }
-  
-        if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4040,4044 ****
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels);
-       }
-  
---- 4117,4122 ----
-         find_reloads_address (GET_MODE (x), NULL_PTR,
-                               XEXP (x, 0),
-!                              &XEXP (x, 0), opnum, type, ind_levels,
-!                              force_update);
-       }
-  
-*************** find_reloads_toplev (x, opnum, type, ind
-*** 4049,4053 ****
-        if (fmt[i] == 'e')
-       XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-!                                         ind_levels, is_set_dest);
-      }
-    return x;
---- 4127,4131 ----
-        if (fmt[i] == 'e')
-       XEXP (x, i) = find_reloads_toplev (XEXP (x, i), opnum, type,
-!                                         ind_levels, is_set_dest, NULL);
-      }
-    return x;
-*************** make_memloc (ad, regno)
-*** 4110,4114 ****
-  
-  static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels)
-       enum machine_mode mode;
-       rtx *memrefloc;
---- 4188,4193 ----
-  
-  static int
-! find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels,
-!                    force_update)
-       enum machine_mode mode;
-       rtx *memrefloc;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4118,4121 ****
---- 4197,4201 ----
-       enum reload_type type;
-       int ind_levels;
-+      short *force_update;
-  {
-    register int regno;
-*************** find_reloads_address (mode, memrefloc, a
-*** 4134,4137 ****
---- 4214,4221 ----
-       {
-         *loc = ad = reg_equiv_constant[regno];
-+        if (force_update)
-+          *force_update = 1;
-+        else
-+          abort ();   /* Learn why this happens. */
-         return 1;
-       }
-*************** find_reloads_address (mode, memrefloc, a
-*** 4141,4145 ****
-         tem = make_memloc (ad, regno);
-         find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-!                              &XEXP (tem, 0), opnum, type, ind_levels);
-         push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
-                      GET_MODE (ad), VOIDmode, 0, 0,
---- 4225,4229 ----
-         tem = make_memloc (ad, regno);
-         find_reloads_address (GET_MODE (tem), NULL_PTR, XEXP (tem, 0),
-!                              &XEXP (tem, 0), opnum, type, ind_levels, NULL);
-         push_reload (tem, NULL_RTX, loc, NULL_PTR, BASE_REG_CLASS,
-                      GET_MODE (ad), VOIDmode, 0, 0,
-*************** find_reloads_address (mode, memrefloc, a
-*** 4214,4218 ****
-        tem = ad;
-        find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-!                          opnum, type, ind_levels == 0 ? 0 : ind_levels - 1);
-  
-        /* If tem was changed, then we must create a new memory reference to
---- 4298,4303 ----
-        tem = ad;
-        find_reloads_address (GET_MODE (ad), &tem, XEXP (ad, 0), &XEXP (ad, 0),
-!                          opnum, type, ind_levels == 0 ? 0 : ind_levels - 1,
-!                          NULL);
-  
-        /* If tem was changed, then we must create a new memory reference to
-*************** find_reloads_address_1 (x, context, loc,
-*** 4722,4726 ****
-             /* First reload the memory location's address.  */
-             find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-!                                  &XEXP (tem, 0), opnum, type, ind_levels);
-             /* Put this inside a new increment-expression.  */
-             x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
---- 4807,4812 ----
-             /* First reload the memory location's address.  */
-             find_reloads_address (GET_MODE (tem), 0, XEXP (tem, 0),
-!                                  &XEXP (tem, 0), opnum, type, ind_levels,
-!                                  NULL);
-             /* Put this inside a new increment-expression.  */
-             x = gen_rtx (GET_CODE (x), GET_MODE (x), tem);
-*************** find_reloads_address_1 (x, context, loc,
-*** 4788,4792 ****
-         find_reloads_address (GET_MODE (x), &XEXP (x, 0),
-                               XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-!                              opnum, type, ind_levels);
-  
-         reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
---- 4874,4878 ----
-         find_reloads_address (GET_MODE (x), &XEXP (x, 0),
-                               XEXP (XEXP (x, 0), 0), &XEXP (XEXP (x, 0), 0),
-!                              opnum, type, ind_levels, NULL);
-  
-         reloadnum = push_reload (x, NULL_RTX, loc, NULL_PTR,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4818,4822 ****
-  
-        find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels);
-        push_reload (*loc, NULL_RTX, loc, NULL_PTR,
-                  context ? INDEX_REG_CLASS : BASE_REG_CLASS,
---- 4904,4908 ----
-  
-        find_reloads_address (GET_MODE (x), loc, XEXP (x, 0), &XEXP (x, 0),
-!                          opnum, type, ind_levels, NULL);
-        push_reload (*loc, NULL_RTX, loc, NULL_PTR,
-                  context ? INDEX_REG_CLASS : BASE_REG_CLASS,
-*************** find_reloads_address_1 (x, context, loc,
-*** 4852,4856 ****
-           x = make_memloc (x, regno);
-           find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-!                                opnum, type, ind_levels);
-         }
-  
---- 4938,4942 ----
-           x = make_memloc (x, regno);
-           find_reloads_address (GET_MODE (x), 0, XEXP (x, 0), &XEXP (x, 0),
-!                                opnum, type, ind_levels, NULL);
-         }
-  
-*************** find_reloads_address_part (x, loc, class
-*** 4965,4969 ****
-        rtx tem = x = force_const_mem (mode, x);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels);
-      }
-  
---- 5051,5055 ----
-        rtx tem = x = force_const_mem (mode, x);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels, NULL);
-      }
-  
-*************** find_reloads_address_part (x, loc, class
-*** 4977,4981 ****
-        x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels);
-      }
-  
---- 5063,5067 ----
-        x = gen_rtx (PLUS, GET_MODE (x), XEXP (x, 0), tem);
-        find_reloads_address (mode, &tem, XEXP (tem, 0), &XEXP (tem, 0),
-!                          opnum, type, ind_levels, NULL);
-      }
-  
-*************** find_equiv_reg (goal, insn, class, other
-*** 5518,5522 ****
-       and is also a register that appears in the address of GOAL.  */
-  
-!   if (goal_mem && value == SET_DEST (PATTERN (where))
-        && refers_to_regno_for_reload_p (valueno,
-                                      (valueno
---- 5604,5608 ----
-       and is also a register that appears in the address of GOAL.  */
-  
-!   if (goal_mem && value == SET_DEST (single_set (where))
-        && refers_to_regno_for_reload_p (valueno,
-                                      (valueno
-*************** debug_reload()
-*** 5900,5904 ****
-  
-        if (reload_nocombine[r])
-!      fprintf (stderr, ", can combine", reload_nocombine[r]);
-  
-        if (reload_secondary_p[r])
---- 5986,5990 ----
-  
-        if (reload_nocombine[r])
-!      fprintf (stderr, ", can't combine %d", reload_nocombine[r]);
-  
-        if (reload_secondary_p[r])
-diff -rcp2N gcc-2.7.2.3/reload1.c gcc-2.7.2.3.f.1/reload1.c
-*** gcc-2.7.2.3/reload1.c      Sun Nov  5 16:22:22 1995
---- gcc-2.7.2.3.f.1/reload1.c  Fri Aug 29 07:52:04 1997
-*************** reload (first, global, dumpfile)
-*** 542,546 ****
-       Also find all paradoxical subregs and find largest such for each pseudo.
-       On machines with small register classes, record hard registers that
-!      are used for user variables.  These can never be used for spills.  */
-  
-    for (insn = first; insn; insn = NEXT_INSN (insn))
---- 542,548 ----
-       Also find all paradoxical subregs and find largest such for each pseudo.
-       On machines with small register classes, record hard registers that
-!      are used for user variables.  These can never be used for spills. 
-!      Also look for a "constant" NOTE_INSN_SETJMP.  This means that all
-!      caller-saved registers must be marked live.  */
-  
-    for (insn = first; insn; insn = NEXT_INSN (insn))
-*************** reload (first, global, dumpfile)
-*** 548,551 ****
---- 550,559 ----
-        rtx set = single_set (insn);
-  
-+       if (GET_CODE (insn) == NOTE && CONST_CALL_P (insn)
-+        && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+        if (! call_used_regs[i])
-+          regs_ever_live[i] = 1;
-+ 
-        if (set != 0 && GET_CODE (SET_DEST (set)) == REG)
-       {
-*************** reload (first, global, dumpfile)
-*** 564,568 ****
-                 if (GET_CODE (x) == MEM)
-                   reg_equiv_memory_loc[i] = x;
-!                else if (CONSTANT_P (x))
-                   {
-                     if (LEGITIMATE_CONSTANT_P (x))
---- 572,578 ----
-                 if (GET_CODE (x) == MEM)
-                   reg_equiv_memory_loc[i] = x;
-!                else if (CONSTANT_P (x)
-!                         && ! (GET_CODE (x) == CONST
-!                               && GET_CODE (XEXP (x, 0)) == MINUS))
-                   {
-                     if (LEGITIMATE_CONSTANT_P (x))
-*************** reload (first, global, dumpfile)
-*** 2013,2016 ****
---- 2023,2040 ----
-  #endif
-  
-+   /* If we are doing stack checking, give a warning if this function's
-+      frame size is larger than we expect.  */
-+   if (flag_stack_check && ! STACK_CHECK_BUILTIN)
-+     {
-+       HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE;
-+ 
-+       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-+      if (regs_ever_live[i] && ! fixed_regs[i] && call_used_regs[i])
-+        size += UNITS_PER_WORD;
-+ 
-+       if (size > STACK_CHECK_MAX_FRAME_SIZE)
-+      warning ("frame size too large for reliable stack checking");
-+     }
-+      
-    /* Indicate that we no longer have known memory locations or constants.  */
-    reg_equiv_constant = 0;
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2886,2890 ****
-  
-        /* Fall through to generic unary operation case.  */
--     case USE:
-      case STRICT_LOW_PART:
-      case NEG:          case NOT:
---- 2910,2913 ----
-*************** eliminate_regs (x, mem_mode, insn)
-*** 2975,2978 ****
---- 2998,3014 ----
-        return x;
-  
-+     case USE:
-+       /* If using a register that is the source of an eliminate we still
-+       think can be performed, note it cannot be performed since we don't
-+       know how this register is used.  */
-+       for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
-+      if (ep->from_rtx == XEXP (x, 0))
-+        ep->can_eliminate = 0;
-+ 
-+       new = eliminate_regs (XEXP (x, 0), mem_mode, insn);
-+       if (new != XEXP (x, 0))
-+      return gen_rtx (code, GET_MODE (x), new);
-+       return x;
-+ 
-      case CLOBBER:
-        /* If clobbering a register that is the replacement register for an
-*************** gen_reload (out, in, opnum, type)
-*** 6736,6741 ****
---- 6772,6779 ----
-    if (GET_CODE (in) == PLUS
-        && (GET_CODE (XEXP (in, 0)) == REG
-+        || GET_CODE (XEXP (in, 0)) == SUBREG
-         || GET_CODE (XEXP (in, 0)) == MEM)
-        && (GET_CODE (XEXP (in, 1)) == REG
-+        || GET_CODE (XEXP (in, 1)) == SUBREG
-         || CONSTANT_P (XEXP (in, 1))
-         || GET_CODE (XEXP (in, 1)) == MEM))
-*************** gen_reload (out, in, opnum, type)
-*** 6798,6807 ****
-        we emit below.  */
-  
-!       if (CONSTANT_P (op1) || GET_CODE (op1) == MEM
-         || (GET_CODE (op1) == REG
-             && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
-       tem = op0, op0 = op1, op1 = tem;
-  
-!       emit_insn (gen_move_insn (out, op0));
-  
-        /* If OP0 and OP1 are the same, we can use OUT for OP1.
---- 6836,6845 ----
-        we emit below.  */
-  
-!       if (CONSTANT_P (op1) || GET_CODE (op1) == MEM || GET_CODE (op1) == SUBREG
-         || (GET_CODE (op1) == REG
-             && REGNO (op1) >= FIRST_PSEUDO_REGISTER))
-       tem = op0, op0 = op1, op1 = tem;
-  
-!       gen_reload (out, op0, opnum, type);
-  
-        /* If OP0 and OP1 are the same, we can use OUT for OP1.
-*************** gen_reload (out, in, opnum, type)
-*** 6831,6835 ****
-        delete_insns_since (last);
-  
-!       emit_insn (gen_move_insn (out, op1));
-        emit_insn (gen_add2_insn (out, op0));
-      }
---- 6869,6873 ----
-        delete_insns_since (last);
-  
-!       gen_reload (out, op1, opnum, type);
-        emit_insn (gen_add2_insn (out, op0));
-      }
-*************** gen_reload (out, in, opnum, type)
-*** 6852,6857 ****
-       in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-  
-!       emit_insn (gen_move_insn (loc, in));
-!       emit_insn (gen_move_insn (out, loc));
-      }
-  #endif
---- 6890,6895 ----
-       in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
-  
-!       gen_reload (loc, in, opnum, type);
-!       gen_reload (out, loc, opnum, type);
-      }
-  #endif
-diff -rcp2N gcc-2.7.2.3/reorg.c gcc-2.7.2.3.f.1/reorg.c
-*** gcc-2.7.2.3/reorg.c        Fri Sep 15 21:38:55 1995
---- gcc-2.7.2.3.f.1/reorg.c    Fri Aug 29 07:52:00 1997
-*************** redundant_insn (insn, target, delay_list
-*** 1961,1964 ****
---- 1961,1969 ----
-    int i;
-  
-+   /* If INSN has any REG_UNUSED notes, it can't match anything since we
-+      are allowed to not actually assign to such a register.  */
-+   if (find_reg_note (insn, REG_UNUSED, NULL_RTX) != 0)
-+     return 0;
-+ 
-    /* Scan backwards looking for a match.  */
-    for (trial = PREV_INSN (target); trial; trial = PREV_INSN (trial))
-*************** redundant_insn (insn, target, delay_list
-*** 1999,2003 ****
-         for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
-           if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-!              && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat))
-             break;
-  
---- 2004,2009 ----
-         for (i = XVECLEN (pat, 0) - 1; i > 0; i--)
-           if (GET_CODE (XVECEXP (pat, 0, i)) == GET_CODE (insn)
-!              && rtx_equal_p (PATTERN (XVECEXP (pat, 0, i)), ipat)
-!              && ! find_reg_note (XVECEXP (pat, 0, i), REG_UNUSED, NULL_RTX))
-             break;
-  
-*************** redundant_insn (insn, target, delay_list
-*** 2007,2011 ****
-       }
-  
-!       else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat))
-       break;
-      }
---- 2013,2018 ----
-       }
-  
-!       else if (GET_CODE (trial) == GET_CODE (insn) && rtx_equal_p (pat, ipat)
-!             && ! find_reg_note (trial, REG_UNUSED, NULL_RTX))
-       break;
-      }
-diff -rcp2N gcc-2.7.2.3/rtl.c gcc-2.7.2.3.f.1/rtl.c
-*** gcc-2.7.2.3/rtl.c  Thu Jun 15 12:02:59 1995
---- gcc-2.7.2.3.f.1/rtl.c      Fri Jul 11 00:09:06 1997
-*************** char *reg_note_name[] = { "", "REG_DEAD"
-*** 179,183 ****
-                         "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
-                         "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-!                        "REG_DEP_ANTI", "REG_DEP_OUTPUT" };
-  
-  /* Allocate an rtx vector of N elements.
---- 179,183 ----
-                         "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
-                         "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
-!                        "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_NOALIAS" };
-  
-  /* Allocate an rtx vector of N elements.
-diff -rcp2N gcc-2.7.2.3/rtl.h gcc-2.7.2.3.f.1/rtl.h
-*** gcc-2.7.2.3/rtl.h  Thu Jun 15 12:03:16 1995
---- gcc-2.7.2.3.f.1/rtl.h      Fri Jul 11 00:09:07 1997
-*************** enum reg_note { REG_DEAD = 1, REG_INC = 
-*** 349,353 ****
-               REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
-               REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-!              REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };
-  
-  /* Define macros to extract and insert the reg-note kind in an EXPR_LIST.  */
---- 349,353 ----
-               REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
-               REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
-!              REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_NOALIAS = 16 };
-  
-  /* Define macros to extract and insert the reg-note kind in an EXPR_LIST.  */
-*************** extern char *reg_note_name[];
-*** 432,436 ****
-  #define NOTE_INSN_FUNCTION_BEG -13
-  
-- 
-  #if 0 /* These are not used, and I don't know what they were for. --rms.  */
-  #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
---- 432,435 ----
-*************** extern char *note_insn_name[];
-*** 576,579 ****
---- 575,579 ----
-  /* For a TRAP_IF rtx, TRAP_CONDITION is an expression.  */
-  #define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx)
-+ #define TRAP_CODE(RTX) ((RTX)->fld[1].rtint)
-  
-  /* 1 in a SYMBOL_REF if it addresses this function's constants pool.  */
-*************** extern rtx eliminate_constant_term     PROTO
-*** 817,820 ****
---- 817,830 ----
-  extern rtx expand_complex_abs                PROTO((enum machine_mode, rtx, rtx, int));
-  extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
-+ extern int rtx_varies_p              PROTO((rtx));
-+ extern int may_trap_p                PROTO((rtx));
-+ extern int side_effects_p    PROTO((rtx));
-+ extern int volatile_refs_p   PROTO((rtx));
-+ extern int volatile_insn_p   PROTO((rtx));
-+ extern void remove_note              PROTO((rtx, rtx));
-+ extern void note_stores              PROTO((rtx, void (*)()));
-+ extern int refers_to_regno_p PROTO((int, int, rtx, rtx *));
-+ extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
-+ 
-  
-  /* Maximum number of parallel sets and clobbers in any insn in this fn.
-*************** extern rtx *regno_reg_rtx;
-*** 967,968 ****
---- 977,987 ----
-  
-  extern int rtx_to_tree_code  PROTO((enum rtx_code));
-+ 
-+ extern int true_dependence   PROTO((rtx, enum machine_mode, rtx, int (*)()));
-+ extern int read_dependence   PROTO((rtx, rtx));
-+ extern int anti_dependence   PROTO((rtx, rtx));
-+ extern int output_dependence PROTO((rtx, rtx));
-+ extern void init_alias_analysis      PROTO((void));
-+ extern void end_alias_analysis       PROTO((void));
-+ extern void mark_user_reg    PROTO((rtx));
-+ extern void mark_reg_pointer PROTO((rtx));
-diff -rcp2N gcc-2.7.2.3/sched.c gcc-2.7.2.3.f.1/sched.c
-*** gcc-2.7.2.3/sched.c        Thu Jun 15 12:06:39 1995
---- gcc-2.7.2.3.f.1/sched.c    Sun Aug 10 22:46:13 1997
-*************** Boston, MA 02111-1307, USA.  */
-*** 126,129 ****
---- 126,132 ----
-  #include "insn-attr.h"
-  
-+ extern char *reg_known_equiv_p;
-+ extern rtx *reg_known_value;
-+ 
-  #ifdef INSN_SCHEDULING
-  /* Arrays set up by scheduling for the same respective purposes as
-*************** static int *sched_reg_live_length;
-*** 143,146 ****
---- 146,150 ----
-     by splitting insns.  */
-  static rtx *reg_last_uses;
-+ static int reg_last_uses_size;
-  static rtx *reg_last_sets;
-  static regset reg_pending_sets;
-*************** struct sometimes
-*** 294,302 ****
-  
-  /* Forward declarations.  */
-- static rtx canon_rtx                 PROTO((rtx));
-- static int rtx_equal_for_memref_p    PROTO((rtx, rtx));
-- static rtx find_symbolic_term                PROTO((rtx));
-- static int memrefs_conflict_p                PROTO((int, rtx, int, rtx,
--                                             HOST_WIDE_INT));
-  static void add_dependence           PROTO((rtx, rtx, enum reg_note));
-  static void remove_dependence                PROTO((rtx, rtx));
---- 298,301 ----
-*************** static int priority                    PROTO((rtx));
-*** 314,318 ****
-  static void free_pending_lists               PROTO((void));
-  static void add_insn_mem_dependence  PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists              PROTO((rtx));
-  static void sched_analyze_1          PROTO((rtx, rtx));
-  static void sched_analyze_2          PROTO((rtx, rtx));
---- 313,317 ----
-  static void free_pending_lists               PROTO((void));
-  static void add_insn_mem_dependence  PROTO((rtx *, rtx *, rtx, rtx));
-! static void flush_pending_lists              PROTO((rtx, int));
-  static void sched_analyze_1          PROTO((rtx, rtx));
-  static void sched_analyze_2          PROTO((rtx, rtx));
-*************** void schedule_insns    PROTO((FILE *));
-*** 346,885 ****
-  #endif /* INSN_SCHEDULING */
-  \f
-- #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
-- 
-- /* Vector indexed by N giving the initial (unchanging) value known
--    for pseudo-register N.  */
-- static rtx *reg_known_value;
-- 
-- /* Vector recording for each reg_known_value whether it is due to a
--    REG_EQUIV note.  Future passes (viz., reload) may replace the
--    pseudo with the equivalent expression and so we account for the
--    dependences that would be introduced if that happens. */
-- /* ??? This is a problem only on the Convex.  The REG_EQUIV notes created in
--    assign_parms mention the arg pointer, and there are explicit insns in the
--    RTL that modify the arg pointer.  Thus we must ensure that such insns don't
--    get scheduled across each other because that would invalidate the REG_EQUIV
--    notes.  One could argue that the REG_EQUIV notes are wrong, but solving
--    the problem in the scheduler will likely give better code, so we do it
--    here.  */
-- static char *reg_known_equiv_p;
-- 
-- /* Indicates number of valid entries in reg_known_value.  */
-- static int reg_known_value_size;
-- 
-- static rtx
-- canon_rtx (x)
--      rtx x;
-- {
--   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
--       && REGNO (x) <= reg_known_value_size)
--     return reg_known_value[REGNO (x)];
--   else if (GET_CODE (x) == PLUS)
--     {
--       rtx x0 = canon_rtx (XEXP (x, 0));
--       rtx x1 = canon_rtx (XEXP (x, 1));
-- 
--       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
--      {
--        /* We can tolerate LO_SUMs being offset here; these
--           rtl are used for nothing other than comparisons.  */
--        if (GET_CODE (x0) == CONST_INT)
--          return plus_constant_for_output (x1, INTVAL (x0));
--        else if (GET_CODE (x1) == CONST_INT)
--          return plus_constant_for_output (x0, INTVAL (x1));
--        return gen_rtx (PLUS, GET_MODE (x), x0, x1);
--      }
--     }
--   return x;
-- }
-- 
-- /* Set up all info needed to perform alias analysis on memory references.  */
-- 
-- void
-- init_alias_analysis ()
-- {
--   int maxreg = max_reg_num ();
--   rtx insn;
--   rtx note;
--   rtx set;
-- 
--   reg_known_value_size = maxreg;
-- 
--   reg_known_value
--     = (rtx *) oballoc ((maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx))
--       - FIRST_PSEUDO_REGISTER;
--   bzero ((char *) (reg_known_value + FIRST_PSEUDO_REGISTER),
--       (maxreg-FIRST_PSEUDO_REGISTER) * sizeof (rtx));
-- 
--   reg_known_equiv_p
--     = (char *) oballoc ((maxreg -FIRST_PSEUDO_REGISTER) * sizeof (char))
--       - FIRST_PSEUDO_REGISTER;
--   bzero (reg_known_equiv_p + FIRST_PSEUDO_REGISTER,
--       (maxreg - FIRST_PSEUDO_REGISTER) * sizeof (char));
-- 
--   /* Fill in the entries with known constant values.  */
--   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
--     if ((set = single_set (insn)) != 0
--      && GET_CODE (SET_DEST (set)) == REG
--      && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
--      && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
--           && reg_n_sets[REGNO (SET_DEST (set))] == 1)
--          || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
--      && GET_CODE (XEXP (note, 0)) != EXPR_LIST)
--       {
--      int regno = REGNO (SET_DEST (set));
--      reg_known_value[regno] = XEXP (note, 0);
--      reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
--       }
-- 
--   /* Fill in the remaining entries.  */
--   while (--maxreg >= FIRST_PSEUDO_REGISTER)
--     if (reg_known_value[maxreg] == 0)
--       reg_known_value[maxreg] = regno_reg_rtx[maxreg];
-- }
-- 
-- /* Return 1 if X and Y are identical-looking rtx's.
-- 
--    We use the data in reg_known_value above to see if two registers with
--    different numbers are, in fact, equivalent.  */
-- 
-- static int
-- rtx_equal_for_memref_p (x, y)
--      rtx x, y;
-- {
--   register int i;
--   register int j;
--   register enum rtx_code code;
--   register char *fmt;
-- 
--   if (x == 0 && y == 0)
--     return 1;
--   if (x == 0 || y == 0)
--     return 0;
--   x = canon_rtx (x);
--   y = canon_rtx (y);
-- 
--   if (x == y)
--     return 1;
-- 
--   code = GET_CODE (x);
--   /* Rtx's of different codes cannot be equal.  */
--   if (code != GET_CODE (y))
--     return 0;
-- 
--   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
--      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
-- 
--   if (GET_MODE (x) != GET_MODE (y))
--     return 0;
-- 
--   /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively.  */
-- 
--   if (code == REG)
--     return REGNO (x) == REGNO (y);
--   if (code == LABEL_REF)
--     return XEXP (x, 0) == XEXP (y, 0);
--   if (code == SYMBOL_REF)
--     return XSTR (x, 0) == XSTR (y, 0);
-- 
--   /* For commutative operations, the RTX match if the operand match in any
--      order.  Also handle the simple binary and unary cases without a loop.  */
--   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
--     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
--           && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
--          || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
--              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
--   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
--     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
--          && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
--   else if (GET_RTX_CLASS (code) == '1')
--     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
-- 
--   /* Compare the elements.  If any pair of corresponding elements
--      fail to match, return 0 for the whole things.  */
-- 
--   fmt = GET_RTX_FORMAT (code);
--   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
--     {
--       switch (fmt[i])
--      {
--      case 'w':
--        if (XWINT (x, i) != XWINT (y, i))
--          return 0;
--        break;
-- 
--      case 'n':
--      case 'i':
--        if (XINT (x, i) != XINT (y, i))
--          return 0;
--        break;
-- 
--      case 'V':
--      case 'E':
--        /* Two vectors must have the same length.  */
--        if (XVECLEN (x, i) != XVECLEN (y, i))
--          return 0;
-- 
--        /* And the corresponding elements must match.  */
--        for (j = 0; j < XVECLEN (x, i); j++)
--          if (rtx_equal_for_memref_p (XVECEXP (x, i, j), XVECEXP (y, i, j)) == 0)
--            return 0;
--        break;
-- 
--      case 'e':
--        if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
--          return 0;
--        break;
-- 
--      case 'S':
--      case 's':
--        if (strcmp (XSTR (x, i), XSTR (y, i)))
--          return 0;
--        break;
-- 
--      case 'u':
--        /* These are just backpointers, so they don't matter.  */
--        break;
-- 
--      case '0':
--        break;
-- 
--        /* It is believed that rtx's at this level will never
--           contain anything but integers and other rtx's,
--           except for within LABEL_REFs and SYMBOL_REFs.  */
--      default:
--        abort ();
--      }
--     }
--   return 1;
-- }
-- 
-- /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
--    X and return it, or return 0 if none found.  */
-- 
-- static rtx
-- find_symbolic_term (x)
--      rtx x;
-- {
--   register int i;
--   register enum rtx_code code;
--   register char *fmt;
-- 
--   code = GET_CODE (x);
--   if (code == SYMBOL_REF || code == LABEL_REF)
--     return x;
--   if (GET_RTX_CLASS (code) == 'o')
--     return 0;
-- 
--   fmt = GET_RTX_FORMAT (code);
--   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
--     {
--       rtx t;
-- 
--       if (fmt[i] == 'e')
--      {
--        t = find_symbolic_term (XEXP (x, i));
--        if (t != 0)
--          return t;
--      }
--       else if (fmt[i] == 'E')
--      break;
--     }
--   return 0;
-- }
-- 
-- /* Return nonzero if X and Y (memory addresses) could reference the
--    same location in memory.  C is an offset accumulator.  When
--    C is nonzero, we are testing aliases between X and Y + C.
--    XSIZE is the size in bytes of the X reference,
--    similarly YSIZE is the size in bytes for Y.
-- 
--    If XSIZE or YSIZE is zero, we do not know the amount of memory being
--    referenced (the reference was BLKmode), so make the most pessimistic
--    assumptions.
-- 
--    We recognize the following cases of non-conflicting memory:
-- 
--      (1) addresses involving the frame pointer cannot conflict
--          with addresses involving static variables.
--      (2) static variables with different addresses cannot conflict.
-- 
--    Nice to notice that varying addresses cannot conflict with fp if no
--    local variables had their addresses taken, but that's too hard now.  */
-- 
-- /* ??? In Fortran, references to a array parameter can never conflict with
--    another array parameter.  */
-- 
-- static int
-- memrefs_conflict_p (xsize, x, ysize, y, c)
--      rtx x, y;
--      int xsize, ysize;
--      HOST_WIDE_INT c;
-- {
--   if (GET_CODE (x) == HIGH)
--     x = XEXP (x, 0);
--   else if (GET_CODE (x) == LO_SUM)
--     x = XEXP (x, 1);
--   else
--     x = canon_rtx (x);
--   if (GET_CODE (y) == HIGH)
--     y = XEXP (y, 0);
--   else if (GET_CODE (y) == LO_SUM)
--     y = XEXP (y, 1);
--   else
--     y = canon_rtx (y);
-- 
--   if (rtx_equal_for_memref_p (x, y))
--     return (xsize == 0 || ysize == 0 ||
--          (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- 
--   if (y == frame_pointer_rtx || y == hard_frame_pointer_rtx
--       || y == stack_pointer_rtx)
--     {
--       rtx t = y;
--       int tsize = ysize;
--       y = x; ysize = xsize;
--       x = t; xsize = tsize;
--     }
-- 
--   if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
--       || x == stack_pointer_rtx)
--     {
--       rtx y1;
-- 
--       if (CONSTANT_P (y))
--      return 0;
-- 
--       if (GET_CODE (y) == PLUS
--        && canon_rtx (XEXP (y, 0)) == x
--        && (y1 = canon_rtx (XEXP (y, 1)))
--        && GET_CODE (y1) == CONST_INT)
--      {
--        c += INTVAL (y1);
--        return (xsize == 0 || ysize == 0
--                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--      }
-- 
--       if (GET_CODE (y) == PLUS
--        && (y1 = canon_rtx (XEXP (y, 0)))
--        && CONSTANT_P (y1))
--      return 0;
-- 
--       return 1;
--     }
-- 
--   if (GET_CODE (x) == PLUS)
--     {
--       /* The fact that X is canonicalized means that this
--       PLUS rtx is canonicalized.  */
--       rtx x0 = XEXP (x, 0);
--       rtx x1 = XEXP (x, 1);
-- 
--       if (GET_CODE (y) == PLUS)
--      {
--        /* The fact that Y is canonicalized means that this
--           PLUS rtx is canonicalized.  */
--        rtx y0 = XEXP (y, 0);
--        rtx y1 = XEXP (y, 1);
-- 
--        if (rtx_equal_for_memref_p (x1, y1))
--          return memrefs_conflict_p (xsize, x0, ysize, y0, c);
--        if (rtx_equal_for_memref_p (x0, y0))
--          return memrefs_conflict_p (xsize, x1, ysize, y1, c);
--        if (GET_CODE (x1) == CONST_INT)
--          if (GET_CODE (y1) == CONST_INT)
--            return memrefs_conflict_p (xsize, x0, ysize, y0,
--                                       c - INTVAL (x1) + INTVAL (y1));
--          else
--            return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
--        else if (GET_CODE (y1) == CONST_INT)
--          return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
-- 
--        /* Handle case where we cannot understand iteration operators,
--           but we notice that the base addresses are distinct objects.  */
--        x = find_symbolic_term (x);
--        if (x == 0)
--          return 1;
--        y = find_symbolic_term (y);
--        if (y == 0)
--          return 1;
--        return rtx_equal_for_memref_p (x, y);
--      }
--       else if (GET_CODE (x1) == CONST_INT)
--      return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
--     }
--   else if (GET_CODE (y) == PLUS)
--     {
--       /* The fact that Y is canonicalized means that this
--       PLUS rtx is canonicalized.  */
--       rtx y0 = XEXP (y, 0);
--       rtx y1 = XEXP (y, 1);
-- 
--       if (GET_CODE (y1) == CONST_INT)
--      return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
--       else
--      return 1;
--     }
-- 
--   if (GET_CODE (x) == GET_CODE (y))
--     switch (GET_CODE (x))
--       {
--       case MULT:
--      {
--        /* Handle cases where we expect the second operands to be the
--           same, and check only whether the first operand would conflict
--           or not.  */
--        rtx x0, y0;
--        rtx x1 = canon_rtx (XEXP (x, 1));
--        rtx y1 = canon_rtx (XEXP (y, 1));
--        if (! rtx_equal_for_memref_p (x1, y1))
--          return 1;
--        x0 = canon_rtx (XEXP (x, 0));
--        y0 = canon_rtx (XEXP (y, 0));
--        if (rtx_equal_for_memref_p (x0, y0))
--          return (xsize == 0 || ysize == 0
--                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
-- 
--        /* Can't properly adjust our sizes.  */
--        if (GET_CODE (x1) != CONST_INT)
--          return 1;
--        xsize /= INTVAL (x1);
--        ysize /= INTVAL (x1);
--        c /= INTVAL (x1);
--        return memrefs_conflict_p (xsize, x0, ysize, y0, c);
--      }
--       }
-- 
--   if (CONSTANT_P (x))
--     {
--       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
--      {
--        c += (INTVAL (y) - INTVAL (x));
--        return (xsize == 0 || ysize == 0
--                || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
--      }
-- 
--       if (GET_CODE (x) == CONST)
--      {
--        if (GET_CODE (y) == CONST)
--          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
--                                     ysize, canon_rtx (XEXP (y, 0)), c);
--        else
--          return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
--                                     ysize, y, c);
--      }
--       if (GET_CODE (y) == CONST)
--      return memrefs_conflict_p (xsize, x, ysize,
--                                 canon_rtx (XEXP (y, 0)), c);
-- 
--       if (CONSTANT_P (y))
--      return (rtx_equal_for_memref_p (x, y)
--              && (xsize == 0 || ysize == 0
--                  || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0)));
-- 
--       return 1;
--     }
--   return 1;
-- }
-- 
-- /* Functions to compute memory dependencies.
-- 
--    Since we process the insns in execution order, we can build tables
--    to keep track of what registers are fixed (and not aliased), what registers
--    are varying in known ways, and what registers are varying in unknown
--    ways.
-- 
--    If both memory references are volatile, then there must always be a
--    dependence between the two references, since their order can not be
--    changed.  A volatile and non-volatile reference can be interchanged
--    though. 
-- 
--    A MEM_IN_STRUCT reference at a non-QImode varying address can never
--    conflict with a non-MEM_IN_STRUCT reference at a fixed address.   We must
--    allow QImode aliasing because the ANSI C standard allows character
--    pointers to alias anything.  We are assuming that characters are
--    always QImode here.  */
-- 
-- /* Read dependence: X is read after read in MEM takes place.  There can
--    only be a dependence here if both reads are volatile.  */
-- 
-- int
-- read_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
-- }
-- 
-- /* True dependence: X is read after store in MEM takes place.  */
-- 
-- int
-- true_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   /* If X is an unchanging read, then it can't possibly conflict with any
--      non-unchanging store.  It may conflict with an unchanging write though,
--      because there may be a single store to this address to initialize it.
--      Just fall through to the code below to resolve the case where we have
--      both an unchanging read and an unchanging write.  This won't handle all
--      cases optimally, but the possible performance loss should be
--      negligible.  */
--   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
--     return 0;
-- 
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- 
-- /* Anti dependence: X is written after read in MEM takes place.  */
-- 
-- int
-- anti_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   /* If MEM is an unchanging read, then it can't possibly conflict with
--      the store to X, because there is at most one store to MEM, and it must
--      have occurred somewhere before MEM.  */
--   if (RTX_UNCHANGING_P (mem))
--     return 0;
-- 
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- 
-- /* Output dependence: X is written after store in MEM takes place.  */
-- 
-- int
-- output_dependence (mem, x)
--      rtx mem;
--      rtx x;
-- {
--   return ((MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
--        || (memrefs_conflict_p (SIZE_FOR_MODE (mem), XEXP (mem, 0),
--                                SIZE_FOR_MODE (x), XEXP (x, 0), 0)
--            && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem)
--                  && GET_MODE (mem) != QImode
--                  && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x))
--            && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x)
--                  && GET_MODE (x) != QImode
--                  && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem))));
-- }
-- \f
-  /* Helper functions for instruction scheduling.  */
-  
---- 345,348 ----
-*************** add_insn_mem_dependence (insn_list, mem_
-*** 1609,1621 ****
-  \f
-  /* Make a dependency between every memory reference on the pending lists
-!    and INSN, thus flushing the pending lists.  */
-  
-  static void
-! flush_pending_lists (insn)
-       rtx insn;
-  {
-    rtx link;
-  
-!   while (pending_read_insns)
-      {
-        add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
---- 1072,1086 ----
-  \f
-  /* Make a dependency between every memory reference on the pending lists
-!    and INSN, thus flushing the pending lists.  If ONLY_WRITE, don't flush
-!    the read list.  */
-  
-  static void
-! flush_pending_lists (insn, only_write)
-       rtx insn;
-+      int only_write;
-  {
-    rtx link;
-  
-!   while (pending_read_insns && ! only_write)
-      {
-        add_dependence (insn, XEXP (pending_read_insns, 0), REG_DEP_ANTI);
-*************** sched_analyze_1 (x, insn)
-*** 1746,1750 ****
-            this flush occurs 8 times for sparc, and 10 times for m88k using
-            the number 32.  */
-!        flush_pending_lists (insn);
-       }
-        else
---- 1211,1215 ----
-            this flush occurs 8 times for sparc, and 10 times for m88k using
-            the number 32.  */
-!        flush_pending_lists (insn, 0);
-       }
-        else
-*************** sched_analyze_2 (x, insn)
-*** 1922,1926 ****
-           /* If a dependency already exists, don't create a new one.  */
-           if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-!            if (true_dependence (XEXP (pending_mem, 0), x))
-               add_dependence (insn, XEXP (pending, 0), 0);
-  
---- 1387,1392 ----
-           /* If a dependency already exists, don't create a new one.  */
-           if (! find_insn_list (XEXP (pending, 0), LOG_LINKS (insn)))
-!            if (true_dependence (XEXP (pending_mem, 0), VOIDmode,
-!                                 x, rtx_varies_p))
-               add_dependence (insn, XEXP (pending, 0), 0);
-  
-*************** sched_analyze_2 (x, insn)
-*** 1968,1972 ****
-           reg_pending_sets_all = 1;
-  
-!          flush_pending_lists (insn);
-         }
-  
---- 1434,1438 ----
-           reg_pending_sets_all = 1;
-  
-!          flush_pending_lists (insn, 0);
-         }
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2021,2025 ****
-    register RTX_CODE code = GET_CODE (x);
-    rtx link;
-!   int maxreg = max_reg_num ();
-    int i;
-  
---- 1487,1491 ----
-    register RTX_CODE code = GET_CODE (x);
-    rtx link;
-!   int maxreg = reg_last_uses_size;
-    int i;
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2058,2062 ****
-    if (loop_notes)
-      {
-!       int max_reg = max_reg_num ();
-        rtx link;
-  
---- 1524,1528 ----
-    if (loop_notes)
-      {
-!       int max_reg = reg_last_uses_size;
-        rtx link;
-  
-*************** sched_analyze_insn (x, insn, loop_notes)
-*** 2072,2076 ****
-        reg_pending_sets_all = 1;
-  
-!       flush_pending_lists (insn);
-  
-        link = loop_notes;
---- 1538,1542 ----
-        reg_pending_sets_all = 1;
-  
-!       flush_pending_lists (insn, 0);
-  
-        link = loop_notes;
-*************** sched_analyze (head, tail)
-*** 2202,2207 ****
-             && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
-           {
-!            int max_reg = max_reg_num ();
-!            for (i = 0; i < max_reg; i++)
-               {
-                 for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
---- 1668,1672 ----
-             && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_SETJMP)
-           {
-!            for (i = 0; i < reg_last_uses_size; i++)
-               {
-                 for (u = reg_last_uses[i]; u; u = XEXP (u, 1))
-*************** sched_analyze (head, tail)
-*** 2247,2259 ****
-         loop_notes = 0;
-  
-!        /* We don't need to flush memory for a function call which does
-!           not involve memory.  */
-!        if (! CONST_CALL_P (insn))
-!          {
-!            /* In the absence of interprocedural alias analysis,
-!               we must flush all pending reads and writes, and
-!               start new dependencies starting from here.  */
-!            flush_pending_lists (insn);
-!          }
-  
-         /* Depend this function call (actually, the user of this
---- 1712,1720 ----
-         loop_notes = 0;
-  
-!        /* In the absence of interprocedural alias analysis, we must flush
-!           all pending reads and writes, and start new dependencies starting
-!           from here.  But only flush writes for constant calls (which may
-!           be passed a pointer to something we haven't written yet).  */
-!        flush_pending_lists (insn, CONST_CALL_P (insn));
-  
-         /* Depend this function call (actually, the user of this
-*************** sched_analyze (head, tail)
-*** 2264,2270 ****
-        else if (GET_CODE (insn) == NOTE
-              && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-!                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
-!      loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-!                            GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-  
-        if (insn == tail)
---- 1725,1736 ----
-        else if (GET_CODE (insn) == NOTE
-              && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-!                 || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END
-!                 || (NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP
-!                     && GET_CODE (PREV_INSN (insn)) != CALL_INSN)))
-!      {
-!        loop_notes = gen_rtx (EXPR_LIST, REG_DEAD,
-!                              GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes);
-!        CONST_CALL_P (loop_notes) = CONST_CALL_P (insn);
-!      }
-  
-        if (insn == tail)
-*************** sched_note_set (b, x, death)
-*** 2372,2380 ****
-  
-  #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-!   do { if ((NEW_READY) - (OLD_READY) == 1)                           \
-!       swap_sort (READY, NEW_READY);                                  \
-!        else if ((NEW_READY) - (OLD_READY) > 1)                               \
-!       qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); }   \
-!   while (0)
-  
-  /* Returns a positive value if y is preferred; returns a negative value if
---- 1838,1845 ----
-  
-  #define SCHED_SORT(READY, NEW_READY, OLD_READY) \
-!   if ((NEW_READY) - (OLD_READY) == 1)                                        \
-!     swap_sort (READY, NEW_READY);                                    \
-!   else if ((NEW_READY) - (OLD_READY) > 1)                            \
-!     qsort (READY, NEW_READY, sizeof (rtx), rank_for_schedule); else  \
-  
-  /* Returns a positive value if y is preferred; returns a negative value if
-*************** reemit_notes (insn, last)
-*** 3128,3132 ****
-       {
-         if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-!          emit_note_after (INTVAL (XEXP (note, 0)), insn);
-         else
-           last = emit_note_before (INTVAL (XEXP (note, 0)), last);
---- 2593,2598 ----
-       {
-         if (INTVAL (XEXP (note, 0)) == NOTE_INSN_SETJMP)
-!          CONST_CALL_P (emit_note_after (INTVAL (XEXP (note, 0)), insn))
-!            = CONST_CALL_P (note);
-         else
-           last = emit_note_before (INTVAL (XEXP (note, 0)), last);
-*************** schedule_block (b, file)
-*** 3174,3178 ****
-            b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-  
-!   i = max_reg_num ();
-    reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
-    bzero ((char *) reg_last_uses, i * sizeof (rtx));
---- 2640,2644 ----
-            b, INSN_UID (basic_block_head[b]), INSN_UID (basic_block_end[b]));
-  
-!   reg_last_uses_size = i = max_reg_num ();
-    reg_last_uses = (rtx *) alloca (i * sizeof (rtx));
-    bzero ((char *) reg_last_uses, i * sizeof (rtx));
-*************** schedule_block (b, file)
-*** 3800,3804 ****
-                    made live again later.  */
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if (call_used_regs[i] || global_regs[i])
-                     {
-                       register int offset = i / REGSET_ELT_BITS;
---- 3266,3271 ----
-                    made live again later.  */
-                 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-!                  if ((call_used_regs[i] && ! fixed_regs[i])
-!                      || global_regs[i])
-                     {
-                       register int offset = i / REGSET_ELT_BITS;
-*************** schedule_insns (dump_file)
-*** 4717,4721 ****
-        bcopy ((char *) reg_n_deaths, (char *) sched_reg_n_deaths,
-            max_regno * sizeof (short));
--       init_alias_analysis ();
-      }
-    else
---- 4184,4187 ----
-*************** schedule_insns (dump_file)
-*** 4726,4732 ****
-        bb_dead_regs = 0;
-        bb_live_regs = 0;
--       if (! flag_schedule_insns)
--      init_alias_analysis ();
-      }
-  
-    if (write_symbols != NO_DEBUG)
---- 4192,4213 ----
-        bb_dead_regs = 0;
-        bb_live_regs = 0;
-      }
-+   init_alias_analysis ();
-+ #if 0
-+   if (dump_file)
-+     {
-+       extern rtx *reg_base_value;
-+       extern int reg_base_value_size;
-+       int i;
-+       for (i = 0; i < reg_base_value_size; i++)
-+      if (reg_base_value[i])
-+        {
-+          fprintf (dump_file, ";; reg_base_value[%d] = ", i);
-+          print_rtl (dump_file, reg_base_value[i]);
-+          fputc ('\n', dump_file);
-+        }
-+     }
-+ #endif
-+ 
-  
-    if (write_symbols != NO_DEBUG)
-diff -rcp2N gcc-2.7.2.3/sdbout.c gcc-2.7.2.3.f.1/sdbout.c
-*** gcc-2.7.2.3/sdbout.c       Thu Jun 15 12:07:11 1995
---- gcc-2.7.2.3.f.1/sdbout.c   Mon Aug 11 05:42:22 1997
-*************** plain_type_1 (type, level)
-*** 539,543 ****
-         sdb_dims[sdb_n_dims++]
-           = (TYPE_DOMAIN (type)
-!             ? TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1
-              : 0);
-       return PUSH_DERIVED_LEVEL (DT_ARY, m);
---- 539,546 ----
-         sdb_dims[sdb_n_dims++]
-           = (TYPE_DOMAIN (type)
-!             && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-!             && TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST
-!             ? (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
-!                - TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (type))) + 1)
-              : 0);
-       return PUSH_DERIVED_LEVEL (DT_ARY, m);
-diff -rcp2N gcc-2.7.2.3/stmt.c gcc-2.7.2.3.f.1/stmt.c
-*** gcc-2.7.2.3/stmt.c Tue Sep 12 23:01:54 1995
---- gcc-2.7.2.3.f.1/stmt.c     Fri Aug 29 07:52:05 1997
-*************** fixup_gotos (thisblock, stack_level, cle
-*** 1244,1249 ****
-             poplevel (1, 0, 0);
-             end_sequence ();
-!            f->before_jump
-!              = emit_insns_after (cleanup_insns, f->before_jump);
-  
-             f->cleanup_list_list = TREE_CHAIN (lists);
---- 1244,1250 ----
-             poplevel (1, 0, 0);
-             end_sequence ();
-!            if (cleanup_insns != 0)
-!              f->before_jump
-!                = emit_insns_after (cleanup_insns, f->before_jump);
-  
-             f->cleanup_list_list = TREE_CHAIN (lists);
-*************** expand_expr_stmt (exp)
-*** 1721,1725 ****
-  
-    last_expr_type = TREE_TYPE (exp);
-!   if (! flag_syntax_only)
-      last_expr_value = expand_expr (exp,
-                                  (expr_stmts_for_value
---- 1722,1726 ----
-  
-    last_expr_type = TREE_TYPE (exp);
-!   if (! flag_syntax_only || expr_stmts_for_value)
-      last_expr_value = expand_expr (exp,
-                                  (expr_stmts_for_value
-*************** expand_end_bindings (vars, mark_ends, do
-*** 3160,3163 ****
---- 3161,3169 ----
-  #endif
-  
-+ #ifdef HAVE_nonlocal_goto_receiver
-+       if (HAVE_nonlocal_goto_receiver)
-+      emit_insn (gen_nonlocal_goto_receiver ());
-+ #endif
-+ 
-        /* The handler expects the desired label address in the static chain
-        register.  It tests the address and does an appropriate jump
-*************** expand_decl (decl)
-*** 3369,3395 ****
-       = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-  
-!       if (TREE_CODE (type) == COMPLEX_TYPE)
-!      {
-!        rtx realpart, imagpart;
-!        enum machine_mode partmode = TYPE_MODE (TREE_TYPE (type));
-  
-!        /* For a complex type variable, make a CONCAT of two pseudos
-!           so that the real and imaginary parts
-!           can be allocated separately.  */
-!        realpart = gen_reg_rtx (partmode);
-!        REG_USERVAR_P (realpart) = 1;
-!        imagpart = gen_reg_rtx (partmode);
-!        REG_USERVAR_P (imagpart) = 1;
-!        DECL_RTL (decl) = gen_rtx (CONCAT, reg_mode, realpart, imagpart);
-!      }
-!       else
-!      {
-!        DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-!        if (TREE_CODE (type) == POINTER_TYPE)
-!          mark_reg_pointer (DECL_RTL (decl));
-!        REG_USERVAR_P (DECL_RTL (decl)) = 1;
-!      }
-      }
-!   else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
-      {
-        /* Variable of fixed size that goes on the stack.  */
---- 3375,3389 ----
-       = promote_mode (type, DECL_MODE (decl), &unsignedp, 0);
-  
-!       DECL_RTL (decl) = gen_reg_rtx (reg_mode);
-!       mark_user_reg (DECL_RTL (decl));
-  
-!       if (TREE_CODE (type) == POINTER_TYPE)
-!      mark_reg_pointer (DECL_RTL (decl));
-      }
-!   else if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
-!         && ! (flag_stack_check && ! STACK_CHECK_BUILTIN
-!               && (TREE_INT_CST_HIGH (DECL_SIZE (decl)) != 0
-!                   || (TREE_INT_CST_LOW (DECL_SIZE (decl))
-!                       > STACK_CHECK_MAX_VAR_SIZE * BITS_PER_UNIT))))
-      {
-        /* Variable of fixed size that goes on the stack.  */
-*************** expand_decl (decl)
-*** 3462,3468 ****
-        free_temp_slots ();
-  
-!       /* Allocate space on the stack for the variable.  */
-        address = allocate_dynamic_stack_space (size, NULL_RTX,
-!                                            DECL_ALIGN (decl));
-  
-        /* Reference the variable indirect through that rtx.  */
---- 3456,3465 ----
-        free_temp_slots ();
-  
-!       /* Allocate space on the stack for the variable.  Note that
-!       DECL_ALIGN says how the variable is to be aligned and we 
-!       cannot use it to conclude anything about the alignment of
-!       the size.  */
-        address = allocate_dynamic_stack_space (size, NULL_RTX,
-!                                            TYPE_ALIGN (TREE_TYPE (decl)));
-  
-        /* Reference the variable indirect through that rtx.  */
-*************** pushcase_range (value1, value2, converte
-*** 4155,4158 ****
---- 4152,4159 ----
-      return 1;
-  
-+   /* Fail if the range is empty.  */
-+   if (tree_int_cst_lt (value2, value1))
-+     return 4;
-+ 
-    if (stack_block_stack
-        && stack_block_stack->depth > case_stack->depth)
-*************** pushcase_range (value1, value2, converte
-*** 4189,4197 ****
-    /* Convert VALUEs to type in which the comparisons are nominally done.  */
-    if (value1 == 0)  /* Negative infinity. */
-!     value1 = TYPE_MIN_VALUE(index_type);
-    value1 = (*converter) (nominal_type, value1);
-  
-    if (value2 == 0)  /* Positive infinity. */
-!     value2 = TYPE_MAX_VALUE(index_type);
-    value2 = (*converter) (nominal_type, value2);
-  
---- 4190,4198 ----
-    /* Convert VALUEs to type in which the comparisons are nominally done.  */
-    if (value1 == 0)  /* Negative infinity. */
-!     value1 = TYPE_MIN_VALUE (index_type);
-    value1 = (*converter) (nominal_type, value1);
-  
-    if (value2 == 0)  /* Positive infinity. */
-!     value2 = TYPE_MAX_VALUE (index_type);
-    value2 = (*converter) (nominal_type, value2);
-  
-*************** pushcase_range (value1, value2, converte
-*** 4202,4209 ****
-    if (! int_fits_type_p (value2, index_type))
-      return 3;
-- 
--   /* Fail if the range is empty.  */
--   if (tree_int_cst_lt (value2, value1))
--     return 4;
-  
-    /* If the bounds are equal, turn this into the one-value case.  */
---- 4203,4206 ----
-diff -rcp2N gcc-2.7.2.3/stor-layout.c gcc-2.7.2.3.f.1/stor-layout.c
-*** gcc-2.7.2.3/stor-layout.c  Sat Jun 29 16:26:51 1996
---- gcc-2.7.2.3.f.1/stor-layout.c      Mon Aug 11 10:47:50 1997
-*************** layout_decl (decl, known_align)
-*** 255,259 ****
-        if (maximum_field_alignment != 0)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-!       else if (flag_pack_struct)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
-      }
---- 255,259 ----
-        if (maximum_field_alignment != 0)
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
-!       else if (DECL_PACKED (decl))
-       DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
-      }
-*************** layout_decl (decl, known_align)
-*** 261,265 ****
-    if (DECL_BIT_FIELD (decl)
-        && TYPE_SIZE (type) != 0
-!       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
-      {
-        register enum machine_mode xmode
---- 261,266 ----
-    if (DECL_BIT_FIELD (decl)
-        && TYPE_SIZE (type) != 0
-!       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-!       && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
-      {
-        register enum machine_mode xmode
-*************** layout_decl (decl, known_align)
-*** 278,281 ****
---- 279,291 ----
-      }
-  
-+   /* Turn off DECL_BIT_FIELD if we won't need it set.  */
-+   if (DECL_BIT_FIELD (decl) && TYPE_MODE (type) == BLKmode
-+       && known_align % TYPE_ALIGN (type) == 0
-+       && DECL_SIZE (decl) != 0
-+       && (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
-+        || (TREE_INT_CST_LOW (DECL_SIZE (decl)) % BITS_PER_UNIT) == 0)
-+       && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
-+     DECL_BIT_FIELD (decl) = 0;
-+ 
-    /* Evaluate nonconstant size only once, either now or as soon as safe.  */
-    if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-*************** layout_record (rec)
-*** 380,384 ****
-             if (maximum_field_alignment != 0)
-               type_align = MIN (type_align, maximum_field_alignment);
-!            else if (flag_pack_struct)
-               type_align = MIN (type_align, BITS_PER_UNIT);
-  
---- 390,394 ----
-             if (maximum_field_alignment != 0)
-               type_align = MIN (type_align, maximum_field_alignment);
-!            else if (TYPE_PACKED (rec))
-               type_align = MIN (type_align, BITS_PER_UNIT);
-  
-*************** layout_record (rec)
-*** 422,428 ****
-         && DECL_BIT_FIELD_TYPE (field)
-         && !DECL_PACKED (field)
--        /* If #pragma pack is in effect, turn off this feature.  */
-         && maximum_field_alignment == 0
--        && !flag_pack_struct
-         && !integer_zerop (DECL_SIZE (field)))
-       {
---- 432,436 ----
-*************** layout_record (rec)
-*** 459,463 ****
-         if (maximum_field_alignment != 0)
-           type_align = MIN (type_align, maximum_field_alignment);
-!        else if (flag_pack_struct)
-           type_align = MIN (type_align, BITS_PER_UNIT);
-  
---- 467,471 ----
-         if (maximum_field_alignment != 0)
-           type_align = MIN (type_align, maximum_field_alignment);
-!        else if (TYPE_PACKED (rec))
-           type_align = MIN (type_align, BITS_PER_UNIT);
-  
-*************** layout_record (rec)
-*** 500,505 ****
-         /* Do nothing.  */;
-       else if (TREE_CODE (dsize) == INTEGER_CST
-                && TREE_INT_CST_HIGH (dsize) == 0
-!               && TREE_INT_CST_LOW (dsize) + const_size > const_size)
-         /* Use const_size if there's no overflow.  */
-         const_size += TREE_INT_CST_LOW (dsize);
---- 508,514 ----
-         /* Do nothing.  */;
-       else if (TREE_CODE (dsize) == INTEGER_CST
-+               && ! TREE_CONSTANT_OVERFLOW (dsize)
-                && TREE_INT_CST_HIGH (dsize) == 0
-!               && TREE_INT_CST_LOW (dsize) + const_size >= const_size)
-         /* Use const_size if there's no overflow.  */
-         const_size += TREE_INT_CST_LOW (dsize);
-*************** get_best_mode (bitsize, bitpos, align, l
-*** 1172,1175 ****
---- 1181,1192 ----
-    enum machine_mode mode;
-    int unit;
-+ 
-+   if (bitpos < 0)
-+     {
-+       /* For correct calculations and convenience, bias negative bitpos
-+       to become a non-negative value that is [1,bitsize], such that
-+       the relative bit offset to a multiple of bitsize is preserved.  */
-+       bitpos = bitsize - ((-bitpos) % bitsize);
-+     }
-  
-    /* Find the narrowest integer mode that contains the bit field.  */
-diff -rcp2N gcc-2.7.2.3/stupid.c gcc-2.7.2.3.f.1/stupid.c
-*** gcc-2.7.2.3/stupid.c       Sun Oct 29 12:45:22 1995
---- gcc-2.7.2.3.f.1/stupid.c   Sun Aug 10 22:46:01 1997
-*************** static int *uid_suid;
-*** 66,69 ****
---- 66,74 ----
-  static int last_call_suid;
-  
-+ /* Record the suid of the last NOTE_INSN_SETJMP
-+    so we can tell whether a pseudo reg crosses any setjmp.  */
-+ 
-+ static int last_setjmp_suid;
-+ 
-  /* Element N is suid of insn where life span of pseudo reg N ends.
-     Element is  0 if register N has not been seen yet on backward scan.  */
-*************** static char *regs_live;
-*** 89,92 ****
---- 94,101 ----
-  static char *regs_change_size;
-  
-+ /* Indexed by reg number, nonzero if reg crosses a setjmp.  */
-+ 
-+ static char *regs_crosses_setjmp;
-+ 
-  /* Indexed by insn's suid, the set of hard regs live after that insn.  */
-  
-*************** stupid_life_analysis (f, nregs, file)
-*** 149,152 ****
---- 158,162 ----
-  
-    last_call_suid = i + 1;
-+   last_setjmp_suid = i + 1;
-    max_suid = i + 1;
-  
-*************** stupid_life_analysis (f, nregs, file)
-*** 167,170 ****
---- 177,183 ----
-    bzero ((char *) regs_change_size, nregs * sizeof (char));
-  
-+   regs_crosses_setjmp = (char *) alloca (nregs * sizeof (char));
-+   bzero ((char *) regs_crosses_setjmp, nregs * sizeof (char));
-+ 
-    reg_renumber = (short *) oballoc (nregs * sizeof (short));
-    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-*************** stupid_life_analysis (f, nregs, file)
-*** 216,219 ****
---- 229,236 ----
-       stupid_mark_refs (PATTERN (insn), insn);
-  
-+       if (GET_CODE (insn) == NOTE
-+        && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
-+      last_setjmp_suid = INSN_SUID (insn);
-+ 
-        /* Mark all call-clobbered regs as live after each call insn
-        so that a pseudo whose life span includes this insn
-*************** stupid_life_analysis (f, nregs, file)
-*** 254,259 ****
-        register int r = reg_order[i];
-  
-!       /* Some regnos disappear from the rtl.  Ignore them to avoid crash.  */
-!       if (regno_reg_rtx[r] == 0)
-       continue;
-  
---- 271,277 ----
-        register int r = reg_order[i];
-  
-!       /* Some regnos disappear from the rtl.  Ignore them to avoid crash. 
-!       Also don't allocate registers that cross a setjmp.  */
-!       if (regno_reg_rtx[r] == 0 || regs_crosses_setjmp[r])
-       continue;
-  
-*************** stupid_reg_compare (r1p, r2p)
-*** 309,314 ****
-     that can hold a value of machine-mode MODE
-       (but actually we test only the first of the block for holding MODE)
-!    currently free from after insn whose suid is BIRTH
-!    through the insn whose suid is DEATH,
-     and return the number of the first of them.
-     Return -1 if such a block cannot be found.
---- 327,332 ----
-     that can hold a value of machine-mode MODE
-       (but actually we test only the first of the block for holding MODE)
-!    currently free from after insn whose suid is BORN_INSN
-!    through the insn whose suid is DEAD_INSN,
-     and return the number of the first of them.
-     Return -1 if such a block cannot be found.
-*************** stupid_find_reg (call_preserved, class, 
-*** 338,341 ****
---- 356,366 ----
-  #endif
-  
-+   /* If this register's life is more than 5,000 insns, we probably
-+      can't allocate it, so don't waste the time trying.  This avoid
-+      quadratic behavior on programs that have regularly-occurring
-+      SAVE_EXPRs.  */
-+   if (dead_insn > born_insn + 5000)
-+     return -1;
-+ 
-    COPY_HARD_REG_SET (used,
-                    call_preserved ? call_used_reg_set : fixed_reg_set);
-*************** stupid_mark_refs (x, insn)
-*** 488,491 ****
---- 513,519 ----
-             if (last_call_suid < reg_where_dead[regno])
-               reg_n_calls_crossed[regno] += 1;
-+ 
-+            if (last_setjmp_suid < reg_where_dead[regno])
-+              regs_crosses_setjmp[regno] = 1;
-           }
-       }
-diff -rcp2N gcc-2.7.2.3/tm.texi gcc-2.7.2.3.f.1/tm.texi
-*** gcc-2.7.2.3/tm.texi        Sun Sep  3 12:59:01 1995
---- gcc-2.7.2.3.f.1/tm.texi    Fri Aug 29 07:52:19 1997
-*************** This describes the stack layout and call
-*** 1951,1954 ****
---- 1951,1955 ----
-  @menu
-  * Frame Layout::
-+ * Stack Checking::
-  * Frame Registers::
-  * Elimination::                      
-*************** This discusses registers that address th
-*** 2070,2073 ****
---- 2071,2156 ----
-  @table @code
-  @findex STACK_POINTER_REGNUM
-+ @end table
-+ 
-+ @node Stack Checking
-+ @subsection Specifying How Stack Checking is Done
-+ 
-+ GNU CC will check that stack references are within the boundaries of
-+ the stack, if the @samp{-fstack-check} is specified, in one of three ways:
-+ 
-+ @enumerate
-+ @item
-+ If the value of the @code{STACK_CHECK_BUILTIN} macro is nonzero, GNU CC
-+ will assume that you have arranged for stack checking to be done at
-+ appropriate places in the configuration files, e.g., in
-+ @code{FUNCTION_PROLOGUE}.  GNU CC will do not other special processing.
-+ 
-+ @item
-+ If @code{STACK_CHECK_BUILTIN} is zero and you defined a named pattern
-+ called @code{check_stack} in your @file{md} file, GNU CC will call that
-+ pattern with one argument which is the address to compare the stack
-+ value against.  You must arrange for this pattern to report an error if
-+ the stack pointer is out of range.
-+ 
-+ @item
-+ If neither of the above are true, GNU CC will generate code to periodically
-+ ``probe'' the stack pointer using the values of the macros defined below.
-+ @end enumerate
-+ 
-+ Normally, you will use the default values of these macros, so GNU CC
-+ will use the third approach.
-+ 
-+ @table @code
-+ @findex STACK_CHECK_BUILTIN
-+ @item STACK_CHECK_BUILTIN
-+ A nonzero value if stack checking is done by the configuration files in a
-+ machine-dependent manner.  You should define this macro if stack checking 
-+ is require by the ABI of your machine or if you would like to have to stack 
-+ checking in some more efficient way than GNU CC's portable approach.
-+ The default value of this macro is zero.
-+ 
-+ @findex STACK_CHECK_PROBE_INTERVAL
-+ @item STACK_CHECK_PROBE_INTERVAL
-+ An integer representing the interval at which GNU CC must generate stack
-+ probe instructions.  You will normally define this macro to be no larger
-+ than the size of the ``guard pages'' at the end of a stack area.  The
-+ default value of 4096 is suitable for most systems.
-+ 
-+ @findex STACK_CHECK_PROBE_LOAD
-+ @item STACK_CHECK_PROBE_LOAD
-+ A integer which is nonzero if GNU CC should perform the stack probe 
-+ as a load instruction and zero if GNU CC should use a store instruction.
-+ The default is zero, which is the most efficient choice on most systems.
-+ 
-+ @findex STACK_CHECK_PROTECT
-+ @item STACK_CHECK_PROTECT
-+ The number of bytes of stack needed to recover from a stack overflow,
-+ for languages where such a recovery is supported.  The default value of
-+ 75 words should be adequate for most machines.
-+ 
-+ @findex STACK_CHECK_MAX_FRAME_SIZE
-+ @item STACK_CHECK_MAX_FRAME_SIZE
-+ The maximum size of a stack frame, in bytes.  GNU CC will generate probe
-+ instructions in non-leaf functions to ensure at least this many bytes of
-+ stack are available.  If a stack frame is larger than this size, stack
-+ checking will not be reliable and GNU CC will issue a warning.  The
-+ default is chosen so that GNU CC only generates one instruction on most
-+ systems.  You should normally not change the default value of this macro.
-+ 
-+ @findex STACK_CHECK_FIXED_FRAME_SIZE
-+ @item STACK_CHECK_FIXED_FRAME_SIZE
-+ GNU CC uses this value to generate the above warning message.  It
-+ represents the amount of fixed frame used by a function, not including
-+ space for any callee-saved registers, temporaries and user variables.
-+ You need only specify an upper bound for this amount and will normally
-+ use the default of four words.
-+ 
-+ @findex STACK_CHECK_MAX_VAR_SIZE
-+ @item STACK_CHECK_MAX_VAR_SIZE
-+ The maximum size, in bytes, of an object that GNU CC will place in the
-+ fixed area of the stack frame when the user specifies
-+ @samp{-fstack-check}.
-+ GNU CC computed the default from the values of the above macros and you will
-+ normally not need to override that default.
-  @item STACK_POINTER_REGNUM
-  The register number of the stack pointer register, which must also be a
-diff -rcp2N gcc-2.7.2.3/toplev.c gcc-2.7.2.3.f.1/toplev.c
-*** gcc-2.7.2.3/toplev.c       Fri Oct 20 21:56:35 1995
---- gcc-2.7.2.3.f.1/toplev.c   Fri Aug 29 09:13:14 1997
-*************** int flag_unroll_loops;
-*** 388,391 ****
---- 388,405 ----
-  int flag_unroll_all_loops;
-  
-+ /* Nonzero forces all invariant computations in loops to be moved
-+    outside the loop. */
-+ 
-+ int flag_move_all_movables = 0;
-+ 
-+ /* Nonzero forces all general induction variables in loops to be
-+    strength reduced. */
-+ 
-+ int flag_reduce_all_givs = 0;
-+ 
-+ /* Nonzero gets another run of loop_optimize performed. */
-+ 
-+ int flag_rerun_loop_opt = 0;
-+ 
-  /* Nonzero for -fwritable-strings:
-     store string constants in data segment and don't uniquize them.  */
-*************** int flag_gnu_linker = 1;
-*** 522,525 ****
---- 536,554 ----
-  int flag_pack_struct = 0;
-  
-+ /* 1 if alias checking is on (by default, when -O).  */
-+ int flag_alias_check = 0;
-+ 
-+ /* 0 if pointer arguments may alias each other.  True in C.
-+    1 if pointer arguments may not alias each other but may alias
-+    global variables.
-+    2 if pointer arguments may not alias each other and may not
-+    alias global variables.  True in Fortran.
-+    This defaults to 0 for C.  */
-+ int flag_argument_noalias = 0;
-+ 
-+ /* Emit code to check for stack overflow; also may cause large objects
-+    to be allocated dynamically.  */
-+ int flag_stack_check;
-+ 
-  /* Table of language-independent -f options.
-     STRING is the option name.  VARIABLE is the address of the variable.
-*************** struct { char *string; int *variable; in
-*** 542,545 ****
---- 571,577 ----
-    {"unroll-loops", &flag_unroll_loops, 1},
-    {"unroll-all-loops", &flag_unroll_all_loops, 1},
-+   {"move-all-movables", &flag_move_all_movables, 1},
-+   {"reduce-all-givs", &flag_reduce_all_givs, 1},
-+   {"rerun-loop-opt", &flag_rerun_loop_opt, 1},
-    {"writable-strings", &flag_writable_strings, 1},
-    {"peephole", &flag_no_peephole, 0},
-*************** struct { char *string; int *variable; in
-*** 568,572 ****
-    {"gnu-linker", &flag_gnu_linker, 1},
-    {"pack-struct", &flag_pack_struct, 1},
-!   {"bytecode", &output_bytecode, 1}
-  };
-  
---- 600,609 ----
-    {"gnu-linker", &flag_gnu_linker, 1},
-    {"pack-struct", &flag_pack_struct, 1},
-!   {"bytecode", &output_bytecode, 1},
-!   {"alias-check", &flag_alias_check, 1},
-!   {"argument-alias", &flag_argument_noalias, 0},
-!   {"argument-noalias", &flag_argument_noalias, 1},
-!   {"argument-noalias-global", &flag_argument_noalias, 2},
-!   {"stack-check", &flag_stack_check, 1}
-  };
-  
-*************** rest_of_compilation (decl)
-*** 2715,2725 ****
-        finish_compilation will call rest_of_compilation again
-        for those functions that need to be output.  Also defer those
-!       functions that we are supposed to defer.  */
-! 
-!       if (DECL_DEFER_OUTPUT (decl)
-!        || ((specd || DECL_INLINE (decl))
-!            && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-!                 && ! flag_keep_inline_functions)
-!                || DECL_EXTERNAL (decl))))
-       {
-         DECL_DEFER_OUTPUT (decl) = 1;
---- 2752,2765 ----
-        finish_compilation will call rest_of_compilation again
-        for those functions that need to be output.  Also defer those
-!       functions that we are supposed to defer.  We cannot defer
-!       functions containing nested functions since the nested function
-!       data is in our non-saved obstack.  */
-! 
-!       if (! current_function_contains_functions
-!        && (DECL_DEFER_OUTPUT (decl)
-!            || ((specd || DECL_INLINE (decl))
-!                && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
-!                     && ! flag_keep_inline_functions)
-!                    || DECL_EXTERNAL (decl)))))
-       {
-         DECL_DEFER_OUTPUT (decl) = 1;
-*************** rest_of_compilation (decl)
-*** 2893,2897 ****
---- 2933,2956 ----
-        TIMEVAR (loop_time,
-              {
-+               int save_unroll_flag;
-+               int save_unroll_all_flag;
-+ 
-+               if (flag_rerun_loop_opt)
-+                 {
-+                   save_unroll_flag = flag_unroll_loops;
-+                   save_unroll_all_flag = flag_unroll_all_loops;
-+                   flag_unroll_loops = 0;
-+                   flag_unroll_all_loops = 0;
-+                 }
-+ 
-                loop_optimize (insns, loop_dump_file);
-+ 
-+               if (flag_rerun_loop_opt)
-+                 {
-+                   flag_unroll_loops = save_unroll_flag;
-+                   flag_unroll_all_loops = save_unroll_all_flag;
-+ 
-+                   loop_optimize (insns, loop_dump_file);
-+                 }
-              });
-      }
-*************** rest_of_compilation (decl)
-*** 3280,3283 ****
---- 3339,3346 ----
-    resume_temporary_allocation ();
-  
-+   /* Show no temporary slots allocated.  */
-+ 
-+   init_temp_slots ();
-+ 
-    /* The parsing time is all the time spent in yyparse
-       *except* what is spent in this function.  */
-*************** main (argc, argv, envp)
-*** 3383,3386 ****
---- 3446,3450 ----
-        flag_omit_frame_pointer = 1;
-  #endif
-+       flag_alias_check = 1;
-      }
-  
-diff -rcp2N gcc-2.7.2.3/tree.c gcc-2.7.2.3.f.1/tree.c
-*** gcc-2.7.2.3/tree.c Mon Oct  2 01:26:56 1995
---- gcc-2.7.2.3.f.1/tree.c     Fri Aug 29 08:15:03 1997
-*************** build_string (len, str)
-*** 1428,1436 ****
-  /* Return a newly constructed COMPLEX_CST node whose value is
-     specified by the real and imaginary parts REAL and IMAG.
-!    Both REAL and IMAG should be constant nodes.
-!    The TREE_TYPE is not initialized.  */
-  
-  tree
-! build_complex (real, imag)
-       tree real, imag;
-  {
---- 1428,1437 ----
-  /* Return a newly constructed COMPLEX_CST node whose value is
-     specified by the real and imaginary parts REAL and IMAG.
-!    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
-!    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
-  
-  tree
-! build_complex (type, real, imag)
-!      tree type;
-       tree real, imag;
-  {
-*************** build_complex (real, imag)
-*** 1439,1443 ****
-    TREE_REALPART (t) = real;
-    TREE_IMAGPART (t) = imag;
-!   TREE_TYPE (t) = build_complex_type (TREE_TYPE (real));
-    TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
-    TREE_CONSTANT_OVERFLOW (t)
---- 1440,1444 ----
-    TREE_REALPART (t) = real;
-    TREE_IMAGPART (t) = imag;
-!   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
-    TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
-    TREE_CONSTANT_OVERFLOW (t)
-*************** integer_zerop (expr)
-*** 1484,1487 ****
---- 1485,1489 ----
-  
-    return ((TREE_CODE (expr) == INTEGER_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && TREE_INT_CST_LOW (expr) == 0
-          && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_onep (expr)
-*** 1501,1504 ****
---- 1503,1507 ----
-  
-    return ((TREE_CODE (expr) == INTEGER_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && TREE_INT_CST_LOW (expr) == 1
-          && TREE_INT_CST_HIGH (expr) == 0)
-*************** integer_all_onesp (expr)
-*** 1525,1529 ****
-      return 1;
-  
-!   else if (TREE_CODE (expr) != INTEGER_CST)
-      return 0;
-  
---- 1528,1533 ----
-      return 1;
-  
-!   else if (TREE_CODE (expr) != INTEGER_CST
-!         || TREE_CONSTANT_OVERFLOW (expr))
-      return 0;
-  
-*************** integer_pow2p (expr)
-*** 1574,1578 ****
-      return 1;
-  
-!   if (TREE_CODE (expr) != INTEGER_CST)
-      return 0;
-  
---- 1578,1582 ----
-      return 1;
-  
-!   if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
-      return 0;
-  
-*************** real_zerop (expr)
-*** 1596,1599 ****
---- 1600,1604 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_onep (expr)
-*** 1611,1614 ****
---- 1616,1620 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** real_twop (expr)
-*** 1626,1629 ****
---- 1632,1636 ----
-  
-    return ((TREE_CODE (expr) == REAL_CST
-+         && ! TREE_CONSTANT_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
-         || (TREE_CODE (expr) == COMPLEX_CST
-*************** staticp (arg)
-*** 2055,2061 ****
-        return 1;
-  
-      case COMPONENT_REF:
-      case BIT_FIELD_REF:
-!       return staticp (TREE_OPERAND (arg, 0));
-  
-  #if 0
---- 2062,2073 ----
-        return 1;
-  
-+       /* If we are referencing a bitfield, we can't evaluate an
-+       ADDR_EXPR at compile time and so it isn't a constant.  */
-      case COMPONENT_REF:
-+       return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
-+            && staticp (TREE_OPERAND (arg, 0)));
-+ 
-      case BIT_FIELD_REF:
-!       return 0;
-  
-  #if 0
-*************** save_expr (expr)
-*** 2141,2148 ****
-  \f
-  /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
-!    or offset that depends on a field within a record.
-! 
-!    Note that we only allow such expressions within simple arithmetic
-!    or a COND_EXPR.  */
-  
-  int
---- 2153,2157 ----
-  \f
-  /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
-!    or offset that depends on a field within a record.  */
-  
-  int
-*************** contains_placeholder_p (exp)
-*** 2151,2155 ****
-  {
-    register enum tree_code code = TREE_CODE (exp);
--   tree inner;
-  
-    /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
---- 2160,2163 ----
-*************** contains_placeholder_p (exp)
-*** 2157,2173 ****
-    if (code == WITH_RECORD_EXPR)
-      return 0;
-  
-    switch (TREE_CODE_CLASS (code))
-      {
-      case 'r':
-!       for (inner = TREE_OPERAND (exp, 0);
-!         TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
-!         inner = TREE_OPERAND (inner, 0))
-!      ;
-!       return TREE_CODE (inner) == PLACEHOLDER_EXPR;
-  
-      case '1':
-      case '2':  case '<':
-      case 'e':
-        switch (tree_code_length[(int) code])
-       {
---- 2165,2203 ----
-    if (code == WITH_RECORD_EXPR)
-      return 0;
-+   else if (code == PLACEHOLDER_EXPR)
-+     return 1;
-  
-    switch (TREE_CODE_CLASS (code))
-      {
-      case 'r':
-!       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
-!       position computations since they will be converted into a
-!       WITH_RECORD_EXPR involving the reference, which will assume
-!       here will be valid.  */
-!       return contains_placeholder_p (TREE_OPERAND (exp, 0));
-  
-      case '1':
-      case '2':  case '<':
-      case 'e':
-+       switch (code)
-+      {
-+      case COMPOUND_EXPR:
-+        /* Ignoring the first operand isn't quite right, but works best. */
-+        return contains_placeholder_p (TREE_OPERAND (exp, 1));
-+ 
-+      case RTL_EXPR:
-+      case CONSTRUCTOR:
-+        return 0;
-+ 
-+      case COND_EXPR:
-+        return (contains_placeholder_p (TREE_OPERAND (exp, 0))
-+                || contains_placeholder_p (TREE_OPERAND (exp, 1))
-+                || contains_placeholder_p (TREE_OPERAND (exp, 2)));
-+ 
-+      case SAVE_EXPR:
-+         return (SAVE_EXPR_RTL (exp) == 0
-+                 && contains_placeholder_p (TREE_OPERAND (exp, 0)));
-+      }
-+ 
-        switch (tree_code_length[(int) code])
-       {
-*************** contains_placeholder_p (exp)
-*** 2175,2189 ****
-         return contains_placeholder_p (TREE_OPERAND (exp, 0));
-       case 2:
-!        return (code != RTL_EXPR
-!                && code != CONSTRUCTOR
-!                && ! (code == SAVE_EXPR && SAVE_EXPR_RTL (exp) != 0)
-!                && code != WITH_RECORD_EXPR
-!                && (contains_placeholder_p (TREE_OPERAND (exp, 0))
-!                    || contains_placeholder_p (TREE_OPERAND (exp, 1))));
-!      case 3:
-!        return (code == COND_EXPR
-!                && (contains_placeholder_p (TREE_OPERAND (exp, 0))
-!                    || contains_placeholder_p (TREE_OPERAND (exp, 1))
-!                    || contains_placeholder_p (TREE_OPERAND (exp, 2))));
-       }
-      }
---- 2205,2210 ----
-         return contains_placeholder_p (TREE_OPERAND (exp, 0));
-       case 2:
-!        return (contains_placeholder_p (TREE_OPERAND (exp, 0))
-!                || contains_placeholder_p (TREE_OPERAND (exp, 1)));
-       }
-      }
-*************** substitute_in_expr (exp, f, r)
-*** 2204,2207 ****
---- 2225,2229 ----
-  {
-    enum tree_code code = TREE_CODE (exp);
-+   tree op0, op1, op2;
-    tree new = 0;
-    tree inner;
-*************** substitute_in_expr (exp, f, r)
-*** 2225,2231 ****
-       {
-       case 1:
-!        new = fold (build1 (code, TREE_TYPE (exp),
-!                            substitute_in_expr (TREE_OPERAND (exp, 0),
-!                                                f, r)));
-         break;
-  
---- 2247,2255 ----
-       {
-       case 1:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-!        
-!        new = fold (build1 (code, TREE_TYPE (exp), op0));
-         break;
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2238,2245 ****
-           abort ();
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1),
-!                                               f, r)));
-         break;
-  
---- 2262,2271 ----
-           abort ();
-  
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1));
-         break;
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2253,2261 ****
-           abort ();
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 2),
-!                                               f, r)));
-       }
-  
---- 2279,2290 ----
-           abort ();
-  
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-!            && op2 == TREE_OPERAND (exp, 2))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
-       }
-  
-*************** substitute_in_expr (exp, f, r)
-*** 2276,2302 ****
-           return r;
-  
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-                            TREE_OPERAND (exp, 1)));
-         break;
-  
-       case BIT_FIELD_REF:
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 2), f, r)));
-         break;
-  
-       case INDIRECT_REF:
-       case BUFFER_REF:
-!        new = fold (build1 (code, TREE_TYPE (exp),
-!                            substitute_in_expr (TREE_OPERAND (exp, 0),
-!                                                f, r)));
-         break;
-  
-       case OFFSET_REF:
-!        new = fold (build (code, TREE_TYPE (exp),
-!                           substitute_in_expr (TREE_OPERAND (exp, 0), f, r),
-!                           substitute_in_expr (TREE_OPERAND (exp, 1), f, r)));
-         break;
-       }
---- 2305,2349 ----
-           return r;
-  
-!        /* If this expression hasn't been completed let, leave it 
-!           alone.  */
-!        if (TREE_CODE (inner) == PLACEHOLDER_EXPR
-!            && TREE_TYPE (inner) == 0)
-!          return exp;
-! 
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0,
-                            TREE_OPERAND (exp, 1)));
-         break;
-  
-       case BIT_FIELD_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
-!            && op2 == TREE_OPERAND (exp, 2))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
-         break;
-  
-       case INDIRECT_REF:
-       case BUFFER_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0))
-!          return exp;
-! 
-!        new = fold (build1 (code, TREE_TYPE (exp), op0));
-         break;
-  
-       case OFFSET_REF:
-!        op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
-!        op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
-!        if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
-!          return exp;
-! 
-!        new = fold (build (code, TREE_TYPE (exp), op0, op1));
-         break;
-       }
-*************** substitute_in_expr (exp, f, r)
-*** 2311,2454 ****
-  }
-  \f
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
--    return a new type with all size expressions that contain F
--    updated by replacing F with R.  */
-- 
-- tree
-- substitute_in_type (t, f, r)
--      tree t, f, r;
-- {
--   switch (TREE_CODE (t))
--     {
--     case POINTER_TYPE:
--     case VOID_TYPE:
--       return t;
--     case INTEGER_TYPE:
--     case ENUMERAL_TYPE:
--     case BOOLEAN_TYPE:
--     case CHAR_TYPE:
--       if ((TREE_CODE (TYPE_MIN_VALUE (t)) != INTEGER_CST
--         && contains_placeholder_p (TYPE_MIN_VALUE (t)))
--        || (TREE_CODE (TYPE_MAX_VALUE (t)) != INTEGER_CST
--            && contains_placeholder_p (TYPE_MAX_VALUE (t))))
--      return build_range_type (t,
--                               substitute_in_expr (TYPE_MIN_VALUE (t), f, r),
--                               substitute_in_expr (TYPE_MAX_VALUE (t), f, r));
--       return t;
-- 
--     case REAL_TYPE:
--       if ((TYPE_MIN_VALUE (t) != 0
--         && TREE_CODE (TYPE_MIN_VALUE (t)) != REAL_CST
--         && contains_placeholder_p (TYPE_MIN_VALUE (t)))
--        || (TYPE_MAX_VALUE (t) != 0
--            && TREE_CODE (TYPE_MAX_VALUE (t)) != REAL_CST
--            && contains_placeholder_p (TYPE_MAX_VALUE (t))))
--      {
--        t = build_type_copy (t);
-- 
--        if (TYPE_MIN_VALUE (t))
--          TYPE_MIN_VALUE (t) = substitute_in_expr (TYPE_MIN_VALUE (t), f, r);
--        if (TYPE_MAX_VALUE (t))
--          TYPE_MAX_VALUE (t) = substitute_in_expr (TYPE_MAX_VALUE (t), f, r);
--      }
--       return t;
-- 
--     case COMPLEX_TYPE:
--       return build_complex_type (substitute_in_type (TREE_TYPE (t), f, r));
-- 
--     case OFFSET_TYPE:
--     case METHOD_TYPE:
--     case REFERENCE_TYPE:
--     case FILE_TYPE:
--     case SET_TYPE:
--     case FUNCTION_TYPE:
--     case LANG_TYPE:
--       /* Don't know how to do these yet.  */
--       abort ();
-- 
--     case ARRAY_TYPE:
--       t = build_array_type (substitute_in_type (TREE_TYPE (t), f, r),
--                          substitute_in_type (TYPE_DOMAIN (t), f, r));
--       TYPE_SIZE (t) = 0;
--       layout_type (t);
--       return t;
-- 
--     case RECORD_TYPE:
--     case UNION_TYPE:
--     case QUAL_UNION_TYPE:
--       {
--      tree new = copy_node (t);
--      tree field;
--      tree last_field = 0;
-- 
--      /* Start out with no fields, make new fields, and chain them
--         in.  */
-- 
--      TYPE_FIELDS (new) = 0;
--      TYPE_SIZE (new) = 0;
-- 
--      for (field = TYPE_FIELDS (t); field;
--           field = TREE_CHAIN (field))
--        {
--          tree new_field = copy_node (field);
-- 
--          TREE_TYPE (new_field)
--            = substitute_in_type (TREE_TYPE (new_field), f, r);
-- 
--          /* If this is an anonymous field and the type of this field is
--             a UNION_TYPE or RECORD_TYPE with no elements, ignore it.  If
--             the type just has one element, treat that as the field. 
--             But don't do this if we are processing a QUAL_UNION_TYPE.  */
--          if (TREE_CODE (t) != QUAL_UNION_TYPE && DECL_NAME (new_field) == 0
--              && (TREE_CODE (TREE_TYPE (new_field)) == UNION_TYPE
--                  || TREE_CODE (TREE_TYPE (new_field)) == RECORD_TYPE))
--            {
--              if (TYPE_FIELDS (TREE_TYPE (new_field)) == 0)
--                continue;
-- 
--              if (TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new_field))) == 0)
--                new_field = TYPE_FIELDS (TREE_TYPE (new_field));
--            }
-- 
--          DECL_CONTEXT (new_field) = new;
--          DECL_SIZE (new_field) = 0;
-- 
--          if (TREE_CODE (t) == QUAL_UNION_TYPE)
--            {
--              /* Do the substitution inside the qualifier and if we find
--                 that this field will not be present, omit it.  */
--              DECL_QUALIFIER (new_field)
--                = substitute_in_expr (DECL_QUALIFIER (field), f, r);
--              if (integer_zerop (DECL_QUALIFIER (new_field)))
--                continue;
--            }
-- 
--          if (last_field == 0)
--            TYPE_FIELDS (new) = new_field;
--          else
--            TREE_CHAIN (last_field) = new_field;
-- 
--          last_field = new_field;
-- 
--          /* If this is a qualified type and this field will always be
--             present, we are done.  */
--          if (TREE_CODE (t) == QUAL_UNION_TYPE
--              && integer_onep (DECL_QUALIFIER (new_field)))
--            break;
--        }
-- 
--      /* If this used to be a qualified union type, but we now know what
--         field will be present, make this a normal union.  */
--      if (TREE_CODE (new) == QUAL_UNION_TYPE
--          && (TYPE_FIELDS (new) == 0
--              || integer_onep (DECL_QUALIFIER (TYPE_FIELDS (new)))))
--        TREE_SET_CODE (new, UNION_TYPE);
-- 
--      layout_type (new);
--      return new;
--       }
--     }
-- }
-- \f
-  /* Stabilize a reference so that we can use it any number of times
-     without causing its operands to be evaluated more than once.
---- 2358,2361 ----
-*************** build_type_variant (type, constp, volati
-*** 3141,3145 ****
-       preserve the TYPE_NAME, since there is code that depends on this.  */
-  
-!   for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
-      if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
-       && TYPE_NAME (t) == TYPE_NAME (type))
---- 3048,3052 ----
-       preserve the TYPE_NAME, since there is code that depends on this.  */
-  
-!   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
-      if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
-       && TYPE_NAME (t) == TYPE_NAME (type))
-*************** get_unwidened (op, for_type)
-*** 4051,4055 ****
-    if (TREE_CODE (op) == COMPONENT_REF
-        /* Since type_for_size always gives an integer type.  */
-!       && TREE_CODE (type) != REAL_TYPE)
-      {
-        unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
---- 3958,3964 ----
-    if (TREE_CODE (op) == COMPONENT_REF
-        /* Since type_for_size always gives an integer type.  */
-!       && TREE_CODE (type) != REAL_TYPE
-!       /* Don't crash if field not layed out yet.  */
-!       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
-      {
-        unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
-diff -rcp2N gcc-2.7.2.3/tree.h gcc-2.7.2.3.f.1/tree.h
-*** gcc-2.7.2.3/tree.h Mon Sep 25 21:49:40 1995
---- gcc-2.7.2.3.f.1/tree.h     Sun Aug 10 22:47:08 1997
-*************** enum built_in_function
-*** 98,101 ****
---- 98,103 ----
-    BUILT_IN_APPLY,
-    BUILT_IN_RETURN,
-+   BUILT_IN_SETJMP,
-+   BUILT_IN_LONGJMP,
-  
-    /* C++ extensions */
-*************** struct tree_int_cst
-*** 408,411 ****
---- 410,415 ----
-  {
-    char common[sizeof (struct tree_common)];
-+   struct rtx_def *rtl;       /* acts as link to register transfer language
-+                         (rtl) info */
-    HOST_WIDE_INT int_cst_low;
-    HOST_WIDE_INT int_cst_high;
-*************** struct tree_type
-*** 957,960 ****
---- 961,967 ----
-  #define DECL_STATIC_DESTRUCTOR(NODE) ((NODE)->decl.static_dtor_flag)
-  
-+ /* In a PARM_DECL, nonzero if this is a restricted pointer.  */
-+ #define DECL_RESTRICT(NODE) (NODE)->decl.static_ctor_flag
-+ 
-  /* Used to indicate that this DECL represents a compiler-generated entity.  */
-  #define DECL_ARTIFICIAL(NODE) ((NODE)->decl.artificial_flag)
-*************** extern tree build_int_2_wide           PROTO((HOS
-*** 1176,1180 ****
-  extern tree build_real                       PROTO((tree, REAL_VALUE_TYPE));
-  extern tree build_real_from_int_cst  PROTO((tree, tree));
-! extern tree build_complex            PROTO((tree, tree));
-  extern tree build_string             PROTO((int, char *));
-  extern tree build1                   PROTO((enum tree_code, tree, tree));
---- 1183,1187 ----
-  extern tree build_real                       PROTO((tree, REAL_VALUE_TYPE));
-  extern tree build_real_from_int_cst  PROTO((tree, tree));
-! extern tree build_complex            PROTO((tree, tree, tree));
-  extern tree build_string             PROTO((int, char *));
-  extern tree build1                   PROTO((enum tree_code, tree, tree));
-*************** extern int contains_placeholder_p      PROTO(
-*** 1378,1387 ****
-  extern tree substitute_in_expr               PROTO((tree, tree, tree));
-  
-- /* Given a type T, a FIELD_DECL F, and a replacement value R,
--    return a new type with all size expressions that contain F
--    updated by replacing the reference to F with R.  */
-- 
-- extern tree substitute_in_type               PROTO((tree, tree, tree));
-- 
-  /* variable_size (EXP) is like save_expr (EXP) except that it
-     is for the special case of something that is part of a
---- 1385,1388 ----
-*************** extern tree maybe_build_cleanup                PROTO((
-*** 1456,1460 ****
-     and find the ultimate containing object, which is returned.  */
-  
-! extern tree get_inner_reference              PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *));
-  
-  /* Return the FUNCTION_DECL which provides this _DECL with its context,
---- 1457,1463 ----
-     and find the ultimate containing object, which is returned.  */
-  
-! extern tree get_inner_reference              PROTO((tree, int *, int *, tree *,
-!                                             enum machine_mode *, int *,
-!                                             int *, int *));
-  
-  /* Return the FUNCTION_DECL which provides this _DECL with its context,
-diff -rcp2N gcc-2.7.2.3/unroll.c gcc-2.7.2.3.f.1/unroll.c
-*** gcc-2.7.2.3/unroll.c       Sun Aug 31 09:39:49 1997
---- gcc-2.7.2.3.f.1/unroll.c   Sun Aug 31 09:21:17 1997
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 268,273 ****
-       structure of the function.  This can happen as a result of the
-       "if (foo) bar; else break;" optimization in jump.c.  */
-  
-!   if (write_symbols != NO_DEBUG)
-      {
-        int block_begins = 0;
---- 268,277 ----
-       structure of the function.  This can happen as a result of the
-       "if (foo) bar; else break;" optimization in jump.c.  */
-+   /* ??? Gcc has a general policy that -g is never supposed to change the code
-+      that the compiler emits, so we must disable this optimization always,
-+      even if debug info is not being output.  This is rare, so this should
-+      not be a significant performance problem.  */
-  
-!   if (1 /* write_symbols != NO_DEBUG */)
-      {
-        int block_begins = 0;
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 633,636 ****
---- 637,657 ----
-      }
-  
-+   if (unroll_type == UNROLL_NAIVE
-+       && GET_CODE (last_loop_insn) == JUMP_INSN
-+       && start_label != JUMP_LABEL (last_loop_insn))
-+     {
-+       /* ??? The loop ends with a conditional branch that does not branch back
-+       to the loop start label.  In this case, we must emit an unconditional
-+       branch to the loop exit after emitting the final branch.
-+       copy_loop_body does not have support for this currently, so we
-+       give up.  It doesn't seem worthwhile to unroll anyways since
-+       unrolling would increase the number of branch instructions
-+       executed.  */
-+       if (loop_dump_stream)
-+      fprintf (loop_dump_stream,
-+               "Unrolling failure: final conditional branch not to loop start\n");
-+       return;
-+     }
-+ 
-    /* Allocate a translation table for the labels and insn numbers.
-       They will be filled in as we copy the insns in the loop.  */
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 995,999 ****
-             for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-               if (local_regno[j])
-!                map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-  
-             /* The last copy needs the compare/branch insns at the end,
---- 1016,1024 ----
-             for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-               if (local_regno[j])
-!                {
-!                  map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-!                  record_base_value (REGNO (map->reg_map[j]),
-!                                     regno_reg_rtx[j]);
-!                }
-  
-             /* The last copy needs the compare/branch insns at the end,
-*************** unroll_loop (loop_end, insn_count, loop_
-*** 1136,1140 ****
-        for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-       if (local_regno[j])
-!        map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-  
-        /* If loop starts with a branch to the test, then fix it so that
---- 1161,1169 ----
-        for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++)
-       if (local_regno[j])
-!        {
-!          map->reg_map[j] = gen_reg_rtx (GET_MODE (regno_reg_rtx[j]));
-!          record_base_value (REGNO (map->reg_map[j]),
-!                             regno_reg_rtx[j]);
-!        }
-  
-        /* If loop starts with a branch to the test, then fix it so that
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1605,1608 ****
---- 1634,1641 ----
-                   int this_giv_inc = INTVAL (giv_inc);
-  
-+                  /* If this DEST_ADDR giv was not split, then ignore it.  */
-+                  if (*tv->location != tv->dest_reg)
-+                    continue;
-+ 
-                   /* Scale this_giv_inc if the multiplicative factors of
-                      the two givs are different.  */
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1631,1635 ****
-                          incrementing the shared pseudo reg more than
-                          once.  */
-!                      if (! tv->same_insn)
-                         {
-                           /* tv->dest_reg may actually be a (PLUS (REG)
---- 1664,1668 ----
-                          incrementing the shared pseudo reg more than
-                          once.  */
-!                      if (! tv->same_insn && ! tv->shared)
-                         {
-                           /* tv->dest_reg may actually be a (PLUS (REG)
-*************** copy_loop_body (copy_start, copy_end, ma
-*** 1757,1760 ****
---- 1790,1794 ----
-                     giv_dest_reg = tem;
-                     map->reg_map[regno] = tem;
-+                    record_base_value (REGNO (tem), giv_src_reg);
-                   }
-                 else
-*************** iteration_info (iteration_var, initial_v
-*** 2220,2231 ****
-        return;
-      }
-!   /* Reject iteration variables larger than the host long size, since they
-       could result in a number of iterations greater than the range of our
-!      `unsigned long' variable loop_n_iterations.  */
-!   else if (GET_MODE_BITSIZE (GET_MODE (iteration_var)) > HOST_BITS_PER_LONG)
-      {
-        if (loop_dump_stream)
-       fprintf (loop_dump_stream,
-!               "Loop unrolling: Iteration var rejected because mode larger than host long.\n");
-        return;
-      }
---- 2254,2266 ----
-        return;
-      }
-!   /* Reject iteration variables larger than the host wide int size, since they
-       could result in a number of iterations greater than the range of our
-!      `unsigned HOST_WIDE_INT' variable loop_n_iterations.  */
-!   else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
-!          > HOST_BITS_PER_WIDE_INT))
-      {
-        if (loop_dump_stream)
-       fprintf (loop_dump_stream,
-!               "Loop unrolling: Iteration var rejected because mode too large.\n");
-        return;
-      }
-*************** find_splittable_regs (unroll_type, loop_
-*** 2443,2447 ****
-               {
-                 rtx tem = gen_reg_rtx (bl->biv->mode);
-!                
-                 emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                                   loop_start);
---- 2478,2483 ----
-               {
-                 rtx tem = gen_reg_rtx (bl->biv->mode);
-! 
-!                record_base_value (REGNO (tem), bl->biv->add_val);
-                 emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                                   loop_start);
-*************** find_splittable_regs (unroll_type, loop_
-*** 2500,2503 ****
---- 2536,2541 ----
-                exits.  */
-             rtx tem = gen_reg_rtx (bl->biv->mode);
-+            record_base_value (REGNO (tem), bl->biv->add_val);
-+ 
-             emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                               loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2675,2678 ****
---- 2713,2717 ----
-             rtx tem = gen_reg_rtx (bl->biv->mode);
-  
-+            record_base_value (REGNO (tem), bl->biv->add_val);
-             emit_insn_before (gen_move_insn (tem, bl->biv->src_reg),
-                               loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2716,2719 ****
---- 2755,2759 ----
-               {
-                 rtx tem = gen_reg_rtx (v->mode);
-+                record_base_value (REGNO (tem), v->add_val);
-                 emit_iv_add_mult (bl->initial_value, v->mult_val,
-                                   v->add_val, tem, loop_start);
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2734,2747 ****
-                register for the split addr giv, just to be safe.  */
-  
-!            /* ??? If there are multiple address givs which have been
-!               combined with the same dest_reg giv, then we may only need
-!               one new register for them.  Pulling out constants below will
-!               catch some of the common cases of this.  Currently, I leave
-!               the work of simplifying multiple address givs to the
-!               following cse pass.  */
-!            
-!            /* As a special case, if we have multiple identical address givs
-!               within a single instruction, then we do use a single pseudo
-!               reg for both.  This is necessary in case one is a match_dup
-                of the other.  */
-  
---- 2774,2780 ----
-                register for the split addr giv, just to be safe.  */
-  
-!            /* If we have multiple identical address givs within a
-!               single instruction, then use a single pseudo reg for
-!               both.  This is necessary in case one is a match_dup
-                of the other.  */
-  
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2756,2759 ****
---- 2789,2812 ----
-                            INSN_UID (v->insn));
-               }
-+            /* If multiple address GIVs have been combined with the
-+               same dest_reg GIV, do not create a new register for
-+               each.  */
-+            else if (unroll_type != UNROLL_COMPLETELY
-+                     && v->giv_type == DEST_ADDR
-+                     && v->same && v->same->giv_type == DEST_ADDR
-+                     && v->same->unrolled
-+ #ifdef ADDRESS_COST
-+                     /* combine_givs_p may return true when ADDRESS_COST is
-+                        defined even if the multiply and add values are
-+                        not equal.  To share a register here, the values
-+                        must be equal, as well as related.  */
-+                     && rtx_equal_p (v->mult_val, v->same->mult_val)
-+                     && rtx_equal_p (v->add_val, v->same->add_val)
-+ #endif
-+                     )
-+              {
-+                v->dest_reg = v->same->dest_reg;
-+                v->shared = 1;
-+              }
-             else if (unroll_type != UNROLL_COMPLETELY)
-               {
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2761,2765 ****
-                    register to hold the split value of the DEST_ADDR giv.
-                    Emit insn to initialize its value before loop start.  */
-!                tem = gen_reg_rtx (v->mode);
-  
-                 /* If the address giv has a constant in its new_reg value,
---- 2814,2821 ----
-                    register to hold the split value of the DEST_ADDR giv.
-                    Emit insn to initialize its value before loop start.  */
-! 
-!                rtx tem = gen_reg_rtx (v->mode);
-!                record_base_value (REGNO (tem), v->add_val);
-!                v->unrolled = 1;
-  
-                 /* If the address giv has a constant in its new_reg value,
-*************** find_splittable_givs (bl, unroll_type, l
-*** 2772,2781 ****
-                     v->dest_reg
-                       = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-!                    
-                     /* Only succeed if this will give valid addresses.
-                        Try to validate both the first and the last
-                        address resulting from loop unrolling, if
-                        one fails, then can't do const elim here.  */
-!                    if (! verify_addresses (v, giv_inc, unroll_number))
-                       {
-                         /* Save the negative of the eliminated const, so
---- 2828,2837 ----
-                     v->dest_reg
-                       = plus_constant (tem, INTVAL (XEXP (v->new_reg,1)));
-! 
-                     /* Only succeed if this will give valid addresses.
-                        Try to validate both the first and the last
-                        address resulting from loop unrolling, if
-                        one fails, then can't do const elim here.  */
-!                    if (verify_addresses (v, giv_inc, unroll_number))
-                       {
-                         /* Save the negative of the eliminated const, so
-*************** final_biv_value (bl, loop_start, loop_en
-*** 3068,3071 ****
---- 3124,3128 ----
-  
-         tem = gen_reg_rtx (bl->biv->mode);
-+        record_base_value (REGNO (tem), bl->biv->add_val);
-         /* Make sure loop_end is not the last insn.  */
-         if (NEXT_INSN (loop_end) == 0)
-*************** final_giv_value (v, loop_start, loop_end
-*** 3161,3164 ****
---- 3218,3222 ----
-         /* Put the final biv value in tem.  */
-         tem = gen_reg_rtx (bl->biv->mode);
-+        record_base_value (REGNO (tem), bl->biv->add_val);
-         emit_iv_add_mult (increment, GEN_INT (loop_n_iterations),
-                           bl->initial_value, tem, insert_before);
-diff -rcp2N gcc-2.7.2.3/varasm.c gcc-2.7.2.3.f.1/varasm.c
-*** gcc-2.7.2.3/varasm.c       Sun Aug 31 09:39:49 1997
---- gcc-2.7.2.3.f.1/varasm.c   Sun Aug 31 09:21:18 1997
-*************** assemble_variable (decl, top_level, at_e
-*** 1067,1070 ****
---- 1067,1072 ----
-    if (! dont_output_data)
-      {
-+       int size;
-+ 
-        if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
-       goto finish;
-*************** assemble_variable (decl, top_level, at_e
-*** 1072,1078 ****
-        /* This is better than explicit arithmetic, since it avoids overflow.  */
-        size_tree = size_binop (CEIL_DIV_EXPR,
-!                        DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-  
-!       if (TREE_INT_CST_HIGH (size_tree) != 0)
-       {
-         error_with_decl (decl, "size of variable `%s' is too large");
---- 1074,1082 ----
-        /* This is better than explicit arithmetic, since it avoids overflow.  */
-        size_tree = size_binop (CEIL_DIV_EXPR,
-!                            DECL_SIZE (decl), size_int (BITS_PER_UNIT));
-  
-!       size = TREE_INT_CST_LOW (size_tree);
-!       if (TREE_INT_CST_HIGH (size_tree) != 0
-!        || size != TREE_INT_CST_LOW (size_tree))
-       {
-         error_with_decl (decl, "size of variable `%s' is too large");
-*************** decode_addr_const (exp, value)
-*** 2134,2137 ****
---- 2138,2142 ----
-      case COMPLEX_CST:
-      case CONSTRUCTOR:
-+     case INTEGER_CST:
-        x = TREE_CST_RTL (target);
-        break;
-*************** const_hash (exp)
-*** 2249,2253 ****
-      return const_hash (TREE_OPERAND (exp, 0)) * 9
-        +  const_hash (TREE_OPERAND (exp, 1));
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR)
-      return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-  
---- 2254,2258 ----
-      return const_hash (TREE_OPERAND (exp, 0)) * 9
-        +  const_hash (TREE_OPERAND (exp, 1));
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
-      return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
-  
-*************** compare_constant_1 (exp, p)
-*** 2314,2317 ****
---- 2319,2324 ----
-        if (flag_writable_strings)
-       return 0;
-+       if (*p++ != TYPE_MODE (TREE_TYPE (exp)))
-+      return 0;
-        strp = TREE_STRING_POINTER (exp);
-        len = TREE_STRING_LENGTH (exp);
-*************** compare_constant_1 (exp, p)
-*** 2403,2407 ****
-        return p;
-      }
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR)
-      {
-        p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
---- 2410,2414 ----
-        return p;
-      }
-!   else if (code == NOP_EXPR || code == CONVERT_EXPR || code == NON_LVALUE_EXPR)
-      {
-        p = compare_constant_1 (TREE_OPERAND (exp, 0), p);
-*************** record_constant_1 (exp)
-*** 2469,2472 ****
---- 2476,2480 ----
-       return;
-  
-+       obstack_1grow (&permanent_obstack, TYPE_MODE (TREE_TYPE (exp)));
-        strp = TREE_STRING_POINTER (exp);
-        len = TREE_STRING_LENGTH (exp);
-*************** copy_constant (exp)
-*** 2635,2639 ****
-  
-      case COMPLEX_CST:
-!       return build_complex (copy_constant (TREE_REALPART (exp)),
-                           copy_constant (TREE_IMAGPART (exp)));
-  
---- 2643,2648 ----
-  
-      case COMPLEX_CST:
-!       return build_complex (TREE_TYPE (exp),
-!                          copy_constant (TREE_REALPART (exp)),
-                           copy_constant (TREE_IMAGPART (exp)));
-  
-*************** copy_constant (exp)
-*** 2646,2649 ****
---- 2655,2659 ----
-      case NOP_EXPR:
-      case CONVERT_EXPR:
-+     case NON_LVALUE_EXPR:
-        return build1 (TREE_CODE (exp), TREE_TYPE (exp),
-                    copy_constant (TREE_OPERAND (exp, 0)));
-*************** output_constant_def (exp)
-*** 2692,2698 ****
-    register rtx def;
-  
--   if (TREE_CODE (exp) == INTEGER_CST)
--     abort ();                        /* No TREE_CST_RTL slot in these.  */
-- 
-    if (TREE_CST_RTL (exp))
-      return TREE_CST_RTL (exp);
---- 2702,2705 ----
-*************** bc_assemble_integer (exp, size)
-*** 3622,3626 ****
-    exp = fold (exp);
-    
-!   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR)
-      exp = TREE_OPERAND (exp, 0);
-    if (TREE_CODE (exp) == INTEGER_CST)
---- 3629,3634 ----
-    exp = fold (exp);
-    
-!   while (TREE_CODE (exp) == NOP_EXPR || TREE_CODE (exp) == CONVERT_EXPR
-!       || TREE_CODE (exp) == NON_LVALUE_EXPR)
-      exp = TREE_OPERAND (exp, 0);
-    if (TREE_CODE (exp) == INTEGER_CST)
-*************** bc_assemble_integer (exp, size)
-*** 3633,3641 ****
-        const_part = TREE_OPERAND (exp, 0);
-        while (TREE_CODE (const_part) == NOP_EXPR
-!           || TREE_CODE (const_part) == CONVERT_EXPR)
-       const_part = TREE_OPERAND (const_part, 0);
-        addr_part = TREE_OPERAND (exp, 1);
-        while (TREE_CODE (addr_part) == NOP_EXPR
-!           || TREE_CODE (addr_part) == CONVERT_EXPR)
-       addr_part = TREE_OPERAND (addr_part, 0);
-        if (TREE_CODE (const_part) != INTEGER_CST)
---- 3641,3651 ----
-        const_part = TREE_OPERAND (exp, 0);
-        while (TREE_CODE (const_part) == NOP_EXPR
-!           || TREE_CODE (const_part) == CONVERT_EXPR
-!           || TREE_CODE (const_part) == NON_LVALUE_EXPR)
-       const_part = TREE_OPERAND (const_part, 0);
-        addr_part = TREE_OPERAND (exp, 1);
-        while (TREE_CODE (addr_part) == NOP_EXPR
-!           || TREE_CODE (addr_part) == CONVERT_EXPR
-!           || TREE_CODE (addr_part) == NON_LVALUE_EXPR)
-       addr_part = TREE_OPERAND (addr_part, 0);
-        if (TREE_CODE (const_part) != INTEGER_CST)
-diff -rcp2N gcc-2.7.2.3/version.c gcc-2.7.2.3.f.1/version.c
-*** gcc-2.7.2.3/version.c      Sun Aug 31 09:39:50 1997
---- gcc-2.7.2.3.f.1/version.c  Tue Sep  9 04:13:48 1997
-***************
-*** 1 ****
-! char *version_string = "2.7.2.3";
---- 1 ----
-! char *version_string = "2.7.2.3.f.1";
diff --git a/gcc/f/gbe/README b/gcc/f/gbe/README
deleted file mode 100644 (file)
index f8b7180..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-971202
-It is not necessary to apply the "backend" patch to an egcs based gcc
-release.  The files in this directory are included in the egcs distribution
-for historical purposes only.
-
-
-
-970909
-
-This directory contains .diff files for various GNU CC distributions
-supported by this version of GNU Fortran.
-
-The name of a file includes which gcc version to which it applies.
-For example, 2.7.2.3.diff is the patch file for gcc version 2.7.2.3.
-
-To apply a .diff file to, say, gcc 2.7.2.3, one might use the following
-command (where the current directory contains the gcc source distribution
-after merging into it the g77 source distribution, which would be
-named gcc-2.7.2.3 in this example):
-
-    patch -p1 -d gcc-2.7.2.3 < gcc-2.7.2.3/f/gbe/2.7.2.3.diff
-
-
-This version of g77 is best combined with gcc versions 2.7.2.3.
-
-However, note that applying any of these patches does _not_ update
-the gcc.info* files that constitute the Info documentation for gcc.
-Therefore, after applying the patch, you must rebuild the Info
-documentation yourself via:
-
-  cd gcc; make -f Makefile.in gcc.info
-
-If the above command doesn't work because you don't have makeinfo
-installed, you are STRONGLY encouraged to obtain the most recent
-version of the GNU texinfo package (texinfo-3.11.tar.gz as of this
-writing), build, and install it, then try the above command (as
-makeinfo is part of texinfo).
-
-This distribution of g77 is not supported for versions of gcc prior
-to 2.7.2.3.
-
-If you are using a version of gcc more recent than the most
-recent .diff file's version, try the most recent .diff ONLY
-if the difference is in the third field.  E.g. the above
-patch might work on gcc-2.7.3 or gcc-2.7.4 if these were
-released.  On the other hand, it probably wouldn't work for
-a more major release like gcc-2.8.0 or gcc-3.0.0, and you
-shouldn't try it.  If the .diff file is missing, don't bother
-asking <fortran@gnu.ai.mit.edu> for it -- it is certainly
-being worked on.  In the meantime, watch our progress at
-<ftp://alpha.gnu.ai.mit.edu/g77.plan> for information on support
-for the recent versions of gcc.