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.

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:
