* Merge from gcc2 June 9, 1998 snapshot. See ChangeLog.13 for
authorJeff Law <law@gcc.gnu.org>
Mon, 29 Jun 1998 21:40:49 +0000 (15:40 -0600)
committerJeff Law <law@gcc.gnu.org>
Mon, 29 Jun 1998 21:40:49 +0000 (15:40 -0600)
        details.

From-SVN: r20808

69 files changed:
gcc/ChangeLog
gcc/ChangeLog.13 [new file with mode: 0644]
gcc/Makefile.in
gcc/acconfig.h
gcc/c-decl.c
gcc/c-lex.c
gcc/combine.c
gcc/config/alpha/alpha.c
gcc/config/alpha/alpha.h
gcc/config/alpha/alpha.md
gcc/config/alpha/linux.h
gcc/config/arc/arc.c
gcc/config/arc/arc.h
gcc/config/dsp16xx/dsp16xx.h
gcc/config/h8300/h8300.c
gcc/config/i386/i386.md
gcc/config/i386/linux-aout.h
gcc/config/i386/linux-oldld.h
gcc/config/i386/linux.h
gcc/config/m32r/m32r.h
gcc/config/m68k/lb1sf68.asm
gcc/config/m88k/m88k.h
gcc/config/m88k/m88k.md
gcc/config/mips/iris6.h
gcc/config/mips/mips.h
gcc/config/mips/mips.md
gcc/config/ns32k/ns32k.c
gcc/config/sparc/sparc.h
gcc/config/sparc/sparc.md
gcc/configure
gcc/configure.in
gcc/configure.lang
gcc/cplus-dem.c
gcc/cse.c
gcc/dbxout.c
gcc/dwarf2out.c
gcc/emit-rtl.c
gcc/expmed.c
gcc/expr.c
gcc/final.c
gcc/flags.h
gcc/flow.c
gcc/fold-const.c
gcc/function.c
gcc/gcc.1
gcc/gcc.c
gcc/genattrtab.c
gcc/gencheck.c
gcc/genemit.c
gcc/getopt.c
gcc/install.texi
gcc/invoke.texi
gcc/mips-tfile.c
gcc/objc/objc-api.h
gcc/objc/sendmsg.c
gcc/print-rtl.c
gcc/protoize.c
gcc/real.c
gcc/regclass.c
gcc/reload.c
gcc/reload1.c
gcc/reorg.c
gcc/rtl.h
gcc/texinfo.tex
gcc/tm.texi
gcc/toplev.c
gcc/tree.c
gcc/tree.h
gcc/version.c

index 354de5aa240a30cd828cdc8ccec9b7e6fd59e39a..3e71a3b7017659084b00350afaeaae9c74c873b0 100644 (file)
@@ -1,5 +1,8 @@
 Mon Jun 29 22:12:06 1998  Jeffrey A Law  (law@cygnus.com)
 
+       * Merge from gcc2 June 9, 1998 snapshot.  See ChangeLog.13 for
+       details.
+
        * pa.c, pa.h, pa.md: Convert to gen_rtx_FOO.
 
 Mon Jun 29 20:12:41 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
diff --git a/gcc/ChangeLog.13 b/gcc/ChangeLog.13
new file mode 100644 (file)
index 0000000..5a9c6cf
--- /dev/null
@@ -0,0 +1,1503 @@
+Tue Jun  9 07:24:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * regmove.c ({next,prev}_insn_for_regmove): Properly handle end of
+       function.
+
+Mon Jun  8 15:26:49 1998  Juha Sarlin <juha@c3l.tyreso.se>
+
+       * h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24.
+
+Mon Jun  8 14:40:02 1998  John Wehle  (john@feith.com)
+
+       * i386.md (movsf_push, movsf_mem): Remove.
+       (movsf_push): Rename from movsf_push_nomove and move in front of
+       movsf; allow memory operands during and after reload.
+       (movsf_push_memory): New pattern.
+       (movsf): Don't bother checking for push_operand.  If TARGET_MOVE and
+       both operands refer to memory then force operand[1] into a register.
+       (movsf_normal): Change to unnamed pattern.
+       Likewise for movdf, movxf, and friends.
+
+Mon Jun  8 13:18:04 1998  Martin v. Loewis  <loewis@informatik.hu-berlin.de>
+
+       * Makefile.in (TREE_H): Add tree-check.h.
+       (tree-check.h, s-check, gencheck): New targets.
+       (STAGESTUFF): Add s-check.
+       * gencheck.c: New file.
+       * tree.c (tree_check, tree_class_check, expr_check): New functions.
+       * tree.h (TREE_CHECK, TREE_CLASS_CHECK): Define.
+       (TYPE_CHECK, DECL_CHECK): Define.
+       Modify all access macros to use generated checking macros.
+       * acconfig.h (ENABLE_CHECKING): Undefine.
+       * configure.in (--enable-checking): New option.
+
+Mon Jun  8 12:13:25 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.ed>
+
+       * regmove.c: Remove include for varargs or stdarg.
+
+Mon Jun  8 07:49:41 1998  Andris Pavenis   <pavenis@lanet.lv>
+
+       * gcc.c (link_command_spec): Support LINK_COMMAND_SPEC.
+
+Sun Jun  7 18:00:28 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * fold-const.c (fold, case EQ_EXPR): When folding VAR++ == CONST
+       or VAR-- == CONST construct a proper mask if VAR is a bitfield.
+       Cope with CONST being out of range for the bitfield.
+
+Sun Jun  7 17:19:35 1998  Tom Quiggle  <quiggle@sgi.com>
+
+       * mips/iris6.h (DWARF2_FRAME_INFO): Define.
+       * dwarf2out.c (dwarf2out_do_frame): Do something if DWARF2_FRAME_INFO.
+
+Sun Jun  7 15:29:04 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * regmove.c: New file.
+       * Makefile.in (OBJS): Add regmove.o.
+       (regmove.o): New rules.
+       (mostlyclean): Remove regmove dumps.
+       * toplev.c (regmove_{dump,dump_file,time}, flag_regmove): New vars.
+       (f_options): Add -foptimize-register-move.
+       (compile_file): Run regmove pass after combine pass and do its dump.
+       (main): Enable regmove dump when -dN or -da.
+       (fatal_insn): Flush regmove dump file.
+       * flags.h (flag_regmove): Declare.
+       * flow.c (find_use_as_address): Export.
+       * rtl.h (find_use_as_address): Declare.
+       * local-alloc.c (optimize_reg_copy_{1,2}): Removed, all calls deleted.
+       * reload1.c (count_occurrences): Export.
+       * reload.h (count_occurrences): Declare.
+
+Sun Jun  7 09:30:31 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (uninstall): Uninstall gcov.
+
+       * alpha.h (ASM_COMMENT_START): Define.
+
+       * alpha.h (EXTRA_CONSTRAINT, case 'S'): New case.
+       * alpha.md ({ashl,ashr,lshr}di3): Use 'S' for constraint.
+
+       * i386.md (cmpxf): Add missing extend pattern from SFmode and fix
+       operand numbers in one extend pattern from DFmode.
+
+       * pa.md ({pre,post}_{ld,st}wm and similar): When operand is being
+       incremented, use '+', not '=', for constraint.
+
+       * reload.c (find_reloads): Give preference to pseudo that was the
+       reloaded output of previous insn.
+
+       * emit-rtl.c (init_emit_once): Provide default for DOUBLE_TYPE_SIZE.
+
+       * expr.c (init_expr_once): Free all RTL we generate here.
+       * expmed.c (init_expmed): Allocate all RTX in memory we'll free.
+
+       * genemit.c (main): Generate #include "reload.h".
+
+       * expr.c (expand_expr, case INDIRECT_EXPR): A dereference of
+       a REFERENCE_TYPE is always considered in a structure.  Likewise for
+       a dereference of a NOP_EXPR whose input is a pointer to aggregate.
+
+Sat Jun  6 17:25:14 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * mips.md (reload_{in,out}di): Allow other operand to be invalid
+       MEM and get any reload replacement before using address.
+
+Tue May 26 18:52:23 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * reload1.c (reload): Get MEM_IN_STRUCT_P and RTX_UNCHANGING_P
+       from reg_equiv_memory_loc; set the latter when changing REG to MEM.
+       (alter_reg): Don't set RTX_UNCHANGING_P for shared slots.
+
+Mon May 25 12:07:12 1998  Hans-Peter Nilsson  <hp@axis.se>
+
+       * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767.
+
+Sun May 24 21:50:12 1998  Alan Modra <alan@spri.levels.unisa.edu.au>
+
+       * i386/linux{,-aout,oldld}.h (ASM_COMMENT_START): Define.
+
+Sun May 24 11:58:37 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md (adddi3, subdi3): Properly negate the DImode constant.
+
+Sun May 24 11:30:08 1998  Torbjorn Granlund  <tege@matematik.su.se>
+
+       * m68k/lb1sf68.asm (__addsf3): Fix typo in exg on coldfire.
+
+Sun May 24 09:38:17 1998  John Wehle  (john@feith.com)
+
+       * i386.md (movsi): Remove redundant integer push patterns.
+       Don't check for TARGET_PUSH_MEMORY when pushing constants or registers.
+
+Sun May 24 08:59:27 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (fold, case EQ_EXPR): Split COMPLEX_TYPE operands
+       if either is COMPLEX_CST in addition to COMPLEX_EXPR.
+
+       * expr.c (do_jump, case EQ_EXPR, case NE_EXPR): Check for COMPLEX
+       before testing for operand 1 being zero.
+
+       * genattrtab.c (optimize): Define.
+
+       * configure.lang: Fix substitution of target_alias.
+
+Sat May 23 22:31:17 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * emit_rtl.c (double_mode): New variable.  
+       (init_emit_once): Set and use it.
+       * real.c (ereal_atof, real_value_truncate): Handle double_mode not
+       being DFmode for C4x.
+       
+Sat May 23 22:19:55 1998  Mike Stump  <mrs@wrs.com>
+
+       * expr.c (expand_builtin_setjmp): Handle BUILTIN_SETJMP_FRAME_VALUE.
+       * i960.h (SETUP_FRAME_ADDRESSES, BUILTIN_SETJMP_FRAME_VALUE): Define.
+       * i960.md (ret, flush_register_windows): Define.
+       (nonlocal_goto): Likewise.  Nested function nonlocal gotos don't
+       work yet.
+
+Sat May 23 18:45:59 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k/t-linux: Remove stuff already included in config/t-linux.
+
+Sat May 23 18:35:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * final.c: Select <stab.h> and "gstab.h" with NO_STAB_H.
+
+       * gcc.c (default_compilers): Remove ".ada" extension.
+
+       * combine.c (rtx_equal_for_field_assignment): Remove code that
+       checks get_last_value.
+
+       * Makefile.in (uninstall): Delete info files.
+
+Sat May 23 18:28:27 1998  Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
+
+       * c-decl.c (start_decl): Use new macro SET_DEFAULT_DECL_ATTRIBUTES.
+       * c-lex.c (check_newline): Put last read character back on input
+       stream.
+
+Sat May 23 18:13:53 1998  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.md (floatsidf2_loadaddr): rs6000_fpmem_offset will be
+       negative in a stackless frame.
+       * rs6000.c (rs6000_stack_info): Don't include fixed-size link area
+       in stackless frame size.  Support 64-bit stackless frame size.
+       Combine fpmem offset calculations and don't add total_size to
+       offset if not pushing a stack frame.
+
+       * tree.c (get_inner_array_type): New function.
+       * tree.h (get_inner_array_type): Likewise.
+
+Wed May 20 15:42:22 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expmed.c (expand_divmod): Save last divison constant and
+       if rem is same as div, don't adjust rem cost.
+
+Thu May 14 14:11:37 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * alpha/vxworks.h: New file.
+       * configure.in (alpha*-*-vxworks*): New target.
+
+       * alpha.c (tree.h): Include earlier.
+       (alpha_initialize_trampoline): New function.
+       * alpha.h (INITIALIZE_TRAMPOLINE): Call it.
+       * alpha/linux.h (INITIALIZE_TRAMPOLINE): Don't redefine.
+
+Thu May 14 13:35:53 1998  Cyrille Comar  <comar@gnat.com>
+
+       * Makefile.in (STAGESTUFF): Add s-under.
+
+Wed May 13 17:38:35 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * combine.c (simplify_comparison, case AND): Don't commute AND
+       with SUBREG if constant is whole mode and don't do if lowpart
+       and not WORD_REGISTER_OPERATIONS.
+
+       * expmed.c (expand_mult): Use 0 as add_target if should preserve
+       subexpressions.
+
+Mon May 11 17:26:06 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * dwarf2out.c: Undo most recent change.
+
+Sun May 10 17:09:20 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (fold_range_test, fold): If need to make SAVE_EXPR
+       to do optimization, suppress if contains_placeholder_p.
+
+Thu May  7 18:14:31  Paul Eggert  <eggert@twinsun.com>
+
+       * dwarf2out.c: Don't assume `.section ".text"' causes assembler to
+       treat .text as label for start of section; instead, output
+       `.section ".text"; .LLtext0:' and use .LLtext0 in label contexts.
+       (ABBREV_LABEL, DEBUG_INFO_LABEL, DEBUG_LINE_LABEL, TEXT_LABEL): New.
+       (abbrev_label, debug_info_label, debug_line_label, text_label): New.
+       (dwarf2out_init): Initialize the vars.  Output defn for text_label.
+       (dwarf2out_finish): Output defns for the other 3 vars.
+       (dw_val_node): Rename val_section to val_section_label, as it's
+       now a label, not a section.
+       (add_AT_section_offset): Arg is now a label, not a section.
+       (print_die): In label contexts, output section label, not section.
+       (output_die, output_compilation_unit_header): Likewise.
+       (output_{pubnames,aranges,line_info}, dwarf2out_finish): Likewise.
+
+       * fixinc.wrap: Renamed from fixinc.math.  Put wrapper around
+       curses.h if it contains `typedef char bool;'.
+
+       * configure.in (arm-*-netbsd*): Rename fixinc.math to fixinc.wrap.
+       (i[34567]86-*-freebsdelf*, i[34567]86-*-freebsd*): Likewise.
+       (i[34567]86-*-netbsd*, i[34567]86-*-solaris2*): Likewise.
+       (m68k-*-netbsd*, mips-dec-netbsd*, ns32k-pc532-netbsd*): Likewise.
+       (powerpcle-*-solaris2*, sparc-*-netbsd*, sparc-*-solaris2*): Likewise.
+       (vax-*-netbsd*): Likewie.
+
+Wed May  6 06:44:28 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * combine.c (simplify_rtx, case TRUNCATE): Reflect that it sign-extends
+       instead of zero-extending.
+
+Sat May  2 20:39:22 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (fold): When commutting COND_EXPR and binary operation,
+       avoid quadratic behavior if have nested COND_EXPRs.
+
+Tue Apr 28 17:30:05 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * mips.h (HOST_WIDE_INT): Define if not already.
+       (compute_frame_size, mips_debugger_offset): Return HOST_WIDE_INT.
+       (DEBUGGER_{AUTO,ARG}_OFFSET): Cast second arg to HOST_WIDE_INT.
+       * mips.c (mips_debugger_offset): Now returns HOST_WIDE_INT.
+       Likewise for internal variable frame_size.
+
+       * final.c (alter_subreg): Make new SUBREG if reload replacement
+       scheduled inside it.
+
+       * dwarf2out.c (add_bound_info, case SAVE_EXPR): Pass 
+       SAVE_EXPR_RTL address through fix_lexical_addr.
+
+Mon Apr 27 18:57:18 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/sni-svr4.h (CPP_PREDEFINES): Add -Dsinix and -DSNI.
+
+Mon Apr 20 14:48:29 1998  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.md (mov{sf,df} define_splits): When splitting move of
+       constant to int reg, don't split  insns that do simple AND and OR
+       operations; just split each word and let normal movsi define split
+       handle it further.
+
+Sun Apr 19 20:21:19 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * real.h (C4X_FLOAT_FORMAT): New macro.
+       * real.c (c4xtoe, etoc4x, toc4x): New functions.
+
+Sun Apr 19 20:17:32 1998  Niklas Hallqvist  <niklas@petra.appli.se>
+
+       * m68k.c (notice_update_cc): Use modified_in_p to check for update.
+
+Sun Apr 19 18:48:07 1998  K. Richard Pixley  <rich@kyoto.noir.com>
+
+       * fixincludes: Discard empty C++ comments.
+       Special case more files with C++ comments nested in C comments.
+
+Sun Apr 19 18:30:11 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md ({add,sub}di3): Optimize for constant operand.
+
+Sun Apr 19 18:27:11 1998  Alan Modra <alan@spri.levels.unisa.edu.au>
+
+       * i386.c (output_387_binary_op): Swap operands when popping if result
+       is st(0).
+
+Sun Apr 19 17:58:01 1998  Peter Jeremy  <peter.jeremy@alcatel.com.au>
+
+       * expr.c (do_jump_by_parts_equality_rtx): Now public.
+       * expmed.c (do_cmp_and_jump): New function.
+       (expand_divmod): Use do_cmp_and_jmp instead of emit_cmp_insn and
+       emit_jump_insn.
+
+Sun Apr 19 07:48:37 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-typeck.c (build_c_cast): Check underlying type when seeing
+       if discarding const or volatile.
+
+       * c-decl.c (pushdecl): Avoid duplicate warning about implicit redecl.
+
+       * configure.in (stab.h): Check for it.
+       (i386-*-vsta): Include xm-i386.h too.
+       * dbxout.c (stab.h): Include based on autoconf results.
+       * vax/xm-vms.h (NO_STAB_H): Deleted.
+       * alpha/xm-vms.h, xm-mips.h, i386/xm-mingw32.h, i386/go32.h: Likewise.
+       * i386/xm-cygwin32.h: Likewise.
+       * i386/xm-vsta.h (NO_STAB_H): Likewise.
+       (i386/xm-i386.h): No longer include.
+
+       * mips.c: Cleanups and reformatting throughout.
+       ({expand,output}_block_move): Use HOST_WIDE_INT for sizes.
+       (mips_debugger_offset, compute_frame_size): Likewise.
+       (save_restore_insns, mips_expand_{pro,epi}logue): Likewise.
+       (siginfo): Deleted.
+       (override_options): Don't set up to call it; don't call setvbuf.
+
+Mon Apr 13 06:40:17 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * configure.in (sparc-*-vxsim*): Include xm-siglist.h and
+       define USG and POSIX.
+
+Sun Apr 12 21:59:27 1998  Jeffrey A. Law  <law@cygnus.com>
+
+       * calls.c (expand_call): Fix typo in STRICT_ARGUMENT_NAMING.
+
+Sun Apr 12 21:42:23 1998  D. Karthikeyan  <karthik@cdotd.ernet.in>
+
+       * m68k.h (TARGET_SWITCHES): Add missing comma.
+
+Sun Apr 12 21:33:33 1998  Eric Valette  <valette@crf.canon.fr>
+
+       * configure.in (i[34567]86-*-rtemself*): New configuration.
+       * i386/rtemself.h: New file.
+
+Sun Apr 12 21:08:28 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * loop.c (loop_optimize): Reset max_uid_for_loop after
+       find_and_verify_loops call.
+       (strength_reduce): In auto_inc_opt code, verify v->insn has valid
+       INSN_LUID.
+
+Sun Apr 12 20:54:59 1998  Richard Earnshaw (rearnsha@arm.com)
+
+       * configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file.
+       Add USG and POSIX to xm_defines.
+
+Sun Apr 12 20:47:37 1998  Pat Rankin  <rankin@eql.caltech.edu>
+
+       * cccp.c (eprint_string): New function.
+       (do_elif, do_else, verror): Use it instead of fwrite(,,,stderr).
+       (error_from_errno, vwarning): Likewise.
+       ({verror,vwarning,pedwarn}_with_line): Likewise.
+       (pedwarn_with_file_and_line, print_containing_files): Likewise.
+
+Sun Apr 12 20:40:44 1998  Richard Henderson  <rth@dot.cygnus.com>
+
+       * configure.in (alpha*-*-linux-gnu*): Add alpha/t-crtbe.
+       Add crt{begin,end}.o in extra_parts and delete crt{begin,end}S.o.o
+       * alpha/t-crtbe, alpha/crt{begin,end}.asm: New files.
+       
+       * alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi.
+       * alpha.c (print_operand): Handle it.
+       * alpha.md (fix_trunc[ds]fdi2): Use it.  Add earlyclobber pattern
+       for ALPHA_TP_INSN.
+
+Sun Apr 12 13:09:46 1998  Scott Christley  <scottc@net-community.com>
+
+       * objc/encoding.c (objc_sizeof_type, _C_VOID): New case.
+
+Sun Apr 12 13:04:55 1998  Nikolay Yatsenko  (nikolay@osf.org)
+
+       * configure.in (i[34567]86-*-osf1*): New entry.
+       * i386/osf1-c[in].asm: New files for OSF/1.
+       * i386/osf1elf{,gdb}.h, i386/[xt]-osf1elf, i386/xm-osf1elf.h: Likewise.
+
+Sun Apr 12 10:03:51 1998  Noel Cragg  <noel@red-bean.com>
+
+       * fixincludes: Remove specification of parameters when renaming
+       functions in Alpha DEC Unix include files.
+
+Sun Apr 12 07:33:46 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * mips.c (large_int): Use HOST_WIDE_INT, not int.
+       (print_operand): Use HOST_WIDE_INT_PRINT_* macros.
+
+       * toplev.c (main): Sort order of handling of -d letters.
+       Use `F' instead of `D' for addressof_dump.
+
+       * libgcc2.c (_eh_compat): Deleted.
+       * Makefile.in (LIB2FUNCS): Delete _eh_compat.
+
+       * configure.in (alpha*-*-linux-gnu*): Don't include alpha/xm-linux.h.
+
+       * c-common.c (check_format_info): Properly test for nested pointers.
+
+       * pa.md (casesi0): Add missing mode for operand 0.
+
+       * function.c (purge_addressof_1, case MEM): If BLKmode, put ADDRESSOF
+       into stack.
+
+       * c-parse.in (label): Give warning if pedantic and label not integral.
+
+       * c-decl.c (grokdeclarator): Don't warn about return type if in
+       system header.
+
+       * reload.c (reload_nongroup): New variable.
+       (push{_secondary,}_reload): Initialize it.
+       (find_reloads): Compute it.
+       (debug_reload): Print it.
+       * reload.h (reload_nongroup): Declare.
+       * reload1.c (reload): Use reload_nongroup instead of local computation.
+       Check caller_save_spill_class against any nongroup reloads.
+       (reloads_conflict): No longer static.
+
+Sun Apr 12 05:52:18 1998  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * vax.md (call patterns): Operand 1 is always a CONST_INT.
+
+Sat Apr 11 16:01:11 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * convert.c (convert_to_{pointer,integer,real,complex}): Use switch.
+       Add missing integer-like types.
+       Simplify return of zero in error case.
+       (convert_to_pointer): Remove dubious abort.
+       (convert_to_integer, case POINTER_TYPE): Make recursive call.
+       (convert_to_integer, case COND_EXPR): Always convert arms.
+       * tree.c (type_precision): Deleted.
+
+       * cccp.c (do_warning): Give pedantic warning if -pedantic and not
+       in system file.
+       * cpplib.c (do_warning): Likewise.
+
+       * function.c (target_temp_slot_level): Define here.
+       (push_temp_slots_for_target, {get,set}_target_temp_slot_level): New.
+       * stmt.c (target_temp_slot_level): Don't define here.
+       * expr.h (temp_slot_level): New declaration.
+
+Fri Apr 10 16:35:48 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * c-common.c (decl_attributes): Support strftime format checking.
+       (record_function_format, {check,init_function}_format_info): Likewise.
+       (enum format_type): New type.
+       (record_function_format): Now static; takes value of type
+       enum format_type instead of int.
+       (time_char_table): New constant.
+       (struct function_format_info): format_type member renamed from is_scan.
+       (check_format_info): Use `warning' rather than sprintf followed by
+       `warning', to avoid mishandling `%' in warnings.
+       Change a `pedwarn' to `warning'.
+       * c-tree.h (record_function_format): Remove decl.
+
+Thu Apr  2 17:34:27 1998  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * regclass.c (memory_move_secondary_cost): Protect uses of
+       SECONDARY_{INPUT,OUTPUT}_RELOAD_CLASS with #ifdef tests.
+
+Thu Apr  2 07:06:57 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (standard_68881_constant_p): Don't use fmovecr on 68060.
+
+Thu Apr  2 06:19:25 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * Makefile.in (version.c): Put "cvs log" output in build directory.
+
+       * reload.h (MEMORY_MOVE_COST): Define here if not already defined.
+       (memory_move_secondary_cost): Declare.
+       * regclass.c (MEMORY_MOVE_COST): Don't define default here.
+       (memory_move_secondary_cost) [HAVE_SECONDARY_RELOADS]: New function.
+       (regclass, record_reg_classes, copy_cost, record_address_regs):
+       Pass register class and direction of move to MEMORY_MOVE_COST.
+       (top_of_stack) [HAVE_SECONDARY_RELOADS]: New static array.
+       (init_regs) [HAVE_SECONDARY_RELOADS]: Initialize it.
+       * reload1.c (MEMORY_MOVE_COST): Don't define default here.
+       (emit_reload_insns, reload_cse_simplify_set): Pass register class
+       and direction of move to MEMORY_MOVE_COST.
+       * 1750a.h (MEMORY_MOVE_COST): Add extra ignored arguments.
+       * a29k.h, alpha.h, arc.h, arm.h, dsp16xx.h, i386.h, m32r.h: Likewise.
+       * m88k.h, rs6000.h: Likewise.
+       * mips.h (MEMORY_MOVE_COST): Likewise.
+       Add memory_move_secondary_cost result to cpu-specific cost.
+
+Mon Mar 30 13:56:30 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/ultrix.h (SUBTARGET_CPP_SPEC): Define.
+
+Wed Mar 25 16:09:01 1998  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.h (FUNCTION_ARG_PADDING): Cast result to be enum direction.
+       (function_arg_padding): Declare.
+
+       * rs6000.c: Include stdlib.h if we have it.
+       (function_arg_padding): Change return type to int, cast enum's to int.
+
+       (From Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>)
+       * rs6000.c (rs6000_override_options): Change type of `i', `j' and
+       `ptt_size' from int to size_t.
+       (rs6000_file_start): Likewise for `i'.
+       (rs6000_replace_regno): Add default case in enumeration switch.
+       (output_epilog): Remove unused variable `i'.
+       (rs6000_longcall_ref): Remove unused variables `len', `p', `reg[12]'.
+       * rs6000.h (ADDITIONAL_REGISTER_NAMES): Add missing braces around
+       initializer.
+       (get_issue_rate, non_logical_cint_operand): Add prototype.
+       (rs6000_output_load_toc_table): Likewise.
+       * rs6000.md (udivmodsi4): Add explicit braces to avoid ambiguous
+       `else'.
+Wed Mar 25 02:39:01 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in (i[34567]86-*-solaris2*, powerpcle-*-solaris2*,
+       sparc-*-solaris2*): Use fixinc.svr4 if Solaris 2.0 through 2.4.
+
+Mon Mar 23 07:27:19 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * m68k.md (ashldi_const): Allow shift count in range ]32,63].
+       (ashldi3): Allow constant shift count in range ]32,63].
+       (ashrdi_const, ashrid3, lshrdi_const, lshrdi3): Likewise.
+
+       * m68k.md (zero_extend[qh]idi2, iordi_zext): New patterns.
+       (zero_extendsidi2): Avoid useless copy.
+       (iorsi_zexthi_ashl16): Avoid "0" constraint for operand 2.
+       (iorsi_zext): New name for old unnamed pattern; indentation fixes.
+
+Mon Mar 23 07:12:05 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * final.c (only_leaf_regs_used): If pic_offset_table_rtx used,
+       make sure it is a permitted register.
+
+Sun Mar 22 06:57:04 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expmed.c (extract_bit_field): Don't confuse SUBREG_WORD with
+       endian adjustment in SUBREG case.
+       Don't abort if can't make SUBREG needed for extv/extzv.
+
+Sat Mar 21 08:02:17 1998  Richard Gorton  <gorton@amt.tay1.dec.com>
+
+        * alpha.md (zero_extendqi[hsd]i2): Use "and", not "zapnot".
+
+Sat Mar 21 07:47:04 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * unroll.c (verify_addresses): Use validate_replace_rtx.
+       (find_splittable_givs): If invalid address, show nothing same_insn.
+
+Fri Mar 20 10:24:12 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * fold-const.c (fold, case CONVERT_EXPR): Replace sign-extension of
+       a zero-extended value by a single zero-extension.
+
+Thu Mar 19 14:59:32 1998  Andrew Pochinsky  <avp@ctp.mit.edu>
+
+       * sparc.h (ASM_OUTPUT_LOOP_ALIGN): Fix error in last change.
+
+Thu Mar 19 14:48:35 1998  Michael Meissner  <meissner@cygnus.com>
+
+       * gcc.c (default_arg): Don't wander off the end of allocated memory.
+
+       * rs6000/sysv4.h (RELATIVE_PREFIX_NOT_LINKDIR): Undef for System V
+       and EABI.
+
+Thu Mar 19 06:17:59 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (toplev.o): Depend on Makefile.
+
+Wed Mar 18 17:40:09 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * expr.c (convert_move): Add [QH]Imode/P[QH]Imode conversions.
+       * machmode.def (PQImode, PHImode): New modes.
+
+Wed Mar 18 17:11:18 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.md (movsf+1): Optimize moving a CONST_DOUBLE zero.
+
+Wed Mar 18 17:07:54 1998  Ken Raeburn  <raeburn@cygnus.com>
+
+       * regclass.c (init_reg_sets): Delete init of reg-move cost tables.
+       (init_reg_sets_1): Put it here.
+
+Wed Mar 18 16:43:11 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * i960.md (tablejump): Handle flag_pic.
+
+       * profile.c (branch_prob): If see computed goto, call fatal.
+
+       * calls.c (expand_call): Fix typos in n_named_args computation.
+
+Wed Mar 18 05:54:25 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (operand_equal_for_comparison_p): See if equal
+       when nop conversions are removed.
+
+       * expr.c (expand_expr, case COND_EXPR): If have conditional move,
+       don't use ORIGINAL_TARGET unless REG.
+
+       * function.c (fixup_var_refs_insns): Also delete insn storing pseudo
+       back into arg list.
+
+       * combine.c (gen_binary): Don't make AND that does nothing.
+       (simplify_comparison, case AND): Commute AND and SUBREG.
+       * i386.h (CONST_CONSTS, case CONST_INT): One-byte integers are cost 0.
+
+Mon Mar 16 15:57:17 1998  Geoffrey Keating  <geoffk@ozemail.com.au>
+
+       * rs6000.c (small_data_operand): Ensure any address referenced
+       relative to small data area is inside SDA.
+
+Sun Mar 15 16:01:19 1998  Andrew Pochinsky  <avp@ctp.mit.edu>
+
+       * sparc.h (ASM_OUTPUT_LOOP_ALIGN): Write nop's.
+
+Sun Mar 15 15:53:39 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * libgcc2.c (exit): Don't call __bb_exit_func if HAVE_ATEXIT.
+
+Sun Mar 15 15:44:41 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c: Fix bugs relating to NUL in input file name,
+       e.g. with `#line 2 "x\0y"'.
+       (PRINTF_PROTO_4): New macro.
+       (struct {file_buf,definition,if_stack}): New member nominal_fname_len.
+       (main, expand_to_temp_buffer): Store length of input file names.
+       (finclude, create_definition, do_line, conditional_skip): Likewise.
+       (skip_if_group, macroexpand): Likewise.
+       (make_{definition,undef,assertion}): Likewise.
+       (special_symbol, do_include): Use stored length of input file names.
+       (do_define, do_elif, do_else, output_line_directive, verror): Likewise.
+       (error_from_errno, vwarning, verror_with_line): Likewise.
+       (vwarning_with_line, pedwarn_with_file_and_line): Likewise.
+       (print_containing_files): Likewise.
+       (do_line): Fix off-by-1 problem: 1 too many bytes were being allocated.
+       (quote_string, pedwarn_with_file_and_line): New arg specifies length.
+       All callers changed.
+
+Sun Mar 15 15:38:16 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-typeck.c: Collect pending initializers in AVL tree instead of list.
+       (add_pending_init, pending_init_member): New functions.
+       (output_init_element): Use them.
+       (output_pending_init_elements): Rewritten to exploit AVL order.
+
+Sun Mar 15 05:10:49 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * gnu.h (GNU_CPP_PREDEFINES): Deleted; not valid in traditional C.
+       * {i386,mips}/gnu.h (CPP_PREDEFINES): Don't call GNU_CPP_PREDEFINES.
+
+       * flow.c (insn_dead_p): A CLOBBER of a dead pseudo is dead.
+
+       * alpha.h (REG_ALLOC_ORDER): Put $f1 after other nonsaved.
+
+       * sparc.c (sparc_type_code): Fix error in previous change.
+
+Sat Mar 14 05:45:21 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * i386/xm-aix.h, i386/xm-osf.h (i386/xm-i386.h): Don't include.
+       (USG): Don't define.
+       * i386/xm-isc.h (i386/xm-sysv3.h): Don't include.
+       * i386/xm-sco.h (i386/xm-sysv3.h): Likewise.
+       (BROKEN_LDEXP, SMALL_ARG_MAX, NO_SYS_SIGLIST): Don't define.
+       * m68k/xm-3b1.h (m68k/xm-m68k.h): Don't include.
+       (USG): Don't define.
+       * m68k/xm-atari.h (m68k/xm-m68kv.h): Don't include.
+       (HAVE_VPRINTF, FULL_PROTOTYPES): Don't define.
+       * m68k/xm-crds.h (m68k/xm-m68k.h): Don't include.
+       (USE_C_ALLOCA, unos, USG): Don't define.
+       * m68k/xm-mot3300.h (m68k/xm-m68k.h): Don't include.
+       (USE_C_ALLOCA, NO_SYS_SIGLIST): Don't define.
+       * m68k/xm-plexus.h (m68k/xm-m68k.h): Don't include.
+       (USE_C_ALLOCA, USG): Don't define.
+       * m88k/xm-sysv3.h (m88k/xm-m88k.h): Don't include.
+       * m68k/xm-next.h (m68k/xm-m68k.h): Don't include.
+       * ns32k/xm-pc532-min.h (ns32k/xm-ns32k.h): Don't include.
+       (USG): Don't define.
+       * rs6000/xm-mach.h: Don't include xm-rs6000.h.
+       * rs6000/xm-cygwin32.h (rs6000/xm-rs6000.h): Don't include.
+       (NO_STAB_H): Don't define.
+       * sparc/xm-linux.h (xm-linux.h): Don't include.
+       * sparc/xm-sol2.h (sparc/xm-sysv4.h): Don't include.
+       * a29k/xm-unix.h, alpha/xm-linux.h, arm/xm-linux.h: Deleted.
+       * arm/xm-netbsd.h, i386/xm-bsd386.h, i386/xm-gnu.h: Deleted.
+       * i386/xm-linux.h, i386/xm-sun.h, i386/xm-sysv3.h: Deleted.
+       * i386/xm-winnt.h,  m68k/xm-altos3068.h, m68k/xm-amix.h: Deleted.
+       * m68k/xm-amix.h, m68k/xm-hp320.h, m68k/xm-linux.h: Deleted.
+       * m68k/xm-m68kv.h, mips/xm-iris5.h, ns32k/xm-genix.h: Deleted.
+       * sparc/xm-pbd.h, vax/xm-vaxv.h, xm-svr3.h, xm-linux.h: Deleted.
+       * configure.in: Reflect above changes.
+
+       * xm-siglist.h, xm-alloca.h: New files.
+       * i386/xm-sysv4.h (i386/xm-i386.h, xm-svr4.h): Don't include.
+       (USE_C_ALLOCA, SMALL_ARG_MAX): Don't define.
+       * i386/xm-sco5.h (i386/xm-sysv3.h): Don't include.
+       (SYS_SIGLIST_DECLARED, USE_C_ALLOCA): Don't define.
+       * rs6000/xm-sysv4.h, sparc/xm-sysv4.h: Don't include xm-svr4.h.
+       * xm-svr4.h, i386/xm-dgux.h, mips/xm-news.h, mips/xm-sysv4.h: Deleted.
+       * configure.in: Reflect above changes.
+
+       * configure.in ({,host_,build_}xm_defines): New variables.
+       Set to USG instead of including xm-usg.h.
+       Write #define lines in config.h files from xm_defines vars.
+       * xm-usg.h: Deleted.
+
+Fri Mar 13 07:10:59 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * calls.c (expand_call): Fix typo in previous change.
+
+       * sparc.c (sparc_type_code): Avoid infinite loop when have
+       pointer to array of same pointer.
+       (sparc_type_code, case REAL_TYPE): Process subtypes here too.
+
+       * mips/bsd-4.h, mips/iris3.h, mips/news{4,5}.h: Don't include mips.h.
+       * mips/news5.h, mips/osfrose.h, mips/svr{3,4}-4.h: Likewise.
+       * mips/ultrix.h: Likewise.
+       * mips/cross64.h: Don't include iris6.h.
+       * mips/ecoff.h: Don't include mips.h or gofast.h.
+       * mips/elforion.h: Don't include elf64.h.
+       * mips/iris4.h: Don't include iris3.h.
+       * mips/iris4loser.h: Don't include iris4.h.
+       * mips/iris5gas.h: Don't include iris5.h.
+       * mips/elflorion.h, mips/nws3250v4.h, mips/xm-iris{3,4}.h: Deleted.
+       * mips/xm-nws3250v4.h, mips/xm-sysv.h: Deleted.
+       * mips/rtems64.h: Don't include elflorion.h.
+       * mips/sni-gas.h: Don't include sni-svr4.h.
+       * mips/svr4-t.h: Don't include svr4-5.h.
+       * mips/dec-osf1.h: Also include mips.h.
+       * mips/ecoffl.h, mips/elf.h: Also include mips.h and gofast.h.
+       * mips/iris5.h: Also include iris3.h and mips.h.
+       * xm-usg.h: New file.
+       * mips/xm-iris5.h: Don't include xm-mips.h; don't define USG.
+       * mips/xm-news.h, mips/xm-sysv4.h: Don't include xm-sysv.h.
+       * configure.in: Reflect above changes.
+
+Thu Mar 12 07:18:48 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.h (STRICT_ARGUMENT_NAMING): Provide default value of 0.
+       * calls.c (expand_call): Use value of STRICT_ARGUMENT_NAMING.
+       * function.c (assign_parm): Likewise.
+       * mips/abi64.h (STRICT_ARGUMENT_NAMING): Return 0 for ABI_32.
+       * sparc.h (STRICT_ARGUMENT_NAMING): Only nonzero for V9.
+
+       * calls.c (expand_call, expand_library_call{,_value}, store_one_arg):
+       Rework handling of REG_PARM_STACK_SPACE to treat return value of
+       zero as if macro not defined; add new arg to emit_push_insn.
+       * expr.c (emit_push_insn): New arg, REG_PARM_STACK_SPACE.
+       * expr.h (emit_push_insn): Likewise.
+       * mips/abi64.h (REG_PARM_STACK_SPACE): Define.
+
+Wed Mar 11 06:58:13 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.h (CONST_OK_FOR_LETTER_P, case 'M'): Correct range check.
+
+Wed Mar 11 06:15:52 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (emit_push_insn): Use loop to find movstr patterns
+       instead of explicit tests.
+
+       * Makefile.in (extraclean): Don't delete install1.texi.
+
+Tue Mar 10 14:27:51 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * combine.c (make_field_assignment): Don't get confused if OTHER
+       has VOIDmode and don't do anything if DEST is wider than a host word.
+
+       * vax.c (check_float_value): Cast bcopy args to char *.
+
+Tue Mar 10 13:56:12 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/abi64.h (LONG_MAX_SPEC): Check MIPS_ABI_DEFAULT and
+       TARGET_DEFAULT and define __LONG_MAX__ appropriately.
+       Add support for -mabi=X, -mlong64, and -mgp{32,64} options.
+       * mips.c (mips_abi): Change type to int.
+       * mips.h (enum mips_abi_type): Delete.
+       (ABI_32, ABI_N32, ABI_64, ABI_EABI): Define as constants.
+       (mips_abi): Change type to int.
+
+Mon Mar  2 08:06:58 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Version 2.8.1 released.
+
+       * Makefile.in (mostlyclean): Remove duplicate deletion of temp
+       files.  Delete more stamp files and [df]p-bit.c
+       (clean): Don't delete stamp files here.
+       (VERSION_DEP): New variable.
+       (distdir-finish): Pass a value of null for it.
+       (version.c): Use it.
+       Avoid broken pipe with cvs log.
+
+       * objc/Make-lang.in (objc/runtime-info.h): Rename emptyfile to
+       tmp-runtime and delete at end.
+
+Sun Mar  1 05:50:25 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * tree.c (build_reference_type): Handle obstacks like
+       build_pointer_type.
+
+       * Makefile.in (tmp-gcc.xtar): Renamed from gcc.xtar.
+       (gcc.xtar.gz): Deleted; merged with `dist'.
+       (diff): Create gcc-$(oldversion)-$(version).diff.
+       (distdir): Depend on distdir-cvs.
+       (distdir-cvs): New rule.
+       (distdir-start): Depend on version.c and TAGS.
+       (TAGS): Use tmp-tags instead of temp.
+       (dist): Create gcc-$(version).tar.gz.
+
+       * varasm.c (compare_constant_1): Fix typo in previous change.
+
+       * objc/Make-lang.in (objc-distdir): Properly rebuild objc-parse.c.
+
+Sat Feb 28 16:58:08 1998  Tristan Gingold  <gingold@rossini.enst.fr>
+
+       * stmt.c (expand_decl): If -fcheck-memory-usage, put vars in memory.
+       * expr.c (get_memory_usage_from_modifier): Convert
+       EXPAND_{CONST_ADDRESS, INITIALIZER} to MEMORY_USE_DONT.
+  
+Sat Feb 28 08:13:43 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * i860/fx2800.h (DATA_ALIGNMENT): Use POINTER_TYPE_P.
+       * m68k/a-ux.h (FUNCTION_VALUE): Likewise.
+       * expr.c (get_pointer_alignment, compare, do_store_flag): Likewise.
+       (expand_builtin): Likewise.
+       * fold-const.c (force_fit_type, fold_convert, fold): Likewise.
+       * function.c (assign_parms): Likewise.
+       * integrate.c (expand_inline_function): Likewise.
+       * sdbout.c (sdbout_field_types): Likewise.
+       * tree.c (integer_pow2p, tree_log2, valid_machine_attribute): Likewise.
+       * stmt.c (expand_decl): Likewise.
+       ({,bc_}expand_decl_init): Also test for REFERENCE_TYPE.
+
+       * configure.in (version_dep): New variable; if srcdir is CVS working
+       directory, set to ChangeLog.
+       (version): Supply default if no version.c.
+       * Makefile.in (version.c): New rule.
+
+       * gcc.c (snapshot_warning): New function.
+       (main): Call it for snapshots.
+
+       * dwarf2out.c (expand_builtin_dwarf_reg_size): If reg_raw_mode
+       not valid for reg, use last size.  Also refine range assertion.
+
+Sat Feb 28 05:04:47 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * enquire.c (cprop): Don't perform exhaustive search for char_min
+       and char_max when bits_per_byte > 16.
+
+Thu Feb 26 15:12:03 1998  Christopher Taylor <cit@ckshq.com>
+
+       * fixincludes: Avoid using '0-~' in egrep.
+
+Thu Feb 26 08:04:05 1998  Tristan Gingold  <gingold@messiaen.enst.fr>
+
+       * function.c (assign_parms): Call 'chkr_set_right' when DECL_RTL
+       is stack_parm.
+       * expr.c (get_memory_usage_from_modifier): Convert
+       EXPAND_{SUM, CONST_ADDRESS, INITIALIZER} to MEMORY_USE_RO.
+
+Thu Feb 26 07:33:53 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * c-lex.c (yylex): Don't munge errno before using it.
+       * cccp.c (error_from_errno, perror_with_name): Likewise.
+       * cpplib.c (cpp_error_from_errno): Likewise.
+       * gcc.c (pfatal_pexecute): Likewise.
+       * protoize.c (safe_write, find_file, process_aux_info_file): Likewise.
+       (rename_c_file, edit_file): Likewise.
+
+       * c-lex.c (yylex): Remove unused variable exceeds_double.
+
+Thu Feb 26 07:05:14 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * reorg.c (fill_slots_from_thread): Don't steal delay list from target
+       if condition code of jump conflicts with opposite_needed.
+
+Thu Feb 26 06:45:23 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (distdir-start): Don't copy CVS subdirectory of config.
+
+       * varasm.c ({compare,record}_constant_1, case CONSTRUCTOR):
+       Handle the case when we have TREE_PURPOSE values.
+
+Thu Feb 26 05:59:01 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * fixincludes (sys/limits.h): Fix a nested comment problem with
+       HUGE_VAL definition on sysV68 R3V7.1.
+
+Wed Feb 25 21:09:38 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * toplev.c (TICKS_PER_SECOND): Renamed from CLOCKS_PER_SECOND.
+
+Wed Feb 25 20:50:08 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * reorg.c (fill_slots_from_thread): Mark resources referenced in
+       opposite_needed thread.  Return delay_list even when cannot get
+       any more delay insns from end of subroutine.
+
+Wed Feb 25 19:50:01 1998  Mikael Pettersson <Mikael.Pettersson@sophia.inria.fr>
+
+       * gcc.c (lookup_compiler): Remove redundant test.
+
+Wed Feb 25 07:24:22 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * vax.md (call insns): Second operand to CALL rtl is SImode.
+
+       * configure.in (i[34567]86-*-mingw32): Support msv and crt suffix.
+       * i386/crtdll.h: New file.
+
+       * sparc.c (pic_setup_code): If -O0, write USE of pic_offset_table_rtx.
+
+       * expr.c (safe_from_p): Add new arg, TOP_P; all callers changed.
+
+Sat Feb 21 07:02:39 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * mips/iris5.h (DWARF2_UNWIND_INFO): Define to 0.
+       * mips/iris5gas.h (DWARF2_UNWIND_INFO): Define to 1.
+
+Fri Feb 20 08:27:46 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * sparc/sol2-sld.h: New file.
+       * configure.in (sparc-*-solaris2*): Use it when using system linker.
+       * toplev.c (main): Don't default to DWARF2_DEBUG with -ggdb 
+       if LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined.
+
+Fri Feb 20 08:21:49 1998  H.J. Lu  (hjl@gnu.org)
+
+       * alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Support shared library.
+       (LIB_SPEC, DEFAULT_VTABLE_THUNKS): Defined #ifndef USE_GNULIBC_1.
+       * sparc/linux.h (DEFAULT_VTABLE_THUNKS): Likewise.
+       (LIB_SPEC): Add -lc for -shared #ifndef USE_GNULIBC_1.
+       * linux.h (LIB_SPEC): Likewise.
+       * sparc/linux64.h (LIB_SPEC): Likewise; also updated for glibc 2.
+       (LIBGCC_SPEC): Removed.
+       (CPP_SUBTARGET_SPEC): Add %{pthread:-D_REENTRANT}.
+
+Fri Feb 20 05:22:12 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (distdir-start): Add dependence on bi-parser.[ch].
+
+Thu Feb 19 18:07:11 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881.
+       For 68303, 68332, cpu32, subtract MASK_68040_ONLY.
+
+Wed Feb 18 09:37:29 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * fixincludes (stdlib.h): Do not double-wrap the size_t typedef.
+
+Wed Feb 18 07:32:11 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * i960.c (emit_move_sequence): Handle unaligned stores to pseudos.
+       * i960.md (store_unaligned_[dt]i_reg): Handle register dest.
+       (store_unaligned_ti_reg): Likewise.
+
+       * m68k.h (MACHINE_STATE_{SAVE,RESTORE} [MOTOROLA]): Add %# and %/;
+       add : to make them into extended asms.
+
+Wed Feb 18 07:08:05 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * reg-stack.c (compare_for_stack_reg): Only handle FP conditional
+       move as next insn specially.
+
+       * reload.c (find_reloads): Always convert address reload for
+       non-reloaded operand to RELOAD_FOR_OPERAND_ADDRESS.
+
+       * emit-rtl.c (hard-reg-set.h): Include.
+       (get_lowpart_common): Don't make new REG for hard reg in a 
+       class that cannot change size.
+       * Makefile.in (emit-rtl.o): Depend on hard-reg-set.h.
+
+Sat Feb 14 09:59:00 1998  Richard Earnshaw (rearnsha@arm.com)
+
+       * arm.md (movsfcc): Also validate operands[3] for hard float.
+       (movdfcc): Only accept fpu_add_operand for operands[3].8
+
+Sat Feb 14 09:32:34 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * dwarf2out.c (expand_builtin_dwarf_reg_size): New variable mode.
+       Convert CCmode to word_mode before calling GET_MODE_SIZE.
+
+Sat Feb 14 09:27:42 1998  David Edelsohn  <edelsohn@mhpcc.edu>
+
+       * rs6000.h (MY_ISCOFF): Check for U803XTOCMAGIC.
+
+Sat Feb 14 08:29:43 1998  Arvind Sankar  <arvind@cse.iitb.ernet.in>
+
+       * t-svr4 (TARGET_LIBGCC_CFLAGS): New definition.
+
+Sat Feb 14 07:45:16 1998  Ken Rose (rose@acm.org)
+
+        * reorg.c (fill_slots_from_thread): New parameter, delay_list.
+       All callers changed.
+
+Sat Feb 14 07:14:02 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * reload.c (debug_reload): Properly output insn codes.
+
+       * pa.c (emit_move_sequence): If in reload, call find_replacement.
+
+       * gansidecl.h (bcopy, bzero, {,r}index): Don't define if IN_LIBGCC2.
+
+       * combine.c (distribute_notes, case REG_DEAD): When seeing if place
+       to put new note sets register, use reg_bitfield_target_p, as in
+       original code.
+
+       * gcc.c (process_command): If file is for linker, set lang to "*".
+       (lookup_compiler): Return 0 for language of "*".
+
+       * sched.c (attach_deaths, case SUBREG): Fix error in last change.
+
+       * i386.md (mov[sdx]fcc): Disable for now.
+       (mov[sd]fcc_1): Add earlyclobber for output on last alternative.
+
+Sat Feb 14 06:42:50 1998  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * except.c (get_dynamic_handler_chain): Only make call once per func.
+       (expand_fixup_region_{start,end}): New functions.
+       (expand_eh_region_start_tree): Store cleanup into finalization here.
+       * stmt.c (expand_cleanups): Use new functions to protect fixups.
+
+       * except.c (get_dynamic_handler_chain): Build up a FUNCTION_DECL.
+       * optabs.c (init_optabs): Don't init get_dynamic_handler_chain_libfunc.
+       * expr.h (get_dynamic_handler_chain_libfunc): Deleted.
+
+Sat Feb 14 06:34:41 1998  Peter Lawrence  <Peter.Lawrence@Eng.Sun.COM>
+
+       * optabs.c (emit_conditional_move): Don't reverse condition for FP.
+
+Fri Feb 13 07:22:04 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (mostlyclean): Only use s-* convention for stamp
+       files in main dir.
+
+       * configure.in: Add support for i786 (Pentium II); same as i686.
+
+Thu Feb 12 20:16:35 1998  Michael Meissner  <meissner@cygnus.com>
+
+       * rs6000.md: Replace gen_rtx (CONST_INT,...) with GEN_INT.
+
+Thu Feb 12 10:08:14 1998  John Hassey  <hassey@dg-rtp.dg.com>
+
+       * configure.in (i[3456]86-dg-dgux*): Don't need fixincludes.
+
+Thu Feb 12 07:27:39 1998  Mumit Khan <khan@xraylith.wisc.edu>
+       
+       * i386/cygwin32.h (NO_IMPLICIT_EXTERN_C): Define.
+       about system headers.
+       (LIB_SPEC): Add -ladvapi32 -lshell32.
+
+Thu Feb 12 07:19:31 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (expand_assignment): Fix typo in checking OFFSET.
+
+       * gbl-ctors.h (atexit): Don't define unless needed.
+
+       * combine.c (distribute_notes): Completely check for note operand being
+       only partially set on potential note target; adjust what notes
+       we make in that case.
+
+       * i386/xm-go32.h (HAVE_{BCOPY,BZERO,INDEX,RINDEX}): Deleted.
+
+Wed Feb 11 08:53:27 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * calls.c (emit_call_1): Size args now HOST_WIDE_INT.
+       (expand_call): struct_value_size now HOST_WIDE_INT.
+
+Tue Feb 10 09:04:39 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * integrate.c (initialize_for_inline): Ensure DECL_INCOMING_RTL
+       is always copied.
+
+Tue Feb 10 06:10:49 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c (rescan): Fix bug with macro name appearing
+       immediately after L'x'.
+
+Mon Feb  9 20:45:32 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * c-common.c (format_char_info): Add new field zlen.
+       (print_char_table): Remove entry for 'Z' as a format character.
+       Initialize zlen field as appropriate.
+       (scan_char_table): Set zlen field to NULL in each entry.
+       (check_format_info): Recognize 'Z' as a length modifier, with a
+       warning in pedantic mode.
+       Avoid infinite loop when a repeated flag character is detected.
+
+Mon Feb  9 09:24:04 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * c-parse.in (primary): Minor wording fix in diagnostic.
+
+Mon Feb  9 07:50:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * c-decl.c (grokdeclarator): Remove warning on inline of varargs.
+
+       * reload.c (find_reloads): Check for const_to_mem case before
+       checking for invalid reload; use force_const_mem if no_input_reloads.
+
+       * function.c (push_function_context_to): Call init_emit last.
+
+       * protoize.c (my_link): Define as -1 in mingw32.
+       (link): Remove declaration.
+
+       * rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p.
+
+       * integrate.c (expand_inline_function): Clear label_map with bzero.
+
+       * unroll.c (copy_loop_body, case JUMP_INSN): Correct error in last
+       change: call single_set on COPY, not INSN.
+
+Sun Feb  8 08:07:37 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * msdos/top.sed, winnt/config-nt.sed: Change version number to 2.8.1.
+
+       * configure.in (i[3456]86-*-sco3.2v5*): Use cpio for headers.
+
+Sat Feb  7 07:32:46 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * i386/mingw32.h (LIBGCC_SPEC, STARTFILE_SPEC, MATH_LIBRARY):
+       Use msvcrt, not crtdll.
+
+Fri Feb  6 20:32:06 1998  Geert Bosch  <bosch@gnat.com>
+
+       * i386/xm-os2.h (EMX, USG, BSTRING, HAVE_{PUTENV,VPRINTF,STRERROR}):
+       Define ifdef __EMX__.
+       (strcasecmp): Define to be stricmp if __EMX__.
+       (spawnv{,p}): Don't define if EMX.
+       (OBJECT_SUFFIX): Don't define if EMX.
+       (MKTEMP_EACH_FILE): Define.
+
+Fri Feb  6 16:37:29 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * objc/Make-lang.in (objc.stage1): Depend on stage1-start.
+       (objc.stage2, objc.stage3, objc.stage4): Likewise for the
+       respective stageN-start targets. 
+       (objc/sendmsg.o): Depend on objc/runtime-info.h.
+
+Fri Feb  6 16:27:09 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>
+
+       * stmt.c (expand_asm_operands): Properly treat asm statement
+       statements with no operands as volatile.
+
+Fri Feb  6 16:03:25 1998  Greg McGary  <gkm@gnu.org>
+
+       * c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only.
+
+Fri Feb  6 15:57:36 1998  Mumit Khan <khan@xraylith.wisc.edu>
+
+       * i386/cygwin32.h (STRIP_NAME_ENCODING): New macro.
+
+Fri Feb  6 15:50:42 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * libgcc2.c (__floatdi[xtds]f): Round properly even when rounding
+       large negative integer to plus or minus infinity.
+
+Fri Feb  6 15:45:16 1998  Philippe De Muyter  <phdm@macqel.be>
+
+       * sdbout.c (plain_type_1): Return T_DOUBLE, not T_VOID, for
+       long double #ifndef EXTENDED_SDB_BASIC_TYPES.
+
+Fri Feb  6 15:23:49 1998  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * vax/ultrix.h (HAVE_ATEXIT): Define.
+       * x-vax: File deleted.
+
+Fri Feb  6 14:34:19 1998  Douglas Rupp <rupp@gnat.com>
+
+       * gcc.c (process_command, case "-dumpversion"): Print spec_version.
+
+Fri Feb  6 11:01:13 1998  Josh Littlefield  <josh@american.com>
+
+       * i386/gmon-sol2.c (internal_mcount): Do set-up when program starts
+       and install hook to do clean-up when it exits.
+       * i386/sol2-c1.asm (_mcount): Make a weak instead of global symbol.
+       * i386/sol2dbg.h (ASM_SPEC): Support Solaris bundled assembler's -V
+       argument; pass -s argument to assembler.
+       
+Fri Feb  6 09:13:21 1998  Jim Wilson  (wilson@cygnus.com)
+
+       * function.c (assign_parms): New variable named_arg, with value
+       depending on STRICT_ARGUMENT_NAMING.  Use instead of ! last_named.
+
+       * crtstuff.c (__frame_dummy): New function for irix6.
+       (__do_global_ctors): Call __frame_dummy for irix6.
+       * mips/iris6.h (LINK_SPEC): Hide __frame_dummy too.
+
+Fri Feb  6 09:08:21 1998  Mike Stump  <mrs@wrs.com>
+
+       * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload.
+       * genattrtab.c (reload_completed): Define.
+
+       * configure.in (i960-wrs-vxworks): Same as i960-wrs-vxworks5*.
+
+Fri Feb  6 08:47:38 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Makefile.in (diff): Add INSTALL, configure, and config.in;
+       remove objc-*.
+       * objc/config-lang.in (diff_excludes): Add objc-parse.[cy].
+
+       * i386/xm-mingw32.h (link): Delete macro.
+
+       * alpha.c (output_prolog): Write out frame sizes as longs and
+       print too large sizes as zero.
+
+       * function.c (combine_temp_slots): No need to allocate and free rtx.
+       Don't do anything if too many slots in the list.
+       (put_var_into_stack): Don't use ADDRESSOF if not optimizing.
+
+       * function.c (purge_addressof_1): Force into mem if VOLATILE reference.
+
+       * calls.c (expand_call): Show VAR_DECL made for structure return
+       address is used; remove bogus set of MEM_IN_STRUCT_P.
+       * expr.c (expand_expr, case SAVE_EXPR, case TARGET_EXPR): Show used.
+       (expand_builtin, case BUILT_IN_LONGJMP): Show __dummy used.
+       * function.c (put_reg_into_stack): New arg USED_P; all callers changed.
+
+       * expr.c (expand_expr, case SAVE_EXPR): assign_temp with KEEP of 3.
+       * function.c (var_temp_slot_level): New variable.
+       (push_function_context_to, pop_function_context_from): Save/restore
+       it and target_temp_slot_level.
+       (assign_stack_temp): Implement KEEP of 3.
+       (push_temp_slots_for_block): New function.
+       (init_temp_slots): Initialize var_temp_slot_level.
+       * function.h (struct function, fields {var,target}_temp_slot_level):
+       New fields.
+       * stmt.c (expand_start_bindings): Call push_temp_slots_for_block.
+
+       * function.c (struct temp_slot): SIZE, BASE_OFF_SET, and FULL_SIZE
+       now HOST_WIDE_INT.
+       (assign_{,outer_}stack_local, assign_{,stack_}temp): Size arg is
+       now HOST_WIDE_INT.
+       (assign_stack_temp): Do size computations in HOST_WIDE_INT.
+       (fixup_var_refs_1, optimize_bit_field, instantiate_decls): Likewise.
+       (instantiate_virtual_regs_1, fix_lexical_address): Likewise.
+       * rtl.h (assign_stack_{local,temp}): Size arg is HOST_WIDE_INT.
+       (assign_temp): Likewise.
+       * expr.h (struct args_size): Field CONSTANT is now HOST_WIDE_INT.
+
+       * sched.c (attach_deaths, case REG): Don't check for REG_UNUSED.
+       (attach_deaths, case SUBREG, STRICT_LOW_PART, {ZERO,SIGN}_EXTRACT):
+       Don't pass set_p of 1 if partial assignment.
+
+       * tree.h (size_in_bytes): Returns HOST_WIDE_INT.
+       * tree.c (size_in_bytes): Likewise.
+       Tighen up logic some to avoid returning a bogus value instead of -1.
+
+       * expr.c (get_inner_reference, case ARRAY_EXPR): Make WITH_RECORD_EXPR
+       just for index.
+       (expand_expr, case PLACEHOLDER_EXPR): Refine search again; look
+       at each expression and look for pointer to type.
+
+       * expr.c (safe_from_p, case ADDR_EXPR): If TREE_STATIC, no trampoline.
+       (expand_expr, case ADDR_EXPR): Likewise.
+
+       * expr.c (emit_block_move): Use conservative range for movstr mode.
+
+       * configure.in: See if "cp -p" works if "ln -s" doesn't; else "cp".
+
+       * combine.c (try_combine.c): Pass elim_i2 and elim_i1 to
+       distribute_notes for i3dest_killed REG_DEAD note.
+
+       * configure.in (mips-dec-netbsd*): Remove bogus setting of prefix.
+
+       * c-decl.c (duplicate_decls): Set DECL_IGNORED_P in newdecl if
+       different bindings levels.
+
+       * configure.in: Test ln -s by symlinking gcc.c.
+
+       * configure.in (i[3456]86-dg-dgux): Add wildcard for version.
+
+       * crtstuff.c (__do_global_ctors_aux): Switch back to text section
+       in proper place.
+
+       * rtlanal.c (rtx_varies_p, case REG): pic_offset_table_rtx is fixed.
+       * genattrtab.c (pic_offset_table_rtx): Define (dummy).
+       * cse.c (set_nonvarying_address_components): Understand PIC refs.
+
+       * loop.c (strength_reduce): When placing increment for auto-inc
+       case, do comparison in loop order.
+
+       * i860.c (output_delayed_branch): Add missing arg to recog.
+       (output_delay_insn): Add missing arg to constrain_operands.
+
+       * configure.in: Truncate target after finished comparing it with host.
+
+       * i386.h (MAX_FIXED_MODE_SIZE): Delete.
+
+       * c-parse.in (expr_no_comma): Clarify undefined error.
+
+       * prefix.c (get_key_value): Don't default to PREFIX here.
+       (translate_name): Remove bogus addition of "$" if getenv fails;
+       clean up application of default value of PREFIX.
+
+       * fold-const.c (fold_convert): Call force_fit_type even if input
+       already overflows.
+
+Fri Feb  6 07:45:01 1998  Robert Hoehne <robert.hoehne@gmx.net>
+
+       * i386/xm-go32.h (HAVE_{BCOPY,BZERO,BCMP,RINDEX,INDEX}): Define.
+
+        * gcc.c (main): Treat paths starting with '$' or DOS drives
+       as absolute in standard_startfile_prefix.
+
+Thu Feb  5 21:07:12 1998  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * cpplib.c (IS_INCLUDE_DIRECTIVE_TYPE): Add casts from enum to int.
+       * cccp.c (IS_INCLUDE_DIRECTIVE_TYPE, handle_directive): Likewise.
+
+Thu Feb  5 19:00:44 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (expand_expr, case CONSTRUCTOR): Correct shift count
+       when making signed bit field; use EXPAND_NORMAL, not 0.
+
+Thu Feb  5 17:42:43 1998  Manfred Hollstein  <manfred@s-direktnet.de>
+
+       * libgcc2.c (__clear_insn_cache): On sysV68 enable the memctl
+       stuff only if MCT_TEXT is #define'd.
+
+Thu Feb  5 17:32:01 1998  Robert Hoehne  <robert.hoehne@gmx.net>
+
+       * Makefile.in: Changed most stamp-* to s-*.
+
+Tue Feb  3 19:45:50 1998  James Hawtin <oolon@ankh.org>
+
+       * i386/sol2.h (STARTFILE_SPEC, LIB_SPEC): Update -pg files.
+       * configure.in (i[3456]86-*-solaris2*): Add gcrt1.o and gmon.o
+       to extra_parts.
+
+Tue Feb  3 17:28:48 1998  Christopher C Chimelis <chris@classnet.med.miami.edu>
+
+       * configure.in (alpha*-*-linux-gnu*): Add extra_parts for crtstuff.
+
+Tue Feb  3 17:18:19 1998  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.c (find_barrier): Fix one-too-many bug if fail to find barrier.
+
+       * arm.c (arm_reload_in_hi): Handle cases where the MEM is too 
+       complex for a simple offset.
+
+Tue Feb  3 16:14:21 1998  Robert Hoehne  <robert.hoehne@gmx.net>
+
+       * i386/xm-go32.h (EXECUTABLE_SUFFIX): Define.
+
+       * configure.in (i[3456]86-pc-msdosdjgpp*): New entry.
+
+Tue Feb  3 07:33:58 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * explow.c (probe_stack_range): Properly check for small
+       number of probes.
+
+       * gcc.c (process_command, case 'V'): Validate arg.
+
+       * configure.in (sbrk): Add check for needed declaration.
+       * acconfig.h (NEED_DECLARATION_SBRK): New entry.
+       * toplev.c (sbrk): Update declaration conditional.
+       * mips-tfile.c (sbrk, free): Likewise.
+
+       * sparc/sysv4.h (DBX_REGISTER_NUMBER): Remove abort.
+
+       * mips.c (mips_expand_prologue): Pass reg 25 to gen_loadgp.
+       * mips.md (loadgp): Add second operand for register number to add.
+       (builtin_setjmp_receiver): Pass new label and reg 31 to loadgp.
+
+       * toplev.c: Include insn-codes.h, insn-config.h, and recog.h.
+       (compile_file): Try to emit nop to separate gcc_compiled symbol.
+       * Makefile.in (toplev.o): Depends on insn-{codes,config}.h, recog.h.
+
+Tue Feb  3 06:58:46 1998  Mark Mitchell  <mmitchell@usa.net>
+
+       * integrate.c (get_label_from_map): New function.
+       (expand_inline_function): Use it.
+       Initialize label_map to NULL_RTX instead of gen_label_rtx.
+       (copy_rtx_and_substitute): Use get_label_from_map.
+       * integrate.h (get_label_from_map): New function.
+       (set_label_from_map): New macro.
+       * unroll.c (unroll_loop, copy_loop_body): Use them.
+       
+Mon Feb  2 16:33:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * i386.md (mov{si,hi,sf,df,xf}cc{,_1}): Remove cases with branches.
+
+       * rs6000/x-aix31 (INSTALL): Deleted.
+       * mips/x-dec-osf1, mips/x-osfrose, i386/x-osfrose: Likewise.
+       * arm/x-riscix: Likewise.
+
+       * c-typeck.c (signed_or_unsigned_type): Properly handle pointer types.
+
+Mon Feb  2 15:33:58 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>
+
+       * unroll.c (copy_loop_body):  Use single_set instead of
+       PATTERN to detect increment of an iv inside a PARALLEL.
+
+Fri Jan 16 20:29:50 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * toplev.c (<unistd.h>): New include.
+       (get_run_time): Prefer CLK_TCK (if available) to HZ, and
+       prefer sysconf (_SC_CLK_TCK) (if available) to CLK_TCK.
+       * configure.in (sysconf): Call AC_CHECK_FUNCS.
+
+Wed Jan 14 20:10:51 1998  Paul Eggert  <eggert@twinsun.com>
+
+       * cccp.c: (rescan): Don't report line 0 as the possible real start
+       of an unterminated string constant.
+       Don't mishandle backslash-newlines that in are the output of
+       a macro expansion.  Properly skip // style comments between a function
+       macro name and '(', as well as backslash-newlines in comments there.
+       (handle_directive): Handle / \ newline * between # and directive name.
+       In #include directives, \ does not escape ".
+       (do_include): For `#include "file', do not bother expanding into temp
+       buffer.  When error encountered when expanding, do not try result.
+       (skip_if_group): When skipping an include directive, use include
+       tokenization, not normal tokenization.  Backslash-newline is still
+       special when skipping.  Handle * \ newline / correctly in comments
+       when skipping.
+       (skip_quoted_string): After \ newline, set *backslash_newlines_p
+       even if count_newlines is 0.
+       (macroexpand): Newline space is not a special marker inside a string.
+       (macroexpand, macarg): Do not generate \ddd for control characters
+       when stringifying; the C Standard does not allow this.
+       (macarg1): New arg MACRO.  All callers changed.
+       Do not treat /*, //, or backslash-newline specially when processing
+       the output of a macro.
+       (discard_comments): Don't go past limit if looking for end of comment.
+       Discard backslash-newline properly when discarding comments.
+       (change_newlines): \" does not end a string.
+       (make_definition): Do not treat backslash-newline specially, as it
+       has already been removed before we get here.
+       
+       * profile.c (output_func_start_profiler): Don't fflush output
+       if -quiet.
+       * toplev.c (rest_of_compilation): Likewise.
+
+       * i386/x-sco5 (CC): Remove trailing white space.
+       * x-convex (CCLIBFLAGS): Likewise.
+       * arm/t-semi (LIBGCC2_CFLAGS): Likewise.
+
+Wed Jan  7 18:02:42 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * Version 2.8.0 released.
+
+Wed Jan  7 17:54:41 1998  J. Kean Johnston  <jkj@sco.com>
+
+       * i386/sco5.h ({END,START}FILE_SPEC): Link with correct crtbegin.o
+       and crtend.o when using -static.
+
+Wed Jan  7 17:49:14 1998  Jan Christiaan van Winkel <Jan.Christiaan.van.Winkel@ATComputing.nl>
+
+       * cppexp.c (gansidecl.h): Include.
+
+Wed Jan  7 17:45:07 1998  Tristan Gingold  <gingold@puccini.enst.fr>
+
+       * expr.c (get_push_address): Use copy_to_reg instead of force_operand.
+       (emit_push_insn): Avoid null pointer deference if aggregate has no
+       types.
+       (expand_expr): Avoid finite but useless recursion.
+       (expand_builtin): Fix typo in calling function.
+       * function.c (assign_parms): Avoid useless call to chkr_set_right.
+
+Wed Jan  7 17:31:13 1998  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>
+
+       * combine.c (force_to_mode): Return if operand is a CLOBBER.
+
+Wed Jan  7 17:23:24 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * x-rs6000 (INSTALL): Remove.
+
+       * jump.c (jump_optimize): Don't use a hard reg as an operand
+       of a conditional move if small register classes.
+
+Wed Jan  7 17:09:28 1998  Jim Wilson  <wilson@cygnus.com>
+
+       * cse.c (max_insn_uid): New variable.
+       (cse_around_loop): Use it.
+       (cse_main): Set it.
+
+See ChangeLog.11 for earlier changes.
+\f
+Use a consistent time stamp format in ChangeLog entries.
+Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
index 36d9ee16063e63a80386d7a63675f2f0edd70a3b..d455bb8dcdc638b30f275b2f48f936df7b0d6a98 100644 (file)
@@ -654,9 +654,8 @@ CCCP=@cpp_main@
 # Files to be copied away after each stage in building.
 STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
  insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
- insn-attr.h insn-attrtab.c insn-opinit.c genrtl.c genrtl.h tree-check.h \
- s-flags s-config s-codes s-mlib \
- s-output s-recog s-emit s-extract s-peep \
+ s-flags s-config s-codes s-mlib s-under\
+ s-output s-recog s-emit s-extract s-peep s-check \
  s-attr s-attrtab s-opinit s-crt s-crtS s-crt0 \
  genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
  genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
@@ -1560,7 +1559,7 @@ s-codes : $(md_file) gencodes $(srcdir)/move-if-change
        touch s-codes
 
 insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \
-  insn-config.h insn-flags.h insn-codes.h system.h
+  insn-config.h insn-flags.h insn-codes.h system.h reload.h
        $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c
 
 insn-emit.c: s-emit ; @true
@@ -2500,11 +2499,13 @@ uninstall: lang.uninstall
        -rm -rf $(bindir)/$(GCC_CROSS_NAME)$(exeext)
        -rm -rf $(bindir)/protoize$(exeext)
        -rm -rf $(bindir)/unprotoize$(exeext)
+       -rm -rf $(bindir)/gcov$(exeext)
        -rm -rf $(mandir)/$(GCC_INSTALL_NAME)$(manext)
        -rm -rf $(mandir)/$(GCC_CROSS_NAME)$(manext)
        -rm -rf $(mandir)/cccp$(manext)
        -rm -rf $(mandir)/protoize$(manext)
        -rm -rf $(mandir)/unprotoize$(manext)
+       -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
 #\f
 # These targets are for the dejagnu testsuites. The file site.exp 
 # contains global variables that all the testsuites will use.
index f2dd58209899a3bc54c5c6e90e687eb2a4d70203..16e4ae5e470e2a57369b397ba233c29222d79f52 100644 (file)
@@ -64,4 +64,7 @@
 
 /* Whether getwd must be declared even if <unistd.h> is included.  */
 #undef NEED_DECLARATION_GETWD
+
+/* Define if you want expensive run-time checks. */
+#undef ENABLE_CHECKING
 @TOP@
index 15eb740b976002264e5924d3770198a6e1ec83d1..bd4e7a219b2273004a2e7c1ca9111c66967a1668 100644 (file)
@@ -3798,6 +3798,10 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
   if (! flag_no_common || ! TREE_PUBLIC (decl))
     DECL_COMMON (decl) = 1;
 
+#ifdef SET_DEFAULT_DECL_ATTRIBUTES
+  SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
+#endif
+
   /* Set attributes here so if duplicate decl, will have proper attributes.  */
   decl_attributes (decl, attributes, prefix_attributes);
 
index adc70fa041d15832ed5cc1ebf65233d0ffa41e6e..c33ade528225c362fe293e8b225299bc0930004d 100644 (file)
@@ -544,6 +544,11 @@ check_newline ()
              token = yylex ();
              if (token != IDENTIFIER)
                goto skipline;
+             if (nextchar >= 0)
+               c = nextchar, nextchar = -1;
+             else
+               c = GETC ();
+             ungetc (c, finput);
              if (HANDLE_PRAGMA (finput, yylval.ttype))
                {
                  c = GETC ();
index f5252292494414718f752f5d4028ee2d9dca57a7..ea6bcb848b31920384f129ae7989258c713fa8a0 100644 (file)
@@ -3771,9 +3771,8 @@ simplify_rtx (x, op0_mode, last, in_dest)
 
       /* If we know that the value is already truncated, we can
          replace the TRUNCATE with a SUBREG.  */
-      if (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) <= HOST_BITS_PER_WIDE_INT
-         && (nonzero_bits (XEXP (x, 0), GET_MODE (XEXP (x, 0)))
-             &~ GET_MODE_MASK (mode)) == 0)
+      if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (XEXP (x, 0)))
+         >= GET_MODE_BITSIZE (mode) + 1)
        return gen_lowpart_for_combine (mode, XEXP (x, 0));
 
       /* A truncate of a comparison can be replaced with a subreg if
@@ -4702,7 +4701,7 @@ simplify_set (x)
      we only care about the low bits of the result.
 
      However, on machines without WORD_REGISTER_OPERATIONS defined, we cannot
-     perform a narrower operation that requested since the high-order bits will
+     perform a narrower operation than requested since the high-order bits will
      be undefined.  On machine where it is defined, this transformation is safe
      as long as M1 and M2 have the same number of words.  */
  
@@ -6953,8 +6952,6 @@ rtx_equal_for_field_assignment_p (x, y)
      rtx x;
      rtx y;
 {
-  rtx last_x, last_y;
-
   if (x == y || rtx_equal_p (x, y))
     return 1;
 
@@ -6976,19 +6973,12 @@ rtx_equal_for_field_assignment_p (x, y)
                      gen_lowpart_for_combine (GET_MODE (SUBREG_REG (x)), y)))
     return 1;
 
-  last_x = get_last_value (x);
-  last_y = get_last_value (y);
-
-  return ((last_x != 0
-          && GET_CODE (last_x) != CLOBBER
-          && rtx_equal_for_field_assignment_p (last_x, y))
-         || (last_y != 0
-             && GET_CODE (last_y) != CLOBBER
-             && rtx_equal_for_field_assignment_p (x, last_y))
-         || (last_x != 0 && last_y != 0
-             && GET_CODE (last_x) != CLOBBER
-             && GET_CODE (last_y) != CLOBBER
-             && rtx_equal_for_field_assignment_p (last_x, last_y)));
+  /* We used to see if get_last_value of X and Y were the same but that's
+     not correct.  In one direction, we'll cause the assignment to have
+     the wrong destination and in the case, we'll import a register into this
+     insn that might have already have been dead.   So fail if none of the
+     above cases are true.  */
+  return 0;
 }
 \f
 /* See if X, a SET operation, can be rewritten as a bit-field assignment.
@@ -10160,14 +10150,20 @@ simplify_comparison (code, pop0, pop1)
          if (GET_CODE (XEXP (op0, 0)) == SUBREG
              && ((mode_width
                   >= GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (XEXP (op0, 0)))))
-                 || subreg_lowpart_p (XEXP (op0, 0)))
+#ifdef WORD_REGISTER_OPERATIONS
+                 || subreg_lowpart_p (XEXP (op0, 0))
+#endif
+                 )
              && GET_CODE (XEXP (op0, 1)) == CONST_INT
              && mode_width <= HOST_BITS_PER_WIDE_INT
              && (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
                  <= HOST_BITS_PER_WIDE_INT)
              && (INTVAL (XEXP (op0, 1)) & ~ mask) == 0
              && 0 == (~ GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
-                      & INTVAL (XEXP (op0, 1))))
+                      & INTVAL (XEXP (op0, 1)))
+             && INTVAL (XEXP (op0, 1)) != mask
+             && (INTVAL (XEXP (op0, 1))
+                 != GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0))))))
                       
            {
              op0
index 0a0c4f116cb29b7d6c29cd84eeedc6cee32ba02b..5bcb1fb3abe31ddd2eb86b082959e4b328f8ce64 100644 (file)
@@ -2808,6 +2808,51 @@ print_operand (file, x, code)
     }
 }
 \f
+/* Emit RTL insns to initialize the variable parts of a trampoline at
+   TRAMP. FNADDR is an RTX for the address of the function's pure
+   code.  CXT is an RTX for the static chain value for the function.
+   We assume here that a function will be called many more times than
+   its address is taken (e.g., it might be passed to qsort), so we
+   take the trouble to initialize the "hint" field in the JMP insn.
+   Note that the hint field is PC (new) + 4 * bits 13:0.  */
+
+void
+alpha_initialize_trampoline (tramp, fnaddr, cxt)
+     rtx tramp;
+     rtx fnaddr;
+     rtx cxt;
+{
+  rtx temp, temp1, addr;
+
+  /* Store function address and CXT.  */
+  addr = memory_address (Pmode, plus_constant (tramp, 16));
+  emit_move_insn (gen_rtx (MEM, Pmode, addr), fnaddr);
+  addr = memory_address (Pmode, plus_constant (tramp, 24));
+  emit_move_insn (gen_rtx (MEM, Pmode, addr), cxt);
+
+  /* Compute hint value.  */
+  temp = force_operand (plus_constant (tramp, 12), NULL_RTX);
+  temp = expand_binop (DImode, sub_optab, fnaddr, temp, temp, 1, OPTAB_WIDEN);
+  temp = expand_shift (RSHIFT_EXPR, Pmode, temp,
+                      build_int_2 (2, 0), NULL_RTX, 1);
+  temp = expand_and (gen_lowpart (SImode, temp), GEN_INT (0x3fff), 0);
+
+  /* Merge in the hint.  */
+  addr = memory_address (SImode, plus_constant (tramp, 8));
+  temp1 = force_reg (SImode, gen_rtx (MEM, SImode, addr));
+  temp1 = expand_and (temp1, GEN_INT (0xffffc000), NULL_RTX);
+  temp1 = expand_binop (SImode, ior_optab, temp1, temp, temp1, 1, OPTAB_WIDEN);
+  emit_move_insn (gen_rtx (MEM, SImode, addr), temp1);
+
+#ifdef TRANSFER_FROM_TRAMPOLINE
+  emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"),
+                    0, VOIDmode, 1, addr, Pmode);
+#endif
+
+  emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,
+                     gen_rtvec (1, const0_rtx), 0));
+}
+\f
 /* Do what is necessary for `va_start'.  The argument is ignored;
    We look at the current function to determine if stdarg or varargs
    is used and fill in an initial va_list.  A pointer to this constructor
