|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U
Length: 607310 (0x9444e)
Types: TextFile
Notes: Uncompressed file
└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
└─⟦da08a4e93⟧ »./gcc.diff-1.33-1.34.Z«
└─⟦this⟧
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 = ®_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. */