DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T U

⟦325f597a0⟧ TextFile

    Length: 607310 (0x9444e)
    Types: TextFile
    Notes: Uncompressed file

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦da08a4e93⟧ »./gcc.diff-1.33-1.34.Z« 
        └─⟦this⟧ 

TextFile

Changes for GNU CC version 1.34, from 1.33.

Changes in files that can be rebuilt with etags, tex, bison
or M-x texinfo-format-buffer have been omitted.

diff -rc2N gcc-1.33/COPYING gcc-1.34/COPYING
*** gcc-1.33/COPYING	Thu Feb 11 19:45:21 1988
--- gcc-1.34/COPYING	Thu Feb 23 14:10:55 1989
***************
*** 1,76 ****
  
! 		    GNU CC GENERAL PUBLIC LICENSE
! 		    (Clarified 11 Feb 1988)
  
!  Copyright (C) 1988 Richard M. Stallman
   Everyone is permitted to copy and distribute verbatim copies
!  of this license, but changing it is not allowed.  You can also
!  use this wording to make the terms for other programs.
  
!   The license agreements of most software companies keep you at the
! mercy of those companies.  By contrast, our general public license is
! intended to give everyone the right to share GNU CC.  To make sure that
! you get the rights we want you to have, we need to make restrictions
! that forbid anyone to deny you these rights or to ask you to surrender
! the rights.  Hence this license agreement.
! 
!   Specifically, we want to make sure that you have the right to give
! away copies of GNU CC, that you receive source code or else can get it
! if you want it, that you can change GNU CC or use pieces of it in new
! free programs, and that you know you can do these things.
  
!   To make sure that everyone has such rights, we have to forbid you to
! deprive anyone else of these rights.  For example, if you distribute
! copies of GNU CC, you must give the recipients all the rights that you
! have.  You must make sure that they, too, receive or can get the
  source code.  And you must tell them their rights.
  
!   Also, for our own protection, we must make certain that everyone
! finds out that there is no warranty for GNU CC.  If GNU CC is modified by
! someone else and passed on, we want its recipients to know that what
! they have is not what we distributed, so that any problems introduced
! by others will not reflect on our reputation.
! 
!   Therefore we (Richard Stallman and the Free Software Foundation,
! Inc.) make the following terms which say what you must do to be
! allowed to distribute or change GNU CC.
! 
! 
! 			COPYING POLICIES
! 
!   1. You may copy and distribute verbatim copies of GNU CC source code
! as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy a valid copyright notice "Copyright
! (C) 1988 Free Software Foundation, Inc." (or with whatever year is
! appropriate); keep intact the notices on all files that refer to this
! License Agreement and to the absence of any warranty; and give any
! other recipients of the GNU CC program a copy of this License
! Agreement along with the program.  You may charge a distribution fee
! for the physical act of transferring a copy.
! 
!   2. You may modify your copy or copies of GNU CC or any portion of it,
! and copy and distribute such modifications under the terms of
! Paragraph 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating
!     that you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish,
!     that in whole or in part contains or is a derivative of GNU CC or
!     any part thereof, to be licensed at no charge to all third
!     parties on terms identical to those contained in this License
!     Agreement (except that you may choose to grant more extensive
!     warranty protection to some or all third parties, at your option).
! 
!     c) You may charge a distribution fee for the physical act of
!     transferring a copy, and you may at your option offer warranty
!     protection in exchange for a fee.
  
! Mere aggregation of another unrelated program with this program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
  
!   3. You may copy and distribute GNU CC (or a portion or derivative of it,
! under Paragraph 2) in object code or executable form under the terms of
  Paragraphs 1 and 2 above provided that you also do one of the following:
  
--- 1,105 ----
  
! 		    GNU GENERAL PUBLIC LICENSE
! 		     Version 1, February 1989
  
!  Copyright (C) 1989 Free Software Foundation, Inc.
!                     675 Mass Ave, Cambridge, MA 02139, USA
   Everyone is permitted to copy and distribute verbatim copies
!  of this license document, but changing it is not allowed.
  
! 			    Preamble
  
!   The license agreements of most software companies try to keep users
! at the mercy of those companies.  By contrast, our General Public
! License is intended to guarantee your freedom to share and change free
! software--to make sure the software is free for all its users.  The
! General Public License applies to the Free Software Foundation's
! software and to any other program whose authors commit to using it.
! You can use it for your programs, too.
! 
!   When we speak of free software, we are referring to freedom, not
! price.  Specifically, the General Public License is designed to make
! sure that you have the freedom to give away or sell copies of free
! software, that you receive source code or can get it if you want it,
! that you can change the software or use pieces of it in new free
! programs; and that you know you can do these things.
! 
!   To protect your rights, we need to make restrictions that forbid
! anyone to deny you these rights or to ask you to surrender the rights.
! These restrictions translate to certain responsibilities for you if you
! distribute copies of the software, or if you modify it.
! 
!   For example, if you distribute copies of a such a program, whether
! gratis or for a fee, you must give the recipients all the rights that
! you have.  You must make sure that they, too, receive or can get the
  source code.  And you must tell them their rights.
  
!   We protect your rights with two steps: (1) copyright the software, and
! (2) offer you this license which gives you legal permission to copy,
! distribute and/or modify the software.
  
!   Also, for each author's protection and ours, we want to make certain
! that everyone understands that there is no warranty for this free
! software.  If the software is modified by someone else and passed on, we
! want its recipients to know that what they have is not the original, so
! that any problems introduced by others will not reflect on the original
! authors' reputations.
! 
!   The precise terms and conditions for copying, distribution and
! modification follow.
! \f


! 		    GNU GENERAL PUBLIC LICENSE
!    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
! 
!   0. This License Agreement applies to any program or other work which
! contains a notice placed by the copyright holder saying it may be
! distributed under the terms of this General Public License.  The
! "Program", below, refers to any such program or work, and a "work based
! on the Program" means either the Program or any work containing the
! Program or a portion of it, either verbatim or with modifications.  Each
! licensee is addressed as "you".
! 
!   1. You may copy and distribute verbatim copies of the Program's source
! code as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy an appropriate copyright notice and
! disclaimer of warranty; keep intact all the notices that refer to this
! General Public License and to the absence of any warranty; and give any
! other recipients of the Program a copy of this General Public License
! along with the Program.  You may charge a fee for the physical act of
! transferring a copy.
! 
!   2. You may modify your copy or copies of the Program or any portion of
! it, and copy and distribute such modifications under the terms of Paragraph
! 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating that
!     you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish, that
!     in whole or in part contains the Program or any part thereof, either
!     with or without modifications, to be licensed at no charge to all
!     third parties under the terms of this General Public License (except
!     that you may choose to grant warranty protection to some or all
!     third parties, at your option).
! 
!     c) If the modified program normally reads commands interactively when
!     run, you must cause it, when started running for such interactive use
!     in the simplest and most usual way, to print or display an
!     announcement including an appropriate copyright notice and a notice
!     that there is no warranty (or else, saying that you provide a
!     warranty) and that users may redistribute the program under these
!     conditions, and telling the user how to view a copy of this General
!     Public License.
! 
!     d) You may charge a fee for the physical act of transferring a
!     copy, and you may at your option offer warranty protection in
!     exchange for a fee.
  
! Mere aggregation of another independent work with the Program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other work under the scope of these terms.
! \f


!   3. You may copy and distribute the Program (or a portion or derivative of
! it, under Paragraph 2) in object code or executable form under the terms of
  Paragraphs 1 and 2 above provided that you also do one of the following:
  
***************
*** 80,85 ****
  
      b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal
!     shipping charge) a complete machine-readable copy of the
      corresponding source code, to be distributed under the terms of
      Paragraphs 1 and 2 above; or,
--- 109,114 ----
  
      b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal charge
!     for the cost of distribution) a complete machine-readable copy of the
      corresponding source code, to be distributed under the terms of
      Paragraphs 1 and 2 above; or,
***************
*** 90,138 ****
      received the program in object code or executable form alone.)
  
! For an executable file, complete source code means all the source code for
! all modules it contains; but, as a special exception, it need not include
! source code for modules which are standard libraries that accompany the
! operating system on which the executable file runs.
  
!   4. You may not copy, sublicense, distribute or transfer GNU CC
! except as expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer GNU CC is void and
! your rights to use the program under this License agreement shall be
! automatically terminated.  However, parties who have received computer
! software programs from you with this License Agreement will not have
! their licenses terminated so long as such parties remain in full compliance.
! 
!   5. If you wish to incorporate parts of GNU CC into other free programs
! whose distribution conditions are different, write to the Free Software
! Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet worked
! out a simple rule that can be stated here, but we will often permit this.
! We will be guided by the two goals of preserving the free status of all
! derivatives of our free software and of promoting the sharing and reuse of
! software.
! 
! Your comments and suggestions about our licensing policies and our
! software are welcome!  Please contact the Free Software Foundation, Inc.,
! 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296.
! 
! 		       NO WARRANTY
! 
!   BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
! WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT
! WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
! PERFORMANCE OF GNU CC IS WITH YOU.  SHOULD GNU CC PROVE DEFECTIVE, YOU
! ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
! 
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO
! YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
! SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
! INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
! BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
! FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN
! IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
! ANY CLAIM BY ANY OTHER PARTY.
--- 119,249 ----
      received the program in object code or executable form alone.)
  
! Source code for a work means the preferred form of the work for making
! modifications to it.  For an executable file, complete source code means
! all the source code for all modules it contains; but, as a special
! exception, it need not include source code for modules which are standard
! libraries that accompany the operating system on which the executable
! file runs, or for standard header files or definitions files that
! accompany that operating system.
! 
!   4. You may not copy, modify, sublicense, distribute or transfer the
! Program except as expressly provided under this General Public License.
! Any attempt otherwise to copy, modify, sublicense, distribute or transfer
! the Program is void, and will automatically terminate your rights to use
! the Program under this License.  However, parties who have received
! copies, or rights to use copies, from you under this General Public
! License will not have their licenses terminated so long as such parties
! remain in full compliance.
! 
!   5. By copying, distributing or modifying the Program (or any work based
! on the Program) you indicate your acceptance of this license to do so,
! and all its terms and conditions.
! 
!   6. Each time you redistribute the Program (or any work based on the
! Program), the recipient automatically receives a license from the original
! licensor to copy, distribute or modify the Program subject to these
! terms and conditions.  You may not impose any further restrictions on the
! recipients' exercise of the rights granted herein.
! \f


!   7. The Free Software Foundation may publish revised and/or new versions
! of the General Public License from time to time.  Such new versions will
! be similar in spirit to the present version, but may differ in detail to
! address new problems or concerns.
! 
! Each version is given a distinguishing version number.  If the Program
! specifies a version number of the license which applies to it and "any
! later version", you have the option of following the terms and conditions
! either of that version or of any later version published by the Free
! Software Foundation.  If the Program does not specify a version number of
! the license, you may choose any version ever published by the Free Software
! Foundation.
! 
!   8. If you wish to incorporate parts of the Program into other free
! programs whose distribution conditions are different, write to the author
! to ask for permission.  For software which is copyrighted by the Free
! Software Foundation, write to the Free Software Foundation; we sometimes
! make exceptions for this.  Our decision will be guided by the two goals
! of preserving the free status of all derivatives of our free software and
! of promoting the sharing and reuse of software generally.
! 
! 			    NO WARRANTY
! 
!   9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
! FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
! OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
! PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
! OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
! MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
! TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
! PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
! REPAIR OR CORRECTION.
! 
!   10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
! WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
! REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
! INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
! OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
! TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
! YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
! PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGES.
! 
! 		     END OF TERMS AND CONDITIONS
! \f


! 	Appendix: How to Apply These Terms to Your New Programs
! 
!   If you develop a new program, and you want it to be of the greatest
! possible use to humanity, the best way to achieve this is to make it
! free software which everyone can redistribute and change under these
! terms.
! 
!   To do so, attach the following notices to the program.  It is safest to
! attach them to the start of each source file to most effectively convey
! the exclusion of warranty; and each file should have at least the
! "copyright" line and a pointer to where the full notice is found.
! 
!     <one line to give the program's name and a brief idea of what it does.>
!     Copyright (C) 19yy  <name of author>
! 
!     This program is free software; you can redistribute it and/or modify
!     it under the terms of the GNU General Public License as published by
!     the Free Software Foundation; either version 1, or (at your option)
!     any later version.
! 
!     This program is distributed in the hope that it will be useful,
!     but WITHOUT ANY WARRANTY; without even the implied warranty of
!     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
!     GNU General Public License for more details.
! 
!     You should have received a copy of the GNU General Public License
!     along with this program; if not, write to the Free Software
!     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
! 
! Also add information on how to contact you by electronic and paper mail.
! 
! If the program is interactive, make it output a short notice like this
! when it starts in an interactive mode:
! 
!     Gnomovision version 69, Copyright (C) 19xx name of author
!     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
!     This is free software, and you are welcome to redistribute it
!     under certain conditions; type `show c' for details.
! 
! The hypothetical commands `show w' and `show c' should show the
! appropriate parts of the General Public License.  Of course, the
! commands you use may be called something other than `show w' and `show
! c'; they could even be mouse-clicks or menu items--whatever suits your
! program.
! 
! You should also get your employer (if you work as a programmer) or your
! school, if any, to sign a "copyright disclaimer" for the program, if
! necessary.  Here a sample; alter the names:
! 
!   Yoyodyne, Inc., hereby disclaims all copyright interest in the
!   program `Gnomovision' (a program to direct compilers to make passes
!   at assemblers) written by James Hacker.
! 
!   <signature of Ty Coon>, 1 April 1989
!   Ty Coon, President of Vice
  
! That's all there is to it!
diff -rc2N gcc-1.33/ChangeLog gcc-1.34/ChangeLog
*** gcc-1.33/ChangeLog	Wed Feb  1 20:20:01 1989
--- gcc-1.34/ChangeLog	Fri Feb 24 06:20:11 1989
***************
*** 1,2 ****
--- 1,395 ----
+ Thu Feb 23 05:55:57 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* Version 1.34 released.
+ 
+ 	* c-typeck.c (build_c_cast): If EXPR is an error mark, return that.
+ 
+ 	* fold-const.c (div_and_round_double): Abort if divisor is 0.
+ 	(combine): Likewise, for real constants.
+ 	(real_zerop): New subroutine.
+ 	(fold): Don't try to fold division if divisor is 0.
+ 	Don't try to fold reals if can't do arithmetic on them.
+ 	Don't try to compare reals for TRUTH_..._EXPR if can't do arith.
+ 	Use real_zerop to test reals for zeroness.
+ 	For TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR, can simplify based on
+ 	first operand alone.
+ 
+ 	* c-typeck.c (store_init_value): Fix error msg text.
+ 
+ 	* tm-sparc.h (FUNCTION_PROFILER): Use `mcount'.
+ 	* tm-sun4os3.h (FUNCTION_PROFILER): Override it; use `.mcount'.
+ 
+ Wed Feb 22 04:33:22 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* tm-hp9k320.h (CPP_SPEC, CPP_PREDEFINES): Make handling of
+ 	-Dmc68000 depend on TARGET_DEFAULT.
+ 
+ 	* tm-sparc.h (FUNCTION_PROFILER): Missing newline in fprintf.
+ 
+ 	* integrate.c (expand_inline_function): Don't map struct-value-address
+ 	in memory if fn does not use it.
+ 
+ 	* c-parse.y (check_newline): At skipline, detect eof.
+ 
+ 	* stmt.c (uninitialized_vars_warning): Change text of warning.
+ 
+ Tue Feb 21 03:58:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* output-sparc.c (output_mul_insn): Handle case of both args
+ 	in reg 8, or both in reg 9.
+ 
+ 	* tm-sparc.h (ASM_SPEC): Define, to handle -pipe.
+ 
+ 	* tm-sparc.h (FUNCTION_PROFILER): Add omitted fprintf args.
+ 	(BLOCK_PROFILER): Likewise.  Use tempvar.
+ 
+ 	* m68k.md (QImode btst): Allow nonoffsetable mem refs.
+ 
+ Mon Feb 20 00:32:42 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* flow.c (mark_used_regs): Don't record about global reg vars.
+ 
+ 	* config.gcc (convex-*): tm file names are tm-convex1.h, tm-convex2.h.
+ 
+ 	* tm-vax.h, tm-ns32k.h, tm-alliant.h: Define PCC_STATIC_STRUCT_RETURN.
+ 
+ 	* gcc.c (compilers): Pass `-a' to cc1.
+ 	* tm-sun3.h, tm-sparc.h (LIB_SPEC): Define, to handle `-a'.
+ 
+ 	* expr.c (emit_push_insn): Copy stack addresses to be passed to bcopy;
+ 	old method of preadjustment is broken by changes in emit_library_call.
+ 
+ 	* c-decl.c (finish_decl): New temp `temporary'; don't get confused
+ 	about whether allocation was temporary.
+ 
+ Sun Feb 19 17:03:35 1989  Chris Smith  (csmith at mozart)
+ 
+ 	* tm-convex.h: define PCC_STATIC_STRUCT_RETURN
+ 
+ 	* convex.md:
+ 	remove pshea patterns, movsi does it better.
+ 	add ashift:DI abs:DF abs:SF
+ 	(tstdi): use a clobbered register instead of a bogus DImode zero.
+ 	(trunchiqi2): delete noninstruction cvth.b
+ 	(udivsi3, udivhi3, udivqi3): deleted, expand_divmod does it now.
+ 	(call, call_value): delete stupid call/ret -> jump optimization.
+ 	(call, call_value): flush call_ap_check, use reg_mentioned_p instead.
+ 
+ 	* convex.md: (movxx): swap constraint alternatives so that the
+ 	leftmost alternative is (set =g r).  This makes (set mem const)
+ 	get combinable input reloads of const instead of uncombinable
+ 	output reloads to mem.  They still do not combine, but wtf,
+ 	I'll inch up on it.
+ 
+ 	* output-convex.c: (const_double_{high,low}_int): new routines
+ 	to pick apart const_doubles for assembler.
+ 
+ Sun Feb 19 01:40:17 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* sparc.md (shift memory right 24 bits): Another `a1' typo.
+ 
+ 	* config.gcc (convex-*): Delete troublesome whitespace.
+ 
+ 	* c-decl.c (grokparms): Delete redundant `parm != 0' tests.
+ 
+ 	* stmt.c (fixup_memory_subreg): Slight simplification.
+ 
+ 	* tm-sparc.h (FUNCTION_PROFILER): Fill delay slot.
+ 	(FUNCTION_BLOCK_PROFILER): Use sethi.
+ 	(BLOCK_PROFILER): Use %g2, not %g0.  Use sethi.
+ 
+ Sat Feb 18 02:11:25 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* expr.c (expand_expr): Ignore const array's initial value
+ 	if it's an error_mark.
+ 	* c-decl.c (finish_decl): Set DECL_INITIAL to an error_mark
+ 	if the decl is a permanent node.
+ 
+ 	* cccp.c (rescan): If traditional, if macro ends inside string,
+ 	keep scanning for the end of the string.
+ 	(handle_directive): A line of just `#' becomes blank.
+ 	(collect_expansion): \ in strings traditionally doesn't hide macro arg.
+ 
+ 	* m68k.md, alliant.md (addsi3): New alternative a=r+a, in addition
+ 	to old a=a+r, needed since reload-insns are not commuted.
+ 
+ Fri Feb 17 03:15:23 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* tm-m68k.h (PCC_STATIC_STRUCT_RETURN): Define it.
+ 	* toplev.c, flags.h: New var flag_pcc_struct_return.
+ 	* stmt.c (expand_function_start): Obey new flag and new variable.
+ 	* expr.c (expand_call): Obey new flag and new variable.
+ 	* varasm.c (assemble_static_space): New function.
+ 
+ 	* stmt.c (expand_return): If we need cleanups, compute retval first
+ 	into pseudo reg, then do the cleanups, then copy it to return reg.
+ 
+ Thu Feb 16 02:59:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* regclass.c (init_reg_sets_1): Win if STATIC_CHAIN_REGNUM undefined.
+ 
+ 	* expr.c (expand_call): Handle conflict between two precomputed
+ 	args that are both function calls returning structures.
+ 
+ 	* loop.c (move_movables): Bkwds test of m->partial, for a matching reg.
+ 
+ 	* expr.c (emit_library_call, expand_call): Handle STACK_ARGS_ADJUST.
+ 
+ Wed Feb 15 01:59:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* toplev.c (flag_caller_saves): New var, for -fcaller-saves.
+ 	DEFAULT_CALLER_SAVES controls initial value.
+ 	* global-alloc.c (find_reg): Do caller saves only if flag set.
+ 	* local-alloc.c (find_free_reg): Do caller saves only if flag set.
+ 	* tm-alliant.h, tm-convex.h: Define DEFAULT_CALLER_SAVES.
+ 
+ Wed Feb 15 01:59:15 1989  Chris Smith  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* caller-save.c: New file.
+ 	* regs.h (CALLER_SAVE_PROFITABLE): New macro.
+ 	(reg_n_calls_crossed): new int-vector replaces reg_crosses_calls.
+ 	* flow.c (allocate_for_life_analysis, propagate_block, dump_flow_info):
+ 	Use reg_n_calls_crossed.
+ 	* stupid.c (stupid_mark_refs, stupid_life_analysis): Likewise.
+ 	* global-alloc.c (find_reg): Sometimes allocate call-clobbered regs
+ 	for call-crossing pseudos.
+ 	New arg ACCEPT_CALL_CLOBBERED; callers changed.
+ 	* local-alloc.c (find_free_reg): Similar changes.
+ 	(qty_n_calls_crossed): New int-vector replaces qty_crosses_calls.
+ 	(alloc_qty, local_alloc, combine_regs, find_free_reg): change that var.
+ 	* regclass.c (call_fixed_regs, call_fixed_reg_set): new vars.
+ 	(init_reg_sets_1): Initialize them.
+ 	* reload1.c (reload): Call caller-saves processing if needed.
+ 
+ Wed Feb 15 01:59:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* expr.c (expand_expr): INTEGER_CST for DImode: don't handle
+ 	endianness here.  So CONST_DOUBLE_LOW is always the low word.
+ 	* varasm.c (force_const_mem): Handle it here. 
+ 
+ 	* expr.c (convert_move): widening followed by extendsidi2 had braino.
+ 
+ 	* integrate.c: Don't include ctype.h; not needed and kills Sun cpp.
+ 
+ 	* m68k.md (cmpsf, cmpdf and their recognizers):
+ 	Replace MINUS with COMPARE.
+ 	Also, use VOIDmode for COMPAREs, not SF or DF.
+ 
+ 	* optabs.c (sign_expand_binop): Handle ops such as division where
+ 	an unsigned char could be widened and handled with signed int insns.
+ 	* expmed.c (expand_divmod): Use that.
+ 
+ 	* c-typeck.c (digest_init): Allow for type variants in validating
+ 	initialization from a string constant.
+ 
+ 	* c-typeck.c (decl_constant_value): Disable opt. if pedantic or
+ 	outside functions, so that validity of program is never affected.
+ 
+ 	* fold-const.c (fold): Signedness-test for ABS_EXPR was backwards.
+ 
+ Tue Feb 14 01:30:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* cccp.c (main): Don't omit normal output, if we want deps on
+ 	a separate stream.
+ 
+ 	* c-decl.c (grokdeclarator): Don't record any arg types for functions
+ 	if -traditional.
+ 
+ 	* print-tree.c (prtypeinfo): Mention permanent attribute.
+ 
+ 	* tm-next.h: New file.
+ 
+ 	* c-typeck.c (decl_constant_value): The DECL_INITIAL may be ERROR_MARK.
+ 
+ 	* c-decl.c (duplicate_decls): For fns, new static decl overrides
+ 	old non-static one.
+ 
+ 	* emit-rtl.c (gen_lowpar, gen_highpart): Use change_address, so we
+ 	preserve volatility, etc.
+ 
+ 	* stmt.c (expand_expr_stmt): Use emit_filename, emit_lineno
+ 	as file and line for any warning.
+ 	* emit-rtl.c (emit_line_note): Set those vars.
+ 
+ 	* c-decl.c (store_parm_decls): If -Wimplicit, warn of arg with no decl.
+ 
+ 	* recog.c (offsetable_address_p): Use strict_memory_address_p,	
+ 	since called from reload.c.
+ 
+ Mon Feb 13 03:11:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* sparc.md (compare-to-reg patterns): Some still had MINUS.
+ 
+ 	* toplev.c (main): Warn if `-a' on system that can't handle it.
+ 
+ 	* stmt.c (expand_asm_operands): Delete unused local `val'.
+ 	(pushcase_range): Likewise for `value'.
+ 	(fixup_var_refs): Likewise for `insn'.
+ 	* emit-rtl.c (start_sequence): Likewise for `save'.
+ 	* loop.c (scan_loop): Likewise for `before_start'.
+ 	* expr.c (expand_expr): Delete label `binop1'.
+ 
+ 	* reload1.c (constraint_accepts_reg_p): Handle SUBREGs of REGs.
+ 
+ Sun Feb 12 05:37:46 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* gnulib.c (__bb_init_func): New function
+ 
+ 	* tm-m68k.h (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): Defined.
+ 
+ Sat Feb 11 00:05:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* tm-sparc.h (FUNCTION_PROFILER): Make it really work.
+ 	(BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): New macros.
+ 
+ 	* final.c (final): Use BLOCK_PROFILER at start of each basic block.
+ 	(final_start_function): Use FUNCTION_BLOCK_PROFILER if -a.
+ 	(end_final): New fn to output the block-profiling tables.
+ 	* toplev.c (profile_block_flag): Set if -a.
+ 	(compile_file): Call end_final.
+ 
+ 	* combine.c (try_combine): Avoid combining in most cases if I3
+ 	has an inc or dec and I1 or I2 uses the same register.
+ 
+ 	* tree.c (size_in_bytes, int_size_in_bytes): Use type's main variant.
+ 
+ 	* c-typeck.c (actualparameterlist): Error if parm type is incomplete.
+ 
+ 	* expr.c (expand_call): Ignore args that have incomplete type.
+ 
+ Fri Feb 10 02:26:02 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* c-parse.y (case stmts): strip dummy NOP_EXPRs.
+ 
+ 	* reload1.c (reload_as_needed): Clear reg_{has,is}_output_reload here,
+ 	(choose_reload_targets): not here.
+ 
+ Thu Feb  9 01:35:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* output-sparc.c (output_mul_by_constant): Forget cc status.
+ 
+ 	* stmt.c (assign_parms): Don't put volatile parms in regs.
+ 
+ 	* vax.md (jlbs/jlbc recognizers): Move them before jbc/jbs recognizers.
+ 
+ 	* cse.c (fold_rtx): Handle (EQ (COMPARE ...) (CONST_INT 0)).
+ 
+ 	* c-typeck.c (default_conversion, digest_init): For static const
+ 	nonvolatile scalar variable, use its initial value if known.
+ 
+ 	* expr.c (expand_expr: case COMPONENT_REF): If containing structure
+ 	comes out volatile, leave the component MEM volatile too.
+ 
+ 	* hard-reg-set.h: Fix multi-word case macros to swallow semicolon.
+ 
+ 	* c-typeck.c (default_conversion): In array=>ptr, volatility
+ 	of target type comes from TREE_THIS_VOLATILE, not TREE_VOLATILE.
+ 
+ 	* reload1.c (forget_old_reload_1, choose_reload_targets):
+ 	New array reg_is_output_reload is converse of reg_has_output_reload.
+ 	forget_old_reload_1 needs both.
+ 
+ Wed Feb  8 01:26:24 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* reload1.c (forget_old_reloads_1): New fn, guts of forget_old_reloads.
+ 	Do process a spill reg if it isn't used for reloading in this insn.
+ 	(forget_old_reloads): Deleted, replaced with note_stores.
+ 	(reload_as_needed): Undo Feb 1 change.
+ 	Call forget_old_reloads_1 on pseudos autoincremented and not reloaded.
+ 
+ 	* c-typeck.c (convert_for_assignment): Handle variant types.
+ 
+ 	* c-decl.c (lang_decode_option): -Wall implies -Wunused.
+ 
+ Tue Feb  7 01:32:28 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* combine.c (try_combine): Don't try adding outputs to an asm_operands.
+ 
+ 	* cse.c (CHEAPER): Don't ever let a hard reg get ahead of a pseudo.
+ 
+ 	* stmt.c (fixup_gotos): Don't crash on undef label if THISBLOCK is 0.
+ 
+ 	* c-decl.c (parmlist_tags_warning): New fn.
+ 	* c-parse.y (parmlist, parmlist_or_identifiers): Call it,
+ 	to warn about any tags defined inside the parmlist.
+ 	* c-decl.c (grokparms): Don't warn about ptr to incomplete type.
+ 	The new warning is better.
+ 
+ Mon Feb  6 01:11:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* expr.c (store_constructor): Incorrect ALIGN arg in store_field calls.
+ 
+ 	* c-parse.y (%union): Delete unused alternative.
+ 
+ 	* c-decl.c (grokparms): Use main variant to test for ptr to incomplete.
+ 
+ 	* c-decl.c (finish_enum): Delete superfluous init for `pair'.
+ 
+ 	* cse.c (fold_rtx): Optimize X+0, X-0 in floating point.
+ 	Fix typo in PLUS case; omitted value to compare GET_MODE_CLASS against.
+ 	(equiv_constant): Allow CONST_DOUBLE.
+ 
+ 	* cse.c: Optimize past if-statements that are known to fail.
+ 	(cse_insn): If condjump becomes uncond to end of this block,
+ 	set cse_skip_to_next_block.
+ 	(cse_basic_block): If that happens, ignore rest of block, and maybe
+ 	treat next block as part of this one (if tables have room).
+ 	Resume insn that starts next basic block to be scanned.
+ 	(cse_main): Make room for at least 500 qtys.
+ 	(cse_end_of_basic_block): Subroutine broken out of cse_main.
+ 
+ 	* c-parse.y (hash, is_reserved_word): Rewrite: new hash technique.
+ 
+ 	* c-decl.c (duplicate_decls): Be smart about proto vs nonproto mismatch
+ 	involving a function definition.
+ 
+ Sun Feb  5 17:31:12 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* alliant.md (movdi): Typo in `fmoved'.
+ 	(ftruncsf2): Handle moving into fp reg.
+ 
+ 	* jump.c (jump_optimize): Typo in testing PRESERVE_DEATH_INFO_REGNO_P.
+ 
+ 	* reload1.c (choose_reload_targets): Move all death notes to the
+ 	output reload insn.
+ 
+ 	* m68k.md (fix_truncsfsi2,fix_truncdfsi2): Use accurate rtl pattern.
+ 
+ 	* loop.c (delete_insn_forces): Use presence of REG_RETVAL to check
+ 	for value-of-library-call insn.
+ 
+ Sat Feb  4 18:17:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* integrate.c (expand_inline_function): Make addresses of stack
+ 	slots valid somehow.
+ 
+ 	* tm-3b1.h (DIVSI3_LIBCALL, etc.): Define these macros; avoid gnulib.
+ 
+ 	* expmed.c (store_bit_field): Avoid (subreg (mem)) when converting
+ 	VALUE1 to SImode.
+ 
+ 	* jump.c (jump_optimize): Do delete USE and CLOBBER insns.
+ 	This is needed for proper jump optimization.
+ 
+ 	* rtl.def (COMPARE): New code.
+ 	* *.md (compare and related patterns): Use COMPARE, not MINUS:VOID.
+ 	* loop.c (eliminate_biv, can_eliminate_biv_p): Likewise.
+ 	* cse.c (fold_rtx, fold_cc0, cse_insn):
+ 	* output-m88k.c (output_{f,}compare, output_store):
+ 	* output-sparc.c (strict_single_insn_op_p, single_insn_src_p, safe_insn_src_p):
+ 	* combine.c (subst):
+ 	* jump.c (jump_back_p):
+ 
+ Fri Feb  3 18:34:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* output-i386.c (notice_update_cc): If arith insn sets the cc's,
+ 	discard all remnants of previous cc value and flags.
+ 
+ 	* sparc.md (ashiftrt mem by 24): Fix typo `a1'.
+ 
+ Thu Feb  2 14:55:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+ 
+ 	* output-sparc.c (output_mul_insn): Clear the CC status.
+ 
  Wed Feb  1 20:01:54 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
  
diff -rc2N gcc-1.33/INSTALL gcc-1.34/INSTALL
*** gcc-1.33/INSTALL	Wed Feb  1 01:06:07 1989
--- gcc-1.34/INSTALL	Thu Feb 23 16:03:14 1989
***************
*** 1,3 ****
! This is a copy of one node from the Info file gcc.info-1.
  For full information on installing and porting GCC, refer to the
  GCC manual:
--- 1,3 ----
! This is a copy of one node from the Info file gcc.info-2.
  For full information on installing and porting GCC, refer to the
  GCC manual:
***************
*** 44,48 ****
            GNU linker.
  
!     `sequent-386'
            Sequent with Intel 386 processors.
  
--- 44,48 ----
            GNU linker.
  
!     `sequent-i386'
            Sequent with Intel 386 processors.
  
***************
*** 95,99 ****
            HP 9000 series 300 using HPUX assembler.
  
!     `kp9k320g'
            HP 9000 series 300 using GNU assembler, linker and debugger.
            This requires the HP-adapt package which is or will soon be
--- 95,99 ----
            HP 9000 series 300 using HPUX assembler.
  
!     `hp9k320g'
            HP 9000 series 300 using GNU assembler, linker and debugger.
            This requires the HP-adapt package which is or will soon be
***************
*** 106,109 ****
--- 106,112 ----
            Sony NEWS 68020 system.
  
+     `next'
+           NeXT system.
+ 
      `3b1'
            AT&T 3b1, a.k.a. 7300 PC.
***************
*** 225,228 ****
--- 228,234 ----
            Note that Encore systems are supported only under BSD.
  
+           For Sparc (Sun 4) machines, use `tm-sparc.h' with operating
+           system version 4, and `tm-sun4os3.h' with system version 3.
+ 
          * Make a symbolic link named `md' to the machine description
            pattern file.  Its name should be `MACHINE.md', but MACHINE
***************
*** 307,311 ****
       `/usr/local/lib', which is where the compiler driver program
       looks for them.  It also copies the driver program `gcc' into
!      the directory `/usr/local', so that it appears in typical
       execution search paths.
  
--- 313,317 ----
       `/usr/local/lib', which is where the compiler driver program
       looks for them.  It also copies the driver program `gcc' into
!      the directory `/usr/local/bin', so that it appears in typical
       execution search paths.
  
***************
*** 333,337 ****
       files `ioctl.h', `ttychars.h' and many others, in a special
       directory where only GNU CC will normally look for them.  This
!      script will work on various systems because it choose the files
       by searching all the system headers for the problem cases that
       we know about.
--- 339,343 ----
       files `ioctl.h', `ttychars.h' and many others, in a special
       directory where only GNU CC will normally look for them.  This
!      script will work on various systems because it chooses the files
       by searching all the system headers for the problem cases that
       we know about.
***************
*** 348,352 ****
  
  
- ▶1f◀
  File: gcc.info,  Node: VMS Install,  Prev: Installation,  Up: Installation
  
--- 354,357 ----
diff -rc2N gcc-1.33/Makefile gcc-1.34/Makefile
*** gcc-1.33/Makefile	Sat Jan 28 19:28:26 1989
--- gcc-1.34/Makefile	Wed Feb 22 12:31:55 1989
***************
*** 4,21 ****
  #This file is part of GNU CC.
  
  #GNU CC is distributed in the hope that it will be useful,
! #but WITHOUT ANY WARRANTY.  No author or distributor
! #accepts responsibility to anyone for the consequences of using it
! #or for whether it serves any particular purpose or works at all,
! #unless he says so in writing.  Refer to the GNU CC General Public
! #License for full details.
! 
! #Everyone is granted permission to copy, modify and redistribute
! #GNU CC, but only under the conditions described in the
! #GNU CC General Public License.   A copy of this license is
! #supposed to have been given to you along with GNU CC so you
! #can know your rights and responsibilities.  It should be in a
! #file named COPYING.  Among other things, the copyright notice
! #and this notice must be preserved on all copies.
  
  
--- 4,20 ----
  #This file is part of GNU CC.
  
+ #GNU CC is free software; you can redistribute it and/or modify
+ #it under the terms of the GNU General Public License as published by
+ #the Free Software Foundation; either version 1, or (at your option)
+ #any later version.
+ 
  #GNU CC is distributed in the hope that it will be useful,
! #but WITHOUT ANY WARRANTY; without even the implied warranty of
! #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! #GNU General Public License for more details.
! 
! #You should have received a copy of the GNU General Public License
! #along with GNU CC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 29,33 ****
  SHELL = /bin/sh
  # on sysV, define this as cp.
! INSTALL = install
  
  # Directory in which to put the executable for the command `gcc'
--- 28,32 ----
  SHELL = /bin/sh
  # on sysV, define this as cp.
! INSTALL = install -c
  
  # Directory in which to put the executable for the command `gcc'
***************
*** 96,101 ****
   symout.o dbxout.o sdbout.o emit-rtl.o insn-emit.o \
   integrate.o jump.o cse.o loop.o flow.o stupid.o combine.o \
!  regclass.o local-alloc.o global-alloc.o reload.o reload1.o insn-peep.o \
!  final.o recog.o insn-recog.o insn-extract.o insn-output.o
  
  # Files to be copied away after each stage in building.
--- 95,100 ----
   symout.o dbxout.o sdbout.o emit-rtl.o insn-emit.o \
   integrate.o jump.o cse.o loop.o flow.o stupid.o combine.o \
!  regclass.o local-alloc.o global-alloc.o reload.o reload1.o caller-save.o \
!  insn-peep.o final.o recog.o insn-recog.o insn-extract.o insn-output.o
  
  # Files to be copied away after each stage in building.
***************
*** 251,254 ****
--- 250,255 ----
  reload1.o : reload1.c $(CONFIG_H) $(RTL_H) flags.h  \
     reload.h regs.h hard-reg-set.h insn-config.h basic-block.h
+ caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \
+    reload.h regs.h hard-reg-set.h insn-config.h basic-block.h recog.h
  final.o : final.c $(CONFIG_H) $(RTL_H) regs.h recog.h conditions.h gdbfiles.h \
     insn-config.h real.h
diff -rc2N gcc-1.33/PROJECTS gcc-1.34/PROJECTS
*** gcc-1.33/PROJECTS	Tue Jan 24 02:33:14 1989
--- gcc-1.34/PROJECTS	Tue Feb 21 04:08:49 1989
***************
*** 50,56 ****
  
  A store into memory is dead if it is followed by another store into
! the same location; and, in between, there is no reference to
! that anything that might be that location (including no reference
! to a variable address).
  
  * Loop optimization.
--- 50,56 ----
  
  A store into memory is dead if it is followed by another store into
! the same location; and, in between, there is no reference to anything
! that might be that location (including no reference to a variable
! address).
  
  * Loop optimization.
***************
*** 60,64 ****
  not worth making explicit because they can be computed as part of an
  address calculation.  Based on this information, they should decide
! when it is desirable to eliminate one iteration iable and create
  another in its place.
  
--- 60,64 ----
  not worth making explicit because they can be computed as part of an
  address calculation.  Based on this information, they should decide
! when it is desirable to eliminate one iteration variable and create
  another in its place.
  
***************
*** 208,246 ****
  now have a way to understand this.
  
- * Some machines use a caller-saves convention for saving registers over
- function calls.  Here is a design for how to handle such a convention.
- 
- Classify all the hard registers as call-clobbered, then teach the
- compiler how to put call-crossing pseudo-regs in call-clobbered hard
- registers by generating save/restore insns around the call.  Generate
- the save/restores somewhere around the reload pass; this avoids
- getting confused by cross jumping which happens after.  Actually put
- the save/restore insns into the RTL chain, so that cross-jumping and
- peephole opt. will work on them.
- 
- The time to generate these insns is when you can still tell what regs
- are live at each call, but late enough to know exactly where the
- pseudos have been allocated.  Perhaps the best time is just before
- reload_as_needed.
- 
- This requires changes in local-alloc.c and global-alloc.c to be willing
- to allocate call-crossing pseudos to call-clobbered registers.
- That isn't hard if you do it with a special flag macro that simply says to
- ignore (in those passes) whether a register is call-clobbered.
- This macro would be defined if the target machine uses caller-saves.
- 
- To get the best output, it is necessary to count the cost (in
- additional save/restores) for each pseudo register of putting it in a
- call-clobbered hard reg.  This means counting *how many times* each
- pseudo crosses a call.  Depending on that value, it might be better to
- put the pseudo in memory than in a call-clobbered register.  Cost
- counting would be done in flow.c, perhaps, and costs would affect
- allocation decisions in local-alloc and global-alloc.  Perhaps each
- pseudo should have one priority for getting a call-saved reg and
- another, lower (in general) priority for a call-clobbered reg.
- 
- Then there would no longer be a need for the flag: the changes would
- improve the output, on all machines.
- 
  5. Precompilation of header files.
  
--- 208,211 ----
***************
*** 312,315 ****
--- 277,282 ----
  of the text being divided up.
  
+ JNC@lcs.mit.edu has some ideas on this subject also.
+ 
  6. Other possibly nice features.
  
***************
*** 364,368 ****
      B. The itinerary of a C program through GCC
      C. A system of benchmark programs
!     D. What your RTL and assembler look should like with these benchmarks
      E. Fine tuning for speed and size of compiled code
  VII.   A systematic procedure for debugging an implementation of GCC
--- 331,335 ----
      B. The itinerary of a C program through GCC
      C. A system of benchmark programs
!     D. What your RTL and assembler should look like with these benchmarks
      E. Fine tuning for speed and size of compiled code
  VII.   A systematic procedure for debugging an implementation of GCC
diff -rc2N gcc-1.33/README gcc-1.34/README
*** gcc-1.33/README	Wed Feb  1 21:34:57 1989
--- gcc-1.34/README	Fri Feb 24 10:57:28 1989
***************
*** 1,7 ****
! This directory contains the version 1.33 test release of the GNU C compiler.
  All bugs reported for previous test releases have been fixed.
  Some bugs surely remain.
  
! See the file internals.texinfo for installation and porting information.
  The file INSTALL contains a copy of the installation information.
  
--- 1,7 ----
! This directory contains the version 1.34 test release of the GNU C compiler.
  All bugs reported for previous test releases have been fixed.
  Some bugs surely remain.
  
! See the file gcc.texinfo for installation and porting information.
  The file INSTALL contains a copy of the installation information.
  
diff -rc2N gcc-1.33/README.NS32K gcc-1.34/README.NS32K
*** gcc-1.33/README.NS32K	Fri May  6 16:43:26 1988
--- gcc-1.34/README.NS32K	Wed Feb 22 12:29:18 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
- Everyone is granted permission to copy, modify and redistribute
- GNU CC, but only under the conditions described in the
- GNU CC General Public License.   A copy of this license is
- supposed to have been given to you along with GNU CC so you
- can know your rights and responsibilities.  It should be in a
- file named COPYING.  Among other things, the copyright notice
- and this notice must be preserved on all copies.
  
  This file describes the implementation notes of the GNU C Compiler for
--- 4,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
  This file describes the implementation notes of the GNU C Compiler for
diff -rc2N gcc-1.33/alliant.md gcc-1.34/alliant.md
*** gcc-1.33/alliant.md	Sun Jan 29 20:25:07 1989
--- gcc-1.34/alliant.md	Wed Feb 22 12:31:23 1989
***************
*** 1,22 ****
  ;;- Machine description for GNU compiler
  ;;- Alliant FX Version (Based on Motorola 68000)
! ;;   Copyright (C) 1988 Free Software Foundation, Inc.
  
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 1,21 ----
  ;;- Machine description for GNU compiler
  ;;- Alliant FX Version (Based on Motorola 68000)
! ;;   Copyright (C) 1989 Free Software Foundation, Inc.
  
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 155,160 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "general_operand" "rKs,mr")
! 	       (match_operand:SI 1 "general_operand" "mr,Ksr")))]
    ""
    "*
--- 154,159 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "general_operand" "rKs,mr")
! 		 (match_operand:SI 1 "general_operand" "mr,Ksr")))]
    ""
    "*
***************
*** 162,166 ****
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     { cc_status.flags |= CC_REVERSED;
        return \"cmpl %0,%1\"; 
      }
--- 161,166 ----
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     {
!       cc_status.flags |= CC_REVERSED;
        return \"cmpl %0,%1\"; 
      }
***************
*** 170,175 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "general_operand" "rn,mr")
! 	       (match_operand:HI 1 "general_operand" "mr,nr")))]
    ""
    "*
--- 170,175 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "general_operand" "rn,mr")
! 		 (match_operand:HI 1 "general_operand" "mr,nr")))]
    ""
    "*
***************
*** 177,181 ****
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     { cc_status.flags |= CC_REVERSED;
        return \"cmpw %0,%1\"; 
      }
--- 177,182 ----
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     {
!       cc_status.flags |= CC_REVERSED;
        return \"cmpw %0,%1\"; 
      }
***************
*** 188,193 ****
  ;;(define_insn ""
  ;;  [(set (cc0)
! ;;	(minus (match_operand:QI 0 "memory_operand" ">")
! ;;	       (match_operand:QI 1 "memory_operand" ">")))]
  ;;  "GET_CODE (XEXP (operands[0], 0)) == POST_INC
  ;;   && GET_CODE (XEXP (operands[1], 0)) == POST_INC"
--- 189,194 ----
  ;;(define_insn ""
  ;;  [(set (cc0)
! ;;	(compare (match_operand:QI 0 "memory_operand" ">")
! ;;	         (match_operand:QI 1 "memory_operand" ">")))]
  ;;  "GET_CODE (XEXP (operands[0], 0)) == POST_INC
  ;;   && GET_CODE (XEXP (operands[1], 0)) == POST_INC"
***************
*** 196,201 ****
  (define_insn "cmpqi"
    [(set (cc0)
! 	(minus (match_operand:QI 0 "general_operand" "dn,md")
! 	       (match_operand:QI 1 "general_operand" "dm,nd")))]
    ""
    "*
--- 197,202 ----
  (define_insn "cmpqi"
    [(set (cc0)
! 	(compare (match_operand:QI 0 "general_operand" "dn,md")
! 		 (match_operand:QI 1 "general_operand" "dm,nd")))]
    ""
    "*
***************
*** 203,207 ****
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     { cc_status.flags |= CC_REVERSED;
        return \"cmpb %0,%1\";
      }
--- 204,209 ----
    if (REG_P (operands[1])
        || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
!     {
!       cc_status.flags |= CC_REVERSED;
        return \"cmpb %0,%1\";
      }
***************
*** 211,216 ****
  (define_expand "cmpdf"
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "general_operand" "")
! 		  (match_operand:DF 1 "general_operand" "")))]
    "TARGET_68881"
    "")
--- 213,218 ----
  (define_expand "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "")
! 		 (match_operand:DF 1 "general_operand" "")))]
    "TARGET_68881"
    "")
***************
*** 218,223 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "general_operand" "f,m")
! 		  (match_operand:DF 1 "general_operand" "fm,f")))]
    "TARGET_68881"
    "*
--- 220,225 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "f,m")
! 		 (match_operand:DF 1 "general_operand" "fm,f")))]
    "TARGET_68881"
    "*
***************
*** 237,242 ****
  (define_expand "cmpsf"
   [(set (cc0)
!        (minus:SF (match_operand:SF 0 "general_operand" "")
! 		 (match_operand:SF 1 "general_operand" "")))]
   "TARGET_68881"
   "")
--- 239,244 ----
  (define_expand "cmpsf"
   [(set (cc0)
!        (compare (match_operand:SF 0 "general_operand" "")
! 		(match_operand:SF 1 "general_operand" "")))]
   "TARGET_68881"
   "")
***************
*** 244,249 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "general_operand" "f,md")
! 		  (match_operand:SF 1 "general_operand" "fmd,f")))]
    "TARGET_68881"
    "*
--- 246,251 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "f,md")
! 		 (match_operand:SF 1 "general_operand" "fmd,f")))]
    "TARGET_68881"
    "*
***************
*** 433,439 ****
  	       && INTVAL (operands[1]) < 128
  	       && INTVAL (operands[1]) >= -128)
!         {
! 	  return \"moveq %1,%0\";
! 	}
        else if (ADDRESS_REG_P (operands[0])
  	       && INTVAL (operands[1]) < 0x8000
--- 435,439 ----
  	       && INTVAL (operands[1]) < 128
  	       && INTVAL (operands[1]) >= -128)
! 	return \"moveq %1,%0\";
        else if (ADDRESS_REG_P (operands[0])
  	       && INTVAL (operands[1]) < 0x8000
***************
*** 676,680 ****
        if (REG_P (operands[0]))
  	{
! 	  output_asm_insn (\"fmove.d %1,%-\;movl %+,%0\", operands);
  	  operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  	  return \"movl %+,%0\";
--- 676,680 ----
        if (REG_P (operands[0]))
  	{
! 	  output_asm_insn (\"fmoved %1,%-\;movl %+,%0\", operands);
  	  operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  	  return \"movl %+,%0\";
***************
*** 955,966 ****
    "*
  {
!   if (FP_REG_P (operands[1])) {
!     if (FP_REG_P (operands[0])) 
!       return \"fmoveds %1,%0\";
!     else {
!       output_asm_insn (\"fmoveds %1,%-\", operands);
!       return \"movl %+,%0\";
      }
-   }
    if (FP_REG_P (operands[0])) 
      return \"fmoveds %1,%0\";
--- 955,968 ----
    "*
  {
!   if (FP_REG_P (operands[1]))
!     {
!       if (FP_REG_P (operands[0])) 
! 	return \"fmoveds %1,%0\";
!       else
! 	{
! 	  output_asm_insn (\"fmoveds %1,%-\", operands);
! 	  return \"movl %+,%0\";
! 	}
      }
    if (FP_REG_P (operands[0])) 
      return \"fmoveds %1,%0\";
***************
*** 1034,1049 ****
    "*
  {
!   if (FP_REG_P (operands[1])) {
!     if (FP_REG_P (operands[0])) {
!       output_asm_insn (\"fmovedl %1,%-\", operands);
        return \"fmoveld %+,%0\";
      }
-     return \"fmovedl %1,%0\";
-   }
-   if (FP_REG_P (operands[0])) {
-     output_asm_insn (\"fmoved %1,%0\", operands);
-     output_asm_insn (\"fmovedl %0,%-\", operands);
-     return \"fmoveld %+,%0\";
-   }
    return \"fmovedl %1,%0\";
  }")
--- 1036,1054 ----
    "*
  {
!   if (FP_REG_P (operands[1]))
!     {
!       if (FP_REG_P (operands[0]))
! 	{
! 	  output_asm_insn (\"fmovedl %1,%-\", operands);
! 	  return \"fmoveld %+,%0\";
!         }
!       return \"fmovedl %1,%0\";
!     }
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmoved %1,%0\", operands);
!       output_asm_insn (\"fmovedl %0,%-\", operands);
        return \"fmoveld %+,%0\";
      }
    return \"fmovedl %1,%0\";
  }")
***************
*** 1055,1065 ****
    "*
  {
!   if (FP_REG_P (operands[1])) {
!     if (FP_REG_P (operands[0])) {
        output_asm_insn (\"fmovesl %1,%-\", operands);
        return \"fmovels %+,%0\";
      }
-     return \"fmovesl %1,%0\";
-   }
    return \"fmovesl %1,%0\";
  }")
--- 1060,1077 ----
    "*
  {
!   if (FP_REG_P (operands[1]))
!     {
!       if (FP_REG_P (operands[0]))
!         {
! 	  output_asm_insn (\"fmovesl %1,%-\", operands);
! 	  return \"fmovels %+,%0\";
! 	}
!       return \"fmovesl %1,%0\";
!     }
!   if (FP_REG_P (operands[0]))
!     {
        output_asm_insn (\"fmovesl %1,%-\", operands);
        return \"fmovels %+,%0\";
      }
    return \"fmovesl %1,%0\";
  }")
***************
*** 1073,1084 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesb %1,%-\", operands);
!     return \"fmovebs %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesb %1,%-\", operands);
!     return \"movb% %+,%0\";
!   }
    return \"fmovesb %1,%0\";
  }")
--- 1085,1098 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesb %1,%-\", operands);
!       return \"fmovebs %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesb %1,%-\", operands);
!       return \"movb% %+,%0\";
!     }
    return \"fmovesb %1,%0\";
  }")
***************
*** 1090,1101 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesw %1,%-\", operands);
!     return \"fmovews %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesw %1,%-\", operands);
!     return \"movw% %+,%0\";
!   }
    return \"fmovesw %1,%0\";
  }")
--- 1104,1117 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesw %1,%-\", operands);
!       return \"fmovews %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesw %1,%-\", operands);
!       return \"movw% %+,%0\";
!     }
    return \"fmovesw %1,%0\";
  }")
***************
*** 1107,1118 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesl %1,%-\", operands);
!     return \"fmovels %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovesl %1,%-\", operands);
!     return \"movl %+,%0\";
!   }
    return \"fmovesl %1,%0\";
  }")
--- 1123,1136 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesl %1,%-\", operands);
!       return \"fmovels %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovesl %1,%-\", operands);
!       return \"movl %+,%0\";
!     }
    return \"fmovesl %1,%0\";
  }")
***************
*** 1124,1135 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedb %1,%-\", operands);
!     return \"fmovebd %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedb %1,%-\", operands);
!     return \"movb% %+,%0\";
!   }
    return \"fmovedb %1,%0\";
  }")
--- 1142,1155 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedb %1,%-\", operands);
!       return \"fmovebd %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedb %1,%-\", operands);
!       return \"movb% %+,%0\";
!     }
    return \"fmovedb %1,%0\";
  }")
***************
*** 1141,1152 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedw %1,%-\", operands);
!     return \"fmovewd %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedw %1,%-\", operands);
!     return \"movw% %+,%0\";
!   }
    return \"fmovedw %1,%0\";
  }")
--- 1161,1174 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedw %1,%-\", operands);
!       return \"fmovewd %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedw %1,%-\", operands);
!       return \"movw% %+,%0\";
!     }
    return \"fmovedw %1,%0\";
  }")
***************
*** 1158,1169 ****
    "*
  {
!   if (FP_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedl %1,%-\", operands);
!     return \"fmoveld %+,%0\";
!   }
!   if (DATA_REG_P (operands[0])) {
!     output_asm_insn (\"fmovedl %1,%-\", operands);
!     return \"movl %+,%0\";
!   }
    return \"fmovedl %1,%0\";
  }")
--- 1180,1193 ----
    "*
  {
!   if (FP_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedl %1,%-\", operands);
!       return \"fmoveld %+,%0\";
!     }
!   if (DATA_REG_P (operands[0]))
!     {
!       output_asm_insn (\"fmovedl %1,%-\", operands);
!       return \"movl %+,%0\";
!     }
    return \"fmovedl %1,%0\";
  }")
***************
*** 1173,1179 ****
  
  (define_insn "addsi3"
!   [(set (match_operand:SI 0 "general_operand" "=m,r,!a")
! 	(plus:SI (match_operand:SI 1 "general_operand" "%0,0,a")
! 		 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJK")))]
    ""
    "*
--- 1197,1203 ----
  
  (define_insn "addsi3"
!   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,!a")
! 	(plus:SI (match_operand:SI 1 "general_operand" "%0,0,a,rJK")
! 		 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJK,a")))]
    ""
    "*
***************
*** 1181,1184 ****
--- 1205,1216 ----
    if (! operands_match_p (operands[0], operands[1]))
      {
+       if (!ADDRESS_REG_P (operands[1]))
+ 	{
+ 	  rtx tmp = operands[1];
+ 
+ 	  operands[1] = operands[2];
+ 	  operands[2] = tmp;
+ 	}
+ 
        /* These insns can result from reloads to access
  	 stack slots over 64k from the frame pointer.  */
***************
*** 1714,1720 ****
      { 
        if (DATA_REG_P (operands[0]))
! 	{
! 	  operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
! 	}
        else
          {
--- 1746,1750 ----
      { 
        if (DATA_REG_P (operands[0]))
! 	operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
        else
          {
***************
*** 1917,1923 ****
  
  (define_insn ""
!   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
! 		     (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				  (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && (INTVAL (operands[0]) & ~0xff) == 0)"
--- 1947,1953 ----
  
  (define_insn ""
!   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
! 		       (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				    (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && (INTVAL (operands[0]) & ~0xff) == 0)"
***************
*** 1927,1933 ****
  
  (define_insn ""
!   [(set (cc0) (minus (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				  (const_int 24))
! 		     (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && (INTVAL (operands[1]) & ~0xff) == 0)"
--- 1957,1963 ----
  
  (define_insn ""
!   [(set (cc0) (compare (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				    (const_int 24))
! 		       (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && (INTVAL (operands[1]) & ~0xff) == 0)"
***************
*** 1937,1943 ****
  
  (define_insn ""
!   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
! 		     (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				  (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
--- 1967,1973 ----
  
  (define_insn ""
!   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
! 		       (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				    (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
***************
*** 1947,1953 ****
  
  (define_insn ""
!   [(set (cc0) (minus (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				  (const_int 24))
! 		     (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
--- 1977,1983 ----
  
  (define_insn ""
!   [(set (cc0) (compare (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				    (const_int 24))
! 		       (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
***************
*** 2774,2779 ****
  		 ;; Note operand 1 has been negated!
  		 (match_operand:SI 1 "immediate_operand" "")))
!    (set (cc0) (minus (match_operand:SI 2 "general_operand" "")
! 		     (match_dup 3)))
     (set (pc) (if_then_else (ltu (cc0) (const_int 0))
  			   (label_ref (match_operand 4 "" "")) (pc)))]
--- 2804,2809 ----
  		 ;; Note operand 1 has been negated!
  		 (match_operand:SI 1 "immediate_operand" "")))
!    (set (cc0) (compare (match_operand:SI 2 "general_operand" "")
! 		       (match_dup 3)))
     (set (pc) (if_then_else (ltu (cc0) (const_int 0))
  			   (label_ref (match_operand 4 "" "")) (pc)))]
***************
*** 2848,2854 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (plus:HI (match_operand:HI 0 "general_operand" "g")
! 			     (const_int -1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
--- 2878,2884 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (plus:HI (match_operand:HI 0 "general_operand" "g")
! 			       (const_int -1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
***************
*** 2872,2878 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			     (const_int -1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
--- 2902,2908 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			       (const_int -1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
***************
*** 2928,2936 ****
    if (size == 0) 
      return \"subl a0,a0\;jsr %0\;movl a6@(-4),a0\";
!   else {
!     xoperands[1] = gen_rtx (CONST_INT, VOIDmode, size/4 );
!     output_asm_insn (\"movl sp,a0\;movl %1,%-\", xoperands );
!     return \"jsr %0\;movl a6@(-4),a0\;addqw #4,sp\";
!   }
  }")
  
--- 2958,2967 ----
    if (size == 0) 
      return \"subl a0,a0\;jsr %0\;movl a6@(-4),a0\";
!   else
!     {
!       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, size/4 );
!       output_asm_insn (\"movl sp,a0\;movl %1,%-\", xoperands );
!       return \"jsr %0\;movl a6@(-4),a0\;addqw #4,sp\";
!     }
  }")
  
***************
*** 2950,2958 ****
    if (size == 0)
      return \"subl a0,a0\;jsr %1\;movl a6@(-4),a0\";
!   else {
!     xoperands[2] = gen_rtx (CONST_INT, VOIDmode, size/4 );
!     output_asm_insn (\"movl sp,a0\;movl %2,%-\", xoperands );
!     return \"jsr %1\;movl a6@(-4),a0\;addqw #4,sp\";
!   }
  }")
  
--- 2981,2990 ----
    if (size == 0)
      return \"subl a0,a0\;jsr %1\;movl a6@(-4),a0\";
!   else
!     {
!       xoperands[2] = gen_rtx (CONST_INT, VOIDmode, size/4 );
!       output_asm_insn (\"movl sp,a0\;movl %2,%-\", xoperands );
!       return \"jsr %1\;movl a6@(-4),a0\;addqw #4,sp\";
!     }
  }")
  
diff -rc2N gcc-1.33/basic-block.h gcc-1.34/basic-block.h
*** gcc-1.33/basic-block.h	Fri Dec  9 17:30:06 1988
--- gcc-1.34/basic-block.h	Wed Feb 22 11:50:28 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/c-convert.c gcc-1.34/c-convert.c
*** gcc-1.33/c-convert.c	Fri Dec 30 16:07:45 1988
--- gcc-1.34/c-convert.c	Wed Feb 22 11:50:26 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/c-decl.c gcc-1.34/c-decl.c
*** gcc-1.33/c-decl.c	Fri Jan 27 23:37:33 1989
--- gcc-1.34/c-decl.c	Wed Feb 22 11:50:25 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 276,279 ****
--- 275,279 ----
        warn_implicit = 1;
        warn_return_type = 1;
+       warn_unused = 1;
      }
    else
***************
*** 637,648 ****
  	{
  	  error_with_decl (new, "conflicting types for `%s'");
  	  if (TREE_CODE (old) == FUNCTION_DECL
  	      && comptypes (TREE_TYPE (TREE_TYPE (old)),
  			    TREE_TYPE (TREE_TYPE (new)))
! 	      && (TYPE_ARG_TYPES (TREE_TYPE (old)) == 0
! 		  || TYPE_ARG_TYPES (TREE_TYPE (new)) == 0)
! 	      && DECL_INITIAL (old) == 0 && DECL_INITIAL (new) == 0)
  	    {
! 	      /* Classify the problem.  */
  	      register tree t = TYPE_ARG_TYPES (TREE_TYPE (old));
  	      if (t == 0)
--- 637,652 ----
  	{
  	  error_with_decl (new, "conflicting types for `%s'");
+ 	  /* Check for function type mismatch
+ 	     involving an empty arglist vs a nonempty one.  */
  	  if (TREE_CODE (old) == FUNCTION_DECL
  	      && comptypes (TREE_TYPE (TREE_TYPE (old)),
  			    TREE_TYPE (TREE_TYPE (new)))
! 	      && ((TYPE_ARG_TYPES (TREE_TYPE (old)) == 0
! 		   && DECL_INITIAL (old) == 0)
! 		  ||
! 		  (TYPE_ARG_TYPES (TREE_TYPE (new)) == 0
! 		   && DECL_INITIAL (new) == 0)))
  	    {
! 	      /* Classify the problem further.  */
  	      register tree t = TYPE_ARG_TYPES (TREE_TYPE (old));
  	      if (t == 0)
***************
*** 726,731 ****
  	{
  	  TREE_STATIC (new) = TREE_STATIC (old);
- 	  TREE_PUBLIC (new) = TREE_PUBLIC (old);
  	  TREE_EXTERNAL (new) = TREE_EXTERNAL (old);
  	}
        else
--- 730,748 ----
  	{
  	  TREE_STATIC (new) = TREE_STATIC (old);
  	  TREE_EXTERNAL (new) = TREE_EXTERNAL (old);
+ 
+ 	  /* For functions, static overrides non-static.  */
+ 	  if (TREE_CODE (new) == FUNCTION_DECL)
+ 	    {
+ 	      TREE_PUBLIC (new) &= TREE_PUBLIC (old);
+ 	      /* This is since we don't automatically
+ 		 copy the attributes of NEW into OLD.  */
+ 	      TREE_PUBLIC (old) = TREE_PUBLIC (new);
+ 	      /* If this clears `static', clear it in the identifier too.  */
+ 	      if (! TREE_PUBLIC (old))
+ 		TREE_PUBLIC (DECL_NAME (old)) = 0;
+ 	    }
+ 	  else
+ 	    TREE_PUBLIC (new) = TREE_PUBLIC (old);
  	}
        else
***************
*** 1661,1664 ****
--- 1678,1682 ----
    register tree type = TREE_TYPE (decl);
    int was_incomplete = (DECL_SIZE (decl) == 0);
+   int temporary = allocation_temporary_p ();
  
    /* If `start_decl' didn't like having an initialization, ignore it now.  */
***************
*** 1684,1689 ****
       temporary data yet.  */
  
!   if (current_binding_level == global_binding_level
!       && allocation_temporary_p ())
      end_temporary_allocation ();
  
--- 1702,1706 ----
       temporary data yet.  */
  
!   if (current_binding_level == global_binding_level && temporary)
      end_temporary_allocation ();
  
***************
*** 1785,1791 ****
  
    /* Resume permanent allocation, if not within a function.  */
!   if (allocation_temporary_p ()
!       && current_binding_level == global_binding_level)
!     permanent_allocation ();
  }
  
--- 1802,1813 ----
  
    /* Resume permanent allocation, if not within a function.  */
!   if (temporary && current_binding_level == global_binding_level)
!     {
!       permanent_allocation ();
!       /* We need to remember that this array HAD an initialization,
! 	 but discard the actual nodes, since they are temporary anyway.  */
!       if (DECL_INITIAL (decl) != 0)
! 	DECL_INITIAL (decl) = error_mark_node;
!     }
  }
  
***************
*** 2240,2243 ****
--- 2262,2267 ----
        else if (TREE_CODE (declarator) == CALL_EXPR)
  	{
+ 	  tree arg_types;
+ 
  	  /* Declaring a function type.
  	     Make sure we have a valid type for the function to return.  */
***************
*** 2264,2275 ****
  	     inner layer of declarator.  */
  
! 	  type =
! 	    build_function_type (type,
! 				 grokparms (TREE_OPERAND (declarator, 1),
! 					    funcdef_flag
! 					    /* Say it's a definition
! 					       only for the CALL_EXPR
! 					       closest to the identifier.  */
! 					    && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE));
  	  declarator = TREE_OPERAND (declarator, 0);
  	}
--- 2288,2300 ----
  	     inner layer of declarator.  */
  
! 	  arg_types = grokparms (TREE_OPERAND (declarator, 1),
! 				 funcdef_flag
! 				 /* Say it's a definition
! 				    only for the CALL_EXPR
! 				    closest to the identifier.  */
! 				 && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE);
! 	  /* Omit the arg types if -traditional, since the arg types
! 	     and the list links might not be permanent.  */
! 	  type = build_function_type (type, flag_traditional ? 0 : arg_types);
  	  declarator = TREE_OPERAND (declarator, 0);
  	}
***************
*** 2581,2585 ****
  	      if (TYPE_SIZE (type) == 0)
  		{
! 		  if (funcdef_flag && parm != 0 && DECL_NAME (parm) != 0)
  		    error ("parameter `%s' has incomplete type",
  			   IDENTIFIER_POINTER (DECL_NAME (parm)));
--- 2606,2610 ----
  	      if (TYPE_SIZE (type) == 0)
  		{
! 		  if (funcdef_flag && DECL_NAME (parm) != 0)
  		    error ("parameter `%s' has incomplete type",
  			   IDENTIFIER_POINTER (DECL_NAME (parm)));
***************
*** 2589,2596 ****
  		    {
  		      TREE_VALUE (typelt) = error_mark_node;
! 		      if (parm != 0)
! 			TREE_TYPE (parm) = error_mark_node;
  		    }
  		}
  	      else
  		{
--- 2614,2622 ----
  		    {
  		      TREE_VALUE (typelt) = error_mark_node;
! 		      TREE_TYPE (parm) = error_mark_node;
  		    }
  		}
+ #if 0  /* This has been replaced by parm_tags_warning
+ 	  which uses a more accurate criterion for what to warn about.  */
  	      else
  		{
***************
*** 2599,2605 ****
  			 || TREE_CODE (type) == REFERENCE_TYPE)
  		    type = TREE_TYPE (type);
  		  if (TYPE_SIZE (type) == 0)
  		    {
! 		      if (parm != 0 && DECL_NAME (parm) != 0)
  			warning ("parameter `%s' points to incomplete type",
  				 IDENTIFIER_POINTER (DECL_NAME (parm)));
--- 2625,2632 ----
  			 || TREE_CODE (type) == REFERENCE_TYPE)
  		    type = TREE_TYPE (type);
+ 		  type = TYPE_MAIN_VARIANT (type);
  		  if (TYPE_SIZE (type) == 0)
  		    {
! 		      if (DECL_NAME (parm) != 0)
  			warning ("parameter `%s' points to incomplete type",
  				 IDENTIFIER_POINTER (DECL_NAME (parm)));
***************
*** 2608,2611 ****
--- 2635,2639 ----
  		    }
  		}
+ #endif
  	      typelt = TREE_CHAIN (typelt);
  	    }
***************
*** 2677,2680 ****
--- 2705,2727 ----
    return saveable_tree_cons (parms, tags, nreverse (types));
  }
+ 
+ /* At end of parameter list, warn about any struct, union or enum tags
+    defined within.  Do so because these types cannot ever become complete.  */
+ 
+ void
+ parmlist_tags_warning ()
+ {
+   tree elt;
+ 
+   for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
+     {
+       enum tree_code code = TREE_CODE (TREE_VALUE (elt));
+       warning ("`%s %s' declared inside parameter list",
+ 	       (code == RECORD_TYPE ? "struct"
+ 		: code == UNION_TYPE ? "union"
+ 		: "enum"),
+ 	       IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
+     }
+ }
  \f


  /* Get the struct, enum or union (CODE says which) with tag NAME.
***************
*** 3027,3031 ****
       register tree enumtype, values;
  {
!   register tree pair = values;
    register long maxvalue = 0;
    register long minvalue = 0;
--- 3074,3078 ----
       register tree enumtype, values;
  {
!   register tree pair;
    register long maxvalue = 0;
    register long minvalue = 0;
***************
*** 3117,3122 ****
  \f


  /* Create the FUNCTION_DECL for a function definition.
-    LINE1 is the line number that the definition absolutely begins on.
-    LINE2 is the line number that the name of the function appears on.
     DECLSPECS and DECLARATOR are the parts of the declaration;
     they describe the function's name and the type it returns,
--- 3164,3167 ----
***************
*** 3354,3357 ****
--- 3399,3404 ----
  	      DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
  	      DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
+ 	      if (warn_implicit)
+ 		warning_with_decl (found, "type of `%s' defaults to `int'");
  	      pushdecl (found);
  	    }
diff -rc2N gcc-1.33/c-parse.h gcc-1.34/c-parse.h
*** gcc-1.33/c-parse.h	Tue Apr  5 18:41:20 1988
--- gcc-1.34/c-parse.h	Wed Feb 22 11:50:21 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/c-parse.y gcc-1.34/c-parse.y
*** gcc-1.33/c-parse.y	Mon Jan  9 18:43:12 1989
--- gcc-1.34/c-parse.y	Wed Feb 22 11:47:36 1989
***************
*** 1,25 ****
  /* YACC parser for C syntax.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
! /*  To whomever it may concern: I have heard that such a thing was once
!  written by AT&T, but I have never seen it.  */
  
  %expect 23
--- 1,24 ----
  /* YACC parser for C syntax.
!    Copyright (C) 1987, 1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
! /* To whomever it may concern: I have heard that such a thing was once
! written by AT&T, but I have never seen it.  */
  
  %expect 23
***************
*** 65,69 ****
  %start program
  
! %union {long itype; tree ttype; enum tree_code code; char *cptr; }
  
  /* All identifiers that are not reserved words
--- 64,68 ----
  %start program
  
! %union {long itype; tree ttype; enum tree_code code; }
  
  /* All identifiers that are not reserved words
***************
*** 974,977 ****
--- 973,982 ----
  		    = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  
+ 		  /* build_c_cast puts on a NOP_EXPR to make a non-lvalue.
+ 		     Strip such NOP_EXPRs.  */
+ 		  if (TREE_CODE (value) == NOP_EXPR
+ 		      && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
+ 		    value = TREE_OPERAND (value, 0);
+ 
  		  if (TREE_CODE (value) != INTEGER_CST
  		      && value != error_mark_node)
***************
*** 1104,1108 ****
  		{ pushlevel (0); }
  	  parmlist_1
! 		{ $$ = $2; poplevel (0, 0, 0); }
  	;
  
--- 1109,1115 ----
  		{ pushlevel (0); }
  	  parmlist_1
! 		{ $$ = $2;
! 		  parmlist_tags_warning ();
! 		  poplevel (0, 0, 0); }
  	;
  
***************
*** 1112,1116 ****
  		{ pushlevel (0); }
  	  parmlist_or_identifiers_1
! 		{ $$ = $2; poplevel (0, 0, 0); }
  	;
  
--- 1119,1125 ----
  		{ pushlevel (0); }
  	  parmlist_or_identifiers_1
! 		{ $$ = $2;
! 		  parmlist_tags_warning ();
! 		  poplevel (0, 0, 0); }
  	;
  
***************
*** 1298,1365 ****
  static int end_of_file;
  
! #define MIN_WORD_SIZE       2      /* minimum size for C keyword */
! #define MAX_WORD_SIZE       9      /* maximum size for C keyword */
! #define MIN_KEY_SIZE        4      /* range of the hash keys values for the */
! #define MAX_KEY_SIZE        39     /* minimum perfect hash generator */
  
  #define NORID RID_UNUSED
  
- struct resword {char *name; short token; enum rid rid;};
- 
- /* This is the hash table of keywords.
-    The order of keywords has been chosen for perfect hashing.
-    Therefore, this table cannot be updated by hand.
-    Use the program perfect-hash to generate an updated table.  */
- 
- static struct resword reswords[] 
-   = {{NULL, 0, NORID},            
-      {NULL, 0, NORID}, /* these locations are not used. */
-      {NULL, 0, NORID}, /* they simplify the hashing.    */
-      {NULL, 0, NORID},
-      {"else", ELSE, NORID},
-      {"enum", ENUM, NORID},
-      {"while", WHILE, NORID},
-      {"extern", SCSPEC, RID_EXTERN},
-      {"double", TYPESPEC, RID_DOUBLE},
-      {"default", DEFAULT, NORID},
-      {"do", DO, NORID},
-      {"goto", GOTO, NORID},
-      {"short", TYPESPEC, RID_SHORT},        
-      {"struct", STRUCT, NORID},
-      {"return", RETURN, NORID},
-      {"signed", TYPESPEC, RID_SIGNED},       
-      {"float", TYPESPEC, RID_FLOAT},        
-      {"typeof", TYPEOF, NORID},
-      {"typedef", SCSPEC, RID_TYPEDEF},        
-      {"switch", SWITCH, NORID},
-      {"int", TYPESPEC, RID_INT},          
-      {"for", FOR, NORID},
-      {"register", SCSPEC, RID_REGISTER},       
-      {"inline", SCSPEC, RID_INLINE},         
-      {"sizeof", SIZEOF, NORID},
-      {"void", TYPESPEC, RID_VOID},         
-      {"__alignof", ALIGNOF, NORID},
-      {"volatile", TYPE_QUAL, RID_VOLATILE},    
-      {"case", CASE, NORID},
-      {"const", TYPE_QUAL, RID_CONST},       
-      {"if", IF, NORID},
-      {"long", TYPESPEC, RID_LONG},         
-      {"continue", CONTINUE, NORID},
-      {"asm", ASM, NORID},
-      {"union", UNION, NORID},
-      {"char", TYPESPEC, RID_CHAR},         
-      {"break", BREAK, NORID},               
-      {"static", SCSPEC, RID_STATIC},         
-      {"unsigned", TYPESPEC, RID_UNSIGNED},     
-      {"auto", SCSPEC, RID_AUTO}};
- 
- /* The elements of `ridpointers' are identifier nodes
-    for the reserved type names and storage classes.
-    It is indexed by a RID_... value.  */
- 
- tree ridpointers[(int) RID_MAX];
- 
- int check_newline ();
- \f


  /* This function performs the minimum-perfect hash mapping from input
     string to reswords table index.  It only looks at the first and 
--- 1307,1319 ----
  static int end_of_file;
  
! /* Data type that represents the GNU C reserved words. */
! struct resword { char *name; short token; enum rid rid; };
  
+ #define MIN_WORD_LENGTH     2      /* minimum size for C keyword */
+ #define MAX_WORD_LENGTH     9      /* maximum size for C keyword */
+ #define MIN_HASH_VALUE      4      /* range of the hash keys values for the */
+ #define MAX_HASH_VALUE      39     /* minimum perfect hash generator */
  #define NORID RID_UNUSED
  
  /* This function performs the minimum-perfect hash mapping from input
     string to reswords table index.  It only looks at the first and 
***************
*** 1370,1430 ****
  
  #ifdef __GNUC__
! inline
  #endif
! static int
  hash (str, len)
!      register char *str;             
!      register int len;
  {
-   /* This table is used to build the hash table index that recognizes
-      reserved words in 0(1) steps.  It is larger than strictly necessary, 
-      but I'm trading off the space for the time-saving luxury of avoiding 
-      subtraction of an offset. */
- 
-   static char hash_table[]
-     = {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,  0,  0,  6,  0, 29, 31, 24,
-        2,  0, 11,  1,  6, 17,  0,  0, 26,  1,
-        1,  6,  0,  0,  7,  7,  0, 28, 19,  1,
-        0,  0,  0,  0,  0,  0,  0,  0};
- 
-   /* The hash function couldn't be simpler: add the length of the string
-      to the Hash_Table value of its first and last character. */
- 
-   return len + hash_table[(int) str[0]] + hash_table[(int) str[len - 1]];
- }
  
! /* This routine attempts to match the string found in the reswords with
!    the one from the input stream.  If all the relevant details match an
!    actual strcmp comparison is performed.  */
  
  #ifdef __GNUC__
! inline
  #endif
  static struct resword *
! is_reserved_word (str,len)
!      register char *str;
!      register int len;
  {
!   if (len <= MAX_WORD_SIZE && len >= MIN_WORD_SIZE) 
      {
        register int key = hash (str, len);
  
!       if (key >= MIN_KEY_SIZE && key <= MAX_KEY_SIZE)
! 	if (reswords[key].name[0] == str[0]
! 	    && !strcmp (reswords[key].name + 1, str + 1))
! 	  return &reswords[key];
      }
!   return NULL;   
  }
  
  void
  init_lex ()
--- 1324,1459 ----
  
  #ifdef __GNUC__
! inline 
  #endif
! static int 
  hash (str, len)
!    register char	*str;
!    register int	len;
  {
  
! /* This table is used to build the hash table index that recognizes
!    reserved words in 0(1) steps.  It is larger than strictly necessary, 
!    but I'm trading off the space for the time-saving luxury of avoiding 
!    subtraction of an offset.  All those ``39's'' (actually just a
!    short-hand for MAX_HASH_VALUE #defined above) are used to speed up 
!    the search when the string found on the input stream doesn't have a 
!    first or last character that is part of the set of alphabetic 
!    characters that comprise the first or last characters in C 
!    reserved words. */
! 
!   static int hash_table[] = 
!     {
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
!       39,  39,  39,  39,  39,   5,  39,  32,  33,  18,
!        2,   0,  13,  28,  19,  18,  39,   0,   5,   1,
!       11,   3,  39,  39,  12,   6,   0,   0,   7,   1,
!       39,  39,  39,  39,  39,  39,  39,  39,
!     };
! 
! /* The hash function is very simple: add the length of STR
!    to the hash_table value of its first and last character. 
!    Putting LEN near LEN - 1 generates slightly better 
!    code... */
! 
!   return len + hash_table[str[len - 1]] + hash_table[str[0]];
! }
! 
! /* This routine attempts to match the string found in the reswords table
!    with the one from the input stream.  If all the relevant details 
!    match then an actual strcmp comparison is performed and the address of
!    correct struct resword entry is returned.  Otherwise, a NULL 
!    pointer is returned. */
  
  #ifdef __GNUC__
! inline 
  #endif
  static struct resword *
! is_reserved_word (str, len)
!    register char *str;
!    register int len;
  {
! 
! /* This is the hash table of keywords.
!    The order of keywords has been chosen for perfect hashing.
!    Therefore, this table cannot be updated by hand.
!    Use the program ``gperf,'' available with the latest libg++ 
!    distribution, to generate an updated table.  The command-line
!    arguments to build this table were: gperf -g -o -j1 -t gnuc.input  */
! 
!   static struct resword reswords[] =
!     {
! 
!       /* These first locations are unused, they simplify the hashing. */
! 
! 		{ "",},{ "",},{ "",},{ "",},
! 		{ "else", ELSE, NORID },
! 		{ "enum", ENUM, NORID },
! 		{ "while", WHILE, NORID },
! 		{ "do", DO, NORID },
! 		{ "double", TYPESPEC, RID_DOUBLE },
! 		{ "default", DEFAULT, NORID },
! 		{ "unsigned", TYPESPEC, RID_UNSIGNED },
! 		{ "short", TYPESPEC, RID_SHORT },
! 		{ "struct", STRUCT, NORID },
! 		{ "void", TYPESPEC, RID_VOID },
! 		{ "signed", TYPESPEC, RID_SIGNED },
! 		{ "volatile", TYPE_QUAL, RID_VOLATILE },
! 		{ "union", UNION, NORID },
! 		{ "extern", SCSPEC, RID_EXTERN },
! 		{ "float", TYPESPEC, RID_FLOAT },
! 		{ "typeof", TYPEOF, NORID },
! 		{ "typedef", SCSPEC, RID_TYPEDEF },
! 		{ "int", TYPESPEC, RID_INT },
! 		{ "case", CASE, NORID },
! 		{ "const", TYPE_QUAL, RID_CONST },
! 		{ "inline", SCSPEC, RID_INLINE },
! 		{ "sizeof", SIZEOF, NORID },
! 		{ "continue", CONTINUE, NORID },
! 		{ "__alignof", ALIGNOF, NORID },
! 		{ "for", FOR, NORID },
! 		{ "return", RETURN, NORID },
! 		{ "static", SCSPEC, RID_STATIC },
! 		{ "switch", SWITCH, NORID },
! 		{ "register", SCSPEC, RID_REGISTER },
! 		{ "if", IF, NORID },
! 		{ "char", TYPESPEC, RID_CHAR },
! 		{ "goto", GOTO, NORID },
! 		{ "asm", ASM, NORID },
! 		{ "long", TYPESPEC, RID_LONG },
! 		{ "break", BREAK, NORID },
! 		{ "auto", SCSPEC, RID_AUTO },
!     };
! 
!   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) 
      {
        register int key = hash (str, len);
  
!       if (key <= MAX_HASH_VALUE) 
!         {
!           register char *s = reswords[key].name;
! 
!           if (*s == *str && !strcmp (str + 1, s + 1)) 
!             return &reswords[key];
!         }
      }
!   return 0;
  }
  
+ /* The elements of `ridpointers' are identifier nodes
+    for the reserved type names and storage classes.
+    It is indexed by a RID_... value.  */
+ 
+ tree ridpointers[(int) RID_MAX];
+ 
+ int check_newline ();
+ \f


  void
  init_lex ()
***************
*** 1733,1737 ****
    /* skip the rest of this line.  */
   skipline:
!   while ((c = getc (finput)) && c != '\n');
    return c;
  }
--- 1762,1766 ----
    /* skip the rest of this line.  */
   skipline:
!   while ((c = getc (finput)) != EOF && c != '\n');
    return c;
  }
***************
*** 2375,2379 ****
  	  widep = wide_buffer;
  
! 	while (c != '"')
  	  {
  	    if (c == '\\')
--- 2404,2408 ----
  	  widep = wide_buffer;
  
! 	while (c != '"' && c >= 0)
  	  {
  	    if (c == '\\')
diff -rc2N gcc-1.33/c-tree.h gcc-1.34/c-tree.h
*** gcc-1.33/c-tree.h	Wed Jan  4 03:24:50 1989
--- gcc-1.34/c-tree.h	Wed Feb 22 11:50:19 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Nonzero means reject anything that ANSI standard C forbids.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Nonzero means reject anything that ANSI standard C forbids.  */
diff -rc2N gcc-1.33/c-typeck.c gcc-1.34/c-typeck.c
*** gcc-1.33/c-typeck.c	Sat Jan 28 20:37:00 1989
--- gcc-1.34/c-typeck.c	Fri Feb 24 06:19:44 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 602,605 ****
--- 601,624 ----
  }
  \f


+ /* Return either DECL or its known constant value (if it has one).  */
+ 
+ static tree
+ decl_constant_value (decl)
+      tree decl;
+ {
+   if (! TREE_PUBLIC (decl)
+       /* Don't change a variable array bound or initial value to a constant
+ 	 in a place where a variable is invalid.  */
+       && current_function_decl != 0
+       && ! pedantic
+       && ! TREE_THIS_VOLATILE (decl)
+       && DECL_INITIAL (decl) != 0
+       && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
+       && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
+       && DECL_MODE (decl) != BLKmode)
+     return DECL_INITIAL (decl);
+   return decl;
+ }
+ 
  /* Perform default promotions for C data used in expressions.
     Arrays and functions are converted to pointers;
***************
*** 616,619 ****
--- 635,643 ----
    if (TREE_CODE (exp) == CONST_DECL)
      exp = DECL_INITIAL (exp);
+   /* Replace a nonvolatile const static variable with its value.  */
+   else if (optimize
+ 	   && TREE_CODE (exp) == VAR_DECL
+ 	   && TREE_READONLY (exp))
+     exp = decl_constant_value (exp);
  
    /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
***************
*** 668,674 ****
  	}
  
!       if (TREE_READONLY (exp) || TREE_VOLATILE (exp))
  	restype = build_type_variant (restype, TREE_READONLY (exp),
! 				      TREE_VOLATILE (exp));
  
        ptrtype = build_pointer_type (restype);
--- 692,698 ----
  	}
  
!       if (TREE_READONLY (exp) || TREE_THIS_VOLATILE (exp))
  	restype = build_type_variant (restype, TREE_READONLY (exp),
! 				      TREE_THIS_VOLATILE (exp));
  
        ptrtype = build_pointer_type (restype);
***************
*** 1003,1013 ****
  	{
  	  /* Formal parm type is specified by a function prototype.  */
! 	  tree parmval
! 	    = convert_for_assignment (type, val, "argument passing");
  #ifdef PROMOTE_PROTOTYPES
! 	  if (TREE_CODE (type) == INTEGER_TYPE
! 	      && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
! 	    parmval = default_conversion (parmval);
  #endif
  	  parm = build_tree_list (0, parmval);
  	}
--- 1027,1046 ----
  	{
  	  /* Formal parm type is specified by a function prototype.  */
! 	  tree parmval;
! 
! 	  if (TYPE_SIZE (type) == 0)
! 	    {
! 	      error ("parameter type of called function is incomplete");
! 	      parmval = val;
! 	    }
! 	  else
! 	    {
! 	      parmval = convert_for_assignment (type, val, "argument passing");
  #ifdef PROMOTE_PROTOTYPES
! 	      if (TREE_CODE (type) == INTEGER_TYPE
! 		  && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
! 		parmval = default_conversion (parmval);
  #endif
+ 	    }
  	  parm = build_tree_list (0, parmval);
  	}
***************
*** 2754,2758 ****
    register tree value = expr;
    
!   if (type == error_mark_node)
      return error_mark_node;
    type = TYPE_MAIN_VARIANT (type);
--- 2787,2791 ----
    register tree value = expr;
    
!   if (type == error_mark_node || expr == error_mark_node)
      return error_mark_node;
    type = TYPE_MAIN_VARIANT (type);
***************
*** 3000,3004 ****
      return rhs;
  
!   if (type == rhstype)
      return rhs;
  
--- 3033,3037 ----
      return rhs;
  
!   if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
      return rhs;
  
***************
*** 3160,3164 ****
  	   && ! initializer_constant_valid_p (value))
      {
!       error ("initializer for static variable uses complex arithmetic");
        value = error_mark_node;
      }
--- 3193,3197 ----
  	   && ! initializer_constant_valid_p (value))
      {
!       error ("initializer for static variable uses complicated arithmetic");
        value = error_mark_node;
      }
***************
*** 3224,3227 ****
--- 3257,3262 ----
  	  && TREE_CODE (init) != STRING_CST)
  	warning ("ANSI C forbids initializing array from array expression");
+       if (optimize && TREE_READONLY (init) && TREE_CODE (init) == VAR_DECL)
+ 	return decl_constant_value (init);
        return init;
      }
***************
*** 3235,3238 ****
--- 3270,3275 ----
        if (pedantic && (code == RECORD_TYPE || code == UNION_TYPE))
  	warning ("single-expression nonscalar initializer has braces");
+       if (optimize && TREE_READONLY (element) && TREE_CODE (element) == VAR_DECL)
+ 	return decl_constant_value (element);
        return element;
      }
***************
*** 3286,3290 ****
  	  tree string = element ? element : init;
  
! 	  if (TREE_TYPE (TREE_TYPE (string)) != char_type_node
  	      && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
  	    {
--- 3323,3328 ----
  	  tree string = element ? element : init;
  
! 	  if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
! 	       != char_type_node)
  	      && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
  	    {
***************
*** 3292,3296 ****
  	      return error_mark_node;
  	    }
! 	  if (TREE_TYPE (TREE_TYPE (string)) == char_type_node
  	      && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
  	    {
--- 3330,3335 ----
  	      return error_mark_node;
  	    }
! 	  if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
! 	       == char_type_node)
  	      && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
  	    {
diff -rc2N gcc-1.33/caller-save.c gcc-1.34/caller-save.c
*** gcc-1.33/caller-save.c	Wed Dec 31 19:00:00 1969
--- gcc-1.34/caller-save.c	Wed Feb 22 11:50:12 1989
***************
*** 0 ****
--- 1,356 ----
+ /* Save and restore call-clobbered registers which are live across a call.
+    Copyright (C) 1989 Free Software Foundation, Inc.
+ 
+ This file is part of GNU CC.
+ 
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ #include "config.h"
+ #include "rtl.h"
+ #include "insn-config.h"
+ #include "flags.h"
+ #include "regs.h"
+ #include "hard-reg-set.h"
+ #include "reload.h"
+ #include "recog.h"
+ #include "basic-block.h"
+ 
+ /* Set of hard regs currently live (during scan of all insns).  */
+ 
+ static HARD_REG_SET hard_regs_live;
+ 
+ /* The block of storage on the stack where regs are saved */
+ 
+ static rtx save_block_addr;
+ static int save_block_size;
+ 
+ /* A REG rtx for each hard register that has been saved.  */
+ 
+ static rtx save_reg_rtx[FIRST_PSEUDO_REGISTER];
+ 
+ static void set_reg_live ();
+ static void clear_reg_live ();
+ static void insert_call_saves ();
+ static void emit_mult_save ();
+ static void emit_mult_restore ();
+ static rtx grow_save_block ();
+ static enum machine_mode choose_hard_reg_mode ();
+ \f


+ /* Find the places where hard regs are live across calls and save them.  */
+ 
+ save_call_clobbered_regs ()
+ {
+   rtx insn;
+   int b;
+ 
+   if (obey_regdecls)
+     return;
+   
+   save_block_size = 0;
+   save_block_addr = 0;
+   bzero (save_reg_rtx, sizeof save_reg_rtx);
+ 
+   for (b = 0; b < n_basic_blocks; b++)
+     {
+       regset regs_live = basic_block_live_at_start[b];
+       int offset, bit, i;
+ 
+       /* Compute hard regs live at start of block -- this is the
+ 	 real hard regs marked live, plus live pseudo regs that
+ 	 have been renumbered to hard regs.  */
+ 
+ #ifdef HARD_REG_SET
+       hard_regs_live = *regs_live;
+ #else
+       COPY_HARD_REG_SET (hard_regs_live, regs_live);
+ #endif
+ 
+       for (offset = 0, i = 0; offset < regset_size; offset++)
+ 	{
+ 	  if (regs_live[offset] == 0)
+ 	    i += HOST_BITS_PER_INT;
+ 	  else
+ 	    for (bit = 1; bit && i < max_regno; bit <<= 1, i++)
+ 	      if ((regs_live[offset] & bit) && reg_renumber[i] >= 0)
+ 		SET_HARD_REG_BIT (hard_regs_live, reg_renumber[i]);
+ 	}
+ 
+       /* Now scan the insns in the block, keeping track of what hard
+ 	 regs are live as we go.  When we see a call, save the live
+ 	 call-clobbered hard regs.  */
+ 
+       for (insn = basic_block_head[b]; TRUE; insn = NEXT_INSN (insn))
+ 	{
+ 	  RTX_CODE code = GET_CODE (insn);
+ 
+ 	  if (code == CALL_INSN)
+ 	    insert_call_saves (insn);
+ 
+ 	  if (code == INSN || code == CALL_INSN || code == JUMP_INSN)
+ 	    {
+ 	      rtx link;
+ 
+ 	      /* NB: the normal procedure is to first enliven any
+ 		 registers set by insn, then deaden any registers that
+ 		 had their last use at insn.  This is incorrect now,
+ 		 since multiple pseudos may have been mapped to the
+ 		 same hard reg, and the death notes are ambiguous.  So
+ 		 it must be done in the other, safe, order.  */
+ 
+ 	      for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ 		if (REG_NOTE_KIND (link) == REG_DEAD)
+ 		  clear_reg_live (XEXP (link, 0));
+ 
+ 	      note_stores (PATTERN (insn), set_reg_live);
+ 	    }
+ 
+ 	  if (insn == basic_block_end[b])
+ 	    break;
+ 	}
+     }
+ }
+ 
+ /* Here from note_stores when an insn stores a value in a register.
+    Set the proper bit or bits in hard_regs_live.  */
+ 
+ static void
+ set_reg_live (reg, setter)
+      rtx reg, setter;
+ {
+   register int regno;
+ 
+   /* WORD is which word of a multi-register group is being stored.
+      For the case where the store is actually into a SUBREG of REG.
+      Except we don't use it; I believe the entire REG needs to be
+      live.  */
+   int word = 0;
+ 
+   if (GET_CODE (reg) == SUBREG)
+     {
+       word = SUBREG_WORD (reg);
+       reg = SUBREG_REG (reg);
+     }
+ 
+   if (GET_CODE (reg) != REG)
+     return;
+ 
+   regno = REGNO (reg);
+ 
+   /* For pseudo reg, see if it has been assigned a hardware reg.  */
+   if (reg_renumber[regno] >= 0)
+     regno = reg_renumber[regno] /* + word */;
+ 
+   /* Handle hardware regs (and pseudos allocated to hard regs).  */
+   if (regno < FIRST_PSEUDO_REGISTER && ! call_fixed_regs[regno])
+     {
+       register int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
+       while (regno < last)
+ 	{
+ 	  SET_HARD_REG_BIT (hard_regs_live, regno);
+ 	  regno++;
+ 	}
+     }
+ }
+ 
+ /* Here when a REG_DEAD note records the last use of a reg.  Clear
+    the appropriate bit or bits in hard_regs_live.  */
+ 
+ static void
+ clear_reg_live (reg)
+      rtx reg;
+ {
+   register int regno = REGNO (reg);
+ 
+   /* For pseudo reg, see if it has been assigned a hardware reg.  */
+   if (reg_renumber[regno] >= 0)
+     regno = reg_renumber[regno];
+ 
+   /* Handle hardware regs (and pseudos allocated to hard regs).  */
+   if (regno < FIRST_PSEUDO_REGISTER && ! call_fixed_regs[regno])
+     {
+       /* Pseudo regs already assigned hardware regs are treated
+ 	 almost the same as explicit hardware regs.  */
+       register int last = regno + HARD_REGNO_NREGS (regno, GET_MODE (reg));
+       while (regno < last)
+ 	{
+ 	  CLEAR_HARD_REG_BIT (hard_regs_live, regno);
+ 	  regno++;
+ 	}
+     }
+ }      
+ 
+ /* Insert insns to save and restore live call-clobbered regs around
+    call insn INSN.  */
+ 
+ static void
+ insert_call_saves (insn)
+      rtx insn;
+ {
+   int regno;
+   int save_block_size_needed;
+   int save_block_offset[FIRST_PSEUDO_REGISTER];
+ 
+   save_block_size_needed = 0;
+   
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno)
+     {
+       save_block_offset[regno] = -1;
+       if (call_used_regs[regno] && ! call_fixed_regs[regno]
+ 	  && TEST_HARD_REG_BIT (hard_regs_live, regno))
+ 	{
+ 	  enum machine_mode mode = choose_hard_reg_mode (regno);
+ 	  int align = GET_MODE_UNIT_SIZE (mode);
+ 	  if (align > BIGGEST_ALIGNMENT / BITS_PER_UNIT)
+ 	    align = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
+ 	  save_block_size_needed =
+ 	    ((save_block_size_needed + align - 1) / align) * align;
+ 	  save_block_offset[regno] = save_block_size_needed;
+ 	  save_block_size_needed += GET_MODE_SIZE (mode);
+ 	  if (! save_reg_rtx[regno])
+ 	    save_reg_rtx[regno] = gen_rtx (REG, mode, regno);
+ 	}
+     }
+ 
+   if (save_block_size < save_block_size_needed)
+     save_block_addr = grow_save_block (save_block_addr,
+ 				       save_block_size_needed);
+   emit_mult_save (insn, save_block_addr, save_block_offset);
+   emit_mult_restore (insn, save_block_addr, save_block_offset);
+ }
+ 
+ /* Emit a string of stores to save the hard regs listed in
+    OFFSET[] at address ADDR; insert the loads after INSN.
+    OFFSET[reg] is -1 if reg should not be saved, or a
+    suitably-aligned offset from ADDR.  
+    The offsets actually used do not have to be those listed
+    in OFFSET, but should fit in a block of the same size.  */
+ 
+ static void
+ emit_mult_save (insn, addr, offset)
+      rtx insn, addr;
+      int offset[];
+ {
+   int regno;
+ 
+   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno)
+     if (offset[regno] >= 0)
+       {
+ 	rtx reg = save_reg_rtx[regno];
+ 	rtx temp =
+ 	  gen_rtx (MEM, GET_MODE (reg), plus_constant (addr, offset[regno]));
+ 	emit_insn_before (gen_move_insn (temp, reg), insn);
+       }
+ }
+ 
+ /* Emit a string of loads to restore the hard regs listed in
+    OFFSET[] from address ADDR; insert the loads before INSN.
+    OFFSET[reg] is -1 if reg should not be loaded, or a
+    suitably-aligned offset from ADDR.  
+    The offsets actually used do not need to be those provided in
+    OFFSET, but should agree with whatever emit_mult_save does.  */
+ 
+ static void
+ emit_mult_restore (insn, addr, offset)
+      rtx insn, addr;
+      int offset[];     
+ {
+   int regno;
+ 
+   for (regno = FIRST_PSEUDO_REGISTER; --regno >= 0; )
+     if (offset[regno] >= 0)
+       {
+ 	rtx reg = save_reg_rtx[regno];
+ 	rtx temp =
+ 	  gen_rtx (MEM, GET_MODE (reg), plus_constant (addr, offset[regno]));
+ 	emit_insn_after (gen_move_insn (reg, temp), insn);
+       }
+ }
+ 
+ /* Return the address of a new block of size SIZE on the stack.
+    The old save block is at ADDR; ADDR is 0 if no block exists yet.  */
+ 
+ static rtx
+ grow_save_block (addr, size)
+      rtx addr;
+      int size;
+ {
+   rtx newaddr;
+ 
+   /* Keep the size a multiple of the main allocation unit.  */
+   size = (((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
+ 	   / (BIGGEST_ALIGNMENT / BITS_PER_UNIT))
+ 	  * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
+ 
+   /* If no save block exists yet, create one and return it.  */
+   if (! addr)
+     {
+       save_block_size = size;
+       return XEXP (assign_stack_local (BLKmode, size), 0);
+     }
+ 
+   /* Get a new block and coalesce it with the old one.  */
+   newaddr = XEXP (assign_stack_local (BLKmode, size - save_block_size), 0);
+   if (GET_CODE (newaddr) == PLUS
+       && XEXP (newaddr, 0) == frame_pointer_rtx
+       && GET_CODE (XEXP (newaddr, 1)) == CONST_INT
+       && GET_CODE (addr) == PLUS
+       && XEXP (addr, 0) == frame_pointer_rtx
+       && GET_CODE (XEXP (addr, 1)) == CONST_INT
+       && ((INTVAL (XEXP (newaddr, 1)) - INTVAL (XEXP (addr, 1))
+ 	   == size - save_block_size)
+ 	  || (INTVAL (XEXP (addr, 1)) - INTVAL (XEXP (newaddr, 1))
+ 	      == size - save_block_size)))
+     {
+       save_block_size = size;
+       if (INTVAL (XEXP (newaddr, 1)) < INTVAL (XEXP (addr, 1)))
+ 	return newaddr;
+       else
+ 	return addr;
+     }
+ 
+   /* They didn't coalesce, find out why */
+   abort ();			
+ 
+   save_block_size = size;
+   return XEXP (assign_stack_local (BLKmode, size), 0);
+ }
+ 
+ /* Return a machine mode that is legitimate for hard reg REGNO
+    and large enough to save the whole register.  */
+ 
+ static enum machine_mode
+ choose_hard_reg_mode (regno)
+      int regno;
+ {
+   enum reg_class class = REGNO_REG_CLASS (regno);
+ 
+   if (CLASS_MAX_NREGS (class, DImode) == 1
+       && HARD_REGNO_MODE_OK (regno, DImode))
+     return DImode;
+   else if (CLASS_MAX_NREGS (class, DFmode) == 1
+ 	   && HARD_REGNO_MODE_OK (regno, DFmode))
+     return DFmode;
+   else if (CLASS_MAX_NREGS (class, SImode) == 1
+ 	   && HARD_REGNO_MODE_OK (regno, SImode))
+     return SImode;
+   else if (CLASS_MAX_NREGS (class, SFmode) == 1
+ 	   && HARD_REGNO_MODE_OK (regno, SFmode))
+     return SFmode;
+   else if (CLASS_MAX_NREGS (class, HImode) == 1
+ 	   && HARD_REGNO_MODE_OK (regno, HImode))
+     return HImode;
+   else
+     abort ();
+ }
diff -rc2N gcc-1.33/cccp.c gcc-1.34/cccp.c
*** gcc-1.33/cccp.c	Sun Jan 22 04:13:18 1989
--- gcc-1.34/cccp.c	Wed Feb 22 11:46:00 1989
***************
*** 4,103 ****
  		    Adapted to ANSI C, Richard Stallman, Jan 1987
  
! 			   NO WARRANTY
  
!   BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
! NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
! WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
! BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
! FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
! AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
! DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.
! 
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
! LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
! OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
! USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
! DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
! A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
! PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
! DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
! 
! 		GENERAL PUBLIC LICENSE TO COPY
! 
!   1. You may copy and distribute verbatim copies of this source file
! as you receive it, in any medium, provided that you conspicuously
! and appropriately publish on each copy a valid copyright notice
! "Copyright (C) 1987, Free Software Foundation"; and include
! following the copyright notice a verbatim copy of the above disclaimer
! of warranty and of this License.  You may charge a distribution fee for the
! physical act of transferring a copy.
! 
!   2. You may modify your copy or copies of this source file or
! any portion of it, and copy and distribute such modifications under
! the terms of Paragraph 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating
!     that you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish,
!     that in whole or in part contains or is a derivative of this
!     program or any part thereof, to be licensed at no charge to all
!     third parties on terms identical to those contained in this
!     License Agreement (except that you may choose to grant more extensive
!     warranty protection to some or all third parties, at your option).
! 
!     c) You may charge a distribution fee for the physical act of
!     transferring a copy, and you may at your option offer warranty
!     protection in exchange for a fee.
! 
! Mere aggregation of another unrelated program with this program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
! 
!   3. You may copy and distribute this program (or a portion or derivative
! of it, under Paragraph 2) in object code or executable form under the terms
! of Paragraphs 1 and 2 above provided that you also do one of the following:
! 
!     a) accompany it with the complete corresponding machine-readable
!     source code, which must be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal
!     shipping charge) a complete machine-readable copy of the
!     corresponding source code, to be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     c) accompany it with the information you received as to where the
!     corresponding source code may be obtained.  (This alternative is
!     allowed only for noncommercial distribution and only if you
!     received the program in object code or executable form alone.)
! 
! For an executable file, complete source code means all the source code for
! all modules it contains; but, as a special exception, it need not include
! source code for modules which are standard libraries that accompany the
! operating system on which the executable file runs.
! 
!   4. You may not copy, sublicense, distribute or transfer this program
! except as expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer this program is void and
! your rights to use the program under this License agreement shall be
! automatically terminated.  However, parties who have received computer
! software programs from you with this License Agreement will not have
! their licenses terminated so long as such parties remain in full compliance.
! 
!   5. If you wish to incorporate parts of this program into other free
! programs whose distribution conditions are different, write to the Free
! Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
! worked out a simple rule that can be stated here, but we will often permit
! this.  We will be guided by the two goals of preserving the free status of
! all derivatives of our free software and of promoting the sharing and reuse of
! software.
  
  
   In other words, you are welcome to use, share and improve this program.
--- 4,20 ----
  		    Adapted to ANSI C, Richard Stallman, Jan 1987
  
! This program is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 1, or (at your option) any
! later version.
  
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
   In other words, you are welcome to use, share and improve this program.
***************
*** 1061,1065 ****
    if (dump_macros)
      dump_all_macros ();
!   else if (print_deps) {
      fputs (deps_buffer, deps_stream);
      putc ('\n', deps_stream);
--- 978,987 ----
    if (dump_macros)
      dump_all_macros ();
!   else if (! inhibit_output && deps_stream != stdout) {
!     if (write (fileno (stdout), outbuf.buf, outbuf.bufp - outbuf.buf) < 0)
!       fatal ("I/O error on output");
!   }
! 
!   if (print_deps) {
      fputs (deps_buffer, deps_stream);
      putc ('\n', deps_stream);
***************
*** 1069,1075 ****
  	fatal ("I/O error on output");
      }
-   } else if (! inhibit_output) {
-     if (write (fileno (stdout), outbuf.buf, outbuf.bufp - outbuf.buf) < 0)
-       fatal ("I/O error on output");
    }
  
--- 991,994 ----
***************
*** 1455,1459 ****
        while (1) {
  	if (ibp >= limit) {
! 	  if (!traditional)
  	    error_with_line (line_for_error (start_line),
  			     "unterminated string or character constant");
--- 1374,1385 ----
        while (1) {
  	if (ibp >= limit) {
! 	  if (traditional) {
! 	    if (ip->macro != 0) {
! 	      /* try harder: this string crosses a macro expansion boundary */
! 	      POPMACRO;
! 	      RECACHE;
! 	      continue;
! 	    }
! 	  } else
  	    error_with_line (line_for_error (start_line),
  			     "unterminated string or character constant");
***************
*** 2071,2074 ****
--- 1997,2007 ----
    after_ident = cp;
  
+   /* A line of just `#' becomes blank.  */
+ 
+   if (traditional && ident_length == 0 && *after_ident == '\n') {
+     ip->bufp = after_ident;
+     return 1;
+   }
+ 
    /*
     * Decode the keyword and call the appropriate expansion
***************
*** 3009,3013 ****
  
        case '\\':
! 	if (expected_delimiter != '\0' && p < limit) {
  	  *exp_p++ = *p++;
  	  continue;
--- 2942,2948 ----
  
        case '\\':
! 	/* Backslash quotes delimiters and itself, but not macro args.  */
! 	if (expected_delimiter != 0 && p < limit
! 	    && (*p == expected_delimiter || *p == '\\')) {
  	  *exp_p++ = *p++;
  	  continue;
diff -rc2N gcc-1.33/cexp.y gcc-1.34/cexp.y
*** gcc-1.33/cexp.y	Mon Dec 19 23:50:26 1988
--- gcc-1.34/cexp.y	Wed Feb 22 11:46:11 1989
***************
*** 2,101 ****
     Copyright (C) 1987 Free Software Foundation.
  
! 		       NO WARRANTY
  
!   BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
! NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
! WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
! BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
! FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
! AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
! DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.
  
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
! LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
! OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
! USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
! DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
! A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
! PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
! DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
! 
! 		GENERAL PUBLIC LICENSE TO COPY
! 
!   1. You may copy and distribute verbatim copies of this source file
! as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy a valid copyright notice "Copyright
! (C) 1987 Free Software Foundation"; and include following the
! copyright notice a verbatim copy of the above disclaimer of warranty
! and of this License.  You may charge a distribution fee for the
! physical act of transferring a copy.
! 
!   2. You may modify your copy or copies of this source file or
! any portion of it, and copy and distribute such modifications under
! the terms of Paragraph 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating
!     that you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish,
!     that in whole or in part contains or is a derivative of this
!     program or any part thereof, to be licensed at no charge to all
!     third parties on terms identical to those contained in this
!     License Agreement (except that you may choose to grant more extensive
!     warranty protection to some or all third parties, at your option).
! 
!     c) You may charge a distribution fee for the physical act of
!     transferring a copy, and you may at your option offer warranty
!     protection in exchange for a fee.
! 
! Mere aggregation of another unrelated program with this program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
! 
!   3. You may copy and distribute this program (or a portion or derivative
! of it, under Paragraph 2) in object code or executable form under the terms
! of Paragraphs 1 and 2 above provided that you also do one of the following:
! 
!     a) accompany it with the complete corresponding machine-readable
!     source code, which must be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal
!     shipping charge) a complete machine-readable copy of the
!     corresponding source code, to be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     c) accompany it with the information you received as to where the
!     corresponding source code may be obtained.  (This alternative is
!     allowed only for noncommercial distribution and only if you
!     received the program in object code or executable form alone.)
! 
! For an executable file, complete source code means all the source code for
! all modules it contains; but, as a special exception, it need not include
! source code for modules which are standard libraries that accompany the
! operating system on which the executable file runs.
! 
!   4. You may not copy, sublicense, distribute or transfer this program
! except as expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer this program is void and
! your rights to use the program under this License agreement shall be
! automatically terminated.  However, parties who have received computer
! software programs from you with this License Agreement will not have
! their licenses terminated so long as such parties remain in full compliance.
! 
!   5. If you wish to incorporate parts of this program into other free
! programs whose distribution conditions are different, write to the Free
! Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
! worked out a simple rule that can be stated here, but we will often permit
! this.  We will be guided by the two goals of preserving the free status of
! all derivatives of our free software and of promoting the sharing and reuse of
! software.
! 
  
   In other words, you are welcome to use, share and improve this program.
--- 2,18 ----
     Copyright (C) 1987 Free Software Foundation.
  
! This program is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 1, or (at your option) any
! later version.
  
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
   In other words, you are welcome to use, share and improve this program.
diff -rc2N gcc-1.33/combine.c gcc-1.34/combine.c
*** gcc-1.33/combine.c	Sun Jan 29 17:06:11 1989
--- gcc-1.34/combine.c	Wed Feb 22 11:50:10 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 456,460 ****
  
    /* If I1 or I2 contains an autoincrement or autodecrement,
!      make sure that register is not used between there and I3.
       Also insist that I3 not be a jump; if it were one
       and the incremented register were spilled, we would lose.  */
--- 455,460 ----
  
    /* If I1 or I2 contains an autoincrement or autodecrement,
!      make sure that register is not used between there and I3,
!      and not already used in I3 either.
       Also insist that I3 not be a jump; if it were one
       and the incremented register were spilled, we would lose.  */
***************
*** 463,467 ****
  	&& (GET_CODE (i3) == JUMP_INSN
  	    || reg_used_between_p (XEXP (link, 0), i2, i3)
! 	    || reg_mentioned_p (XEXP (link, 0), i3)))
        return 0;
  
--- 463,467 ----
  	&& (GET_CODE (i3) == JUMP_INSN
  	    || reg_used_between_p (XEXP (link, 0), i2, i3)
! 	    || reg_mentioned_p (XEXP (link, 0), PATTERN (i3))))
        return 0;
  
***************
*** 471,475 ****
  	  && (GET_CODE (i3) == JUMP_INSN
  	      || reg_used_between_p (XEXP (link, 0), i1, i3)
! 	      || reg_mentioned_p (XEXP (link, 0), i3)))
  	return 0;
  
--- 471,490 ----
  	  && (GET_CODE (i3) == JUMP_INSN
  	      || reg_used_between_p (XEXP (link, 0), i1, i3)
! 	      || reg_mentioned_p (XEXP (link, 0), PATTERN (i3))))
! 	return 0;
! 
!   /* If I3 has an inc, then give up if I1 or I2 uses the reg that is inc'd,
!      EXCEPT in one case: I3 has a post-inc in an output operand.  */
!   if (!(GET_CODE (PATTERN (i3)) == SET
! 	&& GET_CODE (SET_SRC (PATTERN (i3))) == REG
! 	&& GET_CODE (SET_DEST (PATTERN (i3))) == MEM
! 	&& (GET_CODE (XEXP (SET_DEST (PATTERN (i3)), 0)) == POST_INC
! 	    || GET_CODE (XEXP (SET_DEST (PATTERN (i3)), 0)) == POST_DEC)))
!     /* It's not the exception.  */
!     for (link = REG_NOTES (i3); link; link = XEXP (link, 1))
!       if (REG_NOTE_KIND (link) == REG_INC
! 	  && (reg_mentioned_p (XEXP (link, 0), PATTERN (i2))
! 	      || (i1 != 0
! 		  && reg_mentioned_p (XEXP (link, 0), PATTERN (i1)))))
  	return 0;
  
***************
*** 594,598 ****
    if (insn_code_number >= 0
        /* Is the result a reasonable ASM_OPERANDS?  */
!       || check_asm_operands (newpat))
      {
        /* Yes.  Install it.  */
--- 609,613 ----
    if (insn_code_number >= 0
        /* Is the result a reasonable ASM_OPERANDS?  */
!       || (check_asm_operands (newpat) && ! added_sets_1 && ! added_sets_2))
      {
        /* Yes.  Install it.  */
***************
*** 1316,1321 ****
  					  : 0))));
  	}
!       /* Can simplify (set (cc0) (minus:VOIDmode (zero/sign_extend FOO) CONST))
! 	 to (set (cc0) (minus:VOIDmode FOO CONST)) if CONST fits in FOO's mode
  	 and we are only testing equality.
  	 In fact, this is valid for zero_extend if what follows is an
--- 1331,1336 ----
  					  : 0))));
  	}
!       /* Can simplify (set (cc0) (compare (zero/sign_extend FOO) CONST))
! 	 to (set (cc0) (compare FOO CONST)) if CONST fits in FOO's mode
  	 and we are only testing equality.
  	 In fact, this is valid for zero_extend if what follows is an
***************
*** 1322,1327 ****
  	 unsigned comparison, and for sign_extend with a signed comparison.  */
        if (SET_DEST (x) == cc0_rtx
! 	  && GET_CODE (SET_SRC (x)) == MINUS
! 	  && GET_MODE (SET_SRC (x)) == VOIDmode
  	  && (GET_CODE (XEXP (SET_SRC (x), 0)) == ZERO_EXTEND
  	      || GET_CODE (XEXP (SET_SRC (x), 0)) == SIGN_EXTEND)
--- 1337,1341 ----
  	 unsigned comparison, and for sign_extend with a signed comparison.  */
        if (SET_DEST (x) == cc0_rtx
! 	  && GET_CODE (SET_SRC (x)) == COMPARE
  	  && (GET_CODE (XEXP (SET_SRC (x), 0)) == ZERO_EXTEND
  	      || GET_CODE (XEXP (SET_SRC (x), 0)) == SIGN_EXTEND)
diff -rc2N gcc-1.33/conditions.h gcc-1.34/conditions.h
*** gcc-1.33/conditions.h	Sun Oct  2 09:50:51 1988
--- gcc-1.34/conditions.h	Wed Feb 22 11:50:05 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/config.gcc gcc-1.34/config.gcc
*** gcc-1.33/config.gcc	Tue Jan 31 21:55:26 1989
--- gcc-1.34/config.gcc	Wed Feb 22 12:33:44 1989
***************
*** 5,22 ****
  #This file is part of GNU CC.
  
  #GNU CC is distributed in the hope that it will be useful,
! #but WITHOUT ANY WARRANTY.  No author or distributor
! #accepts responsibility to anyone for the consequences of using it
! #or for whether it serves any particular purpose or works at all,
! #unless he says so in writing.  Refer to the GNU CC General Public
! #License for full details.
! 
! #Everyone is granted permission to copy, modify and redistribute
! #GNU CC, but only under the conditions described in the
! #GNU CC General Public License.   A copy of this license is
! #supposed to have been given to you along with GNU CC so you
! #can know your rights and responsibilities.  It should be in a
! #file named COPYING.  Among other things, the copyright notice
! #and this notice must be preserved on all copies.
  
  #
--- 5,21 ----
  #This file is part of GNU CC.
  
+ #GNU CC is free software; you can redistribute it and/or modify
+ #it under the terms of the GNU General Public License as published by
+ #the Free Software Foundation; either version 1, or (at your option)
+ #any later version.
+ 
  #GNU CC is distributed in the hope that it will be useful,
! #but WITHOUT ANY WARRANTY; without even the implied warranty of
! #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! #GNU General Public License for more details.
! 
! #You should have received a copy of the GNU General Public License
! #along with GNU CC; see the file COPYING.  If not, write to
! #the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  #
***************
*** 84,87 ****
--- 83,91 ----
  		target_machine=tm-i386gas.h
  		;;		
+ 	next )
+ 		cpu_type=m68k
+ 		configuration_file=xm-m68k.h      
+ 		target_machine=tm-next.h
+ 	;;
  	sun4 | sun-4)
  		cpu_type=sparc
***************
*** 177,184 ****
  		;;
  	convex-c1)				# Convex C1
! 		cpu_type = convex
  		;;
  	convex-c2)				# Convex C2
! 		cpu_type = convex
  		;;
  #	370)
--- 181,190 ----
  		;;
  	convex-c1)				# Convex C1
! 		target_machine=tm-convex1.h
! 		cpu_type=convex
  		;;
  	convex-c2)				# Convex C2
! 		target_machine=tm-convex2.h
! 		cpu_type=convex
  		;;
  #	370)
diff -rc2N gcc-1.33/convex.md gcc-1.34/convex.md
*** gcc-1.33/convex.md	Mon Jan 23 02:53:07 1989
--- gcc-1.34/convex.md	Wed Feb 22 12:31:21 1989
***************
*** 5,22 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 5,21 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 49,64 ****
    "operands[1] = gen_reg_rtx (SImode);")
  
! (define_expand "tstdi"
    [(set (cc0)
! 	(minus (match_operand:DI 0 "register_operand" "d")
! 	       (match_dup 1)))]
    ""
!   "
  {
!   operands[1] = gen_rtx (CONST_DOUBLE, DImode);
!   CONST_DOUBLE_MEM (operands[1]) = cc0_rtx;
!   CONST_DOUBLE_HIGH (operands[1]) = 0;
!   CONST_DOUBLE_LOW (operands[1]) = 0;
!   operands[1] = force_reg (DImode, operands[1]);
  }")
  
--- 48,60 ----
    "operands[1] = gen_reg_rtx (SImode);")
  
! (define_insn "tstdi"
    [(set (cc0)
! 	(match_operand:DI 0 "register_operand" "d"))
!    (clobber (reg:DI 1))]
    ""
!   "*
  {
!   output_asm_insn (\"ld.l #0,s1\");
!   return set_cmp (operands[0], gen_rtx (REG, DImode, 1), 'l');
  }")
  
***************
*** 65,70 ****
  (define_expand "tstdf"
    [(set (cc0)
! 	(minus (match_operand:DF 0 "register_operand" "d")
! 	       (match_dup 1)))]
    ""
    "operands[1] = force_reg (DFmode, dconst0_rtx);")
--- 61,66 ----
  (define_expand "tstdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "register_operand" "d")
! 		 (match_dup 1)))]
    ""
    "operands[1] = force_reg (DFmode, dconst0_rtx);")
***************
*** 78,83 ****
  (define_insn "cmpdi"
    [(set (cc0)
! 	(minus (match_operand:DI 0 "register_operand" "d")
! 	       (match_operand:DI 1 "register_operand" "d")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'l');")
--- 74,79 ----
  (define_insn "cmpdi"
    [(set (cc0)
! 	(compare (match_operand:DI 0 "register_operand" "d")
! 		 (match_operand:DI 1 "register_operand" "d")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'l');")
***************
*** 85,90 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "nonmemory_operand" "d,a,i,r")
! 	       (match_operand:SI 1 "nonmemory_operand" "d,a,r,i")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'w');")
--- 81,86 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "nonmemory_operand" "d,a,i,r")
! 		 (match_operand:SI 1 "nonmemory_operand" "d,a,r,i")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'w');")
***************
*** 92,97 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "nonmemory_operand" "d,a,r,i")
! 	       (match_operand:HI 1 "nonmemory_operand" "d,a,i,r")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'h');")
--- 88,93 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "nonmemory_operand" "d,a,r,i")
! 		 (match_operand:HI 1 "nonmemory_operand" "d,a,i,r")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'h');")
***************
*** 99,104 ****
  (define_insn ""
    [(set (cc0)
! 	(minus (sign_extend:SI (match_operand:QI 0 "register_operand" "d"))
! 	       (sign_extend:SI (match_operand:QI 1 "register_operand" "d"))))]
    ""
    "* return set_cmp (operands[0], operands[1], 'b');")
--- 95,100 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (sign_extend:SI (match_operand:QI 0 "register_operand" "d"))
! 		 (sign_extend:SI (match_operand:QI 1 "register_operand" "d"))))]
    ""
    "* return set_cmp (operands[0], operands[1], 'b');")
***************
*** 106,111 ****
  (define_insn "cmpdf"
    [(set (cc0)
! 	(minus (match_operand:DF 0 "register_operand" "d")
! 	       (match_operand:DF 1 "register_operand" "d")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'd');")
--- 102,107 ----
  (define_insn "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "register_operand" "d")
! 		 (match_operand:DF 1 "register_operand" "d")))]
    ""
    "* return set_cmp (operands[0], operands[1], 'd');")
***************
*** 113,118 ****
  (define_insn "cmpsf"
    [(set (cc0)
! 	(minus (match_operand:SF 0 "nonmemory_operand" "dF,d")
! 	       (match_operand:SF 1 "nonmemory_operand" "d,F")))]
    ""
    "* return set_cmp (operands[0], operands[1], 's');")
--- 109,114 ----
  (define_insn "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "nonmemory_operand" "dF,d")
! 		 (match_operand:SF 1 "nonmemory_operand" "d,F")))]
    ""
    "* return set_cmp (operands[0], operands[1], 's');")
***************
*** 119,124 ****
  \f


  (define_insn "movdf"
!   [(set (match_operand:DF 0 "general_operand" "=d,m<")
! 	(match_operand:DF 1 "general_operand" "gG,d"))]
    ""
    "*
--- 115,120 ----
  \f


  (define_insn "movdf"
!   [(set (match_operand:DF 0 "general_operand" "=g,d")
! 	(match_operand:DF 1 "general_operand" "d,gG"))]
    ""
    "*
***************
*** 126,130 ****
    if (push_operand (operands[0], DFmode))
      return \"psh.l %1\";
!   else if (which_alternative)
      return \"st.l %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
--- 122,126 ----
    if (push_operand (operands[0], DFmode))
      return \"psh.l %1\";
!   else if (GET_CODE (operands[0]) == MEM)
      return \"st.l %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
***************
*** 133,137 ****
      {
        operands[1] = gen_rtx (CONST_INT, VOIDmode,
! 			     CONST_DOUBLE_LOW (operands[1]));
        return \"ld.d %1,%0\";
      }
--- 129,133 ----
      {
        operands[1] = gen_rtx (CONST_INT, VOIDmode,
! 			     const_double_high_int (operands[1]));
        return \"ld.d %1,%0\";
      }
***************
*** 141,150 ****
  
  (define_insn "movsf"
!   [(set (match_operand:SF 0 "general_operand" "=d,m")
! 	(match_operand:SF 1 "general_operand" "gF,d"))]
    ""
    "*
  {
!   if (which_alternative)
      return \"st.s %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
--- 137,148 ----
  
  (define_insn "movsf"
!   [(set (match_operand:SF 0 "general_operand" "=g,d")
! 	(match_operand:SF 1 "general_operand" "d,gF"))]
    ""
    "*
  {
!   if (push_operand (operands[0], SFmode))
!     return \"psh.w %1\";
!   else if (GET_CODE (operands[0]) == MEM)
      return \"st.s %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
***************
*** 155,160 ****
  
  (define_insn "movdi"
!   [(set (match_operand:DI 0 "general_operand" "=d,m<")
! 	(match_operand:DI 1 "general_operand" "gG,d"))]
    ""
    "*
--- 153,158 ----
  
  (define_insn "movdi"
!   [(set (match_operand:DI 0 "general_operand" "=g,d")
! 	(match_operand:DI 1 "general_operand" "d,gG"))]
    ""
    "*
***************
*** 162,166 ****
    if (push_operand (operands[0], DImode))
      return \"psh.l %1\";
!   else if (which_alternative)
      return \"st.l %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
--- 160,164 ----
    if (push_operand (operands[0], DImode))
      return \"psh.l %1\";
!   else if (GET_CODE (operands[0]) == MEM)
      return \"st.l %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
***************
*** 169,173 ****
      {
        operands[1] = gen_rtx (CONST_INT, VOIDmode,
! 			     CONST_DOUBLE_LOW (operands[1]));
        return \"ld.d %1,%0\";
      }
--- 167,171 ----
      {
        operands[1] = gen_rtx (CONST_INT, VOIDmode,
! 			     const_double_high_int (operands[1]));
        return \"ld.d %1,%0\";
      }
***************
*** 177,182 ****
  
  (define_insn "movsi"
!   [(set (match_operand:SI 0 "general_operand" "=r,m,<")
! 	(match_operand:SI 1 "general_operand" "g,r,i"))]
    ""
    "*
--- 175,180 ----
  
  (define_insn "movsi"
!   [(set (match_operand:SI 0 "general_operand" "=g,r,<")
! 	(match_operand:SI 1 "general_operand" "r,g,io"))]
    ""
    "*
***************
*** 199,208 ****
  
  (define_insn "movhi"
!   [(set (match_operand:HI 0 "general_operand" "=r,m")
! 	(match_operand:HI 1 "general_operand" "g,r"))]
    ""
    "*
  {
!   if (which_alternative)
      return \"st.h %1,%0\";
    else if (GET_CODE (operands[1]) == REG) 
--- 197,208 ----
  
  (define_insn "movhi"
!   [(set (match_operand:HI 0 "general_operand" "=g,r")
! 	(match_operand:HI 1 "general_operand" "r,g"))]
    ""
    "*
  {
!   if (push_operand (operands[0], HImode))
!     return \"psh.w %1\";
!   else if (GET_CODE (operands[0]) == MEM)
      return \"st.h %1,%0\";
    else if (GET_CODE (operands[1]) == REG) 
***************
*** 220,229 ****
  
  (define_insn "movqi"
!   [(set (match_operand:QI 0 "general_operand" "=r,m")
! 	(match_operand:QI 1 "general_operand" "g,r"))]
    ""
    "*
  {
!   if (which_alternative)
      return \"st.b %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
--- 220,231 ----
  
  (define_insn "movqi"
!   [(set (match_operand:QI 0 "general_operand" "=g,r")
! 	(match_operand:QI 1 "general_operand" "r,g"))]
    ""
    "*
  {
!   if (push_operand (operands[0], QImode))
!     return \"psh.w %1\";
!   else if (GET_CODE (operands[0]) == MEM)
      return \"st.b %1,%0\";
    else if (GET_CODE (operands[1]) == REG)
***************
*** 240,275 ****
  }")
  \f


- ;;- push effective address 
- 
- (define_insn ""
-   [(set (match_operand:SI 0 "push_operand" "=g")
- 	(match_operand:QI 1 "address_operand" "p"))]
-   ""
-   "pshea %a1")
- 
- (define_insn ""
-   [(set (match_operand:SI 0 "push_operand" "=g")
- 	(match_operand:HI 1 "address_operand" "p"))]
-   ""
-   "pshea %a1")
- 
- (define_insn ""
-   [(set (match_operand:SI 0 "push_operand" "=g")
- 	(match_operand:SI 1 "address_operand" "p"))]
-   ""
-   "pshea %a1")
- 
- (define_insn ""
-   [(set (match_operand:SI 0 "push_operand" "=g")
- 	(match_operand:SF 1 "address_operand" "p"))]
-   ""
-   "pshea %a1")
- 
- (define_insn ""
-   [(set (match_operand:SI 0 "push_operand" "=g")
- 	(match_operand:DF 1 "address_operand" "p"))]
-   ""
-   "pshea %a1")
- \f


  ;; Extension and truncation insns.
  ;; Those for integer source operand
--- 242,245 ----
***************
*** 289,296 ****
  
  (define_insn "trunchiqi2"
!   [(set (match_operand:QI 0 "register_operand" "=d,a")
! 	(truncate:QI (match_operand:HI 1 "register_operand" "d,a")))]
    ""
!   "cvth.b %1,%0")
  
  (define_insn "truncdisi2"
--- 259,266 ----
  
  (define_insn "trunchiqi2"
!   [(set (match_operand:QI 0 "register_operand" "=r")
! 	(truncate:QI (match_operand:HI 1 "register_operand" "0")))]
    ""
!   "")
  
  (define_insn "truncdisi2"
***************
*** 464,468 ****
    "* switch (which_alternative) 
  {
!   default:
      return \"add.w %2,%0\";
    case 2: case 4:
--- 434,438 ----
    "* switch (which_alternative) 
  {
!   case 0: case 1: case 3:
      return \"add.w %2,%0\";
    case 2: case 4:
***************
*** 606,619 ****
    "psh.l %2\;psh.l %1\;callq udiv64\;pop.l %0\;add.w #8,sp")
  
- ;; do not define this, it causes all unsigned mods to promote to DI
- ;; (at least, don't define it without also defining umodsi3)
- 
- ;(define_insn "umoddi3"
- ;  [(set (match_operand:DI 0 "register_operand" "=d")
- ;	(umod:DI (match_operand:DI 1 "register_operand" "d")
- ;		 (match_operand:DI 2 "register_operand" "d")))]
- ;  ""
- ;  "psh.l %2\;psh.l %1\;callq urem64\;pop.l %0\;add.w #8,sp")
- 
  (define_insn "divsi3"
    [(set (match_operand:SI 0 "register_operand" "=d,a")
--- 576,579 ----
***************
*** 623,636 ****
    "div.w %2,%0")
  
- ; unfortunately, udivsi3 must be defined if udivdi3 is, otherwise
- ; every unsigned divide promotes to unsigned DI
- 
- (define_insn "udivsi3"
-   [(set (match_operand:SI 0 "register_operand" "=d")
- 	(udiv:SI (match_operand:SI 1 "register_operand" "0")
- 		 (match_operand:SI 2 "register_operand" "+d")))]
-   ""
-   "ld.u #0,%2\;ld.u #0,%0\;div.l %2,%0")
- 
  (define_insn "divhi3"
    [(set (match_operand:HI 0 "register_operand" "=d,a")
--- 583,586 ----
***************
*** 640,657 ****
    "div.h %2,%0")
  
- (define_expand "udivhi3"
-   [(set (subreg:SI (match_operand:HI 0 "register_operand" "=d") 0)
- 	(zero_extend:SI (match_operand:HI 1 "register_operand" "d")))
-    (set (match_dup 3)
- 	(zero_extend:SI (match_operand:HI 2 "register_operand" "d")))
-    (set (subreg:SI (match_operand:HI 0 "register_operand" "=d") 0)
- 	(div:SI (subreg:SI (match_operand:HI 0 "register_operand" "=d") 0)
- 		(match_dup 3)))]
-   ""
-   "
- {
-   operands[3] = gen_reg_rtx (SImode);
- }")
- 
  (define_insn "divqi3"
    [(set (match_operand:QI 0 "register_operand" "=d")
--- 590,593 ----
***************
*** 660,677 ****
    ""
    "div.b %2,%0")
- 
- (define_expand "udivqi3"
-   [(set (subreg:SI (match_operand:QI 0 "register_operand" "=d") 0)
- 	(zero_extend:SI (match_operand:QI 1 "register_operand" "d")))
-    (set (match_dup 3)
- 	(zero_extend:SI (match_operand:QI 2 "register_operand" "d")))
-    (set (subreg:SI (match_operand:QI 0 "register_operand" "=d") 0)
- 	(div:SI (subreg:SI (match_operand:QI 0 "register_operand" "=d") 0)
- 		(match_dup 3)))]
-   ""
-   "
- {
-   operands[3] = gen_reg_rtx (SImode);
- }")
  \f


  ;; - and, or, xor
--- 596,599 ----
***************
*** 710,714 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ior:DI (match_operand:DI 1 "register_operand" "%0")
! 		(match_operand:DI 2 "register_operand" "dI")))]
    ""
    "or %2,%0")
--- 632,636 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(ior:DI (match_operand:DI 1 "register_operand" "%0")
! 		(match_operand:DI 2 "nonmemory_operand" "dI")))]
    ""
    "or %2,%0")
***************
*** 740,744 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(xor:DI (match_operand:DI 1 "register_operand" "%0")
! 		(match_operand:DI 2 "register_operand" "dI")))]
    ""
    "xor %2,%0")
--- 662,666 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
  	(xor:DI (match_operand:DI 1 "register_operand" "%0")
! 		(match_operand:DI 2 "nonmemory_operand" "dI")))]
    ""
    "xor %2,%0")
***************
*** 813,816 ****
--- 735,748 ----
    "not %1,%0")
  \f


+ ;;- shifts
+ ;;
+ ;; Convex shift instructions are unsigned.
+ ;; To make signed right shifts:
+ ;; for SImode, sign extend to DImode and shift, works for 0..32
+ ;; for DImode, shift and then extend the sign, works for 0..63
+ ;;
+ ;; It is very sad that DImode right shift 64 fails, but I don't see
+ ;; any reasonable way to handle it.  Ansi only requires up to 63.
+ 
  (define_insn ""
    [(set (match_operand:SI 0 "register_operand" "=r")
***************
*** 885,897 ****
    "operands[2] = negate_rtx (SImode, operands[2]);")
  
  (define_expand "ashldi3"
!   [(set (match_operand:DI 0 "register_operand" "=d")
! 	(lshift:DI (match_operand:DI 1 "register_operand" "0")
! 		   (match_operand:SI 2 "nonmemory_operand" "di")))]
    ""
    "
  {
!   if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) < 0)
!     FAIL;
  }")
  
--- 817,874 ----
    "operands[2] = negate_rtx (SImode, operands[2]);")
  
+ ;; signed  a >> b  is
+ ;;     ((a >> b) ^ signbit) - signbit
+ ;; where signbit is (1 << 63) >> b
+ 
  (define_expand "ashldi3"
!   [(match_operand:DI 0 "register_operand" "=d")
!    (match_operand:DI 1 "register_operand" "0")
!    (match_operand:SI 2 "nonmemory_operand" "di")
!    (match_dup 3)]
!   ""
!   "
! {
!   if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >= 0)
!     emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
!   else if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 0)
!     {
!       int rshift = - INTVAL (operands[2]);
!       operands[3] = force_reg
! 	(DImode,
! 	 immed_double_const (1 << (63 - rshift), 1 << (31 - rshift), DImode));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (XOR, DImode, operands[0], operands[3])));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (MINUS, DImode, operands[0], operands[3])));
!     }
!   else
!     {
!       operands[3] =
! 	force_reg (DImode, immed_double_const (0, 1 << 31, DImode));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (LSHIFT, DImode, operands[1], operands[2])));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[3],
! 			  gen_rtx (LSHIFT, DImode, operands[3], operands[2])));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (XOR, DImode, operands[0], operands[3])));
!       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
! 			  gen_rtx (MINUS, DImode, operands[0], operands[3])));
!   }
!   DONE;
! }")
! 
! (define_expand "ashrdi3"
!   [(match_operand:DI 0 "register_operand" "=d")
!    (match_operand:DI 1 "register_operand" "0")
!    (match_operand:SI 2 "nonmemory_operand" "di")]
    ""
    "
  {
!   emit_insn (gen_ashldi3 (operands[0], operands[1],
! 			  negate_rtx (SImode, operands[2])));
!   DONE;	    
  }")
  
***************
*** 913,929 ****
  
  (define_insn "sqrtdf2"
!   [(set (match_operand:DF 0 "register_operand" "d")
  	(sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
!   ""
    "sqrt.d %0")
  
  (define_insn "sqrtsf2"
!   [(set (match_operand:SF 0 "register_operand" "d")
  	(sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
!   ""
    "sqrt.s %0")
  
  (define_insn ""
!   [(set (match_operand:SI 0 "register_operand" "d")
  	(minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
  		  (const_int 1)))]
--- 890,906 ----
  
  (define_insn "sqrtdf2"
!   [(set (match_operand:DF 0 "register_operand" "=d")
  	(sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
!   "TARGET_C2"
    "sqrt.d %0")
  
  (define_insn "sqrtsf2"
!   [(set (match_operand:SF 0 "register_operand" "=d")
  	(sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
!   "TARGET_C2"
    "sqrt.s %0")
  
  (define_insn ""
!   [(set (match_operand:SI 0 "register_operand" "=d")
  	(minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
  		  (const_int 1)))]
***************
*** 932,936 ****
  
  (define_expand "ffssi2"
!   [(set (match_operand:SI 0 "register_operand" "d")
  	(minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
  		  (const_int 1)))
--- 909,913 ----
  
  (define_expand "ffssi2"
!   [(set (match_operand:SI 0 "register_operand" "=d")
  	(minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
  		  (const_int 1)))
***************
*** 940,943 ****
--- 917,934 ----
    ""
    "")
+ 
+ (define_insn "abssf2"
+   [(set (match_operand:SF 0 "register_operand" "=d")
+ 	(abs:SF (match_operand:SF 1 "register_operand" "0")))]
+   ""
+   "and #0x7fffffff,%0")
+ 
+ (define_expand "absdf2"
+   [(set (subreg:DI (match_operand:DF 0 "register_operand" "=d") 0)
+ 	(and:DI (subreg:DI (match_operand:DF 1 "register_operand" "d") 0)
+ 		(match_dup 2)))]
+   ""
+   "operands[2] = force_reg (DImode,
+ 			    immed_double_const (-1, 0x7fffffff, DImode));")
  \f


  (define_insn "jump"
***************
*** 1141,1152 ****
      {
        if (operands[1] == const0_rtx)
!         {
! 	  if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
! 	      && GET_CODE (PATTERN (NEXT_INSN (insn))) == RETURN)
! 	    return \"jmp %0\";
! 	  else
! 	    return \"calls %0\";
! 	}
!       else if (! call_ap_check (operands[0]))
  	return \"mov sp,ap\;calls %0\;ld.w 12(fp),ap\";
        operands[0] = XEXP (operands[0], 0);
--- 1132,1137 ----
      {
        if (operands[1] == const0_rtx)
! 	return \"calls %0\";
!       if (! reg_mentioned_p (arg_pointer_rtx, operands[0]))
  	return \"mov sp,ap\;calls %0\;ld.w 12(fp),ap\";
        operands[0] = XEXP (operands[0], 0);
***************
*** 1154,1158 ****
      }
    operands[1] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[1]) + 3)/ 4);
!   if (! call_ap_check (operands[0]))
      return \"mov sp,ap\;pshea %a1\;calls %0\;ld.w 12(fp),ap\;add.w #4*%a1+4,sp\";
    operands[0] = XEXP (operands[0], 0);
--- 1139,1143 ----
      }
    operands[1] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[1]) + 3)/ 4);
!   if (! reg_mentioned_p (arg_pointer_rtx, operands[0]))
      return \"mov sp,ap\;pshea %a1\;calls %0\;ld.w 12(fp),ap\;add.w #4*%a1+4,sp\";
    operands[0] = XEXP (operands[0], 0);
***************
*** 1169,1181 ****
    if (! RETURN_POPS_ARGS ()) 
      {
!       if (operands[1] == const0_rtx)
! 	{
! 	  if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
! 	      && GET_CODE (PATTERN (NEXT_INSN (insn))) == RETURN)
! 	    return \"jmp %1\";
! 	  else
! 	    return \"calls %1\";
! 	}
!       else if (! call_ap_check (operands[1]))
  	return \"mov sp,ap\;calls %1\;ld.w 12(fp),ap\";
        operands[1] = XEXP (operands[1], 0);
--- 1154,1160 ----
    if (! RETURN_POPS_ARGS ()) 
      {
!       if (operands[2] == const0_rtx)
! 	return \"calls %1\";
!       if (! reg_mentioned_p (arg_pointer_rtx, operands[1]))
  	return \"mov sp,ap\;calls %1\;ld.w 12(fp),ap\";
        operands[1] = XEXP (operands[1], 0);
***************
*** 1182,1187 ****
        return \"ld.w %1,a1\;mov sp,ap\;calls (a1)\;ld.w 12(fp),ap\";
      }
!   operands[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) + 3)/ 4);
!   if (! call_ap_check (operands[1]))
      return \"mov sp,ap\;pshea %a2\;calls %1\;ld.w 12(fp),ap\;add.w #4*%a2+4,sp\";
    operands[1] = XEXP (operands[1], 0);
--- 1161,1166 ----
        return \"ld.w %1,a1\;mov sp,ap\;calls (a1)\;ld.w 12(fp),ap\";
      }
!   operands[2] = gen_rtx (CONST_INT, VOIDmode, (INTVAL (operands[2]) + 3) / 4);
!   if (! reg_mentioned_p (arg_pointer_rtx, operands[1]))
      return \"mov sp,ap\;pshea %a2\;calls %1\;ld.w 12(fp),ap\;add.w #4*%a2+4,sp\";
    operands[1] = XEXP (operands[1], 0);
***************
*** 1262,1264 ****
--- 1241,1244 ----
  ;;- eval: (modify-syntax-entry ?} "){")
  ;;- End:
+ 
  
diff -rc2N gcc-1.33/cpp.texinfo gcc-1.34/cpp.texinfo
*** gcc-1.33/cpp.texinfo	Sat Dec 10 15:12:44 1988
--- gcc-1.34/cpp.texinfo	Sat Feb 18 03:07:23 1989
***************
*** 1384,1391 ****
  
  The prescan is not done when an argument is stringified or concatenated.
! (More precisely, stringification and concatenation use the argument as
! written, in un-prescanned form.  The same actual argument would be used in
! prescanned form if it is substituted elsewhere without stringification or
! concatenation.)  Thus,
  
  @example
--- 1384,1388 ----
  
  The prescan is not done when an argument is stringified or concatenated.
! Thus,
  
  @example
***************
*** 1399,1405 ****
  having any noticeable effect.
  
  You might now ask, ``Why mention the prescan, if it makes no difference?
! Why not skip it and make the preprocessor faster?''  The answer is that the
! prescan does make a difference in two special cases:
  
  @itemize @bullet
--- 1396,1415 ----
  having any noticeable effect.
  
+ More precisely, stringification and concatenation use the argument as
+ written, in un-prescanned form.  The same actual argument would be used in
+ prescanned form if it is substituted elsewhere without stringification or
+ concatenation.
+ 
+ @example
+ #define str(s) #s lose(s)
+ #define foo 4
+ str (foo)
+ @end example
+ 
+ expands to @samp{"foo" lose(4)}.
+ 
  You might now ask, ``Why mention the prescan, if it makes no difference?
! And why not skip it and make the preprocessor faster?''  The answer is
! that the prescan does make a difference in three special cases:
  
  @itemize @bullet
***************
*** 1409,1412 ****
--- 1419,1425 ----
  @item
  Macros that call other macros that stringify or concatenate.
+ 
+ @item
+ Macros whose expansions contain unshielded commas.
  @end itemize
  
***************
*** 1423,1426 ****
--- 1436,1485 ----
  (in the medical, not computational, sense of the term) of the special
  rule for self-referential macros.
+ 
+ But prescan causes trouble in certain other cases of nested macro calls.
+ Here is an example:
+ 
+ @example
+ #define foo  a,b
+ #define bar(x) lose(x)
+ #define lose(x) (1 + (x))
+ 
+ bar(foo)
+ @end example
+ 
+ @noindent
+ We would like @samp{bar(foo)} to turn into @samp{(1 + (foo))}, which
+ would then turn into @samp{(1 + (a,b))}.  But instead, @samp{bar(foo)}
+ expands into @samp{lose(a,b)}, and you get an error because @code{lose}
+ requires a single argument.  In this case, the problem is easily solved
+ by the same parentheses that ought to be used to prevent misnesting of
+ arithmetic operations:
+ 
+ @example
+ #define foo (a,b)
+ #define bar(x) lose((x))
+ @end example
+ 
+ The problem is more serious when the operands of the macro are not
+ expressions; for example, when they are statements.  Then parentheses
+ are unacceptable because they would make for invalid C code:
+ 
+ @example
+ #define foo @{ int a, b; @dots{} @}
+ @end example
+ 
+ @noindent
+ In GNU C you can shield the commas using the @samp{(@{@dots{}@})}
+ construct which turns a compound statement into an expression:
+ 
+ @example
+ #define foo (@{ int a, b; @dots{} @})
+ @end example
+ 
+ Or you can rewrite the macro definition to avoid such commas:
+ 
+ @example
+ #define foo @{ int a; int b; @dots{} @}
+ @end example
  
  There is also one case where prescan is useful.  It is possible
diff -rc2N gcc-1.33/cse.c gcc-1.34/cse.c
*** gcc-1.33/cse.c	Sat Jan 28 22:07:33 1989
--- gcc-1.34/cse.c	Wed Feb 22 11:50:00 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 259,262 ****
--- 258,266 ----
  static int *consec_ints;
  
+ /* Set nonzero in cse_insn to tell cse_basic_block to skip immediately
+    to the next basic block and treat it as a continuation of this one.  */
+ 
+ static int cse_skip_to_next_block;
+ 
  /* UID of insn that starts the basic block currently being cse-processed.  */
  
***************
*** 404,407 ****
--- 408,412 ----
  static void note_mem_written ();
  static int cse_rtx_addr_varies_p ();
+ static int fold_cc0 ();
  \f


  /* Return an estimate of the cost of computing rtx X.
***************
*** 891,895 ****
  #define CHEAPER(X,Y)	\
     (((X)->cost < (Y)->cost) ||						\
!     (GET_CODE ((X)->exp) == REG && GET_CODE ((Y)->exp) == REG		\
       && (regno_last_uid[REGNO ((X)->exp)] > cse_basic_block_end		\
  	 || regno_first_uid[REGNO ((X)->exp)] < cse_basic_block_start)	\
--- 896,901 ----
  #define CHEAPER(X,Y)	\
     (((X)->cost < (Y)->cost) ||						\
!     ((X)->cost == (Y)->cost						\
!      && GET_CODE ((X)->exp) == REG && GET_CODE ((Y)->exp) == REG	\
       && (regno_last_uid[REGNO ((X)->exp)] > cse_basic_block_end		\
  	 || regno_first_uid[REGNO ((X)->exp)] < cse_basic_block_start)	\
***************
*** 1961,1977 ****
  	 Decode the info on how the previous insn set the cc0
  	 and use that to deduce result of comparison.  */
!       if (XEXP (x, 0) == cc0_rtx)
  	{
! 	  if (prev_insn_cc0 == 0
  	      || const_arg1 != const0_rtx
! 	      /* 0200 bit in prev_insn_cc0 means only zeroness is known,
  		 and sign is not known.  */
! 	      || ((prev_insn_cc0 & 0200)
! 		  && code != EQ && code != NE))
  	    return x;
  	  if (code == LEU || code == LTU || code == GEU || code == GTU)
! 	    arg0 = prev_insn_cc0 & 7;
  	  else
! 	    arg0 = (prev_insn_cc0 >> 3) & 7;
  	  if (arg0 == 7) arg0 = -1;
  
--- 1967,1990 ----
  	 Decode the info on how the previous insn set the cc0
  	 and use that to deduce result of comparison.  */
!       if (XEXP (x, 0) == cc0_rtx
! 	  || GET_CODE (XEXP (x, 0)) == COMPARE)
  	{
! 	  if (XEXP (x, 0) == cc0_rtx)
! 	    arg0 = prev_insn_cc0;
! 	  else
! 	    arg0 = fold_cc0 (XEXP (x, 0));
! 
! 	  if (arg0 == 0
  	      || const_arg1 != const0_rtx
! 	      /* 0200 bit in arg0 means only zeroness is known,
  		 and sign is not known.  */
! 	      || ((arg0 & 0200) != 0 && code != EQ && code != NE))
  	    return x;
+ 
+ 	  /* Extract either the signed or the unsigned digit from ARG0.  */
  	  if (code == LEU || code == LTU || code == GEU || code == GTU)
! 	    arg0 = arg0 & 7;
  	  else
! 	    arg0 = (arg0 >> 3) & 7;
  	  if (arg0 == 7) arg0 = -1;
  
***************
*** 2008,2014 ****
  	    {
  	    case PLUS:
! 	      if (const_arg0 == const0_rtx)
  		return XEXP (x, 1);
! 	      if (const_arg1 == const0_rtx)
  		return XEXP (x, 0);
  
--- 2021,2031 ----
  	    {
  	    case PLUS:
! 	      if (const_arg0 == const0_rtx
! 		  || const_arg0 == fconst0_rtx
! 		  || const_arg0 == dconst0_rtx)
  		return XEXP (x, 1);
! 	      if (const_arg1 == const0_rtx
! 		  || const_arg1 == fconst0_rtx
! 		  || const_arg1 == dconst0_rtx)
  		return XEXP (x, 0);
  
***************
*** 2017,2021 ****
  		  && GET_CODE (const_arg0) != CONST_DOUBLE
  		  && GET_CODE (const_arg1) != CONST_DOUBLE
! 		  && GET_MODE_CLASS (GET_MODE (x)))
  	        {
  		  if (GET_CODE (const_arg1) == CONST_INT)
--- 2034,2038 ----
  		  && GET_CODE (const_arg0) != CONST_DOUBLE
  		  && GET_CODE (const_arg1) != CONST_DOUBLE
! 		  && GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
  	        {
  		  if (GET_CODE (const_arg1) == CONST_INT)
***************
*** 2046,2050 ****
  	      break;
  
! 	    case MINUS:
  	      if (const_arg1 == const0_rtx)
  		return XEXP (x, 0);
--- 2063,2067 ----
  	      break;
  
! 	    case COMPARE:
  	      if (const_arg1 == const0_rtx)
  		return XEXP (x, 0);
***************
*** 2057,2067 ****
  		    return const0_rtx;
  		}
  
! 	      /* MINUS with VOIDmode is an overflowless subtraction
! 		 for comparison purposes.  It's incorrect to fold it
! 		 at all unless we can determine the comparison results.
! 		 Leave that to fold_cc0.  */
! 	      if (GET_MODE (x) == VOIDmode)
! 		return x;
  
  	      /* Change subtraction from zero into negation.  */
--- 2074,2092 ----
  		    return const0_rtx;
  		}
+ 	      break;
+ 	      
+ 	    case MINUS:
+ 	      if (const_arg1 == const0_rtx
+ 		  || const_arg1 == fconst0_rtx
+ 		  || const_arg1 == dconst0_rtx)
+ 		return XEXP (x, 0);
  
! 	      if (XEXP (x, 0) == XEXP (x, 1)
! 		  || (const_arg0 != 0 && const_arg0 == const_arg1))
! 		{
! 		  /* We can't assume x-x is 0 with IEEE floating point.  */
! 		  if (GET_MODE_CLASS (GET_MODE (x)) == MODE_INT)
! 		    return const0_rtx;
! 		}
  
  	      /* Change subtraction from zero into negation.  */
***************
*** 2084,2087 ****
--- 2109,2116 ----
  	      if (const_arg1 == const0_rtx || const_arg0 == const0_rtx)
  		new = const0_rtx;
+ 	      if (const_arg1 == fconst0_rtx || const_arg0 == fconst0_rtx)
+ 		new = fconst0_rtx;
+ 	      if (const_arg1 == dconst0_rtx || const_arg0 == dconst0_rtx)
+ 		new = dconst0_rtx;
  	      if (const_arg1 == const1_rtx)
  		return XEXP (x, 0);
***************
*** 2187,2196 ****
  
  	case MINUS:
- 	  if (GET_MODE (x) == VOIDmode)
- 	    /* Overflowless comparison:
- 	       cannot represent an exact answer, so don't fold.
- 	       This is used only to set the CC0,
- 	       and fold_cc0 will take care of it.  */
- 	    return x;
  	  val = arg0 - arg1;
  	  break;
--- 2216,2219 ----
***************
*** 2383,2387 ****
    rtx tem1;
  
!   if (CONSTANT_P (x))
      return x;
    else if (GET_CODE (x) == REG
--- 2406,2410 ----
    rtx tem1;
  
!   if (CONSTANT_P (x) || GET_CODE (x) == CONST_DOUBLE)
      return x;
    else if (GET_CODE (x) == REG
***************
*** 2422,2426 ****
       rtx x;
  {
!   if (GET_CODE (x) == MINUS && GET_MODE (x) == VOIDmode)
      {
        rtx y0 = fold_rtx (XEXP (x, 0), 0);
--- 2445,2449 ----
       rtx x;
  {
!   if (GET_CODE (x) == COMPARE)
      {
        rtx y0 = fold_rtx (XEXP (x, 0), 0);
***************
*** 3125,3129 ****
  
        if (dest == cc0_rtx
! 	  && (GET_CODE (src) == MINUS
  	      || CONSTANT_P (src)
  	      || GET_CODE (src) == REG))
--- 3148,3152 ----
  
        if (dest == cc0_rtx
! 	  && (GET_CODE (src) == COMPARE
  	      || CONSTANT_P (src)
  	      || GET_CODE (src) == REG))
***************
*** 3339,3342 ****
--- 3362,3370 ----
  	      NOTE_SOURCE_FILE (prev_insn) = 0;
  	    }
+ 	  /* If jump target is the following label, and this is only use of it,
+ 	     skip direct to that label and continue optimizing there.  */
+ 	  if (no_labels_between_p (insn, XEXP (SET_SRC (x), 0))
+ 	      && LABEL_NUSES (XEXP (SET_SRC (x), 0)) == 1)
+ 	    cse_skip_to_next_block = 1;
  	}
      }
***************
*** 3442,3446 ****
  }
  \f


! static void cse_basic_block ();
  
  /* Perform cse on the instructions of a function.
--- 3470,3530 ----
  }
  \f


! /* Find the end of INSN's basic block, and return the uid of its last insn
!    and the total number of SETs in all the insns of the block.  */
! 
! struct cse_basic_block_data { int uid, nsets; rtx last; };
! 
! static struct cse_basic_block_data
! cse_end_of_basic_block (insn)
!      rtx insn;
! {
!   rtx p = insn;
!   struct cse_basic_block_data val;
!   int nsets = 0;
!   int last_uid = 0;
! 
!   /* Scan to end of this basic block.  */
!   while (p && GET_CODE (p) != CODE_LABEL)
!     {
!       /* Don't cse out the end of a loop.  This makes a difference
! 	 only for the unusual loops that always execute at least once;
! 	 all other loops have labels there so we will stop in any case.
! 	 Cse'ing out the end of the loop is dangerous because it
! 	 might cause an invariant expression inside the loop
! 	 to be reused after the end of the loop.  This would make it
! 	 hard to move the expression out of the loop in loop.c,
! 	 especially if it is one of several equivalent expressions
! 	 and loop.c would like to eliminate it.
! 	 The occasional optimizations lost by this will all come back
! 	 if loop and cse are made to work alternatingly.  */
!       if (GET_CODE (p) == NOTE
! 	  && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
! 	break;
! 
!       /* Don't cse over a call to setjmp; on some machines (eg vax)
! 	 the regs restored by the longjmp come from
! 	 a later time than the setjmp.  */
!       if (GET_CODE (p) == NOTE
! 	  && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
! 	break;
! 
!       /* A PARALLEL can have lots of SETs in it,
! 	 especially if it is really an ASM_OPERANDS.  */
!       if (GET_CODE (p) == INSN && GET_CODE (PATTERN (p)) == PARALLEL)
! 	nsets += XVECLEN (PATTERN (p), 0);
!       else
! 	nsets += 1;
! 
!       last_uid = INSN_UID (p);
!       p = NEXT_INSN (p);
!     }
!   val.uid = last_uid;
!   val.nsets = nsets;
!   val.last = p;
! 
!   return val;
! }
! \f


! static rtx cse_basic_block ();
  
  /* Perform cse on the instructions of a function.
***************
*** 3493,3545 ****
    while (insn)
      {
!       register rtx p = insn;
!       register int last_uid;
! 
!       max_qty = 0;
  
!       /* Find end of next basic block */
!       while (p && GET_CODE (p) != CODE_LABEL)
! 	{
! 	  /* Don't cse out the end of a loop.  This makes a difference
! 	     only for the unusual loops that always execute at least once;
! 	     all other loops have labels there so we will stop in any case.
! 	     Cse'ing out the end of the loop is dangerous because it
! 	     might cause an invariant expression inside the loop
! 	     to be reused after the end of the loop.  This would make it
! 	     hard to move the expression out of the loop in loop.c,
! 	     especially if it is one of several equivalent expressions
! 	     and loop.c would like to eliminate it.
! 	     The occasional optimizations lost by this will all come back
! 	     if loop and cse are made to work alternatingly.  */
! 	  if (GET_CODE (p) == NOTE
! 	      && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
! 	    break;
! 
! 	  /* Don't cse over a call to setjmp; on some machines (eg vax)
! 	     the regs restored by the longjmp come from
! 	     a later time than the setjmp.  */
! 	  if (GET_CODE (p) == NOTE
! 	      && NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
! 	    break;
! 
! 	  /* A PARALLEL can have lots of SETs in it,
! 	     especially if it is really an ASM_OPERANDS.  */
! 	  if (GET_CODE (p) == INSN && GET_CODE (PATTERN (p)) == PARALLEL)
! 	    max_qty += XVECLEN (PATTERN (p), 0) * 2;
! 	  else
! 	    max_qty += 2;;
! 
! 	  last_uid = INSN_UID (p);
! 	  p = NEXT_INSN (p);
! 	}
  
!       cse_basic_block_end = last_uid;
        cse_basic_block_start = INSN_UID (insn);
  
!       max_qty += max_reg;
  
!       cse_basic_block (insn, p);
  
!       insn = p ? NEXT_INSN (p) : 0;
      }
  
--- 3577,3596 ----
    while (insn)
      {
!       struct cse_basic_block_data val;
  
!       val = cse_end_of_basic_block (insn);
  
!       cse_basic_block_end = val.uid;
        cse_basic_block_start = INSN_UID (insn);
+       max_qty = val.nsets * 2;
  
!       /* Make MAX_QTY bigger to give us room to optimize
! 	 past the end of this basic block, if that should prove useful.  */
!       if (max_qty < 500)
! 	max_qty = 500;
  
!       max_qty += max_reg;
  
!       insn = cse_basic_block (insn, val.last);
      }
  
***************
*** 3553,3557 ****
  }
  
! static void
  cse_basic_block (from, to)
       register rtx from, to;
--- 3604,3608 ----
  }
  
! static rtx
  cse_basic_block (from, to)
       register rtx from, to;
***************
*** 3569,3575 ****
    new_basic_block ();
  
    for (insn = from; insn != to; insn = NEXT_INSN (insn))
      {
!       register enum rtx_code code = GET_CODE (insn);
        if (code == INSN || code == JUMP_INSN || code == CALL_INSN)
  	cse_insn (insn);
--- 3620,3631 ----
    new_basic_block ();
  
+   cse_skip_to_next_block = 0;
+ 
    for (insn = from; insn != to; insn = NEXT_INSN (insn))
      {
!       register enum rtx_code code;
! 
!       code = GET_CODE (insn);
! 
        if (code == INSN || code == JUMP_INSN || code == CALL_INSN)
  	cse_insn (insn);
***************
*** 3602,3605 ****
--- 3658,3685 ----
  	  break;
  	}
+ 
+       if (cse_skip_to_next_block)
+ 	{
+ 	  struct cse_basic_block_data val;
+ 
+ 	  /* Skip the remaining insns in this block.  */
+ 	  cse_skip_to_next_block = 0;
+ 	  insn = to;
+ 	  if (insn == 0)
+ 	    break;
+ 
+ 	  /* Find the end of the following block.  */
+ 	  val = cse_end_of_basic_block (NEXT_INSN (insn));
+ 
+ 	  /* If the tables we allocated have enough space left
+ 	     to handle all the SETs in the next basic block,
+ 	     continue through it.  Otherwise, return,
+ 	     and that block will be scanned individually.  */
+ 	  if (val.nsets * 2 + next_qty > max_qty)
+ 	    break;
+ 
+ 	  cse_basic_block_end = val.uid;
+ 	  to = val.last;
+ 	}
      }
  
***************
*** 3606,3608 ****
--- 3686,3690 ----
    if (next_qty > max_qty)
      abort ();
+ 
+   return to ? NEXT_INSN (to) : 0;
  }
diff -rc2N gcc-1.33/dbxout.c gcc-1.34/dbxout.c
*** gcc-1.33/dbxout.c	Wed Jan 11 21:40:53 1989
--- gcc-1.34/dbxout.c	Wed Feb 22 11:49:52 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/emit-rtl.c gcc-1.34/emit-rtl.c
*** gcc-1.33/emit-rtl.c	Sun Jan  1 17:13:23 1989
--- gcc-1.34/emit-rtl.c	Wed Feb 22 11:54:05 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 138,141 ****
--- 137,147 ----
  
  rtx *regno_reg_rtx;
+ 
+ /* Filename and line number of last line-number note,
+    whether we actually emitted it or not.  */
+ extern char *emit_filename;
+ extern int emit_lineno;
+ 
+ rtx change_address ();
  \f


  /* rtx gen_rtx (code, mode, [element1, ..., elementn])
***************
*** 378,384 ****
  		 - min (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
  #endif
!       return gen_rtx (MEM, mode,
! 		      memory_address (mode,
! 				      plus_constant (XEXP (x, 0), offset)));
      }
    else if (GET_CODE (x) == SUBREG)
--- 384,388 ----
  		 - min (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
  #endif
!       return change_address (x, mode, plus_constant (XEXP (x, 0), offset));
      }
    else if (GET_CODE (x) == SUBREG)
***************
*** 423,429 ****
  			  GET_MODE_SIZE (GET_MODE (x))));
  #endif
!       return gen_rtx (MEM, mode,
! 		      memory_address (mode,
! 				      plus_constant (XEXP (x, 0), offset)));
      }
    else if (GET_CODE (x) == REG)
--- 427,431 ----
  			  GET_MODE_SIZE (GET_MODE (x))));
  #endif
!       return change_address (x, mode, plus_constant (XEXP (x, 0), offset));
      }
    else if (GET_CODE (x) == REG)
***************
*** 1150,1153 ****
--- 1152,1158 ----
       int line;
  {
+   emit_filename = file;
+   emit_lineno = line;
+ 
    if (no_line_numbers)
      return 0;
***************
*** 1266,1270 ****
  start_sequence ()
  {
-   rtx save;
    sequence_stack
      = gen_rtx (INSN_LIST, VOIDmode,
--- 1271,1274 ----
diff -rc2N gcc-1.33/explow.c gcc-1.34/explow.c
*** gcc-1.33/explow.c	Sat Oct  1 02:12:27 1988
--- gcc-1.34/explow.c	Wed Feb 22 11:49:44 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/expmed.c gcc-1.34/expmed.c
*** gcc-1.33/expmed.c	Sat Jan 28 19:48:11 1989
--- gcc-1.34/expmed.c	Wed Feb 22 11:49:42 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 194,205 ****
  	  if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
  	    {
- 	      /* Avoid making subreg of a subreg.  */
- 	      if (GET_CODE (value1) == SUBREG)
- 		value1 = copy_to_reg (value1);
  	      /* Optimization: Don't bother really extending VALUE
  		 if it has all the bits we will actually use.  */
! 	      value1 = gen_rtx (SUBREG, SImode, value1, 0);
! 	      if (GET_CODE (SUBREG_REG (value1)) != REG)
  		value1 = copy_to_reg (value1);
  	    }
  	  else if (!CONSTANT_P (value))
--- 193,203 ----
  	  if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
  	    {
  	      /* Optimization: Don't bother really extending VALUE
  		 if it has all the bits we will actually use.  */
! 
! 	      /* Avoid making subreg of a subreg, or of a mem.  */
! 	      if (GET_CODE (value1) != REG)
  		value1 = copy_to_reg (value1);
+ 	      value1 = gen_rtx (SUBREG, SImode, value1, 0);
  	    }
  	  else if (!CONSTANT_P (value))
***************
*** 1447,1454 ****
  	{
  	  /* See if we can do remainder without a library call.  */
! 	  temp = expand_binop (mode,
! 			       unsignedp ? umod_optab : smod_optab,
! 			       adjusted_op0, op1, target,
! 			       unsignedp, OPTAB_WIDEN);
  	  if (temp != 0)
  	    return temp;
--- 1445,1451 ----
  	{
  	  /* See if we can do remainder without a library call.  */
! 	  temp = sign_expand_binop (mode, umod_optab, smod_optab,
! 				    adjusted_op0, op1, target,
! 				    unsignedp, OPTAB_WIDEN);
  	  if (temp != 0)
  	    return temp;
***************
*** 1473,1483 ****
         and a remainder subroutine would be ok,
         don't use a divide subroutine.  */
!     temp = expand_binop (mode, unsignedp ? udiv_optab : sdiv_optab,
! 			 adjusted_op0, op1, target,
! 			 unsignedp, OPTAB_WIDEN);
    else
!     temp = expand_binop (mode, unsignedp ? udiv_optab : sdiv_optab,
! 			 adjusted_op0, op1, target,
! 			 unsignedp, OPTAB_LIB_WIDEN);
  
    /* If we really want the remainder, get it by subtraction.  */
--- 1470,1480 ----
         and a remainder subroutine would be ok,
         don't use a divide subroutine.  */
!     temp = sign_expand_binop (mode, udiv_optab, sdiv_optab,
! 			      adjusted_op0, op1, target,
! 			      unsignedp, OPTAB_WIDEN);
    else
!     temp = sign_expand_binop (mode, udiv_optab, sdiv_optab,
! 			      adjusted_op0, op1, target,
! 			      unsignedp, OPTAB_LIB_WIDEN);
  
    /* If we really want the remainder, get it by subtraction.  */
***************
*** 1487,1494 ****
  	{
  	  /* No divide instruction either.  Use library for remainder.  */
! 	  temp = expand_binop (mode,
! 			       unsignedp ? umod_optab : smod_optab,
! 			       op0, op1, target,
! 			       unsignedp, OPTAB_LIB_WIDEN);
  	}
        else
--- 1484,1490 ----
  	{
  	  /* No divide instruction either.  Use library for remainder.  */
! 	  temp = sign_expand_binop (mode, umod_optab, smod_optab,
! 				    op0, op1, target,
! 				    unsignedp, OPTAB_LIB_WIDEN);
  	}
        else
diff -rc2N gcc-1.33/expr.c gcc-1.34/expr.c
*** gcc-1.33/expr.c	Mon Jan 23 03:19:44 1989
--- gcc-1.34/expr.c	Wed Feb 22 11:49:38 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 238,242 ****
  
  /* Return nonzero if X contains a QUEUED expression:
!    if it contains anything that will be altered by a queued increment.  */
  
  static int
--- 237,243 ----
  
  /* Return nonzero if X contains a QUEUED expression:
!    if it contains anything that will be altered by a queued increment.
!    We handle only combinations of MEM, PLUS, MINUS and MULT operators
!    since memory addresses generally contain only those.  */
  
  static int
***************
*** 359,363 ****
  	    {
  	      convert_move (gen_lowpart (SImode, to), from, unsignedp);
! 	      emit_unop_insn (CODE_FOR_zero_extendsidi2, to, to, ZERO_EXTEND);
  	    }
  	  else
--- 360,365 ----
  	    {
  	      convert_move (gen_lowpart (SImode, to), from, unsignedp);
! 	      emit_unop_insn (CODE_FOR_zero_extendsidi2, to,
! 			      gen_lowpart (SImode, to), ZERO_EXTEND);
  	    }
  	  else
***************
*** 1318,1321 ****
--- 1320,1327 ----
  	  if (reg_mentioned_p (stack_pointer_rtx, temp))
  	    {
+ 	      /* Now that emit_library_call does force_operand
+ 		 before pushing anything, preadjustment does not work.  */
+ 	      temp = copy_to_reg (temp);
+ #if 0
  	      /* Correct TEMP so it holds what will be a description of
  		 the address to copy to, valid after one arg is pushed.  */
***************
*** 1336,1340 ****
  #else
  	      temp = plus_constant (temp, -xsize);
! #endif
  	    }
  
--- 1342,1347 ----
  #else
  	      temp = plus_constant (temp, -xsize);
! #endif /* not STACK_GROWS_DOWNWARD */
! #endif /* 0 */
  	    }
  
***************
*** 1464,1467 ****
--- 1471,1475 ----
    struct arg *argvec;
    int old_args_size = current_args_size;
+   int stack_padding = 0;
  
    va_start (p);
***************
*** 1527,1533 ****
  
    if (args_size != 0)
!     argblock
!       = push_block (round_push (gen_rtx (CONST_INT, VOIDmode, args_size)));
  #endif
  
    INIT_CUMULATIVE_ARGS (args_so_far, (tree)0);
--- 1535,1547 ----
  
    if (args_size != 0)
!     {
! #ifdef STACK_ARGS_ADJUST
!       stack_padding = STACK_ARGS_ADJUST (args_size);
!       args_size += stack_padding;
  #endif
+       argblock
+ 	= push_block (round_push (gen_rtx (CONST_INT, VOIDmode, args_size)));
+     }
+ #endif /* no PUSH_ROUNDING */
  
    INIT_CUMULATIVE_ARGS (args_so_far, (tree)0);
***************
*** 1540,1544 ****
    argnum = 0;
  #endif
!   args_size = 0;
  
    for (count = 0; count < nargs; count++, argnum += inc)
--- 1554,1558 ----
    argnum = 0;
  #endif
!   args_size = stack_padding;
  
    for (count = 0; count < nargs; count++, argnum += inc)
***************
*** 1861,1865 ****
  
  	  store_field (target, bitsize, bitpos, mode, TREE_VALUE (elt),
! 		       VOIDmode, 0, TYPE_ALIGN (TREE_TYPE (elt)));
  	}
      }
--- 1875,1881 ----
  
  	  store_field (target, bitsize, bitpos, mode, TREE_VALUE (elt),
! 		       /* The alignment of TARGET is
! 			  at least what its type requires.  */
! 		       VOIDmode, 0, TYPE_ALIGN (TREE_TYPE (exp)));
  	}
      }
***************
*** 1902,1906 ****
  
  	  store_field (target, bitsize, bitpos, mode, TREE_VALUE (elt),
! 		       VOIDmode, 0);
  	}
      }
--- 1918,1924 ----
  
  	  store_field (target, bitsize, bitpos, mode, TREE_VALUE (elt),
! 		       /* The alignment of TARGET is
! 			  at least what its type requires.  */
! 		       VOIDmode, 0, TYPE_ALIGN (TREE_TYPE (exp)));
  	}
      }
***************
*** 2171,2183 ****
        /* Generate immediate CONST_DOUBLE
  	 which will be turned into memory by reload if necessary.  */
- #ifdef WORDS_BIG_ENDIAN
-       return immed_double_const (TREE_INT_CST_HIGH (exp),
- 				 TREE_INT_CST_LOW (exp),
- 				 mode);
- #else
        return immed_double_const (TREE_INT_CST_LOW (exp),
  				 TREE_INT_CST_HIGH (exp),
  				 mode);
- #endif
  
      case CONST_DECL:
--- 2189,2195 ----
***************
*** 2334,2338 ****
  	  && TREE_LITERAL (TREE_OPERAND (exp, 1))
  	  && TREE_CODE (TREE_OPERAND (exp, 0)) == VAR_DECL
! 	  && DECL_INITIAL (TREE_OPERAND (exp, 0)))
  	{
  	  tree index = fold (TREE_OPERAND (exp, 1));
--- 2346,2351 ----
  	  && TREE_LITERAL (TREE_OPERAND (exp, 1))
  	  && TREE_CODE (TREE_OPERAND (exp, 0)) == VAR_DECL
! 	  && DECL_INITIAL (TREE_OPERAND (exp, 0))
! 	  && TREE_CODE (DECL_INITIAL (TREE_OPERAND (exp, 0))) != ERROR_MARK)
  	{
  	  tree index = fold (TREE_OPERAND (exp, 1));
***************
*** 2417,2421 ****
  					       (bitpos / BITS_PER_UNIT)));
  	MEM_IN_STRUCT_P (op0) = 1;
! 	MEM_VOLATILE_P (op0) = volstruct;
  	/* If OP0 is in the shared structure-value stack slot,
  	   and it is not BLKmode, copy it into a register.
--- 2430,2434 ----
  					       (bitpos / BITS_PER_UNIT)));
  	MEM_IN_STRUCT_P (op0) = 1;
! 	MEM_VOLATILE_P (op0) |= volstruct;
  	/* If OP0 is in the shared structure-value stack slot,
  	   and it is not BLKmode, copy it into a register.
***************
*** 3113,3117 ****
    temp = expand_binop (mode, this_optab, op0, op1, target,
  		       TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN);
-  binop1:
    if (temp == 0)
      abort ();
--- 3126,3129 ----
***************
*** 3619,3622 ****
--- 3631,3637 ----
       it is passed by being copied directly into struct_value_rtx.  */
    int structure_value_addr_parm = 0;
+   /* Nonzero if called function returns an aggregate in memory PCC style,
+      by returning the address of where to find it.  */
+   int pcc_struct_value = 0;
  
    /* Number of actual parameters in this call, including struct value addr.  */
***************
*** 3637,3640 ****
--- 3652,3657 ----
    /* Nonzero means count reg-parms' size in ARGS_SIZE.  */
    int stack_count_regparms = 0;
+   /* Number of bytes of padding BELOW the first argument.  */
+   int stack_padding = 0;
    /* Data on reg parms scanned so far.  */
    CUMULATIVE_ARGS args_so_far;
***************
*** 3716,3733 ****
    /* Set up a place to return a structure.  */
  
!   if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
      {
        /* This call returns a big structure.  */
!       if (target)
  	{
! 	  structure_value_addr = XEXP (target, 0);
! 	  if (reg_mentioned_p (stack_pointer_rtx, structure_value_addr))
! 	    structure_value_addr = copy_to_reg (structure_value_addr);
  	}
-       else
- 	/* Make room on the stack to hold the value.  */
- 	structure_value_addr = get_structure_value_addr (expr_size (exp));
      }
  
    if (is_integrable)
      {
--- 3733,3765 ----
    /* Set up a place to return a structure.  */
  
!   if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode
!       || (flag_pcc_struct_return
! 	  && (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
! 	      || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE)))
      {
        /* This call returns a big structure.  */
! #ifdef PCC_STATIC_STRUCT_RETURN
!       if (flag_pcc_struct_return)
  	{
! 	  pcc_struct_value = 1;
! 	  is_integrable = 0;  /* Easier than making that case work right.  */
! 	}
!       else
! #endif
! 	{
! 	  if (target)
! 	    {
! 	      structure_value_addr = XEXP (target, 0);
! 	      if (reg_mentioned_p (stack_pointer_rtx, structure_value_addr))
! 		structure_value_addr = copy_to_reg (structure_value_addr);
! 	    }
! 	  else
! 	    /* Make room on the stack to hold the value.  */
! 	    structure_value_addr = get_structure_value_addr (expr_size (exp));
  	}
      }
  
+   /* If called function is inline, try to integrate it.  */
+ 
    if (is_integrable)
      {
***************
*** 3867,3871 ****
        args[i].offset = args_size;
  
!       if (type == error_mark_node)
  	continue;
  
--- 3899,3904 ----
        args[i].offset = args_size;
  
!       if (type == error_mark_node
! 	  || TYPE_SIZE (type) == 0)
  	continue;
  
***************
*** 4003,4009 ****
      if (args[i].reg != 0 || is_const)
        {
  	if (args[i].reg != 0)
  	  reg_parm_seen = 1;
! 	args[i].value = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
  	if (GET_CODE (args[i].value) != MEM
  	    && ! CONSTANT_P (args[i].value)
--- 4036,4068 ----
      if (args[i].reg != 0 || is_const)
        {
+ 	int j;
+ 	int struct_value_lossage = 0;
+ 
+ 	/* First, see if this is a precomputed struct-returning function call
+ 	   and other subsequent parms are also such.  */
+ 	if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
+ 	    && TREE_CODE (args[i].tree_value) == CALL_EXPR)
+ 	  for (j = i + 1; j < num_actuals; j++)
+ 	    if (TYPE_MODE (TREE_TYPE (args[j].tree_value)) == BLKmode
+ 		&& TREE_CODE (args[j].tree_value) == CALL_EXPR
+ 		&& args[j].reg != 0 || is_const)
+ 	      {
+ 		/* We have two precomputed structure-values call expressions
+ 		   in our parm list.  Both of them would normally use
+ 		   the structure-value block.  To avoid the conflict,
+ 		   compute this parm with a different temporary block.  */
+ 		int size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
+ 		rtx structval = assign_stack_local (BLKmode, size);
+ 		args[i].value = expand_expr (args[i].tree_value, structval,
+ 					     VOIDmode, 0);
+ 		struct_value_lossage = 1;
+ 		break;
+ 	      }
+ 	if (!struct_value_lossage)
+ 	  args[i].value = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
+ 
  	if (args[i].reg != 0)
  	  reg_parm_seen = 1;
! 
  	if (GET_CODE (args[i].value) != MEM
  	    && ! CONSTANT_P (args[i].value)
***************
*** 4045,4048 ****
--- 4104,4111 ----
        old_stack_level = copy_to_mode_reg (Pmode, stack_pointer_rtx);
        old_pending_adj = pending_stack_adjust;
+ #ifdef STACK_ARGS_ADJUST
+       stack_padding = STACK_ARGS_ADJUST (args_size.constant);
+       args_size.constant += stack_padding;
+ #endif
        argblock = push_block (round_push (ARGS_SIZE_RTX (args_size)));
      }
***************
*** 4051,4058 ****
        int needed = args_size.constant;
  
  #ifdef STACK_BOUNDARY
        needed = (needed + STACK_BYTES - 1) / STACK_BYTES * STACK_BYTES;
-       args_size.constant = needed;
  #endif
  
        if (
--- 4114,4125 ----
        int needed = args_size.constant;
  
+ #ifdef STACK_ARGS_ADJUST
+       stack_padding = STACK_ARGS_ADJUST (needed);
+       needed += stack_padding;
+ #endif
  #ifdef STACK_BOUNDARY
        needed = (needed + STACK_BYTES - 1) / STACK_BYTES * STACK_BYTES;
  #endif
+       args_size.constant = needed;
  
        if (
***************
*** 4090,4093 ****
--- 4157,4168 ----
  #endif
  
+ #ifdef STACK_ARGS_ADJUST
+   /* If stack needs padding below the args, increase all arg offsets
+      so the args are stored above the padding.  */
+   if (stack_padding)
+     for (i = 0; i < num_actuals; i++)
+       args[i].offset.constant += stack_padding;
+ #endif
+ 
    /* Don't try to defer pops if preallocating, not even from the first arg,
       since ARGBLOCK probably refers to the SP.  */
***************
*** 4141,4145 ****
  	args[i].stack = 0;
  
!       if (args[i].reg == 0)
  	store_one_arg (&args[i], argblock, may_be_alloca);
      }
--- 4216,4221 ----
  	args[i].stack = 0;
  
!       if (args[i].reg == 0
! 	  && TYPE_SIZE (TREE_TYPE (args[i].tree_value)) != 0)
  	store_one_arg (&args[i], argblock, may_be_alloca);
      }
***************
*** 4254,4257 ****
--- 4330,4350 ----
  	target = gen_rtx (MEM, BLKmode,
  			  memory_address (BLKmode, structure_value_addr));
+     }
+   else if (pcc_struct_value)
+     {
+       if (target != 0)
+ 	{
+ 	  valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
+ 					fndecl);
+ 	  target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
+ 			    copy_to_reg (valreg));
+ 	}
+       else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
+ 	emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
+ 					 copy_to_reg (valreg)));
+       else
+ 	emit_block_move (target, gen_rtx (MEM, BLKmode, copy_to_reg (valreg)),
+ 			 expr_size (exp),
+ 			 TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT);
      }
    else if (target && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp)))
diff -rc2N gcc-1.33/expr.h gcc-1.34/expr.h
*** gcc-1.33/expr.h	Thu Dec  1 17:57:31 1988
--- gcc-1.34/expr.h	Wed Feb 22 11:49:33 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 211,214 ****
--- 210,216 ----
  rtx expand_binop ();
  
+ /* Expand a binary operation with both signed and unsigned forms.  */
+ rtx sign_expand_binop ();
+ 
  /* Expand a unary arithmetic operation given optab rtx operand.  */
  rtx expand_unop ();
***************
*** 355,356 ****
--- 357,360 ----
  void jumpif ();
  void do_jump ();
+ 
+ rtx assemble_static_space ();
diff -rc2N gcc-1.33/final.c gcc-1.34/final.c
*** gcc-1.33/final.c	Mon Jan 16 23:41:07 1989
--- gcc-1.34/final.c	Wed Feb 22 11:49:30 1989
***************
*** 1,21 ****
  /* Convert RTL to assembler code and output it, for GNU compiler.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Convert RTL to assembler code and output it, for GNU compiler.
!    Copyright (C) 1987, 1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 94,97 ****
--- 93,100 ----
  static int last_linenum;
  
+ /* Number of basic blocks seen so far;
+    used if profile_block_flag is set.  */
+ static int count_basic_blocks;
+ 
  /* Nonzero while outputting an `asm' with operands.
     This means that inconsistencies are the user's fault, so don't abort.
***************
*** 208,211 ****
--- 211,280 ----
  }
  
+ /* Called at end of source file,
+    to output the block-profiling table for this entire compilation.  */
+ 
+ void
+ end_final (filename)
+      char *filename;
+ {
+   int i;
+ 
+   if (profile_block_flag)
+     {
+       char name[12];
+ 
+       data_section ();
+ 
+       /* Output the main header, of 6 words:
+ 	 0:  1 if this file's initialized, else 0.
+ 	 1:  address of file name.
+ 	 2:  address of table of counts.
+ 	 4:  number of counts in the table.
+ 	 5:  always 0, for compatibility with Sun.
+ 	 6:  extra word added by GNU: address of address table
+ 	      which contains addresses of basic blocks,
+ 	      in parallel with the table of counts.  */
+       ASM_OUTPUT_ALIGN (asm_out_file,
+ 			exact_log2 (min (UNITS_PER_WORD,
+ 					 BIGGEST_ALIGNMENT / BITS_PER_UNIT)));
+ 
+       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 0);
+       assemble_integer_zero ();
+ 
+       ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 1);
+       ASM_OUTPUT_INT (asm_out_file, gen_rtx (SYMBOL_REF, Pmode, name));
+       ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 2);
+       ASM_OUTPUT_INT (asm_out_file, gen_rtx (SYMBOL_REF, Pmode, name));
+       ASM_OUTPUT_INT (asm_out_file, gen_rtx (CONST_INT, VOIDmode,
+ 					     count_basic_blocks));
+       assemble_integer_zero ();
+       ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 3);
+       ASM_OUTPUT_INT (asm_out_file, gen_rtx (SYMBOL_REF, Pmode, name));
+ 
+       /* Output the file name.  */
+       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 1);
+       assemble_string (filename, strlen (filename) + 1);
+ 
+       /* Make space for the table of counts.  */
+       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 2);
+       ASM_OUTPUT_SKIP (asm_out_file, UNITS_PER_WORD * count_basic_blocks);
+ 
+       /* Output the table of addresses.  */
+       text_section ();
+       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "LPBX", 3);
+       for (i = 0; i < count_basic_blocks; i++)
+ 	{
+ 	  char name[12];
+ 	  ASM_GENERATE_INTERNAL_LABEL (name, "LPB", i);
+ 	  ASM_OUTPUT_INT (asm_out_file, gen_rtx (SYMBOL_REF, Pmode, name));
+ 	}
+ 
+       /* End with the address of the table of addresses,
+ 	 so we can find it easily, as the last word in the file's text.  */
+       ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 3);
+       ASM_OUTPUT_INT (asm_out_file, gen_rtx (SYMBOL_REF, Pmode, name));
+     }
+ }
+ 
  /* Enable APP processing of subsequent output.
     Used before the output from an `asm' statement.  */
***************
*** 282,285 ****
--- 351,361 ----
  #endif
  
+ #ifdef FUNCTION_BLOCK_PROFILER
+   if (profile_block_flag)
+     {
+       FUNCTION_BLOCK_PROFILER (file, profile_label_no);
+     }
+ #endif /* FUNCTION_BLOCK_PROFILER */
+ 
    if (profile_flag)
      {
***************
*** 289,292 ****
--- 365,369 ----
        int sval = current_function_returns_struct;
        int cxt = current_function_needs_context;
+ 
        data_section ();
        ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT));
***************
*** 293,296 ****
--- 370,374 ----
        ASM_OUTPUT_INTERNAL_LABEL (file, "LP", profile_label_no);
        assemble_integer_zero ();
+ 
        text_section ();
  
***************
*** 318,322 ****
  
        FUNCTION_PROFILER (file, profile_label_no);
-       profile_label_no++;
  
  #if 0
--- 396,399 ----
***************
*** 342,345 ****
--- 419,424 ----
  #endif
      }
+ 
+   profile_label_no++;
  }
  
***************
*** 406,409 ****
--- 485,489 ----
    register int i;
    rtx last_ignored_compare = 0;
+   int new_block = 1;
  
    init_recog ();
***************
*** 498,501 ****
--- 578,582 ----
  	  if (prescan > 0)
  	    break;
+ 	  new_block = 1;
  	  if (app_on)
  	    {
***************
*** 537,540 ****
--- 618,636 ----
  		|| GET_CODE (body) == CLOBBER)
  	      break;
+ 
+ 	    if (profile_block_flag && new_block)
+ 	      {
+ 		new_block = 0;
+ 		/* Enable the table of basic-block use counts
+ 		   to point at the code it applies to.  */
+ 		ASM_OUTPUT_INTERNAL_LABEL (file, "LPB", count_basic_blocks);
+ 		/* Before first insn of this basic block, increment the
+ 		   count of times it was entered.  */
+ #ifdef BLOCK_PROFILER
+ 		BLOCK_PROFILER (file, count_basic_blocks);
+ #endif
+ 		count_basic_blocks++;
+ 	      }
+ 
  	    if (GET_CODE (body) == ASM_INPUT)
  	      {
***************
*** 672,675 ****
--- 768,776 ----
  	  reinsert_compare:
  
+ 	    /* Following a conditional branch, we have a new basic block.  */
+ 	    if (GET_CODE (insn) == JUMP_INSN && GET_CODE (body) == SET
+ 		&& GET_CODE (SET_SRC (body)) != LABEL_REF)
+ 	      new_block = 1;
+ 
  	    /* If this is a conditional branch, maybe modify it
  	       if the cc's are in a nonstandard state
***************
*** 809,812 ****
--- 910,914 ----
  		    insn = PREV_INSN (insn);
  		    body = PATTERN (insn);
+ 		    new_block = 0;
  		    goto reinsert_compare;
  		  }
diff -rc2N gcc-1.33/flags.h gcc-1.34/flags.h
*** gcc-1.33/flags.h	Sun Dec  4 20:17:31 1988
--- gcc-1.34/flags.h	Wed Feb 22 11:49:29 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Name of the input .c file being compiled.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Name of the input .c file being compiled.  */
***************
*** 64,67 ****
--- 63,70 ----
  extern int profile_flag;
  
+ /* Nonzero if generating code to do profiling on the basis of basic blocks.  */
+ 
+ extern int profile_block_flag;
+ 
  /* Nonzero for -pedantic switch: warn about anything
     that standard C forbids.  */
***************
*** 70,73 ****
--- 73,86 ----
  \f


  /* Now the symbols that are set with `-f' switches.  */
+ 
+ /* Nonzero for -fcaller-saves: allocate values in regs that need to
+    be saved across function calls, if that produces overall better code.
+    Optional now, so people can test it.  */
+ 
+ extern int flag_caller_saves;
+ 
+ /* Nonzero for -fpcc-struct-return: return values the same way PCC does.  */
+ 
+ extern int flag_pcc_struct_return;
  
  /* Nonzero for -fforce-mem: load memory value into a register
diff -rc2N gcc-1.33/flow.c gcc-1.34/flow.c
*** gcc-1.33/flow.c	Sun Jan 15 01:19:31 1989
--- gcc-1.34/flow.c	Wed Feb 22 11:49:25 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 153,157 ****
     of the current function; it is used to control register allocation.  */
  
! char *reg_crosses_call;
  
  /* Total number of instructions at which (REG n) is live.
--- 152,156 ----
     of the current function; it is used to control register allocation.  */
  
! int *reg_n_calls_crossed;
  
  /* Total number of instructions at which (REG n) is live.
***************
*** 830,835 ****
    bzero (reg_live_length, max_regno * sizeof (int));
  
!   reg_crosses_call = (char *) oballoc (max_regno);
!   bzero (reg_crosses_call, max_regno);
  
    reg_basic_block = (short *) oballoc (max_regno * sizeof (short));
--- 829,834 ----
    bzero (reg_live_length, max_regno * sizeof (int));
  
!   reg_n_calls_crossed = (int *) oballoc (max_regno * sizeof (int));
!   bzero (reg_n_calls_crossed, max_regno * sizeof (int));
  
    reg_basic_block = (short *) oballoc (max_regno * sizeof (short));
***************
*** 1107,1111 ****
  		  for (i = 0; i < sometimes_max; i++, p++)
  		    if (old[p->offset] & (1 << p->bit))
! 		      reg_crosses_call[p->offset * REGSET_ELT_BITS + p->bit] = 1;
  		}
  	    }
--- 1106,1110 ----
  		  for (i = 0; i < sometimes_max; i++, p++)
  		    if (old[p->offset] & (1 << p->bit))
! 		      reg_n_calls_crossed[p->offset * REGSET_ELT_BITS + p->bit]+= 1;
  		}
  	    }
***************
*** 1583,1586 ****
--- 1582,1589 ----
  	      if (regno == STACK_POINTER_REGNUM)
  		return;
+ 	      /* No death notes for global register variables;
+ 		 their values are live after this function exits.  */
+ 	      if (global_regs[regno])
+ 		return;
  
  	      n = HARD_REGNO_NREGS (regno, GET_MODE (x));
***************
*** 1628,1631 ****
--- 1631,1635 ----
  		  reg_n_refs[regno] += loop_depth;
  		}
+ 
  	      /* Record and count the insns in which a reg dies.
  		 If it is used in this insn and was dead below the insn
***************
*** 1939,1944 ****
  	if (reg_n_deaths[i] != 1)
  	  fprintf (file, "; dies in %d places", reg_n_deaths[i]);
! 	if (reg_crosses_call[i])
! 	  fprintf (file, "; crosses calls");
  	if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
  	  fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
--- 1943,1950 ----
  	if (reg_n_deaths[i] != 1)
  	  fprintf (file, "; dies in %d places", reg_n_deaths[i]);
! 	if (reg_n_calls_crossed[i] == 1)
! 	  fprintf (file, "; crosses 1 call", reg_n_calls_crossed[i]);
! 	else if (reg_n_calls_crossed[i])
! 	  fprintf (file, "; crosses %d calls", reg_n_calls_crossed[i]);
  	if (PSEUDO_REGNO_BYTES (i) != UNITS_PER_WORD)
  	  fprintf (file, "; %d bytes", PSEUDO_REGNO_BYTES (i));
diff -rc2N gcc-1.33/fold-const.c gcc-1.34/fold-const.c
*** gcc-1.33/fold-const.c	Sun Jan  1 03:46:07 1989
--- gcc-1.34/fold-const.c	Thu Feb 23 13:08:59 1989
***************
*** 1,2 ****
--- 1,21 ----
+ /* Fold a constant sub-tree into a single node for C-compiler
+    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
+ 
+ This file is part of GNU CC.
+ 
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING.  If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
  /*@@ Fix lossage on folding division of big integers.  */
  
***************
*** 9,32 ****
    @@ for cross-compilers.  */
  
- /* Fold a constant sub-tree into a single node for C-compiler
-    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
- 
- This file is part of GNU CC.
- 
- GNU CC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY.  No author or distributor
- accepts responsibility to anyone for the consequences of using it
- or for whether it serves any particular purpose or works at all,
- unless he says so in writing.  Refer to the GNU CC General Public
- License for full details.
- 
- Everyone is granted permission to copy, modify and redistribute
- GNU CC, but only under the conditions described in the
- GNU CC General Public License.   A copy of this license is
- supposed to have been given to you along with GNU CC so you
- can know your rights and responsibilities.  It should be in a
- file named COPYING.  Among other things, the copyright notice
- and this notice must be preserved on all copies.  */
- 
  
  /* There are only two entry points in this file:
--- 28,31 ----
***************
*** 401,410 ****
    int lden = lden_orig, hden = hden_orig;
  
!   if ((hden == 0) && (lden == 0)) {
!     *hquo = *lquo = *hrem = *lrem = 0;
!     error
!       ("divide by 0 in constant folding - quotient and remainder set to 0.");
!     return;
!   }
  
    /* calculate quotient sign and convert operands to unsigned.  */
--- 400,405 ----
    int lden = lden_orig, hden = hden_orig;
  
!   if ((hden == 0) && (lden == 0))
!     abort ();
  
    /* calculate quotient sign and convert operands to unsigned.  */
***************
*** 873,877 ****
  	case RDIV_EXPR:
  	  if (d2 == 0)
! 	    return 0;
  
  	  value = d1 / d2;
--- 868,872 ----
  	case RDIV_EXPR:
  	  if (d2 == 0)
! 	    abort ();
  
  	  value = d1 / d2;
***************
*** 1025,1028 ****
--- 1020,1042 ----
    return 0;
  }
+ 
+ #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
+ 
+ /* Return 1 if ARG is a real constant with value zero.
+    This function is not defined in the case where it is impossible
+    to tell whether a real constant is zero (for cross-compilation).  */
+ 
+ static int
+ real_zerop (arg)
+      tree arg;
+ {
+ #ifdef REAL_IS_NOT_DOUBLE
+   tree t1 = build_real_from_int_cst (TREE_TYPE (arg), integer_zero_node);
+   return REAL_VALUES_EQUAL (TREE_REAL_CST (arg), TREE_REAL_CST (t1));
+ #else
+   return TREE_REAL_CST (arg) == 0;
+ #endif
+ }
+ #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
  \f


  /* Perform constant folding and related simplification of EXPR.
***************
*** 1147,1151 ****
  	    {
  	      if (! TREE_UNSIGNED (type)
! 		  || TREE_INT_CST_HIGH (arg0) < 0)
  		{
  		  if (TREE_INT_CST_LOW (arg0) == 0)
--- 1161,1165 ----
  	    {
  	      if (! TREE_UNSIGNED (type)
! 		  && TREE_INT_CST_HIGH (arg0) < 0)
  		{
  		  if (TREE_INT_CST_LOW (arg0) == 0)
***************
*** 1260,1263 ****
--- 1274,1281 ----
  	}
      binary:
+ #if defined (REAL_IS_NOT_DOUBLE) && ! defined (REAL_ARITHMETIC)
+       if (TREE_CODE (arg1) == REAL_CST)
+ 	return t;
+ #endif /* REAL_IS_NOT_DOUBLE, and no REAL_ARITHMETIC */
        {
  	register tree t1 = NULL_TREE;
***************
*** 1347,1350 ****
--- 1365,1376 ----
        if (integer_onep (arg1))
  	return convert (type, arg0);
+       if (integer_zerop (arg1))
+ 	return t;
+ #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
+       if (TREE_CODE (arg1) == REAL_CST
+ 	  && real_zerop (arg1))
+ 	return t;
+ #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
+ 
        goto binary;
  
***************
*** 1355,1358 ****
--- 1381,1386 ----
        if (!loses && integer_onep (arg1))
  	return combine (code, arg1, arg1);
+       if (integer_zerop (arg1))
+ 	return t;
        goto binary;
  
***************
*** 1378,1391 ****
  	      TREE_TYPE (t) = integer_type_node;
  	    }
  	  if (TREE_CODE (arg0) == REAL_CST)
  	    {
! 	      t = build_int_2 (TREE_REAL_CST (arg0) == 0, 0);
  	      TREE_TYPE (t) = integer_type_node;
  	    }
  	}
        return t;
  
-     case TRUTH_AND_EXPR:
      case TRUTH_ANDIF_EXPR:
        if (wins)
  	{
--- 1406,1436 ----
  	      TREE_TYPE (t) = integer_type_node;
  	    }
+ #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
  	  if (TREE_CODE (arg0) == REAL_CST)
  	    {
! 	      t = build_int_2 (real_zerop (arg0), 0);
  	      TREE_TYPE (t) = integer_type_node;
  	    }
+ #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
  	}
        return t;
  
      case TRUTH_ANDIF_EXPR:
+       /* If first arg is constant zero, we know the answer.  */
+       if (TREE_CODE (arg0) == INTEGER_CST && integer_zerop (arg0))
+ 	{
+ 	  t = build_int_2 (0, 0);
+ 	  TREE_TYPE (t) = type;
+ 	  return t;
+ 	}
+ #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
+       if (TREE_CODE (arg0) == REAL_CST && real_zerop (arg0))
+ 	{
+ 	  t = build_int_2 (0, 0);
+ 	  TREE_TYPE (t) = type;
+ 	  return t;
+ 	}
+ #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
+     case TRUTH_AND_EXPR:
        if (wins)
  	{
***************
*** 1392,1408 ****
  	  if (TREE_CODE (arg0) == INTEGER_CST
  	      && TREE_CODE (arg1) == INTEGER_CST)
! 	    t = build_int_2 (((TREE_INT_CST_LOW (arg0) || TREE_INT_CST_HIGH (arg0))
! 			      && (TREE_INT_CST_LOW (arg1) || TREE_INT_CST_HIGH (arg1))),
! 			     0);
! 	  if (TREE_CODE (arg0) == REAL_CST
! 	      && TREE_CODE (arg1) == REAL_CST)
! 	    t = build_int_2 ((TREE_REAL_CST (arg0) && TREE_REAL_CST (arg1)),
! 			     0);
! 	  TREE_TYPE (t) = type;
  	}
        return t;
  
-     case TRUTH_OR_EXPR:
      case TRUTH_ORIF_EXPR:
        if (wins)
  	{
--- 1437,1472 ----
  	  if (TREE_CODE (arg0) == INTEGER_CST
  	      && TREE_CODE (arg1) == INTEGER_CST)
! 	    {
! 	      t = build_int_2 (! integer_zerop (arg0) && ! integer_zerop (arg1),
! 			       0);
! 	      TREE_TYPE (t) = type;
! 	    }
! #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
! 	  if (TREE_CODE (arg0) == REAL_CST && TREE_CODE (arg1) == REAL_CST)
! 	    {
! 	      t = build_int_2 (! real_zerop (arg0) && ! real_zerop (arg1), 0);
! 	      TREE_TYPE (t) = type;
! 	    }
! #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
  	}
        return t;
  
      case TRUTH_ORIF_EXPR:
+       /* If first arg is nonzero constant, we know the answer.  */
+       if (TREE_CODE (arg0) == INTEGER_CST && ! integer_zerop (arg0))
+ 	{
+ 	  t = build_int_2 (1, 0);
+ 	  TREE_TYPE (t) = type;
+ 	  return t;
+ 	}
+ #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
+       if (TREE_CODE (arg0) == REAL_CST && ! real_zerop (arg0))
+ 	{
+ 	  t = build_int_2 (1, 0);
+ 	  TREE_TYPE (t) = type;
+ 	  return t;
+ 	}
+ #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
+     case TRUTH_OR_EXPR:
        if (wins)
  	{
***************
*** 1409,1419 ****
  	  if (TREE_CODE (arg0) == INTEGER_CST
  	      && TREE_CODE (arg1) == INTEGER_CST)
! 	    t = build_int_2 (((TREE_INT_CST_LOW (arg0) || TREE_INT_CST_HIGH (arg0))
! 			      || (TREE_INT_CST_LOW (arg1) || TREE_INT_CST_HIGH (arg1))),
! 			     0);
  	  if (TREE_CODE (arg0) == REAL_CST && TREE_CODE (arg1) == REAL_CST)
! 	    t = build_int_2 ((TREE_REAL_CST (arg0) || TREE_REAL_CST (arg1)),
! 			     0);
! 	  TREE_TYPE (t) = type;
  	}
        return t;
--- 1473,1488 ----
  	  if (TREE_CODE (arg0) == INTEGER_CST
  	      && TREE_CODE (arg1) == INTEGER_CST)
! 	    {
! 	      t = build_int_2 (! integer_zerop (arg0) || ! integer_zerop (arg1),
! 			       0);
! 	      TREE_TYPE (t) = type;
! 	    }
! #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
  	  if (TREE_CODE (arg0) == REAL_CST && TREE_CODE (arg1) == REAL_CST)
! 	    {
! 	      t = build_int_2 (! real_zerop (arg0) || ! real_zerop (arg1), 0);
! 	      TREE_TYPE (t) = type;
! 	    }
! #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
  	}
        return t;
diff -rc2N gcc-1.33/gcc.c gcc-1.34/gcc.c
*** gcc-1.33/gcc.c	Thu Jan 19 02:26:35 1989
--- gcc-1.34/gcc.c	Wed Feb 22 11:51:20 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,23 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
! 
! This paragraph is here to try to keep Sun CC from dying.
! The number of chars here seems crucial!!!!  */
  
  
***************
*** 219,223 ****
          %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n\
      %{!M*:%{!E:cc1 %{!pipe:%g.cpp} %1 \
! 		   %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*}\
  		   %{g} %{O} %{W*} %{w} %{pedantic} %{ansi} %{traditional}\
  		   %{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
--- 221,225 ----
          %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n\
      %{!M*:%{!E:cc1 %{!pipe:%g.cpp} %1 \
! 		   %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*} %{a}\
  		   %{g} %{O} %{W*} %{w} %{pedantic} %{ansi} %{traditional}\
  		   %{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
***************
*** 228,232 ****
  		      %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o}\n }}}"},
    {".cc",
!    "cpp -+ %{nostdinc} %{C} %{v} %{D*} %{U*} %{I*} %{M*} %{T} \
          -undef -D__GNUC__ %p %P\
          %c %{O:-D__OPTIMIZE__} %{traditional} %{pedantic}\
--- 230,234 ----
  		      %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o}\n }}}"},
    {".cc",
!    "cpp -+ %{nostdinc} %{C} %{v} %{D*} %{U*} %{I*} %{M*} %{T}\
          -undef -D__GNUC__ %p %P\
          %c %{O:-D__OPTIMIZE__} %{traditional} %{pedantic}\
***************
*** 234,238 ****
          %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n\
      %{!M*:%{!E:cc1plus %{!pipe:%g.cpp} %1\
! 		   %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*}\
  		   %{g} %{O} %{W*} %{w} %{pedantic} %{traditional}\
  		   %{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
--- 236,240 ----
          %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n\
      %{!M*:%{!E:cc1plus %{!pipe:%g.cpp} %1\
! 		   %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*} %{a}\
  		   %{g} %{O} %{W*} %{w} %{pedantic} %{traditional}\
  		   %{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
***************
*** 243,247 ****
  		      %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o}\n }}}"},
    {".i",
!    "cc1 %i %1 %{!Q:-quiet} %{Y*} %{d*} %{m*} %{f*}\
  	%{g} %{O} %{W*} %{w} %{pedantic} %{ansi} %{traditional}\
  	%{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
--- 245,249 ----
  		      %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o}\n }}}"},
    {".i",
!    "cc1 %i %1 %{!Q:-quiet} %{Y*} %{d*} %{m*} %{f*} %{a}\
  	%{g} %{O} %{W*} %{w} %{pedantic} %{ansi} %{traditional}\
  	%{v:-version} %{gg:-symout %g.sym} %{pg:-p} %{p}\
diff -rc2N gcc-1.33/gcc.texinfo gcc-1.34/gcc.texinfo
*** gcc-1.33/gcc.texinfo	Tue Jan 31 22:09:15 1989
--- gcc-1.34/gcc.texinfo	Thu Feb 23 15:27:40 1989
***************
*** 22,26 ****
  Permission is granted to copy and distribute modified versions of this
  manual under the conditions for verbatim copying, provided also that the
! section entitled ``GNU CC General Public License'' is included exactly as
  in the original, and provided that the entire resulting derived work is
  distributed under the terms of a permission notice identical to this one.
--- 22,26 ----
  Permission is granted to copy and distribute modified versions of this
  manual under the conditions for verbatim copying, provided also that the
! section entitled ``GNU General Public License'' is included exactly as
  in the original, and provided that the entire resulting derived work is
  distributed under the terms of a permission notice identical to this one.
***************
*** 28,32 ****
  Permission is granted to copy and distribute translations of this manual
  into another language, under the above conditions for modified versions,
! except that the section entitled ``GNU CC General Public License'' and
  this permission notice may be included in translations approved by the
  Free Software Foundation instead of in the original English.
--- 28,32 ----
  Permission is granted to copy and distribute translations of this manual
  into another language, under the above conditions for modified versions,
! except that the section entitled ``GNU General Public License'' and
  this permission notice may be included in translations approved by the
  Free Software Foundation instead of in the original English.
***************
*** 40,46 ****
  @center Richard M. Stallman
  @sp 3
! @center last updated 24 Jan 1989
  @sp 1
! @center for version 1.33
  @page
  @vskip 0pt plus 1filll
--- 40,46 ----
  @center Richard M. Stallman
  @sp 3
! @center last updated 23 Feb 1989
  @sp 1
! @center for version 1.34
  @page
  @vskip 0pt plus 1filll
***************
*** 53,57 ****
  Permission is granted to copy and distribute modified versions of this
  manual under the conditions for verbatim copying, provided also that the
! section entitled ``GNU CC General Public License'' is included exactly as
  in the original, and provided that the entire resulting derived work is
  distributed under the terms of a permission notice identical to this one.
--- 53,57 ----
  Permission is granted to copy and distribute modified versions of this
  manual under the conditions for verbatim copying, provided also that the
! section entitled ``GNU General Public License'' is included exactly as
  in the original, and provided that the entire resulting derived work is
  distributed under the terms of a permission notice identical to this one.
***************
*** 59,63 ****
  Permission is granted to copy and distribute translations of this manual
  into another language, under the above conditions for modified versions,
! <except that the section entitled ``GNU CC General Public License'' and
  this permission notice may be included in translations approved by the
  Free Software Foundation instead of in the original English.
--- 59,63 ----
  Permission is granted to copy and distribute translations of this manual
  into another language, under the above conditions for modified versions,
! <except that the section entitled ``GNU General Public License'' and
  this permission notice may be included in translations approved by the
  Free Software Foundation instead of in the original English.
***************
*** 74,78 ****
  @end ifinfo
  @menu
! * Copying::         GNU CC General Public License says
                       how you can copy and share GNU CC.
  * Contributors::    People who have contributed to GNU CC.
--- 74,78 ----
  @end ifinfo
  @menu
! * Copying::         GNU General Public License says
                       how you can copy and share GNU CC.
  * Contributors::    People who have contributed to GNU CC.
***************
*** 92,173 ****
  
  @node Copying, Contributors, Top, Top
! @unnumbered GNU CC GENERAL PUBLIC LICENSE
! @center (Clarified 11 Feb 1988)
  
!   The license agreements of most software companies keep you at the
! mercy of those companies.  By contrast, our general public license is
! intended to give everyone the right to share GNU CC.  To make sure that
! you get the rights we want you to have, we need to make restrictions
! that forbid anyone to deny you these rights or to ask you to surrender
! the rights.  Hence this license agreement.
! 
!   Specifically, we want to make sure that you have the right to give
! away copies of GNU CC, that you receive source code or else can get it
! if you want it, that you can change GNU CC or use pieces of it in new
! free programs, and that you know you can do these things.
  
!   To make sure that everyone has such rights, we have to forbid you to
! deprive anyone else of these rights.  For example, if you distribute
! copies of GNU CC, you must give the recipients all the rights that you
! have.  You must make sure that they, too, receive or can get the
  source code.  And you must tell them their rights.
  
!   Also, for our own protection, we must make certain that everyone
! finds out that there is no warranty for GNU CC.  If GNU CC is modified by
! someone else and passed on, we want its recipients to know that what
! they have is not what we distributed, so that any problems introduced
! by others will not reflect on our reputation.
! 
!   Therefore we (Richard Stallman and the Free Software Foundation,
! Inc.) make the following terms which say what you must do to be
! allowed to distribute or change GNU CC.
! 
! @unnumberedsec COPYING POLICIES
! 
! @enumerate
! @item
! You may copy and distribute verbatim copies of GNU CC source code as
! you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy a valid copyright notice
! ``Copyright @copyright{} 1988 Free Software Foundation, Inc.'' (or
! with whatever year is appropriate); keep intact the notices on all
! files that refer to this License Agreement and to the absence of any
! warranty; and give any other recipients of the GNU CC program a copy
! of this License Agreement along with the program.  You may charge a
! distribution fee for the physical act of transferring a copy.
! 
! @item
! You may modify your copy or copies of GNU CC or any portion of it,
! and copy and distribute such modifications under the terms of
! Paragraph 1 above, provided that you also do the following:
! 
! @itemize @bullet
  @item
! cause the modified files to carry prominent notices stating
! that you changed the files and the date of any change; and
  
  @item
  cause the whole of any work that you distribute or publish, that
! in whole or in part contains or is a derivative of GNU CC or any
! part thereof, to be licensed at no charge to all third parties on
! terms identical to those contained in this License Agreement
! (except that you may choose to grant more extensive warranty
! protection to some or all third parties, at your option).
! 
! @item
! You may charge a distribution fee for the physical act of
! transferring a copy, and you may at your option offer warranty
! protection in exchange for a fee.
  @end itemize
  
! Mere aggregation of another unrelated program with this program (or its
  derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
  
  @item
! You may copy and distribute GNU CC (or a portion or derivative of it,
! under Paragraph 2) in object code or executable form under the terms
! of Paragraphs 1 and 2 above provided that you also do one of the
! following:
  
  @itemize @bullet
--- 92,216 ----
  
  @node Copying, Contributors, Top, Top
! @unnumbered GNU GENERAL PUBLIC LICENSE
! @center Version 1, February 1989
  
! @display
! Copyright @copyright{} 1989 Free Software Foundation, Inc.
! 675 Mass Ave, Cambridge, MA 02139, USA
! 
! Everyone is permitted to copy and distribute verbatim copies
! of this license document, but changing it is not allowed.
! @end display
! 
! @unnumberedsec Preamble
! 
!   The license agreements of most software companies try to keep users
! at the mercy of those companies.  By contrast, our General Public
! License is intended to guarantee your freedom to share and change free
! software---to make sure the software is free for all its users.  The
! General Public License applies to the Free Software Foundation's
! software and to any other program whose authors commit to using it.
! You can use it for your programs, too.
! 
!   When we speak of free software, we are referring to freedom, not
! price.  Specifically, the General Public License is designed to make
! sure that you have the freedom to give away or sell copies of free
! software, that you receive source code or can get it if you want it,
! that you can change the software or use pieces of it in new free
! programs; and that you know you can do these things.
! 
!   To protect your rights, we need to make restrictions that forbid
! anyone to deny you these rights or to ask you to surrender the rights.
! These restrictions translate to certain responsibilities for you if you
! distribute copies of the software, or if you modify it.
  
!   For example, if you distribute copies of a such a program, whether
! gratis or for a fee, you must give the recipients all the rights that
! you have.  You must make sure that they, too, receive or can get the
  source code.  And you must tell them their rights.
  
!   We protect your rights with two steps: (1) copyright the software, and
! (2) offer you this license which gives you legal permission to copy,
! distribute and/or modify the software.
! 
!   Also, for each author's protection and ours, we want to make certain
! that everyone understands that there is no warranty for this free
! software.  If the software is modified by someone else and passed on, we
! want its recipients to know that what they have is not the original, so
! that any problems introduced by others will not reflect on the original
! authors' reputations.
! 
!   The precise terms and conditions for copying, distribution and
! modification follow.
! 
! @iftex
! @unnumberedsec TERMS AND CONDITIONS
! @end iftex
! @ifinfo
! @center TERMS AND CONDITIONS
! @end ifinfo
! 
! @enumerate
  @item
! This License Agreement applies to any program or other work which
! contains a notice placed by the copyright holder saying it may be
! distributed under the terms of this General Public License.  The
! ``Program'', below, refers to any such program or work, and a ``work based
! on the Program'' means either the Program or any work containing the
! Program or a portion of it, either verbatim or with modifications.  Each
! licensee is addressed as ``you''.
! 
! @item
! You may copy and distribute verbatim copies of the Program's source
! code as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy an appropriate copyright notice and
! disclaimer of warranty; keep intact all the notices that refer to this
! General Public License and to the absence of any warranty; and give any
! other recipients of the Program a copy of this General Public License
! along with the Program.  You may charge a fee for the physical act of
! transferring a copy.
! 
! @item
! You may modify your copy or copies of the Program or any portion of
! it, and copy and distribute such modifications under the terms of Paragraph
! 1 above, provided that you also do the following:
! 
! @itemize @bullet
! @item
! cause the modified files to carry prominent notices stating that
! you changed the files and the date of any change; and
  
  @item
  cause the whole of any work that you distribute or publish, that
! in whole or in part contains the Program or any part thereof, either
! with or without modifications, to be licensed at no charge to all
! third parties under the terms of this General Public License (except
! that you may choose to grant warranty protection to some or all
! third parties, at your option).
! 
! @item
! If the modified program normally reads commands interactively when
! run, you must cause it, when started running for such interactive use
! in the simplest and most usual way, to print or display an
! announcement including an appropriate copyright notice and a notice
! that there is no warranty (or else, saying that you provide a
! warranty) and that users may redistribute the program under these
! conditions, and telling the user how to view a copy of this General
! Public License.
! 
! @item
! You may charge a fee for the physical act of transferring a
! copy, and you may at your option offer warranty protection in
! exchange for a fee.
  @end itemize
  
! Mere aggregation of another independent work with the Program (or its
  derivative) on a volume of a storage or distribution medium does not bring
! the other work under the scope of these terms.
  
  @item
! You may copy and distribute the Program (or a portion or derivative of
! it, under Paragraph 2) in object code or executable form under the terms of
! Paragraphs 1 and 2 above provided that you also do one of the following:
  
  @itemize @bullet
***************
*** 179,184 ****
  @item
  accompany it with a written offer, valid for at least three
! years, to give any third party free (except for a nominal
! shipping charge) a complete machine-readable copy of the
  corresponding source code, to be distributed under the terms of
  Paragraphs 1 and 2 above; or,
--- 222,227 ----
  @item
  accompany it with a written offer, valid for at least three
! years, to give any third party free (except for a nominal charge
! for the cost of distribution) a complete machine-readable copy of the
  corresponding source code, to be distributed under the terms of
  Paragraphs 1 and 2 above; or,
***************
*** 191,245 ****
  @end itemize
  
! For an executable file, complete source code means all the source code
! for all modules it contains; but, as a special exception, it need not
! include source code for modules which are standard libraries that
! accompany the operating system on which the executable file runs.
  
! @item
! You may not copy, sublicense, distribute or transfer GNU CC except as
! expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer GNU CC is void
! and your rights to use the program under this License agreement shall
! be automatically terminated.  However, parties who have received
! computer software programs from you with this License Agreement will
! not have their licenses terminated so long as such parties remain in
! full compliance.
! 
! @item
! If you wish to incorporate parts of GNU CC into other free programs
! whose distribution conditions are different, write to the Free Software
! Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet worked
! out a simple rule that can be stated here, but we will often permit this.
! We will be guided by the two goals of preserving the free status of all
! derivatives of our free software and of promoting the sharing and reuse of
! software.
! @end enumerate
! 
! Your comments and suggestions about our licensing policies and our
! software are welcome!  Please contact the Free Software Foundation, Inc.,
! 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296.
! 
! @unnumberedsec NO WARRANTY
! 
!   BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
! WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT
! WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
! PERFORMANCE OF GNU CC IS WITH YOU.  SHOULD GNU CC PROVE DEFECTIVE, YOU
! ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
! 
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO
! YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
! SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
! INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
! BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A
! FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GNU CC, EVEN
! IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR
! ANY CLAIM BY ANY OTHER PARTY.
  
  @node Contributors, Options, Copying, Top
--- 234,391 ----
  @end itemize
  
! Source code for a work means the preferred form of the work for making
! modifications to it.  For an executable file, complete source code means
! all the source code for all modules it contains; but, as a special
! exception, it need not include source code for modules which are standard
! libraries that accompany the operating system on which the executable
! file runs, or for standard header files or definitions files that
! accompany that operating system.
! 
! @item
! You may not copy, modify, sublicense, distribute or transfer the
! Program except as expressly provided under this General Public License.
! Any attempt otherwise to copy, modify, sublicense, distribute or transfer
! the Program is void, and will automatically terminate your rights to use
! the Program under this License.  However, parties who have received
! copies, or rights to use copies, from you under this General Public
! License will not have their licenses terminated so long as such parties
! remain in full compliance.
! 
! @item
! By copying, distributing or modifying the Program (or any work based
! on the Program) you indicate your acceptance of this license to do so,
! and all its terms and conditions.
! 
! @item
! Each time you redistribute the Program (or any work based on the
! Program), the recipient automatically receives a license from the original
! licensor to copy, distribute or modify the Program subject to these
! terms and conditions.  You may not impose any further restrictions on the
! recipients' exercise of the rights granted herein.
! 
! @item
! The Free Software Foundation may publish revised and/or new versions
! of the General Public License from time to time.  Such new versions will
! be similar in spirit to the present version, but may differ in detail to
! address new problems or concerns.
! 
! Each version is given a distinguishing version number.  If the Program
! specifies a version number of the license which applies to it and ``any
! later version'', you have the option of following the terms and conditions
! either of that version or of any later version published by the Free
! Software Foundation.  If the Program does not specify a version number of
! the license, you may choose any version ever published by the Free Software
! Foundation.
! 
! @item
! If you wish to incorporate parts of the Program into other free
! programs whose distribution conditions are different, write to the author
! to ask for permission.  For software which is copyrighted by the Free
! Software Foundation, write to the Free Software Foundation; we sometimes
! make exceptions for this.  Our decision will be guided by the two goals
! of preserving the free status of all derivatives of our free software and
! of promoting the sharing and reuse of software generally.
! 
! @iftex
! @heading NO WARRANTY
! @end iftex
! @ifinfo
! @center NO WARRANTY
! @end ifinfo
! 
! @item
! BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
! FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
! OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
! PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
! OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
! MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
! TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
! PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
! REPAIR OR CORRECTION.
! 
! @item
! IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
! ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
! REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
! INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
! ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
! LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
! SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
! WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
! ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
! @end enumerate
! 
! @iftex
! @heading END OF TERMS AND CONDITIONS
! @end iftex
! @ifinfo
! @center END OF TERMS AND CONDITIONS
! @end ifinfo
! 
! @page
! @unnumberedsec Appendix: How to Apply These Terms to Your New Programs
! 
!   If you develop a new program, and you want it to be of the greatest
! possible use to humanity, the best way to achieve this is to make it
! free software which everyone can redistribute and change under these
! terms.
! 
!   To do so, attach the following notices to the program.  It is safest to
! attach them to the start of each source file to most effectively convey
! the exclusion of warranty; and each file should have at least the
! ``copyright'' line and a pointer to where the full notice is found.
! 
! @smallexample
! @var{one line to give the program's name and a brief idea of what it does.}
! Copyright (C) 19@var{yy}  @var{name of author}
! 
! This program is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 1, or (at your option)
! any later version.
! 
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
! @end smallexample
! 
! Also add information on how to contact you by electronic and paper mail.
! 
! If the program is interactive, make it output a short notice like this
! when it starts in an interactive mode:
! 
! @smallexample
! Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
! Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
! This is free software, and you are welcome to redistribute it
! under certain conditions; type `show c' for details.
! @end smallexample
! 
! The hypothetical commands `show w' and `show c' should show the
! appropriate parts of the General Public License.  Of course, the
! commands you use may be called something other than `show w' and `show
! c'; they could even be mouse-clicks or menu items---whatever suits your
! program.
! 
! You should also get your employer (if you work as a programmer) or your
! school, if any, to sign a ``copyright disclaimer'' for the program, if
! necessary.  Here a sample; alter the names:
! 
! @example
! Yoyodyne, Inc., hereby disclaims all copyright interest in the
! program `Gnomovision' (a program to direct compilers to make passes
! at assemblers) written by James Hacker.
! 
! @var{signature of Ty Coon}, 1 April 1989
! Ty Coon, President of Vice
! @end example
  
! That's all there is to it!
  
  @node Contributors, Options, Copying, Top
***************
*** 261,265 ****
  
  @item
! Leonard Tower wrote parts of the parser, RTL generator, RTL
  definitions, and of the Vax machine description.
  
--- 407,411 ----
  
  @item
! Leonard Tower wrote parts of the parser, RTL generator, and RTL
  definitions, and of the Vax machine description.
  
***************
*** 538,552 ****
  These warnings are possible only in optimizing compilation,
  because they require data flow information that is computed only
! when optimizing.  They occur only for variables that are
! candidates for register allocation.  Therefore, they do not occur
! for a variable that is declared @code{volatile}, or whose address
! is taken, or whose size is other than 1, 2, 4 or 8 bytes.  Also,
! they do not occur for structures, unions or arrays, even when
! they are in registers.
! 
! Note that there may be no warning about a variable that is used
! only to compute a value that itself is never used, because such
! computations may be deleted by the flow analysis pass before the
! warnings are printed.
  
  These warnings are made optional because GNU CC is not smart
--- 684,700 ----
  These warnings are possible only in optimizing compilation,
  because they require data flow information that is computed only
! when optimizing.  If you don't specify @samp{-O}, you simply won't
! get these warnings.
! 
! These warnings occur only for variables that are candidates for
! register allocation.  Therefore, they do not occur for a variable that
! is declared @code{volatile}, or whose address is taken, or whose size
! is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
! structures, unions or arrays, even when they are in registers.
! 
! Note that there may be no warning about a variable that is used only
! to compute a value that itself is never used, because such
! computations may be deleted by data flow analysis before the warnings
! are printed.
  
  These warnings are made optional because GNU CC is not smart
***************
*** 605,609 ****
  A function can return either with or without a value.  (Falling
  off the end of the function body is considered returning without
! a value.)  For example, this function would inspire such a
  warning:
  
--- 753,757 ----
  A function can return either with or without a value.  (Falling
  off the end of the function body is considered returning without
! a value.)  For example, this function would evoke such a
  warning:
  
***************
*** 645,648 ****
--- 793,801 ----
  All of the above @samp{-W} options combined.
  
+ @item -Wcast-qual
+ Warn whenever a pointer is cast so as to remove a type qualifier from
+ the target type.  For example, warn if a @code{const char *} is cast
+ to an ordinary @code{char *}.
+ 
  @item -Wwrite-strings
  Give string constants the type @code{const char[@var{length}]} so that
***************
*** 662,665 ****
--- 815,823 ----
  analysis program @code{gprof}.
  
+ @item -a
+ Generate extra code to write profile information for basic blocks,
+ suitable for the analysis program @code{tcov}.  Eventually GNU
+ @code{gprof} should be extended to process this data.
+ 
  @item -l@var{library}
  Search a standard list of directories for a library named
***************
*** 781,787 ****
  
  @item -mno-epilogue
! Nonzero to generate separate return instructions for @code{return}
! statements.  This has both advantages and disadvantages; I don't
! recall what they are.
  
  @item -meager
--- 939,945 ----
  
  @item -mno-epilogue
! Generate separate return instructions for @code{return} statements.
! This has both advantages and disadvantages; I don't recall what they
! are.
  
  @item -meager
***************
*** 824,827 ****
--- 982,993 ----
  
  @table @samp
+ @item -fpcc-struct-return
+ Use the same convention for returning @code{struct} and @code{union}
+ values that is used by the usual C compiler on your system.  This
+ convention is less efficient for small structures, and on many
+ machines it fails to be reentrant; but it has the advantage of
+ allowing intercallability between GCC-compiled code and PCC-compiled
+ code.
+ 
  @item -ffloat-store
  Do not store floating-point variables in registers.  This
***************
*** 890,893 ****
--- 1056,1068 ----
  output as assembler code in its own right.
  
+ @item -fcaller-saves
+ Enable values to be allocated in registers that will be clobbered by
+ function calls, by emitting extra instructions to save and restore the
+ registers around such calls.  Such allocation is done only when it
+ seems to result in better code than would otherwise be produced.
+ 
+ This option is enabled by default on certain machines, usually those
+ which have no call-preserved registers to use instead.
+ 
  @item -fkeep-inline-functions
  Even if all calls to a given function are integrated, and the
***************
*** 1142,1146 ****
  Intel 386 PCs running system V, using the GNU assembler and GNU
  linker.
! @item sequent-386
  Sequent with Intel 386 processors.
  @item sun2
--- 1317,1321 ----
  Intel 386 PCs running system V, using the GNU assembler and GNU
  linker.
! @item sequent-i386
  Sequent with Intel 386 processors.
  @item sun2
***************
*** 1176,1180 ****
  @item hp9k320
  HP 9000 series 300 using HPUX assembler.
! @item kp9k320g
  HP 9000 series 300 using GNU assembler, linker and debugger.
  This requires the HP-adapt package which is or will soon be
--- 1351,1355 ----
  @item hp9k320
  HP 9000 series 300 using HPUX assembler.
! @item hp9k320g
  HP 9000 series 300 using GNU assembler, linker and debugger.
  This requires the HP-adapt package which is or will soon be
***************
*** 1184,1187 ****
--- 1359,1364 ----
  @item news800
  Sony NEWS 68020 system.
+ @item next
+ NeXT system.
  @item 3b1
  AT&T 3b1, a.k.a. 7300 PC.
***************
*** 1290,1293 ****
--- 1467,1473 ----
  Note that Encore systems are supported only under BSD.
  
+ For Sparc (Sun 4) machines, use @file{tm-sparc.h} with operating system
+ version 4, and @file{tm-sun4os3.h} with system version 3.
+ 
  @item
  Make a symbolic link named @file{md} to the machine description
***************
*** 1393,1397 ****
  directory @file{/usr/local/lib}, which is where the compiler driver
  program looks for them.  It also copies the driver program @file{gcc}
! into the directory @file{/usr/local}, so that it appears in typical
  execution search paths.@refill
  
--- 1573,1577 ----
  directory @file{/usr/local/lib}, which is where the compiler driver
  program looks for them.  It also copies the driver program @file{gcc}
! into the directory @file{/usr/local/bin}, so that it appears in typical
  execution search paths.@refill
  
***************
*** 1419,1423 ****
  @file{ttychars.h} and many others, in a special directory where only
  GNU CC will normally look for them.  This script will work on various
! systems because it choose the files by searching all the system
  headers for the problem cases that we know about.
  @end enumerate
--- 1599,1603 ----
  @file{ttychars.h} and many others, in a special directory where only
  GNU CC will normally look for them.  This script will work on various
! systems because it chooses the files by searching all the system
  headers for the problem cases that we know about.
  @end enumerate
***************
*** 1727,1735 ****
  @item
  When compiling functions that return structures or unions, GNU CC
! output code uses a method different from that used on most versions of
! Unix.  As a result, code compiled with GNU CC cannot call a
! structure-returning function compiled with PCC, and vice versa.
  
! The method used by GCC is as follows: a structure or union which is 1,
  2, 4 or 8 bytes long is returned like a scalar.  A structure or union
  with any other size is stored into an address supplied by the caller
--- 1907,1915 ----
  @item
  When compiling functions that return structures or unions, GNU CC
! output code normally uses a method different from that used on most
! versions of Unix.  As a result, code compiled with GNU CC cannot call
! a structure-returning function compiled with PCC, and vice versa.
  
! The method used by GNU CC is as follows: a structure or union which is 1,
  2, 4 or 8 bytes long is returned like a scalar.  A structure or union
  with any other size is stored into an address supplied by the caller
***************
*** 1738,1769 ****
  PCC usually handles all sizes of structures and unions by returning
  the address of a block of static storage containing the value.  This
! method is not used in GCC because it is slower and nonreentrant.
  
! On systems where PCC works this way, you may be able to make GCC-compiled
! code call such functions that were compiled with PCC by declaring them
! to return a pointer to the structure or union instead of the structure
! or union itself.  For example, instead of this:
! 
! @example
! struct foo nextfoo ();
! @end example
! 
! @noindent
! write this:
! 
! @example
! struct foo *nextfoo ();
! #define nextfoo *nextfoo
! @end example
! 
! @noindent
! (Note that this assumes you are using the GNU preprocessor and not
! @samp{-traditional}, so that the ANSI antirecursion rules for macro
! expansions are effective.)
! 
! On some machines, PCC uses a reentrant convention.  Then GNU CC uses
! the same convention except for structures of 1, 2, 4 or 8 bytes.  For
! such machines, there is no problem when returning structures of other
! sizes; the problem is insoluble for structures of those sizes.
  @end itemize
  
--- 1918,1925 ----
  PCC usually handles all sizes of structures and unions by returning
  the address of a block of static storage containing the value.  This
! method is not used in GNU CC because it is slower and nonreentrant.
  
! You can tell GNU CC to use the PCC convention with the option
! @samp{-fpcc-struct-return}.
  @end itemize
  
***************
*** 2603,2607 ****
  Eventually there may be a way of asking the compiler to choose a register
  automatically, but first we need to figure out how it should choose and
! how to enable you to guide the choice.
  
  Defining a global register variable in a certain register reserves that
--- 2759,2763 ----
  Eventually there may be a way of asking the compiler to choose a register
  automatically, but first we need to figure out how it should choose and
! how to enable you to guide the choice.  No solution is evident.
  
  Defining a global register variable in a certain register reserves that
***************
*** 2655,2658 ****
--- 2811,2817 ----
  being used for other purposes in the preceding functions.
  
+ Global register variables may not have initial values, because an
+ executable file has no means to supply initial contents for a register.
+ 
  @node Bugs, Portability, Extensions, Top
  @chapter Reporting Bugs
***************
*** 3805,3809 ****
  
  @item (const_double:@var{m} @var{i0} @var{i1})
! Represents a 64-bit constant or mode @var{m}.  All floating point
  constants are represented in this way, and so are 64-bit @code{DImode}
  integer constants.
--- 3964,3968 ----
  
  @item (const_double:@var{m} @var{i0} @var{i1})
! Represents a 64-bit constant of mode @var{m}.  All floating point
  constants are represented in this way, and so are 64-bit @code{DImode}
  integer constants.
***************
*** 3992,3999 ****
  Like @samp{plus} but represents subtraction.
  
! @item (minus @var{x} @var{y})
  Represents the result of subtracting @var{y} from @var{x}
  for purposes of comparison.  The absence of a machine mode
! in the @samp{minus} expression indicates that the result is
  computed without overflow, as if with infinite precision.
  
--- 4151,4158 ----
  Like @samp{plus} but represents subtraction.
  
! @item (compare @var{x} @var{y})
  Represents the result of subtracting @var{y} from @var{x}
  for purposes of comparison.  The absence of a machine mode
! in the @samp{compare} expression indicates that the result is
  computed without overflow, as if with infinite precision.
  
***************
*** 4387,4391 ****
  default to clobber these registers, so there is no need to use
  @samp{clobber} expressions to indicate this fact.  Also, each function
! call is assumed to have the potential to alter any memory location.
  
  When a @samp{clobber} expression for a register appears inside a
--- 4546,4551 ----
  default to clobber these registers, so there is no need to use
  @samp{clobber} expressions to indicate this fact.  Also, each function
! call is assumed to have the potential to alter any memory location,
! unless the function is declared @code{const}.
  
  When a @samp{clobber} expression for a register appears inside a
***************
*** 4552,4556 ****
  
  @example
! asm ("foo %1,%2,%0" : "a" (outputvar) : "g" (x + y), "di" (*z));
  @end example
  
--- 4712,4716 ----
  
  @example
! asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  @end example
  
***************
*** 4613,4617 ****
  
  The @code{NEXT_INSN} and @code{PREV_INSN} pointers must always
! correspond: if @var{i} is not the first insn,
  
  @example
--- 4773,4777 ----
  
  The @code{NEXT_INSN} and @code{PREV_INSN} pointers must always
! correspond: if @var{insn} is not the first insn,
  
  @example
***************
*** 4690,4696 ****
  of a @code{while} or @code{for} loop.  They enable the loop optimizer
  to find loops quickly.
! @end table
  @end table
  
  Here is a table of the extra fields of @samp{insn}, @samp{jump_insn}
  and @samp{call_insn} insns:
--- 4850,4866 ----
  of a @code{while} or @code{for} loop.  They enable the loop optimizer
  to find loops quickly.
! @item NOTE_INSN_FUNCTION_END
! Appears near the end of the function body, just before the label that
! @code{return} statements jump to (on machine where a single instruction
! does not suffice for returning).  This note may be deleted by jump
! optimization.
! @item NOTE_INSN_SETJMP
! Appears following each call to @code{setjmp} or a related function.
! @end table
  @end table
  
+ The machine mode of an insn is normally zero (@code{VOIDmode}), but the
+ reload pass sets it to @code{QImode} if the insn needs reloading.
+ 
  Here is a table of the extra fields of @samp{insn}, @samp{jump_insn}
  and @samp{call_insn} insns:
***************
*** 4700,4707 ****
  An expression for the side effect performed by this insn.
  
! @item REG_NOTES (@var{i})
! A list (chain of @samp{expr_list} expressions) giving information
! about the usage of registers in this insn.  This list is set up by the
! flow analysis pass; it is a null pointer until then.
  
  @item LOG_LINKS (@var{i})
--- 4870,4880 ----
  An expression for the side effect performed by this insn.
  
! @item INSN_CODE (@var{i})
! An integer that says which pattern in the machine description matches
! this insn, or -1 if the matching has not yet been attempted.
! 
! Such matching is never attempted and this field is not used on an insn
! whose pattern consists of a single @samp{use}, @samp{clobber},
! @samp{asm}, @samp{addr_vec} or @samp{addr_diff_vec} expression.
  
  @item LOG_LINKS (@var{i})
***************
*** 4712,4722 ****
  set up by the flow analysis pass; it is a null pointer until then.
  
! @item INSN_CODE (@var{i})
! An integer that says which pattern in the machine description matches
! this insn, or -1 if the matching has not yet been attempted.
! 
! Such matching is never attempted and this field is not used on an insn
! whose pattern consists of a single @samp{use}, @samp{clobber},
! @samp{asm}, @samp{addr_vec} or @samp{addr_diff_vec} expression.
  @end table
  
--- 4885,4892 ----
  set up by the flow analysis pass; it is a null pointer until then.
  
! @item REG_NOTES (@var{i})
! A list (chain of @samp{expr_list} expressions) giving information
! about the usage of registers in this insn.  This list is set up by the
! flow analysis pass; it is a null pointer until then.
  @end table
  
***************
*** 4818,4822 ****
  
  @example
! (call @var{nbytes} (mem:@var{fm} @var{addr}))
  @end example
  
--- 4988,4992 ----
  
  @example
! (call (mem:@var{fm} @var{addr}) @var{nbytes})
  @end example
  
***************
*** 5243,5251 ****
  @section Output Templates and Operand Substitution
  
! The @dfn{output template} is a string which specifies how to output
! the assembler code for an instruction pattern.  Most of the template
! is a fixed string which is output literally.  The character @samp{%}
! is used to specify where to substitute an operand; it can also be
! used to identify places different variants of the assembler require
  different syntax.
  
--- 5413,5421 ----
  @section Output Templates and Operand Substitution
  
! The @dfn{output template} is a string which specifies how to output the
! assembler code for an instruction pattern.  Most of the template is a
! fixed string which is output literally.  The character @samp{%} is used
! to specify where to substitute an operand; it can also be used to
! identify places where different variants of the assembler require
  different syntax.
  
***************
*** 5282,5286 ****
  for the instructions, with @samp{\;} between them.
  
! When the RTL contains two operand which are required by constraint to match
  each other, the output template must refer only to the lower-numbered operand.
  Matching operands are not always identical, and the rest of the compiler
--- 5452,5456 ----
  for the instructions, with @samp{\;} between them.
  
! When the RTL contains two operands which are required by constraint to match
  each other, the output template must refer only to the lower-numbered operand.
  Matching operands are not always identical, and the rest of the compiler
***************
*** 5798,5802 ****
  
  When the machine description has just empty constraints, certain parts
! of compilation are skipped, making the compiler faster.
  
  @node Standard Names, Pattern Ordering, Constraints, Machine Desc
--- 5968,5974 ----
  
  When the machine description has just empty constraints, certain parts
! of compilation are skipped, making the compiler faster.  However,
! few machines actually do not need constraints; all machine descriptions
! now in existence use constraints.
  
  @node Standard Names, Pattern Ordering, Constraints, Machine Desc
***************
*** 5940,5945 ****
  
  @example
! (set (cc0) (minus (match_operand:@var{m} 0 @dots{})
!                   (match_operand:@var{m} 1 @dots{})))
  @end example
  
--- 6112,6117 ----
  
  @example
! (set (cc0) (compare (match_operand:@var{m} 0 @dots{})
!                     (match_operand:@var{m} 1 @dots{})))
  @end example
  
***************
*** 6101,6105 ****
  
  @item
! The upper bound for indices in the table, an integer constant.
  
  @item
--- 6273,6278 ----
  
  @item
! The total range of indices in the table---the largest index
! minus the smallest one (both inclusive).
  
  @item
***************
*** 6243,6247 ****
  
  @example
! (set (cc0) (minus @var{operand} (const_int 0)))
  @end example
  
--- 6416,6420 ----
  
  @example
! (set (cc0) (compare @var{operand} (const_int 0)))
  @end example
  
***************
*** 6903,6906 ****
--- 7076,7086 ----
  exit, if the register is used within the function.
  
+ @item DEFAULT_CALLER_SAVES
+ Define this macro if the target machine if function calls do not preserve
+ any registers; in other words, if @code{CALL_USED_REGISTERS} has 1
+ for all registers.  This macro enables @samp{-fcaller-saves} by default.
+ Eventually that option will be enabled by default on all machines and both
+ the option and this macro will be eliminated.
+ 
  @item CONDITIONAL_REGISTER_USAGE
  Zero or more C statements that may conditionally modify two variables
***************
*** 7408,7411 ****
--- 7588,7600 ----
  @code{STACK_POINTER_OFFSET} to the stack pointer register.)
  
+ @item STACK_ARGS_ADJUST (@var{size})
+ Define this macro if the machine requires padding on the stack for
+ certain function calls.  This is padding on a per-function-call basis,
+ not padding for individual arguments.
+ 
+ The definition should be a C expression for the total size to be
+ pushed on the stack in a call whose arguments (including their
+ individual padding) occupy @var{size} bytes.
+ 
  @item RETURN_POPS_ARGS (@var{funtype})
  A C expression that should be 1 if a function pops its own arguments
***************
*** 7630,7633 ****
--- 7819,7861 ----
  system's installed C compiler and look at the assembler code that
  results.
+ 
+ @item FUNCTION_BLOCK_PROFILER (@var{file}, @var{labelno})
+ A C statement or compound statement to output to @var{file} some
+ assembler code to initialize basic-block profiling for the current
+ object module.  This code should call the subroutine
+ @code{__bb_init_func} once per object module, passing it as its sole
+ argument the address of a block allocated in the object module.
+ 
+ The name of the block is a local symbol made with this statement:
+ 
+ @example
+ ASM_GENERATE_INTERNAL_LABEL (@var{buffer}, "LPBX", 0);
+ @end example
+ 
+ Of course, since you are writing the definition of
+ @code{ASM_GENERATE_INTERNAL_LABEL} as well as that of this macro, you
+ can take a short cut in the definition of this macro and use the name
+ that you know will result.
+ 
+ The first word of this block is a flag which will be nonzero if the
+ object module has already been initialized.  So test this word first,
+ and do not call @code{__bb_init_func} if the flag is nonzero.
+ 
+ @item BLOCK_PROFILER (@var{file}, @var{blockno})
+ A C statement or compound statement to increment the count associated
+ with the basic block number @var{blockno}.  Basic blocks are numbered
+ separately from zero within each compilation.  The count associated
+ with block number @var{blockno} is at index @var{blockno} in a vector
+ of words; the name of this array is a local symbol made with this
+ statement:
+ 
+ @example
+ ASM_GENERATE_INTERNAL_LABEL (@var{buffer}, "LPBX", 2);
+ @end example
+ 
+ Of course, since you are writing the definition of
+ @code{ASM_GENERATE_INTERNAL_LABEL} as well as that of this macro, you
+ can take a short cut in the definition of this macro and use the name
+ that you know will result.
  
  @item EXIT_IGNORES_STACK
diff -rc2N gcc-1.33/gencodes.c gcc-1.34/gencodes.c
*** gcc-1.33/gencodes.c	Sat Feb 20 18:43:29 1988
--- gcc-1.34/gencodes.c	Wed Feb 22 11:53:57 1989
***************
*** 7,24 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 7,23 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genconfig.c gcc-1.34/genconfig.c
*** gcc-1.33/genconfig.c	Mon Dec  5 21:47:21 1988
--- gcc-1.34/genconfig.c	Wed Feb 22 11:53:55 1989
***************
*** 6,23 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 6,22 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genemit.c gcc-1.34/genemit.c
*** gcc-1.33/genemit.c	Mon Jan 23 15:03:42 1989
--- gcc-1.34/genemit.c	Wed Feb 22 11:53:52 1989
***************
*** 1,21 ****
  /* Generate code from machine description to emit insns as rtl.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Generate code from machine description to emit insns as rtl.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genextract.c gcc-1.34/genextract.c
*** gcc-1.33/genextract.c	Mon Dec  5 21:45:02 1988
--- gcc-1.34/genextract.c	Wed Feb 22 11:53:51 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 68,72 ****
  
    /* Output the function name and argument declaration.  */
!   /* It would be cleaner to make `int' the return type
       but 4.2 vax compiler doesn't accept that in the array
       that these functions are supposed to go in.  */
--- 67,71 ----
  
    /* Output the function name and argument declaration.  */
!   /* It would be cleaner to make `void' the return type
       but 4.2 vax compiler doesn't accept that in the array
       that these functions are supposed to go in.  */
diff -rc2N gcc-1.33/genflags.c gcc-1.34/genflags.c
*** gcc-1.33/genflags.c	Mon Jun 20 07:55:34 1988
--- gcc-1.34/genflags.c	Wed Feb 22 11:53:49 1989
***************
*** 7,24 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 7,23 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genoutput.c gcc-1.34/genoutput.c
*** gcc-1.33/genoutput.c	Wed Jan 11 20:49:10 1989
--- gcc-1.34/genoutput.c	Wed Feb 22 11:53:47 1989
***************
*** 1,21 ****
  /* Generate code from to output assembler insns as recognized from rtl.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Generate code from to output assembler insns as recognized from rtl.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genpeep.c gcc-1.34/genpeep.c
*** gcc-1.33/genpeep.c	Mon Jan 23 15:12:21 1989
--- gcc-1.34/genpeep.c	Wed Feb 22 11:53:45 1989
***************
*** 1,21 ****
  /* Generate code from machine description to perform peephole optimizations.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Generate code from machine description to perform peephole optimizations.
!    Copyright (C) 1987, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/genrecog.c gcc-1.34/genrecog.c
*** gcc-1.33/genrecog.c	Sun Dec 11 18:29:37 1988
--- gcc-1.34/genrecog.c	Wed Feb 22 11:53:39 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/global-alloc.c gcc-1.34/global-alloc.c
*** gcc-1.33/global-alloc.c	Thu Dec 15 23:35:37 1988
--- gcc-1.34/global-alloc.c	Wed Feb 22 11:53:41 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 293,297 ****
  	    if (N_REG_CLASSES > 1)
  	      {
! 		find_reg (allocno_order[i], 0, 0,
  			  hard_reg_preferences[allocno_order[i]]);
  		if (reg_renumber[allocno_reg[allocno_order[i]]] >= 0)
--- 292,296 ----
  	    if (N_REG_CLASSES > 1)
  	      {
! 		find_reg (allocno_order[i], 0, 0, 0,
  			  hard_reg_preferences[allocno_order[i]]);
  		if (reg_renumber[allocno_reg[allocno_order[i]]] >= 0)
***************
*** 299,303 ****
  	      }
  	    if (!reg_preferred_or_nothing (allocno_reg[allocno_order[i]]))
! 	      find_reg (allocno_order[i], 0, 1,
  			hard_reg_preferences[allocno_order[i]]);
  	  }
--- 298,302 ----
  	      }
  	    if (!reg_preferred_or_nothing (allocno_reg[allocno_order[i]]))
! 	      find_reg (allocno_order[i], 0, 1, 0,
  			hard_reg_preferences[allocno_order[i]]);
  	  }
***************
*** 465,468 ****
--- 464,470 ----
     Otherwise ignore that preferred class.
  
+    If ACCEPT_CALL_CLOBBERED is nonzero, accept a call-clobbered hard reg that
+    will have to be saved and restored at calls.
+ 
     If we find one, record it in reg_renumber.
     If not, do nothing.  */
***************
*** 469,476 ****
  
  static void
! find_reg (allocno, losers, all_regs_p, prefregs)
       int allocno;
       register short *losers;
       int all_regs_p;
       HARD_REG_SET prefregs;
  {
--- 471,479 ----
  
  static void
! find_reg (allocno, losers, all_regs_p, accept_call_clobbered, prefregs)
       int allocno;
       register short *losers;
       int all_regs_p;
+      int accept_call_clobbered;
       HARD_REG_SET prefregs;
  {
***************
*** 485,491 ****
    enum machine_mode mode = PSEUDO_REGNO_MODE (allocno_reg[allocno]);
  
!   COPY_HARD_REG_SET (used,
! 		     (reg_crosses_call[allocno_reg[allocno]]
! 		      ? call_used_reg_set : fixed_reg_set));
  
    /* Some registers should not be allocated in global-alloc.  */
--- 488,497 ----
    enum machine_mode mode = PSEUDO_REGNO_MODE (allocno_reg[allocno]);
  
!   if (accept_call_clobbered)
!     COPY_HARD_REG_SET (used, call_fixed_reg_set);
!   else if (reg_n_calls_crossed[allocno_reg[allocno]] == 0)
!     COPY_HARD_REG_SET (used, fixed_reg_set);
!   else
!     COPY_HARD_REG_SET (used, call_used_reg_set);
  
    /* Some registers should not be allocated in global-alloc.  */
***************
*** 583,586 ****
--- 589,607 ----
  	  }
      }
+   else if (flag_caller_saves)
+     {
+       /* Did not find a register.  If it would be profitable to
+ 	 allocate a call-clobbered register and save and restore it
+ 	 around calls, do that.  */
+       if (! accept_call_clobbered
+ 	  && reg_n_calls_crossed[allocno_reg[allocno]] != 0
+ 	  && CALLER_SAVE_PROFITABLE (reg_n_refs[allocno_reg[allocno]],
+ 				     reg_n_calls_crossed[allocno_reg[allocno]]))
+ 	{
+ 	  find_reg (allocno, losers, all_regs_p, 1, prefregs);
+ 	  if (reg_renumber[allocno_reg[allocno]] >= 0)
+ 	    caller_save_needed = 1;
+ 	}
+     }
  }
  \f


***************
*** 605,612 ****
  	 for this pseudo-reg.  If that fails, try any reg.  */
        if (N_REG_CLASSES > 1)
! 	find_reg (allocno, forbidden_regs, 0, hard_reg_preferences[allocno]);
        if (reg_renumber[regno] < 0
  	  && !reg_preferred_or_nothing (regno))
! 	find_reg (allocno, forbidden_regs, 1, hard_reg_preferences[allocno]);
      }
  }
--- 626,635 ----
  	 for this pseudo-reg.  If that fails, try any reg.  */
        if (N_REG_CLASSES > 1)
! 	find_reg (allocno, forbidden_regs, 0, 0,
! 		  hard_reg_preferences[allocno]);
        if (reg_renumber[regno] < 0
  	  && !reg_preferred_or_nothing (regno))
! 	find_reg (allocno, forbidden_regs, 1, 0,
! 		  hard_reg_preferences[allocno]);
      }
  }
diff -rc2N gcc-1.33/gnulib.c gcc-1.34/gnulib.c
*** gcc-1.33/gnulib.c	Sat Dec 10 16:56:06 1988
--- gcc-1.34/gnulib.c	Sun Feb 12 07:07:37 1989
***************
*** 397,400 ****
--- 397,426 ----
  #endif
  
+ #ifdef L_bb_init_func
+ #if defined (sun) && defined (m68k)
+ struct bb
+ {
+   int initialized;
+   char *filename;
+   int *counts;
+   int ncounts;
+   int zero_word;
+   int *addresses;
+ };
+ 
+ __bb_init_function (blocks)
+ 	struct bb *blocks;
+ {
+   extern int __tcov_init;
+ 
+   if (! ___tcov_init)
+     ___tcov_init_func ();
+ 
+   ___bb_link (blocks->filename, blocks->counts, blocks->nblocks);
+ }
+ 
+ #endif
+ #endif
+ 
  /* frills for C++ */
  
diff -rc2N gcc-1.33/hard-reg-set.h gcc-1.34/hard-reg-set.h
*** gcc-1.33/hard-reg-set.h	Thu Jan 12 02:15:38 1989
--- gcc-1.34/hard-reg-set.h	Wed Feb 22 12:22:49 1989
***************
*** 4,21 ****
  This file is part of GNU CC
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 105,161 ****
  
  #define CLEAR_HARD_REG_SET(TO)  \
! { register long *scan_tp_ = (TO);				\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ = 0; }
  
  #define SET_HARD_REG_SET(TO)  \
! { register long *scan_tp_ = (TO);				\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ = -1; }
  
  #define COPY_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ = *scan_fp_++; }
  
  #define COMPL_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ = ~ *scan_fp_++; }
  
  #define AND_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ &= *scan_fp_++; }
  
  #define AND_COMPL_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ &= ~ *scan_fp_++; }
  
  #define IOR_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ |= *scan_fp_++; }
  
  #define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
! { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     *scan_tp_++ |= ~ *scan_fp_++; }
  
  #define GO_IF_HARD_REG_SUBSET(X,Y,TO)  \
! { register long *scan_xp_ = (X), *scan_yp_ = (Y);		\
!   register int i;						\
!   for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!     if (0 != (*scan_xp_++ & ~*scan_yp_++)) break;		\
!   if (i == HARD_REG_SET_LONGS) goto TO; }
  
  #endif
--- 104,160 ----
  
  #define CLEAR_HARD_REG_SET(TO)  \
! do { register long *scan_tp_ = (TO);				\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ = 0; } while (0)
  
  #define SET_HARD_REG_SET(TO)  \
! do { register long *scan_tp_ = (TO);				\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ = -1; } while (0)
  
  #define COPY_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ = *scan_fp_++; } while (0)
  
  #define COMPL_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ = ~ *scan_fp_++; } while (0)
  
  #define AND_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ &= *scan_fp_++; } while (0)
  
  #define AND_COMPL_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ &= ~ *scan_fp_++; } while (0)
  
  #define IOR_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ |= *scan_fp_++; } while (0)
  
  #define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
! do { register long *scan_tp_ = (TO), *scan_fp_ = (FROM);	\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        *scan_tp_++ |= ~ *scan_fp_++; } while (0)
  
  #define GO_IF_HARD_REG_SUBSET(X,Y,TO)  \
! do { register long *scan_xp_ = (X), *scan_yp_ = (Y);		\
!      register int i;						\
!      for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
!        if (0 != (*scan_xp_++ & ~*scan_yp_++)) break;		\
!      if (i == HARD_REG_SET_LONGS) goto TO; } while (0)
  
  #endif
***************
*** 184,187 ****
--- 183,198 ----
  
  extern HARD_REG_SET call_used_reg_set;
+   
+ /* Indexed by hard register number, contains 1 for registers that are
+    fixed use -- i.e. in fixed_regs -- or a function value return register
+    or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM.  These are the
+    registers that cannot hold quantities across calls even if we are
+    willing to save and restore them.  */
+ 
+ extern char call_fixed_regs[FIRST_PSEUDO_REGISTER];
+ 
+ /* The same info as a HARD_REG_SET.  */
+ 
+ extern HARD_REG_SET call_fixed_reg_set;
  
  /* Indexed by hard register number, contains 1 for registers
diff -rc2N gcc-1.33/i386.md gcc-1.34/i386.md
*** gcc-1.33/i386.md	Tue Jan 17 22:17:30 1989
--- gcc-1.34/i386.md	Wed Feb 22 12:31:19 1989
***************
*** 5,22 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 5,21 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 126,131 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "general_operand" "mr,ri")
! 	       (match_operand:SI 1 "general_operand" "ri,mr")))]
    ""
    "*
--- 125,130 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "general_operand" "mr,ri")
! 		 (match_operand:SI 1 "general_operand" "ri,mr")))]
    ""
    "*
***************
*** 142,147 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "general_operand" "mr,ri")
! 	       (match_operand:HI 1 "general_operand" "ri,mr")))]
    ""
    "*
--- 141,146 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "general_operand" "mr,ri")
! 		 (match_operand:HI 1 "general_operand" "ri,mr")))]
    ""
    "*
***************
*** 158,163 ****
  (define_insn "cmpqi"
    [(set (cc0)
! 	(minus (match_operand:QI 0 "general_operand" "qn,mq")
! 	       (match_operand:QI 1 "general_operand" "qm,nq")))]
    ""
    "*
--- 157,162 ----
  (define_insn "cmpqi"
    [(set (cc0)
! 	(compare (match_operand:QI 0 "general_operand" "qn,mq")
! 		 (match_operand:QI 1 "general_operand" "qm,nq")))]
    ""
    "*
***************
*** 174,179 ****
  (define_insn "cmpdf"
    [(set (cc0)
! 	(minus (match_operand:DF 0 "general_operand" "m,f*r,m,f,r,!*r")
! 	       (match_operand:DF 1 "general_operand" "m,m,f*r,r,f,*r")))
        (clobber (reg:SI 0))]
    "TARGET_80387"
--- 173,178 ----
  (define_insn "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "m,f*r,m,f,r,!*r")
! 		 (match_operand:DF 1 "general_operand" "m,m,f*r,r,f,*r")))
        (clobber (reg:SI 0))]
    "TARGET_80387"
***************
*** 198,203 ****
  (define_insn "cmpsf"
    [(set (cc0)
! 	(minus (match_operand:SF 0 "general_operand" "m,f*r,m,f,r,!*r")
! 	       (match_operand:SF 1 "general_operand" "m,m,f*r,r,f,*r")))
     (clobber (reg:SI 0))]
    "TARGET_80387"
--- 197,202 ----
  (define_insn "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "m,f*r,m,f,r,!*r")
! 		 (match_operand:SF 1 "general_operand" "m,m,f*r,r,f,*r")))
     (clobber (reg:SI 0))]
    "TARGET_80387"
***************
*** 1662,1668 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (minus:HI (match_operand:HI 0 "general_operand" "c")
! 			      (const_int 1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" "g"))
--- 1661,1667 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (minus:HI (match_operand:HI 0 "general_operand" "c")
! 				(const_int 1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" "g"))
***************
*** 1677,1683 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (const_int -1)
! 		    (minus:SI (match_operand:SI 0 "general_operand" "c")
! 			      (const_int 1)))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" "g"))
--- 1676,1682 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (const_int -1)
! 		      (minus:SI (match_operand:SI 0 "general_operand" "c")
! 				(const_int 1)))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" "g"))
diff -rc2N gcc-1.33/integrate.c gcc-1.34/integrate.c
*** gcc-1.33/integrate.c	Mon Jan 16 16:05:38 1989
--- gcc-1.34/integrate.c	Wed Feb 22 12:22:46 1989
***************
*** 5,25 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
- #include <ctype.h>
  #include <stdio.h>
  
--- 5,23 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
  #include <stdio.h>
  
***************
*** 614,617 ****
--- 612,617 ----
  	  int size = int_size_in_bytes (TREE_TYPE (formal));
  	  copy = assign_stack_local (tmode, size);
+ 	  if (!memory_address_p (DECL_MODE (formal), XEXP (copy, 0)))
+ 	    copy = change_address (copy, VOIDmode, copy_rtx (XEXP (copy, 0)));
  	  store_expr (arg, copy, 0);
  	}
***************
*** 721,725 ****
        /* Make certain that we can accept struct_value_{incoming_rtx,rtx},
  	 and map it.  If it is a hard register, it is mapped automagically.  */
!       if (GET_CODE (struct_value_incoming_rtx) == REG)
  	;
        else if (GET_CODE (struct_value_incoming_rtx) == MEM
--- 721,726 ----
        /* Make certain that we can accept struct_value_{incoming_rtx,rtx},
  	 and map it.  If it is a hard register, it is mapped automagically.  */
!       if (this_struct_value_rtx == 0
! 	  || GET_CODE (struct_value_incoming_rtx) == REG)
  	;
        else if (GET_CODE (struct_value_incoming_rtx) == MEM
diff -rc2N gcc-1.33/jump.c gcc-1.34/jump.c
*** gcc-1.33/jump.c	Sat Jan 28 19:51:34 1989
--- gcc-1.34/jump.c	Wed Feb 22 12:22:44 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 275,280 ****
  	    register rtx body = PATTERN (insn);
  
! #if 0 /* Keep these, since they are used for conditional branch
  	 scheduling peepholes on the sparc.  */
  	    /* Delete insns that existed just to advise flow-analysis.  */
  
--- 274,280 ----
  	    register rtx body = PATTERN (insn);
  
! #if 0 /* Keep these insns, since they are used for conditional branch
  	 scheduling peepholes on the sparc.  */
+ #endif
  	    /* Delete insns that existed just to advise flow-analysis.  */
  
***************
*** 283,287 ****
  	      delete_insn (insn);
  	    else
- #endif
  
  	    /* Detect and delete no-op move instructions
--- 283,286 ----
***************
*** 318,322 ****
  		    /* Deleting insn could lose a death-note for SREG or DREG
  		       so don't do it if final needs accurate death-notes.  */
! 		    if (! PRESERVE_DEATH_INFO_REGNO_P (dreg)
  			&& ! PRESERVE_DEATH_INFO_REGNO_P (dreg))
  #endif
--- 317,321 ----
  		    /* Deleting insn could lose a death-note for SREG or DREG
  		       so don't do it if final needs accurate death-notes.  */
! 		    if (! PRESERVE_DEATH_INFO_REGNO_P (sreg)
  			&& ! PRESERVE_DEATH_INFO_REGNO_P (dreg))
  #endif
***************
*** 795,799 ****
  	 && SET_DEST (PATTERN (prev)) == cc0_rtx
  	 && (GET_MODE_CLASS (GET_MODE (SET_SRC (PATTERN (prev)))) == MODE_INT
! 	     || (GET_CODE (SET_SRC (PATTERN (prev))) == MINUS
  		 && (GET_MODE_CLASS (GET_MODE (XEXP (SET_SRC (PATTERN (prev)), 0)))
  		     == MODE_INT)))))
--- 794,798 ----
  	 && SET_DEST (PATTERN (prev)) == cc0_rtx
  	 && (GET_MODE_CLASS (GET_MODE (SET_SRC (PATTERN (prev)))) == MODE_INT
! 	     || (GET_CODE (SET_SRC (PATTERN (prev))) == COMPARE
  		 && (GET_MODE_CLASS (GET_MODE (XEXP (SET_SRC (PATTERN (prev)), 0)))
  		     == MODE_INT)))))
diff -rc2N gcc-1.33/local-alloc.c gcc-1.34/local-alloc.c
*** gcc-1.33/local-alloc.c	Fri Dec 16 18:23:57 1988
--- gcc-1.34/local-alloc.c	Wed Feb 22 12:22:40 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 128,134 ****
  static enum machine_mode *qty_mode;
  
! /* Nonzero if any of the regs tied to qty Q lives across a CALL_INSN.  */
  
! static char *qty_crosses_call;
  
  /* Nonzero means don't allocate qty Q if we can't get its preferred class.  */
--- 127,133 ----
  static enum machine_mode *qty_mode;
  
! /* Number of times a reg tied to qty Q lives across a CALL_INSN.  */
  
! static int *qty_n_calls_crossed;
  
  /* Nonzero means don't allocate qty Q if we can't get its preferred class.  */
***************
*** 210,214 ****
    qty_mode[qty] = mode;
    qty_birth[qty] = insn_number;
!   qty_crosses_call[qty] = reg_crosses_call[regno];
    qty_min_class[qty] = reg_preferred_class (regno);
    qty_preferred_or_nothing[qty] = reg_preferred_or_nothing (regno);
--- 209,213 ----
    qty_mode[qty] = mode;
    qty_birth[qty] = insn_number;
!   qty_n_calls_crossed[qty] = reg_n_calls_crossed[regno];
    qty_min_class[qty] = reg_preferred_class (regno);
    qty_preferred_or_nothing[qty] = reg_preferred_or_nothing (regno);
***************
*** 233,237 ****
    qty_size = (int *) alloca (max_regno * sizeof (int));
    qty_mode = (enum machine_mode *) alloca (max_regno * sizeof (enum machine_mode));
!   qty_crosses_call = (char *) alloca (max_regno);
    qty_min_class = (enum reg_class *) alloca (max_regno * sizeof (enum reg_class));
    qty_preferred_or_nothing = (char *) alloca (max_regno);
--- 232,236 ----
    qty_size = (int *) alloca (max_regno * sizeof (int));
    qty_mode = (enum machine_mode *) alloca (max_regno * sizeof (enum machine_mode));
!   qty_n_calls_crossed = (int *) alloca (max_regno * sizeof (int));
    qty_min_class = (enum reg_class *) alloca (max_regno * sizeof (enum reg_class));
    qty_preferred_or_nothing = (char *) alloca (max_regno);
***************
*** 283,287 ****
  	      qty_min_class[i] = NO_REGS;
  	      qty_preferred_or_nothing[i] = 0;
! 	      qty_crosses_call[i] = 0;
  	      qty_n_refs[i] = 0;
  	    }
--- 282,286 ----
  	      qty_min_class[i] = NO_REGS;
  	      qty_preferred_or_nothing[i] = 0;
! 	      qty_n_calls_crossed[i] = 0;
  	      qty_n_refs[i] = 0;
  	    }
***************
*** 299,303 ****
  	  CLEAR (qty_min_class);
  	  CLEAR (qty_preferred_or_nothing);
! 	  CLEAR (qty_crosses_call);
  	  CLEAR (qty_n_refs);
  	}
--- 298,302 ----
  	  CLEAR (qty_min_class);
  	  CLEAR (qty_preferred_or_nothing);
! 	  CLEAR (qty_n_calls_crossed);
  	  CLEAR (qty_n_refs);
  	}
***************
*** 580,586 ****
  	  if (N_REG_CLASSES > 1)
  	    {
! 	      qty_phys_reg[q] = find_free_reg (qty_crosses_call[q],
! 					       qty_min_class[q],
! 					       qty_mode[q], q,
  					       qty_birth[q], qty_death[q]);
  	      if (qty_phys_reg[q] >= 0)
--- 579,584 ----
  	  if (N_REG_CLASSES > 1)
  	    {
! 	      qty_phys_reg[q] = find_free_reg (qty_min_class[q], 
! 					       qty_mode[q], q, 0,
  					       qty_birth[q], qty_death[q]);
  	      if (qty_phys_reg[q] >= 0)
***************
*** 589,594 ****
  
  	  if (!qty_preferred_or_nothing[q])
! 	    qty_phys_reg[q] = find_free_reg (qty_crosses_call[q], GENERAL_REGS,
! 					     qty_mode[q], q,
  					     qty_birth[q], qty_death[q]);
  	}
--- 587,592 ----
  
  	  if (!qty_preferred_or_nothing[q])
! 	    qty_phys_reg[q] = find_free_reg (GENERAL_REGS, 
! 					     qty_mode[q], q, 0,
  					     qty_birth[q], qty_death[q]);
  	}
***************
*** 706,710 ****
        if (fixed_regs[ureg])
  	return 0;
!       if (reg_crosses_call[sreg] && call_used_regs[ureg])
  	return 0;
        if (usize < ssize)
--- 704,708 ----
        if (fixed_regs[ureg])
  	return 0;
!       if (reg_n_calls_crossed[sreg] != 0 && call_used_regs[ureg])
  	return 0;
        if (usize < ssize)
***************
*** 716,720 ****
        if (fixed_regs[sreg])
  	return 0;
!       if (reg_crosses_call[ureg] && call_used_regs[sreg])
  	return 0;
        if (ssize < usize)
--- 714,718 ----
        if (fixed_regs[sreg])
  	return 0;
!       if (reg_n_calls_crossed[ureg] != 0 && call_used_regs[sreg])
  	return 0;
        if (ssize < usize)
***************
*** 771,775 ****
  	  && (qty_phys_sugg[reg_qty[ureg]] < 0
  	      /* If the old suggestion is no good, override it.  */
! 	      || (qty_crosses_call[reg_qty[ureg]]
  		  && call_used_regs[qty_phys_sugg[reg_qty[ureg]]])))
  	qty_phys_sugg[reg_qty[ureg]] = sreg;
--- 769,773 ----
  	  && (qty_phys_sugg[reg_qty[ureg]] < 0
  	      /* If the old suggestion is no good, override it.  */
! 	      || (qty_n_calls_crossed[reg_qty[ureg]] != 0
  		  && call_used_regs[qty_phys_sugg[reg_qty[ureg]]])))
  	qty_phys_sugg[reg_qty[ureg]] = sreg;
***************
*** 809,813 ****
        if (sqty >= 0)
  	{
! 	  qty_crosses_call[sqty] |= reg_crosses_call[sreg];
  	  qty_n_refs[sqty] += reg_n_refs[sreg];
  	  if (! reg_preferred_or_nothing (sreg))
--- 807,811 ----
        if (sqty >= 0)
  	{
! 	  qty_n_calls_crossed[sqty] += reg_n_calls_crossed[sreg];
  	  qty_n_refs[sqty] += reg_n_refs[sreg];
  	  if (! reg_preferred_or_nothing (sreg))
***************
*** 1004,1016 ****
     and still free between insn BORN_INSN and insn DEAD_INSN,
     and return the number of the first of them.
!    Return -1 if such a block cannot be found.
!    If CALL_PRESERVED is nonzero, insist on registers preserved
!    over subroutine calls, and return -1 if cannot find such.  */
  
  static int
! find_free_reg (call_preserved, class, mode, qty, born_insn, dead_insn)
!      int call_preserved;
       enum reg_class class;
       enum machine_mode mode;
       int qty;
       int born_insn, dead_insn;
--- 1002,1014 ----
     and still free between insn BORN_INSN and insn DEAD_INSN,
     and return the number of the first of them.
!    Return -1 if such a block cannot be found. 
!    If QTY crosses calls, insist on a register preserved by calls,
!    unless ACCEPT_CALL_CLOBBERED is nonzero.  */
  
  static int
! find_free_reg (class, mode, qty, accept_call_clobbered, born_insn, dead_insn)
       enum reg_class class;
       enum machine_mode mode;
+      int accept_call_clobbered;
       int qty;
       int born_insn, dead_insn;
***************
*** 1022,1027 ****
      HARD_REG_SET used;
  
!   COPY_HARD_REG_SET (used,
! 		     call_preserved ? call_used_reg_set : fixed_reg_set);
  
    for (ins = born_insn; ins < dead_insn; ins++)
--- 1020,1029 ----
      HARD_REG_SET used;
  
!   if (accept_call_clobbered)
!     COPY_HARD_REG_SET (used, call_fixed_reg_set);
!   else if (qty_n_calls_crossed[qty] == 0)
!     COPY_HARD_REG_SET (used, fixed_reg_set);
!   else
!     COPY_HARD_REG_SET (used, call_used_reg_set);
  
    for (ins = born_insn; ins < dead_insn; ins++)
***************
*** 1079,1082 ****
--- 1081,1098 ----
  #endif
  	}
+     }
+ 
+   /* If it would be profitable to allocate a call-clobbered register
+      and save and restore it around calls, do that.  */
+ 
+   if (! accept_call_clobbered
+       && flag_caller_saves
+       && qty_n_calls_crossed[qty] != 0
+       && CALLER_SAVE_PROFITABLE (qty_n_refs[qty], qty_n_calls_crossed[qty]))
+     {
+       i = find_free_reg (class, mode, qty, 1, born_insn, dead_insn);
+       if (i >= 0)
+ 	caller_save_needed = 1;
+       return i;
      }
    return -1;
diff -rc2N gcc-1.33/loop.c gcc-1.34/loop.c
*** gcc-1.33/loop.c	Sun Jan 15 16:46:33 1989
--- gcc-1.34/loop.c	Wed Feb 22 12:22:37 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 207,211 ****
  /* Entry point of this file.  Perform loop optimization
     on the current function.  F is the first insn of the function
!    and NREGS is the number of register numbers used.  */
  
  void
--- 206,211 ----
  /* Entry point of this file.  Perform loop optimization
     on the current function.  F is the first insn of the function
!    and DUMPFILE is a stream for output of a trace of actions taken
!    (or 0 if none should be output).  */
  
  void
***************
*** 309,315 ****
       this is the label at the top.  Otherwise it is zero.  */
    rtx loop_top = 0;
-   /* This is the insn (whatever kind) before the NOTE that starts the loop.
-      Any insns moved out of the loop will follow it.  */
-   rtx before_start = PREV_INSN (loop_start);
    /* Jump insn that enters the loop, or 0 if control drops in.  */
    rtx loop_entry_jump = 0;
--- 309,312 ----
***************
*** 986,991 ****
  		    already_moved[m1->regno] = 1;
  
! 		    /* The reg merged here is now invariant.  */
! 		    if (m->partial)
  		      n_times_set[m1->regno] = 0;
  		  }
--- 983,989 ----
  		    already_moved[m1->regno] = 1;
  
! 		    /* The reg merged here is now invariant,
! 		       if the reg it matches is invariant.  */
! 		    if (! m->partial)
  		      n_times_set[m1->regno] = 0;
  		  }
***************
*** 2992,3000 ****
  	    insn = XEXP (x, 0);
  
! 	  if (x = find_reg_note (insn, REG_EQUAL, 0))
  	    {
  	      /* This is a library call; delete all insns backward until get to
  		 first insn in this group.  */
! 	      rtx first = XEXP (find_reg_note (insn, REG_RETVAL, 0), 0);
  	      for (p = insn; p != first; p = PREV_INSN (p))
  		delete_insn (p);
--- 2990,2998 ----
  	    insn = XEXP (x, 0);
  
! 	  if (x = find_reg_note (insn, REG_RETVAL, 0))
  	    {
  	      /* This is a library call; delete all insns backward until get to
  		 first insn in this group.  */
! 	      rtx first = XEXP (x, 0);
  	      for (p = insn; p != first; p = PREV_INSN (p))
  		delete_insn (p);
***************
*** 4366,4370 ****
  
        /* a compare insn */
!     case MINUS:
        /* Figure out which operand is the biv.  */
        if ((GET_CODE (XEXP (src, 0)) == REG)
--- 4364,4368 ----
  
        /* a compare insn */
!     case COMPARE:
        /* Figure out which operand is the biv.  */
        if ((GET_CODE (XEXP (src, 0)) == REG)
***************
*** 4504,4511 ****
  
        /* a compare insn */
!     case MINUS:
        /* Figure out which operand is the biv.  */
!       if ((GET_CODE (XEXP (src, 0)) == REG)
! 	  && (REGNO (XEXP (src, 0)) == bl->regno))
  	{
  	  arg = XEXP (src, 1);
--- 4502,4509 ----
  
        /* a compare insn */
!     case COMPARE:
        /* Figure out which operand is the biv.  */
!       if (GET_CODE (XEXP (src, 0)) == REG
! 	  && REGNO (XEXP (src, 0)) == bl->regno)
  	{
  	  arg = XEXP (src, 1);
diff -rc2N gcc-1.33/m68k.md gcc-1.34/m68k.md
*** gcc-1.33/m68k.md	Wed Jan 11 20:51:06 1989
--- gcc-1.34/m68k.md	Wed Feb 22 12:31:17 1989
***************
*** 5,22 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 5,21 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 368,373 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "general_operand" "rKs,mr")
! 	       (match_operand:SI 1 "general_operand" "mr,Ksr")))]
    ""
    "*
--- 367,372 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "general_operand" "rKs,mr")
! 		 (match_operand:SI 1 "general_operand" "mr,Ksr")))]
    ""
    "*
***************
*** 391,396 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "general_operand" "rn,mr")
! 	       (match_operand:HI 1 "general_operand" "mr,nr")))]
    ""
    "*
--- 390,395 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "general_operand" "rn,mr")
! 		 (match_operand:HI 1 "general_operand" "mr,nr")))]
    ""
    "*
***************
*** 414,419 ****
  (define_insn "cmpqi"
    [(set (cc0)
! 	(minus (match_operand:QI 0 "general_operand" "dn,md,>")
! 	       (match_operand:QI 1 "general_operand" "dm,nd,>")))]
    ""
    "*
--- 413,418 ----
  (define_insn "cmpqi"
    [(set (cc0)
! 	(compare (match_operand:QI 0 "general_operand" "dn,md,>")
! 		 (match_operand:QI 1 "general_operand" "dm,nd,>")))]
    ""
    "*
***************
*** 439,444 ****
  (define_expand "cmpdf"
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "general_operand" "")
! 		  (match_operand:DF 1 "general_operand" "")))]
    "TARGET_68881 || TARGET_FPA"
    "
--- 438,443 ----
  (define_expand "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "")
! 		 (match_operand:DF 1 "general_operand" "")))]
    "TARGET_68881 || TARGET_FPA"
    "
***************
*** 447,451 ****
      {
        rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
! 			 gen_rtx (MINUS, DFmode, operands[0], operands[1]));
        emit_insn (gen_rtx (PARALLEL, VOIDmode,
  		          gen_rtvec (2, set,
--- 446,450 ----
      {
        rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
! 			 gen_rtx (COMPARE, VOIDmode, operands[0], operands[1]));
        emit_insn (gen_rtx (PARALLEL, VOIDmode,
  		          gen_rtvec (2, set,
***************
*** 458,463 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "general_operand" "x,y")
! 		  (match_operand:DF 1 "general_operand" "xH,rmF")))
     (clobber (match_operand:SI 2 "general_operand" "d,d"))]
    "TARGET_FPA"
--- 457,462 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "x,y")
! 		 (match_operand:DF 1 "general_operand" "xH,rmF")))
     (clobber (match_operand:SI 2 "general_operand" "d,d"))]
    "TARGET_FPA"
***************
*** 466,471 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "general_operand" "f,mG")
! 		  (match_operand:DF 1 "general_operand" "fmG,f")))]
    "TARGET_68881"
    "*
--- 465,470 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "f,mG")
! 		 (match_operand:DF 1 "general_operand" "fmG,f")))]
    "TARGET_68881"
    "*
***************
*** 497,502 ****
  (define_expand "cmpsf"
   [(set (cc0)
!        (minus:SF (match_operand:SF 0 "general_operand" "")
! 		 (match_operand:SF 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "
--- 496,501 ----
  (define_expand "cmpsf"
   [(set (cc0)
!        (compare (match_operand:SF 0 "general_operand" "")
! 		(match_operand:SF 1 "general_operand" "")))]
   "TARGET_68881 || TARGET_FPA"
   "
***************
*** 505,509 ****
      {
        rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
! 			 gen_rtx (MINUS, SFmode, operands[0], operands[1]));
        emit_insn (gen_rtx (PARALLEL, VOIDmode,
  			  gen_rtvec (2, set,
--- 504,508 ----
      {
        rtx set = gen_rtx (SET, VOIDmode, cc0_rtx,
! 			 gen_rtx (COMPARE, VOIDmode, operands[0], operands[1]));
        emit_insn (gen_rtx (PARALLEL, VOIDmode,
  			  gen_rtvec (2, set,
***************
*** 516,521 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "general_operand" "x,y")
! 		  (match_operand:SF 1 "general_operand" "xH,rmF")))
     (clobber (match_operand:SI 2 "general_operand" "d,d"))]
    "TARGET_FPA"
--- 515,520 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "x,y")
! 		 (match_operand:SF 1 "general_operand" "xH,rmF")))
     (clobber (match_operand:SI 2 "general_operand" "d,d"))]
    "TARGET_FPA"
***************
*** 524,529 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "general_operand" "f,mdG")
! 		  (match_operand:SF 1 "general_operand" "fmdG,f")))]
    "TARGET_68881"
    "*
--- 523,528 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "f,mdG")
! 		 (match_operand:SF 1 "general_operand" "fmdG,f")))]
    "TARGET_68881"
    "*
***************
*** 595,612 ****
    "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  
  (define_insn ""
!   ;; The constraint "o,d" here means that a nonoffsetable memref
!   ;; will match the first alternative, and its address will be reloaded.
!   ;; Copying the memory contents into a reg would be incorrect if the
!   ;; bit position is over 7.
!   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "o,d")
  			    (const_int 1)
! 			    (match_operand:SI 1 "general_operand" "i,i")))]
    "GET_CODE (operands[1]) == CONST_INT"
    "*
! { operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
!   return output_btst (operands, operands[1], operands[0], insn, 7); }")
  
  (define_insn ""
    [(set (cc0) (zero_extract (match_operand:HI 0 "nonimmediate_operand" "o,d")
  			    (const_int 1)
--- 594,615 ----
    "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  
+ ;; Nonoffsetable mem refs are ok in this one pattern
+ ;; since we don't try to adjust them.
  (define_insn ""
!   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "md")
  			    (const_int 1)
! 			    (match_operand:SI 1 "general_operand" "i")))]
    "GET_CODE (operands[1]) == CONST_INT"
    "*
! {
!   operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
!   return output_btst (operands, operands[1], operands[0], insn, 7);
! }")
  
  (define_insn ""
+   ;; The constraint "o,d" here means that a nonoffsetable memref
+   ;; will match the first alternative, and its address will be reloaded.
+   ;; Copying the memory contents into a reg would be incorrect if the
+   ;; bit position is over 7.
    [(set (cc0) (zero_extract (match_operand:HI 0 "nonimmediate_operand" "o,d")
  			    (const_int 1)
***************
*** 1453,1457 ****
    "fmove%.l %1,%0")
  
! ;; Convert a float to a float whose value is an integer.
  ;; On the Sun FPA, this is done in one step.
  
--- 1456,1460 ----
    "fmove%.l %1,%0")
  
! ;; Convert a float to an integer.
  ;; On the Sun FPA, this is done in one step.
  
***************
*** 1458,1462 ****
  (define_insn "fix_truncsfsi2"
    [(set (match_operand:SI 0 "general_operand" "=x,y")
! 	(fix:SI (match_operand:SF 1 "general_operand" "xH,rmF")))]
    "TARGET_FPA"
    "fpstol %w1,%0")
--- 1461,1465 ----
  (define_insn "fix_truncsfsi2"
    [(set (match_operand:SI 0 "general_operand" "=x,y")
! 	(fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))]
    "TARGET_FPA"
    "fpstol %w1,%0")
***************
*** 1464,1468 ****
  (define_insn "fix_truncdfsi2"
    [(set (match_operand:SI 0 "general_operand" "=x,y")
! 	(fix:SI (match_operand:DF 1 "general_operand" "xH,rmF")))]
    "TARGET_FPA"
    "fpdtol %y1,%0")
--- 1467,1471 ----
  (define_insn "fix_truncdfsi2"
    [(set (match_operand:SI 0 "general_operand" "=x,y")
! 	(fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))]
    "TARGET_FPA"
    "fpdtol %y1,%0")
***************
*** 1470,1477 ****
  ;; add instructions
  
  (define_insn "addsi3"
!   [(set (match_operand:SI 0 "general_operand" "=m,r,!a")
! 	(plus:SI (match_operand:SI 1 "general_operand" "%0,0,a")
! 		 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJK")))]
    ""
    "*
--- 1473,1484 ----
  ;; add instructions
  
+ ;; Note that the last two alternatives are near-duplicates
+ ;; in order to handle insns generated by reload.
+ ;; This is needed since they are not themselves reloaded,
+ ;; so commutativity won't apply to them.
  (define_insn "addsi3"
!   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,!a")
! 	(plus:SI (match_operand:SI 1 "general_operand" "%0,0,a,rJK")
! 		 (match_operand:SI 2 "general_operand" "dIKLs,mrIKLs,rJK,a")))]
    ""
    "*
***************
*** 1479,1482 ****
--- 1486,1497 ----
    if (! operands_match_p (operands[0], operands[1]))
      {
+       if (!ADDRESS_REG_P (operands[1]))
+ 	{
+ 	  rtx tmp = operands[1];
+ 
+ 	  operands[1] = operands[2];
+ 	  operands[2] = tmp;
+ 	}
+ 
        /* These insns can result from reloads to access
  	 stack slots over 64k from the frame pointer.  */
***************
*** 2521,2527 ****
  
  (define_insn ""
!   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
! 		     (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				  (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && (INTVAL (operands[0]) & ~0xff) == 0)"
--- 2536,2542 ----
  
  (define_insn ""
!   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
! 		       (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				    (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && (INTVAL (operands[0]) & ~0xff) == 0)"
***************
*** 2535,2541 ****
  
  (define_insn ""
!   [(set (cc0) (minus (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				  (const_int 24))
! 		     (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && (INTVAL (operands[1]) & ~0xff) == 0)"
--- 2550,2556 ----
  
  (define_insn ""
!   [(set (cc0) (compare (lshiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				    (const_int 24))
! 		       (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && (INTVAL (operands[1]) & ~0xff) == 0)"
***************
*** 2549,2555 ****
  
  (define_insn ""
!   [(set (cc0) (minus (match_operand:QI 0 "general_operand" "i")
! 		     (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				  (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
--- 2564,2570 ----
  
  (define_insn ""
!   [(set (cc0) (compare (match_operand:QI 0 "general_operand" "i")
! 		       (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m")
! 				    (const_int 24))))]
    "(GET_CODE (operands[0]) == CONST_INT
      && ((INTVAL (operands[0]) + 0x80) & ~0xff) == 0)"
***************
*** 2563,2569 ****
  
  (define_insn ""
!   [(set (cc0) (minus (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				  (const_int 24))
! 		     (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
--- 2578,2584 ----
  
  (define_insn ""
!   [(set (cc0) (compare (ashiftrt:SI (match_operand:SI 0 "memory_operand" "m")
! 				    (const_int 24))
! 		       (match_operand:QI 1 "general_operand" "i")))]
    "(GET_CODE (operands[1]) == CONST_INT
      && ((INTVAL (operands[1]) + 0x80) & ~0xff) == 0)"
***************
*** 3483,3488 ****
  		 ;; Note operand 1 has been negated!
  		 (match_operand:SI 1 "immediate_operand" "")))
!    (set (cc0) (minus (match_operand:SI 2 "general_operand" "")
! 		     (match_dup 3)))
     (set (pc) (if_then_else (ltu (cc0) (const_int 0))
  			   (label_ref (match_operand 4 "" "")) (pc)))]
--- 3498,3503 ----
  		 ;; Note operand 1 has been negated!
  		 (match_operand:SI 1 "immediate_operand" "")))
!    (set (cc0) (compare (match_operand:SI 2 "general_operand" "")
! 		       (match_dup 3)))
     (set (pc) (if_then_else (ltu (cc0) (const_int 0))
  			   (label_ref (match_operand 4 "" "")) (pc)))]
***************
*** 3573,3579 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (plus:HI (match_operand:HI 0 "general_operand" "g")
! 			     (const_int -1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
--- 3588,3594 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (plus:HI (match_operand:HI 0 "general_operand" "g")
! 			       (const_int -1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
***************
*** 3609,3615 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			     (const_int -1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
--- 3624,3630 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			       (const_int -1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
diff -rc2N gcc-1.33/m88k.md gcc-1.34/m88k.md
*** gcc-1.33/m88k.md	Thu Jun 30 04:26:38 1988
--- gcc-1.34/m88k.md	Wed Feb 22 12:31:13 1989
***************
*** 5,22 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 5,21 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 39,44 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "arith_operand" "rI")
! 	       (match_operand:SI 1 "arith_operand" "rI")))]
    ""
    "*
--- 38,43 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "arith_operand" "rI")
! 		 (match_operand:SI 1 "arith_operand" "rI")))]
    ""
    "*
***************
*** 54,59 ****
  (define_insn "cmpdf"
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "nonmemory_operand" "rG")
! 		  (match_operand:DF 1 "nonmemory_operand" "rG")))]
    ""
    "*
--- 53,58 ----
  (define_insn "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "nonmemory_operand" "rG")
! 		 (match_operand:DF 1 "nonmemory_operand" "rG")))]
    ""
    "*
***************
*** 70,75 ****
  (define_insn "cmpsf"
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "nonmemory_operand" "rG")
! 		  (match_operand:SF 1 "nonmemory_operand" "rG")))]
    ""
    "*
--- 69,74 ----
  (define_insn "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "nonmemory_operand" "rG")
! 		 (match_operand:SF 1 "nonmemory_operand" "rG")))]
    ""
    "*
***************
*** 1522,1526 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1521,1525 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1563,1567 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1562,1566 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1604,1608 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1603,1607 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1645,1649 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1644,1648 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1686,1690 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1685,1689 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1727,1731 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1726,1730 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1768,1772 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1767,1771 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1809,1813 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1808,1812 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1850,1854 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1849,1853 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
***************
*** 1891,1895 ****
  (define_peephole
    [(set (cc0)
! 	(minus
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
--- 1890,1894 ----
  (define_peephole
    [(set (cc0)
! 	(compare
  	 (match_operand:SI 0 "arith_operand" "r")
  	 (match_operand:SI 1 "arith_operand" "rI")))
diff -rc2N gcc-1.33/machmode.def gcc-1.34/machmode.def
*** gcc-1.33/machmode.def	Thu Oct  6 23:16:29 1988
--- gcc-1.34/machmode.def	Wed Feb 22 12:29:50 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/masm386.c gcc-1.34/masm386.c
*** gcc-1.33/masm386.c	Tue Jan 17 19:36:00 1989
--- gcc-1.34/masm386.c	Wed Feb 22 12:22:33 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
    
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
    
diff -rc2N gcc-1.33/ns32k.md gcc-1.34/ns32k.md
*** gcc-1.33/ns32k.md	Thu Dec 22 17:27:23 1988
--- gcc-1.34/ns32k.md	Wed Feb 22 12:31:11 1989
***************
*** 14,31 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 14,30 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 88,93 ****
  (define_insn "cmpdf"
    [(set (cc0)
! 	(minus (match_operand:DF 0 "general_operand" "fmF")
! 	       (match_operand:DF 1 "general_operand" "fmF")))]
    "TARGET_32081"
    "cmpl %0,%1")
--- 87,92 ----
  (define_insn "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "fmF")
! 		 (match_operand:DF 1 "general_operand" "fmF")))]
    "TARGET_32081"
    "cmpl %0,%1")
***************
*** 95,100 ****
  (define_insn "cmpsf"
    [(set (cc0)
! 	(minus (match_operand:SF 0 "general_operand" "fmF")
! 	       (match_operand:SF 1 "general_operand" "fmF")))]
    "TARGET_32081"
    "cmpf %0,%1")
--- 94,99 ----
  (define_insn "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "fmF")
! 		 (match_operand:SF 1 "general_operand" "fmF")))]
    "TARGET_32081"
    "cmpf %0,%1")
***************
*** 102,107 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "general_operand" "rmn")
! 	       (match_operand:SI 1 "general_operand" "rmn")))]
    ""
    "*
--- 101,106 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "general_operand" "rmn")
! 		 (match_operand:SI 1 "general_operand" "rmn")))]
    ""
    "*
***************
*** 128,133 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "general_operand" "g")
! 	       (match_operand:HI 1 "general_operand" "g")))]
    ""
    "*
--- 127,132 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "general_operand" "g")
! 		 (match_operand:HI 1 "general_operand" "g")))]
    ""
    "*
***************
*** 160,165 ****
  (define_insn "cmpqi"
    [(set (cc0)
! 	(minus (match_operand:QI 0 "general_operand" "g")
! 	       (match_operand:QI 1 "general_operand" "g")))]
    ""
    "*
--- 159,164 ----
  (define_insn "cmpqi"
    [(set (cc0)
! 	(compare (match_operand:QI 0 "general_operand" "g")
! 		 (match_operand:QI 1 "general_operand" "g")))]
    ""
    "*
***************
*** 1710,1717 ****
  (define_insn ""
    [(set (cc0)
! 	(minus (zero_extract (match_operand:SI 0 "general_operand" "rm")
! 			     (const_int 1)
! 			     (match_operand:SI 1 "general_operand" "rmn"))
! 	       (const_int 1)))]
    ""
    "*
--- 1709,1716 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (zero_extract (match_operand:SI 0 "general_operand" "rm")
! 			       (const_int 1)
! 			       (match_operand:SI 1 "general_operand" "rmn"))
! 		 (const_int 1)))]
    ""
    "*
***************
*** 1733,1740 ****
  (define_insn ""
    [(set (cc0)
! 	(minus (zero_extract (match_operand:HI 0 "general_operand" "g")
! 			     (const_int 1)
! 			     (match_operand:HI 1 "general_operand" "rmn"))
! 	       (const_int 1)))]
    ""
    "*
--- 1732,1739 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (zero_extract (match_operand:HI 0 "general_operand" "g")
! 			       (const_int 1)
! 			       (match_operand:HI 1 "general_operand" "rmn"))
! 		 (const_int 1)))]
    ""
    "*
***************
*** 1756,1763 ****
  (define_insn ""
    [(set (cc0)
! 	(minus (zero_extract:SI (match_operand:QI 0 "general_operand" "g")
! 				(const_int 1)
! 				(match_operand:QI 1 "general_operand" "rmn"))
! 	       (const_int 1)))]
    ""
    "*
--- 1755,1762 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (zero_extract:SI (match_operand:QI 0 "general_operand" "g")
! 				  (const_int 1)
! 				  (match_operand:QI 1 "general_operand" "rmn"))
! 		 (const_int 1)))]
    ""
    "*
diff -rc2N gcc-1.33/obstack.c gcc-1.34/obstack.c
*** gcc-1.33/obstack.c	Wed Nov 30 06:24:15 1988
--- gcc-1.34/obstack.c	Wed Feb 22 11:45:24 1989
***************
*** 2,100 ****
     Copyright (C) 1988 Free Software Foundation, Inc.
  
! 		       NO WARRANTY
  
!   BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
! NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
! WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
! BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
! FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
! AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
! DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.
  
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
! LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
! OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
! USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
! DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
! A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
! PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
! DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
! 
! 		GENERAL PUBLIC LICENSE TO COPY
! 
!   1. You may copy and distribute verbatim copies of this source file
! as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy a valid copyright notice "Copyright
!  (C) 1988 Free Software Foundation, Inc."; and include following the
! copyright notice a verbatim copy of the above disclaimer of warranty
! and of this License.  You may charge a distribution fee for the
! physical act of transferring a copy.
! 
!   2. You may modify your copy or copies of this source file or
! any portion of it, and copy and distribute such modifications under
! the terms of Paragraph 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating
!     that you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish,
!     that in whole or in part contains or is a derivative of this
!     program or any part thereof, to be licensed at no charge to all
!     third parties on terms identical to those contained in this
!     License Agreement (except that you may choose to grant more extensive
!     warranty protection to some or all third parties, at your option).
! 
!     c) You may charge a distribution fee for the physical act of
!     transferring a copy, and you may at your option offer warranty
!     protection in exchange for a fee.
! 
! Mere aggregation of another unrelated program with this program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
! 
!   3. You may copy and distribute this program or any portion of it in
! compiled, executable or object code form under the terms of Paragraphs
! 1 and 2 above provided that you do the following:
! 
!     a) accompany it with the complete corresponding machine-readable
!     source code, which must be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal
!     shipping charge) a complete machine-readable copy of the
!     corresponding source code, to be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     c) accompany it with the information you received as to where the
!     corresponding source code may be obtained.  (This alternative is
!     allowed only for noncommercial distribution and only if you
!     received the program in object code or executable form alone.)
! 
! For an executable file, complete source code means all the source code for
! all modules it contains; but, as a special exception, it need not include
! source code for modules which are standard libraries that accompany the
! operating system on which the executable file runs.
! 
!   4. You may not copy, sublicense, distribute or transfer this program
! except as expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer this program is void and
! your rights to use the program under this License agreement shall be
! automatically terminated.  However, parties who have received computer
! software programs from you with this License Agreement will not have
! their licenses terminated so long as such parties remain in full compliance.
! 
!   5. If you wish to incorporate parts of this program into other free
! programs whose distribution conditions are different, write to the Free
! Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
! worked out a simple rule that can be stated here, but we will often permit
! this.  We will be guided by the two goals of preserving the free status of
! all derivatives our free software and of promoting the sharing and reuse of
! software.
  
  
--- 2,18 ----
     Copyright (C) 1988 Free Software Foundation, Inc.
  
! This program is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 1, or (at your option) any
! later version.
  
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
diff -rc2N gcc-1.33/obstack.h gcc-1.34/obstack.h
*** gcc-1.33/obstack.h	Tue Sep  6 20:07:58 1988
--- gcc-1.34/obstack.h	Wed Feb 22 11:45:35 1989
***************
*** 2,100 ****
     Copyright (C) 1988 Free Software Foundation, Inc.
  
! 		       NO WARRANTY
  
!   BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
! NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
! WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
! BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
! FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
! AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
! DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! CORRECTION.
  
!  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
! LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
! OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
! USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
! DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
! A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
! PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
! DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
! 
! 		GENERAL PUBLIC LICENSE TO COPY
! 
!   1. You may copy and distribute verbatim copies of this source file
! as you receive it, in any medium, provided that you conspicuously and
! appropriately publish on each copy a valid copyright notice "Copyright
!  (C) 1988 Free Software Foundation, Inc."; and include following the
! copyright notice a verbatim copy of the above disclaimer of warranty
! and of this License.  You may charge a distribution fee for the
! physical act of transferring a copy.
! 
!   2. You may modify your copy or copies of this source file or
! any portion of it, and copy and distribute such modifications under
! the terms of Paragraph 1 above, provided that you also do the following:
! 
!     a) cause the modified files to carry prominent notices stating
!     that you changed the files and the date of any change; and
! 
!     b) cause the whole of any work that you distribute or publish,
!     that in whole or in part contains or is a derivative of this
!     program or any part thereof, to be licensed at no charge to all
!     third parties on terms identical to those contained in this
!     License Agreement (except that you may choose to grant more extensive
!     warranty protection to some or all third parties, at your option).
! 
!     c) You may charge a distribution fee for the physical act of
!     transferring a copy, and you may at your option offer warranty
!     protection in exchange for a fee.
! 
! Mere aggregation of another unrelated program with this program (or its
! derivative) on a volume of a storage or distribution medium does not bring
! the other program under the scope of these terms.
! 
!   3. You may copy and distribute this program or any portion of it in
! compiled, executable or object code form under the terms of Paragraphs
! 1 and 2 above provided that you do the following:
! 
!     a) accompany it with the complete corresponding machine-readable
!     source code, which must be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     b) accompany it with a written offer, valid for at least three
!     years, to give any third party free (except for a nominal
!     shipping charge) a complete machine-readable copy of the
!     corresponding source code, to be distributed under the terms of
!     Paragraphs 1 and 2 above; or,
! 
!     c) accompany it with the information you received as to where the
!     corresponding source code may be obtained.  (This alternative is
!     allowed only for noncommercial distribution and only if you
!     received the program in object code or executable form alone.)
! 
! For an executable file, complete source code means all the source code for
! all modules it contains; but, as a special exception, it need not include
! source code for modules which are standard libraries that accompany the
! operating system on which the executable file runs.
! 
!   4. You may not copy, sublicense, distribute or transfer this program
! except as expressly provided under this License Agreement.  Any attempt
! otherwise to copy, sublicense, distribute or transfer this program is void and
! your rights to use the program under this License agreement shall be
! automatically terminated.  However, parties who have received computer
! software programs from you with this License Agreement will not have
! their licenses terminated so long as such parties remain in full compliance.
! 
!   5. If you wish to incorporate parts of this program into other free
! programs whose distribution conditions are different, write to the Free
! Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
! worked out a simple rule that can be stated here, but we will often permit
! this.  We will be guided by the two goals of preserving the free status of
! all derivatives our free software and of promoting the sharing and reuse of
! software.
  
  
--- 2,18 ----
     Copyright (C) 1988 Free Software Foundation, Inc.
  
! This program is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 1, or (at your option) any
! later version.
  
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
diff -rc2N gcc-1.33/optabs.c gcc-1.34/optabs.c
*** gcc-1.33/optabs.c	Wed Jan 11 13:13:49 1989
--- gcc-1.34/optabs.c	Wed Feb 22 12:22:30 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 332,335 ****
--- 331,391 ----
      }
    delete_insns_since (last);
+   return 0;
+ }
+ \f


+ /* Expand a binary operator which has both signed and unsigned forms.
+    UOPTAB is the optab for unsigned operations, and SOPTAB is for
+    signed operations.
+ 
+    If we widen unsigned operands, we may use a signed wider operation instead
+    of an unsigned wider operation, since the result would be the same.  */
+ 
+ rtx
+ sign_expand_binop (mode, uoptab, soptab, op0, op1, target, unsignedp, methods)
+     enum machine_mode mode;
+     optab uoptab, soptab;
+     rtx op0, op1, target;
+     int unsignedp;
+     enum optab_methods methods;
+ {
+   register rtx temp;
+   optab direct_optab = unsignedp ? uoptab : soptab;
+   struct optab wide_soptab;
+ 
+   /* Do it without widening, if possible.  */
+   temp = expand_binop (mode, direct_optab, op0, op1, target,
+ 		       unsignedp, OPTAB_DIRECT);
+   if (temp || methods == OPTAB_DIRECT)
+     return temp;
+ 
+   /* Try widening to a signed int.  Make a fake signed optab that
+      hides any signed insn for direct use.  */
+   wide_soptab = *soptab;
+   wide_soptab.handlers[(int) mode].insn_code = CODE_FOR_nothing;
+   wide_soptab.handlers[(int) mode].lib_call = 0;
+ 
+   temp = expand_binop (mode, &wide_soptab, op0, op1, target,
+ 		       unsignedp, OPTAB_WIDEN);
+ 
+   /* For unsigned operands, try widening to an unsigned int.  */
+   if (temp == 0 && unsignedp)
+     temp = expand_binop (mode, uoptab, op0, op1, target,
+ 			 unsignedp, OPTAB_WIDEN);
+   if (temp || methods == OPTAB_WIDEN)
+     return temp;
+ 
+   /* Use the right width lib call if that exists.  */
+   temp = expand_binop (mode, direct_optab, op0, op1, target, unsignedp, OPTAB_LIB);
+   if (temp || methods == OPTAB_LIB)
+     return temp;
+ 
+   /* Must widen and use a lib call, use either signed or unsigned.  */
+   temp = expand_binop (mode, &wide_soptab, op0, op1, target,
+ 		       unsignedp, methods);
+   if (temp != 0)
+     return temp;
+   if (unsignedp)
+     return expand_binop (mode, uoptab, op0, op1, target,
+ 			 unsignedp, methods);
    return 0;
  }
diff -rc2N gcc-1.33/output-alliant.c gcc-1.34/output-alliant.c
*** gcc-1.33/output-alliant.c	Sun Jan  1 16:10:57 1989
--- gcc-1.34/output-alliant.c	Wed Feb 22 12:22:26 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/output-convex.c gcc-1.34/output-convex.c
*** gcc-1.33/output-convex.c	Sun Jan 29 01:21:48 1989
--- gcc-1.34/output-convex.c	Wed Feb 22 12:22:24 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /*
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /*
***************
*** 30,37 ****
   *    "eq.w a1,a2 ! jbra.t L5"
   *    for (cmpsi a1 a2) (beq L5)
-  *  if necessary, it reverses the order of the operands to put a constant first
-  *  the operands of eq can be swapped without changing the sense
-  *    of the test; swapping the operands of lt changes it to le with
-  *    the branch sense reversed, and similarly for le.
   */
   
--- 29,32 ----
***************
*** 89,93 ****
      }
  
!   sprintf (buf, "%s.%c %%0,%%1! jbr%c.%c %%l2", cmpop, typech, regch, tf);
    output_asm_insn (buf, ops);
    return "";
--- 84,88 ----
      }
  
!   sprintf (buf, "%s.%c %%0,%%1\n\tjbr%c.%c %%l2", cmpop, typech, regch, tf);
    output_asm_insn (buf, ops);
    return "";
***************
*** 148,176 ****
  \f


  /*
-  *  calls like  (*f)()  generate  calls @n(ap)  -- invalid, since ap 
-  *  has been changed for the call.  Detect this case so the instruction
-  *   pattern can deal with it.
-  */
- 
- call_ap_check (addr)
-      rtx addr;
- {
-   if (GET_CODE (addr) != MEM)
-     return 0;
-   addr = XEXP (addr, 0);
-   if (GET_CODE (addr) != MEM)
-     return 0;
-   addr = XEXP (addr, 0);
-   if (REG_P (addr) && REGNO (addr) == ARG_POINTER_REGNUM)
-     return 1;
-   if (GET_CODE (addr) != PLUS)
-     return 0;
-   addr = XEXP (addr, 0);
-   if (REG_P (addr) && REGNO (addr) == ARG_POINTER_REGNUM)
-     return 1;
-   return 0;
- }
- \f


- /*
   *  pick target machine if not specified, the same as the host
   */
--- 143,146 ----
***************
*** 193,195 ****
--- 163,291 ----
  #endif
  }
+ \f


+ /*
+  * Routines to look at CONST_DOUBLEs without sinful knowledge of
+  * what the inside of u.d looks like
+  *
+  * const_double_high_int  -- high word of machine double or long long
+  * const_double_low_int   -- low word
+  * const_double_float_int -- the word of a machine float
+  */
+ 
+ static double frexp ();
+ static void float_extract ();
+ 
+ int
+ const_double_high_int (x)
+      rtx x;
+ {
+   if (GET_MODE (x) == DImode)
+     return CONST_DOUBLE_HIGH (x);
+   else
+     {
+       int sign, expd, expf;
+       unsigned fracdh, fracdl, fracf;
+       float_extract (x, &sign, &expd, &fracdh, &fracdl, &expf, &fracf);
+ 
+       if (fracdh == 0)
+ 	return 0;
+       if (expd < -01777 || expd > 01777)
+ 	return 1 << 31;
+       return sign << 31 | (expd + 02000) << 20 | fracdh - (1 << 20);
+     }
+ }
+ 
+ int
+ const_double_low_int (x)
+      rtx x;
+ {
+   if (GET_MODE (x) == DImode)
+     return CONST_DOUBLE_LOW (x);
+   else
+     {
+       int sign, expd, expf;
+       unsigned fracdh, fracdl, fracf;
+       float_extract (x, &sign, &expd, &fracdh, &fracdl, &expf, &fracf);
+       return fracdl;
+     }
+ }
+ 
+ int
+ const_double_float_int (x)
+      rtx x;
+ {
+   int sign, expd, expf;
+   unsigned fracdh, fracdl, fracf;
+   float_extract (x, &sign, &expd, &fracdh, &fracdl, &expf, &fracf);
+ 
+   if (fracf == 0)
+     return 0;
+   if (expf < -0177 || expf > 0177)
+     return 1 << 31;
+   return sign << 31 | (expf + 0200) << 20 | fracf - (1 << 23);
+ }
+ 
+ #define T21  ((double) (1 << 21))
+ #define T24  ((double) (1 << 24))
+ #define T53  ((double) (1 << 27) * (double) (1 << 26))
+ 
+ static void
+ float_extract (x, sign, expd, fracdh, fracdl, expf, fracf)
+      rtx x;
+      int *sign, *expd, *expf;
+      unsigned *fracdh, *fracdl, *fracf;
+ {
+   int exp, round;
+   double d, r;
+   union real_extract u;
+ 
+   bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u);
+ 
+   /* Get sign and exponent.  */
+ 
+   if (*sign = u.d < 0)
+     u.d = -u.d;
+   d = frexp (u.d, &exp);  
+ 
+   /* Get 21 fraction bits for high word and 32 for low word.  */
+ 
+   for (round = 0; ; round = 1)
+     {
+       r = frexp (round ? d + 1.0 / T53 : d, expd);
+       *expd += exp;
+       *fracdh = r * T21;
+       *fracdl = (r - *fracdh / T21) * T53;
+       if (round || ((r - *fracdh / T21) - *fracdl / T53) < 0.5 * T53)
+ 	break;
+     }
+ 
+   /* Get 24 bits for float fraction. */
+ 
+   for (round = 0; ; round = 1)
+     {
+       r = frexp (round ? d + 1.0 / T24 : d, expf);
+       *expf += exp;
+       *fracf = r * T24;
+       if (round || (r - *fracf / T24) < 0.5 * T24)
+ 	break;
+     }
+ }
+ 
+ static double
+ frexp (d, exp)
+      double d;
+      int *exp;
+ {
+   int e = 0;
+ 
+   if (d > 0)
+     {
+       while (d < 0.5) d *= 2.0, e--;
+       while (d >= 1.0) d /= 2.0, e++;
+     }
+ 
+   *exp = e;
+   return d;
+ }
+ 
  
diff -rc2N gcc-1.33/output-i386.c gcc-1.34/output-i386.c
*** gcc-1.33/output-i386.c	Sun Jan  1 16:10:39 1989
--- gcc-1.34/output-i386.c	Wed Feb 22 11:56:22 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #ifndef FILE
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #ifndef FILE
***************
*** 1182,1186 ****
  	  case PLUS: case MINUS: case NEG:
  	  case AND: case IOR: case XOR:
! 	    cc_status.flags |= CC_NO_OVERFLOW;
  	    cc_status.value1 = SET_SRC (exp);
  	    cc_status.value2 = SET_DEST (exp);
--- 1181,1185 ----
  	  case PLUS: case MINUS: case NEG:
  	  case AND: case IOR: case XOR:
! 	    cc_status.flags = CC_NO_OVERFLOW;
  	    cc_status.value1 = SET_SRC (exp);
  	    cc_status.value2 = SET_DEST (exp);
diff -rc2N gcc-1.33/output-m68k.c gcc-1.34/output-m68k.c
*** gcc-1.33/output-m68k.c	Sun Jan  1 17:37:50 1989
--- gcc-1.34/output-m68k.c	Wed Feb 22 11:56:19 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/output-m88k.c gcc-1.34/output-m88k.c
*** gcc-1.33/output-m88k.c	Sun Jan  1 16:09:54 1989
--- gcc-1.34/output-m88k.c	Wed Feb 22 11:56:16 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #ifndef FILE
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #ifndef FILE
***************
*** 39,43 ****
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == MINUS)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
--- 38,42 ----
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == COMPARE)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
***************
*** 74,78 ****
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == MINUS)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
--- 73,77 ----
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == COMPARE)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
***************
*** 108,112 ****
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == MINUS)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
--- 107,111 ----
    rtx op1, op2;
  
!   if (GET_CODE (cc_prev_status.value2) == COMPARE)
      {
        op1 = XEXP (cc_prev_status.value2, 0);
diff -rc2N gcc-1.33/output-ns32k.c gcc-1.34/output-ns32k.c
*** gcc-1.33/output-ns32k.c	Sun Jan  1 16:09:41 1989
--- gcc-1.34/output-ns32k.c	Wed Feb 22 11:56:14 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Some output-actions in ns32k.md need these.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Some output-actions in ns32k.md need these.  */
diff -rc2N gcc-1.33/output-sparc.c gcc-1.34/output-sparc.c
*** gcc-1.33/output-sparc.c	Tue Jan 31 02:50:45 1989
--- gcc-1.34/output-sparc.c	Wed Feb 22 11:56:11 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Global variables for machine-dependend things.  */
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Global variables for machine-dependend things.  */
***************
*** 72,75 ****
--- 71,75 ----
        return 1;
  
+     case COMPARE:
      case MINUS:
      case PLUS:
***************
*** 338,341 ****
--- 338,342 ----
        return 1;
  
+     case COMPARE:
      case MINUS:
        /* If the target is cc0, then these insns will take
***************
*** 423,426 ****
--- 424,428 ----
        return 1;
  
+     case COMPARE:
      case MINUS:
        /* If the target is cc0, then these insns will take
***************
*** 1330,1333 ****
--- 1332,1337 ----
    int i;
  
+   CC_STATUS_INIT;
+ 
    c = INTVAL (operands[2]);
    if (c == 0)
***************
*** 1430,1444 ****
    int lucky2 = ((unsigned)REGNO (operands[2]) - 8) <= 1;
  
    if (lucky1)
!     if (lucky2)
!       output_asm_insn ("call .mul,2\n\tnop", operands);
!     else
!       {
! 	rtx xoperands[2];
! 	xoperands[0] = gen_rtx (REG, SImode,
! 				8 ^ (REGNO (operands[1]) == 8));
! 	xoperands[1] = operands[2];
! 	output_asm_insn ("call .mul,2\n\tmov %1,%0", xoperands);
!       }
    else if (lucky2)
      {
--- 1434,1461 ----
    int lucky2 = ((unsigned)REGNO (operands[2]) - 8) <= 1;
  
+   CC_STATUS_INIT;
+ 
    if (lucky1)
!     {
!       if (lucky2)
! 	{
! 	  if (REGNO (operands[1]) == REGNO (operands[2]))
! 	    {
! 	      if (REGNO (operands[1]) == 8)
! 		output_asm_insn ("mov %%o0,%%o1");
! 	      else
! 		output_asm_insn ("mov %%o1,%%o0");
! 	    }
! 	  output_asm_insn ("call .mul,2\n\tnop", operands);
! 	}
!       else
! 	{
! 	  rtx xoperands[2];
! 	  xoperands[0] = gen_rtx (REG, SImode,
! 				  8 ^ (REGNO (operands[1]) == 8));
! 	  xoperands[1] = operands[2];
! 	  output_asm_insn ("call .mul,2\n\tmov %1,%0", xoperands);
! 	}
!     }
    else if (lucky2)
      {
diff -rc2N gcc-1.33/output-spur.c gcc-1.34/output-spur.c
*** gcc-1.33/output-spur.c	Sun Jan  1 16:09:03 1989
--- gcc-1.34/output-spur.c	Wed Feb 22 11:56:07 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  static rtx find_addr_reg ();
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  static rtx find_addr_reg ();
diff -rc2N gcc-1.33/output-vax.c gcc-1.34/output-vax.c
*** gcc-1.33/output-vax.c	Sun Jul  3 15:22:37 1988
--- gcc-1.34/output-vax.c	Wed Feb 22 11:56:05 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include <stdio.h>
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include <stdio.h>
diff -rc2N gcc-1.33/output.h gcc-1.34/output.h
*** gcc-1.33/output.h	Sun Jul 31 16:18:41 1988
--- gcc-1.34/output.h	Wed Feb 22 11:56:03 1989
***************
*** 1,4 ****
! /* Declarations for insn-output.c.
!    These functions are defined in recog.c.  */
  
  /* Operand-predicate functions.  */
--- 1,20 ----
! /* Declarations for insn-output.c.  These functions are defined in recog.c.
!    Copyright (C) 1987 Free Software Foundation, Inc.
! 
! This file is part of GNU CC.
! 
! GNU CC is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 1, or (at your option)
! any later version.
! 
! GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Operand-predicate functions.  */
diff -rc2N gcc-1.33/print-tree.c gcc-1.34/print-tree.c
*** gcc-1.33/print-tree.c	Sat Dec 31 19:30:34 1988
--- gcc-1.34/print-tree.c	Wed Feb 22 11:56:00 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 240,243 ****
--- 239,248 ----
        if (!first) putc (' ', outfile);
        fputs ("used", outfile);
+       first = 0;
+     }
+   if (TREE_PERMANENT (node))
+     {
+       if (!first) putc (' ', outfile);
+       fputs ("permanent", outfile);
        first = 0;
      }
diff -rc2N gcc-1.33/real.h gcc-1.34/real.h
*** gcc-1.33/real.h	Sun Jan  1 17:21:49 1989
--- gcc-1.34/real.h	Wed Feb 22 11:55:58 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* If we are not cross-compiling, use a `double' to represent the
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* If we are not cross-compiling, use a `double' to represent the
diff -rc2N gcc-1.33/recog.c gcc-1.34/recog.c
*** gcc-1.33/recog.c	Mon Jan 23 02:43:41 1989
--- gcc-1.34/recog.c	Wed Feb 22 11:55:56 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 722,726 ****
     size of that mode.
  
!    We assume that the original address is valid and do not check it.  */
  
  int
--- 721,726 ----
     size of that mode.
  
!    We assume that the original address is valid and do not check it.
!    We require a strictly valid address, for the sake of use in reload.c.  */
  
  int
***************
*** 745,749 ****
        int good;
        INTVAL (y1) += GET_MODE_SIZE (mode) - 1;
!       good = memory_address_p (mode, y);
        /* In any case, restore old contents of memory.  */
        INTVAL (y1) = old;
--- 745,749 ----
        int good;
        INTVAL (y1) += GET_MODE_SIZE (mode) - 1;
!       good = strict_memory_address_p (mode, y);
        /* In any case, restore old contents of memory.  */
        INTVAL (y1) = old;
***************
*** 762,766 ****
    z = plus_constant (y, GET_MODE_SIZE (mode) - 1);
  
!   return memory_address_p (mode, z);
  }
  
--- 762,766 ----
    z = plus_constant (y, GET_MODE_SIZE (mode) - 1);
  
!   return strict_memory_address_p (mode, z);
  }
  
diff -rc2N gcc-1.33/recog.h gcc-1.34/recog.h
*** gcc-1.33/recog.h	Tue Dec  6 11:31:18 1988
--- gcc-1.34/recog.h	Wed Feb 22 11:55:54 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Recognize an insn and return its insn-code,
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Recognize an insn and return its insn-code,
diff -rc2N gcc-1.33/regclass.c gcc-1.34/regclass.c
*** gcc-1.33/regclass.c	Thu Jan 19 00:04:04 1989
--- gcc-1.34/regclass.c	Wed Feb 22 12:28:58 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 67,71 ****
--- 66,82 ----
  
  static char initial_call_used_regs[] = CALL_USED_REGISTERS;
+   
+ /* Indexed by hard register number, contains 1 for registers that are
+    fixed use -- i.e. in fixed_regs -- or a function value return register
+    or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM.  These are the
+    registers that cannot hold quantities across calls even if we are
+    willing to save and restore them.  */
+ 
+ char call_fixed_regs[FIRST_PSEUDO_REGISTER];
+ 
+ /* The same info as a HARD_REG_SET.  */
  
+ HARD_REG_SET call_fixed_reg_set;
+ 
  /* Indexed by hard register number, contains 1 for registers
     that are being used for global register decls.
***************
*** 222,228 ****
--- 233,250 ----
    CLEAR_HARD_REG_SET (fixed_reg_set);
    CLEAR_HARD_REG_SET (call_used_reg_set);
+   CLEAR_HARD_REG_SET (call_fixed_reg_set);
+ 
+   bcopy (fixed_regs, call_fixed_regs, sizeof call_fixed_regs);
+ #ifdef STRUCT_VALUE_REGNUM
+   call_fixed_regs[STRUCT_VALUE_REGNUM] = 1;
+ #endif
+ #ifdef STATIC_CHAIN_REGNUM
+   call_fixed_regs[STATIC_CHAIN_REGNUM] = 1;
+ #endif
  
    for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
      {
+       if (FUNCTION_VALUE_REGNO_P (i))
+ 	call_fixed_regs[i] = 1;
        if (fixed_regs[i])
  	SET_HARD_REG_BIT (fixed_reg_set, i);
***************
*** 229,232 ****
--- 251,256 ----
        if (call_used_regs[i])
  	SET_HARD_REG_BIT (call_used_reg_set, i);
+       if (call_fixed_regs[i])
+ 	SET_HARD_REG_BIT (call_fixed_reg_set, i);
      }
  }
diff -rc2N gcc-1.33/regs.h gcc-1.34/regs.h
*** gcc-1.33/regs.h	Thu Nov 17 10:42:00 1988
--- gcc-1.34/regs.h	Wed Feb 22 12:28:55 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 66,72 ****
  #define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])
  
! /* Indexed by N, gives 1 if (REG n) is live across a CALL_INSN.  */
  
! extern char *reg_crosses_call;
  
  /* Total number of instructions at which (REG n) is live.
--- 65,71 ----
  #define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])
  
! /* Indexed by N, gives number of CALL_INSNS across which (REG n) is live.  */
  
! extern int *reg_n_calls_crossed;
  
  /* Total number of instructions at which (REG n) is live.
***************
*** 127,128 ****
--- 126,140 ----
  
  extern rtx *regno_reg_rtx;
+ 
+ /* Flag set by local-alloc or global-alloc if they decide to allocate
+    something in a call-clobbered register.  */
+ 
+ extern int caller_save_needed;
+ 
+ /* Predicate to decide whether to give a hard reg to a pseudo which
+    is referenced REFS times and would need to be saved and restored
+    around a call CALLS times.  */
+ 
+ #ifndef CALLER_SAVE_PROFITABLE
+ #define CALLER_SAVE_PROFITABLE(REFS, CALLS)  (4 * (CALLS) < (REFS))
+ #endif
diff -rc2N gcc-1.33/reload.c gcc-1.34/reload.c
*** gcc-1.33/reload.c	Mon Jan 23 02:44:08 1989
--- gcc-1.34/reload.c	Wed Feb 22 12:28:53 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 98,101 ****
--- 97,104 ----
  			   reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
  			   Ignored otherwise (don't assume it is zero).
+    reload_in_reg	  rtx.  A reg for which reload_in is the equivalent.
+ 			   If reload_in is a symbol_ref which came from
+ 			   reg_equiv_constant, then this is the pseudo
+ 			   which has that symbol_ref as equivalent.
     reload_reg_rtx	  rtx.  This is the register to reload into.
  			   If it is zero when `find_reloads' returns,
***************
*** 118,121 ****
--- 121,125 ----
  char reload_optional[FIRST_PSEUDO_REGISTER];
  int reload_inc[FIRST_PSEUDO_REGISTER];
+ rtx reload_in_reg[FIRST_PSEUDO_REGISTER];
  char reload_nocombine[FIRST_PSEUDO_REGISTER];
  
***************
*** 215,219 ****
     output_reloadnum when we return; the return value applies to IN.
     Usually (presently always), when IN and OUT are nonzero,
!    these two values are equal, but the caller should be careful to
     distinguish them.  */
  
--- 219,223 ----
     output_reloadnum when we return; the return value applies to IN.
     Usually (presently always), when IN and OUT are nonzero,
!    the two reload-numbers are equal, but the caller should be careful to
     distinguish them.  */
  
***************
*** 362,365 ****
--- 366,370 ----
        reload_strict_low[i] = strict_low;
        reload_nocombine[i] = 0;
+       reload_in_reg[i] = *inloc;
  
        n_reloads++;
diff -rc2N gcc-1.33/reload.h gcc-1.34/reload.h
*** gcc-1.33/reload.h	Fri Sep 30 01:22:45 1988
--- gcc-1.34/reload.h	Wed Feb 22 12:28:49 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 24,27 ****
--- 23,27 ----
  extern rtx reload_in[FIRST_PSEUDO_REGISTER];
  extern rtx reload_out[FIRST_PSEUDO_REGISTER];
+ extern rtx reload_in_reg[FIRST_PSEUDO_REGISTER];
  extern enum reg_class reload_reg_class[FIRST_PSEUDO_REGISTER];
  extern enum machine_mode reload_inmode[FIRST_PSEUDO_REGISTER];
diff -rc2N gcc-1.33/reload1.c gcc-1.34/reload1.c
*** gcc-1.33/reload1.c	Wed Feb  1 20:03:17 1989
--- gcc-1.34/reload1.c	Wed Feb 22 12:28:47 1989
***************
*** 1,21 ****
  /* Reload pseudo regs into hard regs for insns that require hard regs.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Reload pseudo regs into hard regs for insns that require hard regs.
!    Copyright (C) 1987, 1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 74,77 ****
--- 73,80 ----
  static char *reg_has_output_reload;
  
+ /* Elt N nonzero if hard reg N is a reload-register for an output reload
+    in the current insn.  */
+ static char reg_is_output_reload[FIRST_PSEUDO_REGISTER];
+ 
  /* Element N is the constant value to which pseudo reg N is equivalent,
     or zero if pseudo reg N is not equivalent to a constant.
***************
*** 171,174 ****
--- 174,182 ----
  int reload_first_uid;
  
+ /* Flag set by local-alloc or global-alloc if anything is live in
+    a call-clobbered reg across calls.  */
+ 
+ int caller_save_needed;
+ 
  void mark_home_live ();
  static void reload_as_needed ();
***************
*** 181,184 ****
--- 189,193 ----
  static void delete_output_reload ();
  static void forget_old_reloads ();
+ static void forget_old_reloads_1 ();
  static void order_regs_for_reload ();
  static void eliminate_frame_pointer ();
***************
*** 781,784 ****
--- 790,802 ----
      }
  
+   /* Insert code to save and restore call-clobbered hard regs
+      around calls.  */
+ 
+   if (caller_save_needed)
+     {
+       frame_pointer_needed = 1;
+       save_call_clobbered_regs ();
+     }
+ 
    /* Now we know for certain whether we have a frame pointer.
       If not, correct all references to go through the stack pointer.
***************
*** 1336,1339 ****
--- 1354,1358 ----
    register int i;
    int this_block = 0;
+   rtx x;
  
    bzero (spill_reg_rtx, sizeof spill_reg_rtx);
***************
*** 1351,1363 ****
        if (basic_block_needs && this_block + 1 < n_basic_blocks
  	  && insn == basic_block_head[this_block+1])
! 	{
! 	  ++this_block;
! 	  /* When we enter a basic block which had no spilling,
! 	     forget any inherited reloads, since we might use those
! 	     same registers for allocated pseudos.  */
! 	  if (basic_block_needs != 0
! 	      && basic_block_needs[this_block] == 0)
! 	    bzero (reg_last_reload_reg, max_regno * sizeof (rtx));
! 	}
  
        if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
--- 1370,1374 ----
        if (basic_block_needs && this_block + 1 < n_basic_blocks
  	  && insn == basic_block_head[this_block+1])
! 	++this_block;
  
        if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
***************
*** 1364,1367 ****
--- 1375,1382 ----
  	  || GET_CODE (insn) == CALL_INSN)
  	{
+ 	  /* If insn has no reloads, we want these to be zero, down below.  */
+ 	  bzero (reg_has_output_reload, max_regno);
+ 	  bzero (reg_is_output_reload, FIRST_PSEUDO_REGISTER);
+ 
  	  if (GET_MODE (insn) == VOIDmode)
  	    n_reloads = 0;
***************
*** 1408,1412 ****
  	     (obeying register constraints).  That is correct; such reload
  	     registers ARE still valid.  */
! 	  forget_old_reloads (PATTERN (insn));
  	}
        /* A reload reg's contents are unknown after a label.  */
--- 1423,1444 ----
  	     (obeying register constraints).  That is correct; such reload
  	     registers ARE still valid.  */
! 	  note_stores (PATTERN (insn), forget_old_reloads_1);
! 
! 	  /* Likewise for regs altered by auto-increment in this insn.
! 	     But note that the reg-notes are not changed by reloading:
! 	     they still contain the pseudo-regs, not the spill regs.  */
! 	  for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
! 	    if (REG_NOTE_KIND (x) == REG_INC)
! 	      {
! 		/* See if this pseudo reg was reloaded in this insn.
! 		   If so, its last-reload info is still valid
! 		   because it is based on this insn's reload.  */
! 		for (i = 0; i < n_reloads; i++)
! 		  if (reload_out[i] == XEXP (x, 0))
! 		    break;
! 
! 		if (i != n_reloads)
! 		  forget_old_reloads_1 (XEXP (x, 0));
! 	      }
  	}
        /* A reload reg's contents are unknown after a label.  */
***************
*** 1435,1485 ****
  }
  
! /* If we see a pseudo-reg with a hard reg being stored into,
!    don't try to reuse an old reload reg
!    which previously contained a copy of it.  */
  
  static void
! forget_old_reloads (x)
       rtx x;
  {
!   if (GET_CODE (x) == SET && GET_CODE (SET_DEST (x)) == REG)
!     {
!       register int regno = REGNO (SET_DEST (x));
!       int nr;
  
!       if (regno >= FIRST_PSEUDO_REGISTER)
! 	nr = 1;
!       /* Don't do this for spill regs.  If a spill reg got in there
! 	 it is due to an output reload, which is still valid.  */
!       else if (spill_reg_order[regno] >= 0)
! 	nr = 0;
!       else
! 	{
! 	  int i;
! 	  nr = HARD_REGNO_NREGS (regno, GET_MODE (SET_DEST (x)));
! 	  /* Storing into a spilled-reg invalidates its contents.
! 	     This can happen if a block-local pseudo is allocated to that reg
! 	     and it wasn't spilled because this block's total need is 0.
! 	     Then some insn might have an optional reload and use this reg.  */
! 	  for (i = 0; i < nr; i++)
! 	    if (spill_reg_order[regno + i] >= 0
! 		&& reg_has_output_reload[regno + i] == 0)
! 	      reg_reloaded_contents[spill_reg_order[regno + i]] = -1;
! 	}
!       
!       while (nr-- > 0) reg_last_reload_reg[regno + nr] = 0;
!     }
!   else if (GET_CODE (x) == PARALLEL)
      {
!       register int i;
!       for (i = 0; i < XVECLEN (x, 0); i++)
! 	{
! 	  register rtx y = XVECEXP (x, 0, i);
! 	  if (GET_CODE (y) == SET && GET_CODE (SET_DEST (y)) == REG)
! 	    forget_old_reloads (y);
! 	}
!     }
  }
! 
  /* Comparison function for qsort to decide which of two reloads
     should be handled first.  *P1 and *P2 are the reload numbers.  */
--- 1467,1514 ----
  }
  
! /* Discard all record of any value reloaded from X,
!    or reloaded in X from someplace else;
!    unless X is an output reload reg of the current insn.  */
  
  static void
! forget_old_reloads_1 (x)
       rtx x;
  {
!   register int regno;
!   int nr;
  
!   if (GET_CODE (x) != REG)
!     return;
! 
!   regno = REGNO (x);
! 
!   if (regno >= FIRST_PSEUDO_REGISTER)
!     nr = 1;
!   else
      {
!       int i;
!       nr = HARD_REGNO_NREGS (regno, GET_MODE (x));
!       /* Storing into a spilled-reg invalidates its contents.
! 	 This can happen if a block-local pseudo is allocated to that reg
! 	 and it wasn't spilled because this block's total need is 0.
! 	 Then some insn might have an optional reload and use this reg.  */
!       for (i = 0; i < nr; i++)
! 	if (spill_reg_order[regno + i] >= 0
! 	    /* But don't do this if the reg actually serves as an output
! 	       reload reg in the current instruction.  */
! 	    && reg_is_output_reload[regno + i] == 0)
! 	  reg_reloaded_contents[spill_reg_order[regno + i]] = -1;
!     }
! 
!   /* Since value of X has changed,
!      forget any value previously copied from it.  */
! 
!   while (nr-- > 0)
!     /* But don't forget a copy if this is the output reload
!        that establishes the copy's validity.  */
!     if (reg_has_output_reload[regno + nr] == 0)
!       reg_last_reload_reg[regno + nr] = 0;
  }
! \f


  /* Comparison function for qsort to decide which of two reloads
     should be handled first.  *P1 and *P2 are the reload numbers.  */
***************
*** 1534,1538 ****
    bzero (reload_inherited, FIRST_PSEUDO_REGISTER);
    bzero (reload_reg_in_use, FIRST_PSEUDO_REGISTER);
-   bzero (reg_has_output_reload, max_regno);
  
    /* In order to be certain of getting the registers we need,
--- 1563,1566 ----
***************
*** 1617,1620 ****
--- 1645,1650 ----
  	else if (GET_CODE (reload_in[r]) == REG)
  	  regno = REGNO (reload_in[r]);
+ 	else if (GET_CODE (reload_in_reg[r]) == REG)
+ 	  regno = REGNO (reload_in_reg[r]);
  #if 0
  	/* This won't work, since REGNO can be a pseudo reg number.
***************
*** 1891,1899 ****
  	      reg_reloaded_contents[i] = nregno;
  	      reg_has_output_reload[nregno] = 1;
  	    }
  	  /* Maybe the spill reg contains a copy of reload_in.  */
! 	  else if (reload_out[r] == 0 && GET_CODE (reload_in[r]) == REG)
  	    {
! 	      register int nregno = REGNO (reload_in[r]);
  	      /* If there are two separate reloads (one in and one out)
  		 for the same (hard or pseudo) reg, set reg_last_reload_reg
--- 1921,1936 ----
  	      reg_reloaded_contents[i] = nregno;
  	      reg_has_output_reload[nregno] = 1;
+ 	      reg_is_output_reload[spill_regs[i]] = 1;
  	    }
  	  /* Maybe the spill reg contains a copy of reload_in.  */
! 	  else if (reload_out[r] == 0
! 		   && (GET_CODE (reload_in[r]) == REG
! 		       || GET_CODE (reload_in_reg[r]) == REG))
  	    {
! 	      register int nregno;
! 	      if (GET_CODE (reload_in[r]) == REG)
! 		nregno = REGNO (reload_in[r]);
! 	      else
! 		nregno = REGNO (reload_in_reg[r]);
  	      /* If there are two separate reloads (one in and one out)
  		 for the same (hard or pseudo) reg, set reg_last_reload_reg
***************
*** 1911,1914 ****
--- 1948,1963 ----
  	    reg_reloaded_contents[i] = -1;
  	}
+ #if 0
+       /* If a register gets output-reloaded from a non-spill register,
+ 	 that invalidates any previous reloaded copy of it.
+ 	 But forget_old_reloads_1 won't get to see it, because
+ 	 it thinks only about the original insn.  So invalidate it here.  */
+       if (i < 0 && reload_out[r] != 0 && GET_CODE (reload_out[r]) == REG)
+ 	{
+ 	  register int nregno = REGNO (reload_out[r]);
+ 	  reg_last_reload_reg[nregno] = 0;
+ 	  reg_has_output_reload[nregno] = 1;
+ 	}
+ #endif
      }
  
***************
*** 2168,2171 ****
--- 2217,2225 ----
  	  /* Output the reload insn.  */
  	  store_insn = emit_insn_after (gen_move_insn (old, reloadreg), insn);
+ 	  /* If this output reload doesn't come from a spill reg,
+ 	     clear any memory of reloaded copies of the pseudo reg.
+ 	     If this output reload comes from a spill reg,
+ 	     reg_has_output_reload will make this do nothing.  */
+ 	  note_stores (PATTERN (store_insn), forget_old_reloads_1);
  	  /* If final will look at death notes for this reg,
  	     put one on each output-reload insn.  */
***************
*** 2175,2178 ****
--- 2229,2261 ----
  		= gen_rtx (EXPR_LIST, REG_DEAD,
  			   reloadreg, REG_NOTES (store_insn));
+ 
+ 	  {
+ 	    /* Move all death-notes from the insn being reloaded
+ 	       to the output reload.
+ 	       This may err on the side of caution.
+ 	       If one insn gets >1 output reloads, this will move
+ 	       the death notes to the first output reload insn generated,
+ 	       which will be the last one in the insn stream.  */
+ 
+ 	    /* The note we will examine next.  */
+ 	    rtx reg_notes = REG_NOTES (insn);
+ 	    /* The place that pointed to this note.  */
+ 	    rtx *prev_reg_note = &REG_NOTES (insn);
+ 
+ 	    while (reg_notes)
+ 	      {
+ 		rtx next_reg_notes = XEXP (reg_notes, 1);
+ 		if (REG_NOTE_KIND (reg_notes) == REG_DEAD)
+ 		  {
+ 		    *prev_reg_note = next_reg_notes;
+ 		    XEXP (reg_notes, 1) = REG_NOTES (store_insn);
+ 		    REG_NOTES (store_insn) = reg_notes;
+ 		  }
+ 		else
+ 		  prev_reg_note = &XEXP (reg_notes, 1);
+ 
+ 		reg_notes = next_reg_notes;
+ 	      }
+ 	  }
  #endif
  	}
***************
*** 2382,2386 ****
  {
    int value = 0;
!   int regno = REGNO (reg);
  
    /* We win if this register is a general register
--- 2465,2469 ----
  {
    int value = 0;
!   int regno = true_regnum (reg);
  
    /* We win if this register is a general register
diff -rc2N gcc-1.33/rtl.c gcc-1.34/rtl.c
*** gcc-1.33/rtl.c	Sun Jan  1 16:16:25 1989
--- gcc-1.34/rtl.c	Wed Feb 22 12:28:41 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/rtl.def gcc-1.34/rtl.def
*** gcc-1.33/rtl.def	Sun Jan  1 16:16:10 1989
--- gcc-1.34/rtl.def	Wed Feb 22 12:29:37 1989
***************
*** 6,23 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 6,22 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 35,44 ****
  
     2.  The name of the rtx in the external ASCII format read by
!    rtl.read_rtl(), and printed by rtl.print_rtl().
!    These names are stored in rtl.rtx_name[].
     By convention these are the internal (field 1) names in lower_case.
  
     3.  The print format, and type of each rtx->fld[] (field) in this rtx.
!    These formats are stored in rtl.rtx_format[].
     The meaning of the formats is documented in front of this array in rtl.c
     
--- 34,43 ----
  
     2.  The name of the rtx in the external ASCII format read by
!    read_rtx(), and printed by print_rtx().
!    These names are stored in rtx_name[].
     By convention these are the internal (field 1) names in lower_case.
  
     3.  The print format, and type of each rtx->fld[] (field) in this rtx.
!    These formats are stored in rtx_format[].
     The meaning of the formats is documented in front of this array in rtl.c
     
***************
*** 399,402 ****
--- 398,404 ----
       2:  else expr */
  DEF_RTL_EXPR(IF_THEN_ELSE, "if_then_else", "eee")
+ 
+ /* Comparison, produces a condition code result.  */
+ DEF_RTL_EXPR(COMPARE, "compare", "ee")
  
  /* plus */
diff -rc2N gcc-1.33/rtl.h gcc-1.34/rtl.h
*** gcc-1.33/rtl.h	Sun Jan  1 23:02:24 1989
--- gcc-1.34/rtl.h	Wed Feb 22 12:28:38 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/sdbout.c gcc-1.34/sdbout.c
*** gcc-1.33/sdbout.c	Fri Nov 18 18:55:25 1988
--- gcc-1.34/sdbout.c	Wed Feb 22 12:28:35 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/sparc.md gcc-1.34/sparc.md
*** gcc-1.33/sparc.md	Sat Jan 28 19:45:37 1989
--- gcc-1.34/sparc.md	Wed Feb 22 12:31:07 1989
***************
*** 5,22 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 5,21 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 32,37 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "arith_operand" "r,rI")
! 	       (match_operand:SI 1 "arith_operand" "I,r")))]
    ""
    "*
--- 31,36 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "arith_operand" "r,rI")
! 		 (match_operand:SI 1 "arith_operand" "I,r")))]
    ""
    "*
***************
*** 47,52 ****
  (define_expand "cmpdf"
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "nonmemory_operand" "f,fG")
! 		  (match_operand:DF 1 "nonmemory_operand" "G,f")))]
    ""
    "emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, DFmode, 32)));")
--- 46,51 ----
  (define_expand "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "nonmemory_operand" "f,fG")
! 		 (match_operand:DF 1 "nonmemory_operand" "G,f")))]
    ""
    "emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, DFmode, 32)));")
***************
*** 54,59 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:DF (match_operand:DF 0 "nonmemory_operand" "f,fG")
! 		  (match_operand:DF 1 "nonmemory_operand" "G,f")))]
    ""
    "*
--- 53,58 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:DF 0 "nonmemory_operand" "f,fG")
! 		 (match_operand:DF 1 "nonmemory_operand" "G,f")))]
    ""
    "*
***************
*** 73,78 ****
  (define_expand "cmpsf"
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "nonmemory_operand" "f,fG")
! 		  (match_operand:SF 1 "nonmemory_operand" "G,f")))]
    ""
    "emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, SFmode, 32)));")
--- 72,77 ----
  (define_expand "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "nonmemory_operand" "f,fG")
! 		 (match_operand:SF 1 "nonmemory_operand" "G,f")))]
    ""
    "emit_insn (gen_rtx (USE, VOIDmode, gen_rtx (REG, SFmode, 32)));")
***************
*** 80,85 ****
  (define_insn ""
    [(set (cc0)
! 	(minus:SF (match_operand:SF 0 "nonmemory_operand" "f,fG")
! 		  (match_operand:SF 1 "nonmemory_operand" "G,f")))]
    ""
    "*
--- 79,84 ----
  (define_insn ""
    [(set (cc0)
! 	(compare (match_operand:SF 0 "nonmemory_operand" "f,fG")
! 		 (match_operand:SF 1 "nonmemory_operand" "G,f")))]
    ""
    "*
***************
*** 374,379 ****
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(minus (match_operand:SI 2 "general_operand" "r,rI")
! 				(match_operand:SI 3 "general_operand" "I,r"))
  			 (const_int 0)]))]
    ""
--- 373,378 ----
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(compare (match_operand:SI 2 "general_operand" "r,rI")
! 				  (match_operand:SI 3 "general_operand" "I,r"))
  			 (const_int 0)]))]
    ""
***************
*** 402,407 ****
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(minus:DF (match_operand:DF 2 "general_operand" "f,fG")
! 				   (match_operand:DF 3 "general_operand" "G,f"))
  			 (const_int 0)]))]
    ""
--- 401,406 ----
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(compare (match_operand:DF 2 "general_operand" "f,fG")
! 				  (match_operand:DF 3 "general_operand" "G,f"))
  			 (const_int 0)]))]
    ""
***************
*** 438,443 ****
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(minus:SF (match_operand:SF 2 "general_operand" "f,fG")
! 				   (match_operand:SF 3 "general_operand" "G,f"))
  			 (const_int 0)]))]
    ""
--- 437,442 ----
    [(set (match_operand:SI 0 "general_operand" "=r,r")
  	(match_operator 1 "eq_or_neq"
! 			[(compare (match_operand:SF 2 "general_operand" "f,fG")
! 				  (match_operand:SF 3 "general_operand" "G,f"))
  			 (const_int 0)]))]
    ""
***************
*** 1697,1701 ****
        cc_status.flags |= CC_KNOW_HI_G1;
        cc_status.mdep = XEXP (operands[1], 0);
!       return \"sethi %%hi(%m1),%%g1\;ldsb [%%g1+%%lo(a1)],%0\";
      }
    return \"ldsb %1,%0\";
--- 1696,1700 ----
        cc_status.flags |= CC_KNOW_HI_G1;
        cc_status.mdep = XEXP (operands[1], 0);
!       return \"sethi %%hi(%m1),%%g1\;ldsb [%%g1+%%lo(%m1)],%0\";
      }
    return \"ldsb %1,%0\";
***************
*** 1713,1717 ****
        cc_status.flags |= CC_KNOW_HI_G1;
        cc_status.mdep = XEXP (operands[1], 0);
!       return \"sethi %%hi(%m1),%%g1\;ldub [%%g1+%%lo(a1)],%0\";
      }
    return \"ldub %1,%0\";
--- 1712,1716 ----
        cc_status.flags |= CC_KNOW_HI_G1;
        cc_status.mdep = XEXP (operands[1], 0);
!       return \"sethi %%hi(%m1),%%g1\;ldub [%%g1+%%lo(%m1)],%0\";
      }
    return \"ldub %1,%0\";
diff -rc2N gcc-1.33/spur.md gcc-1.34/spur.md
*** gcc-1.33/spur.md	Thu Sep 29 20:16:51 1988
--- gcc-1.34/spur.md	Wed Feb 22 12:31:04 1989
***************
*** 4,21 ****
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 4,20 ----
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 38,43 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "nonmemory_operand" "rK")
! 	       (match_operand:SI 1 "nonmemory_operand" "rK")))]
    ""
    "*
--- 37,42 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "nonmemory_operand" "rK")
! 		 (match_operand:SI 1 "nonmemory_operand" "rK")))]
    ""
    "*
diff -rc2N gcc-1.33/stab.def gcc-1.34/stab.def
*** gcc-1.33/stab.def	Tue Sep 13 17:59:23 1988
--- gcc-1.34/stab.def	Fri Feb 10 13:33:55 1989
***************
*** 136,140 ****
  __define_stab (N_PSYM, 0xa0, "PSYM")
  
! /* Automatic variable in the stack.  Value is offset from frame pointer.  */
  __define_stab (N_LSYM, 0x80, "LSYM")
  
--- 136,141 ----
  __define_stab (N_PSYM, 0xa0, "PSYM")
  
! /* Automatic variable in the stack.  Value is offset from frame pointer.
!    Also used for type descriptions.  */
  __define_stab (N_LSYM, 0x80, "LSYM")
  
diff -rc2N gcc-1.33/stmt.c gcc-1.34/stmt.c
*** gcc-1.33/stmt.c	Sat Jan 28 19:49:49 1989
--- gcc-1.34/stmt.c	Wed Feb 22 12:28:32 1989
***************
*** 1,21 ****
  /* Expands front end tree to back end RTL for GNU C-Compiler
!    Copyright (C) 1987,1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Expands front end tree to back end RTL for GNU C-Compiler
!    Copyright (C) 1987, 1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 73,76 ****
--- 72,80 ----
  int current_function_returns_struct;
  
+ /* Nonzero if function being compiled needs to
+    return the address of where it has put a structure value.  */
+ 
+ int current_function_returns_pcc_struct;
+ 
  /* Nonzero if function being compiled needs to be passed a static chain.  */
  
***************
*** 110,113 ****
--- 114,122 ----
  rtx stack_slot_list;
  
+ /* Filename and line number of last line-number note,
+    whether we actually emitted it or not.  */
+ char *emit_filename;
+ int emit_lineno;
+ 
  /* Insn after which register parms and SAVE_EXPRs are born, if nonopt.  */
  static rtx parm_birth_insn;
***************
*** 673,677 ****
  	 that corresponds to this block, so that ultimately
  	 this block's cleanups will be executed by the code above.  */
!       else
  	{
  	  tree lists = f->cleanup_list_list;
--- 682,688 ----
  	 that corresponds to this block, so that ultimately
  	 this block's cleanups will be executed by the code above.  */
!       /* Note: if THISBLOCK == 0 and we have a label that hasn't appeared,
! 	 it means the label is undefined.  That's erroneous, but possible.  */
!       else if (thisblock != 0)
  	{
  	  tree lists = f->cleanup_list_list;
***************
*** 875,880 ****
        for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
  	{
- 	  tree val = TREE_VALUE (tail);
- 
  	  XVECEXP (body, 0, i)
  	    = gen_rtx (SET, VOIDmode,
--- 886,889 ----
***************
*** 948,952 ****
    if (extra_warnings && expr_stmts_for_value == 0 && !TREE_VOLATILE (exp)
        && exp != error_mark_node)
!     warning ("statement with no effect");
    last_expr_type = TREE_TYPE (exp);
    if (! flag_syntax_only)
--- 957,962 ----
    if (extra_warnings && expr_stmts_for_value == 0 && !TREE_VOLATILE (exp)
        && exp != error_mark_node)
!     warning_with_file_and_line (emit_filename, emit_lineno,
! 				"statement with no effect");
    last_expr_type = TREE_TYPE (exp);
    if (! flag_syntax_only)
***************
*** 1301,1305 ****
  #ifdef FUNCTION_EPILOGUE
  #ifdef HAVE_return
!   if (! HAVE_return)
      expand_goto_internal (0, return_label, last_insn);
    else
--- 1311,1315 ----
  #ifdef FUNCTION_EPILOGUE
  #ifdef HAVE_return
!   if (! HAVE_return || current_function_returns_pcc_struct)
      expand_goto_internal (0, return_label, last_insn);
    else
***************
*** 1325,1338 ****
       tree retval;
  {
-   /* If there are any cleanups to be performed, then they will
-      be inserted in front of our `last_insn'.  It is desirable
-      that the last_insn, for such purposes, should be the
-      last insn before computing the return value.  Otherwise, cleanups
-      which call functions can clobber the return value.  */
-   rtx last_insn = get_last_insn ();
    register rtx val = 0;
    register rtx op0;
    tree retval_rhs;
  
    if (TREE_CODE (retval) == RESULT_DECL)
      retval_rhs = retval;
--- 1335,1353 ----
       tree retval;
  {
    register rtx val = 0;
    register rtx op0;
    tree retval_rhs;
+   int cleanups;
+   struct nesting *block;
  
+   /* Are any cleanups needed?  E.g. C++ destructors to be run?  */
+   cleanups = 0;
+   for (block = block_stack; block; block = block->next)
+     if (block->data.block.cleanups != 0)
+       {
+ 	cleanups = 1;
+ 	break;
+       }
+ 
    if (TREE_CODE (retval) == RESULT_DECL)
      retval_rhs = retval;
***************
*** 1367,1371 ****
  			    tail_recursion_reentry);
  	}
!       expand_goto_internal (0, tail_recursion_label, last_insn);
        emit_barrier ();
        return;
--- 1382,1386 ----
  			    tail_recursion_reentry);
  	}
!       expand_goto_internal (0, tail_recursion_label, get_last_insn ());
        emit_barrier ();
        return;
***************
*** 1372,1376 ****
      }
  #ifdef HAVE_return
!   if (HAVE_return)
      {
        /* If this is  return x == y;  then generate
--- 1387,1392 ----
      }
  #ifdef HAVE_return
!   if (HAVE_return && ! cleanups
!       && ! current_function_returns_pcc_struct)
      {
        /* If this is  return x == y;  then generate
***************
*** 1405,1415 ****
      }
  #endif /* HAVE_return */
-   val = expand_expr (retval, 0, VOIDmode, 0);
-   emit_queue ();
  
!   if (GET_CODE (val) == REG)
!     emit_insn (gen_rtx (USE, VOIDmode, val));
  
!   expand_null_return_1 (last_insn);
  }
  
--- 1421,1454 ----
      }
  #endif /* HAVE_return */
  
!   if (cleanups && GET_CODE (DECL_RTL (DECL_RESULT (this_function))) == REG)
!     {
!       rtx last_insn;
!       /* Calculate the return value into a pseudo reg.  */
!       val = expand_expr (retval_rhs, 0, VOIDmode, 0);
!       emit_queue ();
!       /* Put the cleanups here.  */
!       last_insn = get_last_insn ();
!       /* Copy the value into hard return reg.  */
!       emit_move_insn (DECL_RTL (DECL_RESULT (this_function)), val);
!       val = DECL_RTL (DECL_RESULT (this_function));
! 
!       if (GET_CODE (val) == REG)
! 	emit_insn (gen_rtx (USE, VOIDmode, val));
!       expand_null_return_1 (last_insn);
!     }
!   else
!     {
!       /* No cleanups or no hard reg used;
! 	 calculate value into hard return reg
! 	 and let cleanups come after.  */
!       val = expand_expr (retval, 0, VOIDmode, 0);
!       emit_queue ();
  
!       val = DECL_RTL (DECL_RESULT (this_function));
!       if (GET_CODE (val) == REG)
! 	emit_insn (gen_rtx (USE, VOIDmode, val));
!       expand_null_return ();
!     }
  }
  
***************
*** 2170,2174 ****
    tree index_type;
    tree nominal_type;
-   tree value;
  
    /* Fail if not inside a real case statement.  */
--- 2209,2212 ----
***************
*** 3026,3030 ****
       rtx var;
  {
-   register rtx insn;
    extern rtx sequence_stack;
    rtx stack = sequence_stack;
--- 3064,3067 ----
***************
*** 3302,3306 ****
  #ifdef BYTES_BIG_ENDIAN
    offset += (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
! 	     - MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
  #endif
    addr = plus_constant (addr, offset);
--- 3339,3343 ----
  #ifdef BYTES_BIG_ENDIAN
    offset += (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))))
! 	     - MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
  #endif
    addr = plus_constant (addr, offset);
***************
*** 3890,3893 ****
--- 3927,3931 ----
  		  /* layout_decl may set this.  */
  		  || TREE_ADDRESSABLE (parm)
+ 		  || TREE_VOLATILE (parm)
  		  /* If -ffloat-store specified, don't put explicit
  		     float variables into registers.  */
***************
*** 4036,4040 ****
  	  && regno_uninitialized (REGNO (DECL_RTL (decl))))
  	warning_with_decl (decl,
! 			   "variable `%s' used uninitialized in this function");
        if (TREE_CODE (decl) == VAR_DECL
  	  && GET_CODE (DECL_RTL (decl)) == REG
--- 4074,4078 ----
  	  && regno_uninitialized (REGNO (DECL_RTL (decl))))
  	warning_with_decl (decl,
! 			   "`%s' may be used uninitialized in this function");
        if (TREE_CODE (decl) == VAR_DECL
  	  && GET_CODE (DECL_RTL (decl)) == REG
***************
*** 4120,4126 ****
    current_function_calls_setjmp = 0;
  
!   /* Nonzero if this function needs an arg saying where to store value.  */
!   current_function_returns_struct
!     = (DECL_MODE (DECL_RESULT (current_function_decl)) == BLKmode);
  
    /* Make the label for return statements to jump to, if this machine
--- 4158,4163 ----
    current_function_calls_setjmp = 0;
  
!   current_function_returns_pcc_struct = 0;
!   current_function_returns_struct = 0;
  
    /* Make the label for return statements to jump to, if this machine
***************
*** 4127,4131 ****
       does not have a one-instruction return.  */
  #ifdef HAVE_return
!   if (HAVE_return)
      return_label = 0;
    else
--- 4164,4168 ----
       does not have a one-instruction return.  */
  #ifdef HAVE_return
!   if (HAVE_return && ! current_function_returns_pcc_struct)
      return_label = 0;
    else
***************
*** 4181,4185 ****
    /* Initialize rtx used to return the value.  */
  
!   if (DECL_MODE (DECL_RESULT (subr)) == BLKmode)
      {
        /* Returning something that won't go in a register.  */
--- 4218,4228 ----
    /* Initialize rtx used to return the value.  */
  
!   /* Decide whether to return the value in memory or in a register.  */
!   if (DECL_MODE (DECL_RESULT (current_function_decl)) == BLKmode
!       || (flag_pcc_struct_return
! 	  && ((TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl)))
! 	       == RECORD_TYPE)
! 	      || (TREE_CODE (TREE_TYPE (DECL_RESULT (current_function_decl)))
! 		  == UNION_TYPE))))
      {
        /* Returning something that won't go in a register.  */
***************
*** 4186,4192 ****
        register rtx value_address;
  
!       /* Expect to be passed the address of a place to store the value.  */
!       value_address = gen_reg_rtx (Pmode);
!       emit_move_insn (value_address, struct_value_incoming_rtx);
        DECL_RTL (DECL_RESULT (subr))
  	= gen_rtx (MEM, DECL_MODE (DECL_RESULT (subr)),
--- 4229,4247 ----
        register rtx value_address;
  
! #ifdef PCC_STATIC_STRUCT_RETURN
!       if (flag_pcc_struct_return)
! 	{
! 	  int size = int_size_in_bytes (TREE_TYPE (DECL_RESULT (subr)));
! 	  value_address = assemble_static_space (size);
! 	  current_function_returns_pcc_struct = 1;
! 	}
!       else
! #endif
! 	{
! 	  /* Expect to be passed the address of a place to store the value.  */
! 	  value_address = gen_reg_rtx (Pmode);
! 	  emit_move_insn (value_address, struct_value_incoming_rtx);
! 	  current_function_returns_struct = 1;
! 	}
        DECL_RTL (DECL_RESULT (subr))
  	= gen_rtx (MEM, DECL_MODE (DECL_RESULT (subr)),
***************
*** 4194,4197 ****
--- 4249,4253 ----
      }
    else
+     /* Scalar, returned in a register.  */
  #ifdef FUNCTION_OUTGOING_VALUE
      DECL_RTL (DECL_RESULT (subr))
***************
*** 4245,4249 ****
    /* If returning a structure, arrange to return the address of the value
       in a place where debuggers expect to find it.  */
!   if (DECL_MODE (DECL_RESULT (current_function_decl)) == BLKmode)
      {
        rtx value_address = XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
--- 4301,4305 ----
    /* If returning a structure, arrange to return the address of the value
       in a place where debuggers expect to find it.  */
!   if (current_function_returns_struct)
      {
        rtx value_address = XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
***************
*** 4291,4295 ****
       If there will be no epilogue, write a return instruction.  */
  #ifdef HAVE_return
!   if (HAVE_return)
      emit_jump_insn (gen_return ());
    else
--- 4347,4351 ----
       If there will be no epilogue, write a return instruction.  */
  #ifdef HAVE_return
!   if (HAVE_return && ! current_function_returns_pcc_struct)
      emit_jump_insn (gen_return ());
    else
***************
*** 4297,4300 ****
--- 4353,4372 ----
      emit_label (return_label);
  
+   /* If returning a structure PCC style,
+      really return the address of where we put the structure.
+      Do this after the return label, since all returns must
+      do it.  */
+   if (current_function_returns_pcc_struct)
+     {
+       rtx value_address = XEXP (DECL_RTL (DECL_RESULT (current_function_decl)), 0);
+       tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
+       rtx outgoing
+ 	= hard_function_value (build_pointer_type (type),
+ 			       current_function_decl);
+ 
+       emit_move_insn (outgoing, value_address);
+       use_variable (outgoing);
+     }
+ 
    /* Fix up any gotos that jumped out to the outermost
       binding level of the function.
***************
*** 4306,4309 ****
    fixup_gotos (0, 0, 0, get_insns (), 0);
  }
- 
- 
--- 4378,4379 ----
diff -rc2N gcc-1.33/stor-layout.c gcc-1.34/stor-layout.c
*** gcc-1.33/stor-layout.c	Mon Jan 23 17:37:08 1989
--- gcc-1.34/stor-layout.c	Wed Feb 22 12:28:28 1989
***************
*** 1,21 ****
  /* C-compiler utilities for types and variables storage layout
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* C-compiler utilities for types and variables storage layout
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/stupid.c gcc-1.34/stupid.c
*** gcc-1.33/stupid.c	Thu Dec 15 23:51:40 1988
--- gcc-1.34/stupid.c	Wed Feb 22 12:28:25 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 249,253 ****
  	  class = reg_preferred_class (r);
  
! 	  reg_renumber[r] = stupid_find_reg (reg_crosses_call[r], class,
  					     PSEUDO_REGNO_MODE (r),
  					     reg_where_born[r],
--- 248,252 ----
  	  class = reg_preferred_class (r);
  
! 	  reg_renumber[r] = stupid_find_reg (reg_n_calls_crossed[r], class,
  					     PSEUDO_REGNO_MODE (r),
  					     reg_where_born[r],
***************
*** 260,264 ****
  	 try any reg.  */
        if (reg_renumber[r] == -1)
! 	reg_renumber[r] = stupid_find_reg (reg_crosses_call[r], GENERAL_REGS,
  					   PSEUDO_REGNO_MODE (r),
  					   reg_where_born[r],
--- 259,264 ----
  	 try any reg.  */
        if (reg_renumber[r] == -1)
! 	reg_renumber[r] = stupid_find_reg (reg_n_calls_crossed[r],
! 					   GENERAL_REGS,
  					   PSEUDO_REGNO_MODE (r),
  					   reg_where_born[r],
***************
*** 410,414 ****
  
  	      if (last_call_suid < reg_where_dead[regno])
! 		reg_crosses_call[regno] = 1;
  	    }
  	}
--- 410,414 ----
  
  	      if (last_call_suid < reg_where_dead[regno])
! 		reg_n_calls_crossed[regno] += 1;
  	    }
  	}
diff -rc2N gcc-1.33/symout.c gcc-1.34/symout.c
*** gcc-1.33/symout.c	Tue Jan 31 03:15:45 1989
--- gcc-1.34/symout.c	Wed Feb 22 12:28:23 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/symseg.h gcc-1.34/symseg.h
*** gcc-1.33/symseg.h	Wed Feb  3 11:19:13 1988
--- gcc-1.34/symseg.h	Wed Feb 22 12:28:20 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Format of GDB symbol table data.
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Format of GDB symbol table data.
diff -rc2N gcc-1.33/texinfo.tex gcc-1.34/texinfo.tex
*** gcc-1.33/texinfo.tex	Tue Jan 31 00:00:37 1989
--- gcc-1.34/texinfo.tex	Thu Feb 23 16:12:35 1989
***************
*** 3,101 ****
  %   Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
  
! %		       NO WARRANTY
  
! %  BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
! %NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
! %WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
! %RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
! %WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
! %BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
! %FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
! %AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
! %DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
! %CORRECTION.
! 
! % IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
! %STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
! %WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
! %LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
! %OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
! %USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
! %DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
! %A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
! %PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
! %DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
! 
! %		GENERAL PUBLIC LICENSE TO COPY
! 
! %  1. You may copy and distribute verbatim copies of this source file
! %as you receive it, in any medium, provided that you conspicuously
! %and appropriately publish on each copy a valid copyright notice
! %"Copyright (C) 1986 Richard M. Stallman"; and include
! %following the copyright notice a verbatim copy of the above disclaimer
! %of warranty and of this License.
! 
! %  2. You may modify your copy or copies of this source file or
! %any portion of it, and copy and distribute such modifications under
! %the terms of Paragraph 1 above, provided that you also do the following:
! 
! %    a) cause the modified files to carry prominent notices stating
! %    that you changed the files and the date of any change; and
! 
! %    b) cause the whole of any work that you distribute or publish,
! %    that in whole or in part contains or is a derivative of this
! %    program or any part thereof, to be licensed at no charge to all
! %    third parties on terms identical to those contained in this
! %    License Agreement (except that you may choose to grant more extensive
! %    warranty protection to some or all third parties, at your option).
! 
! %    c) You may charge a distribution fee for the physical act of
! %    transferring a copy, and you may at your option offer warranty
! %    protection in exchange for a fee.
! 
! %Mere aggregation of another unrelated program with this program (or its
! %derivative) on a volume of a storage or distribution medium does not bring
! %the other program under the scope of these terms.
! 
! %  3. You may copy and distribute this program (or a portion or derivative
! %of it, under Paragraph 2) in object code or executable form under the terms
! %of Paragraphs 1 and 2 above provided that you also do one of the following:
! 
! %    a) accompany it with the complete corresponding machine-readable
! %    source code, which must be distributed under the terms of
! %    Paragraphs 1 and 2 above; or,
! 
! %    b) accompany it with a written offer, valid for at least three
! %    years, to give any third party free (except for a nominal
! %    shipping charge) a complete machine-readable copy of the
! %    corresponding source code, to be distributed under the terms of
! %    Paragraphs 1 and 2 above; or,
! 
! %    c) accompany it with the information you received as to where the
! %    corresponding source code may be obtained.  (This alternative is
! %    allowed only for noncommercial distribution and only if you
! %    received the program in object code or executable form alone.)
! 
! %For an executable file, complete source code means all the source code for
! %all modules it contains; but, as a special exception, it need not include
! %source code for modules which are standard libraries that accompany the
! %operating system on which the executable file runs.
! 
! %  4. You may not copy, sublicense, distribute or transfer this program
! %except as expressly provided under this License Agreement.  Any attempt
! %otherwise to copy, sublicense, distribute or transfer this program is void and
! %your rights to use the program under this License agreement shall be
! %automatically terminated.  However, parties who have received computer
! %software programs from you with this License Agreement will not have
! %their licenses terminated so long as such parties remain in full compliance.
! 
! %  5. If you wish to incorporate parts of this program into other free
! %programs whose distribution conditions are different, write to the Free
! %Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
! %worked out a simple rule that can be stated here, but we will often permit
! %this.  We will be guided by the two goals of preserving the free status of
! %all derivatives of our free software and of promoting the sharing and reuse of
! %software.
  
  %In other words, you are welcome to use, share and improve this program.
  %You are forbidden to forbid anyone else to use, share and improve
--- 3,21 ----
  %   Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
  
! %GNU CC is free software; you can redistribute it and/or modify
! %it under the terms of the GNU General Public License as published by
! %the Free Software Foundation; either version 1, or (at your option)
! %any later version.
  
! %GNU CC is distributed in the hope that it will be useful,
! %but WITHOUT ANY WARRANTY; without even the implied warranty of
! %MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! %GNU General Public License for more details.
! 
! %You should have received a copy of the GNU General Public License
! %along with GNU CC; see the file COPYING.  If not, write to
! %the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
+ 
  %In other words, you are welcome to use, share and improve this program.
  %You are forbidden to forbid anyone else to use, share and improve
***************
*** 102,106 ****
  %what you give them.   Help stamp out software-hoarding!
  
! \def\texinfoversion{1.21}
  \message{Loading texinfo package [Version \texinfoversion]:}
  \message{}
--- 22,26 ----
  %what you give them.   Help stamp out software-hoarding!
  
! \def\texinfoversion{1.22}
  \message{Loading texinfo package [Version \texinfoversion]:}
  \message{}
***************
*** 1197,1212 ****
  }
  
  % Define @majorheading, @heading and @subheading
  
! \outer\def\majorheading #1{%
  {\advance\chapheadingskip by 10pt \chapbreak }%
  {\chapfonts \line{\rm #1\hfill}}\bigskip \par\penalty 200}
  
! \outer\def\chapheading #1{\chapbreak %
  {\chapfonts \line{\rm #1\hfill}}\bigskip \par\penalty 200}
  
! \let\heading=\secheadingi
! \let\subheading=\subsecheadingi
! \let\subsubheading=\subsubsecheadingi
  
  % These macros generate a chapter, section, etc. heading only
--- 1117,1146 ----
  }
  
+ % These are variants which are not "outer", so they can appear in @ifinfo.
+ \def\infounnumbered{\parsearg\unnumberedzzz}
+ \def\infounnumberedsec{\parsearg\unnumberedseczzz}
+ \def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+ \def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+ 
+ \def\infoappendix{\parsearg\appendixzzz}
+ \def\infoappendixsec{\parsearg\appendixseczzz}
+ \def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+ \def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+ 
+ \def\infochapter{\parsearg\chapterzzz}
+ \def\infosection{\parsearg\sectionzzz}
+ \def\infosubsection{\parsearg\subsectionzzz}
+ \def\infosubsubsection{\parsearg\subsubsectionzzz}
+ 
  % Define @majorheading, @heading and @subheading
  
! \def\majorheading #1{%
  {\advance\chapheadingskip by 10pt \chapbreak }%
  {\chapfonts \line{\rm #1\hfill}}\bigskip \par\penalty 200}
  
! \def\chapheading #1{\chapbreak %
  {\chapfonts \line{\rm #1\hfill}}\bigskip \par\penalty 200}
  
! \def\heading{\parsearg\secheadingi}
  
  % These macros generate a chapter, section, etc. heading only
***************
*** 1307,1310 ****
--- 1241,1245 ----
  {\subsubsecfonts \line{\rm#2.#3.#4.#5\enspace #1\hfill}}%
  \ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
+ 
  
  \message{toc printing,}
diff -rc2N gcc-1.33/tm-3b1.h gcc-1.34/tm-3b1.h
*** gcc-1.33/tm-3b1.h	Fri Jan 27 03:20:15 1989
--- gcc-1.34/tm-3b1.h	Wed Feb 22 12:28:17 1989
***************
*** 9,26 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #define SGS_3B1
--- 9,25 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #define SGS_3B1
***************
*** 455,456 ****
--- 454,466 ----
  #define SDB_GENERATE_FAKE(BUFFER, NUMBER) \
    sprintf ((BUFFER), "~%dfake", (NUMBER));
+ 
+ /* Define subroutines to call to handle multiply, divide, and remainder.
+    Use the subroutines that the 3b1's library provides.
+    The `*' prevents an underscore from being prepended by the compiler.  */
+ 
+ #define DIVSI3_LIBCALL "*ldiv"
+ #define UDIVSI3_LIBCALL "*uldiv"
+ #define MODSI3_LIBCALL "*lrem"
+ #define UMODSI3_LIBCALL "*ulrem"
+ #define MULSI3_LIBCALL "*lmul"
+ #define UMULSI3_LIBCALL "*ulmul"
diff -rc2N gcc-1.33/tm-alliant.h gcc-1.34/tm-alliant.h
*** gcc-1.33/tm-alliant.h	Wed Feb  1 20:18:21 1989
--- gcc-1.34/tm-alliant.h	Wed Feb 22 12:28:14 1989
***************
*** 1,21 ****
  /* Definitions of target machine for GNU compiler.  Alliant FX/8 version.
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Definitions of target machine for GNU compiler.  Alliant FX/8 version.
!    Copyright (C) 1987, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 439,442 ****
--- 438,445 ----
  #define FRAME_GROWS_DOWNWARD
  
+ /* Define this if should default to -fcaller-saves.  */
+ 
+ #define DEFAULT_CALLER_SAVES
+ 
  /* Offset within stack frame to start allocating local variables at.
     If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
***************
*** 489,492 ****
--- 492,500 ----
  #define LIBCALL_VALUE(MODE)  gen_rtx (REG, MODE, 0)
  
+ /* Define this if PCC uses the nonreentrant convention for returning
+    structure and union values.  */
+ 
+ #define PCC_STATIC_STRUCT_RETURN
+ 
  /* 1 if N is a possible register number for a function value.
     On the 68000, d0 is the only register thus used.  */
***************
*** 1289,1293 ****
          fprintf (FILE, "#0r%.9g", u1.f);				\
        else								\
!         fprintf (FILE, "#0x%x", u1.i[0]); }				\
    else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != DImode)	\
      { union { double d; int i[2]; } u;					\
--- 1297,1301 ----
          fprintf (FILE, "#0r%.9g", u1.f);				\
        else								\
!         fprintf (FILE, "#0x%x", u1.i); }				\
    else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != DImode)	\
      { union { double d; int i[2]; } u;					\
diff -rc2N gcc-1.33/tm-att386.h gcc-1.34/tm-att386.h
*** gcc-1.33/tm-att386.h	Sun Dec  4 13:03:57 1988
--- gcc-1.34/tm-att386.h	Wed Feb 22 12:28:08 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-bsd386.h gcc-1.34/tm-bsd386.h
*** gcc-1.33/tm-bsd386.h	Thu Dec  8 23:09:21 1988
--- gcc-1.34/tm-bsd386.h	Wed Feb 22 12:28:06 1989
***************
*** 6,23 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Use the Sequent Symmetry assembler syntax.  */
--- 6,22 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Use the Sequent Symmetry assembler syntax.  */
diff -rc2N gcc-1.33/tm-compaq.h gcc-1.34/tm-compaq.h
*** gcc-1.33/tm-compaq.h	Fri Sep 16 12:13:34 1988
--- gcc-1.34/tm-compaq.h	Wed Feb 22 12:28:04 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-convex.h gcc-1.34/tm-convex.h
*** gcc-1.33/tm-convex.h	Tue Jan 31 21:55:58 1989
--- gcc-1.34/tm-convex.h	Wed Feb 22 12:28:01 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 62,66 ****
--- 61,67 ----
  /* Default target_flags if no switches specified.  */
  
+ #ifndef TARGET_DEFAULT
  #define TARGET_DEFAULT 0
+ #endif
  
  /* Pick a target if none was specified */
***************
*** 70,74 ****
  /* Allow $ in identifiers */
  
! #define DOLLARS_IN_IDENTIIFERS 1
  \f


  /* Target machine storage layout */
--- 71,75 ----
  /* Allow $ in identifiers */
  
! #define DOLLARS_IN_IDENTIFIERS 1
  \f


  /* Target machine storage layout */
***************
*** 82,85 ****
--- 83,87 ----
  
  /* Define this if most significant word of a multiword number is numbered.  */
+ /* Lie, so that gcc will take the low part of double reg N in reg N.  */
  /* #define WORDS_BIG_ENDIAN */
  
***************
*** 187,191 ****
  
  /* Register in which static-chain is passed to a function.  */
! #define STATIC_CHAIN_REGNUM 10
  
  /* Register in which address to store a structure value
--- 189,193 ----
  
  /* Register in which static-chain is passed to a function.  */
! #define STATIC_CHAIN_REGNUM 0
  
  /* Register in which address to store a structure value
***************
*** 278,284 ****
    (LD_D_P (VALUE) || LD_L_P (VALUE))
  
! #define LD_D_P(X)  (CONST_DOUBLE_HIGH (X) == 0)
! #define LD_L_P(X)  (CONST_DOUBLE_HIGH (X) >= 0 ? \
! 		    CONST_DOUBLE_LOW (X) == 0 : CONST_DOUBLE_LOW (X) == -1)
  
  /* Given an rtx X being reloaded into a reg required to be
--- 280,292 ----
    (LD_D_P (VALUE) || LD_L_P (VALUE))
  
! #define LD_D_P(X) (const_double_low_int (X) == 0)
! 
! #define LD_L_P(X) (const_double_low_int (X) >= 0 \
! 		   ? const_double_high_int (X) == 0 \
! 		   : const_double_high_int (X) == -1)
! 
! extern int const_double_low_int ();
! extern int const_double_high_int ();
! extern int const_double_float_int ();
  
  /* Given an rtx X being reloaded into a reg required to be
***************
*** 305,308 ****
--- 313,320 ----
  #define FRAME_GROWS_DOWNWARD
  
+ /* Define this if should default to -fcaller-saves.  */
+ 
+ #define DEFAULT_CALLER_SAVES
+ 
  /* Offset within stack frame to start allocating local variables at.
     If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
***************
*** 313,317 ****
  /* If we generate an insn to push BYTES bytes,
     this says how many the stack pointer really advances by. */
! #define PUSH_ROUNDING(BYTES) (BYTES)
  
  /* Offset of first parameter from the argument pointer register value.  */
--- 325,329 ----
  /* If we generate an insn to push BYTES bytes,
     this says how many the stack pointer really advances by. */
! #define PUSH_ROUNDING(BYTES) (((BYTES) + 3) & ~3)
  
  /* Offset of first parameter from the argument pointer register value.  */
***************
*** 344,347 ****
--- 356,364 ----
  #define LIBCALL_VALUE(MODE)  gen_rtx (REG, MODE, 0)
  
+ /* Define this if PCC uses the nonreentrant convention for returning
+    structure and union values.  */
+ 
+ #define PCC_STATIC_STRUCT_RETURN
+ 
  /* 1 if N is a possible register number for a function value.
     On the Convex, S0 is the only register thus used.  */
***************
*** 408,412 ****
  
  #define FUNCTION_PROLOGUE(FILE, SIZE)     \
! {  if ((SIZE) != 0) fprintf (FILE, "\tsub.w #%d,sp\n", (SIZE));}
  
  /* Output assembler code to FILE to increment profiler label # LABELNO
--- 425,429 ----
  
  #define FUNCTION_PROLOGUE(FILE, SIZE)     \
! {  if ((SIZE) != 0) fprintf (FILE, "\tsub.w #%d,sp\n", ((SIZE) + 3) & -4);}
  
  /* Output assembler code to FILE to increment profiler label # LABELNO
***************
*** 780,788 ****
    sprintf (LABEL, "*%s%d", PREFIX, NUM)
  
! /* This is how to output an assembler line defining a `double' constant.
!    USE HEX until gcc is modified not to call this with DImode constants.  */
  
  #define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \
!   fprintf (FILE, "\tds.l 0x%016llx\n", (VALUE))
  
  /* This is how to output an assembler line defining a `float' constant.  */
--- 797,804 ----
    sprintf (LABEL, "*%s%d", PREFIX, NUM)
  
! /* This is how to output an assembler line defining a `double' constant.  */
  
  #define ASM_OUTPUT_DOUBLE(FILE,VALUE)  \
!   fprintf (FILE, "\tds.d %.17#g\n", (VALUE))
  
  /* This is how to output an assembler line defining a `float' constant.  */
***************
*** 920,924 ****
      { union { double d; int i[2]; } u;					\
        u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X);	\
!       fprintf (FILE, "#%.20#g", u.d); }			 		\
    else { putc ('#', FILE); output_addr_const (FILE, X); }}
  
--- 936,940 ----
      { union { double d; int i[2]; } u;					\
        u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X);	\
!       fprintf (FILE, "#%.9#g", u.d); }			 		\
    else { putc ('#', FILE); output_addr_const (FILE, X); }}
  
***************
*** 966,968 ****
      fprintf (FILE, "(%s)", reg_name[REGNO (index)]);			\
  }
- 
--- 982,983 ----
diff -rc2N gcc-1.33/tm-convex1.h gcc-1.34/tm-convex1.h
*** gcc-1.33/tm-convex1.h	Tue Jan 31 21:53:33 1989
--- gcc-1.34/tm-convex1.h	Mon Feb 20 11:12:13 1989
***************
*** 3,6 ****
--- 3,7 ----
  #include "tm-convex.h"
  
+ #undef TARGET_DEFAULT
  #define TARGET_DEFAULT 1
  
diff -rc2N gcc-1.33/tm-convex2.h gcc-1.34/tm-convex2.h
*** gcc-1.33/tm-convex2.h	Tue Jan 31 21:53:44 1989
--- gcc-1.34/tm-convex2.h	Mon Feb 20 11:11:53 1989
***************
*** 3,6 ****
--- 3,7 ----
  #include "tm-convex.h"
  
+ #undef TARGET_DEFAULT
  #define TARGET_DEFAULT 2
  
diff -rc2N gcc-1.33/tm-encore.h gcc-1.34/tm-encore.h
*** gcc-1.33/tm-encore.h	Mon Jan 30 22:12:33 1989
--- gcc-1.34/tm-encore.h	Wed Feb 22 12:27:57 1989
***************
*** 6,23 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 6,22 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-genix.h gcc-1.34/tm-genix.h
*** gcc-1.33/tm-genix.h	Sun Jan  1 16:08:28 1989
--- gcc-1.34/tm-genix.h	Wed Feb 22 12:27:54 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include "tm-encore.h"
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include "tm-encore.h"
diff -rc2N gcc-1.33/tm-hp9k320.h gcc-1.34/tm-hp9k320.h
*** gcc-1.33/tm-hp9k320.h	Sun Jan  1 16:08:26 1989
--- gcc-1.34/tm-hp9k320.h	Wed Feb 22 17:59:05 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Define USE_GAS if GCC is supposed to work with the GNU assembler,
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Define USE_GAS if GCC is supposed to work with the GNU assembler,
***************
*** 38,42 ****
--- 37,43 ----
  /* See tm-m68k.h.  7 means 68020 with 68881.  */
  
+ #ifndef TARGET_DEFAULT
  #define	TARGET_DEFAULT 7
+ #endif
  
  /* Define __HAVE_68881__ in preprocessor, unless -msoft-float is specified.
***************
*** 50,56 ****
  #define ASM_SPEC "%{m68000:+X}"
  #else
! #define CPP_SPEC "%{!msoft-float:-D__HAVE_68881__}"
  
! /* -m68000 requires special flags to gas  */
  #define ASM_SPEC \
   "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
--- 51,73 ----
  #define ASM_SPEC "%{m68000:+X}"
  #else
! 
! #if TARGET_DEFAULT & 02
! 
! /* -m68881 is the default */
! #define CPP_SPEC \
! "%{!msoft-float:-D__HAVE_68881__ }\
! %{!ansi:%{m68000:-Dmc68000}%{mc68000:-Dmc68000}%{!mc68000:%{!m68000:-Dmc68020}}}"
! 
! #else
! 
! /* -msoft-float is the default */
! #define CPP_SPEC \
! "%{m68881:-D__HAVE_68881__ }\
! %{!ansi:%{m68000:-Dmc68000}%{mc68000:-Dmc68000}%{!mc68000:%{!m68000:-Dmc68020}}}"
! 
! #endif
! 
  
! /* -m68000 requires special flags to the assembler.  */
  #define ASM_SPEC \
   "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
***************
*** 66,70 ****
     (for non-strict-ANSI programs only).  */
  
! #define CPP_PREDEFINES "-Dhp9000s200 -Dhp9000s300 -DPWB -Dmc68k -Dmc68000 -Dhpux -Dunix"
  
  /* Every structure or union's size must be a multiple of 2 bytes.  */
--- 83,87 ----
     (for non-strict-ANSI programs only).  */
  
! #define CPP_PREDEFINES "-Dhp9000s200 -Dhp9000s300 -DPWB -Dmc68k -Dhpux -Dunix"
  
  /* Every structure or union's size must be a multiple of 2 bytes.  */
diff -rc2N gcc-1.33/tm-i386.h gcc-1.34/tm-i386.h
*** gcc-1.33/tm-i386.h	Fri Jan 27 03:50:10 1989
--- gcc-1.34/tm-i386.h	Wed Feb 22 12:27:48 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-i386gas.h gcc-1.34/tm-i386gas.h
*** gcc-1.33/tm-i386gas.h	Fri Jan 27 03:53:04 1989
--- gcc-1.34/tm-i386gas.h	Wed Feb 22 12:27:45 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-i386v.h gcc-1.34/tm-i386v.h
*** gcc-1.33/tm-i386v.h	Sun Sep  4 00:37:33 1988
--- gcc-1.34/tm-i386v.h	Wed Feb 22 12:27:43 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-isi68.h gcc-1.34/tm-isi68.h
*** gcc-1.33/tm-isi68.h	Sun Dec  4 13:07:33 1988
--- gcc-1.34/tm-isi68.h	Wed Feb 22 12:27:42 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include "tm-m68k.h"
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include "tm-m68k.h"
diff -rc2N gcc-1.33/tm-m68k.h gcc-1.34/tm-m68k.h
*** gcc-1.33/tm-m68k.h	Sun Jan  1 16:08:23 1989
--- gcc-1.34/tm-m68k.h	Wed Feb 22 12:27:39 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 512,515 ****
--- 511,519 ----
  #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
  
+ /* Define this if PCC uses the nonreentrant convention for returning
+    structure and union values.  */
+ 
+ #define PCC_STATIC_STRUCT_RETURN
+ 
  /* 1 if N is a possible register number for function argument passing.
     On the 68000, no registers are used in this way.  */
***************
*** 625,628 ****
--- 629,645 ----
    fprintf (FILE, "\tlea LP%d,a0\n\tjsr mcount\n", (LABELNO))
  
+ /* Output assembler code to FILE to initialize this source file's
+    basic block profiling info, if that has not already been done.  */
+ 
+ #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO)  \
+   fprintf (FILE, "\ttstl LPBX0\n\tbne LPI%d\n\tpea LPBX0\n\tcall ___bb_init_func\n\taddql #4,sp\nLPI%d:\n",  \
+ 	   LABELNO, LABELNO);
+ 
+ /* Output assembler code to FILE to increment the entry-count for
+    the BLOCKNO'th basic block in this source file.  */
+ 
+ #define BLOCK_PROFILER(FILE, BLOCKNO)	\
+   fprintf (FILE, "\taddql #1,LPBX2+%d\n", 4 * BLOCKNO)
+ 
  /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
     the stack pointer does not matter.  The value is tested only in
***************
*** 1085,1092 ****
       test instruction (which has code to deal with
       this), reinit the CC */					\
!   if (((cc_status.value1					\
! 	&& FPA_REG_P(cc_status.value1))				\
!        || (cc_status.value2					\
! 	   && FPA_REG_P(cc_status.value2)))			\
        && !(GET_CODE(EXP) == PARALLEL				\
  	   && GET_CODE (XVECEXP(EXP, 0, 0)) == SET		\
--- 1102,1107 ----
       test instruction (which has code to deal with
       this), reinit the CC */					\
!   if (((cc_status.value1 && FPA_REG_P (cc_status.value1))	\
!        || (cc_status.value2 && FPA_REG_P (cc_status.value2)))	\
        && !(GET_CODE(EXP) == PARALLEL				\
  	   && GET_CODE (XVECEXP(EXP, 0, 0)) == SET		\
diff -rc2N gcc-1.33/tm-m88k.h gcc-1.34/tm-m88k.h
*** gcc-1.33/tm-m88k.h	Sun Jan  1 16:08:19 1989
--- gcc-1.34/tm-m88k.h	Wed Feb 22 12:27:37 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-news800.h gcc-1.34/tm-news800.h
*** gcc-1.33/tm-news800.h	Sun Jan  1 16:08:17 1989
--- gcc-1.34/tm-news800.h	Wed Feb 22 12:27:35 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Use the GNU Assembler, because the system's assembler
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Use the GNU Assembler, because the system's assembler
diff -rc2N gcc-1.33/tm-next.h gcc-1.34/tm-next.h
*** gcc-1.33/tm-next.h	Wed Dec 31 19:00:00 1969
--- gcc-1.34/tm-next.h	Tue Feb 14 07:20:01 1989
***************
*** 0 ****
--- 1,9 ----
+ /* Definitions for Next as target machine for GNU C compiler.  */
+ 
+ #include "tm-sun3.h"
+ 
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "-Dmc68000 -DNeXT -Dunix -D__MACH__"
+ 
+ #define CPLUSPLUS
+ #define DOLLARS_IN_IDENTIFIERS
diff -rc2N gcc-1.33/tm-ns32k.h gcc-1.34/tm-ns32k.h
*** gcc-1.33/tm-ns32k.h	Sun Jan  1 16:08:15 1989
--- gcc-1.34/tm-ns32k.h	Wed Feb 22 12:27:33 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 361,364 ****
--- 360,368 ----
     ? gen_rtx (REG, MODE, 8) \
     : gen_rtx (REG, MODE, 0))
+ 
+ /* Define this if PCC uses the nonreentrant convention for returning
+    structure and union values.  */
+ 
+ #define PCC_STATIC_STRUCT_RETURN
  
  /* 1 if N is a possible register number for a function value.
diff -rc2N gcc-1.33/tm-seq386.h gcc-1.34/tm-seq386.h
*** gcc-1.33/tm-seq386.h	Fri Dec 23 22:19:47 1988
--- gcc-1.34/tm-seq386.h	Wed Feb 22 12:27:31 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include "tm-i386.h"
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include "tm-i386.h"
diff -rc2N gcc-1.33/tm-sequent.h gcc-1.34/tm-sequent.h
*** gcc-1.33/tm-sequent.h	Thu Jan  5 18:12:40 1989
--- gcc-1.34/tm-sequent.h	Wed Feb 22 12:27:30 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Two flags to control how addresses are printed in assembler insns.  */
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Two flags to control how addresses are printed in assembler insns.  */
diff -rc2N gcc-1.33/tm-sparc.h gcc-1.34/tm-sparc.h
*** gcc-1.33/tm-sparc.h	Sun Jan 22 04:34:40 1989
--- gcc-1.34/tm-sparc.h	Thu Feb 23 05:55:48 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* Note that some other tm- files include this one and then override
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* Note that some other tm- files include this one and then override
***************
*** 23,26 ****
--- 22,34 ----
     many of the definitions that relate to assembler syntax.  */
  
+ /* Specify library to handle `-a' basic block profiling.  */
+ 
+ #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} \
+ %{a:/usr/lib/bb_link.o} "
+ 
+ /* Special flags to the Sun-4 assembler when using pipe for input.  */
+ 
+ #define ASM_SPEC " %{pipe:-} "
+ 
  /* Names to predefine in the preprocessor for this target machine.  */
  
***************
*** 586,590 ****
  
  #define FUNCTION_PROFILER(FILE, LABELNO)  \
!    abort ();
  
  /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
--- 594,618 ----
  
  #define FUNCTION_PROFILER(FILE, LABELNO)  \
!   fprintf (FILE, "\tsethi %%hi(LP%d),%%o0\n\tcall mcount\n\tor %%lo(LP%d),%%o0,%%o0\n", \
! 	   (LABELNO), (LABELNO))
! 
! /* Output assembler code to FILE to initialize this source file's
!    basic block profiling info, if that has not already been done.  */
! 
! #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO)  \
!   fprintf (FILE, "\tsethi %%hi(LPBX0),%%o0\n\tld [%%lo(LPBX0)+%%o0],%%o1\n\ttst %%o1\n\tbne LPB%d\n\tnop\n\tcall ___bb_init_func\n\tnop\nLPB%d:\n",  \
! 	   (LABELNO), (LABELNO))
! 
! /* Output assembler code to FILE to increment the entry-count for
!    the BLOCKNO'th basic block in this source file.  */
! 
! #define BLOCK_PROFILER(FILE, BLOCKNO) \
! {								\
!   int blockn = (BLOCKNO);					\
!   fprintf (FILE, "\tsethi %%hi(LPBX2+%d),%%g1\n\tld [%%lo(LPBX2+%d)+%%g1],%%g2\n\
! \tadd %%g2,1,%%g2\n\tst %%g2,[%%lo(LPBX2+%d)+%%g1]\n",		\
! 	   4 * blockn, 4 * blockn, 4 * blockn);			\
!   CC_STATUS_INIT;  /* We have clobbered %g1.  Also %g2.  */	\
! }
  
  /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
diff -rc2N gcc-1.33/tm-spur.h gcc-1.34/tm-spur.h
*** gcc-1.33/tm-spur.h	Sun Dec  4 13:03:22 1988
--- gcc-1.34/tm-spur.h	Wed Feb 22 12:27:26 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-sun2.h gcc-1.34/tm-sun2.h
*** gcc-1.33/tm-sun2.h	Fri Jan 27 21:15:36 1989
--- gcc-1.34/tm-sun2.h	Wed Feb 22 12:27:24 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-sun3.h gcc-1.34/tm-sun3.h
*** gcc-1.33/tm-sun3.h	Sat Dec 31 14:11:32 1988
--- gcc-1.34/tm-sun3.h	Wed Feb 22 12:27:23 1989
***************
*** 4,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
  #include "tm-m68k.h"
--- 4,22 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
+ /* This comment is here to see if it will keep Sun's cpp from dying.  */
  
  #include "tm-m68k.h"
***************
*** 100,103 ****
--- 100,108 ----
  #endif
  #endif
+ 
+ /* Specify library to handle `-a' basic block profiling.  */
+ 
+ #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} \
+ %{a:/usr/lib/bb_link.o} "
  
  /* Every structure or union's size must be a multiple of 2 bytes.  */
diff -rc2N gcc-1.33/tm-sun386.h gcc-1.34/tm-sun386.h
*** gcc-1.33/tm-sun386.h	Thu Dec  8 23:10:47 1988
--- gcc-1.34/tm-sun386.h	Wed Feb 22 12:27:21 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-sun386i.h gcc-1.34/tm-sun386i.h
*** gcc-1.33/tm-sun386i.h	Thu Nov 17 13:37:01 1988
--- gcc-1.34/tm-sun386i.h	Wed Feb 22 12:27:20 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/tm-sun4os3.h gcc-1.34/tm-sun4os3.h
*** gcc-1.33/tm-sun4os3.h	Fri Nov 18 17:29:55 1988
--- gcc-1.34/tm-sun4os3.h	Thu Feb 23 05:56:01 1989
***************
*** 4,5 ****
--- 4,10 ----
  #undef TARGET_DEFAULT
  #define TARGET_DEFAULT 7
+ 
+ #undef FUNCTION_PROFILER
+ #define FUNCTION_PROFILER(FILE, LABELNO)  \
+   fprintf (FILE, "\tsethi %%hi(LP%d),%%o0\n\tcall .mcount\n\tor %%lo(LP%d),%%o0,%%o0\n", \
+ 	   (LABELNO), (LABELNO))
diff -rc2N gcc-1.33/tm-vax.h gcc-1.34/tm-vax.h
*** gcc-1.33/tm-vax.h	Sun Jan  1 16:08:09 1989
--- gcc-1.34/tm-vax.h	Wed Feb 22 12:27:18 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 326,329 ****
--- 325,333 ----
  
  #define LIBCALL_VALUE(MODE)  gen_rtx (REG, MODE, 0)
+ 
+ /* Define this if PCC uses the nonreentrant convention for returning
+    structure and union values.  */
+ 
+ #define PCC_STATIC_STRUCT_RETURN
  
  /* 1 if N is a possible register number for a function value.
diff -rc2N gcc-1.33/tm-vaxv.h gcc-1.34/tm-vaxv.h
*** gcc-1.33/tm-vaxv.h	Thu Aug 11 17:58:44 1988
--- gcc-1.34/tm-vaxv.h	Wed Feb 22 12:27:16 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include "tm-vax.h"
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include "tm-vax.h"
diff -rc2N gcc-1.33/tm-vms.h gcc-1.34/tm-vms.h
*** gcc-1.33/tm-vms.h	Sun Dec  4 13:03:14 1988
--- gcc-1.34/tm-vms.h	Wed Feb 22 12:27:15 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  #include "tm-vax.h"
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  #include "tm-vax.h"
diff -rc2N gcc-1.33/toplev.c gcc-1.34/toplev.c
*** gcc-1.33/toplev.c	Sun Jan 15 20:16:52 1989
--- gcc-1.34/toplev.c	Wed Feb 22 12:27:14 1989
***************
*** 1,21 ****
  /* Top level of GNU C compiler
!    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Top level of GNU C compiler
!    Copyright (C) 1987, 1988, 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 127,130 ****
--- 126,143 ----
  int optimize = 0;
  
+ /* Nonzero for -fcaller-saves: allocate values in regs that need to
+    be saved across function calls, if that produces overall better code.
+    Optional now, so people can test it.  */
+ 
+ #ifdef DEFAULT_CALLER_SAVES
+ int flag_caller_saves = 1;
+ #else
+ int flag_caller_saves = 0;
+ #endif
+ 
+ /* Nonzero for -fpcc-struct-return: return values the same way PCC does.  */
+ 
+ int flag_pcc_struct_return = 0;
+ 
  /* Nonzero for -fforce-mem: load memory value into a register
     before arithmetic on it.  This makes better cse but slower compilation.  */
***************
*** 214,217 ****
--- 227,234 ----
  int profile_flag = 0;
  
+ /* Nonzero if generating code to do profiling on a line-by-line basis.  */
+ 
+ int profile_block_flag;
+ 
  /* Nonzero for -pedantic switch: warn about anything
     that standard spec forbids.  */
***************
*** 268,272 ****
    {"keep-inline-functions", &flag_keep_inline_functions, 1},
    {"syntax-only", &flag_syntax_only, 1},
!   {"shared-data", &flag_shared_data, 1}
  };
  
--- 285,291 ----
    {"keep-inline-functions", &flag_keep_inline_functions, 1},
    {"syntax-only", &flag_syntax_only, 1},
!   {"shared-data", &flag_shared_data, 1},
!   {"caller-saves", &flag_caller_saves, 1},
!   {"pcc-struct-return", &flag_pcc_struct_return, 1}
  };
  
***************
*** 1035,1038 ****
--- 1054,1061 ----
  	     });
  
+   /* Output some stuff at end of file if nec.  */
+ 
+   end_final (main_input_filename);
+ 
    /* Close the dump files.  */
  
***************
*** 1669,1672 ****
--- 1692,1703 ----
  	else if (!strcmp (str, "p"))
  	  profile_flag = 1;
+ 	else if (!strcmp (str, "a"))
+ 	  {
+ #if !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)
+ 	    warning ("`-a' option (basic block profile) not supported");
+ #else
+ 	    profile_block_flag = 1;
+ #endif
+ 	  }
  	else if (!strcmp (str, "gg"))
  	  write_symbols = GDB_DEBUG;
diff -rc2N gcc-1.33/tree.c gcc-1.34/tree.c
*** gcc-1.33/tree.c	Sat Jan 28 22:00:35 1989
--- gcc-1.34/tree.c	Wed Feb 22 12:27:12 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 874,877 ****
--- 873,877 ----
    if (type == error_mark_node)
      return integer_zero_node;
+   type = TYPE_MAIN_VARIANT (type);
    if (TYPE_SIZE (type) == 0)
      {
***************
*** 893,896 ****
--- 893,897 ----
    if (type == error_mark_node)
      return 0;
+   type = TYPE_MAIN_VARIANT (type);
    if (TYPE_SIZE (type) == 0)
      return -1;
diff -rc2N gcc-1.33/tree.def gcc-1.34/tree.def
*** gcc-1.33/tree.def	Thu Dec 22 21:31:26 1988
--- gcc-1.34/tree.def	Wed Feb 22 12:29:43 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
   
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
   
diff -rc2N gcc-1.33/tree.h gcc-1.34/tree.h
*** gcc-1.33/tree.h	Mon Jan 23 03:21:24 1989
--- gcc-1.34/tree.h	Wed Feb 22 12:27:10 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/varasm.c gcc-1.34/varasm.c
*** gcc-1.33/varasm.c	Sat Jan 28 19:51:58 1989
--- gcc-1.34/varasm.c	Wed Feb 22 12:27:09 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
! 
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
! 
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
***************
*** 319,322 ****
--- 318,374 ----
    ASM_OUTPUT_INT (asm_out_file, const0_rtx);
  }
+ 
+ /* Assemble a string constant with the specified C string as contents.  */
+ 
+ void
+ assemble_string (p, size)
+      unsigned char *p;
+      int size;
+ {
+   register int i;
+   int excess = 0;
+   int pos = 0;
+   int maximum = 2000;
+ 
+   /* If the string is very long, split it up.  */
+ 
+   while (pos < size)
+     {
+       int thissize = size - pos;
+       if (thissize > maximum)
+ 	thissize = maximum;
+ 
+ #ifdef ASM_OUTPUT_ASCII
+       ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
+ #else
+       fprintf (asm_out_file, "\t.ascii \"");
+ 
+       for (i = 0; i < thissize; i++)
+ 	{
+ 	  register int c = p[i];
+ 	  if (c == '\"' || c == '\\')
+ 	    putc ('\\', asm_out_file);
+ 	  if (c >= ' ' && c < 0177)
+ 	    putc (c, asm_out_file);
+ 	  else
+ 	    {
+ 	      fprintf (asm_out_file, "\\%o", c);
+ 	      /* After an octal-escape, if a digit follows,
+ 		 terminate one string constant and start another.
+ 		 The Vax assembler fails to stop reading the escape
+ 		 after three digits, so this is the only way we
+ 		 can get it to parse the data properly.  */
+ 	      if (i < thissize - 1
+ 		  && p[i + 1] >= '0' && p[i + 1] <= '9')
+ 		fprintf (asm_out_file, "\"\n\t.ascii \"");
+ 	    }
+ 	}
+       fprintf (asm_out_file, "\"\n");
+ #endif /* no ASM_OUTPUT_ASCII */
+ 
+       pos += thissize;
+       p += thissize;
+     }
+ }
  \f


  /* Assemble everything that is needed for a variable or function declaration.
***************
*** 510,513 ****
--- 562,595 ----
      ASM_OUTPUT_LABELREF (file, name);
  }
+ 
+ /* Allocate SIZE bytes writable static space with a gensym name
+    and return an RTX to refer to its address.  */
+ 
+ rtx
+ assemble_static_space (size)
+      int size;
+ {
+   char name[12];
+   char *namestring;
+   rtx x;
+   /* Round size up to multiple of BIGGEST_ALIGNMENT bits
+      so that each uninitialized object starts on such a boundary.  */
+   int rounded = ((size + (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1)
+ 		 / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
+ 		 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
+ 
+   if (flag_shared_data)
+     data_section ();
+   ASM_GENERATE_INTERNAL_LABEL (name, "LF", const_labelno);
+   ++const_labelno;
+ 
+   namestring = (char *) obstack_alloc (saveable_obstack,
+ 				       strlen (name) + 2);
+   strcpy (namestring, name);
+   
+   x = gen_rtx (SYMBOL_REF, Pmode, namestring);
+   ASM_OUTPUT_LOCAL (asm_out_file, name, size, rounded);
+   return x;
+ }
  \f


  /* Here we combine duplicate floating constants to make
***************
*** 1350,1353 ****
--- 1432,1436 ----
  	    {
  	    case DImode:
+ #ifndef WORDS_BIG_ENDIAN
  	      /* Output two ints.  */
  	      ASM_OUTPUT_INT (asm_out_file,
***************
*** 1355,1358 ****
--- 1438,1448 ----
  	      ASM_OUTPUT_INT (asm_out_file,
  			      gen_rtx (CONST_INT, VOIDmode, u.i[1]));
+ #else
+ 	      /* Output two ints.  */
+ 	      ASM_OUTPUT_INT (asm_out_file,
+ 			      gen_rtx (CONST_INT, VOIDmode, u.i[1]));
+ 	      ASM_OUTPUT_INT (asm_out_file,
+ 			      gen_rtx (CONST_INT, VOIDmode, u.i[0]));
+ #endif
  	      break;
  
***************
*** 1585,1594 ****
        else if (TREE_CODE (exp) == STRING_CST)
  	{
- 	  register int i;
- 	  register unsigned char *p
- 	    = (unsigned char *) TREE_STRING_POINTER (exp);
  	  int excess = 0;
- 	  int pos = 0;
- 	  int maximum = 2000;
  
  	  if (size > TREE_STRING_LENGTH (exp))
--- 1675,1679 ----
***************
*** 1598,1640 ****
  	    }
  
! 	  /* If the string is very long, split it up.  */
! 
! 	  while (pos < size)
! 	    {
! 	      int thissize = size - pos;
! 	      if (thissize > maximum)
! 		thissize = maximum;
! 
! #ifdef ASM_OUTPUT_ASCII
! 	      ASM_OUTPUT_ASCII (asm_out_file, p, thissize);
! #else
! 	      fprintf (asm_out_file, "\t.ascii \"");
! 
! 	      for (i = 0; i < thissize; i++)
! 		{
! 		  register int c = p[i];
! 		  if (c == '\"' || c == '\\')
! 		    putc ('\\', asm_out_file);
! 		  if (c >= ' ' && c < 0177)
! 		    putc (c, asm_out_file);
! 		  else
! 		    {
! 		      fprintf (asm_out_file, "\\%o", c);
! 		      /* After an octal-escape, if a digit follows,
! 			 terminate one string constant and start another.
! 			 The Vax assembler fails to stop reading the escape
! 			 after three digits, so this is the only way we
! 			 can get it to parse the data properly.  */
! 		      if (i < thissize - 1
! 			  && p[i + 1] >= '0' && p[i + 1] <= '9')
! 			fprintf (asm_out_file, "\"\n\t.ascii \"");
! 		    }
! 		}
! 	      fprintf (asm_out_file, "\"\n");
! #endif /* no ASM_OUTPUT_ASCII */
! 
! 	      pos += thissize;
! 	      p += thissize;
! 	    }
  	  size = excess;
  	}
--- 1683,1687 ----
  	    }
  
! 	  assemble_string (TREE_STRING_POINTER (exp), size);
  	  size = excess;
  	}
diff -rc2N gcc-1.33/vax.md gcc-1.34/vax.md
*** gcc-1.33/vax.md	Sun Dec 11 23:44:49 1988
--- gcc-1.34/vax.md	Wed Feb 22 12:31:02 1989
***************
*** 2,23 ****
  ;;- Machine description for GNU compiler
  ;;- Vax Version
! ;;   Copyright (C) 1987 Free Software Foundation, Inc.
  
  ;; This file is part of GNU CC.
  
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY.  No author or distributor
! ;; accepts responsibility to anyone for the consequences of using it
! ;; or for whether it serves any particular purpose or works at all,
! ;; unless he says so in writing.  Refer to the GNU CC General Public
! ;; License for full details.
! 
! ;; Everyone is granted permission to copy, modify and redistribute
! ;; GNU CC, but only under the conditions described in the
! ;; GNU CC General Public License.   A copy of this license is
! ;; supposed to have been given to you along with GNU CC so you
! ;; can know your rights and responsibilities.  It should be in a
! ;; file named COPYING.  Among other things, the copyright notice
! ;; and this notice must be preserved on all copies.
  
  
--- 2,22 ----
  ;;- Machine description for GNU compiler
  ;;- Vax Version
! ;;   Copyright (C) 1987, 1988 Free Software Foundation, Inc.
  
  ;; This file is part of GNU CC.
  
+ ;; GNU CC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 1, or (at your option)
+ ;; any later version.
+ 
  ;; GNU CC is distributed in the hope that it will be useful,
! ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
! ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! ;; GNU General Public License for more details.
! 
! ;; You should have received a copy of the GNU General Public License
! ;; along with GNU CC; see the file COPYING.  If not, write to
! ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  
  
***************
*** 65,70 ****
  (define_insn "cmpsi"
    [(set (cc0)
! 	(minus (match_operand:SI 0 "general_operand" "g")
! 	       (match_operand:SI 1 "general_operand" "g")))]
    ""
    "cmpl %0,%1")
--- 64,69 ----
  (define_insn "cmpsi"
    [(set (cc0)
! 	(compare (match_operand:SI 0 "general_operand" "g")
! 		 (match_operand:SI 1 "general_operand" "g")))]
    ""
    "cmpl %0,%1")
***************
*** 72,77 ****
  (define_insn "cmphi"
    [(set (cc0)
! 	(minus (match_operand:HI 0 "general_operand" "g")
! 	       (match_operand:HI 1 "general_operand" "g")))]
    ""
    "cmpw %0,%1")
--- 71,76 ----
  (define_insn "cmphi"
    [(set (cc0)
! 	(compare (match_operand:HI 0 "general_operand" "g")
! 		 (match_operand:HI 1 "general_operand" "g")))]
    ""
    "cmpw %0,%1")
***************
*** 79,84 ****
  (define_insn "cmpqi"
    [(set (cc0)
! 	(minus (match_operand:QI 0 "general_operand" "g")
! 	       (match_operand:QI 1 "general_operand" "g")))]
    ""
    "cmpb %0,%1")
--- 78,83 ----
  (define_insn "cmpqi"
    [(set (cc0)
! 	(compare (match_operand:QI 0 "general_operand" "g")
! 		 (match_operand:QI 1 "general_operand" "g")))]
    ""
    "cmpb %0,%1")
***************
*** 86,91 ****
  (define_insn "cmpdf"
    [(set (cc0)
! 	(minus (match_operand:DF 0 "general_operand" "gF")
! 	       (match_operand:DF 1 "general_operand" "gF")))]
    ""
    "cmp%# %0,%1")
--- 85,90 ----
  (define_insn "cmpdf"
    [(set (cc0)
! 	(compare (match_operand:DF 0 "general_operand" "gF")
! 		 (match_operand:DF 1 "general_operand" "gF")))]
    ""
    "cmp%# %0,%1")
***************
*** 93,98 ****
  (define_insn "cmpsf"
    [(set (cc0)
! 	(minus (match_operand:SF 0 "general_operand" "gF")
! 	       (match_operand:SF 1 "general_operand" "gF")))]
    ""
    "cmpf %0,%1")
--- 92,97 ----
  (define_insn "cmpsf"
    [(set (cc0)
! 	(compare (match_operand:SF 0 "general_operand" "gF")
! 		 (match_operand:SF 1 "general_operand" "gF")))]
    ""
    "cmpf %0,%1")
***************
*** 1495,1498 ****
--- 1494,1598 ----
    "jgtru %l0")
  \f


+ ;; Recognize jlbs and jlbc insns.
+ ;; These come before the jbc and jbs recognizers so these will be preferred.
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (const_int 1))
+ 	     (const_int 0))
+ 	 (label_ref (match_operand 1 "" ""))
+ 	 (pc)))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbs %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (const_int 1))
+ 	     (const_int 0))
+ 	 (label_ref (match_operand 1 "" ""))
+ 	 (pc)))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbc %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (const_int 1))
+ 	     (const_int 0))
+ 	 (pc)
+ 	 (label_ref (match_operand 1 "" ""))))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbc %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (const_int 1))
+ 	     (const_int 0))
+ 	 (pc)
+ 	 (label_ref (match_operand 1 "" ""))))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbs %0,%l1")
+ 
+ ;; These four entries allow a jlbc or jlbs to be made
+ ;; by combination with a bic.
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (not:SI (const_int -2)))
+ 	     (const_int 0))
+ 	 (label_ref (match_operand 1 "" ""))
+ 	 (pc)))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbs %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (not:SI (const_int -2)))
+ 	     (const_int 0))
+ 	 (label_ref (match_operand 1 "" ""))
+ 	 (pc)))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbc %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (not:SI (const_int -2)))
+ 	     (const_int 0))
+ 	 (pc)
+ 	 (label_ref (match_operand 1 "" ""))))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbc %0,%l1")
+ 
+ (define_insn ""
+   [(set (pc)
+ 	(if_then_else
+ 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
+ 		     (not:SI (const_int -2)))
+ 	     (const_int 0))
+ 	 (pc)
+ 	 (label_ref (match_operand 1 "" ""))))]
+   "GET_CODE (operands[0]) != MEM
+    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
+   "jlbs %0,%l1")
+ \f


  ;; Recognize jbs and jbc instructions.
  
***************
*** 1672,1773 ****
     || ! mode_dependent_address_p (XEXP (operands[0], 0))"
    "jbs %1,%0,%l2")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (const_int 1))
- 	     (const_int 0))
- 	 (label_ref (match_operand 1 "" ""))
- 	 (pc)))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbs %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (const_int 1))
- 	     (const_int 0))
- 	 (label_ref (match_operand 1 "" ""))
- 	 (pc)))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbc %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (const_int 1))
- 	     (const_int 0))
- 	 (pc)
- 	 (label_ref (match_operand 1 "" ""))))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbc %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (const_int 1))
- 	     (const_int 0))
- 	 (pc)
- 	 (label_ref (match_operand 1 "" ""))))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbs %0,%l1")
- 
- ;; These four entries allow a jlbc or jlbs to be made
- ;; by combination with a bic.
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (not:SI (const_int -2)))
- 	     (const_int 0))
- 	 (label_ref (match_operand 1 "" ""))
- 	 (pc)))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbs %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (not:SI (const_int -2)))
- 	     (const_int 0))
- 	 (label_ref (match_operand 1 "" ""))
- 	 (pc)))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbc %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (ne (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (not:SI (const_int -2)))
- 	     (const_int 0))
- 	 (pc)
- 	 (label_ref (match_operand 1 "" ""))))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbc %0,%l1")
- 
- (define_insn ""
-   [(set (pc)
- 	(if_then_else
- 	 (eq (and:SI (match_operand:SI 0 "general_operand" "g")
- 		     (not:SI (const_int -2)))
- 	     (const_int 0))
- 	 (pc)
- 	 (label_ref (match_operand 1 "" ""))))]
-   "GET_CODE (operands[0]) != MEM
-    || ! mode_dependent_address_p (XEXP (operands[0], 0))"
-   "jlbs %0,%l1")
  \f


  ;; Subtract-and-jump and Add-and-jump insns.
--- 1772,1775 ----
***************
*** 1839,1845 ****
    [(set (pc)
  	(if_then_else
! 	 (lt (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			     (const_int 1))
! 		    (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (label_ref (match_operand 2 "" ""))
--- 1841,1847 ----
    [(set (pc)
  	(if_then_else
! 	 (lt (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			       (const_int 1))
! 		      (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (label_ref (match_operand 2 "" ""))
***************
*** 1854,1860 ****
    [(set (pc)
  	(if_then_else
! 	 (le (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			     (const_int 1))
! 		    (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (label_ref (match_operand 2 "" ""))
--- 1856,1862 ----
    [(set (pc)
  	(if_then_else
! 	 (le (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			       (const_int 1))
! 		      (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (label_ref (match_operand 2 "" ""))
***************
*** 1870,1876 ****
    [(set (pc)
  	(if_then_else
! 	 (ge (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			     (const_int 1))
! 		    (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (pc)
--- 1872,1878 ----
    [(set (pc)
  	(if_then_else
! 	 (ge (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			       (const_int 1))
! 		      (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (pc)
***************
*** 1885,1891 ****
    [(set (pc)
  	(if_then_else
! 	 (gt (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			     (const_int 1))
! 		    (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (pc)
--- 1887,1893 ----
    [(set (pc)
  	(if_then_else
! 	 (gt (compare (plus:SI (match_operand:SI 0 "general_operand" "+g")
! 			       (const_int 1))
! 		      (match_operand:SI 1 "general_operand" "g"))
  	     (const_int 0))
  	 (pc)
***************
*** 1903,1909 ****
    [(set (pc)
  	(if_then_else
! 	 (ne (minus (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			     (const_int -1))
! 		    (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
--- 1905,1911 ----
    [(set (pc)
  	(if_then_else
! 	 (ne (compare (plus:SI (match_operand:SI 0 "general_operand" "g")
! 			       (const_int -1))
! 		      (const_int -1))
  	     (const_int 0))
  	 (label_ref (match_operand 1 "" ""))
diff -rc2N gcc-1.33/version.c gcc-1.34/version.c
*** gcc-1.33/version.c	Wed Feb  1 21:34:59 1989
--- gcc-1.34/version.c	Fri Feb 24 10:57:29 1989
***************
*** 1,1 ****
! char *version_string = "1.33";
--- 1,1 ----
! char *version_string = "1.34";
diff -rc2N gcc-1.33/xm-alliant.h gcc-1.34/xm-alliant.h
*** gcc-1.33/xm-alliant.h	Thu Dec 22 16:25:38 1988
--- gcc-1.34/xm-alliant.h	Wed Feb 22 12:27:06 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for Alliant computer.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Configuration for GNU C-compiler for Alliant computer.
!    Copyright (C) 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-convex.h gcc-1.34/xm-convex.h
*** gcc-1.33/xm-convex.h	Thu Jan 19 13:43:24 1989
--- gcc-1.34/xm-convex.h	Wed Feb 22 12:27:03 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for Convex.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* #defines that need visibility everywhere.  */
--- 1,20 ----
  /* Configuration for GNU C-compiler for Convex.
!    Copyright (C) 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* #defines that need visibility everywhere.  */
diff -rc2N gcc-1.33/xm-i386.h gcc-1.34/xm-i386.h
*** gcc-1.33/xm-i386.h	Tue Aug 16 18:57:58 1988
--- gcc-1.34/xm-i386.h	Wed Feb 22 12:27:02 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for Intel 80386 running Sequent Symmetry
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Configuration for GNU C-compiler for Intel 80386 running Sequent Symmetry
!    Copyright (C) 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-i386v.h gcc-1.34/xm-i386v.h
*** gcc-1.33/xm-i386v.h	Thu Aug 11 10:46:38 1988
--- gcc-1.34/xm-i386v.h	Wed Feb 22 12:27:01 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for Intel 80386 running System V.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Configuration for GNU C-compiler for Intel 80386 running System V.
!    Copyright (C) 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-m68k.h gcc-1.34/xm-m68k.h
*** gcc-1.33/xm-m68k.h	Fri May 20 19:23:37 1988
--- gcc-1.34/xm-m68k.h	Wed Feb 22 12:26:59 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-m88k.h gcc-1.34/xm-m88k.h
*** gcc-1.33/xm-m88k.h	Thu Jun 30 04:26:36 1988
--- gcc-1.34/xm-m88k.h	Wed Feb 22 12:26:58 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-mips.h gcc-1.34/xm-mips.h
*** gcc-1.33/xm-mips.h	Sat Jan 21 16:20:34 1989
--- gcc-1.34/xm-mips.h	Wed Feb 22 12:26:57 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-ns32k.h gcc-1.34/xm-ns32k.h
*** gcc-1.33/xm-ns32k.h	Thu Feb 18 19:03:10 1988
--- gcc-1.34/xm-ns32k.h	Wed Feb 22 12:26:56 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* #defines that need visibility everywhere.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* #defines that need visibility everywhere.  */
diff -rc2N gcc-1.33/xm-sparc.h gcc-1.34/xm-sparc.h
*** gcc-1.33/xm-sparc.h	Thu Jun  9 23:43:10 1988
--- gcc-1.34/xm-sparc.h	Wed Feb 22 12:26:54 1989
***************
*** 5,22 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 5,21 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-spur.h gcc-1.34/xm-spur.h
*** gcc-1.33/xm-spur.h	Fri Feb 26 02:00:18 1988
--- gcc-1.34/xm-spur.h	Wed Feb 22 12:26:53 1989
***************
*** 1,21 ****
! /* Configuration for GNU C-compiler for Motorola 68000 family.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
! /* Configuration for GNU C-compiler for Berkeley SPUR processor.
!    Copyright (C) 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-sun386i.h gcc-1.34/xm-sun386i.h
*** gcc-1.33/xm-sun386i.h	Thu Nov 17 13:35:35 1988
--- gcc-1.34/xm-sun386i.h	Wed Feb 22 12:26:52 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0.
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  
--- 1,20 ----
  /* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0.
!    Copyright (C) 1988 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  
diff -rc2N gcc-1.33/xm-umips.h gcc-1.34/xm-umips.h
*** gcc-1.33/xm-umips.h	Sat Jan 21 16:21:06 1989
--- gcc-1.34/xm-umips.h	Wed Feb 22 12:26:51 1989
***************
*** 1,21 ****
  /* Configuration for GNU C-compiler for UMIPS operating system
!    Copyright (C) 1987 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /*
--- 1,20 ----
  /* Configuration for GNU C-compiler for UMIPS operating system
!    Copyright (C) 1989 Free Software Foundation, Inc.
  
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /*
diff -rc2N gcc-1.33/xm-vax.h gcc-1.34/xm-vax.h
*** gcc-1.33/xm-vax.h	Fri May 20 19:23:58 1988
--- gcc-1.34/xm-vax.h	Wed Feb 22 12:26:50 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* #defines that need visibility everywhere.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* #defines that need visibility everywhere.  */
diff -rc2N gcc-1.33/xm-vms.h gcc-1.34/xm-vms.h
*** gcc-1.33/xm-vms.h	Sun Jan 22 16:18:11 1989
--- gcc-1.34/xm-vms.h	Wed Feb 22 12:26:49 1989
***************
*** 4,21 ****
  This file is part of GNU CC.
  
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY.  No author or distributor
! accepts responsibility to anyone for the consequences of using it
! or for whether it serves any particular purpose or works at all,
! unless he says so in writing.  Refer to the GNU CC General Public
! License for full details.
  
! Everyone is granted permission to copy, modify and redistribute
! GNU CC, but only under the conditions described in the
! GNU CC General Public License.   A copy of this license is
! supposed to have been given to you along with GNU CC so you
! can know your rights and responsibilities.  It should be in a
! file named COPYING.  Among other things, the copyright notice
! and this notice must be preserved on all copies.  */
  
  /* #defines that need visibility everywhere.  */
--- 4,20 ----
  This file is part of GNU CC.
  
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+ 
  GNU CC is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
  
! You should have received a copy of the GNU General Public License
! along with GNU CC; see the file COPYING.  If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
  /* #defines that need visibility everywhere.  */