index 00e5c915f8a3c208034cff8ba4b6d81740bf58dd..d7bb2d168871781e5968103121fe25b7153a6160 100644 (file)
@@ -676,12 +676,17 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,
 
    For the Alpha, `Q' means that this is a memory operand but not a
    reference to an unaligned location.
+
    `R' is a SYMBOL_REF that has SYMBOL_REF_FLAG set or is the current
-   function.  */
+   function.
+
+   'S' is a 6-bit constant (valid for a shift insn).  */
 
 #define EXTRA_CONSTRAINT(OP, C)                                \
-  ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \
-   : (C) == 'R' ? current_file_function_operand (OP, Pmode)    \
+  ((C) == 'Q' ? GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) != AND \
+   : (C) == 'R' ? current_file_function_operand (OP, Pmode)            \
+   : (C) == 'S' ? (GET_CODE (OP) == CONST_INT                          \
+                  && (unsigned HOST_WIDE_INT) INTVAL (OP) < 64)        \
    : 0)
 
 /* Given an rtx X being reloaded into a reg required to be
@@ -1202,38 +1207,8 @@ extern void output_end_prologue ();
    to initialize the "hint" field in the JMP insn.  Note that the hint
    field is PC (new) + 4 * bits 13:0.  */
 
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
-{                                                                      \
-  rtx _temp, _temp1, _addr;                                            \
-                                                                       \
-  _addr = memory_address (Pmode, plus_constant ((TRAMP), 16));         \
-  emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR));              \
-  _addr = memory_address (Pmode, plus_constant ((TRAMP), 24));         \
-  emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT));                 \
-                                                                       \
-  _temp = force_operand (plus_constant ((TRAMP), 12), NULL_RTX);       \
-  _temp = expand_binop (DImode, sub_optab, (FNADDR), _temp, _temp, 1,  \
-                       OPTAB_WIDEN);                                   \
-  _temp = expand_shift (RSHIFT_EXPR, Pmode, _temp,                     \
-                       build_int_2 (2, 0), NULL_RTX, 1);               \
-  _temp = expand_and (gen_lowpart (SImode, _temp),                     \
-                     GEN_INT (0x3fff), 0);                             \
-                                                                       \
-  _addr = memory_address (SImode, plus_constant ((TRAMP), 8));         \
-  _temp1 = force_reg (SImode, gen_rtx (MEM, SImode, _addr));           \
-  _temp1 = expand_and (_temp1, GEN_INT (0xffffc000), NULL_RTX);                \
-  _temp1 = expand_binop (SImode, ior_optab, _temp1, _temp, _temp1, 1,  \
-                        OPTAB_WIDEN);                                  \
-                                                                       \
-  emit_move_insn (gen_rtx (MEM, SImode, _addr), _temp1);               \
-                                                                       \
-  emit_library_call (gen_rtx (SYMBOL_REF, Pmode,                       \
-                             "__enable_execute_stack"),                \
-                    0, VOIDmode, 1,_addr, Pmode);                      \
-                                                                       \
-  emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,                       \
-                     gen_rtvec (1, const0_rtx), 0));                   \
-}
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+  alpha_initialize_trampoline (TRAMP, FNADDR, CXT)
 
 /* Attempt to turn on access permissions for the stack.  */
 
@@ -2127,6 +2102,7 @@ do {                                                                      \
     }                                                                  \
 } while (0)
 \f
+
 /* Define results of standard character escape sequences.  */
 #define TARGET_BELL 007
 #define TARGET_BS 010
index 6e280cbd1789754930ee4db4bc6b9d2b4fdb6967..a8e5c8eb34da9cf01ae93290506e5c8c173c10b1 100644 (file)
 (define_insn "ashldi3"
   [(set (match_operand:DI 0 "register_operand" "=r,r")
        (ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ,rJ")
-                  (match_operand:DI 2 "reg_or_6bit_operand" "P,rI")))]
+                  (match_operand:DI 2 "reg_or_6bit_operand" "P,rS")))]
   ""
   "*
 {
 (define_insn "lshrdi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
-                    (match_operand:DI 2 "reg_or_6bit_operand" "rI")))]
+                    (match_operand:DI 2 "reg_or_6bit_operand" "rS")))]
   ""
   "srl %r1,%2,%0"
   [(set_attr "type" "shift")])
 (define_insn "ashrdi3"
   [(set (match_operand:DI 0 "register_operand" "=r")
        (ashiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
-                    (match_operand:DI 2 "reg_or_6bit_operand" "rI")))]
+                    (match_operand:DI 2 "reg_or_6bit_operand" "rS")))]
   ""
   "sra %r1,%2,%0"
   [(set_attr "type" "shift")])
index 47e06c62aa471ca9a246df7c56576fdace80fdb0..aa43450fe98d0d25c098b51ade928d248f071b3a 100644 (file)
@@ -1,7 +1,7 @@
-/* Definitions of target machine for GNU compiler,
-   for Alpha Linux-based GNU systems.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-   Contributed by Richard Henderson.
+/* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU
+   systems using ECOFF.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
+   Contributed by Bob Manson.
 
 This file is part of GNU CC.
 
@@ -44,28 +44,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #undef TARGET_CAN_FAULT_IN_PROLOGUE
 #define TARGET_CAN_FAULT_IN_PROLOGUE 1
 
-/* Emit RTL insns to initialize the variable parts of a trampoline.
-   FNADDR is an RTX for the address of the function's pure code.
-   CXT is an RTX for the static chain value for the function. 
-
-   This differs from the standard version in that:
-
-   We do not initialize the "hint" field because it only has an 8k
-   range and so the target is in range of something on the stack. 
-   Omitting the hint saves a bogus branch-prediction cache line load.
-
-   GNU/Linux always has an executable stack -- no need for a system call. */
-
-#undef INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                       \
-{                                                                       \
-  rtx _addr;                                                           \
-                                                                        \
-  _addr = memory_address (Pmode, plus_constant ((TRAMP), 16));          \
-  emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR));               \
-  _addr = memory_address (Pmode, plus_constant ((TRAMP), 24));          \
-  emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT));                  \
-                                                                        \
-  emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode,                        \
-                      gen_rtvec (1, const0_rtx), 0));                   \
-}
+#undef ASM_FINAL_SPEC
index 7272cc927c893c8a5aafbb541556a86ab9d2026f..e2f46e7c965a323e9777f925afb4dad84c2fa77a 100644 (file)
@@ -1910,7 +1910,7 @@ arc_final_prescan_insn (insn, opvec, noperands)
   record_cc_ref (insn);
 
   /* Allow -mdebug-ccfsm to turn this off so we can see how well it does.
-     We can't do this in macro FINAL_PRESCAN_INSN because it's called from
+     We can't do this in macro FINAL_PRESCAN_INSN because its called from
      final_scan_insn which has `optimize' as a local.  */
   if (optimize < 2 || TARGET_NO_COND_EXEC)
     return;
index 0ddc91afb8919052e6daea0ef11ff360b040baf1..61ca39f53111e93c42506eade8740172aa28c576 100644 (file)
@@ -1583,7 +1583,7 @@ do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
    After generation of rtl, the compiler makes no further distinction
    between pointers and any other objects of this machine mode.  */
 /* ??? The arc doesn't have full 32 bit pointers, but making this PSImode has
-   it's own problems (you have to add extendpsisi2 and trucnsipsi2 but how does
+   its own problems (you have to add extendpsisi2 and trucnsipsi2 but how does
    one do it without getting excess code?).  Try to avoid it.  */
 #define Pmode SImode
 
index 785e8ca983b7d2f66112eda7521fe8f3cf5d2f7f..b01db107849b9933df038fd36b4d57b32ef4729e 100644 (file)
@@ -138,7 +138,7 @@ extern char *output_block_move();
 /* Tell gcc where to look for the startfile */
 #define STANDARD_STARTFILE_PREFIX   "/d1600/lib"
 
-/* Tell gcc where to look for it's executables */
+/* Tell gcc where to look for its executables */
 #define STANDARD_EXEC_PREFIX  "/d1600/bin"
 
 /* Command line options to the AT&T assembler */
index a3af135f42686430fcc21d8e97d8304ab02d1dfd..560a20bb5992875e423530417f10e6c7e1b254c3 100644 (file)
@@ -3037,7 +3037,7 @@ output_simode_bld (bild, log2, operands)
   return "";
 }
 
-/* Given INSN and it's current length LENGTH, return the adjustment
+/* Given INSN and its current length LENGTH, return the adjustment
    (in bytes) to correctly compute INSN's length.
 
    We use this to get the lengths of various memory references correct.  */
index 4d7e79eecfabb11971d07a9cd160da746c050abe..423a249dafebd1694f408cce02d1259b7599bf1e 100644 (file)
   [(set (cc0)
        (match_operator 2 "VOIDmode_compare_op"
                        [(float_extend:XF
-                         (match_operand:DF 1 "nonimmediate_operand" "fm"))
-                        (match_operand:XF 0 "register_operand" "f")]))
+                         (match_operand:DF 0 "nonimmediate_operand" "fm"))
+                        (match_operand:XF 1 "register_operand" "f")]))
    (clobber (match_scratch:HI 3 "=a"))]
   "TARGET_80387"
   "* return output_float_compare (insn, operands);")
   "TARGET_80387"
   "* return output_float_compare (insn, operands);")
 
