|
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. */