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