+(define_insn ""
+  [(set (cc0)
+       (match_operator 2 "VOIDmode_compare_op"
+                       [(float_extend:XF
+                         (match_operand:SF 0 "nonimmediate_operand" "fm"))
+                        (match_operand:XF 1 "register_operand" "f")]))
+   (clobber (match_scratch:HI 3 "=a"))]
+  "TARGET_80387"
+  "* return output_float_compare (insn, operands);")
+
 (define_insn ""
   [(set (cc0)
        (compare:CCFPEQ (match_operand:XF 0 "register_operand" "f")
index 349642fa7c760dece03d3c8f723af1b882c176ff..98cf55e78300cc6ffdb320d1df93e770a01e18e7 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Intel 386 running Linux-based GNU systems using a.out.
-   Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1994, 1995, 1997, 1998 Free Software Foundation, Inc.
    Contributed by H.J. Lu (hjl@nynexst.com)
 
 This file is part of GNU CC.
index 116a5bf4b3099891166ed73104123fc91a827ab9..a67fd0f8535ab7c6dc86d047a28c356dadb8cd1a 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD
    a.out linkers.
-   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
    Contributed by Michael Meissner (meissner@cygnus.com)
 
 This file is part of GNU CC.
index 649c29e262549657cf2aa15d0fc85e4994f9f492..e435f803172a0d00264c82c7692644b070e21253 100644 (file)
@@ -1,5 +1,5 @@
-/* Definitions for Intel 386 running Linux with ELF format
-   Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
+   Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
    Contributed by Eric Youngdale.
    Modified for stabs-in-ELF by H.J. Lu.
 
index dff81720328f87afd8905c625152e8eb613dfd83..1503bdfcdd76f195200648a5ffc47a1e66bb4de5 100644 (file)
@@ -1910,7 +1910,7 @@ do {                                                                      \
    After generation of rtl, the compiler makes no further distinction
    between pointers and any other objects of this machine mode.  */
 /* ??? The M32R doesn't have full 32 bit pointers, but making this PSImode has
-   it's own problems (you have to add extendpsisi2 and truncsipsi2).
+   its own problems (you have to add extendpsisi2 and truncsipsi2).
    Try to avoid it.  */
 #define Pmode SImode
 
index 7d6dba32d1ec9a5b70d3a63d2fc3a2b5f461b72c..9e33ccb4b2f0c10e69e1508e313fed2315cb5c1f 100644 (file)
@@ -1,5 +1,5 @@
 /* libgcc1 routines for 68000 w/o floating-point hardware.
-   Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
index 441674c08de7a78b6678a986a76b5d5815fc3f7d..b74ae45064dbf399f79d29f01b3012788387fdf4 100644 (file)
@@ -2079,7 +2079,7 @@ do {                                                                       \
   sprintf (LABEL, TARGET_SVR4 ? "*.%s%d" : "*@%s%d", PREFIX, NUM)
 
 /* Internal macro to get a single precision floating point value into
-   an int, so we can print it's value in hex.  */
+   an int, so we can print its value in hex.  */
 #define FLOAT_TO_INT_INTERNAL( FVALUE, IVALUE )                                \
   { union {                                                            \
       REAL_VALUE_TYPE d;                                               \
index c94e6fd82ae867b6d5c33b14c40cc95ac75698cd..118ebe366da79fefe22d55c689367681d8a8cbf9 100644 (file)
 ;; The comparison operations store the comparison into a register and
 ;; record that register.  The following Bxx or Sxx insn uses that
 ;; register as an input.  To facilitate use of bcnd instead of cmp/bb1,
-;; cmpsi records it's operands and produces no code when any operand
+;; cmpsi records its operands and produces no code when any operand
 ;; is constant.  In this case, the Bxx insns use gen_bcnd and the
 ;; Sxx insns use gen_test to ensure a cmp has been emitted.
 ;;
 ;; This insn is used for some loop tests, typically loops reversed when
 ;; strength reduction is used.  It is actually created when the instruction
 ;; combination phase combines the special loop test.  Since this insn
-;; is both a jump insn and has an output, it must deal with it's own
+;; is both a jump insn and has an output, it must deal with its own
 ;; reloads, hence the `m' constraints.  The `!' constraints direct reload
 ;; to not choose the register alternatives in the event a reload is needed.
 
index 536ceee95d02eed173d9890f3ea972c88901d252..2eda40ab9780ef4d38e26483040cd8aa81f279d5 100644 (file)
@@ -96,6 +96,9 @@ Boston, MA 02111-1307, USA.  */
 #undef PREFERRED_DEBUGGING_TYPE
 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
 
+/* Force the generation of dwarf .debug_frame sections even if not
+   compiling -g.  This guarantees that we can unwind the stack. */
+#define DWARF2_FRAME_INFO 1
 /* The size in bytes of a DWARF field indicating an offset or length
    relative to a debug info section, specified to be 4 bytes in the DWARF-2
    specification.  The SGI/MIPS ABI defines it to be the same as PTR_SIZE.  */
index 590895936b56e70cab9c5e5b3312d43e2b43779e..52b8c8e25ea299b96ebfaa0c7ea253634de47fe9 100644 (file)
@@ -3992,7 +3992,7 @@ while (0)
 #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE)                           \
   mips_output_lineno (STREAM, LINE)
 
-/* The MIPS implementation uses some labels for it's own purpose.  The
+/* The MIPS implementation uses some labels for its own purpose.  The
    following lists what labels are created, and are all formed by the
    pattern $L[a-z].*.  The machine independent portion of GCC creates
    labels matching:  $L[A-Z][0-9]+ and $L[0-9]+.
index 50ff6407e11f8bdd0b7e27cf3db7239a4f968320..fae82e54fab183d238e3bdb73d088907e337dbde 100644 (file)
@@ -4626,7 +4626,7 @@ move\\t%0,%z4\\n\\
 
 (define_expand "reload_indi"
   [(set (match_operand:DI 0 "register_operand" "=b")
-       (match_operand:DI 1 "movdi_operand" "b"))
+       (match_operand:DI 1 "" "b"))
    (clobber (match_operand:TI 2 "register_operand" "=&d"))]
   "TARGET_64BIT"
   "
@@ -4641,10 +4641,12 @@ move\\t%0,%z4\\n\\
       if (GET_CODE (operands[1]) == MEM)
        {
          rtx memword, offword, hiword, loword;
+         rtx addr = find_replacement (&XEXP (operands[1], 0));
+         rtx op1 = change_address (operands[1], VOIDmode, addr);
 
          scratch = gen_rtx (REG, SImode, REGNO (scratch));
-         memword = change_address (operands[1], SImode, NULL_RTX);
-         offword = change_address (adj_offsettable_operand (operands[1], 4),
+         memword = change_address (op1, SImode, NULL_RTX);
+         offword = change_address (adj_offsettable_operand (op1, 4),
                                    SImode, NULL_RTX);
          if (BYTES_BIG_ENDIAN)
            {
@@ -4693,7 +4695,7 @@ move\\t%0,%z4\\n\\
 ;; use a TImode scratch reg.
 
 (define_expand "reload_outdi"
-  [(set (match_operand:DI 0 "general_operand" "=b")
+  [(set (match_operand:DI 0 "" "=b")
        (match_operand:DI 1 "se_register_operand" "b"))
    (clobber (match_operand:TI 2 "register_operand" "=&d"))]
   "TARGET_64BIT"
@@ -4715,10 +4717,12 @@ move\\t%0,%z4\\n\\
       if (GET_CODE (operands[0]) == MEM)
        {
          rtx scratch, memword, offword, hiword, loword;
+         rtx addr = find_replacement (&XEXP (operands[0], 0));
+         rtx op0 = change_address (operands[0], VOIDmode, addr);
 
          scratch = gen_rtx (REG, SImode, REGNO (operands[2]));
-         memword = change_address (operands[0], SImode, NULL_RTX);
-         offword = change_address (adj_offsettable_operand (operands[0], 4),
+         memword = change_address (op0, SImode, NULL_RTX);
+         offword = change_address (adj_offsettable_operand (op0, 4),
                                    SImode, NULL_RTX);
          if (BYTES_BIG_ENDIAN)
            {
index 1c759aed0600013ebca359e64fe68e9874c0fd40..8c2fb1f784b6427272e4947ce271878bc0756602 100644 (file)
@@ -495,7 +495,7 @@ print_operand (file, x, code)
          u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
          PUT_IMMEDIATE_PREFIX(file);
 #ifdef SEQUENT_ASM
-         /* Sequent likes it's floating point constants as integers */
+         /* Sequent likes its floating point constants as integers */
          fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0]);
 #else
 #ifdef ENCORE_ASM
index 5d2059c561c410798d0433fdedf1a65034759306..77bae75405be7bc96ec03bcf3dc39ab301bacfc6 100644 (file)
@@ -1390,7 +1390,7 @@ extern char leaf_reg_remap[];
    : gen_rtx_MEM (MODE, gen_rtx_PLUS (Pmode, frame_pointer_rtx,        \
                                  GEN_INT (STARTING_FRAME_OFFSET))))
 
-/* Get_secondary_mem widens it's argument to BITS_PER_WORD which loses on v9
+/* Get_secondary_mem widens its argument to BITS_PER_WORD which loses on v9
    because the movsi and movsf patterns don't handle r/f moves.
    For v8 we copy the default definition.  */
 #define SECONDARY_MEMORY_NEEDED_MODE(MODE) \
index a8fb8f82d93e882bf95a74783607bdfc27b0fd2c..ff77c99a4a4c7eee1c8e168ebe59215809613072 100644 (file)
@@ -5614,7 +5614,7 @@ if (! TARGET_ARCH64)
   if (GET_CODE (XEXP (operands[0], 0)) == LABEL_REF)
     {
       /* This is really a PIC sequence.  We want to represent
-        it as a funny jump so it's delay slots can be filled. 
+        it as a funny jump so its delay slots can be filled. 
 
         ??? But if this really *is* a CALL, will not it clobber the
         call-clobbered registers?  We lose this if it is a JUMP_INSN.
index dfa8e26608331b671d56f9adb47ddd0f3d17d0db..8508761fa19eb0708eef2c5b83537c2a994e77e1 100755 (executable)
@@ -2261,6 +2261,14 @@ for machine in $build $host $target; do
                    ;;
                esac
                ;;
+       alpha*-*-vxworks*)
+               tm_file="${tm_file} dbx.h alpha/vxworks.h"
+               if  x$gas != xyes 
+               then
+                       extra_passes="mips-tfile mips-tdump"
+               fi
+               use_collect2=yes
+               ;;
        alpha*-*-winnt*)
                tm_file="${tm_file} alpha/win-nt.h"
                xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h"
@@ -5139,7 +5147,7 @@ fi
 
 # Figure out what assembler alignment features are present.
 echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
-echo "configure:5143: checking assembler alignment features" >&5
+echo "configure:5151: checking assembler alignment features" >&5
 gcc_cv_as=
 gcc_cv_as_alignment_features=
 if [ -x as$host_exeext ]; then
index bdfe74a62b01575609b51d35875ec4785d9b33ee..f13e94221b4d7184272c988c2920a54dc22b1a6d 100644 (file)
@@ -417,6 +417,14 @@ for machine in $build $host $target; do
                    ;;
                esac
                ;;
+       alpha*-*-vxworks*)
+               tm_file="${tm_file} dbx.h alpha/vxworks.h"
+               if [ x$gas != xyes ]
+               then
+                       extra_passes="mips-tfile mips-tdump"
+               fi
+               use_collect2=yes
+               ;;
        alpha*-*-winnt*)
                tm_file="${tm_file} alpha/win-nt.h"
                xm_file="${xm_file} config/winnt/xm-winnt.h alpha/xm-winnt.h"
index 35215fecfce4a3e2043ba0baf35d79185c9601b6..d96b6d8d53147579d1a96ee885cd317a7bbc39cf 100644 (file)
@@ -3,7 +3,7 @@
 # subdirectories which conform to the old GCC configure mechanism
 # for such subdirectories.
 
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997, 1998 Free Software Foundation, Inc.
 
 #This file is part of GNU CC.
 
index b67250fa027a51bd90e7e04af8f54ce59486fff9..b05c948481bb0e2241efa3f7a81e69454df53ec2 100644 (file)
@@ -1,5 +1,5 @@
 /* Demangler for GNU C++ 
-   Copyright 1989, 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright 1989, 91, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
    Written by James Clark (jjc@jclark.uucp)
    Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
    
@@ -3128,8 +3128,8 @@ forget_types (work)
      foo__FiR3fooT1T2T1T2
      __ct__3fooFiR3fooT1T2T1T2
 
-   Note that g++ bases it's type numbers starting at zero and counts all
-   previously seen types, while lucid/ARM bases it's type numbers starting
+   Note that g++ bases its type numbers starting at zero and counts all
+   previously seen types, while lucid/ARM bases its type numbers starting
    at one and only considers types after it has seen the 'F' character
    indicating the start of the function args.  For lucid/ARM style, we
    account for this difference by discarding any previously seen types when
index f104ff586dc13d812b2bf6ce27c04e85fb602922..868b7de33985204fafd573f79e309216bcd27661 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1541,7 +1541,7 @@ invalidate (x, full_mode)
       register unsigned hash = HASH (x, GET_MODE (x));
 
       /* Remove REGNO from any quantity list it might be on and indicate
-        that it's value might have changed.  If it is a pseudo, remove its
+        that its value might have changed.  If it is a pseudo, remove its
         entry from the hash table.
 
         For a hard register, we do the first two actions above for any
index e9e7072feb1cef5b0447cb9276b529f1e5ff4241..5ab3736006b693105e96f7f3d1576fc67822fe03 100644 (file)
@@ -1960,7 +1960,7 @@ dbxout_symbol_location (decl, type, suffix, home)
   /* Don't mention a variable at all
      if it was completely optimized into nothingness.
      
-     If the decl was from an inline function, then it's rtl
+     If the decl was from an inline function, then its rtl
      is not identically the rtl that was used in this
      particular compilation.  */
   if (GET_CODE (home) == REG)
index 6610e91187196fab950c65b50bf904b9531ea422..61b16ca3fee8e7269709c6fe14001e4dd72b19e1 100644 (file)
@@ -59,6 +59,9 @@ int
 dwarf2out_do_frame ()
 {
   return (write_symbols == DWARF2_DEBUG
+#ifdef DWARF2_FRAME_INFO
+          || DWARF2_FRAME_INFO
+#endif
 #ifdef DWARF2_UNWIND_INFO
          || (flag_exceptions && ! exceptions_via_longjmp)
 #endif
@@ -9188,7 +9191,7 @@ gen_block_die (stmt, context_die, depth)
 }
 
 /* Generate all of the decls declared within a given scope and (recursively)
-   all of it's sub-blocks.  */
+   all of its sub-blocks.  */
 
 static void
 decls_for_scope (stmt, context_die, depth)
index 63f0d823afe52921d59f6d0174502be15c3aa8bf..2ca007a2003a5a7b94490777a608dee56ccd9870 100644 (file)
@@ -59,6 +59,7 @@ Boston, MA 02111-1307, USA.  */
 
 enum machine_mode byte_mode;   /* Mode whose width is BITS_PER_UNIT.  */
 enum machine_mode word_mode;   /* Mode whose width is BITS_PER_WORD.  */
+enum machine_mode double_mode; /* Mode whose width is DOUBLE_TYPE_SIZE.  */
 enum machine_mode ptr_mode;    /* Mode whose width is POINTER_SIZE.  */
 
 /* This is reset to LAST_VIRTUAL_REGISTER + 1 at the start of each function.
@@ -3385,6 +3386,7 @@ init_emit_once (line_numbers)
 {
   int i;
   enum machine_mode mode;
+  enum machine_mode double_mode;
 
   no_line_numbers = ! line_numbers;
 
@@ -3394,6 +3396,7 @@ init_emit_once (line_numbers)
 
   byte_mode = VOIDmode;
   word_mode = VOIDmode;
+  double_mode = VOIDmode;
 
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
        mode = GET_MODE_WIDER_MODE (mode))
@@ -3407,6 +3410,18 @@ init_emit_once (line_numbers)
        word_mode = mode;
     }
 
+#ifndef DOUBLE_TYPE_SIZE
+#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+  for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); mode != VOIDmode;
+       mode = GET_MODE_WIDER_MODE (mode))
+    {
+      if (GET_MODE_BITSIZE (mode) == DOUBLE_TYPE_SIZE
+         && double_mode == VOIDmode)
+       double_mode = mode;
+    }
+
   ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0);
 
   /* Create the unique rtx's for certain rtx codes and operand values.  */
@@ -3424,10 +3439,10 @@ init_emit_once (line_numbers)
   else
     const_true_rtx = gen_rtx_CONST_INT (VOIDmode, STORE_FLAG_VALUE);
 
-  dconst0 = REAL_VALUE_ATOF ("0", DFmode);
-  dconst1 = REAL_VALUE_ATOF ("1", DFmode);
-  dconst2 = REAL_VALUE_ATOF ("2", DFmode);
-  dconstm1 = REAL_VALUE_ATOF ("-1", DFmode);
+  dconst0 = REAL_VALUE_ATOF ("0", double_mode);
+  dconst1 = REAL_VALUE_ATOF ("1", double_mode);
+  dconst2 = REAL_VALUE_ATOF ("2", double_mode);
+  dconstm1 = REAL_VALUE_ATOF ("-1", double_mode);
 
   for (i = 0; i <= 2; i++)
     {
index 17a9af7a5826d68241a19e296833426aca3bc593..2f656c281f1f543eb124d0025be204509a3d96e2 100644 (file)
@@ -93,9 +93,10 @@ init_expmed ()
   /* Since we are on the permanent obstack, we must be sure we save this
      spot AFTER we call start_sequence, since it will reuse the rtl it
      makes.  */
-
   free_point = (char *) oballoc (0);
 
+  reg = gen_rtx (REG, word_mode, 10000);
+
   zero_cost = rtx_cost (const0_rtx, 0);
   add_cost = rtx_cost (gen_rtx_PLUS (word_mode, reg, reg), SET);
 
@@ -2277,7 +2278,8 @@ expand_mult (mode, op0, op1, target, unsignedp)
              rtx shift_subtarget = preserve ? 0 : accum;
              rtx add_target
                = (opno == alg.ops - 1 && target != 0 && variant != add_variant
-                 ? target : 0);
+                  && ! preserve)
+                 ? target : 0;
              rtx accum_target = preserve ? 0 : accum;
              
              switch (alg.op[opno])
@@ -2746,6 +2748,7 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
   optab optab1, optab2;
   int op1_is_constant, op1_is_pow2;
   int max_cost, extra_cost;
+  static HOST_WIDE_INT last_div_const = 0;
 
   op1_is_constant = GET_CODE (op1) == CONST_INT;
   op1_is_pow2 = (op1_is_constant
@@ -2855,8 +2858,15 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp)
   size = GET_MODE_BITSIZE (mode);
 #endif
 
+  /* Only deduct something for a REM if the last divide done was
+     for a different constant.   Then set the constant of the last
+     divide.  */
   max_cost = div_cost[(int) compute_mode]
-    - (rem_flag ? mul_cost[(int) compute_mode] + add_cost : 0);
+    - (rem_flag && ! (last_div_const != 0 && op1_is_constant
+                     && INTVAL (op1) == last_div_const)
+       ? mul_cost[(int) compute_mode] + add_cost : 0);
+
+  last_div_const = ! rem_flag && op1_is_constant ? INTVAL (op1) : 0;
 
   /* Now convert to the best mode to use.  */
   if (compute_mode != mode)
index c6728457c4fba2c7560ed921eb2d9286cff45582..666d1ccc403148bf5654673b6de4a6632edc316f 100644 (file)
@@ -239,13 +239,22 @@ init_expr_once ()
 {
   rtx insn, pat;
   enum machine_mode mode;
+  rtx mem, mem1;
+  char *free_point;
+
+  start_sequence ();
+
+  /* Since we are on the permanent obstack, we must be sure we save this
+     spot AFTER we call start_sequence, since it will reuse the rtl it
+     makes.  */
+  free_point = (char *) oballoc (0);
+
   /* Try indexing by frame ptr and try by stack ptr.
      It is known that on the Convex the stack ptr isn't a valid index.
      With luck, one or the other is valid on any machine.  */
-  rtx mem = gen_rtx_MEM (VOIDmode, stack_pointer_rtx);
-  rtx mem1 = gen_rtx_MEM (VOIDmode, frame_pointer_rtx);
+  mem = gen_rtx_MEM (VOIDmode, stack_pointer_rtx);
+  mem1 = gen_rtx_MEM (VOIDmode, frame_pointer_rtx);
 
-  start_sequence ();
   insn = emit_insn (gen_rtx_SET (0, NULL_RTX, NULL_RTX));
   pat = PATTERN (insn);
 
@@ -296,6 +305,7 @@ init_expr_once ()
     }
 
   end_sequence ();
+  obfree (free_point);
 }
       
 /* This is run at the start of compiling a function.  */
@@ -5715,13 +5725,26 @@ expand_expr (exp, target, tmode, modifier)
        temp = gen_rtx_MEM (mode, op0);
        /* If address was computed by addition,
           mark this as an element of an aggregate.  */
-       if (TREE_CODE (TREE_OPERAND (exp, 0)) == PLUS_EXPR
-           || (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR
-               && TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) == PLUS_EXPR)
+       if (TREE_CODE (exp1) == PLUS_EXPR
+           || (TREE_CODE (exp1) == SAVE_EXPR
+               && TREE_CODE (TREE_OPERAND (exp1, 0)) == PLUS_EXPR)
            || AGGREGATE_TYPE_P (TREE_TYPE (exp))
+           /* If the pointer is actually a REFERENCE_TYPE, this could
+              be pointing into some aggregate too.  */
+           || TREE_CODE (TREE_TYPE (exp1)) == REFERENCE_TYPE
            || (TREE_CODE (exp1) == ADDR_EXPR
                && (exp2 = TREE_OPERAND (exp1, 0))
-               && AGGREGATE_TYPE_P (TREE_TYPE (exp2))))
+               && AGGREGATE_TYPE_P (TREE_TYPE (exp2)))
+           /* This may have been an array reference to the first element
+              that was optimized away from being an addition.  */
+           || (TREE_CODE (exp1) == NOP_EXPR
+               && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp1, 0)))
+                    == REFERENCE_TYPE)
+                   || ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp1, 0)))
+                        == POINTER_TYPE)
+                       && (AGGREGATE_TYPE_P
+                           (TREE_TYPE (TREE_TYPE
+                                       (TREE_OPERAND (exp1, 0)))))))))
          MEM_IN_STRUCT_P (temp) = 1;
        MEM_VOLATILE_P (temp) = TREE_THIS_VOLATILE (exp) | flag_volatile;
        MEM_ALIAS_SET (temp) = get_alias_set (exp);
@@ -7916,13 +7939,14 @@ expand_builtin_setjmp (buf_addr, target, first_label, next_label)
 
   emit_queue ();
 
+  /* We store the frame pointer and the address of lab1 in the buffer
+     and use the rest of it for the stack save area, which is
+     machine-dependent.  */
+
 #ifndef BUILTIN_SETJMP_FRAME_VALUE
 #define BUILTIN_SETJMP_FRAME_VALUE virtual_stack_vars_rtx
 #endif
 
-  /* We store the frame pointer and the address of lab1 in the buffer
-     and use the rest of it for the stack save area, which is
-     machine-dependent.  */
   emit_move_insn (gen_rtx_MEM (Pmode, buf_addr),
                  BUILTIN_SETJMP_FRAME_VALUE);
   emit_move_insn (validize_mem
@@ -10148,10 +10172,8 @@ do_jump (exp, if_false_label, if_true_label)
       {
        tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
 
-       if (integer_zerop (TREE_OPERAND (exp, 1)))
-         do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
-       else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
-                || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
+       if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
+           || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
          {
            tree exp0 = save_expr (TREE_OPERAND (exp, 0));
            tree exp1 = save_expr (TREE_OPERAND (exp, 1));
@@ -10174,6 +10196,10 @@ do_jump (exp, if_false_label, if_true_label)
                                                  exp1)))))),
               if_false_label, if_true_label);
          }
+
+       else if (integer_zerop (TREE_OPERAND (exp, 1)))
+         do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
+
        else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
                 && !can_compare_p (TYPE_MODE (inner_type)))
          do_jump_by_parts_equality (exp, if_false_label, if_true_label);
@@ -10186,10 +10212,8 @@ do_jump (exp, if_false_label, if_true_label)
       {
        tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
 
-       if (integer_zerop (TREE_OPERAND (exp, 1)))
-         do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
-       else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
-                || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
+       if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
+           || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
          {
            tree exp0 = save_expr (TREE_OPERAND (exp, 0));
            tree exp1 = save_expr (TREE_OPERAND (exp, 1));
@@ -10212,6 +10236,10 @@ do_jump (exp, if_false_label, if_true_label)
                                                  exp1)))))),
               if_false_label, if_true_label);
          }
+
+       else if (integer_zerop (TREE_OPERAND (exp, 1)))
+         do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
+
        else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
                 && !can_compare_p (TYPE_MODE (inner_type)))
          do_jump_by_parts_equality (exp, if_true_label, if_false_label);
index 794bedf70b1dc78e64b6140384413850cea4e391..4b05fc70c46ca9fcff18f6f39e43fb6a0693bd97 100644 (file)
@@ -76,8 +76,9 @@ Boston, MA 02111-1307, USA.  */
 #if defined (USG) || !defined (HAVE_STAB_H)
 #include "gstab.h"  /* If doing DBX on sysV, use our own stab.h.  */
 #else
-#include <stab.h>  /* On BSD, use the system's stab.h.  */
-#endif /* not USG */
+#include <stab.h>
+#endif
+
 #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */
 
 #ifdef XCOFF_DEBUGGING_INFO
index 2b62325bb2960ae1e05f0aa38dc80984d86d3ede..37c1bd96a91bbb2aab435303b91b707bb6a69b38 100644 (file)
@@ -1,5 +1,5 @@
 /* Compilation switch flag definitions for GNU CC.
-   Copyright (C) 1987, 88, 94-97, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1987, 88, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
index f78e171e0e5ef4f60eb7be5092a90090c5804a56..eb6c2a0079ad084959132ecc8f2632db7bf0a920 100644 (file)
@@ -2381,7 +2381,7 @@ find_auto_inc (needed, x, insn)
            {
              /* We have *p followed sometime later by q = p+size.
                 Both p and q must be live afterward,
-                and q is not used between INSN and it's assignment.
+                and q is not used between INSN and its assignment.
                 Change it to q = p, ...*q..., q = q+size.
                 Then fall into the usual case.  */
              rtx insns, temp;
@@ -3132,6 +3132,7 @@ print_rtl_with_bb (outf, rtx_first)
      FILE *outf;
      rtx rtx_first;
 {
+  extern int flag_dump_unnumbered;
   register rtx tmp_rtx;
 
   if (rtx_first == 0)
@@ -3196,7 +3197,9 @@ print_rtl_with_bb (outf, rtx_first)
          if ((bb = end[INSN_UID (tmp_rtx)]) >= 0)
            fprintf (outf, ";; End of basic block %d\n", bb);
 
-         putc ('\n', outf);
+         if (! flag_dump_unnumbered
+             || GET_CODE (tmp_rtx) != NOTE || NOTE_LINE_NUMBER (tmp_rtx) < 0)
+           putc ('\n', outf);
        }
     }
 }
index 7544f8b673acb0c8b3e2db71376a3a42177a853b..8849608795a8c0a06c0965fbe4ef550ec7edd9e5 100644 (file)
@@ -3293,14 +3293,16 @@ fold_range_test (exp)
           && operand_equal_p (lhs, rhs, 0))
     {
       /* If simple enough, just rewrite.  Otherwise, make a SAVE_EXPR
-        unless we are at top level, in which case we can't do this.  */
+        unless we are at top level or LHS contains a PLACEHOLDER_EXPR, in
+        which cases we can't do this.  */
       if (simple_operand_p (lhs))
        return build (TREE_CODE (exp) == TRUTH_ANDIF_EXPR
                      ? TRUTH_AND_EXPR : TRUTH_OR_EXPR,
                      TREE_TYPE (exp), TREE_OPERAND (exp, 0),
                      TREE_OPERAND (exp, 1));
 
-      else if (current_function_decl != 0)
+      else if (current_function_decl != 0
+              && ! contains_placeholder_p (lhs))
        {
          tree common = save_expr (lhs);
 
@@ -3997,7 +3999,9 @@ fold (expr)
       else if ((TREE_CODE (arg1) == COND_EXPR
                || (TREE_CODE_CLASS (TREE_CODE (arg1)) == '<'
                    && TREE_CODE_CLASS (code) != '<'))
-              && (! TREE_SIDE_EFFECTS (arg0) || current_function_decl != 0))
+              && (! TREE_SIDE_EFFECTS (arg0)
+                  || (current_function_decl != 0
+                      && ! contains_placeholder_p (arg0))))
        {
          tree test, true_value, false_value;
          tree lhs = 0, rhs = 0;
@@ -4068,7 +4072,9 @@ fold (expr)
       else if ((TREE_CODE (arg0) == COND_EXPR
                || (TREE_CODE_CLASS (TREE_CODE (arg0)) == '<'
                    && TREE_CODE_CLASS (code) != '<'))
-              && (! TREE_SIDE_EFFECTS (arg1) || current_function_decl != 0))
+              && (! TREE_SIDE_EFFECTS (arg1)
+                  || (current_function_decl != 0
+                      && ! contains_placeholder_p (arg1))))
        {
          tree test, true_value, false_value;
          tree lhs = 0, rhs = 0;
@@ -4633,7 +4639,8 @@ fold (expr)
          if (real_onep (arg1))
            return non_lvalue (convert (type, arg0));
          /* x*2 is x+x */
-         if (! wins && real_twop (arg1) && current_function_decl != 0)
+         if (! wins && real_twop (arg1) && current_function_decl != 0
+             && ! contains_placeholder_p (arg0))
            {
              tree arg = save_expr (arg0);
              return build (PLUS_EXPR, type, arg, arg);
@@ -5656,14 +5663,16 @@ fold (expr)
          return t1 ? t1 : t;
        }
 
-      /* If this is a comparison of complex values and either or both
-        sizes are a COMPLEX_EXPR, it is best to split up the comparisons
-        and join them with a TRUTH_ANDIF_EXPR or TRUTH_ORIF_EXPR.  This
-        may prevent needless evaluations.  */
+      /* If this is a comparison of complex values and either or both sides
+        are a COMPLEX_EXPR or COMPLEX_CST, it is best to split up the
+        comparisons and join them with a TRUTH_ANDIF_EXPR or TRUTH_ORIF_EXPR.
+        This may prevent needless evaluations.  */
       if ((code == EQ_EXPR || code == NE_EXPR)
          && TREE_CODE (TREE_TYPE (arg0)) == COMPLEX_TYPE
          && (TREE_CODE (arg0) == COMPLEX_EXPR
-             || TREE_CODE (arg1) == COMPLEX_EXPR))
+             || TREE_CODE (arg1) == COMPLEX_EXPR
+             || TREE_CODE (arg0) == COMPLEX_CST
+             || TREE_CODE (arg1) == COMPLEX_CST))
        {
          tree subtype = TREE_TYPE (TREE_TYPE (arg0));
          tree real0, imag0, real1, imag1;
index f3d33d0cc399b6d9bf1e46e39b039744c230f949..9150ebc2bac4ef41d371ba125612ecd99d77db64 100644 (file)
@@ -1375,7 +1375,7 @@ put_var_into_stack (decl)
 
   context = decl_function_context (decl);
 
-  /* Get the current rtl used for this object and it's original mode.  */
+  /* Get the current rtl used for this object and its original mode.  */
   reg = TREE_CODE (decl) == SAVE_EXPR ? SAVE_EXPR_RTL (decl) : DECL_RTL (decl);
 
   /* No need to do anything if decl has no rtx yet
@@ -4835,7 +4835,7 @@ setjmp_protect (block)
            || (GET_CODE (DECL_RTL (decl)) == MEM
                && GET_CODE (XEXP (DECL_RTL (decl), 0)) == ADDRESSOF))
        /* If this variable came from an inline function, it must be
-          that it's life doesn't overlap the setjmp.  If there was a
+          that its life doesn't overlap the setjmp.  If there was a
           setjmp in the function, it would already be in memory.  We
           must exclude such variable because their DECL_RTL might be
           set to strange things such as virtual_stack_vars_rtx.  */
index 7fd507bb48dad93e2a0e0582d5ece02c8cc4dfcb..8661aa2b62462039312e8876483f59ae78f4403b 100644 (file)
--- a/gcc/gcc.1
+++ b/gcc/gcc.1
@@ -3547,7 +3547,7 @@ be compiled with the same
 value.
 .TP
 .B \-nocpp
-Tell the MIPS assembler to not run it's preprocessor over user
+Tell the MIPS assembler to not run its preprocessor over user
 assembler files (with a `\|\c
 .B .s\c
 \&\|' suffix) when assembling them.
index 09b03326a681eba2df86ddd3a9a9fa984b2f7af0..7117d60381405dd1375aa2b72ccdc543fc377c8b 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -321,7 +321,7 @@ or with constant text in a single argument.
         This allows config.h to specify part of the spec for running as.
  %A    process ASM_FINAL_SPEC as a spec.  A capital A is actually
        used here.  This can be used to run a post-processor after the
-       assembler has done it's job.
+       assembler has done its job.
  %D    Dump out a -L option for each directory in startfile_prefixes.
        If multilib_dir is set, extra entries are generated with it affixed.
  %l     process LINK_SPEC as a spec.
@@ -749,6 +749,12 @@ static int n_default_compilers
 /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
    scripts which exist in user specified directories, or in standard
    directories.  */
+#ifdef LINK_COMMAND_SPEC
+/* Provide option to override link_command_spec from machine specific
+   configuration files.  */
+static char *link_command_spec = 
+       LINK_COMMAND_SPEC;
+#else
 #ifdef LINK_LIBGCC_SPECIAL
 /* Don't generate -L options.  */
 static char *link_command_spec = "\
@@ -774,6 +780,7 @@ static char *link_command_spec = "\
                        %{T*}\
                        \n }}}}}}";
 #endif
+#endif
 
 /* A vector of options to give to the linker.
    These options are accumulated by %x,
index 253aaaefd5ee14c6f55a39f289ad392263332e0a..686bf5c749a2aa1c67be280bc773cb77337017d8 100644 (file)
@@ -341,7 +341,9 @@ static char *alternative_name;
 
 int reload_completed = 0;
 
-/* Similarly since PRESERVE_DEATH_INFO_REGNO_P might reference "optimize".  */
+/* Some machines test `optimize' in macros called from rtlanal.c, so we need
+   to define it here.  */
+
 int optimize = 0;
 
 /* Simplify an expression.  Only call the routine if there is something to
@@ -2125,7 +2127,7 @@ expand_units ()
          if (unit->needs_range_function)
            {
              /* Compute the blockage range function and make an attribute
-                for writing it's value.  */
+                for writing its value.  */
              newexp = operate_exp (RANGE_OP, min_blockage, max_blockage);
              newexp = simplify_knowing (newexp, unit->condexp);
 
@@ -4404,8 +4406,7 @@ gen_unit (def)
   unit->condexp = insert_right_side (IOR, unit->condexp, op->condexp, -2, -2);
 }
 \f
-/* Given a piece of RTX, print a C expression to test it's truth value.
-
+/* Given a piece of RTX, print a C expression to test its truth value.
    We use AND and IOR both for logical and bit-wise operations, so 
    interpret them as logical unless they are inside a comparison expression.
    The first bit of FLAGS will be non-zero in that case.
index 811a7dca752bd3414e74d0a31127bd5a928b9626..f7548ceda0ce8366b41c7b988ec46563317dba44 100644 (file)
@@ -38,10 +38,12 @@ int main (argc, argv)
      char *argv[];
 {
   int i;
+
   switch (argc)
     {
     case 1:
       break;
+
     default:
       usage ();
       exit (1);
index 86d7a42a9770c5cef5db62ae117e84ad1d0fefd6..e4341b8601b6ee116844ef0f39e46bfa5d335f21 100644 (file)
@@ -778,6 +778,7 @@ from the machine description file `md'.  */\n\n");
   printf ("#include \"insn-config.h\"\n\n");
   printf ("#include \"insn-flags.h\"\n\n");
   printf ("#include \"insn-codes.h\"\n\n");
+  printf ("#include \"reload.h\"\n");
   printf ("extern char *insn_operand_constraint[][MAX_RECOG_OPERANDS];\n\n");
   printf ("extern rtx recog_operand[];\n");
   printf ("#define operands emit_operand\n\n");
index a9a101f3c1bcc85e2054e75634031a924c46e2e9..920727114151683d8663aa49a7e3e5a76ad1ce40 100644 (file)
@@ -201,15 +201,18 @@ static char *posixly_correct;
 # define my_index      strchr
 #else
 
+# if HAVE_STRING_H
+#  include <string.h>
+# else
+#  include <strings.h>
+# endif
+
 /* Avoid depending on library functions or files
    whose names are inconsistent.  */
 
 #ifndef getenv
 extern char *getenv ();
 #endif
-#ifndef strncmp
-extern int strncmp ();
-#endif
 
 static char *
 my_index (str, chr)
index dc48c4205074eceb3c47117a882f0572b287d21b..d5b6d1c19004df4f23bea00864b798a58f6a76bf 100644 (file)
@@ -199,6 +199,14 @@ threads implementation available, in which case threads can be enabled
 with this option by supplying a suitable @var{type}, probably
 @samp{posix}.  The possibilities for @var{type} are @samp{single},
 @samp{posix}, @samp{win32}, @samp{solaris}, @samp{irix} and @samp{mach}.
+
+@cindex Internal Compiler Checking
+@item --enable-checking
+When you specify this option, the compiler is built to perform checking
+of tree node types when referencing fields of that node.  This does not
+change the generated code, but adds error checking within the compiler.
+This will slow down the compiler and may only work properly if you
+are building the compiler with GNU C.
 @end table
 
 The @file{configure} script searches subdirectories of the source
@@ -946,7 +954,9 @@ highly recommend using GAS for all HP-PA configurations.
 You should be using GAS-2.6 (or later) along with GDB-4.16 (or later).  These
 can be retrieved from all the traditional GNU ftp archive sites.
 
-GAS will need to be installed into a directory before @code{/bin},
+On some versions of HP-UX, you will need to install GNU @file{sed}.
+
+You will need to be install GAS into a directory before @code{/bin},
 @code{/usr/bin}, and @code{/usr/ccs/bin} in your search path.  You
 should install GAS before you build GNU CC.
 
@@ -1013,10 +1023,8 @@ GNU binutils version 2.2 or later.
 Go to the Berkeley universe before compiling.
 
 @item i386-sequent-ptx1*
-Sequent DYNIX/ptx 1.x.
-
-@item i386-sequent-ptx2*
-Sequent DYNIX/ptx 2.x.
+@itemx i386-sequent-ptx2*
+You must install GNU @file{sed} before running @file{configure}.
 
 @item i386-sun-sunos4
 You may find that you need another version of GNU CC to begin
@@ -1219,8 +1227,8 @@ PHCO_4484 from HP.
 In addition, if you wish to use gas @samp{--with-gnu-as} you must use
 gas version 2.1 or later, and you must use the GNU linker version 2.1 or
 later.  Earlier versions of gas relied upon a program which converted the
-gas output into the native HP/UX format, but that program has not been
-kept up to date.  gdb does not understand that native HP/UX format, so
+gas output into the native HP-UX format, but that program has not been
+kept up to date.  gdb does not understand that native HP-UX format, so
 you must use gas if you wish to use gdb.
 
 @item m68k-sun
index 6e4382513592d03587b3848203539ca596bff395..112072d37c0580d6ed66018d411f5c2303da8aab 100644 (file)
@@ -145,7 +145,7 @@ in the following sections.
 @item Optimization Options
 @xref{Optimize Options,,Options that Control Optimization}.
 @smallexample
--fbranch-probabilities
+-fbranch-probabilities  -foptimize-register-moves
 -fcaller-saves  -fcse-follow-jumps  -fcse-skip-blocks
 -fdelayed-branch   -fexpensive-optimizations
 -ffast-math  -ffloat-store  -fforce-addr  -fforce-mem
@@ -2312,6 +2312,17 @@ This pass also performs global constant and copy propagation.
 @item -fexpensive-optimizations
 Perform a number of minor optimizations that are relatively expensive.
 
+@item -foptimize-register-moves
+@item -fregmove
+Attempt to reassign register numbers in move instructions and as
+operands of other simple instructions in order to maximize the amount of
+register tying.  This is especially helpfu on machines with two-operand
+instructions.  GNU CC enables this optimization by default with @samp{-O2}
+or higher.
+
+Note @code{-fregmove} and @code{-foptimize-register-moves} are the same
+optimization.
+
 @item -fdelayed-branch
 If supported for the target machine, attempt to reorder instructions
 to exploit instruction slots available after delayed branch
@@ -2413,12 +2424,6 @@ branch is mostly to take, the @samp{REG_BR_PROB} values are used to
 exactly determine which path is taken more often.
 @end ifset
 
-@item -fregmove
-Some machines only support 2 operands per instruction.  On such
-machines, GNU CC might have to do extra copies.  The @samp{-fregmove}
-option overrides the default for the machine to do the copy before
-register allocation.
-
 @item -fstrict-aliasing
 Allows the compiler to assume the strictest aliasing rules applicable to
 the language being compiled.  For C (and C++), this activates
@@ -4865,7 +4870,7 @@ All modules should be compiled with the same @samp{-G @var{num}}
 value.
 
 @item -nocpp
-Tell the MIPS assembler to not run it's preprocessor over user
+Tell the MIPS assembler to not run its preprocessor over user
 assembler files (with a @samp{.s} suffix) when assembling them.
 @end table
 
index 04b361891210a42d1d87d50a500398c5f83d0d01..38068172a3a873022f9b85b4d6a7793757e1385a 100644 (file)
@@ -937,7 +937,7 @@ enum alloc_type {
    grow linearly, and which are written in the object file as sequential
    pages.  On systems with a BSD malloc that define USE_MALLOC, the
    MAX_CLUSTER_PAGES should be 1 less than a power of two, since malloc
-   adds it's overhead, and rounds up to the next power of 2.  Pages are
+   adds its overhead, and rounds up to the next power of 2.  Pages are
    linked together via a linked list.
 
    If PAGE_SIZE is > 4096, the string length in the shash_t structure
@@ -5113,7 +5113,7 @@ out_of_bounds (indx, max, str, prog_line)
 
 \f
 /* Allocate a cluster of pages.  USE_MALLOC says that malloc does not
-   like sbrk's behind it's back (or sbrk isn't available).  If we use
+   like sbrk's behind its back (or sbrk isn't available).  If we use
    sbrk, we assume it gives us zeroed pages.  */
 
 #ifndef MALLOC_CHECK
index 5ca8865d942336cb5a02cf69e4d83eebc4efeea8..9eb000b5b391af0a6bb430421c1e830439458f75 100644 (file)
@@ -301,7 +301,7 @@ struct objc_protocol_list {
 
 /*
 ** The class number of this class.  This must be the same for both the 
-** class and it's meta class object
+** class and its meta class object
 */
 #define CLS_GETNUMBER(cls) (__CLS_INFO(cls) >> (HOST_BITS_PER_LONG/2))
 #define CLS_SETNUMBER(cls, num) \
index f0d3957f3d883bc321b88a6de7e258bdd4ce5dfb..245b8b9eaf7945a43b4581f465ee7dd7c16a6a96 100644 (file)
@@ -1,5 +1,5 @@
 /* GNU Objective C Runtime message lookup 
-   Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
    Contributed by Kresten Krab Thorup
 
 This file is part of GNU CC.
@@ -343,7 +343,7 @@ __objc_install_dispatch_table_for_class (Class class)
 {
   Class super;
 
-  /* If the class has not yet had it's class links resolved, we must 
+  /* If the class has not yet had its class links resolved, we must 
      re-compute all class links */
   if(!CLS_ISRESOLV(class))
     __objc_resolve_class_links();
index 0187c34127a6c3e91467c6ff10480130ff2bb573..ef25e7e6ebe7f7023b9530a8e952e3845b994807 100644 (file)
@@ -53,6 +53,7 @@ static int indent;
 
 extern char **insn_name_ptr;
 
+int flag_dump_unnumbered = 0;
 /* Print IN_RTX onto OUTFILE.  This is the recursive part of printing.  */
 
 static void
@@ -205,6 +206,9 @@ print_rtx (in_rtx)
              fputc (' ', outfile);
              DEBUG_PRINT_REG (in_rtx, 0, outfile);
            }
+         else if (flag_dump_unnumbered
+                  && (is_insn || GET_CODE (in_rtx) == NOTE))
+           fprintf (outfile, "#");
          else
            fprintf (outfile, " %d", value);
        }
@@ -227,7 +231,12 @@ print_rtx (in_rtx)
 
       case 'u':
        if (XEXP (in_rtx, i) != NULL)
-         fprintf (outfile, " %d", INSN_UID (XEXP (in_rtx, i)));
+         {
+           if (flag_dump_unnumbered)
+             fprintf (outfile, "#");
+           else
+             fprintf (outfile, " %d", INSN_UID (XEXP (in_rtx, i)));
+         }
        else
          fprintf (outfile, " 0");
        sawclose = 0;
@@ -381,8 +390,13 @@ print_rtl (outf, rtx_first)
       case BARRIER:
        for (tmp_rtx = rtx_first; NULL != tmp_rtx; tmp_rtx = NEXT_INSN (tmp_rtx))
          {
-           print_rtx (tmp_rtx);
-           fprintf (outfile, "\n");
+           if (! flag_dump_unnumbered
+               || GET_CODE (tmp_rtx) != NOTE
+               || NOTE_LINE_NUMBER (tmp_rtx) < 0)
+             {
+               print_rtx (tmp_rtx);
+               fprintf (outfile, "\n");
+             }
          }
        break;
 
@@ -400,6 +414,10 @@ print_rtl_single (outf, x)
 {
   outfile = outf;
   sawclose = 0;
-  print_rtx (x);
-  putc ('\n', outf);
+  if (! flag_dump_unnumbered
+      || GET_CODE (x) != NOTE || NOTE_LINE_NUMBER (x) < 0)
+    {
+      print_rtx (x);
+      putc ('\n', outf);
+    }
 }
index a85b21b3a8a870388c012d817c92aef1c3df14a6..48908e520c34984971d43aabb1302559b92dd8d1 100644 (file)
@@ -1917,7 +1917,7 @@ save_def_or_dec (l, is_syscalls)
         }
 
       /* Handle a special case.  If we have a function definition marked as
-         being in "old" style, and if it's formal names list is empty, then
+         being in "old" style, and if its formal names list is empty, then
          it may actually have the string "void" in its real formals list
          in the original source code.  Just to make sure, we will get setup
          to convert such things anyway.
@@ -2767,7 +2767,7 @@ connect_defs_and_decs (hp)
 
      Also, for each item which is only a function declaration, but which
      nonetheless has its own prototype already (obviously supplied by the user)
-     declare the item as it's own definition.
+     declare the item as its own definition.
 
      Note that when/if there are multiple user-supplied prototypes already
      present for multiple declarations of any given function, these multiple
index 37b0a883867e90ae8f43535fb8700030cffcb69b..ed854e02625a74b1d95e79e2ecee4be2f7977ace 100644 (file)
@@ -51,7 +51,7 @@ XFmode and TFmode transcendental functions, can be obtained by ftp from
 netlib.att.com: netlib/cephes.   */
 \f
 /* Type of computer arithmetic.
-   Only one of DEC, IBM, IEEE, or UNK should get defined.
+   Only one of DEC, IBM, IEEE, C4X, or UNK should get defined.
 
    `IEEE', when REAL_WORDS_BIG_ENDIAN is non-zero, refers generically
    to big-endian IEEE floating-point data structure.  This definition
@@ -76,6 +76,11 @@ netlib.att.com: netlib/cephes.   */
    no type wider than DFmode.  The IBM conversions were contributed by
    frank@atom.ansto.gov.au (Frank Crawford).
 
+   `C4X' refers specifically to the floating point format used on
+   Texas Instruments TMS320C3x and TMS320C4x digital signal
+   processors.  This supports QFmode (32-bit float, double) and HFmode
+   (40-bit long double) where BITS_PER_BYTE is 32.
+
    If LONG_DOUBLE_TYPE_SIZE = 64 (the default, unless tm.h defines it)
    then `long double' and `double' are both implemented, but they
    both mean DFmode.  In this case, the software floating-point
@@ -686,7 +691,16 @@ ereal_atof (s, t)
 
   switch (t)
     {
+#ifdef C4X
+    case QFmode:
     case HFmode:
+      asctoe53 (s, tem);
+      e53toe (tem, e);
+      break;
+#else
+    case HFmode:
+#endif
+
     case SFmode:
       asctoe24 (s, tem);
       e24toe (tem, e);
@@ -1045,11 +1059,21 @@ real_value_truncate (mode, arg)
       break;
 
     case SFmode:
+#ifndef C4X
     case HFmode:
+#endif
       etoe24 (e, t);
       e24toe (t, t);
       break;
 
+#ifdef C4X
+    case HFmode:
+    case QFmode:
+      etoe53 (e, t);
+      e53toe (t, t);
+      break;
+#endif
+
     case SImode:
       r = etrunci (arg);
       return (r);
@@ -3714,7 +3738,7 @@ toe53 (x, y)
 
 #else /* it's neither DEC nor IBM */
 #ifdef C4X
-/* Convert e-type X to C4X-format double E.  */
+/* Convert e-type X to C4X-format long double E.  */
 
 static void 
 etoe53 (x, e)
index e7ea926b2746ec8764cdedf50cf48dbaf1f4790b..b9238cd325014e033006af143059c1a81de8017c 100644 (file)
@@ -439,7 +439,7 @@ init_regs ()
        memory_move_secondary_cost.  */
     int i;
     for (i = 0; i < MAX_MACHINE_MODE; i++)
-      top_of_stack[i] = gen_rtx (MEM, i, stack_pointer_rtx);
+      top_of_stack[i] = gen_rtx_MEM (i, stack_pointer_rtx);
   }
 #endif
 }
index 83f05ad2f777f6a1b97a40374efbdcdd45dc4578..6431f15609337dbb7add78512ba68a1438db26d6 100644 (file)
@@ -2344,6 +2344,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
   rtx set = single_set (insn);
   int goal_earlyclobber, this_earlyclobber;
   enum machine_mode operand_mode[MAX_RECOG_OPERANDS];
+  /* Cache the last regno for the last pseudo we did an output reload
+     for in case the next insn uses it.  */
+  static int last_output_reload_regno = -1;
 
   this_insn = insn;
   this_insn_is_asm = 0;                /* Tentative.  */
@@ -3219,6 +3222,15 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
                  && this_alternative_matches[i] < 0)
                bad = 1;
 
+             /* If this is a pseudo-register that is set in the previous
+                insns, there's a good chance that it will already be in a
+                spill register and we can use that spill register.  So
+                make this case cheaper.  */
+             if (GET_CODE (operand) == REG
+                 && REGNO (operand) >= FIRST_PSEUDO_REGISTER
+                 && REGNO (operand) == last_output_reload_regno)
+               reject--;
+
              /* If this is a constant that is reloaded into the desired
                 class by copying it to memory first, count that as another
                 reload.  This is consistent with other code and is
@@ -3615,6 +3627,7 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
        reload_earlyclobbers[n_earlyclobbers++] = recog_operand[i];
 
   /* Now record reloads for all the operands that need them.  */
+  last_output_reload_regno = -1;
   for (i = 0; i < noperands; i++)
     if (! goal_alternative_win[i])
       {
@@ -3661,20 +3674,27 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
              }
          }
        else if (goal_alternative_matched[i] == -1)
-         operand_reloadnum[i]
-           = push_reload (modified[i] != RELOAD_WRITE ? recog_operand[i] : 0,
-                          modified[i] != RELOAD_READ ? recog_operand[i] : 0,
-                          (modified[i] != RELOAD_WRITE
-                           ? recog_operand_loc[i] : 0),
-                          modified[i] != RELOAD_READ ? recog_operand_loc[i] : 0,
-                          (enum reg_class) goal_alternative[i],
-                          (modified[i] == RELOAD_WRITE
-                           ? VOIDmode : operand_mode[i]),
-                          (modified[i] == RELOAD_READ
-                           ? VOIDmode : operand_mode[i]),
-                          (insn_code_number < 0 ? 0
-                           : insn_operand_strict_low[insn_code_number][i]),
-                          0, i, operand_type[i]);
+         {
+           operand_reloadnum[i]
+             = push_reload ((modified[i] != RELOAD_WRITE
+                             ? recog_operand[i] : 0),
+                            modified[i] != RELOAD_READ ? recog_operand[i] : 0,
+                            (modified[i] != RELOAD_WRITE
+                             ? recog_operand_loc[i] : 0),
+                            (modified[i] != RELOAD_READ
+                             ? recog_operand_loc[i] : 0),
+                            (enum reg_class) goal_alternative[i],
+                            (modified[i] == RELOAD_WRITE
+                             ? VOIDmode : operand_mode[i]),
+                            (modified[i] == RELOAD_READ
+                             ? VOIDmode : operand_mode[i]),
+                            (insn_code_number < 0 ? 0
+                             : insn_operand_strict_low[insn_code_number][i]),
+                            0, i, operand_type[i]);
+           if (modified[i] != RELOAD_READ
+               && GET_CODE (recog_operand[i]) == REG)
+             last_output_reload_regno = REGNO (recog_operand[i]);
+         }
        /* In a matching pair of operands, one must be input only
           and the other must be output only.
           Pass the input operand as IN and the other as OUT.  */
@@ -3691,6 +3711,9 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
                             operand_mode[goal_alternative_matched[i]],
                             0, 0, i, RELOAD_OTHER);
            operand_reloadnum[goal_alternative_matched[i]] = output_reloadnum;
+           if (GET_CODE (recog_operand[goal_alternative_matched[i]]) == REG)
+             last_output_reload_regno
+               = REGNO (recog_operand[goal_alternative_matched[i]]);
          }
        else if (modified[i] == RELOAD_WRITE
                 && modified[goal_alternative_matched[i]] == RELOAD_READ)
@@ -3705,6 +3728,8 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
                             operand_mode[i],
                             0, 0, i, RELOAD_OTHER);
            operand_reloadnum[i] = output_reloadnum;
+           if (GET_CODE (recog_operand[i]) == REG)
+             last_output_reload_regno = REGNO (recog_operand[i]);
          }
        else if (insn_code_number >= 0)
          abort ();
index 9601691f9f9f4fa384f441ac1e499098397139c7..825b8715da3ac8599fc05e05c0c6de9fde30bd60 100644 (file)
@@ -2080,13 +2080,20 @@ reload (first, global, dumpfile)
     {
       rtx addr = 0;
       int in_struct = 0;
-      if (reg_equiv_mem[i])
+      int is_readonly = 0;
+
+      if (reg_equiv_memory_loc[i])
        {
-         addr = XEXP (reg_equiv_mem[i], 0);
-         in_struct = MEM_IN_STRUCT_P (reg_equiv_mem[i]);
+         in_struct = MEM_IN_STRUCT_P (reg_equiv_memory_loc[i]);
+         is_readonly = RTX_UNCHANGING_P (reg_equiv_memory_loc[i]);
        }
+
+      if (reg_equiv_mem[i])
+       addr = XEXP (reg_equiv_mem[i], 0);
+
       if (reg_equiv_address[i])
        addr = reg_equiv_address[i];
+
       if (addr)
        {
          if (reg_renumber[i] < 0)
@@ -2094,6 +2101,7 @@ reload (first, global, dumpfile)
              rtx reg = regno_reg_rtx[i];
              XEXP (reg, 0) = addr;
              REG_USERVAR_P (reg) = 0;
+             RTX_UNCHANGING_P (reg) = is_readonly;
              MEM_IN_STRUCT_P (reg) = in_struct;
              /* We have no alias information about this newly created
                 MEM.  */
@@ -2565,7 +2573,14 @@ alter_reg (i, from_reg)
        {
          x = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]),
                       plus_constant (XEXP (x, 0), adjust));
-         RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
+
+         /* If this was shared among registers, must ensure we never
+            set it readonly since that can cause scheduling
+            problems.  Note we would only have in this adjustment
+            case in any event, since the code above doesn't set it.  */
+
+         if (from_reg == -1)
+           RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (regno_reg_rtx[i]);
        }
 
       /* Save the stack slot for later.   */
index 7370a356dc4e80ce80183ea567a93d6be0242bf9..69c43238cb51e088fbb02cdce288c48fc0a3b9a2 100644 (file)
@@ -579,7 +579,7 @@ mark_set_resources (x, res, in_dest, include_delayed_effects)
            SET_HARD_REG_SET (res->regs);
        }
 
-      /* ... and also what it's RTL says it modifies, if anything.  */
+      /* ... and also what its RTL says it modifies, if anything.  */
 
     case JUMP_INSN:
     case INSN:
@@ -983,7 +983,7 @@ add_to_delay_list (insn, delay_list)
      rtx delay_list;
 {
   /* If we have an empty list, just make a new list element.  If
-     INSN has it's block number recorded, clear it since we may
+     INSN has its block number recorded, clear it since we may
      be moving the insn to a new block.  */
 
   if (delay_list == 0)
index e7bc80472ff186b22b301d91fe23d24415ca80f7..a7eaaf8244d11d0a88df806d3a3ce14c698cdc5f 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -955,10 +955,8 @@ extern int side_effects_p  PROTO((rtx));
 extern int volatile_refs_p     PROTO((rtx));
 extern int volatile_insn_p     PROTO((rtx));
 extern void remove_note                PROTO((rtx, rtx));
-extern void note_stores                PROTO((rtx, void (*) (rtx, rtx)));
 extern int refers_to_regno_p   PROTO((int, int, rtx, rtx *));
 extern int reg_overlap_mentioned_p PROTO((rtx, rtx));
-extern rtx find_use_as_address PROTO((rtx, rtx, HOST_WIDE_INT));
 
 /* Functions in rtlanal.c */
 
@@ -980,6 +978,8 @@ extern rtx single_set                       PROTO((rtx));
 extern rtx find_last_value             PROTO((rtx, rtx *, rtx));
 extern int refers_to_regno_p           PROTO((int, int, rtx, rtx *));
 extern int reg_overlap_mentioned_p     PROTO((rtx, rtx));
+extern rtx find_use_as_address         PROTO((rtx, rtx, HOST_WIDE_INT));
+extern void note_stores                        PROTO((rtx, void (*)()));
 extern rtx reg_set_last                        PROTO((rtx, rtx));
 extern int rtx_equal_p                 PROTO((rtx, rtx));
 extern int dead_or_set_p               PROTO((rtx, rtx));
index 44ea22c38aeb60fb0106252ec05d17eaec00485c..4327aa3ecc232dd70495083d113e64a35f2666ad 100644 (file)
 %
 % Please try the latest version of texinfo.tex before submitting bug
 % reports; you can get the latest version from:
-% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-% ftp://ftp.gnu.org/pub/gnu/texinfo.tex
-% (and all GNU mirrors)
-% ftp://tug.org/tex/texinfo.tex
-% ftp://ctan.org/macros/texinfo/texinfo.tex
-% (and all CTAN mirrors, finger ctan@tug.org for a list).
+%   ftp://ftp.gnu.org/pub/gnu/texinfo.tex
+%   /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+%   (and all GNU mirrors, see ftp://ftp.gnu.org/pub/gnu/README.mirrors)
+%   ftp://tug.org/tex/texinfo.tex
+%   ftp://ctan.org/macros/texinfo/texinfo.tex
+%   (and all CTAN mirrors, finger ctan@tug.org for a list).
+% The texinfo.tex in the texinfo distribution itself could well be out
+% of date, so if that's what you're using, please check.
 % 
 % Send bug reports to bug-texinfo@gnu.org.
 % Please include a precise test case in each bug report,
 % including a complete document with which we can reproduce the problem.
 % 
-% Texinfo macros (with @macro) are *not* supported by texinfo.tex.  You
-% have to run makeinfo -E to expand macros first; the texi2dvi script
-% does this.
-% 
 % To process a Texinfo manual with TeX, it's most reliable to use the
 % texi2dvi shell script that comes with the distribution.  For simple
 % manuals, you can get away with:
 % Dimensions to add cropmarks at corners.
 % Added by P. A. MacKay, 12 Nov. 1986
 %
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen\topandbottommargin
-\newdimen\outerhsize \newdimen\outervsize
-\cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
-\outerhsize=7in
-%\outervsize=9.5in
-% Alternative @smallbook page size is 9.25in
-\outervsize=9.25in
-\topandbottommargin=.75in
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
 
 % Main output routine.
 \chardef\PAGE = 255
@@ -791,13 +784,6 @@ where each line of input produces a line of output.}
 \def\menu{\doignore{menu}}
 \def\direntry{\doignore{direntry}}
 
-% Also ignore @macro ... @end macro.  The user must run texi2dvi,
-% which runs makeinfo to do macro expansion.  Ignore @unmacro, too.
-\def\macro{\doignore{macro}}
-\def\macrocsname{macro}
-\let\unmacro = \comment
-
-
 % @dircategory CATEGORY  -- specify a category of the dir file
 % which this file should belong to.  Ignore this in TeX.
 \let\dircategory = \comment
@@ -828,13 +814,7 @@ where each line of input produces a line of output.}
   %   @c @end ifinfo
   % and the @end ifinfo will be properly ignored.
   % (We've just changed @ to catcode 12.)
-  % 
-  % But we can't do this if #1 is `macro', since that actually contains a c.
-  % Happily, none of the other conditionals have the letter `c' in their names!
-  \def\temp{#1}%
-  \ifx\temp\macrocsname \else
-    \catcode`\c = 14
-  \fi
+  \catcode`\c = 14
   %
   % And now expand that command.
   \doignoretext
@@ -965,13 +945,24 @@ where each line of input produces a line of output.}
 \def\value{\begingroup
   \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
   \valuexxx}
-\def\valuexxx#1{%
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we \let\value to this in \indexdummies).  Ones
+% whose names contain - or _ still won't work, but we can't do anything
+% about that.  The command has to be fully expandable, since the result
+% winds up in the index file.  This means that if the variable's value
+% contains other Texinfo commands, it's almost certain it will fail
+% (although perhaps we could fix that with sufficient work to do a
+% one-level expansion on the result, instead of complete).
+% 
+\def\expandablevalue#1{%
   \expandafter\ifx\csname SET#1\endcsname\relax
-    {\{No value for ``#1''\}}%
+    {[No value for ``#1'']v}%
   \else
     \csname SET#1\endcsname
   \fi
-\endgroup}
+}
 
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
@@ -1079,12 +1070,21 @@ where each line of input produces a line of output.}
 % @refill is a no-op.
 \let\refill=\relax
 
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
 % @setfilename is done at the beginning of every texinfo file.
 % So open here the files we need to have open while reading the input.
 % This makes it possible to make a .fmt file for texinfo.
 \def\setfilename{%
-   \readauxfile
-   \opencontents
+   \iflinks 
+     \readauxfile
+     \opencontents
+   \fi % \openindices needs to do some work in any case.
    \openindices
    \fixbackslash  % Turn off hack to swallow `\input texinfo'.
    \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
@@ -1100,30 +1100,25 @@ where each line of input produces a line of output.}
    \comment % Ignore the actual filename.
 }
 
+% Called from \setfilename.
+% 
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
+
 % @bye.
 \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
 
-% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
-% \def\macroxxx#1#2 \end macro{%
-% \expandafter\gdef\macrotemp#1{#2}%
-% \endgroup}
-
-%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
-%\def\linemacroxxx#1#2 \end linemacro{%
-%\let\parsearg=\relax
-%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
-%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
-%\expandafter\gdef\macrotempx#1{#2}%
-%\endgroup}
-
-%\def\butfirst#1{}
-
 
 \message{fonts,}
-
 % Font-change commands.
 
-% Texinfo supports the sans serif font style, which plain TeX does not.
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
 % So we set up a \sf analogous to plain's \rm, etc.
 \newfam\sffam
 \def\sf{\fam=\sffam \tensf}
@@ -1898,7 +1893,7 @@ July\or August\or September\or October\or November\or December\fi
 \def\itemize{\parsearg\itemizezzz}
 
 \def\itemizezzz #1{%
-  \begingroup % ended by the @end itemsize
+  \begingroup % ended by the @end itemize
   \itemizey {#1}{\Eitemize}
 }
 
@@ -2264,12 +2259,14 @@ width0pt\relax} \fi
 % the file that accumulates this index.  The file's extension is foo.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\doindex {#1}}
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
 }
 
 % @defindex foo  ==  \newindex{foo}
@@ -2278,11 +2275,13 @@ width0pt\relax} \fi
 
 % Define @defcodeindex, like @defindex except put all entries in @code.
 
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-\expandafter\xdef\csname#1index\endcsname{%     % Define \xxxindex
-\noexpand\docodeindex {#1}}
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}
 }
 
 \def\defcodeindex{\parsearg\newcodeindex}
@@ -2369,7 +2368,6 @@ width0pt\relax} \fi
 \def\gtr{\realbackslash gtr}%
 \def\less{\realbackslash less}%
 \def\hat{\realbackslash hat}%
-%\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%
 \def\result{\realbackslash result}%
@@ -2396,7 +2394,12 @@ width0pt\relax} \fi
 \def\kbd##1{\realbackslash kbd {##1}}%
 \def\dfn##1{\realbackslash dfn {##1}}%
 \def\emph##1{\realbackslash emph {##1}}%
-\def\value##1{\realbackslash value {##1}}%
+%
+% Handle some cases of @value -- where the variable name does not
+% contain - or _, and the value does not contain any
+% (non-fully-expandable) commands.
+\let\value = \expandablevalue
+%
 \unsepspaces
 }
 
@@ -2469,14 +2472,24 @@ width0pt\relax} \fi
 % so we do not become unable to do a definition.
 
 {\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
+ @gdef@realbackslash{\}}
 
 \let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% For \ifx comparisons.
+\def\emptymacro{\empty}
 
-\let\SETmarginindex=\relax %initialize!
-% workhorse for all \fooindexes
-% #1 is name of index, #2 is stuff to put there
-\def\doind #1#2{%
+% Most index entries go through here, but \dosubind is the general case.
+% 
+\def\doind#1#2{\dosubind{#1}{#2}\empty}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% \empty if called from \doind, as we usually are.  The main exception
+% is with defuns, which call us directly.
+% 
+\def\dosubind#1#2#3{%
   % Put the index entry in the margin if desired.
   \ifx\SETmarginindex\relax\else
     \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
@@ -2487,13 +2500,22 @@ width0pt\relax} \fi
       \indexdummies % Must do this here, since \bf, etc expand at this stage
       \escapechar=`\\
       {%
-        \let\folio=0% We will expand all macros now EXCEPT \folio.
+        \let\folio = 0% We will expand all macros now EXCEPT \folio.
         \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
         % so it will be output as is; and it will print as backslash.
         %
+        \def\thirdarg{#3}%
+        %
+        % If third arg is present, precede it with space in sort key.
+        \ifx\thirdarg\emptymacro
+          \let\subentry = \empty
+        \else
+          \def\subentry{ #3}%
+        \fi
+        %
         % First process the index-string with all font commands turned off
         % to get the string to sort by.
-        {\indexnofonts \xdef\indexsorttmp{#2}}%
+        {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
         %
         % Now produce the complete index entry, with both the sort key and the
         % original text, including any font commands.
@@ -2502,33 +2524,35 @@ width0pt\relax} \fi
           \write\csname#1indfile\endcsname{%
             \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
         }%
-        \temp
+        %
+        % If third (subentry) arg is present, add it to the index string.
+        \ifx\thirdarg\emptymacro \else
+          \toks0 = {#3}%
+          \edef\temp{\temp{\the\toks0}}%
+        \fi
+        %
+        % If a skip is the last thing on the list now, preserve it
+        % by backing up by \lastskip, doing the \write, then inserting
+        % the skip again.  Otherwise, the whatsit generated by the
+        % \write will make \lastskip zero.  The result is that sequences
+        % like this:
+        % @end defun
+        % @tindex whatever
+        % @defun ...
+        % will have extra space inserted, because the \medbreak in the
+        % start of the @defun won't see the skip inserted by the @end of
+        % the previous defun.
+        \iflinks
+          \skip0 = \lastskip \ifdim\lastskip = 0pt \else \vskip-\lastskip \fi
+          \temp
+          \ifdim\skip0 = 0pt \else \vskip\skip0 \fi
+        \fi
       }%
     }%
     \penalty\count255
   }%
 }
 
-\def\dosubind #1#2#3{%
-{\count10=\lastpenalty %
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-}\penalty\count10}}
-
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
 % or
@@ -2952,7 +2976,7 @@ width0pt\relax} \fi
 \toks0 = {#1}%
 \edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp  %
+\iflinks \write\contentsfile\temp \fi
 \donoderef %
 \global\let\section = \numberedsec
 \global\let\subsection = \numberedsubsec
@@ -2973,7 +2997,7 @@ width0pt\relax} \fi
 \edef\temp{{\realbackslash chapentry{\the\toks0}%
   {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp  %
+\iflinks \write\contentsfile\temp \fi
 \appendixnoderef %
 \global\let\section = \appendixsec
 \global\let\subsection = \appendixsubsec
@@ -3008,7 +3032,7 @@ width0pt\relax} \fi
 \toks0 = {#1}%
 \edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp  %
+\iflinks \write\contentsfile\temp \fi
 \unnumbnoderef %
 \global\let\section = \unnumberedsec
 \global\let\subsection = \unnumberedsubsec
@@ -3025,7 +3049,7 @@ width0pt\relax} \fi
 \edef\temp{{\realbackslash secentry %
 {\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \donoderef %
 \penalty 10000 %
 }}
@@ -3041,7 +3065,7 @@ width0pt\relax} \fi
 \edef\temp{{\realbackslash secentry %
 {\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \appendixnoderef %
 \penalty 10000 %
 }}
@@ -3054,7 +3078,7 @@ width0pt\relax} \fi
 \toks0 = {#1}%
 \edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \unnumbnoderef %
 \penalty 10000 %
 }}
@@ -3069,7 +3093,7 @@ width0pt\relax} \fi
 \edef\temp{{\realbackslash subsecentry %
 {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \donoderef %
 \penalty 10000 %
 }}
@@ -3084,7 +3108,7 @@ width0pt\relax} \fi
 \edef\temp{{\realbackslash subsecentry %
 {\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \appendixnoderef %
 \penalty 10000 %
 }}
@@ -3097,7 +3121,7 @@ width0pt\relax} \fi
 \toks0 = {#1}%
 \edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \unnumbnoderef %
 \penalty 10000 %
 }}
@@ -3114,7 +3138,7 @@ width0pt\relax} \fi
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
   {\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \donoderef %
 \penalty 10000 %
 }}
@@ -3131,7 +3155,7 @@ width0pt\relax} \fi
   {\appendixletter}
   {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \appendixnoderef %
 \penalty 10000 %
 }}
@@ -3144,7 +3168,7 @@ width0pt\relax} \fi
 \toks0 = {#1}%
 \edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
-\write \contentsfile \temp %
+\iflinks \write\contentsfile\temp \fi
 \unnumbnoderef %
 \penalty 10000 %
 }}
@@ -3944,13 +3968,18 @@ width0pt\relax} \fi
 \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
 
 % @deftypemethod has an extra argument that nothing else does.  Sigh.
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence for consecutive fns (which we define).
+% #3 is the control sequence to call to resume processing.
+% #4, delimited by the space, is the class name.
+% #5 is the method's return type.
 % 
 \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV %
 \medbreak %
 % Define the end token that this defining construct specifies
 % so that it will exit this group.
 \def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
+\def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
 \parindent=0in
 \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
 \exdentamount=\defbodyindent
@@ -4173,7 +4202,7 @@ width0pt\relax} \fi
 \def\defspecx #1 {\errmessage{@defspecx in invalid context}}
 \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
 \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
+\def\deftypefunx #1 {\errmessage{@deftypeunx in invalid context}}
 
 % @defmethod, and so on
 
@@ -4329,7 +4358,220 @@ width0pt\relax} \fi
 \def\deftpx #1 {\errmessage{@deftpx in invalid context}}
 
 
-\message{cross reference,}
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens, 
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+%   \toks0={#1}%
+   \immediate\openout\macscribble=\jobname.tmp
+   \immediate\write\macscribble{#1}%\the\toks0}%
+   \immediate\closeout\macscribble
+   \input \jobname.tmp
+}
+\fi
+
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+
+% Utility: does \let #1 = #2, except with \csnames.
+\def\cslet#1#2{%
+\expandafter\expandafter
+\expandafter\let
+\expandafter\expandafter
+\csname#1\endcsname
+\csname#2\endcsname}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+\def\macrobodyctxt{%
+  \catcode`\~=12
+  \catcode`\^=12
+  \catcode`\_=12
+  \catcode`\|=12
+  \catcode`\<=12
+  \catcode`\>=12
+  \catcode`\+=12
+  \catcode`\{=12
+  \catcode`\}=12
+  \catcode`\@=12
+  \catcode`\^^M=10
+  \usembodybackslash}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N 
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 \catcode`\\=\active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+% The catcode games are necessary because @macro may or may not
+% have a brace-surrounded list of arguments, and we need to do
+% different stuff in each case.  Making {, } \other is the only 
+% way to prevent their being deleted by the tokenizer.
+\def\macro{\recursivefalse
+  \bgroup\catcode`\{=\other\catcode`\}=\other\parsearg\macroxxx}
+\def\rmacro{\recursivetrue
+  \bgroup\catcode`\{=\other\catcode`\}=\other\parsearg\macroxxx}
+
+\def\macroxxx#1{\egroup   % started in \macro
+  \getargs{#1}%           now \macname is the macname and \toks0 the arglist
+  \edef\temp{\the\toks0}%
+  \ifx\temp\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \the\toks0;% 
+  \fi
+  \expandafter\ifx \csname macsave.\the\macname\endcsname \relax
+     \cslet{macsave.\the\macname}{\the\macname}%
+  \else
+     \message{Warning: redefining \the\macname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody 
+  \fi}
+
+\def\unmacro{\parsearg\unmacroxxx}
+\def\unmacroxxx#1{
+  \expandafter\ifx \csname macsave.\the\macname\endcsname \relax
+    \errmessage{Macro \the\macname\ not defined.}%
+  \else
+    \cslet{#1}{macsave.#1}%
+    \expandafter\let \csname macsave.\the\macname\endcsname \undefined
+  \fi
+}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% This code has to take great care with `macro parameter char #'.  The
+% eight hashes in a row on the macarg.#1 line collapse to four in the
+% definition of \macarg.blah, to two when \parsemacbody expands the
+% macro replacement text, and to one when \defmacro writes the macro
+% definiton.  The games with \twohash are to postpone expansion till
+% the very end, when \parsemargdefyyy crunches \paramlist into
+% something that can be splatted into a \expandafter\def\blah line (in
+% \defmacro).
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \let\twohash\relax
+  \if#1;\let\next=\parsemargdefyyy
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.#1\endcsname{########\the\paramno}%
+    \edef\paramlist{\paramlist\twohash\twohash\the\paramno,}%
+  \fi\next}
+\def\parsemargdefyyy{\let\twohash##\relax \edef\paramlist{\paramlist}}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{#1} \endgroup\defmacro}%
+\long\def\parsermacbody#1@end macro%
+{\xdef\temp{#1} \endgroup\defmacro}%
+
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+\def\defmacro{%
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\edef\csname\the\macname\endcsname{%
+        \noexpand\scantokens{\temp}}%
+    \or % 1
+      \expandafter\edef\csname\the\macname\endcsname{%
+         \noexpand\braceorline\csname\the\macname xxx\endcsname}%
+      \expandafter\edef\csname\the\macname xxx\endcsname##1{%
+         \noexpand\scantokens{\temp}}%
+    \else % many
+      \expandafter\edef\csname\the\macname\endcsname##1{%
+          \csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\edef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname 
+          \paramlist{\noexpand\scantokens{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\edef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scantokens{\temp}\egroup}%
+    \or % 1
+      \expandafter\edef\csname\the\macname\endcsname{%
+         \noexpand\braceorline\csname\the\macname xxx\endcsname}%
+      \expandafter\edef\csname\the\macname xxx\endcsname##1{%
+        \noexpand\norecurse{\the\macname}
+        \noexpand\scantokens{\temp}\egroup}%
+    \else % many
+      \expandafter\edef\csname\the\macname\endcsname##1{%
+          \csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\edef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \noexpand\norecurse{\the\macname}
+          \noexpand\scantokens{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg 
+  \fi \next}
+
+% We need {} to be \other inside these commands. [] are temporary
+% grouping symbols.
+\begingroup
+\catcode`\{=\other \catcode`\}=\other
+\catcode`\[=1  \catcode`\]=2
+
+% @macro can be called with or without a brace-surrounded macro
+% argument list.  These three sequences extract the macro name and arg
+% list in hopefully all cases.  Note that anything on the line after the
+% first pair of braces will be thrown out (Makeinfo puts it into the
+% macro body).
+\gdef\getargs#1[\getargsxxx|#1 {}|]
+\gdef\getargsxxx|#1 {#2}#3|[%
+  \toks0=[#2]%
+  \edef\tmp[\the\toks0]%
+  \ifx\tmp\empty
+     \getargsnospaces|#1{}|%
+  \else
+     \macname=[#1]%
+  \fi]
+\gdef\getargsnospaces|#1{#2}#3|[\macname=[#1]\toks0=[#2]]
+
+\endgroup
+
+
+\message{cross references,}
 \newwrite\auxfile
 
 \newif\ifhavexrefs    % True if xref values are known.
@@ -4422,7 +4664,9 @@ width0pt\relax} \fi
   {\let\folio=0
    \normalturnoffactive
    \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-   \next
+   \iflinks
+     \next
+   \fi
   }%
 }
 
@@ -4476,12 +4720,14 @@ width0pt\relax} \fi
   \expandafter\ifx\csname X#1\endcsname\relax
     % If not defined, say something at least.
     \angleleft un\-de\-fined\angleright
-    \ifhavexrefs
-      \message{\linenumber Undefined cross reference `#1'.}%
-    \else
-      \ifwarnedxrefs\else
-        \global\warnedxrefstrue
-        \message{Cross reference values unknown; you must run TeX again.}%
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
       \fi
     \fi
   \else
@@ -4724,7 +4970,9 @@ width0pt\relax} \fi
 \openin 1 = epsf.tex
 \ifeof 1 \else
   \closein 1
-  \def\epsfannounce{\toks0 = }% do not bother showing banner
+  % Do not bother showing banner with post-v2.7 epsf.tex (available in
+  % doc/epsf.tex until it shows up on ctan).
+  \def\epsfannounce{\toks0 = }%
   \input epsf.tex
 \fi
 %
@@ -4754,39 +5002,26 @@ width0pt\relax} \fi
   % \epsfbox itself resets \epsf?size at each figure.
   \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
   \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-  \epsfbox{#1.eps}%
+  % If the image is by itself, center it.
+  \ifvmode
+    \centerline{\epsfbox{#1.eps}}%
+  \else
+    \epsfbox{#1.eps}%
+  \fi
 }
 
-% End of control word definitions.
-
-
-\message{and turning on texinfo input format.}
-
-\def\openindices{%
-   \newindex{cp}%
-   \newcodeindex{fn}%
-   \newcodeindex{vr}%
-   \newcodeindex{tp}%
-   \newcodeindex{ky}%
-   \newcodeindex{pg}%
-}
 
-% Set some numeric style parameters, for 8.5 x 11 format.
+\message{paper sizes,}
+% And other related parameters.
 
-\hsize = 6in
-\hoffset = .25in
 \newdimen\defaultparindent \defaultparindent = 15pt
-\parindent = \defaultparindent
-\parskip 3pt plus 2pt minus 1pt
-\setleading{13.2pt}
-\advance\topskip by 1.2cm
 
 \chapheadingskip = 15pt plus 4pt minus 2pt
 \secheadingskip = 12pt plus 3pt minus 2pt
 \subsecheadingskip = 9pt plus 2pt minus 2pt
 
 % Prevent underfull vbox error messages.
-\vbadness=10000
+\vbadness = 10000
 
 % Following George Bush, just get rid of widows and orphans.
 \widowpenalty=10000
@@ -4795,101 +5030,125 @@ width0pt\relax} \fi
 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
 % using an old version of TeX, don't do anything.  We want the amount of
 % stretch added to depend on the line length, hence the dependence on
-% \hsize.  This makes it come to about 9pt for the 8.5x11 format.
+% \hsize.  This makes it come to about 9pt for the 8.5x11 format.  We
+% call this whenever the paper size is set.
 %
-\ifx\emergencystretch\thisisundefined
-  % Allow us to assign to \emergencystretch anyway.
-  \def\emergencystretch{\dimen0}%
-\else
-  \emergencystretch = \hsize
-  \divide\emergencystretch by 45
-\fi
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = \hsize
+    \divide\emergencystretch by 45
+  \fi
+}
 
-% Use @smallbook to reset parameters for 7x9.5 format  (or else 7x9.25)
-\def\smallbook{
-  \global\chapheadingskip = 15pt plus 4pt minus 2pt
-  \global\secheadingskip = 12pt plus 3pt minus 2pt
-  \global\subsecheadingskip = 9pt plus 2pt minus 2pt
+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+% 4) hoffset; 5) binding offset; 6) topskip.  Then whoever calls us can
+% set \parskip and call \setleading for \baselineskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
   %
-  \global\lispnarrowing = 0.3in
-  \setleading{12pt}
-  \advance\topskip by -1cm
-  \global\parskip 2pt plus 1pt
-  \global\hsize = 5in
-  \global\vsize=7.5in
-  \global\tolerance=700
-  \global\hfuzz=1pt
-  \global\contentsrightmargin=0pt
-  \global\deftypemargin=0pt
-  \global\defbodyindent=.5cm
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 0.6in
+  \pageheight = \vsize
   %
-  \global\pagewidth=\hsize
-  \global\pageheight=\vsize
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
   %
-  \global\let\smalllisp=\smalllispx
-  \global\let\smallexample=\smalllispx
-  \global\def\Esmallexample{\Esmalllisp}
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
 }
 
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{
-\global\tolerance=700
-\global\hfuzz=1pt
-\setleading{12pt}
-\global\parskip 15pt plus 1pt
-
-\global\vsize= 53\baselineskip
-\advance\vsize by \topskip
-%\global\hsize=   5.85in     % A4 wide 10pt
-\global\hsize=  6.5in
-\global\outerhsize=\hsize
-\global\advance\outerhsize by 0.5in
-\global\outervsize=\vsize
-\global\advance\outervsize by 0.6in
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-}
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{13.2pt}%
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \setleading{12pt}%
+  %
+  \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \deftypemargin = 0pt
+  \defbodyindent = .5cm
+  %
+  \let\smalllisp = \smalllispx
+  \let\smallexample = \smalllispx
+  \def\Esmallexample{\Esmalllisp}%
+}}
 
-\bindingoffset=0pt
-\normaloffset=\hoffset
-\pagewidth=\hsize
-\pageheight=\vsize
-
-% Allow control of the text dimensions.  Parameters in order: textheight;
-% textwidth; voffset; hoffset; binding offset; topskip.
-% All require a dimension;
-% header is additional; added length extends the bottom of the page.
-
-\def\changepagesizes#1#2#3#4#5#6{
- \global\vsize= #1
- \global\topskip= #6
- \advance\vsize by \topskip
- \global\voffset= #3
- \global\hsize= #2
- \global\outerhsize=\hsize
- \global\advance\outerhsize by 0.5in
- \global\outervsize=\vsize
- \global\advance\outervsize by 0.6in
- \global\pagewidth=\hsize
- \global\pageheight=\vsize
- \global\normaloffset= #4
- \global\bindingoffset= #5}
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+  \setleading{12pt}%
+  \parskip = 3pt plus 2pt minus 1pt
+  %
+  \internalpagesizes{53\baselineskip}{6.5in}{\voffset}{.25in}{\bindingoffset}{44pt}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+}}
 
 % A specific text layout, 24x15cm overall, intended for A4 paper.  Top margin
 % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
-\def\afourlatex
-        {\global\tolerance=700
-        \global\hfuzz=1pt
-        \setleading{12pt}
-        \global\parskip 15pt plus 1pt
-        \advance\baselineskip by 1.6pt
-        \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-        }
+\def\afourlatex{{\globaldefs = 1
+  \setleading{13.6pt}%
+  %
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+  %
+  \globaldefs = 0
+}}
 
 % Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{\afourpaper
-\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
+\def\afourwide{%
+  \afourpaper
+  \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
+  %
+  \globaldefs = 0
+}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+% 
+\def\pagesizes{\parsearg\pagesizesxxx}
+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{13.2pt}%
+  %
+  \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+}}
+
+% Set default to letter.
+% 
+\letterpaper
+
+\message{and turning on texinfo input format.}
 
 % Define macros to output various characters with catcode for normal text.
 \catcode`\"=\other
index 81a9a730ae5f227c613c4226dc505e8d7100fdc9..0637a1adf8093c50ac89fc588bc49bcc473bc90b 100644 (file)
@@ -283,6 +283,15 @@ the argument @samp{-lgcc} to tell the linker to do the search.
 This macro is similar to @code{LINK_LIBGCC_SPECIAL}, except that it does
 not affect @samp{-L} options.
 
+@findex LINK_COMMAND_SPEC
+@item LINK_COMMAND_SPEC
+A C string constant giving the complete command line need to execute the
+linker.  When you do this, you will need to update your port each time a
+change is made to the link command line within @file{gcc.c}.  Therefore,
+define this macro only if you need to completely redefine the command
+line for invoking the linker and there is no other way to accomplish
+the effect you need.
+
 @findex MULTILIB_DEFAULTS
 @item MULTILIB_DEFAULTS
 Define this macro as a C expression for the initializer of an array of
@@ -6723,6 +6732,13 @@ define @code{INCOMING_RETURN_ADDR_RTX} and either set
 prologue, or call @code{dwarf2out_def_cfa} and @code{dwarf2out_reg_save}
 as appropriate from @code{FUNCTION_PROLOGUE} if you don't.
 
+@findex DWARF2_FRAME_INFO
+@item DWARF2_FRAME_INFO
+Define this macro to a nonzero value if GNU CC should always output
+Dwarf 2 frame information.  If @code{DWARF2_UNWIND_INFO}
+(@pxref{Exception Region Output} is nonzero, GNU CC will output this
+information not matter how you define @code{DWARF2_FRAME_INFO}.
+
 @findex LINKER_DOES_NOT_WORK_WITH_DWARF2
 @item LINKER_DOES_NOT_WORK_WITH_DWARF2
 Define this macro if the linker does not work with Dwarf version 2.
@@ -7316,6 +7332,11 @@ of @var{olddecl}.  Examples of when this is needed are when one attribute
 overrides another, or when an attribute is nullified by a subsequent
 definition.
 
+@findex SET_DEFAULT_DECL_ATTRIBUTES
+@item SET_DEFAULT_DECL_ATTRIBUTES (@var{decl}, @var{attributes})
+If defined, a C statement that assigns default attributes to
+newly defined @var{decl}.
+
 @findex DOLLARS_IN_IDENTIFIERS
 @item DOLLARS_IN_IDENTIFIERS
 Define this macro to control use of the character @samp{$} in identifier
index 38bba1be03a5ddfa833bad124f63996b1ea02eb6..353d418c05567d7a01e5033486114f299e434f04 100644 (file)
@@ -495,6 +495,11 @@ int flag_move_all_movables = 0;
 
 int flag_reduce_all_givs = 0;
 
+/* Nonzero to perform full register move optimization passes.  This is the
+   default for -O2.  */
+
+int flag_regmove = 0;
+
 /* Nonzero for -fwritable-strings:
    store string constants in data segment and don't uniquize them.  */
 
@@ -701,8 +706,6 @@ int flag_check_memory_usage = 0;
    -fcheck-memory-usage.  */
 int flag_prefix_function_name = 0;
 
-int flag_regmove = 0;
-
 /* 0 if pointer arguments may alias each other.  True in C.
    1 if pointer arguments may not alias each other but may alias
    global variables.
@@ -717,6 +720,8 @@ int flag_argument_noalias = 0;
    if alias analysis (in general) is enabled.  */
 int flag_strict_aliasing = 0;
 
+extern int flag_dump_unnumbered;
+
 /* Table of language-independent -f options.
    STRING is the option name.  VARIABLE is the address of the variable.
    ON_VALUE is the value to store in VARIABLE
@@ -783,6 +788,7 @@ struct { char *string; int *variable; int on_value;} f_options[] =
   {"verbose-asm", &flag_verbose_asm, 1},
   {"gnu-linker", &flag_gnu_linker, 1},
   {"regmove", &flag_regmove, 1},
+  {"optimize-register-move", &flag_regmove, 1},
   {"pack-struct", &flag_pack_struct, 1},
   {"stack-check", &flag_stack_check, 1},
   {"argument-alias", &flag_argument_noalias, 0},
@@ -790,7 +796,8 @@ struct { char *string; int *variable; int on_value;} f_options[] =
   {"argument-noalias-global", &flag_argument_noalias, 2},
   {"strict-aliasing", &flag_strict_aliasing, 1},
   {"check-memory-usage", &flag_check_memory_usage, 1},
-  {"prefix-function-name", &flag_prefix_function_name, 1}
+  {"prefix-function-name", &flag_prefix_function_name, 1},
+  {"dump-unnumbered", &flag_dump_unnumbered, 1}
 };
 
 /* Table of language-specific options.  */
@@ -3517,11 +3524,6 @@ rest_of_compilation (decl)
               failure = reload (insns, 0, rtl_dump_file);
           });
 
-  if (global_reg_dump)
-    {
-      TIMEVAR (dump_time, dump_global_regs (rtl_dump_file));
-      close_dump_file (print_rtl_with_bb, insns);
-    }
 
   if (failure)
     goto exit_rest_of_compilation;
@@ -3539,6 +3541,11 @@ rest_of_compilation (decl)
 
   thread_prologue_and_epilogue_insns (insns);
 
+  if (global_reg_dump)
+    {
+      TIMEVAR (dump_time, dump_global_regs (rtl_dump_file));
+      close_dump_file (print_rtl_with_bb, insns);
+    }
   if (optimize > 0 && flag_schedule_insns_after_reload)
     {
       if (sched2_dump)
index de5a1791af1e7d16ff515a63c12d8b4611032941..6fcae3f94b6eeda32bf70bea8521fde4b6752bd6 100644 (file)
@@ -4950,9 +4950,15 @@ get_set_constructor_bytes (init, buffer, wd_size)
     }
   return non_const_bits;
 }
-
+\f
 #ifdef ENABLE_CHECKING
-/* Complain if the tree code does not match the expected one.  */
+
+/* Complain if the tree code does not match the expected one.
+   NODE is the tree node in question, CODE is the expected tree code,
+   and FILE and LINE are the filename and line number, respectively,
+   of the line on which the check was done.  If NONFATAL is nonzero,
+   don't abort if the reference is invalid; instead, return 0.
+   If the reference is valid, return NODE.  */
 
 tree
 tree_check (node, code, file, line, nofatal)
@@ -4962,19 +4968,17 @@ tree_check (node, code, file, line, nofatal)
      int line;
      int nofatal;
 {
-  if (TREE_CODE (node) != code)
-    {
-      if (nofatal)
-       return 0;
-      else
-       fatal ("%s:%d: Expect %s, have %s\n", file, line,
-              tree_code_name[code], tree_code_name[TREE_CODE (node)]);
-    }
-
-  return node;
+  if (TREE_CODE (node) == code)
+    return node;
+  else if (nofatal)
+    return 0;
+  else
+    fatal ("%s:%d: Expect %s, have %s\n", file, line,
+          tree_code_name[code], tree_code_name[TREE_CODE (node)]);
 }
 
-/* Complain if the class of the tree node does not match.  */
+/* Similar to above, except that we check for a class of tree
+   code, given in CL.  */
 
 tree
 tree_class_check (node, cl, file, line, nofatal)
@@ -4984,18 +4988,16 @@ tree_class_check (node, cl, file, line, nofatal)
      int line;
      int nofatal;
 {
-  if (TREE_CODE_CLASS (TREE_CODE (node)) != cl)
-    {
-      if (nofatal)
-       return 0;
-      else
-       fatal ("%s:%d: Expect '%c', have '%s'\n", file, line,
-              cl, tree_code_name[TREE_CODE (node)]);
-    }
-
-  return node;
+  if (TREE_CODE_CLASS (TREE_CODE (node)) == cl)
+    return node;
+  else if (nofatal)
+    return 0;
+  else
+    fatal ("%s:%d: Expect '%c', have '%s'\n", file, line,
+          cl, tree_code_name[TREE_CODE (node)]);
 }
-/* Complain if the node is not an expression. */
+
+/* Likewise, but complain if the tree node is not an expression.  */
 
 tree
 expr_check (node, ignored, file, line, nofatal)
index be62730706b05db3b954b4363cf547a1a4ffa617..6a88bee3ede8b168c0cc23a4dc239d2775ac88ef 100644 (file)
@@ -1610,7 +1610,7 @@ extern tree save_expr                     PROTO((tree));
 extern int first_rtl_op                        PROTO((enum tree_code));
 
 /* unsave_expr (EXP) returns an expression equivalent to EXP but it
-   can be used multiple times and will evaluate EXP, in it's entirety
+   can be used multiple times and will evaluate EXP, in its entirety
    each time.  */
 
 extern tree unsave_expr                        PROTO((tree));
index ee8b352d09405a1303d2193605f571241fd656d1..1b4f8606d51cf0a342a11ad2c133b5ceb89ac544 100644 (file)
@@ -1 +1 @@
-char *version_string = "egcs-2.91.43 19980629 (gcc2 ss-980502 experimental)";
+char *version_string = "egcs-2.91.45 19980628 (gcc2 ss-980609 experimental)";