Tue Jul 14 02:20:38 1998  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump to avoid problems with old spec files during
	bootstrap.

Mon Jul 13 23:11:44 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.c (output_scc_insn): Enclose || conditions in
	parens while walking over notes.
	* config/sparc/sparc.md (reg movdi split): Clean up matching
	conditions.
	(all DI arithop splits on 32-bit): Handle immediate arguments
	correctly when they are CONST_INTs.

Mon Jul 13 23:57:21 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* m68k/m68k.h (TARGET_SWITCHES): Clear MASK_68040_ONLY for
	-m68020-40, -m68020-60 and -m5200.

Mon Jul 13 23:52:05 1998  Weiwen Liu  <weiwen.liu@yale.edu>

	* gcc.c (do_spec_1): Fix %O handling for secure temporary file
	creation.

Mon Jul 13 23:42:36 1998  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>

	* sh/elf.h (MAX_OFILE_ALIGNMENT): Undefine before including svr4.h.

Mon Jul 13 23:36:08 1998  Jim Wilson  <wilson@cygnus.com>

	* i386/i386.h (CPP_486_SPEC, CPP_586_SPEC, CPP_686_SPEC): New specs.
	(CPP_CPU_DEFAULT_SPEC, CPP_CPU_SPEC): Use them.
	(EXTRA_SPECS): Support them.
	* gcc.c: Delete %[spec] support.
	(do_spec_1, case '('): Likewise.
	(do_spec_1, case '['): Call error.
	* i386/aix386ng.h, cygwin32.h, freebsd-elf.h, gas.h, isc.h,
	linux-aout.h, linux-oldld.h, linux.h, osfelf.h, osfrose.h, sco.h,
	sco4.h, sco4dbx.h, sco5.h, sol2.h, sysv3.h (CPP_SPEC): Delete
	%[cpp_cpu].

Mon Jul 13 23:31:04 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (output_scc_di): Use cmpw #0 only for address registers.

Mon Jul 13 23:26:43 1998  Jeffrey A Law  (law@cygnus.com)

	* tree.h (tree_common): Note front-end dependencies on layout of
	this structure.

Mon Jul 13 23:18:39 1998  Craig Burley  <burley@gnu.org>

	* stmt.c (expand_expr_stmt): If not assigning fresh
	value to last_expr_value, zero it, so old garbage
	doesn't get dereferenced.

Mon Jul 13 23:06:55 1998  Henning.Petersen@t-online.de  (Henning Petersen)

	* gcse.c (hash_scan_insn): Add missing argument declaration.

Mon Jul 13 18:59:13 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (mips-sgi-irix5cross64, mips-sgi-irix5*): Remove
	HAVE_INTTYPES_H from xm_defines.  Define xm_file to mips/xm-iris5.h.
	* mips/xm-iris5.h (USG): Delete.

Mon Jul 13 17:18:47 1998  Nick Clifton  <nickc@cygnus.com>

	* cccp.c (main): Add support for parsing --help.
	(display_help): New function: display command line switches.

	* cpplib.c (cpp_handle_option): Add support for parsing --help.
	(display_help): New function: display command line switches.

	* gcc.c (main): Add support for parsing --help, and passing it on
	to the sub-processes invoked by gcc.
	(display_help): New function: display command line switches.	

	* tm.texi (TARGET_SWITCHES and TARGET_OPTIONS): Document
	'description' field added to structure.

	* toplev.c: Add support for parsing --help.
	Add documentation strings to command line option tables.
	(display_help): New function: display comman line switches.

Mon Jul 13 16:15:10 1998  John Carr  <jfc@mit.edu>

	* sparc.c, sparc.h, sparc.md: New trampoline code.
	Allow integer operand 1 to V8+ DImode shift instructions.
	Fix bugs in V8+ wide multiply patterns.
	In 32 bit mode, split DImode register moves and logical instructions.
	Write V9 branch prediction flag.
	Use V9 conditional move more often for scc.

Mon Jul 13 15:10:09 1998  Philippe De Muyter  <phdm@macqel.be>

	* invoke.texi(-fno-builtin): Explain that the names of built-in
	functions begin with `__builtin_', not `__'.

Mon Jul 13 19:01:52 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): Abort for RELOAD_FOR_OUTPUT.

Mon Jul 13 10:50:17 1998  Mark Mitchell  <mark@markmitchell.com>

	* cplus-dem.c (SCOPE_STRING): Remove DMGL_JAVA stuff.
	(cplus_demangle_opname): Initialize work.
	(demangle_template): Remove is_java_array.
	(do_type): Remove DMGL_JAVA stuff.
	(long_options): Remove "java".
	(main): Remove 'j' option.

Mon Jul 13 10:19:00 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (REG_CLASS_FROM_LETTER): Map 'y' to SP_REGS.
	Handle 'x' as NO_REGS for this cpu.
	(REGNO_OK_FOR_BIT_BASE_P): Define.
	(REG_OK_FOR_BIT_BASE_P): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Use them.
	(REG_OK_FOR_INDEX_P): Tweak.
	* mn13000.c (REG_SAVE_BYTES): Define.
	(expand_epilogue, initial_offset): Use it.
	(secondary_reload_class): Slightly reformat.
	(output_tst): Tweak comments.
	* mn10300.md: Change 'x' to 'y' for SP_REGS.  Then add 'x' to many
	patterns.
	(addsi3): Turn into a define_expand/define_insn pair.  Rework code for
	three operand addition case to be more efficient.
	(subsi3): Turn into a define_expand/define_insn pair.

	* expr.c (expand_expr): Only set MEM_IN_STRUCT_P if the memory address
	is not varying for REFERENCE_TYPE or when we think we might have found
	an optimized access to the first element in an array.

Mon Jul 13 02:24:08 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* regclass.c (reg_scan_mark_refs): New arg min_regno.  Only update
	regscan information for REGs with numbers greater than or equal to
	this.  All callers changed.
	(reg_scan_update): New function to efficiently update regscan
	information on the fly.
	* rtl.h: Add prototype.
	* jump.c (jump_optimize): Call it when we make a transformation
	which generates new pseudo-REGs.

Sun Jul 12 13:08:14 1998  Jeffrey A Law  (law@cygnus.com)

	* collect2.c (main): Use "-x c" instead of "-lang-c" for force the
	compiler into C mode.

Sun Jul 12 01:27:05 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c (demangle_nested_args): Return a value.

	* tree.h (TYPE_P): New macro.

Sat Jul 11 16:19:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* cplus-dem.c (string): Move definition before work_stuff.
	(work_stuff): Add volatile_type, forgetting_types,
	previous_argument, and nrepeats fields.
	(SCOPE_STRING): New macro.
	(demangle_template): Add `remember' parameter.  Add comment.
	Register the `B' code type here, if remembering.  Tidy.  Fix crash
	on NULL tmpl_argvec.  Be consistent with use of tname/trawname.
	(demangle_nested_args): New function.
	(internal_cplus_demangle): Handle volatile-qualified member
	functions.
	(mop_up): Delete the previous_argument string if present.
	(demangle_signature): Tidy.  Handle volatile-qualified member
	functions.  Handle back-references using the `B' code.  Use extra
	parameter to demangle_template and SCOPE_STRING where appropriate.
	(demangle_template_value_parm): Fix thinko; 'B' is not an integral
	code.
	(demangle_class): Use SCOPE_STRING.
	(gnu_special): Pass additional argument to demangle_template.
	Use SCOPE_STRING.
	(demangle_qualified): Save qualified types for later
	back-references.  Handle constructors and destructors for template
	types correctly.
	(do_type): Tidy.  Use SCOPE_STRING.  Pass extra argument to
	demangle_template.  Use demangled_nested_args.  Don't remember
	qualified types here; that's now done in demangle_qualified.
	Similarly for templates.
	(do_arg): Improve comment.  Handle 'n' repeat code.
	(remember_type): Check forgetting_types.
	(demangle_args): Deal with 'n' repeat codes.  Tidy.
	
Sat Jul 11 02:59:08 1998  Richard Earnshaw  <rearnsha@arm.com>

	* arm.md (extendhisi2_mem, movhi, movhi_bytes): Propagate the volatile
	and structure attribute flags to MEMs generated.
	(splits for sign-extended HI & QI mode from memory): Also propagate
	the volatile flag.

	* configure.in (thumb-*-coff*): Don't cause fixincludes to be run.

Fri Jul 10 19:06:59 1998  Michael Meissner  <meissner@cygnus.com>

	* varray.h: Include system.h if it hasn't already been included
	before to get size_t declared.

Fri Jul 10 12:53:58 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* jump.c (jump_optimize): If after_regscan and our transformations
	generate new REGs, rerun reg_scan.

Fri Jul 10 11:50:43 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* config/i960/i960.c (i960_address_cost): MEMA operands with
	positive offsets < 4096 are free.

Fri Jul 10 12:34:37 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c (const_uint32_operand): Recognize
	CONSTANT_P_RTX.
	(const_sint32_operand): Likewise.

Thu Jul  9 22:58:59 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (alias.o): Depend on $(EXPR_H).

Thu Jul  9 18:24:56 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): If using an equivalence from
	find_equiv_reg and reg_reloaded_valid is not set for this register,
	clear the associated spill_reg_store.

Thu Jul  9 18:12:49 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): If an output reload copies only
	to a secondary reload register, indicate that the secondary reload
	does the actual store.

Thu Jul  9 18:01:05 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_equiv_reg): If need_stable_sp is set,
	check if stack pointer is changed directly in a PARALLEL.

Thu Jul  9 10:38:14 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (duplicate_loop_exit_test): Fix thinko.

Thu Jul  9 01:30:37 1998  Joel Sherrill  <joel@OARcorp.com>
			  Ralf Corsepius  <corsepiu@faw.uni-ulm.de>

	* config/i386/rtemself.h: Updated to keep in sync with
	config/i386/linux.h.

	* configure.in: Added sh-rtemself.
	* configure: Rebuilt.
	* config/sh/rtems.h: Removed -D__ELF__ since it is now COFF.
	* config/sh/rtemself.h: New file.

	* config/rs6000/rtems.h: Defined STARTFILE_DEFAULT_SPEC.

Wed Jul  8 21:43:14 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check if the assembler supports ".balign" and
	".p2align" and define HAVE_GAS_BALIGN_AND_P2ALIGN appropriately.
	* acconfig.h (HAVE_GAS_BALIGN_AND_P2ALIGN): New tag.
	* i386/gas.h (ASM_OUTPUT_ALIGN): If the assembler has support for
	".balign" then use it.

	* print-rtl.c (print_rtx): Revert previous patch.

	* jump.c (duplicate_loop_exit_test): Do not duplicate the loop exit
	test if the exit code has an insn with ASM_OPERANDS.

	* i386/cygwin32.h (STDIO_PROTO): Fix typo.
	* m32r.h (STDIO_PROTO): Fix typo.

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Handle addresses created by
	LEGITIMIZE_RELOAD_ADDRESS.
	* tm.texi (LEGITIMIZE_RELOAD_ADDRESS): Note that this macro must be
	able to handle addresses created by previous invocations of the macro.

	* flow.c (find_auto_inc): Remove most recent change.  Real bug was
	elsewhere.

	* cse.c (count_reg_usage): Count registers used in addresses of
	CLOBBERs.

Wed Jul  8 15:08:29 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (STAGESTUFF): Readd line lost during June 9 FSF merge.

	* configure.in (mips64orion-*-rtems*): Use elf64.h not elfl64.h.

1998-07-08  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/fp-bit.c (__gexf2, __fixxfsi, __floatsixf): Add function
	stubs.

	* toplev.c (lang_options): Add -Wlong-long, -Wno-long-long
	options.
	* c-decl.c (warn_long_long): Define.
	(c_decode_option): Parse -Wlong-long, -Wno-long-long options.
	(grokdeclarator): Add flag `warn_long_long' as guard for
	warning "ANSI C does not support `long long'".
	* invoke.texi: Add description of options -Wlong-long,
	-Wno-long-long.
	* gcc.1: The same as above.
	
Wed Jul  8 02:43:34 1998  Jeffrey A Law  (law@cygnus.com)

	* rtlanal.c (reg_overlap_mentioned_p): Handle STRICT_LOW_PART.  If
	either argument is CONSTANT_P, then return zero.
	* reload.c (reg_overlap_mentioned_for_reload_p): Similarly.

	* configure.in: Also look at $srcdir/gas/configure to find a
	gas version #.

Wed Jul  8 00:28:22 1998  Carlo Wood  <carlo@runaway.xs4all.nl>

	* dsp16xx.h : Clean up of macro OPTIMIZATION_OPTIONS

Tue Jul  7 21:18:14 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (ASM_DECLARE_FUNCTION_NAME): Merge duplicate
	definitions from last two patches.

Tue Jul  7 23:03:34 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (choose_reload_regs): Don't set reload_override_in
	if EQUIV is clobbered in INSN and the reload is done after INSN.

Tue Jul  7 21:23:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN
	to the first insn of the sequence.

Tue Jul  7 21:05:25 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (cse_insn): Don't make change without validation.

Tue Jul  7 11:40:05 1998  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (various zero/sign extension patterns): Zero and sign
	extensions which use "sub" clobber cc0.

Tue Jul  7 09:12:08 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Jul  7 10:07:20 1998  Jeffrey A Law  (law@cygnus.com)

	* print-rtl.c (print_rtx): Use REAL_VALUE_TYPE instead of "double".

Tue Jul  7 08:41:27 1998  Richard Henderson  (rth@cygnus.com)

	* print-rtl.c (print_rtx): Only print fp values when REAL_VALUE_TYPE
	is a double.

Tue Jul  7 00:31:58 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Jul  7 01:03:03 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	Support for dllimport and dllexport attributes for i386-pe.

	* tree.h (DECL_NON_ADDR_CONST_P): New accessor macro.
	(struct tree_decl): Add non_addr_const_p field.
	* tree.c (staticp): Use.

	* i386/cygwin32.h (CPP_PREDEFINES): Map __declspec(x) to GCC
	attributes.
	(SUBTARGET_SWITCHES): Switches to turn on/off dllimport|export
	attributes. Also accept -mwindows option.
	(VALID_MACHINE_DECL_ATTRIBUTE): New macro.
	(MERGE_MACHINE_DECL_ATTRIBUTE): New macro.
	(REDO_SECTION_INFO_P): New macro.
	(DRECTVE_SECTION_FUNCTION): New macro.
	(drectve_section): Cover function to implement above.
	(SWITCH_TO_SECTION_FUNCTION): New macro.
	(switch_to_section): Covert function to implement above.
	(EXTRA_SECTIONS): Add in_drectve.
	(EXTRA_SECTION_FUNCTIONS): Add in_drectve and switch_to_section.
	(ENCODE_SECTION_INFO): Delete old macro and redefine as a function.
	(STRIP_NAME_ENCODING): Handle new attributes.
	(ASM_OUTPUT_LABELREF): New macro.
	(ASM_OUTPUT_FUNCTION_NAME): New macro.
	(ASM_OUTPUT_COMMON): New macro.
	(ASM_OUTPUT_DECLARE_OBJECT_NAME): New macro.

	* i386/mingw32.h (CPP_PREDEFINES): Map __declspec(x) to GCC
	attributes.

	* i386/winnt.c (i386_pe_valid_decl_attribute_p): New function.
	(i386_pe_merge_decl_attributes): New function.
	(i386_pe_check_vtable_importexport): New function.
	(i386_pe_dllexport_p): New function.
	(i386_pe_dllimport_p): New function.
	(i386_pe_dllexport_name_p): New function.
	(i386_pe_dllimport_name_p): New function.
	(i386_pe_mark_dllexport): New function.
	(i386_pe_mark_dllimport): New function.
	(i386_pe_encode_section_info): New function.
	(i386_pe_unique_section): Strip encoding from name first.

Tue Jul  7 00:50:17 1998  Manfred Hollstein  (manfred@s-direktnet.de)

	* libgcc2.c (L_exit): Provide a fake for atexit on systems which
	define ON_EXIT but not HAVE_ATEXIT.

Tue Jul  7 00:44:35 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* m68k.md (zero_extend QI to HI): Correctly handle TARGET_5200.

Tue Jul  7 00:36:41 1998  Ulrich Drepper  <drepper@cygnus.com>

	* i386.c: Remove random whitespace at end of lines.

	* i386.c (ix86_epilogue): For pentium processors, try to deallocate
	4 or 8 byte stacks with pop instructions instead of an add instruction.

Tue Jul  7 00:30:08 1998  Klaus Kaempf  <kkaempf@rmi.de>

	* alpha.c: Include tree.h before expr.h.

Mon Jul  6 22:50:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* c-parse.in (struct_head, union_head, enum_head): New nonterminals.
	(structsp): Use them.  Update files generated from c-parse.in.
	* extend.texi (Type Attributes): Document it.

	* c-decl.c: Add warn_multichar.
	(c_decode_option): Handle -Wno-multichar.
	* c-lex.c (yylex): Check it.
	* c-tree.h: Declare it.
	* toplev.c (lang_options): Add it.
	* invoke.texi: Document it.

Mon Jul  6 22:47:55 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_equiv_reg): When looking for stack pointer + const,
	make sure we don't use a stack adjust.

	* reload.c (find_equiv_reg): If need_stable_sp is set,
	check if stack pointer is changed directly.

	* reload1.c (delete_dead_insn): Don't delete feeding insn
	if that insn has side effects.

	* flow.c (find_auto_inc): Clear UNCHANGING bit of register that is
	changed.

	* reload1.c (reload_reg_free_before_p): RELOAD_FOR_OPADDR_ADDR
	precedes RELOAD_FOR_OUTADDR_ADDRESS.

	* gcse.c (hash_scan_insn): New argument IN_LIBCALL_BLOCK.  Changed
	caller.

Mon Jul  6 22:21:56 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* m68k.c (output_scc_di): Use cmpw #0 instead of tstl when
	testing address registers on the 68000.

Mon Jul  6 22:17:19 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* i386.c (is_fp_test): Fix thinko.

	* jump.c (jump_optimize): Check for CONST_INT before using INTVAL.

Mon Jul  6 22:14:31 1998  Richard Henderson  (rth@cygnus.com)

	* print-rtl.c (print_rtx): Display the real-value equivalent of
	a const_double when easy.

	* real.h (REAL_VALUE_TO_TARGET_SINGLE): Use a union to pun types.
	Zero memory first for predictability.
	(REAL_VALUE_TO_TARGET_DOUBLE): Likewise.
	* varasm.c (immed_real_const_1): Notice width of H_W_I == double.

	* regclass.c (allocate_reg_info): Initialize the entire reg_data
	virtual array.

Mon Jul  6 22:09:32 1998  Ian Lance Taylor  <ian@cygnus.com>
			  Jeff Law	    <law@cygnus.com>

	* i386/cygwin32.h: Add some declaration of external functions.
	(ASM_DECLARE_FUNCTION_NAME): Define.
	(ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
	(ASM_FILE_END): Define.
	* i386/winnt.c (i386_pe_declare_function_type): New function.
	(struct extern_list, extern_head): Define.
	(i386_pe_record_external_function): New function.
	(i386_pe_asm_file_end): New function.

	* cpplib.c (cpp_options_init): Initialize cplusplus_comments to 1,
	matching July 18, 1995 change to cccp.c.  If -traditional then
	disable cplusplus_comments.

Mon Jul  6 21:28:14 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c (expand_compound_operation): Fix thinko in code to optimize
	(zero_extend:DI (subreg:SI (foo:DI) 0)) to foo:DI.

	* Disable the following change from gcc2.  Not appropriate for egcs:

	Sun Jun  7 09:30:31 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
	* reload.c (find_reloads): Give preference to pseudo that was the
	reloaded output of previous insn.

Mon Jul  6 21:07:14 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_PRINTF_PTR): Don't define HOST_PTR_PRINTF.
	Instead, define a new macro HAVE_PRINTF_PTR which only signifies
	whether we have the %p format specifier or not.

	* acconfig.h: Delete stub for HOST_PTR_PRINTF, add HAVE_PRINTF_PTR.
	
	* machmode.h (HOST_PTR_PRINTF): When determining the definition,
	check HAVE_PRINTF_PTR to see whether "%p" is okay.

	* mips-tfile.c: Include machmode.h to get HOST_PTR_PRINTF.

	* Makefile.in (mips-tfile.o): Depend on machmode.h.

Mon Jul  6 10:42:05 1998  Mark Mitchell  <mark@markmitchell.com>

	* jump.c (duplicate_loop_exit_test): Don't refuse to copy a
	section of code just because it contains
	NOTE_INSN_BLOCK_{BEG,END}.
	* stmt.c (expand_end_loop): Likewise.  Also, don't refuse to
	move CALL_INSNs or CODE_LABELs.  When moving code, don't move
	NOTE_INSN_BLOCK_{BEG,END}.

Mon Jul  6 09:38:15 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (CSE_ADDRESS_COST): New macro, based on ADDRESS_COST, but
	dealing with ADDRESSOF.
	(find_best_addr): Use it.

Mon Jul  6 09:27:08 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/vms.h (TRAMPOLINE_TEMPLATE): Revert last change.

Mon Jul  6 09:25:06 1998  Dave Love  <d.love@dl.ac.uk>

	* libgcc2.c (__eprintf): Make args consistent with prototype in
	assert.h.

Mon Jul  6 00:28:43 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (cse_insn): When SETting (MEM (ADDRESSOF (X))) to Y,
	don't claim that the former is equivalent to the latter.

Sun Jul  5 23:58:19 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): Second arg is an RTX now.  Update all callers.
	(cse_basic_block): Keep track of the current RETVAL insn for a
	libcall instead of just noting that we're in a libcall.

	* combine.c (simplify_comparison): Do not commute a AND into
	a paradoxical SUBREG if not WORD_REGISTER_OPERATIONS.

	* i386/freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Protect with
	HAVE_GAS_MAX_SKIP_P2ALIGN.
	* i386/linux.h: Likewise.
	
Fri Jul  3 02:33:35 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* sparc.c (sparc_operand, move_operand,	arith_operand,
	arith11_operand, arith10_operand, arith_double_operand,
	arith11_double_operand, arith10_double_operand, small_int,
	uns_small_int): Recognize CONSTANT_P_RTX.
	(output_sized_memop, output_move_with_extension,
	output_load_address, output_size_for_block_move,
	output_block_move, delay_operand): Remove, has not been
	enabled or referenced for years.
	* sparc.md (movstrsi, block_move_insn): Likewise.
	* sparc.h (PREDICATE_CODES): Define.
	* linux-aout.h (MACHINE_STATE_{SAVE,RESTORE}): Override with
	version which uses getcc/setcc traps to save/restore condition
	codes.
	* linux64.h: Likewise.
	* sunos4.h: Likewise.
	* linux.h: Likewise.
	* sol2.h: Likewise.
	* sun4o3.h: Likewise.

Fri Jul  3 02:28:05 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_initialize_trampoline): Hack around Pmode/ptr_mode
	lossage on VMS.  Reported by kkaempf@rmi.de.
	* alpha/vms.h (TRAMPOLINE_TEMPLATE): Add missing 0.

Thu Jul  2 17:41:14 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.h (MUST_PASS_IN_STACK): Override default
	version.

Thu Jul  2 14:34:48 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* expr.h (STACK_SIZE_MODE): New macro.
	* explow.c (allocate_dynamic_stack_space): Use it for
	mode of allocate_stack pattern increment operand.
	* tm.texi (STACK_SAVEAREA_MODE, STACK_SIZE_MODE): Document.
	* md.texi (stack_save_block, ...): Reflect use of macro.

	* rs6000.h (PROMOTE_MODE): Always promote to word_mode.
	(PROMOTE_FUNCTION_ARGS): Define.
	(PROMOTE_FUNCTION_RETURN): Define.
	(FUNCTION_VALUE): Promote to word_mode if smaller.
	Convert to gen_rtx_FOO.
	* rs6000.md (call_indirect): Store doubleword in 64-bit mode.
	Convert to gen_rtx_FOO.
	* rs6000.c: Convert to gen_rtx_FOO.
	
Thu Jul  2 14:16:11 1998  Michael Meissner  <meissner@cygnus.com>

	* varray.{c,h}: New files to provide virtual array support.

	* Makefile.in (OBJS): Add varray.o.
	(varray.o): Add new file.
	(REGS_H): New variable for dependencies for files including
	regs.h.  Add varray.h and files it includes.  Change all regs.h
	dependencies to $(REGS_H).

	* toplev.c (x{m,re}alloc): If size is 0, allocate 1 byte.
	(xcalloc): Provide frontend for calloc.
	* {tree,rtl}.h (xcalloc): Add declaration.

	* basic-block.h (REG_BASIC_BLOCK): Convert reg_n_info to be a
	varray.

	* regs.h (toplevel): Include varray.h.
	(reg_n_info): Switch to use a varray.
	(REG_*): Likewise.
	(allocate_reg_info): Change num_regs argument to be size_t.

	* regclass.c (reg_info_data): New structure to remember groups of
	reg_info structures allocated that are to be zeroed.
	({pref,alt}class_buffer): New statics to hold buffers
	allocate_reg_info allocates for {pref,alt}class_buffer.
	(regclass): Use {pref,alt}class_buffer to initialize
	{pref,alt}class.
	(allocate_reg_info): Switch to make reg_n_info use varrays.
	Allocate buffers for the preferred and alter register class
	information.  Change num_regs argument to be size_t, not int.

	* flow.c (reg_n_info): Switch to use varrays.

Thu Jul  2 10:11:47 1998  Robert Lipe  <robertl@dgii.com>

	* install.texi (sco3.2v5): Document new --with-gnu-as flag.
	* config/i386/sco5.h (JUMP_TABLES_IN_TEXT_SECTION): Defined as
	in other targets.
	(USE_GAS): Conditionalize away native assembler usage.
	* config/i386/sco5gas.h: New file.
	* config/i386/t-sco5gas: New file.
	* configure.in (ix86-sco3.2v5*): Use new files if --with-gnu-as

Thu Jul  2 08:20:00 1998  Catherine Moore  <clm@cygnus.com>

	* haifa-sched.c (alloc_EXPR_LIST): Change to use
	unused_expr_list.

Thu Jul  2 14:13:28 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Don't use $realfile.  Ignore
	possible errors from the install-info program.

Thu Jul  2 01:53:32 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* combine.c (simplify_comparison): Apply SUBREG_REG to SUBREGs.

Wed Jul  1 23:06:03 1998  Richard Henderson  <rth@cygnus.com>

	* i386.h (HARD_REGNO_MODE_OK): Kill spurious test.
	(MODES_TIEABLE_P): Tie SImode and HImode.

1998-07-01  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* invoke.texi (Optimize Options): Fix typo.

Wed Jul  1 22:25:43 1998  Jim Wilson  <wilson@cygnus.com>

	* xcoffout.c (xcoffout_begin_function): Call xcoffout_block for
	the zero'th block.

Wed Jul  1 23:12:58 1998  Ken Raeburn  <raeburn@cygnus.com>

	* h8300.c (print_operand): Delete %L support.
	* h8300.md (branch_true, branch_false): Use %= with a prefix
	instead of %L for local branch labels.

Wed Jul  1 21:27:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (emit_reload_insns): Use proper register classes for
	SECONDARY_INPUT_RELOAD_CLASS / SECONDARY_MEMORY_NEEDED code.

Wed Jul  1 21:17:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): If there are multiple
	RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_OUTPUT_ADDRESS reloads for
	one operand, change RELOAD_FOR_INPADDR_ADDRESS /
	RELOAD_FOR_OUTADDR_ADDRESS for all but the first
	RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_OUTPUT_ADDRESS reloads.

Wed Jul  1 17:23:23 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (fixup_match_2): Check that P has RTX_CLASS 'i' before
	using its PATTERN.

Wed Jul  1 05:04:41 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (emit_group_load, emit_group_store): Rewrite considering
	the size and alignment of the structure being manipulated.
	* expr.c, calls.c, function.c: Update all callers.
	* expr.h: Update prototypes.
	* cse.c (invalidate): Cope with parallels.

Wed Jul  1 04:22:23 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.c (function_arg_record_value): Take a MODE arg with which to
	create the PARALLEL.  Update all callers.

Wed Jul  1 04:10:35 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_assignment, store_constructor, expand_expr): Use
	convert_memory_address instead of convert_to_mode when possible.

Wed Jul  1 03:48:00 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_initialize_trampoline): Take arguments describing
	the layout.  Use ptr_mode.  Disable hint generation.  Use gen_imb.
	* alpha.h (INITIALIZE_TRAMPOLINE): Pass extra args to the init func.
	(TRANSFER_FROM_TRAMPOLINE): Move ...
	* alpha/osf.h: ... here.
	* alpha/vms.h (INITIALIZE_TRAMPOLINE): Use alpha_initialize_trampoline.
	(TRANSFER_FROM_TRAMPOLINE): Remove undef.
	* alpha/win-nt.h: Likewise.
	* alpha/vxworks.h: Likewise.

	* alpha/linux.h: Revert gcc2 merge lossage.

Wed Jul  1 10:56:55 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-decl.c (grokdeclarator): Don't warn about implicit int in
	`typedef foo = bar'.

Wed Jul  1 02:12:33 1998  Robert Lipe  <robertl@dgii.com>

	* i386.c (asm_output_function_prefix): Make 686 function
	prologues not issue .types for non-global labels.

Tue Jun 30 23:46:53 1998  Dmitrij Tejblum  <tejblum@arc.hq.cti.ru>

	* i386/freebsd.h (WCHAR_TYPE): Chagne to an "int".
	(WCHAR_TYPE_SIZE): Update appropriately.

Tue Jun 30 23:16:39 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (recompute_reg_usage): Does not return a value.
	* rtl.h (recompute_reg_usage): Update prototype.

	* jump.c (jump_optimize): Show that the jump chain is not
	valid when not optimizing.

Tue Jun 30 16:01:01 1998  Richard Henderson  <rth@cygnus.com>

	* rtl.def (CONSTANT_P_RTX): New.
	* rtl.h (CONSTANT_P): Recognize it.
	* cse.c (fold_rtx): Eliminate it.
	* expr.c (can_handle_constant_p): New variable.
	(init_expr_once): Initialize it.
	(expand_builtin): Generate CONSTANT_P_RTX if the expression is not
	immediately recognizable as a constant.

	* alpha.c (reg_or_6bit_operand): Recognize CONSTANT_P_RTX.
	(reg_or_8bit_operand, cint8_operand, add_operand): Likewise.
	(sext_add_operand, and_operand, or_operand): Likewise.
	(reg_or_cint_operand, some_operand, input_operand): Likewise.
	* alpha.h (PREDICATE_CODES): Add CONSTANT_P_RTX where needed.

1998-06-30  Benjamin Kosnik  <bkoz@bliss.nabi.net>

	* dbxout.c (dbxout_type_methods): Remove warn_template_debugging.

Tue Jun 30 14:03:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_NEED_DECLARATION): Accept an optional second
	argument, which is typically preprocessor code used to draw in
	additional header files when looking for a function declaration.
	(GCC_NEED_DECLARATIONS): Likewise.

	* configure.in (GCC_NEED_DECLARATIONS): Add checks for getrlimit
	and setrlimit, search for them in sys/resource.h.

	* acconfig.h: Add stubs for NEED_DECLARATION_GETRLIMIT and
	NEED_DECLARATION_SETRLIMIT.

	* system.h: Prototype getrlimit/setrlimit if necessary.

Tue Jun 30 10:54:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.texi: Don't say that RTX_INTEGRATED_P is not depended
	upon.

Tue Jun 30 13:11:42 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/sysv4.h (asm output): Add tabs for asm directives.

Tue Jun 30 13:11:42 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* Makefile.in (FLAGS_TO_PASS): Set AR_FLAGS to AR_FOR_TARGET_FLAGS.

Tue Jun 30 08:59:15 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h (ATTRIBUTE_UNUSED): Use __unused__ not `unused'.
	Don't define NULL here.  Also, remove all vestiges of autoconf
	based checks for bcmp/bcopy/bzero/index/rindex.

	* system.h: Immediately after including stdio.h, check for and if
	necessary provide a default definition of NULL.

Tue Jun 30 08:22:05 1998  Michael Meissner  <meissner@cygnus.com>

	* reload1.c (reload_cse_simplify_operands): Call
	fatal_insn_not_found, not abort.

Tue Jun 30 02:34:02 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (make_temp_file): Accept new argument for the
	file suffix to use.  Allocate space for it and add it to the
	template.
	* mkstemp.c (mkstemps): Renamed from mkstemp.  Accept new argument
	for the length of the suffix.  Update template structure checks
	to handle optional suffix.
	* collect2.c (make_temp_file): Update prototype.
	(main): Put proper suffixes on temporary files.
	* gcc.c (make_temp_file): Update prototype.
	(do_spec_1): Put proper suffixes on temporary files.

Tue Jun 30 00:56:19 1998  Bruno Haible  <haible@ilog.fr>

	* invoke.texi: Document new implicit structure initialization
	warning.

Mon Jun 29 21:40:15 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* toplev.c (flag_dump_unnumbered): Declare.
	(f_options): Add dump-unnumbered.
	* print-rtl.c (flag_dump_unnumbered): Define.
	(print_rtx): Print only '#' for insn numbers if flag_dump_unnumbered
	is nonzero.
	(print_rtl): Don't output line number notes if flag_dump_unnumbered
	is nonzero.
	* flow.c (print_rtl_with_bb): Don't output newline after line
	numbers note if flag_dump_unnumbered is nonzero.

Mon Jun 29 22:12:06 1998  Jeffrey A Law  (law@cygnus.com)

	* Merge from gcc2 June 9, 1998 snapshot.  See ChangeLog.13 for
	details.

	* pa.c, pa.h, pa.md: Convert to gen_rtx_FOO.

Mon Jun 29 20:12:41 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (fix-header): Don't needlessly depend on cpperror.o.

	* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): Cast expansion to
	void since it is evaluated in a comma list.

	* mips.h (ASM_GENERATE_INTERNAL_LABEL): Always sprintf `NUM'
	argument as a long and cast `NUM' to long to ensure it is of the
	proper width.  Wrap macro arguments in parens when they appear in
	the expansion.

	* sol2.h (ASM_GENERATE_INTERNAL_LABEL): Likewise.

	* sparc.h (ASM_GENERATE_INTERNAL_LABEL): Likewise.
	(ASM_DECLARE_RESULT): Fix fprintf format specifier to match
	function argument return type.
	(REGNO_OK_FOR_INDEX_P, REGNO_OK_FOR_BASE_P, REGNO_OK_FOR_FP_P,
	REGNO_OK_FOR_CCFP_P): Use `(unsigned)' not `U'.

	* cpplib.c (cpp_message_from_errno): Remove unneeded argument to
	cpp_message.

	* dbxout.c: Fix the comments after an #endif to reflect the actual
	condition tested in the preceding #if.

	* except.c (find_all_handler_type_matches): Switch to old-style
	function definition.

	* expr.c (expand_builtin): Remove unused variable `type' twice.

	* gbl-ctors.h (DO_GLOBAL_CTORS_BODY): Cast -1 before comparing it
	to an unsigned long.

	* haifa-sched.c (print_insn_chain): Remove unused function.

	* objc/objc-act.c (build_msg_pool_reference): Hide prototype and
	definition.

	* toplev.c: When testing whether to include dbxout.h, also include
	it when XCOFF_DEBUGGING_INFO is defined.

	* unroll.c (unroll_loop): Add parentheses around assignment used
	as truth value.

Mon Jun 29 12:18:00 1998  Catherine Moore  <clm@cygnus.com>

	* config/lb1spc.asm (.div, .udiv): Replace routines.

Mon Jun 29 09:44:24 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h: Update comment about special gen_rtx variants.
	* emit-rtl.c (gen_rtx): Handle MEMs using gen_rtx_MEM.

Sun Jun 28 20:58:51 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (choose_temp_base): Restore original variant of
	this function for compatibility.
	(make_temp_file): This is the new, preferred interface to create
	temporary files.
	* collect2.c (choose_temp_base): Delete declaration.
	(make_temp_file): Declare.
	(temp_filename_length, temp_filename): Delete.
	(main): Use make_temp_file to get temporary files.  Use --lang-c
	to force the resulting ctort/dtor file to be compiled with the C
	compiler.  Make sure to remove temporary files on all exit paths.
	* gcc.c (make_temp_file): Provide prototype if MKTEMP_EACH_FILE is
	defined.
	(choose_temp_base): Only provide prototype if MKTEMP_EACH_FILE is
	not defined.
	(do_spec): Use make_temp_file if MKTEMP_EACH_FILE is defined.

Sun Jun 28 08:57:09 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (GCC_NEED_DECLARATIONS): Add strerror, getcwd and
	getwd.

	* acconfig.m4: Add stubs for NEED_DECLARATION_STRERROR,
	NEED_DECLARATION_GETCWD and NEED_DECLARATION_GETWD.

	* cccp.c: Remove strerror()/sys_nerr/sys_errlist decls.
	(my_strerror): Add prototype and make it static.

	* collect2.c: Likewise.

	* cpplib.c: Likewise.

	* gcc.c: Likewise, but keep `my_strerror' extern.

	* protoize.c: Likewise.

	* pexecute.c (my_strerror): Add argument to prototype.

	* system.h: Add prototypes for getcwd, getwd and strerror.  Add
	extern decls for sys_nerr and sys_errlist.  Make abort decl
	explicitly extern.

	* getpwd.c: Remove decls for getwd and getcwd.

Sun Jun 28 02:11:16 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jun 27 23:32:25 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize): Use side_effects_p & may_trap_p instead
	of rtx_unsafe_p.  Use modified_between_p instead of reg_set_between_p.
	Allow FP moves to be optimized.
	(rtx_unsafe_p): Delete.

Sat Jun 27 23:02:04 1998  Richard Henderson  <rth@cygnus.com>

	* objc/archive.c: Remove <string.h> prototypes.

Sat Jun 27 22:37:05 1998  Jeffrey A Law  (law@cygnus.com)

	* tm.texi (NEED_MATH_LIBRARY): Document new target macro.

	* Makefile.in (gencheck): Remove $(TREE_H) dependency.

Sat Jun 27 20:20:00 1998  John Carr  <jfc@mit.edu>

	* dsp16xx.h (FIRST_PSEUDO_REGISTER): Add parentheses to definition.
	* dsp16xx.c (next_cc_user_unsigned): New function.
	Remove save_next_cc_user_code.
	(print_operand): Use HOST_WIDE_INT_PRINT_* macros.
	* dsp16xx.md: Call next_cc_user_unsigned instead of using
	save_next_cc_user_code.
	Use gen_rtx_* functions instead of gen_rtx.

Sat Jun 27 20:18:34 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000.h: Add trap_comparison_operator to PREDICATE_CODES.

Sat Jun 27 16:45:42 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (count_reg_sets): New function.
	(count_reg_sets_1, count_ref_references): Likewise.
	(recompute_reg_usage): Likewise.
	* rtl.h (recompute_reg_usage): Add prototype.
	* toplev.c (rest_of_compilation): Call recompute_reg_usage just
	before local register allocation.

Sat Jun 27 13:15:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (negsf, negdf): Revert Jan 22 change.

Sat Jun 27 07:35:21 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mkstemp.c: Include gansidecl.h.  Rename uint64_t to gcc_uint64_t.
	(mkstemp): Remove size specifier for variable `letters'.  Call
	gettimeofday, not __gettimeofday.

	* Makefile.in (EXPR_H): New dependency variable.
	(c-typeck.o): Depend on $(EXPR_H) instead of expr.h.
	(c-iterate.o): Likewise.
	(gencheck): Depend on $(TREE_H) instead of tree.h, etc.
	(stor-layout.o): Depend on $(EXPR_H) instead of expr.h.
	(toplev.o): Likewise.  Also depend on $(RECOG_H) instead of recog.h.
	(varasm.o): Depend on $(EXPR_H) instead of expr.h.
	(function.o): Likewise.
	(stmt.o): Likewise.
	(except.o): Likewise.
	(expr.o): Likewise.
	(calls.o): Likewise.
	(expmed.o): Likewise.
	(explow.o): Likewise.
	(optabs.o): Likewise.
	(sdbout.o): Likewise.
	(dwarf2out.o): Likewise.
	(emit-rtl.o): Likewise.
	(integrate.o): Likewise.
	(jump.o): Likewise.
	(cse.o): Likewise.
	(gcse.o): Likewise.  Also depend on $(BASIC_BLOCK_H) instead of
	basic-block.h.
	(loop.o): Depend on $(EXPR_H) instead of expr.h.
	(unroll.o): Likewise.
	(combine.o): Likewise.
	(reload.o): Likewise.
	(reload1.o): Likewise.
	(caller-save.o): Likewise.
	(reorg.o): Likewise.
	(alias.o): Don't depend on insn-codes.h.
	(regmove.o): Depend on $(RECOG_H)/$(EXPR_H) instead of recog.h/expr.h.
	(insn-emit.o): Depend on $(EXPR_H) instead of expr.h.
	(insn-opinit.o): Likewise.

Sat Jun 27 01:35:14 1998  Jeffrey A Law  (law@cygnus.com)

	* choose-temp.c (choose_temp_base): Remove MPW bits.  Use mkstemp
	instead of mktemp.
	* gcc.c (MKTEMP_EACH_FILE): Define.
	(main): No need to call choose_temp_base if we are going to
	use choose_temp_base to create each file later.
	* mkstemp.c: New file.  Adapted from glibc.
	* Makefile.in (xgcc, colect2, protoize, unprotoize): Link in mkstemp.o.
	(mkstemp.o): Add dependencies.

	* configure.in (gettimeofday): Check for its existence.
	* config.in (HAVE_GETTIMEOFDAY): Define.
	* configure: Rebuilt.

1998-06-26  Michael Meissner  <meissner@cygnus.com>

	* rs6000.md (ne 0, non power case): Add missing & constraint.
	Name pattern ne0.
	(negative abs insns): Add pattern names.

Fri Jun 26 17:36:42 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Run install-info program in separate
	loop.

Fri Jun 26 16:03:15 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (schedule_block): Add hooks for the machine
	description to reorder the ready list, and update how many more
	instructions can be issued this cycle.
	* tm.texi (MD_SCHED_{INIT,REORDER,VARIABLE_ISSUE}): Document.
	
Fri Jun 26 11:54:11 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.h (REGNO_OK_FOR_{INDEX,BASE,FP,CCFP}_P):
	Explicitly mark the constant being compared against as unsigned.
	* config/sparc/sparc.c (sparc_select, cpu_default, cpu_table):
	Fully initialize final members.
	(mem_aligned_8): Explicit init of offset to zero.
	(output_function_prologue): Explicit init of n_regs to zero.
	(output_function_epilogue): Likewise, and mark arg size as
	unused.
	(init_cumulative_args): Mark libname and indirect as unused.
	(function_arg_pass_by_reference): Likewise for cum and named.
	(sparc_builtin_saveregs): Likewise for arglist.
	(sparc_flat_eligible_for_epilogue_delay): Likewise for slot.

Fri Jun 26 06:58:54 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (SECONDARY_INPUT_RELOAD_CLASS): Only need a secondary reload
	if reloading a MEM.

	* arm.h (arm_adjust_cost): Renamed bogus prototype from
	arm_adjust_code.
	(bad_signed_byte_operand): Add prototype.
	* arm.c (arm_override_options): Make I unsigned.
	(const_ok_for_arm): Add casts to the constants.	
	(load_multiple_operation): Don't redeclare elt in sub-block.
	(arm_gen_movstrqi): Delete external declaration of optimize.
	(gen_compare_reg): Declare parameter fp.

	* arm.c (final_prescan_insn): Only initialize scanbody if the insn
	has a pattern.

Fri Jun 26 09:31:24 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c: Include system.h and toplev.h.
	(cint8_operand): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(const48_operand): Likewise.
	(mode_width_operand): Likewise.
	(mode_mask_operand): Likewise.
	(mul8_operand): Likewise.
	(current_file_function_operand): Likewise.
	(signed_comparison_operator): Likewise.
	(divmod_operator): Likewise.
	(any_memory_operand): Likewise.
	(alpha_return_addr): Likewise for parameter `frame'.
	(alpha_builtin_saveregs): Likewise for parameter `arglist'.
	(vms_valid_decl_attribute_p): Likewise for parameters `decl' and
	`attributes'.
	(alpha_start_function): Likewise for parameter `decl'.  Use
	HOST_WIDE_INT_PRINT_DEC in call to fprintf.  Fix various format
	specifiers.  Remove unused variables `lab' and `name'.
	(alpha_end_function): Mark parameter `decl' with ATTRIBUTE_UNUSED.
	(check_float_value): Likewise for parameter `overflow'.
	(alpha_need_linkage): Likewise for parameters `name' and `is_local'.
	
	* alpha.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Define as
	taking an argument.
	(ASM_OUTPUT_SHORT): Cast argument to `int' in call to fprintf.
	(ASM_OUTPUT_CHAR): Likewise.
	(ASM_OUTPUT_BYTE): Likewise.
	(PRINT_OPERAND_ADDRESS): Use HOST_WIDE_INT_PRINT_DEC in call to
	fprintf.
	(PUT_SDB_EPILOGUE_END): Mention argument `NAME' in definition.
	Add prototypes for functions in alpha.c.

	* alpha.md (ashldi3): Add default case in switch.

1998-06-26  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (gcc_version, gcc_version_trigger): New macros.
	(version): Initialize from $(gcc_version).

	* configure.in (version): Rename to gcc_version.
	(gcc_version_trigger): New variable; call AC_SUBST for it and
	emit it into the generated config.status.
	* configure: Regenerate.

Thu Jun 25 12:47:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* fold-const.c (make_range): Don't go looking at TREE_OPERANDs of
	nodes that are not expressions.

Thu Jun 25 15:08:16 1998  Mark Mitchell  <mark@markmitchell.com>

	* invoke.texi (-fstrict-aliasing): Document.
	* rtl.texi (MEM_ALIAS_SET): Document.

	* flags.h (flag_strict_aliasing): Declare.
	* toplev.c (flag_strict_aliasing): Define.
	(f_options): Add -strict-aliasing.
	(main): Set flag_strict_aliasing if -O2 or higher.

	* tree.h (tree_type): Add alias_set field.
	(TYPE_ALIAS_SET): New macro.
	(TYPE_ALIAS_SET_KNOWN_P): Likewise.
	(get_alias_set): Declare.
	* tree.c (lang_get_alias_set): Define.
	(make_node): Initialize TYPE_ALIAS_SET.
	(get_alias_set): New function.
	* print-tree.c (print_node): Dump the alias set for a type.

	* c-tree.h (c_get_alias_set): Declare.
	* c-common.c (c_get_alias_set): New function.
	* c-decl.c (init_decl_processing): Set lang_get_alias_set.

	* expr.c (protect_from_queue): Propagate alias sets.
	(expand_assignment): Calculate alias set for new MEMs.
	(expand_expr): Likewise.
	* function.c (put_var_into_stack): Likewise.
	(put_reg_into_stack): Likewise.
	(gen_mem_addressof): Likewise.
	(assign_parms): Likewise.
	* stmt.c (expand_decl): Likewise.
	* varasm.c (make_decl_rtl): Eliminate redundant clearing of
	DECL_RTL.  Calculate alias set for new MEMs.

	* rtl.def (REG): Add dummy operand.
	(MEM): Add extra operand to store the MEM_ALIAS_SET.
	* rtl.h (MEM_ALIAS_SET): New macro.
	(gen_rtx_MEM): Declare.
	* emit-rtl.c (gen_rtx_MEM): New function.
	* gengenrtl.c (sepcial_rtx): Make MEMs special.

	* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): New macro.
	(DIFFERENT_ALIAS_SETS_P): Likewise.
	(canon_rtx): Propagate the alias set to the new MEM.
	(true_dependence): Check the alias sets.
	(anti_dependence): Likewise.
	(output_dependence): Likewise.
	* explow.c (stabilize): Progoate alias sets.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	* final.c (alter_subreg): Make sure not to leave MEM_IN_STRUCT_P
	in an unpredictable state.  Propagate alias sets.
	* reload1.c (reload): Clear MEM_ALIAS_SET for new MEMs about which
	we have no alias information.
	
Thu Jun 25 16:59:18 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (CATCH_ALL_TYPE): Definition moved to eh-common.h.
	(find_all_handler_type_matches): Add function prototype.
	* eh-common.h (CATCH_ALL_TYPE): Definition added.
	* except.c (find_all_handler_type_matches): Add function to find all
	runtime type info in the exception table.
	(output_exception_table_entry): Special case for CATCH_ALL_TYPE.

Thu Jun 25 15:47:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (xcoffout.o): Depend on toplev.h, output.h and dbxout.h.

	* config/fp-bit.c (_fpmul_parts): Move variables `x', `ylow',
	`yhigh' and `bit' into the scope in which they are used.
	(_fpdiv_parts): Remove unused variables `low', `high', `r0', `r1',
	`y0', `y1', `q', `remainder', `carry', `d0' and `d1'.

	* rs6000.c: Move include of output.h below tree.h.  Include toplev.h.
	(any_operand): Mark unused parameters `op' and `mode' with
	ATTRIBUTE_UNUSED.
	(count_register_operand): Likewise for parameter `mode'.
	(fpmem_operand): Likewise.
	(short_cint_operand): Likewise.
	(u_short_cint_operand): Likewise.
	(non_short_cint_operand): Likewise.
	(got_operand): Likewise.
	(got_no_const_operand): Likewise.
	(non_add_cint_operand): Likewise.
	(non_logical_cint_operand): Likewise.
	(mask_operand): Likewise.
	(current_file_function_operand): Likewise.
	(small_data_operand): Likewise for parameters `op' and `mode' but
	only when !TARGET_ELF.
	(init_cumulative_args): Mark parameters `libname' with
	ATTRIBUTE_UNUSED.
	(function_arg_pass_by_reference): Likewise for parameters `cum',
	`mode' and `named'.
	(expand_builtin_saveregs): Likewise for parameter `args'.
	(load_multiple_operation): Likewise for parameter `mode'.
	(store_multiple_operation): Likewise.
	(branch_comparison_operator): Likewise.
	(secondary_reload_class): Likewise.
	(print_operand): Add parentheses around & operation.
	(output_prolog): Mark parameter `size' with ATTRIBUTE_UNUSED.
	(output_epilog): Likewise.  Cast argument to fprintf to int.
	(rs6000_adjust_cost): Mark parameter `dep_insn' with ATTRIBUTE_UNUSED.
	(rs6000_valid_decl_attribute_p): Likewise for parameters `decl',
	`attributes', `identifier' and `args'.
	(rs6000_valid_type_attribute_p): Likewise for parameter `attributes'.
	(rs6000_comp_type_attributes): Likewise for parameters `type1' and
	`type2'.
	(rs6000_set_default_type_attributes): Likewise for parameter `type'.

	* rs6000.h (RTX_COSTS): Add parentheses around & operation.
	(toc_section, private_data_section, trap_comparison_operator): Add
	prototypes.

	* dbxout.h (dbxout_parms, dbxout_reg_parms, dbxout_syms): Add
	prototypes.

	* xcoffout.c: Include toplev.h, outout.h and dbxout.h.

	* xcoffout.h (stab_to_sclass, xcoffout_begin_function,
	xcoffout_begin_block, xcoffout_end_epilogue,
	xcoffout_end_function, xcoffout_end_block,
	xcoff_output_standard_types, xcoffout_declare_function,
	xcoffout_source_line): Add prototypes.

Thu Jun 25 09:54:55 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.h (REG_ALLOC_ORDER): Add ARG_POINTER_REGNUM,
	noticed by grahams@rcp.co.uk.

Thu Jun 25 11:12:29 1998  Dave Brolley  <brolley@cygnus.com>

	* gcc.c (default_compilers): Use new | syntax to eliminate
	string concatenation.

Thu Jun 25 01:00:48 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_function_name): Delete.
	(alpha_ra_ever_killed): Notice current_function_is_thunk.
	(alpha_sa_mask, alpha_sa_size, alpha_does_function_need_gp): Likewise.
	(alpha_start_function): Reorg from output_prologue.
	(alpha_end_function): Reorg from output_epilogue.
	* alpha.h (ASM_DECLARE_FUNCTION_NAME): Call alpha_start_function.
	(ASM_DECLARE_FUNCTION_SIZE): New.
	(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Delete.
	(PROFILE_BEFORE_PROLOGUE): Set.
	(ASM_OUTPUT_MI_THUNK): Remove bits now output by start/end_function.
	* alpha/win-nt.h (ASM_OUTPUT_MI_THUNK): Likewise.

Thu Jun 25 01:18:47 1998  John Wehle  (john@feith.com)

	* i386/freebsd-elf.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Define.

1998-06-25  Herman A.J. ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

	* expr.c (expand_assignment): Rework address calculation for structure
	field members to expose more invariant computations to the loop
	optimizer.
	(expand_expr): Likewise.

Wed Jun 24 22:44:22 1998  Jeffrey A Law  (law@cygnus.com)

	* local-alloc.c (block_alloc): Do not try to avoid false dependencies
	when SMALL_REGISTER_CLASSES is nonzero.

Wed Jun 24 17:55:15 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha.md (call_vms, call_value_vms): Strip leading * from symbol.

Wed Jun 24 16:27:23 1998  John Carr  <jfc@mit.edu>

	* expr.c (get_memory_rtx): New function.
	(expand_builtin): Call get_memory_rtx for MEM arguments to builtin
	string functions.

	* expmed.c (init_expmed): Initialize all elements of *_cost arrays.

	* optabs.c: Use gen_rtx_FOO (...) instead of gen_rtx (FOO, ...).
	* expr.c: Likewise.
	* explow.c: Likewise.
	* combine.c: Likewise.
	* reload1.c: Likewise.
	* gcse.c: Likewise.

Wed Jun 24 15:13:01 1998  Dave Brolley  <brolley@cygnus.com>

	* README.gnat: Add patch for new lang_decode_options interface.

Wed Jun 24 09:14:04 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (start_catch_handler): Do nothing if EH is not on.

1998-06-24  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (gxx_include_dir): Initialize default value depending on
	new flag --enable-version-specific-runtime-libs; remove superfluous
	default initialization afterwards.
	* configure: Regenerate.

Wed Jun 24 01:32:12 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* toplev.c (rest_of_compilation): Revert May 15 change.

Tue Jun 23 21:27:27 1998  Ken Raeburn  <raeburn@cygnus.com>

	* reload.c (find_reloads): Fix check for failure to match any
	alternative, to account for Mar 26 change in initial "best" cost.

Tue Jun 23 16:44:21 1998  Dave Brolley  <brolley@cygnus.com>

	* cpplib.c (do_line): Typo broke #line directive.
	(cpp_message_from_errno): New function.
	(cpp_error_from_errno): Call cpp_message_from_errno.
	* cpplib.h (cpp_message_from_errno): New function.

Tue Jun 23 13:38:18 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* libgcc2.c (__get_eh_table_version, __get_eh_table_language): New
	functions to return exception descriptor information.
	(find_exception_handler): Pass match_info field to runtime matcher,
	not a descriptor table entry.

Tue Jun 23 09:30:58 1998  Dave Love  <d.love@dl.ac.uk>

	* cpp.texi, gcc.texi: Add @dircategory, @direntry meant to
	accompany previous Makefile.in (install-info) change.

Tue Jun 23 10:06:07 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h (struct __eh_info): Remove coerced value field.
	* libgcc2.c (find_exception_handler): Don't set coerced_value field.
	* except.c (get_dynamic_handler_chain, get_dynamic_cleanup_chain): Use
	POINTER_SIZE instead of Pmode.
	(expand_start_all_catch): Call start_catch_handler() if we are not
	using new style exceptions.

Tue Jun 23 06:45:00 1998  Catherine Moore  <clm@cygnus.com>

	* varasm.c (assemble_variable): Remove reference to warn_bss_align.

Mon Jun 22 23:57:31 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>

	* config/sparc/sparc.md (zero_extendhidi2, extendhisi2,
	extendqihi2, extendqisi2, extendqidi2, extendhidi2, adddi3,
	subdi3, negdi2, call, call_value, untyped_return, nonlocal_goto,
	splits and peepholes): Change remaining generic gen_rtx calls to
	specific genrtl ones.
	* config/sparc/sparc.c: Likewise.
	
Mon Jun 22 22:21:46 1998  Richard Henderson  <rth@cygnus.com>

	* gcc.c (handle_braces): Recognize | between options as an or.

Mon Jun 22 23:13:47 1998  John Wehle  (john@feith.com)

	* i386/freebsd-elf.h (JUMP_TABLES_IN_TEXT_SECTION): Define as flag_pic.
	* i386/sysv4.h (JUMP_TABLES_IN_TEXT_SECTION): Define as flag_pic.

	* i386.md (exception_receiver): Define.

Mon Jun 22 12:01:48 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME,
	PROTOIZE_CROSS_NAME, UNPROTOIZE_CROSS_NAME): New variables.
	(install-common): Use them.

	* gcse.c (add_label_notes): New function.
	(pre_insert_insn): Call it.
	* unroll.c (unroll_loop): Look for insns with a REG_LABEL note, and
	pass the label to set_label_in_map.

Mon Jun 22 19:01:14 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Fix typpo in previous change.

Mon Jun 22 11:10:00 1998  Catherine Moore  <clm@cygnus.com>

	* varasm.c (assemble_variable): Emit alignment warning.

Mon Jun 22 08:18:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (varasm.o): Depend on sdbout.h.
	(sdbout.o): Depend on toplev.h.

	* collect2.c (scan_prog_file): Cast fprintf argument to `long' and
	use %ld specifier.

	* final.c (shorten_branches): Cast first arg of `bzero' to char *.

	* genextract.c (main): When creating insn-extract.c, mark variable
	`i' with ATTRIBUTE_UNUSED.

	* genpeep.c (main): When creating insn-peep.c, mark variables
	`insn', `x' and `pat' with ATTRIBUTE_UNUSED.

	* objc/init.c (__objc_tree_print): Wrap function definition in
	macro `DEBUG'.

	* objc/objc-act.c (encode_array): Cast sprintf argument to `long'
	and use %ld specifier.
	(adorn_decl): Likewise, twice.

	* reload1.c (reload_cse_regs): Cast first arg of `bzero' to char *.

	* sdbout.c: Include output.h and toplev.h.
	(PUT_SDB_INT_VAL): Use HOST_WIDE_INT_PRINT_DEV to print argument
	`a'.  Cast `a' to HOST_WIDE_INT to force it to always be so.
	(PUT_SDB_SIZE): Likewise.

	* sdbout.h (sdbout_mark_begin_function): Add prototype.

	* stmt.c (check_for_full_enumeration_handling): Cast argument of
	`warning' to long and use %ld specifier.

	* toplev.c (main): Likewise for `fprintf'.

	* toplev.h (output_file_directive): Add prototype.

	* unroll.c (unroll_loop): Use HOST_WIDE_INT_PRINT_DEC specifier in
	call to `fprintf'.
	(precondition_loop_p): Likewise.

	* varasm.c Include sdbout.h.
	(assemble_static_space): Move sometimes-unused variable `rounded'
	into the scope in which it is used.
	
	* mips.c (gpr_mode): Don't say `static' twice.

	* cpplib.c (cpp_handle_option): Don't pass unneeded NULL to cpp_fatal.

	* objc/objc-act.c (init_selector): Hide prototype and definition.

	* optabs.c (gen_cond_trap): Remove unused variable `icode'.
	
	* regmove.c (copy_src_to_dest): Likewise for `i'.

	* mips-tfile.c (add_local_symbol): Cast width format specifier to int.
	(add_ext_symbol): Likewise.
	(add_file): Likewise.
	(parse_def): Likewise.
	(write_varray): Use HOST_PTR_PRINTF to print a pointer.  Fix
	remaining format specifiers and arguments.
	(write_object): Likewise, several times.
	(read_seek): Likewise.
	(out_of_bounds): Likewise.
	(allocate_cluster): Likewise.
	(xmalloc): Likewise.
	(xcalloc): Likewise.
	(xrealloc): Likewise.
	(xfree): Likewise.

	* mips-tdump.c (print_symbol): Likewise.
	
Sun Jun 21 17:05:34 1998  Dave Love  <d.love@dl.ac.uk>

	* Makefile.in (install-info): Use install-info program if
	available, per GNU standard.

Sun Jun 21 18:56:44 1998  Jeffrey A Law  (law@cygnus.com)

	* invoke.texi: Document -mrelax for the mn10300 and mn10200.

	* basic-block.h (init_regset_vector): Delete declaration.
	* flow.c (init_regset_vector): Make it static and add a prototype.

	* bitmap.h (debug_bitmap): Declare.

	* haifa-sched.c (debug_ready_list): Make static.

	* toplev.h (fancy_abort): Declare.

Sun Jun 21 18:30:13 1998  H.J. Lu  (hjl@gnu.org)

	* basic-block.h (init_regset_vector): New declaration.

	* Makefile.in (sdbout.o): Add insn-codes.h to dependency.

	* global.c: Include machmode.h amd move hard-reg-set.h before
	rtl.h.

	* haifa-sched.c (insn_issue_delay, birthing_insn_p,
	adjust_priority, print_insn_chaino): New declaration.
	(schedule_insns): Remove declaration.
	(init_target_units, get_visual_tbl_length,
	init_block_visualization): Add prototype.

	* integrate.c (pushdecl, poplevel): Remove declaration.

	* rtl.h (expand_expr): Remove declaration.

	* loop.c (oballoc): Remove declaration.
	(replace_call_address): Add prototype.

Sun Jun 21 01:08:17 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Jun 21 01:16:38 1998  John Wehle  (john@feith.com)

	* i386.c (output_fp_conditional_move): Don't bother handling
	(cc_prev_status.flags && CC_NO_OVERFLOW) since the INSN patterns
	prevent this from happening.

	* i386.md (nonlocal_goto_receiver): Delete.

Sun Jun 21 00:42:20 1998  H.J. Lu  (hjl@gnu.org)

	* Makefile.in (crtbeginS.o, crtendS.o): Add -fno-exceptions and
	-DCRTSTUFFS_O.
	(INSTALL): cd $(srcdir) before make.

	* flow.c (allocate_for_life_analysis, init_regset_vector):
	Remove declaration.

	* function.h (get_first_block_beg): New declaration.

	* gbl-ctors.h (__do_global_dtors): Add prototype.

	* gcov-io.h (__fetch_long): New declaration.
	(__store_long): Likewise.
	(__read_long): Likewise.
	(__write_long): Likewise.

	* gcov.c (print_usage): New declaration.

	* Makefile.in (c-iterate.o): Depend on insn-codes.h too.

Sat Jun 20 00:36:16 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Initialize "src" and "dest".
	* stmt.c (expand_return): Likewise.
	* expmed.c (extract_split_bit_field): Similarly for "result"
	* gcse.c (compute_hash_table): Mark first arg as unused.
	* jump.c (jump_optimize): Initialize reversep.
	* tree.c (make_node): Initialize length.

	* c-common.c (check_format_info): Initialize length_char and
	fci to keep -Wall quiet.

	* except.c (jumpif_rtx): Put declaration and definition
	inside a suitable #ifdef.
	(jumpifnot_rtx): Delete dead function.

	* i386.h (output_int_conditional_move): Declare.
	(output_fp_conditional_move): Likewise.
	(ix86_can_use_return_insn_p): Likewise.

	* optabs.c (init_traps): Put prototype inside a suitable #ifdef.

Sat Jun 20 00:27:40 1998  Graham  <grahams@rcp.co.uk>

	* alias.c: Include toplev.h.
	* caller-save.c: Include toplev.h.
	* combine.c: Include toplev.h.
	* flow.c Include toplev.h.
	* global.c: Include toplev.h.
	* jump.c: Include toplev.h.
	* local-alloc.c: Include toplev.h.
	* loop.c: Include toplev.h.
	* regmove.c: Include toplev.h.
	* stupid.c: Include toplev.h.
	* unroll.c: Include toplev.h.
	* Makefile.in: Add toplev.h dependencies.

Fri Jun 19 22:40:25 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* regmove.c (copy_src_to_dest): Add decl for loop_depth.

	* svr4.h (ASM_GENERATE_INTERNAL_LABEL): Cast arg to unsigned.
	* dwarf2out.c (ASM_OUTPUT_DWARF_DATA1): Likewise.
	Add parens to various macros.

Fri Jun 19 23:22:42 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* c-typeck.c (pop_init_level): Warn about implicit zero initialization
	of struct members.

Fri Jun 19 23:06:33 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* varasm.c (assemble_start_function): Add weak_global_object_name.
	* tree.c (get_file_function_name): Use it.

Fri Jun 19 22:55:14 1998  Jeffrey A Law  (law@cygnus.com)

	* except.c (jumpif_rtx): Make static and add prototype.
	(jumpifnot_rtx): Likewise.

	* README.gnat: Add a build patch from Fred Fish.

	* c-lang.c (GNU_xref_begin, GNU_xref_end): Deleted.

	* Makefile.in (c-iterate.o): Depend on expr.h.

Fri Jun 19 20:38:34 1998  H.J. Lu  (hjl@gnu.org)

	* except.h (emit_unwinder, end_eh_unwinder): Removed.

	* dwarfout.c (getpwd): Add prototype.
	(is_pseudo_reg, type_main_variant, is_tagged_type,
	is_redundant_typedef): New declaration.
	(output_decl): Add prototype for FUNC.
	(type_main_variant): Make it static.
	(is_tagged_type): Likewise.
	(is_redundant_typedef): Likewise.

	* expr.c (do_jump_by_parts_greater_rtx): Removed.
	(truthvalue_conversion): Likewise.

	* c-iterate.c: Include "expr.h".
	(expand_expr): Use proper values when calling the function.

	* explow.c (emit_stack_save): Add prototype for FCN.
	(emit_stack_restore): Likewise.

	* dwarf2out.c (getpwd): Add prototype.

	* dwarf2out.h (debug_dwarf, debug_dwarf_die): New declarations.

	* c-typeck.c (c_expand_asm_operands): Use proper values when calling
	expand_expr.

	* c-lex.c (yyprint): Add prototype.
	(check_newline, build_objc_string): Remove declaration.

	* c-tree.h (comptypes_record_hook): Removed.
	(finish_incomplete_decl): New prototype.

	* alias.c (find_base_value): Add prototype.
	(true_dependence): Add prototype for function argument.

	* c-aux-info.c (xmalloc): Remove declaration.

Fri Jun 19 20:23:05 1998  Robert Lipe  <robertl@dgii.com>

	* i386.c: Include system.h.  Remove redundant includes.
	(optimization_options): Mark param 'size' with ATTRIBUTE_UNUSED.
	(i386_cc_probably_useless_p): Likewise for 'decl', 'attributes',
	'identifier', 'args'.
	(i386_valid_type_attribute_p): Likewise for 'attributes'.
	(i386_comp_type_attribute_p): Likewise for 'type1', 'type2'.
	(function_arg_partial_nregs): Likewise for 'cum', 'mode', 'type',
	and 'named'.
	(symbolic_operand): Likewise for 'mode'.
	(call_insn_operand): Likewise.
	(expander_call_insn_operand): Likewise.
	(ix86_logical_operator): Likewise.
	(ix86_binary_operator_ok): Likewise.
	(emit_pic_move): Likewise.
	(VOIDmode_compare_op): Likewise.
	(is_mul): Likewise.
	(str_immediate_operand): Likewise.
	(ix86_uary_operator_ok): Likewise for 'code', 'mode', and 'operands'.yy
	(asm_output_function_prefix): Likewise for 'name'.
	(function_prologue): Likewise for 'file', and 'size'.
	(function_epilogue): Likewise.

1998-06-19  Jim Wilson  <wilson@cygnus.com>

	* loop.h (struct induction): Clarify comment for unrolled field.
	* unroll.c (find_splittable_givs): Move set of unrolled field
	after address validity check.

Fri Jun 19 18:38:04 1998  Michael Meissner  <meissner@cygnus.com>

	* config/fp-bit.c (INLINE): Only define if not already defined.

1998-06-19  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (installdirs): Loop over directories in $(libsubdir)
	creating probably missing ones, instead of single if statements.

Fri Jun 19 10:43:52 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (truthvalue_conversion): Protect side effects in the
	expression when splitting a complex value.
	* fold-const.c (fold): Likewise.

Fri Jun 19 02:31:16 1998  Klaus Kaempf  (kkaempf@progis.de)

	* cccp.c (hack_vms_include_specification): Rewrite to handle
	'#include <dir/file.h>' correctly.

Fri Jun 19 02:24:11 1998  H.J. Lu  (hjl@gnu.org)

	* config/i386/linux.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Defined.

Fri Jun 19 02:10:10 1998  John Wehle  (john@feith.com)

	* i386.c (notice_update_cc): Integer conditional moves don't
	affect cc0.

	* i386.md (movsfcc, movdfcc, movxfcc): Use emit_store_flag
	to support LT, LE, GE, and GT signed integer comparisons.
	(movsfcc+1, movsfcc+2, movdfcc+1, movdfcc+2,
	movxfcc+1, movxfcc+2): Pattern doesn't match if the comparison
	is LT, LE, GE, or GT.
	(movdicc): Remove code resulting from an earlier patch which
	didn't apply correctly.

Fri Jun 19 02:00:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload1.c (reload_cse_regno_equal_p): If -ffloat-store, don't
	consider a MEM in FP mode as equal.

Fri Jun 19 01:02:17 1998  Jeffrey A Law  (law@cygnus.com)

	* c-decl.c (duplicate_decls): Avoid setting TREE_ASM_WRITTEN for
	duplicate declarations of a function.

Fri Jun 19 00:33:33 1998  H.J. Lu  (hjl@gnu.org)

	* config/float-i386.h: New.

	* configure.in (i[34567]86-*-linux-*): Set float_format to i386.

Thu Jun 18 20:11:00 1998  Jim Wilson  <wilson@cygnus.com>

	* sched.c (schedule_insns): Use xmalloc not alloca for max_uid
	indexed arrays.  Call free at the end of the function for them.
	* haifa-sched.c (schedule_insns): Likewise.

Thu Jun 18 18:16:01 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (size_of_string): Do count backslashes.

Thu Jun 18 11:43:54 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Disallow REG+REG
	addressing when one register is the frame pointer or stack
	pointer.  Disallow REG+CONST addressing in HI mode.

Thu Jun 18 17:30:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): Don't narrow scope of RELOAD_OTHER to
	RELOAD_FOR_INSN.

Thu Jun 18 09:36:50 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-lang.o): Depend on output.h.

	* c-lang.c: Include output.h.

	* sparc.c (sparc_builtin_saveregs): Remove unused variable `fntype'.

	* except.c (expand_builtin_eh_stub): Likewise for variable `jump_to'.

	* genrecog.c (write_subroutine): When writing insn-recog.c, mark
	variables `insn', `pnum_clobbers', `x[0 .. max_depth]' and `tem'
	with ATTRIBUTE_UNUSED.

	* regmove.c (copy_src_to_dest): Make function static to match its
	prototype.

	* reload1.c Include hard-reg-set.h before rtl.h to get macro
	HARD_CONST.  Include machmode.h before hard-reg-set.h.

	* rtl.h: Prototype `retry_global_alloc' and wrap with macro
	HARD_CONST to protect usage of typedef HARD_REG_SET.

	* tree.c: Prototype `_obstack_allocated_p'.

	* varasm.c: Wrap prototype of `asm_output_aligned_bss' in macro
	BSS_SECTION_ASM_OP.

Thu Jun 18 09:20:47 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* pa.c: Include system.h and toplev.h.  Remove redundant code.
	(call_operand_address): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(symbolic_operand): Likewise.
	(symbolic_memory_operand): Likewise.
	(pic_label_operand): Likewise.
	(fp_reg_operand): Likewise.
	(pre_cint_operand): Likewise.
	(post_cint_operand): Likewise.
	(ireg_or_int5_operand): Likewise.
	(int5_operand): Likewise.
	(uint5_operand): Likewise.
	(int11_operand): Likewise.
	(uint32_operand): Likewise.
	(ior_operand): Likewise.
	(lhs_lshift_cint_operand): Likewise.
	(pc_or_label_operand): Likewise.
	(legitimize_pic_address): Likewise.
	(hppa_legitimize_address): Likewise for parameter `old'.
	(output_block_move): Likewise for parameter `size_is_constant'.
	(output_function_prologue): Likewise for parameter `size'.
	(output_function_epilogue): Likewise.
	(return_addr_rtx): Likewise for parameter `count'.
	(output_mul_insn): Likewise for parameter `unsignedp'.
	(hppa_builtin_saveregs): Likewise for parameter `arglist'.
	(output_bb): Likewise for parameter `operands'.
	(output_bvb): Likewise.
	(function_label_operand): Likewise for parameter `mode'.
	(plus_xor_ior_operator): Likewise.
	(shadd_operand): Likewise.
	(non_hard_reg_operand): Likewise.
	(eq_neq_comparison_operator): Likewise.
	(movb_comparison_operator): Likewise.
	(pa_combine_instructions): Likewise for parameter `insns'.

	* pa.h: Add prototypes for functions `output_deferred_plabels',
	`override_options', `output_ascii', `output_function_prologue',
	`output_function_epilogue', `print_operand',
	`symbolic_expression_p', `reloc_needed', `compute_frame_size',
	`hppa_address_cost', `and_mask_p', `symbolic_memory_operand',
	`pa_adjust_cost', `pa_adjust_insn_length' and
	`secondary_reload_class'.

Wed Jun 17 22:28:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* configure.in: Don't turn on collect2 unconditionally.

Wed Jun 17 20:20:48 1998  Mark Mitchell  <mark@markmitchell.com>

	* cse.c (cse_basic_block): Don't include NOTE insns in the count
	that is used to decide whether or not it is time to erase the
	equivalence table.

Wed Jun 17 18:30:43 1998  Franz Sirl  <Franz.Sirl-kernel@lauterbach.com>

	* rs6000/linux.h (JUMP_TABLES_IN_TEXT_SECTION): Define to zero.

Wed Jun 17 19:05:03 1998  John Carr  <jfc@mit.edu>

	* haifa-sched.c (haifa_classify_insn): TRAP_IF is risky.
	(sched_analyze_2): Allow scheduling TRAP_IF.

	* reorg.c (mark_referenced_resources): Examine operands of TRAP_IF.

	* rtl.h (TRAP_CODE): New macro.

	* rtl.def (TRAP_IF): Change second operand type to rtx.

	* optabs.c (gen_cond_trap): New function.
	(init_traps): New function.
	(init_optabs): Call init_traps.
	* expr.h: Declare gen_cond_trap.

	* jump.c (jump_optimize): Optimize jumps to and around traps.

	* sparc.md: Define trap instructions.

	* rs6000.md: Define trap instructions.
	* rs6000.c (print_operand): New code 'V' for trap condition.
	(trap_comparison_operator): New function.

	* m88k.md: Update use of TRAP_IF.

	* tree.h (enum built_in_function): New function code BUILT_IN_TRAP.
	* c-decl.c (init_decl_processing): New builtin __builtin_trap.
	* expr.c (expand_builtin): Handle BUILT_IN_TRAP.

	* expr.c (expand_builtin): Error if __builtin_longjmp second argument
	is not 1.

Wed Jun 17 15:20:00 1998  Catherine Moore  <clm@cygnus.com>

	 * reload1.c (spill_hard_reg): Check mode of register when
	 spilling from scratch_list.

Wed Jun 17 16:25:38 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* except.c (add_new_handler): Fix bug in finding last region handler.
	* libgcc2.c (find_exception_handler): Pass exception table pointer
	to runtime type matcher, not the match info field.

Wed Jun 17 15:57:48 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* eh-common.h (struct eh_context): Add comment for hidden use of
	field dynamic_handler_chain.
	* except.c (get_dynamic_handler_chain): Comment on, and use the
	correct offset of the dynamic_handler_chain field.

1998-06-17  Jim Wilson  <wilson@cygnus.com>

	* mips/iris6.h (LINK_SPEC): Add -woff 131.

1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Disable EH_FRAME_SECTION if we don't have .init.

	* configure.in: Don't disable collect2 when we have GNU ld.

Wed Jun 17 08:38:13 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (make_range): Do not widen the type of the expression.

	* expr.c (check_max_integer_computation_mode): New function.
	(expand_expr): Avoid integer computations in modes wider than
	MAX_INTEGER_COMPUTATION_MODE.
	* fold-const.c (fold): Likewise.
	* tree.h (check_max_integer_computation_mode): Declare.
	* tm.texi (MAX_INTEGER_COMPUTATION_MODE): Document it.

	* configure.in (nm): Make a link to "nm" in the build tree too.

	* mn10300.md (andsi3): Fix typo.

Tue Jun 16 22:58:40 1998  Richard Henderson  <rth@cygnus.com>

	* reload1.c (reload_cse_regs): Call bzero instead of looping.

Tue Jun 16 18:30:35 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (stripattributes): Prepend '*' to the section name.

Tue Jun 16 16:49:26 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_prologue, alpha_expand_epilogue): New fns.
	(output_prologue, output_epilogue): Merge VMS and OSF versions;
	Remove anything related to the actual code generation.
	(output_end_prologue): New function.
	(alpha_sa_mask, alpha_sa_size): Merge VMS and OSF versions.
	(alpha_does_function_need_gp): Return false for VMS.
	(alpha_function_needs_gp): Make static.
	(add_long_const): Delete.
	(summarize_insn): Don't assume a SUBREG is of a REG.
	Prototype all static functions.  Rename VMS-specific global
	variables vms_*.
	* alpha.h (TARGET_CAN_FAULT_IN_PROLOGUE): Default to 0.
	(FUNCTION_BOUNDARY): Align to cache line.
	(LOOP_ALIGN, ALIGN_LABEL_AFTER_BARRIER): Align to octaword.
	(FUNCTION_END_PROLOGUE): New macro.
	* alpha.md (attribute length): New.  Mark all insns.
	(return_internal, prologue_stack_probe_loop): New patterns.
	(prologue, init_fp, epilogue): New patterns.
	Disable peepholes.
	* linux.h (TARGET_CAN_FAULT_IN_PROLOGUE): Define.

Tue Jun 16 17:36:35 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (lang_options): Add -trigraphs option for cpplib.

Tue Jun 16 23:33:24 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_before_p): RELOAD_FOR_OUTADDR_ADDRESS
	is earlier than RELOAD_FOR_OUTPUT_ADDRESS; RELOAD_FOR_INPADDR_ADDRESS
	is earlier than RELOAD_FOR_INPUT_ADDRESS.

Tue Jun 16 13:15:16 1998  Jim Wilson  <wilson@cygnus.com>

	* libgcc1-test.c (memcpy): Define.

Tue Jun 16 13:44:02 1998  Michael Meissner  <meissner@cygnus.com>

	* genattrtab.c (struct attr_desc): Change int flags to bit
	fields.  Add bit fields for this being function_units_used
	or *_blockage_range attributes.
	(write_unit_name): New function to print a function unit name
	given unit #.
	(expand_units): Indicate whether this is function_units_used or
	*_blockage_range attributes.
	(write_toplevel_expr): Print function_units_used and
	*_blockage_range attributes in a more friendly fashion.
	(make_internal_attr): Indicate whether this attribute is either
	function_units_used or *_blockage_range.

Mon Jun 15 17:06:43 1998  Michael Meissner  <meissner@cygnus.com>
			  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (copy_src_to_dest): Do not copy src to dest if either
	the source or destination is special.

Mon Jun 15 13:20:33 1998  Jim Wilson  <wilson@cygnus.com>

	* c-decl.c (shadow_tag_warned): Use specs not declspecs in for loop.

Mon Jun 15 07:16:29 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Jun 13 13:10:40 1998  Krister Walfridsson  <cato@df.lth.se>

	* config/sparc/netbsd.h (DEFAULT_PCC_STRUCT_RETURN): Undefine before
	redefining it.

Fri Jun 12 18:06:45 1998  Doug Evans  <devans@egcs.cygnus.com>

	* m32r/m32r.h (STARTFILE_SPEC): Delete crtsysc.o.
	(ENDFILE_SPEC): Add -lgloss.

Fri Jun 12 14:57:59 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.c (small_int): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(large_int): Likewise.
	(pc_or_label_operand): Likewise.
	(call_insn_operand): Likewise.
	(consttable_operand): Likewise.
	(m16_uimm3_b): Likewise.
	(m16_simm4_1): Likewise.
	(m16_nsimm4_1): Likewise.
	(m16_simm5_1): Likewise.
	(m16_nsimm5_1): Likewise.
	(m16_uimm5_4): Likewise.
	(m16_nuimm5_4): Likewise.
	(m16_simm8_1): Likewise.
	(m16_nsimm8_1): Likewise.
	(m16_uimm8_1): Likewise.
	(m16_nuimm8_1): Likewise.
	(m16_uimm8_m1_1): Likewise.
	(m16_uimm8_4): Likewise.
	(m16_nuimm8_4): Likewise.
	(m16_simm8_8): Likewise.
	(m16_nsimm8_8): Likewise.
	(m16_usym8_4): Likewise.
	(m16_usym5_4): Likewise.
	(mips_move_1word): Change type of variable `i' from int to size_t.
	(mips_move_2words): Likewise.
	(output_block_move): Mark parameter `libname' with ATTRIBUTE_UNUSED.
	(function_arg_advance): Use HOST_PTR_PRINTF to print an address.
	(function_arg): Likewise.
	(function_arg_partial_nregs): Mark parameter `named' with
	ATTRIBUTE_UNUSED.
	(override_options): Use ISDIGIT instead of isdigit.
	(mips_output_external): Mark parameter `file' with ATTRIBUTE_UNUSED.
	(final_prescan_insn): Likewise for parameters `opvec' and `noperands'.
	(save_restore_insns): Cast HOST_WIDE_INT arguments passed to
	function `fatal' to long before printing.  Use
	HOST_WIDE_INT_PRINT_DEC in fprintf.  Both changes done several
	times in this function.
	(function_prologue): Mark parameter `size' with ATTRIBUTE_UNUSED.
	(function_epilogue): Likewise for parameters `file' and `size'.
	Print an int with "%d" not "%ld".
	(mips_select_rtx_section): Mark parameter `x' with ATTRIBUTE_UNUSED.
	(mips_function_value): Likewise for parameter `func'.
	(function_arg_pass_by_reference): Likewise for parameters `cum'
	and `named'.
	(extend_operator): Likewise for parameter `mode'
	(highpart_shift_operator): Likewise.

	* mips.md (mul_acc_si): Remove unused variable `macc'.

Fri Jun 12 09:33:44 1998  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Revert last change.  It breaks constant
	expressions somehow.

Fri Jun 12 10:23:36 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* expr.c (do_jump, case EQ_EXPR, NE_EXPR): When comparing complex
	prevent operands from being evaluated twice.

Fri Jun 12 00:50:27 1998  Sergey Okhapkin  <sos@prospect.com.ru>

	* toplev.c (lang_options): Add -remap as a preprocessor option.

Fri Jun 12 00:30:32 1998  John Wehle  (john@feith.com)

	* i386.md (cmpsi_1, cmphi_1, cmpqi_1): Remove code
	which set CC_REVERSED since reload should ensure that
	the operands are already the correct type.

Thu Jun 11 17:14:15 1998  Jim Wilson  <wilson@cygnus.com>

	* except.c (expand_builtin_eh_stub): Call emit_move_insn rather than
	calling gen_rtx_SET.

Thu Jun 11 18:45:49 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* config/rs6000/x-aix43 (AR): Delete.
	(AR_FOR_TARGET_FLAGS): Add -X32_64 here.

Thu Jun 11 16:19:17 1998  David W. Schuler  <schuld@btv.ibm.com>

	* config/i386/aix386ng.h (CPP_SPEC): Remove extraneous quote.

Thu Jun 11 12:40:27 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.c (override_options): Replace word_mode with explicit
	TARGET_64BIT check.

Thu Jun 11 14:50:02 1998  Michael Meissner  <meissner@cygnus.com>

	* regmove.c (regmove_optimize): If we can't replace the
	destination in an insn that sets the source, generate an explicit
	move of the source to the destination.
	(copy_src_to_dest): New function.
	(toplevel): Include basic-block.h.

	* Makefile.in (regmove.o): Add basic-block.h dependencies.

Thu Jun 11 10:30:09 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (lang_options): Add missing options (nostdinc, idirafter).

Wed Jun 10 23:39:32 1998  Mark Mitchell  <mark@markmitchell.com>

	* rtl.h (rtx_def): Improve documentation.
	(MEM_IN_STRUCT_P): Likewise.

Wed Jun 10 23:23:17 1998  Graham  <grahams@rcp.co.uk>

	* c-decl.c (start_decl): Correct test for -Wmain.

	* c-decl.c (grokdeclarator): Remove unused variable "last".

Wed Jun 10 14:52:27 1998  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_builtin_setjmp): Store const1_rtx in target.
	(expand_builtin_longjmp): Abort if value isn't const1_rtx.
	Delete code storing value in static_chain_rtx.
	(expand_builtin, case BUILT_IN_LONGJMP): Pass NULL_RTX for target
	to second expand_expr call.

Wed Jun 10 13:08:41 1998  Mark Mitchell  <mark@markmitchell.com>

	* mips/mips.c: Remove -mabi=o32 and -mabi=n64.

Wed Jun 10 13:41:23 1998  Dave Brolley  <brolley@cygnus.com>

	* cppmain.c (fatal): New function.
	* configure.in (cpp_main): New configuration variable.
	* configure: Regenerated.
	* Makefile.in (CCCP): Use a configuration variable to select basex
	for cccp.
	(cppmain$(exeext)): Add @extra_cpp_objs@.

Wed Jun 10 13:07:02 1998  Dave Brolley  <brolley@cygnus.com>

	* objc/objc-act.c: Add cpplib declarations.
	(lang_decode_option): Initialize cpplib if necessary.
	(lang_decode_option): New argc/argv interface.
	* tree.h (lang_decode_option): New argc/argv interface.
	* toplev.c (lang_options): Add cpp options.
	(main): New interface for lang_decode_option.
	* gcc.c (default_compilers): Don't call cpp for a cpplib-enabled C compiler
	unless -E, -M or -MM is specified.
	* cpplib.h (cpp_handle_option): New function.
	* cpplib.c (cpp_handle_option): New function.
	(cpp_handle_options): Now calls cpp_handle_option.
	* c-tree.h (c_decode_option): New argc/argv interface.
	* c-lex.c (init_parse): cpplib now initialized in c_decode_option.
	* c-lang.c (lang_decode_option): New argc/argv interface.
	* c-decl.c: Add cpplib declarations.
	(c_decode_option): New argc/argv interface.
	(c_decode_option): Call cpp_handle_option.
	(c_decode_option): Now returns number of strings processed.

Wed Jun 10 09:47:13 1998  Richard Earnshaw  (rearnsha@arm.com)

	* unroll.c (verify_addresses): Use validate_replace_rtx to undo the
	changes.  Abort if the undo fails.

1998-06-10  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* config/rs6000/rs6000.c (output_prolog): Change locations and
	directions of saving and restoring arguments of main on the stack.

Wed Jun 10 08:56:27 1998  John Carr  <jfc@mit.edu>

	* reload1.c (reload_cse_simplify_operands): Do not call gen_rtx_REG
	for each alternative.  Do not replace a CONST_INT with a REG unless
	the reg is cheaper.

Wed Jun 10 02:11:55 1998  Jeffrey A Law  (law@cygnus.com)

	* decl.c (init_decl_processing): Fix typo.

	* mips.c (gpr_mode): New variable.
	(override_options): Initialize gpr_mode.
	(compute_frame_size): Use "gpr_mode" instead of "word_mode" to
	determine size and offset of general purpose registers save slots.
	(save_restore_insns, mips_expand_prologue): Similarly.

	* reload.c (find_reloads_toplev): Use gen_lowpart common to convert
	between constant representations when we have (SUBREG (REG)) with
	REG equivalent to a constant.

Wed Jun 10 01:39:00 1998  Juha Sarlin  <juha@c3l.tyreso.se>

	* h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24.

Tue Jun  9 22:05:34 1998  Richard Henderson  <rth@cygnus.com>

	* fold-const.c (fold): Even with otherwise constant trees, look for
	opportunities to combine integer constants.

Wed Jun  3 23:41:24 1998  John Wehle  (john@feith.com)

	* i386.c (notice_update_cc): Clear cc_status.value2 in the
	case of UNSPEC 5 (bsf).

	* i386.md (movsfcc, movdfcc, movxfcc): The floating point
	conditional move instructions don't support signed integer
	comparisons.

Tue Jun  9 14:31:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/t-v850 (TCFLAGS): Add assembler options to warn of
	overflows.

	* config/v850/lib1funcs.asm (__return_interrupt): Use 'addi
	16,sp,sp' ratehr than 'add 16,sp'.  Patch courtesy of Biomedin
	<glctr@abc.it>.

Tue Jun  9 16:23:13 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.c (expand_start_catch): Rename to start_catch_handler.
	(expand_end_catch): Delete function.
	(expand_end_all_catch): Remove catch status that expand_end_catch
	use to do.
	* except.h (expand_start_catch): Rename prototype.
	(expand_end_catch): Delete prototype.

Tue Jun  9 12:57:32 1998  Mark Mitchell  <mark@markmitchell.com>

	* invoke.texi: Add documentation for -mips4 and -mabi=*.

Tue Jun  9 12:12:34 1998  Klaus Kaempf  (kkaempf@progis.de)

	* alpha/vms.h (EXTRA_SECTIONS): Add in_ctors and in_dtors.
	(EXTRA_SECTION_FUNCTIONS): Add ctors_section and dtors_section.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Define.

Tue Jun  9 12:10:27 1998  John Carr  <jfc@mit.edu>

	* haifa-sched.c (update_flow_info): Use UNITS_PER_WORD, not MOVE_MAX,
	as the threshold to permit splitting memory operations.

Tue Jun  9 12:36:16 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (gpr_mode): New variable.
	(override_options): Initialize gpr_mode.
	(compute_frame_size): Use "gpr_mode" instead of "word_mode" to
	determine size and offset of general purpose registers save slots.
	(save_restore_insns, mips_expand_prologue): Similarly.

	* Makefile.in (LIB2FUNCS_EH): Define.  Just "_eh" for now.
	(LIBGCC2_CFLAGS): Remove -fexceptions.
	(LIB2FUNCS): Remove "_eh".
	(libgcc2.a): Iterate over LIB2FUNCS_EH and build everything in
	it with -fexceptions.

	* Makefile.in (local-alloc.o): Depend on insn-attr.h.
	* local-alloc.c (block_alloc): Avoid creating false
	dependencies for targets which use instruction scheduling.

Tue Jun  9 02:40:49 1998  Richard Henderson  <rth@cygnus.com>

	* mips/elf.h (ASM_DECLARE_OBJECT_NAME): Define.
	(ASM_FINISH_DECLARE_OBJECT): Define;
	* mips/elf64.h: Likewise.

Tue Jun  9 01:08:47 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (flag_new_exceptions): Remove extraneous `extern'.

Mon Jun  8 23:24:48 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Jun  8 23:24:58 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (mulsidi3): Add !TARGET_POWERPC64 constraint.
	(mulsidi3_ppc64): Delete.

Mon Jun  8 20:57:40 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (varasm.o): Depend on dbxout.h.
	(cse.o): Depend on toplev.h and output.h.
	(gcse.o): Depend on output.h.

	* mips.c: Include system.h and toplev.h and remove redundant code.
	Include output.h after tree.h so all its prototypes get activated.
	* mips.md (table_jump): Remove unused variable `dest'.

	* sparc.h: Add prototype for `v8plus_regcmp_op'.

	* crtstuff.c (fini_dummy, init_dummy): Mark function definitions
	with __attribute__ ((__unused__)).
	(__frame_dummy): Provide prototype before use, wrap it with
	EH_FRAME_SECTION_ASM_OP.

	* cse.c: Move inclusion of <setjmp.h> above local headers.
	Include toplev.h and output.h.

	* dbxout.h: Add prototype for `dbxout_begin_function'.

	* final.c (final_scan_insn): Wrap variable `max_skip' in macro
	ASM_OUTPUT_MAX_SKIP_ALIGN.

	* gcse.c: Include system.h and output.h.
	(dump_cuid_table, dump_rd_table, dump_cprop_data, dump_pre_data):
	Make extern instead of static.
	(compute_can_copy): Only declare variables `reg' and `insn' when
	AVOID_CCMODE_COPIES is not defined.
	(record_set_info): Mark parameter `setter' with ATTRIBUTE_UNUSED.
	(hash_scan_clobber): Likewise for `x' and `insn'.
	(hash_scan_call): Likewise.
	(record_last_set_info): Likewise for `setter'.
	(mark_call): Likewise for `pat'.
	(pre_insert_insn): Wrap variable `note' in macro HAVE_cc0.

	* libgcc2.c (__bb_init_prg): Replace bzero with memset and fix the
	length parameter so that it multiplies the number of elements by
	the sizeof(element).

	* output.h: Add prototype for `weak_finish'.

	* recog.h: Likewise for `validate_replace_src'.

	* rtl.h: Likewise for `optimize_save_area_alloca',
	`fix_sched_param', `purge_addressof', `gcse_main',
	`regmove_optimize', `dbr_schedule', `branch_prob' and
	`end_branch_prob'.

	* toplev.h: Likewise for `set_float_handler' and
	`output_quoted_string'.

	* varasm.c: Include dbxout.h.

Mon Jun  8 18:12:06 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.c (mips_secondary_reload_class): Use gp_reg_p instead of
	GP_REG_P.  Use gr_regs instead of GR_REGS.

Mon Jun  8 16:54:12 1998  Ken Raeburn   <raeburn@cygnus.com>
			  Jeff Law      <law@cygnus.com>

	* Revamped multiply support for MIPS chips.
	* mips.c (extend_operator): New function.
	(highpart_shift_operator): Likewise.
	* mips.h: Declare new functions.
	(PREDICATE_CODES): Add support for new predicates.
	* mips.md (mulsi3 expander): Simplify.
	(mulsi_mult3): Add another constraint alternative.  Support
	3 operand multiply instructions as found on various mips
	parts.
	(mulsi3_r4650): Delete pattern, now handled by mulsi_mult3.
	(mul_acc_si): New pattern and associated splitters.
	(mulsidi3 expander): Rework to use mulsidi3_64bit and
	mulsidi3_internal.
	(umulsidi3): New expander.
	(mulsidi3_internal): Accept either sign or zero extended
	operands and generate code as appropriate appropriately.
	(mulsidi3_64bit): Similarly.
	(smulsi3_highpart): Turn into an expander and generate code
	to match new patterns.
	(umulsi3_highpart): Likewise.
	(xmulsi3_highpart_internal): New pattern.
	(maddi patterns): Delete.  Replace with:
	(mul_acc_di, mul-acc_64bit_di): New patterns.

Mon Jun  8 14:16:15 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h: Remove NEW_EH_MODEL compile time flag, and replace with
	flag_new_exceptions runtime flag.
	(struct old_exception_table): New struct which represents what
	the exception table looks like without the new model.
	(NEW_EH_RUNTIME): New value used as a tag in the exception table to
	flag that this is a new style table.
	* except.h: Remove compile time flag NEW_EH_MODEL.
	(expand_builtin_eh_stub_old): New prototype.
	* tree.h (enum built_in_function): Add BUILT_IN_EH_STUB_OLD.
	* expr.c (expand_builtin): New builtin func BUILT_IN_EH_STUB_OLD.
	* c-decl.c (init_decl_processing): Add new builtin function
	__builtin_eh_stub_old.
	* final.c (final_scan_insn): Replace compile time flag NEW_EH_MODEL.
	* flags.h (flag_new_exceptions): New runtime flag.
	* toplev.c (flag_new_exceptions): Initialize default to 0,
	-fnew-exceptions sets to 1.
	* except.c (output_exception_table_entry): Output New style exception
	identifier into table, and replace compile time flag NEW_EH_MODEL
	with runtime flag flag_new_exceptions.
	(output_exception_table): Replace compile time flag NEW_EH_MODEL.
	(expand_builtin_eh_stub_old): Duplicates original functionality of
	expand_builtin_eh_stub.
	(expand_builtin_eh_stub): Replace compile time flag NEW_EH_MODEL.
	* libgcc2.c (find_exception_handler): Remove NEW_EH_MODEL #ifdefs.
	(old_find_exception_handler): New func, same as find_exception_handler
	except it works on the old style exception table.
	(__throw): Replace NEW_EH_MODEL. Detect new model based on presence
	of identifier in the exception table, and call appropriate routines.

Mon Jun  8 01:21:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* function.c: Define current_function_cannot_inline.
	(push_function_context_to): Save it.
	(pop_function_context_from): Restore it.
	* function.h (struct function): Provide it a home.
	* output.h: Declare it.
	* integrate.c (function_cannot_inline_p): Check it.

Mon Jun  8 10:43:15 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (force_operand): Detect PIC address loads before
	splitting arithmetic.

Mon Jun  8 09:22:38 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Jun  8 02:55:56 1998  Graham  <grahams@rcp.co.uk>

	* tree.c (tree_class_check): Add braces to eliminate ambiguous
	else warning.
	(tree_check): Likewise.

Mon Jun  8 02:49:23 1998  H.J. Lu  (hjl@gnu.org)

	* reg-stack.c (subst_stack_regs_pat): Make sure the top of
	stack is the destination for conditional move insn.

Mon Jun  8 01:21:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (TREE_VEC_END): Cast unused value to void.

	* i386.c (print_operand): Use %lx for long operand.

Mon Jun  8 00:04:07 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (summarize_insn): Ignore rtl slot format 'i'.

Sun Jun  7 14:15:45 1998  John Carr  <jfc@mit.edu>

	* sol2.h (INIT_SUBTARGET_OPTABS): Use Solaris libc float/long long
	conversion functions.

Sun Jun  7 14:02:58 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (flag_exceptions): Default to 0.
	(compile_file): Remove flag_exceptions == 2 hack.
	(main): Call lang_init_options.
	* tree.h: Declare it.
	* c-lang.c: Implement it.
	* objc/objc-act.c: Likewise.
	
Sun Jun  7 12:27:30 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (restore_stack_block): Generate MEM and specify mode.
	* rs6000.h (STACK_SAVEAREA_MODE): SAVE_FUNCTION is VOIDmode.
	* rs6000.c (rs6000_output_load_toc_table): Use fputs.
	(output_function_profiler): Use asm_fprintf and fputs.

Sat Jun  6 12:17:12 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gencheck.c: Remove redundant stdio.h include.  Add a definition
	of xmalloc for when we are forced to link with alloca.o.

	* reload1.c (reload_reg_free_for_value_p): Use `(unsigned)1'
	instead of `1U'.

	* fold-const.c (constant_boolean_node): Make definition static to
	match the prototype.

Fri Jun  5 15:53:17 1998  Per Bothner  <bothner@cygnus.com>

	* gcc.c (lang_specific_pre_link): New LANG_SPECIFIC_DRIVER function.
	(lang_specific_extra_outfiles): New LANG_SPECIFIC_DRIVER variable.
	(do_spec, input_filename, input_filename_length): Make public.
	(main): Adjust outfiles allocation by lang_specific_extra_outfiles.
	Call lang_specific_pre_link befor elinking.

Fri Jun  5 12:29:28 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (rank_for_schedule): For "equally good insns", prefer
	the insn which has the most insns dependent on it.

Fri Jun  5 09:03:22 1998  John Carr  <jfc@mit.edu>

	* alias.c (find_base_value): Avoid reading past	end of reg_base_value.

Fri Jun  5 03:05:34 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (insxh-1): New insxl pattern for combine.

Fri Jun  5 01:12:15 1998  H.J. Lu  (hjl@gnu.org)

	* i386/i386.c (output_fp_conditional_move): New function
	to output floating point conditional move.
	(output_int_conditional_move): New function to output integer
	conditional move.

	* i386/i386.md (movsicci+5, movhicc+5, movdicc+5): Call
	output_int_conditional_move () to output int conditional move.
	(movsfcc+5, movdfcc+5, movxfcc+5): Call
	output_fp_conditional_move () to output floating point
	conditional move.

	* i386/i386.c (put_condition_code): In INT mode, check
	cc_prev_status.flags & CC_NO_OVERFLOW for GE and LT.

Thu Jun  4 16:09:51 1998  Dave Brolley  <brolley@cygnus.com>

	* dbxout.c (dbxout_type): Output arrays of bits as if
	they were bitstrings for Chill

Thu Jun  4 14:35:27 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* tree.c (get_inner_array_type): New function.
	* tree.h (get_inner_array_type): Prototype.
	* expr.h (STACK_SAVEAREA_MODE): New macro.
	* expr.c (expand_builtin_setjmp): Initialize sa_mode using
	STACK_SAVEAREA_MODE.
	(expand_builtin_longjmp): Likewise.
	* explow.c (emit_stack_save): Likewise.
	(allocate_dynamic_stack_space): Use Pmode not insn_operand_mode.

	* rs6000/aix41.h (ASM_CPU_SPEC): Define relative to ASM_DEFAULT_SPEC.
	(CPP_CPU_SPEC): Define relative to CPU_DEFAULT_SPEC.
	* rs6000/aix43.h: New file.
	* rs6000/t-aix43: New file.
	* rs6000/x-aix41: New file.
	* rs6000/x-aix43: New file.
	* configure.in (rs6000-ibm-aix*): Use them.
	* rs6000/powerpc.h: Delete.
	* rs6000/sysv4.h: Move necessary powerpc.h definitions to here,
	* rs6000/netware.h: and here,
	* rs6000/win-nt.h: and here.

	* rs6000/rs6000.c (processor_target_table, 620): Do not affect
	MASK_POWERPC64.
	(rs6000_override_options): Ignore flag_pic for AIX.
	(rs6000_immed_double_const): Delete.
	(u_short_cint_operand): Don't assume 32-bit CONST_INT.
	(reg_or_u_short_operand): Don't assume 32-bit CONST_INT.
	(num_insns_constant): mask64_operand() is 2 insns.
	(logical_operand): Don't assume 32-bit CONST_INT.
	(non_logical_cint_operand): Don't assume 32-bit CONST_INT.
	(easy_fp_constant): Any CONST_DOUBLE_HIGH is okay for 64-bit.
	(mask_constant): HOST_WIDE_INT parameter.
	(non_and_cint_operand): Delete.
	(mask64_operand): New function.
	(and64_operand): New function.
	(function_arg_advance): DImode arguments do not need special
	alignment when 64-bit.
	(function_arg): Likewise.
	(setup_incoming_varargs): Reverse reg_size assignment.
	(print_operand): HOST_WIDE_INT second parameter.
	(print_operand, 'B'): New case.
	(print_operand, 'M'): Fix typo in lossage string.
	(print_operandm 'S'): New case.
	(rs6000_stack_info): Reverse reg_size assignment.  Use total_raw_size
	to compute AIX push_p.  Use reg_size to compute {cr,lr}_save_offset.
	(rs6000_output_load_toc_table): Reverse init_ptr assignment.  Use
	TARGET_64BIT not TARGET_POWERPC64.  Convert fprintf to fputs.
	Load GOT highpart, don't add it.  Add lowpart with {cal|la}.
	(rs6000_allocate_stack_space): Use {cal|la}.
	(output_epilog): Use {cal|la}
	(output_function_profiler): Add call glue to mcount call.
	Load GOT highpart, don't add it.  Add lowpart with {cal|la}.

	* rs6000/rs6000.h (TARGET_SWITCHES): Add powerpc64.
	(STACK_BOUNDARY): Depend on TARGET_32BIT.
	(ADJUST_FIELD_ALIGN): Calculate array alignment using innermost type.
	(CONST_OK_FOR_LETTER_P): Don't assume 32-bit CONST_INT.
	(EXTRA_CONSTRAINTS): Remove NT 'S' and 'T'.  Replace 'S' with
	64-bit mask operand.
	(RS6000_SAVE_TOC): Depend on TARGET_32BIT.
	(STACK_SAVEAREA_MODE): New macro.
	(LEGITIMATE_CONSTANT_P): DImode okay for 64bit.
	(LEGITIMIZE_RELOAD_ADDRESS): New macro.
	(RTX_COSTS, AND/IOR/XOR): Reflect current machine description.
	(ASM_FILE_START): Emit 64-bit ABI directive.
	(ASM_DECLARE_FUNCTION_NAME): Align CSECT on doubleword in 64-bit mode.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY): DImode okay for 64-bit.
	(PREDICATE_CODES): Add "and64_operand" and "mask64_operand".
	Delete "non_and_cint_operand".  "input_operand" includes CONST_DOUBLE.

	* rs6000/rs6000.md (iorsi3, xorsi3): Use HOST_WIDE_INT for mask.
	Restore define_splits.
	(floatsidf2, floatunssidf2): Remove !TARGET_POWERPC64 final constraint.
	(floatsidf2_internal, floatunssidf2_internal2): Likewise.
	Do not specify base register operand mode.
	(floatsidf2_loadaddr): Do not specify base register operand mode.
	(floatsidf2_store1, floatsidf2_store2): Operand 1 must be base
	register; do not specify mode.  Remove !TARGET_POWERPC64 final
	constraint.
	(floatsidf2_load): Do not specify base register operand mode.  Remove
	!TARGET_POWERPC64 final constraint.
	(fix_truncdfsi2_internal, fix_truncdfsi2_{store,load}): Do not specify
	base register operand mode.
	(adddi3): Split large constants early.
	(absdi3): Shift by 63, not 31.
	(*mulsidi3_ppc64): New pattern.
	(rotldi3): Add masking combiner patterns.
	(anddi3): Add rldic{r,l} masking.  Remove split of large constants
	because PPC insns zero-extend.
	(iordi3, xordi3): Split large constants early.
	(movsi matcher): Remove S and T constraints.
	(movsf const_double): Create SImode constant from TARGET_DOUBLE.
	(movdf_hardfloat32): Add default abort() case.
	(movdf easy_fp_const): Create DImode constant from TARGET_DOUBLE.
	(movdi): Remove 64-bit constant generator.  Try to convert
	CONST_DOUBLE to CONST_INT.  Handle TOC memory constants.
	(movdi_32): Add default abort() case.
	(movdi_64): Add numerous ways to split 64-bit constants.
	Make catch-all define_split more optimal and never FAIL.
	(movti_ppc64): Add default abort() case.
	(allocate_stack): Remove operand modes.  Use Pmode.
	(restore_stack_block): Remove operand modes.  Generate Pmode
	temporary.
	(save_stack_nonlocal, restore_stack_nonlocal): Generate Pmode
	temporary.  Save area is double Pmode.
	(call_indirect_aix64, call_value_indirect_aix64): New patterns.
	(call, call_value): Do not specify address operand mode.  Choose
	appropriate AIX ABI.
	(*call_local64, *ret_call_local64): New patterns.
	(*call_nonlocal_aix64, *ret_call_nonlocal_aix64): New patterns.
	(*ret_call_nonlocal_aix32): Use call_value_indirect for REG.
	(compare): Materialize DImode truthvalues.

Thu Jun  4 01:26:57 1998  Craig Burley  <burley@gnu.org>

	* expr.c (safe_from_p): Avoid combinatorial explosion
	over duplicate SAVE_EXPRs by ensuring we never recurse
	on one that has already been visited.

Thu Jun  4 00:54:21 1998  Graham  <grahams@rcp.co.uk>

	* loop.c (check_dbra_loop): Initialize final_value before
	normalizing the loop.

Wed Jun  3 20:00:04 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): New arguments out and
	reloadnum.  Changed all callers.

1998-06-03  Ulrich Drepper  <drepper@cygnus.com>

	* system.h: Add _() and N_() macros in preparation for gettext.

Wed Jun  3 11:02:24 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* c-common.c (check_format_info): Put back check for C9x `hh'
	length modifier.  Warn about %n format writing into const.  Remove
	obsolete comment.
	(format_char_info): Fix comments.

	* configure.in: Set float_format to m68k for all m68k targets that
	do not override LONG_DOUBLE_TYPE_SIZE.
	* config/float-m68k.h: New file.

Tue Jun  2 23:14:01 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (jump_optimize): Remove debug messages accidentally left in
	with the previous change.

Tue Jun  2 22:46:08 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (store_expr): Revert stray patch associated with
	1998-05-23 commit.

Tue Jun  2 21:59:01 1998  Richard Henderson  <rth@cygnus.com>

	* jump.c (rtx_unsafe_p): New function.
	(jump_optimize): Use it on if/then/else transformations and
	conditional move transformations.

Tue Jun  2 22:50:10 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.

Tue Jun  2 22:28:31 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* expr.c (emit_move_insn_1): When moving complex values in several
	steps, emit a CLOBBER to show the destination dies.

Tue Jun  2 22:17:26 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (site.exp): Use the object testsuite directory as
	the temporary directory.

	* expr.c (expand_expr, case ADDR_EXPR): Handle taking the
	address of an ADDRESSOF rtx.

1998-06-02  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.
	* tm.texi (BUILTIN_SETJMP_FRAME_VALUE): Document new macro.

Tue Jun  2 14:02:38 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (divsi3, udivsi3, modsi3, umodsi3): Enable, and work
	around an OSF/1 library bug wrt sign-extension of inputs.

Tue Jun  2 13:02:44 1998  Richard Henderson  <rth@cygnus.com>

	* vax/netbsd.h (DWARF2_UNWIND_INFO): Must be undef, not defined 0.

Mon Jun  1 03:44:03 1998  Catherine Moore  <clm@cygnus.com>

	* config/sh/sh.h (MAX_OFILE_ALIGNMENT): Define.

	* varasm.c (assemble_variable): Augment alignment warning.

Mon Jun  1 12:14:28 1998  Michael Meissner  <meissner@cygnus.com>

	* config/fp-bit.c (_fp{add,div}_parts): Return correct IEEE result
	in the presence of IEEE negative 0's.

Sun May 31 16:11:41 1998  John Wehle  (john@feith.com)

	* reload.c (find_reloads): Record the existing mode if
	operand_mode == VOIDmode before replacing a register with
	a constant.
	* i386.md (tstsi, tsthi, tstqi, tstsf, tstdf, tstxf): Set
	i386_compare_op1 to const0_rtx for the benefit of the
	conditional move patterns.
	(movsicc, movhicc, movsfcc, movdfcc, movxfcc, movdicc): Rewrite
	based on suggestions from Jim Wilson.

Sun May 31 00:44:02 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun May 31 00:34:17 1998  Bruce Korb  <korbb@datadesign.com>

	* Makefile.in (fixinc.sh): Update rules again.

Sun May 31 00:27:47 1998  Jeffrey A Law  (law@cygnus.com)

	* extend.texi: Bring back reference to trampoline paper.

Sun May 31 00:22:34 1998  Ulrich Drepper  <drepper@cygnus.com>

	* Makefile.in (USER_H): Add stdbool.h.
	* ginclude/stdbool.h: New file.

Fri May 29 01:48:25 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (thread_jumps): Do not look at the NOTE_LINE_NUMBER
	of a non-note insn.

	* gcse.c (pre_delete): Fix code to determine the mode of
	the reaching pseudo register.

Fri May 29 01:07:28 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* Makefile.in (GEN): Add gencheck.
	(STAGESTUFF): Add tree-check.h and gencheck.

Fri May 29 00:57:37 1998  Bruce Korb  <korbb@datadesign.com>

	* Makefile.in (cstamp-h.in): Remove before trying to recreate.
	(fixinc.sh): Set some additional environment variables before
	calling mkfixinc.sh.

Thu May 28 12:57:05 1998  Jeffrey A Law  (law@cygnus.com)

	* reload.c (find_reloads): Do not force a reloads of match_operators.

Thu May 28 10:22:22 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (remove_handler): Add new prototype.
	* except.c (remove_handler): New function to remove handlers
	from an exception region.
	* flow.c (find_basic_blocks_1): Remove handlers from regions when
	handler label is deleted; remove exception regions with no handlers.

Thu May 28 09:36:39 1998  Michael Meissner  <meissner@cygnus.com>

	* except.h (rtx): Define rtx type correctly if needed.
	* function.h (rtx): Likewise.
	(tree): Define tree type correctly if needed.

	* c-pragma.c (toplevel): Include rtl.h.

	* stor-layout.c (toplevel): Move include of rtl.h before
	except.h.

	* Makefile.in (c-pragma.o): Add except.h, rtl.h dependencies.
	(tree.o): Add except.h dependency.

Wed May 27 22:02:40 1998  Jeffrey A Law  (law@cygnus.com)

	* reload1.c: Revert accidental checkin.

	* configure.lang: Fix thinko when adding a definition for
	target_alias to the Makefile.

Wed May 27 02:50:00 1998  Catherine Moore  (clm@cygnus.com)

	* config/sparc/lb1spc.asm (.rem and .urem): Replace
	routines.

Wed May 27 02:48:31 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (arm_gen_constant): Rework to eliminate uninitialized
	variable warnings.  Don't generate scratch registers if only
	counting insns.
	(find_barrier): Eliminate unused variable SRC.

1998-05-27  Manfred Hollstein  <manfred@s-direktnet.de>

	* toplev.h (rtx_def): Provide global declaration to avoid
	`limited scope' warnings.

Tue May 26 23:47:52 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* Makefile.in (gencheck.o): Use HOST_CC.
	* i386/t-mingw32: New file.
	* configure.in (i386-*-mingw32*): Use.

Tue May 26 07:31:04 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.c (bad_signed_byte_operand): New predicate function.
	* arm.h (PREDICATE_CODES): Add it to the list.
	* arm.md (*extendqi[sh]i_insn): Split any addresses that ldrsb
	can't handle.
	(define_split): Two new splits for above insns.

	* arm.c: Include toplev.h.
	(arm_override_options): Add parentheses around use of tune_flags.
	(arm_split_constant): Remove unused variable.
	(arm_gen_constant, arm_gen_movstrqi, add_constant): Likewise.
	(output_func_prologue, arm_expand_prologue): Likewise.
	(arm_canonicalize_comparison): Make I unsigned; rework constants
	accordingly.  Add missing parentheses around << operation.
	(arm_rtx_costs): Correctly parenthesize MULT costs.  Add a DEFAULT
	clause.
	({load,store}_multiple_sequence): Initialize BASE_REG.
	(select_dominance_cc_mode): Add DEFAULT clauses.
	(broken_move): Return zero if the destination is not a register.
	(arm_reorg): Move unused REGNO declaration into the dead code.
	* arm.h (CANONICALIZE_COMPARISON): Ensure OP1 is updated.

Mon May 25 22:49:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon May 25 11:56:24 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon May 25 14:00:13 1998  Dave Brolley  <brolley@cygnus.com>

	* cpperror.c (v_cpp_message): Remove static prototype.
	* cpplib.c (v_cpp_message): Move prototype to cpplib.h.
	* cpplib.h (v_cpp_message): Add protoptype.
	(stdarg.h,varargs.h): Needed for v_cpp_message prototype.

Sun May 24 20:36:15 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun May 24 02:08:57 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1998-05-24  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.h: Declare more functions used in macros.
	(REG_CLASS_CONTENTS): Completely embrace initializer.
	* m68k.md (adddi3, subdi3): Add abort call to avoid warning
	about returning no value.
	* cse.c (find_best_addr): Declare p and found_better only if
	needed.
	* dbxout.c (dbxout_continue): Define only if DBX_CONTIN_LENGTH > 0.
	* dwarfout.c (string_length_attribute): #if 0 away.
	* function.c (expand_function_end): Define varible blktramp only
	if needed.
	* jump.c (find_insert_position): Define only if !HAVE_cc0.
	* loop.c (combine_givs_p): Define variable tem only if needed.
	* real.c: Comment out unused functions eabs, eround,
	e{24,53,64,113}toasc and eiinfin.

Sat May 23 23:44:53 1998  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* Makefile.in (boostrap2-lean, bootstrap3-lean,
	bootstrap4-lean): New targets.

Sat May 23 23:35:14 1998  Jeffrey A Law  (law@cygnus.com)

	* warn_summary, test_summary: Moved into the contrib directory.

1998-05-23  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (ENQUIRE_CFLAGS, ENQUIRE_LDFLAGS): Move down to the end
	of the Makefile.
	(FLOAT_H_TEST): Likewise.
	(ENQUIRE): Likewise.
	(float.h-nat): Likewise.
	(float.h-cross): Likewise.
	(enquire): Likewise.
	(enquire.o): Likewise.
	(stmp-int-hdrs): Fix comment about enquire; depend upon gfloat.h.
	(stmp-headers): Move actions to stmp-int-hdrs, retaining only a
	no-op.
	(FLOAT_H): Remove old float.h-nat version; move current definition
	to CROSS_FLOAT_H location.
	(all.cross): Remove comments about enquire stuff.

	* Makefile.in (all.cross): Swap $(LIBGCC) and $(STMP_FIXPROTO).
	(rest.encap): Likewise.
	(libgcc2.ready): Depend upon $(STMP_FIXPROTO)

	* toplev.h (tree_node): Provide global declaration to avoid
	`limited scope' warnings.

Sat May 23 23:23:35 1998  Robert Lipe  <robertl@dgii.com>

	* test_summary: Display section breaks for each entry
	in a multilibbed target's output.

1998-05-23  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_expr): For {BITFIELD,COMPONENT,ARRAY}_REF, if the
	offset's mode is not ptr_mode, convert it.

1998-05-22  Jason Merrill  <jason@yorick.cygnus.com>

	* fold-const.c (ssize_binop): New fn.
	* tree.h: Declare it.

Fri May 22 03:42:05 1998  Richard Earnshaw  (rearnsha@arm.com)

	* genextract.c (print_path): Handle zero-length path as a special
	case.

Fri May 22 01:38:07 1998  Hans-Peter Nilsson  <hp@axis.se>

	* cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767.

Fri May 22 00:57:00 1998  Bernd Schmidt  (crux@pool.informatik.rwth-aachen.de>

	* final.c (JUMP_TABLES_IN_TEXT_SECTION): Provide a default value.
	(shorten_branches, final_scan_insn): Test value of
	JUMP_TABLES_IN_TEXT_SECTION instead of just testing whether it
	is defined.
	* tm.texi (JUMP_TABLES_IN_TEXT_SECTION): Corresponding changes.
	* arm/coff.h: Define JUMP_TABLES_IN_TEXT_SECTION to 1.
	* arm/tcoff.h: Likewise.
	* i386/386bsd.h: Likewise.
	* i386/freebsd-elf.h: Likewise.
	* i386/freebsd.h: Likewise.
	* i386/netbsd.h: Likewise.
	* i386/ptx4-i.h: Likewise.
	* i386/sysv4.h: Likewise.
	* pa/pa.h: Likewise.
	* rs6000/linux.h: Likewise.
	* rs6000/rs6000.h: Likewise.
	* sh/sh.h: Likewise.
	* sparc/sp64-elf.h: Likewise.
	* v850/v850.h: Likewise.
	* rs6000/sysv4.h: Define JUMP_TABLES_IN_TEXT_SECTION to 0.
	* i386/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION to (flag_pic).

Thu May 21 19:50:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c (gen_add3_insn): New function.
	(fixup_match_2): Use it instead of calling gen_addsi3.

Thu May 21 23:09:50 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (gencheck): Depend on HOST_LIBDEPS.

	* alias.c (rtx_equal_for_memref_p): Handle SCRATCH as a memory
	address.

Thu May 21 20:18:13 1998  Martin von Loewis  <loewis@informatik.hu-berlin.de>

	* Makefile.in (TREE_H): Add tree-check.h.
	(tree-check.h, gencheck): New targets.
	* gencheck.c: New file.
	* tree.c (tree_check, tree_class_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.

Wed May 20 23:44:28 1998  John Wehle  (john@feith.com)

	* acconfig.h (HAVE_GAS_MAX_SKIP_P2ALIGN): New tag.
	* configure.in: Check for it.
	* i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Use it.
	* final.c (uid_align, uid_shuid, label_align): Make static.
	(label_align): Change type to struct label_alignment pointer.
	(LABEL_TO_ALIGNMENT, shorten_branches): Update due to type change.
	(LABEL_TO_MAX_SKIP): Define.
	(LABEL_ALIGN_MAX_SKIP, LOOP_ALIGN_MAX_SKIP,
	LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Provide defaults.
	(shorten_branches): Record the maximum bytes to skip when
	aligning a label.
	(final_scan_insn): Use the maximum bytes to skip when aligning a label
	if ASM_OUTPUT_MAX_SKIP_ALIGN is available.
	* i386.h (LOOP_ALIGN_MAX_SKIP,
	LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Define.
	* i386.c (override_options): i386_align_jumps and i386_align_loops
	default to 4 if ASM_OUTPUT_MAX_SKIP_ALIGN is available.
	* invoke.texi: Document new i386 align-loops and align-jumps behavior.

1998-05-21  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (do_type): Handle volatile qualification.

Thu May 21 12:23:17 1998  Per Bothner  <bothner@cygnus.com>

	* function.c (init_function_start): Don't call emit_line_note if
	lineno is 0.  (Can happen when compiling Java .class files.)

Thu May 21 19:50:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): Fix RELOAD_FOR_INPUT
	end of lifetime and RELOAD_FOR_OUTPUT start of lifetime.

Thu May 21 19:32:27 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* combine.c (nonzero_bits): For paradoxical subregs, take
	LOAD_EXTENDED_OP into account.

Thu May 21 11:51:15 1998  Dave Brolley  <brolley@cygnus.com>

	* configure.in (extra_c_objs): Add prefix.o.
	(extra_cxx_objs): Extra objects for C++ with cpplib.
	* configure: Regenerate.

	* c-tree.h (get_directive_line): Different prototype for cpplib.
	(GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.

	* c-lex.h (get_directive_line): Not needed here for cpplib.

	* c-lex.c (yy_cur,yy_lim,yy_get_token): Move to c-common.c.
	(GET_DIRECTIVE_LINE): Move to c-common.c and rename to get_directive_line.

	* c-common.c (parse_in,parse_options,cpp_token): Declare for cpplib.
	(yy_cur,yy_lim,yy_get_token,get_directive,line): Moved here from c-lex.c

Thu May 21 09:04:42 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gengenrtl.c (type_from_format, accessor_from_format): Change
	type of parameter `c' from `char' to `int'.

Wed May 20 22:28:34 1998  Jeffrey A Law  (law@cygnus.com)

	* warn_summary, test_summary: New scripts from
	Kaveh Ghazi and Alexandre Oliva respectively.

	* gcse.c (current_function_calls_longjmp): Declare.

1998-05-20  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (base_type_die): Use int_size_in_bytes.

Wed May 20 01:11:02 1998  Doug Evans  (devans@cygnus.com)
			  Jeff Law  (law@cygnus.com)

	* Global CSE and constant/copy propagation.
	* Makefile.in (OBJS): Add gcse.o.
	(STAGESTUFF): Add *.gcse.
	(gcse.o): Add dependencies.
	(mostlyclean): Remove *.gcse and */*.gcse.
	* gcse.c: New file.
	* loop.c (loop_optimize): Move call to init_alias_analysis.
	* recog.c (validate_replace_src): New function.
	* toplev.c (gcse_dump): New global variable.
	(flag_gcse, gcse_time): Likewise.
	(compile_file): Initialize gcse_time and clean out the gcse dump
	file if necessary.
	(rest_of_compilation): Call gcse_main as requested.  Dump RTL
	after gcse if requested.
	(main): Enable gcse for -O2 and above.  Handle -dG.  Enable gcse
	dumps for -da.
	* gcc.texi: Add gcse related internal documentation.
	* invoke.texi: Note new command line options for gcse.
	* tm.texi: Document AVOID_CCMODE_COPIES.
	* mips.h (AVOID_CCMODE_COPIES): Define.

Tue May 19 22:31:20 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (deduced.h): Only run scan-types if $(SYSTEM_HEADER_DIR)
	exists.
	(stmp-fixproto): Simlarly for running fixproto.
	* cross-make (SYSTEM_HEADER_DIR): Now $(tooldir)/sys-include.

Tue May 19 19:08:52 1998  Jim Wilson  <wilson@cygnus.com>

	* config/mips/mips.c (double_memory_operand): Accept any MEM during
	reload when TARGET_64BIT.

Tue May 19 18:21:25 1998  Jim Wilson  <wilson@cygnus.com>

	Finish incomplete change started by Kenner.
	* configure.in (*-*-linux-gnu*): Delete NO_STAB_H from xm_defines.
	(powerpcle-*-cygwin32): Delete xm_defines.
	* final.c, mips-tfile.c, xcoffout.c, config/mips/mips.c: Use
	HAVE_STAB_H instead of NO_STAB_H.
	* config/xm-linux.h (NO_STAB_H): Delete.
	(HAVE_STAB_H): Undefine.
	* config/i386/xm-go32.h (NO_STAB_H): Delete.

1998-05-19  Jim Wilson  <wilson@cygnus.com>

	* dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Ignore
	LANG_TYPE trees with DECL_SOURCE_LINE of 0.

Tue May 19 15:07:54 1998  Todd Vierling  <tv@netbsd.org>

	* arm/netbsd.h: Ensure DWARF2_UNWIND_INFO is undefined.

Tue May 19 17:19:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload_reg_free_for_value_p): New function.
	(allocate_reload_reg, choose_reload_regs): Use it.

Tue May 19 11:51:00 1998  Andrew MacLeod  (amacleod@cygnus.com)

	* except.c (expand_start_catch): Correct logic for when to
	generate a new handler label, and when to use the old one.

Tue May 19 11:08:52 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (print-rtl.o): Depend on bitmap.h.
	(dbxout.o): Depend on toplev.h.
	($(SCHED_PREFIX)sched.o): Likewise.
	($(out_object_file)): Likewise for system.h and toplev.h.
	(cppmain.o): Depend on gansidecl.h.
	(cpplib.o): Likewise.
	(cpperror.o): Likewise.
	(cppexp.o): Likewise.
	(cpphash.o): Likewise.
	(cppalloc.o): Likewise.
	(fix-header.o): Depend on cpplib.h and cpphash.h.
	(scan-decls.o): Depend on gansidecl.h.

	* basic-block.h (free_regset_vector): Add prototype.

	* cccp.c (check_precompiled): Mark parameter `fname' with
	ATTRIBUTE_UNUSED.
	(do_assert): Likewise for `op' and `keyword'.
	(do_unassert): Likewise.
	(do_line): Likewise for `keyword'.
	(do_error): Likewise for `op' and `keyword'.
	(do_warning): Likewise.
	(do_ident): Likewise for `keyword'.
	(do_pragma): Likewise for `limit', `op' and `keyword'.
	(do_sccs): Likewise.
	(do_if): Likewise for `keyword'.
	(do_elif): Likewise.
	(do_else): Likewise.
	(do_endif): Likewise.

	* collect2.c (getenv): Remove redundant prototype.
	(collect_exit, collect_execute, dump_file): Likewise.
	(dump_list): Wrap prototype and definition in COLLECT_EXPORT_LIST.
	(dump_prefix_list): Hide prototype and definition.

	* sparc.c: Include toplev.h.
	(intreg_operand): Mark parameter `mode' with ATTRIBUTE_UNUSED.
	(symbolic_memory_operand): Likewise.
	(sp64_medium_pic_operand): Likewise.
	(data_segment_operand): Likewise.
	(text_segment_operand): Likewise.
	(splittable_symbolic_memory_operand): Likewise.
	(splittable_immediate_memory_operand): Likewise.
	(eq_or_neq): Likewise.
	(normal_comp_operator): Likewise.
	(noov_compare_op): Likewise.
	(v9_regcmp_op): Likewise.
	(v8plus_regcmp_op): Likewise.
	(extend_op): Likewise.
	(cc_arithop): Likewise.
	(cc_arithopn): Likewise.
	(small_int): Likewise.
	(uns_small_int): Likewise.
	(clobbered_register): Likewise.
	(legitimize_pic_address): Likewise.
	(delay_operand): Likewise.
	(sparc_builtin_saveregs): Remove unused variable `stdarg'.

	* sparc.h (order_regs_for_local_alloc, eligible_for_return_delay,
	sparc_issue_rate, v8plus_regcmp_p): Add prototypes.

	* sparc.md (cmpdi_v8plus): Add abort for default case in switch.

	* cppalloc.c: Include gansidecl.h.

	* cpperror.c: Include stdarg.h/varargs.h and gansidecl.h.
	(cpp_file_line_for_message): Mark parameter `pfile' with
	ATTRIBUTE_UNUSED.
	(v_cpp_message): New function.
	(cpp_message): Use it.  Also convert to variable arguments.
	(cpp_fatal): Likewise.
	(cpp_pfatal_with_name): Constify parameter `name'.

	* cppexp.c: Move gansidecl.h before cpplib.h.
	* cpphash.c: Likewise.
	* cpphash.h (hashf, delete_macro): Add prototypes.

	* cpplib.c: Include stdarg.h/varargs.h and move gansidecl.h before
	cpplib.h.  Don't include errno.h.
	(update_path): Add arguments to prototype.
	(cpp_fatal, cpp_file_line_for_message, cpp_message, delete_macro,
	cpp_print_containing_files): Remove redundant prototypes.
	(cpp_hash_cleanup, add_import, append_include_chain,
	make_assertion, path_include, initialize_builtins,
	initialize_char_syntax, finclude, validate_else, comp_def_part,
	lookup_import, redundant_include_p, is_system_include,
	read_name_map, read_filename_string, open_include_file,
	check_macro_name, compare_defs, compare_token_lists,
	eval_if_expression, change_newlines): Add prototype arguments.
	(hashf): Remove redundant prototype.
	(read_token_list, free_token_list, safe_read, xcalloc, savestring,
	conditional_skip, skip_if_group): Add prototype arguments.
	(fdopen): Remove redundant prototype.
	(do_define, do_line, do_include, do_undef, do_error, do_pragma,
	do_ident, do_if, do_xifdef, do_else, do_elif, do_endif, do_sccs,
	do_once, do_assert, do_unassert, do_warning): Add prototype arguments.
	(struct directive): Add prototype arguments to function pointer
	member `func'.
	(handle_directive): Add missing arguments to call to `do_line'.
	(do_include): Mark parameters `unused1' and `unused2' with
	ATTRIBUTE_UNUSED.
	(do_line): Likewise for `keyword' and new parameters `unused1' and
	`unused2'.
	(do_error): Likewise for `keyword'.
	(do_warning): Likewise.  Also add missing argument `pfile' in call
	to cpp_pedwarn.
	(do_once): Mark parameter `keyword', `unused1' and `unused2' with
	ATTRIBUTE_UNUSED.
	(do_ident): Likewise for `keyword', `buf' and `limit'.
	(do_pragma): Likewise.  Also add missing arguments in call to do_once.
	(do_sccs): Mark parameter `keyword', `buf' and `limit' with
	ATTRIBUTE_UNUSED.
	(do_if): Likewise for `keyword'.
	(do_elif): Likewise.
	(eval_if_expression): Likewise for `buf' and `length'.
	(do_xifdef): Likewise for `unused1' and `unused2'.
	(do_else): Likewise for `keyword', `buf' and `limit'.
	(do_endif): Likewise.
	(parse_name): Add missing argument `pfile' in call to cpp_pedwarn.
	(cpp_handle_options): Remove superfluous NULL argument in call to
	cpp_fatal.
	(cpp_handle_options): Likewise.
	(do_assert): Mark parameter `keyword', `buf' and `limit' with
	ATTRIBUTE_UNUSED.
	(do_unassert): Likewise.
	(cpp_print_file_and_line): Add missing argument `pfile' in call to
	cpp_file_line_for_message.
	(v_cpp_error): New function.
	(cpp_error): Use it. Also accept variable arguments.
	(v_cpp_warning): New function.
	(cpp_warning): Use it. Also accept variable arguments.
	(cpp_pedwarn): Accept variable arguments.
	(v_cpp_error_with_line): New function.
	(cpp_error_with_line): Use it.  Accept variable arguments.
	(v_cpp_warning_with_line): New function.
	(cpp_warning_with_line): Use it.  Accept variable arguments.  Hide
	definition.
	(cpp_pedwarn_with_line): Accept variable arguments.
	(cpp_pedwarn_with_file_and_line): Likewise.
	(cpp_error_from_errno): Constify parameter `name'.  Add missing
	argument `pfile' in call to cpp_file_line_for_message.
	(cpp_perror_with_name): Constify parameter `name'.

	* cpplib.h: Define PARAMS() in terms of PROTO().
	(fatal): Remove redundant prototype.
	(cpp_error, cpp_warning, cpp_pedwarn, cpp_error_with_line,
	cpp_pedwarn_with_line, cpp_pedwarn_with_file_and_line,
	cpp_error_from_errno, cpp_perror_with_name, cpp_pfatal_with_name,
	cpp_fatal, cpp_message, cpp_pfatal_with_name,
	cpp_file_line_for_message, cpp_print_containing_files): Add
	arguments to prototypes.
	(scan_decls, cpp_finish): Add prototypes.

	* cppmain.c: Include gansidecl.h.
	(main): Remove unused variable `i'.

	* dbxout.c: Include toplev.h.

	* demangle.h (do_tlink, collect_execute, collect_exit,
	collect_wait, dump_file, file_exists): Add prototype.

	* dwarf2out.c (dwarf_type_encoding_name, decl_start_label): Hide
	prototype and definition.
	(gen_unspecified_parameters_die): Don't assign results of call to
	function new_die() to unused variable `parm_die'.
	(dwarf2out_line): Mark parameter `filename' with ATTRIBUTE_UNUSED.
	(dwarf2out_define): Likewise for `lineno' and `buffer'.

	* dwarfout.c (output_unsigned_leb128, output_signed_leb128): Hide
	prototype and definition.
	(output_die): Add prototype arguments to function pointer arg.
	(output_unspecified_parameters_die): Mark parameter `arg' with
	ATTRIBUTE_UNUSED.

	* except.c (output_exception_table_entry): Remove unused variable
	`eh_entry'.

	* except.h (expand_fixup_region_start, expand_fixup_region_end):
	Add prototypes.

	* expr.c (do_jump_by_parts_equality_rtx): Remove prototype.

	* expr.h (do_jump_by_parts_equality_rtx): Add prototype.

	* fix-header.c: Include stdarg.h/varargs.h, move gansidecl.h
	before cpplib.h, include cpphash.h, remove redundant prototype of
	cpp_fatal, don't define `const', add a prototype for `fatal'.
	(cpp_file_line_for_message): Add missing arguments `pfile'.
	(v_cpp_message): New function.
	(cpp_message): Use it.
	(v_fatal): New function.
	(fatal, cpp_fatal): Use it.
	(cpp_pfatal_with_name): Constify parameter `name'.

	* flow.c (free_regset_vector): Remove redundant prototype.

	* function.c (round_down): Wrap prototype and definition with
	macro ARGS_GROW_DOWNWARD.
	(record_insns): Wrap prototype and definition with
	defined (HAVE_prologue) || defined (HAVE_epilogue).

	* gansidecl.h (ATTRIBUTE_PRINTF_4, ATTRIBUTE_PRINTF_5): New macros.

	* gen-protos.c: Include gansidecl.h.
	(hashf): Don't make it static, constify parameter `name'.

	* genattrtab.c (check_attr_test): Change XEXP() to XSTR() to match
	specifier %s in calls to function `fatal'.

	* haifa-sched.c: Include toplev.h.
	(find_rgns): Remove unused variable `j'.

	* integrate.c (note_modified_parmregs): Mark parameter `x' with
	ATTRIBUTE_UNUSED.
	(mark_stores): Likewise.

	* jump.c (mark_modified_reg): Likewise.

	* output.h (insn_current_reference_address): Add prototype.
	(eh_frame_section): Likewise.

	* print-rtl.c: Include bitmap.h.

	* reload1.c (reload): Wrap variables `note' and `next' in macro
	PRESERVE_DEATH_INFO_REGNO_P.
	(forget_old_reloads_1): Mark parameter `ignored' with
	ATTRIBUTE_UNUSED.
	(choose_reload_regs): Remove unused variable `in'.
	(reload_cse_invalidate_mem): Mark parameter `ignore' with
	ATTRIBUTE_UNUSED.
	(reload_cse_check_clobber): Likewise.

	* rtl.h (expand_null_return, reg_classes_intersect_p): Add prototype.
	(mark_elimination): Fix typo in prototype.

	* scan-decls.c: Include gansidecl.h.

	* tree.h (using_eh_for_cleanups, supports_one_only): Add prototype.

Mon May 18 22:37:33 1998  Jeffrey A Law  (law@cygnus.com)

	* function.c (identify_blocks): Fix thinko when setting the
	block number for NOTE_INSN_BLOCK_END.

Mon May 18 15:30:42 1998  Nick Clifton  <nickc@cygnus.com>

	* config/v850/lib1funcs.asm: Add .text pseudo op to start of
	___udivsi3.

	* config/v850/lib1funcs.asm: Fix .size pseudo ops to use three
	underscores for the prefixes to the names of the maths functions.

	* dbxout.c (dbxout_parms): Revert to using DECL_ARG_TYPE.  Add
	comment explaining why.

Mon May 18 13:20:23 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (TYPE_SIZE_UNIT): New.
	(struct tree_type): Add size_unit member.
	* stor-layout.c (layout_type): Initialize it.
	* expr.c (get_inner_reference) [ARRAY_REF]: Use it.
	* tree.c (size_in_bytes, int_size_in_bytes): Likewise.

Mon May 18 12:07:37 1998  Richard Earnshaw  (rearnsha@arm.com)

	* stor-layout.c (layout_record): Fix off-by-one error when checking
	length of the TYPE_BINFO vector.

Mon May 18 10:59:23 1998  Nick Clifton  <nickc@cygnus.com>

	* dbxout.c (dbxout_parms): Use TREE_ARG to compute the type of a
	function parameter passed in memory.

Mon May 18 09:02:09 1998  Robert Lipe  <robertl@dgii.com>

	* dwarfout.h, dwarf2out.h, dbxout.h, sdbout.h: New files.
	Prototypes for externally used functions in respective C files.
	* dwarfout.c, dbxout.c, dwarf2out.c, sdbout.c, toplev,c,
	final.c: Include above files.
	* Makefile.in (toplev.o): Add dependency for above four headers.
	(final.o): Likewise.
	(dwarfout.o, dbxout.o, dwarf2out.o, sdbout.o): Depend on four
	respective header files.

Mon May 18 01:23:33 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (TARGET_TOOLPREFIX): No longer define.
	(AR_FOR_TARGET, RANLIB_FOR_TARGET): Define to use versions in
	the build tree if they exist.
	(AR, AR_FLAGS, OLDAR, OLDAR_FLAGS, RANLIB, RANLIB_TEST): Update
	appropriately.
	(objdir): Let configure substitute value.
	(FLOAT_H): Let configure select a pre-built version from the
	config subdir.
	* build-make (INSTALL_TARGET, ALL): Disable, no longer needed.
	* configure.in: Substitute for objdir.

	* Makefile.in (build_canonical, host_canonical): Let configure
	substitute values for these variables.
	* configure.in: Substitute for build_canonical, host_canonical
	and target_subdir in generated Makefile.

	* output.h (find_basic_blocks): Declare.
	(free_basic_block_vars, set_block_num, life_analysis): Likewise.

	* Makefile.in (BISON): Use bison from the build tree if it exists.
	(FLEX): Similarly.

Mon May 18 00:08:19 1998  Nick Clifton  <nickc@cygnus.com>

	* gcc.c (SWITCH_CURTAILS_COMPILATION): Definition.
	(DEFAULT_SWITCH_CURTAILS_COMPILATION): True for options -S and -c.
	(process_command): If HAVE_EXECUTABLE_SUFFIX is defined then scan
	command line arguments to see if an executable is not being
	created, and if so - do not append the suffix.

	* tm.texi (SWITCH_CURTAILS_COMPILATION): Add description of new
	driver macro.

Sun May 17 23:59:45 1998  John Wehle  (john@feith.com)

	* i386.h (ALIGN_DFmode): Delete.
	(CONSTANT_ALIGNMENT): Define.
	* varasm.c (force_const_mem): Use it.

Sun May 17 19:31:05 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_emit_conditional_branch): Clear cmp_code after
	using it with swap_condition, not before.

Sun May 17 13:44:32 1998  Jim Wilson  <wilson@cygnus.com>

	* alias.c (mode_alias_check): Delete.
	(true_dependence, anti_dependence, output_dependence): Revert April 21
	change.

Sun May 17 08:45:21 1998  Krister Walfridsson  <cato@df.lth.se>

	* toplev.c (output_lang_identify): Enable prototype and definition.

Sun May 17 01:12:27 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat May 16 23:20:32 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/osf.h (HAVE_STAMP_H): Define.
	* alpha.c: Use it.
	* alpha/netbsd.h, alpha/netbsd-elf.h: New files.
	* configure.in (alpha*-*-netbsd*): New.
	Based on patches from Paul H. Anderson <pha@pdq.com>.

	* configure.in (alpha*-*-linux-*): Kill xm_defines.
	(alpha*-*-linux-gnulibc1*) [fixincludes]: Define.
	* alpha/xm-linux.h: Remove file.

Sat May 16 18:32:45 1998  Doug Evans  <devans@canuck.cygnus.com>

	* dbxout.c (dbxout_parms): If mode of type of parameter living
	in memory doesn't match mode of DECL_RTL, make big endian correction.

Fri May 15 21:40:06 1998  John Wehle  (john@feith.com)

	* i386.md (movdi-1, movdi): Rewrite based on SI move patterns.

Fri May 15 18:55:22 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (BINFO_SIZE, TYPE_BINFO_SIZE): New macros.
	* stor-layout.c (layout_record): Set it.

Fri May 15 18:49:30 1998  Mark Mitchell  <mmitchell@usa.net>

	* toplev.c (rest_of_compilation): Don't defer nested functions.

Fri May 15 17:42:52 1998  Bob Manson  <manson@charmed.cygnus.com>

	* config/rs6000/rs6000.c (rs6000_stack_info): Align the stack bottom
	to an 8-byte boundary if info_ptr->fpmem_p.

Fri May 15 17:36:11 1998  Bill Moyer  <ttk@cygnus.com>

	* loop.c (basic_induction_var): Added test preventing
	CCmode parameter passed to convert_modes().

Fri May 15 17:26:18 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* expr.c (expand_expr, case EXPR_WITH_FILE_LOCATION): Save/restore
	input_filename and lineno around expand_expr call.  Set them to values
	in WFL before expand_expr call.

Fri May 15 12:44:57 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* stor-layout.c (set_sizetype): Set TYPE_NAME on bitsizetype.

Fri May 15 07:20:03 1998  Mark Mitchell  <mmitchell@usa.net>

	* fold-const.c (constant_boolean_node): New function.
	(fold): Use it.

Fri May 15 11:21:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_shl_and): Don't sign extend constant for kind two.
	Abort if trying to split kind 3 or 4 outside of combine.

Fri May 15 01:47:37 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (print_operand, case 'x'): Use HOST_WIDE_INT_PRINT_HEX.

Fri May 15 01:42:45 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* objc/Make-lang.in (OBJC_O): Add missing exeext.
	(libobjc.a, runtime-info.h): Likewise.

Fri May 15 01:29:39 1998  John Wehle  (john@feith.com)

	* i386.h (DATA_ALIGNMENT): Define.

Fri May 15 05:35:37 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (delete_output_reload): Ignore single USE that
	was emitted for the pseudo use of this INSN.
	If the no reference to REG between OUTPUT_RELOAD_INSN and INSN
	remains, we can always delete OUTPUT_RELOAD_INSN.

Thu May 14 18:38:50 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads): Don't penalize SCRATCH output reload.

Thu May 14 15:10:30 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (expr.o): Remove dependency on deleted modemap.def file.

Thu May 14 16:30:47 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* eh-common.h: New file for basic EH data structures.
	* except.h: Various prototypes and structures for NEW_EH_MODEL.
	* function.h (struct function): Add a struct eh_stack for the catch
	clause stack.
	* except.c (gen_exception_label): New function to generate an
	exception label.
	(push_eh_entry): Use gen_exception_label() and init 'label_used' field.
	(push_entry): New function to push an existing entry onto a stack.
	(receive_exception_label): New function to emit the code required
	at the start of all catch blocks.
	(struct func_eh_entry): New structure for maintaining handlers
	associated with EH regions.
	(new_eh_region_entry): New function to register an EH region.
	(add_new_handler): New function to register a handler with a region.
	(get_new_handler): Creates  anew handler entry for registering.
	(find_func_region): New function to convert a NOTE eh region number
	to an Eh region index.
	(get_first_handler): New function to get the first handler in a region.
	(clear_function_eh_region): New function to release memory.
	(duplicate_handlers): New function to duplicate a list of handlers.
	(expand_eh_region_end): Create a new region entry node as well.
	(expand_leftover_cleanups): Call receive_exception_label() and
	register the cleanup as a handler to the current region.
	(expand_start_catch): New function to start a catch clause.
	(expand_end_catch): New function to end a catch clause.
	(expand_start_all_catch): Restructure to not do the equivalent of
	what expand_start_catch() does now. Push the exception region being
	handled onto the catch stack.
	(output_exception_table_entry): Issue an entry for each handler
	associated with a region.
	(set_exception_lang_code): New function for setting the language code.
	(set_exception_version_code): New function to set the version number.
	(output_exception_table): Output version and language codes.
	(find_exception_handler_labels): Find handler labels using new scheme.
	(is_exception_handler_label): New function, returns 1 if label is
	present as a handler in some exception region.
	(check_exception_handler_labels): Use the new scheme.
	(init_eh_for_function): Initialize the catch stack.
	(save_eh_status): Save the catch stack.
	(restore_eh_status): Restore the catch stack.
	(scan_region): Don't remove unreferenced handler label. Flow does it.
	(get_reg_for_handler): New function to get the eh_context pointer
	passed by __throw.
	(expand_builtin_eh_stub): Changes required for NEW_EH_MODEL only.
	* final.c (final_scan_insn): With NEW_EH_MODEL, add EH table
	entry when processing END region rather that START region.
	* flow.c (find_basic_blocks_1): Find all potential handler regions
	now that we don't automatically know what the labels might be.
	Let scan_region() remove unreferenced EH BEGIN/END labels.
	* integrate.c (get_label_from_map): Put inlined labels onto the
	permanent obstack since we don't know which ones might be exception
	labels.
	(save_for_inline_copying): Make new copies of all the handlers.
	(expand_inline_function): Make new copies of all the handlers.
	* libgcc2.c: Remove local struct decls, and include eh-common.h.
	(find_exception_handler): With NEW_EH_MODEL the first matching
	region we find is the right one. Add eh_info as a new parameter.
	(__throw): Pass eh_info to find_exception_handler. Set handler
	and pass use different regs  under NEW_EH_MODEL.

Thu May 14 12:58:21 1998  Jim Wilson  <wilson@cygnus.com>

	* i960.h (hard_regno_mode_ok): Changed to function from array of
	unsigned.
	(HARD_REGNO_MODE_OK): Call function instead of testing bit.
	* i960.c (hard_regno_mode_ok): Changed to function from array of
	unsigned.

Thu May 14 08:41:46 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (remove_replacements): New function.
	* reload.h (remove_replacements): Declare.
	* reload1.c (choose_reload_regs): Disable some reloads that
	belong to inherited reloads.

Thu May 14 02:17:17 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (scan_loop): Don't call move_movables for optimize_size.

	* reload1.c (merge_assigned_reloads): When merging, reset
	reload_spill_index for the eliminated reload.

Wed May 13 17:51:13 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (schedule_insns): Fix merge goof.

1998-05-13  Jim Wilson  <wilson@cygnus.com>

	* varasm.c (make_decl_rtl): Revert April 1 change.
	* alpha/alpha.h, alpha/win-nt.h, arm/arm.h, i386/unix.h, i960/i960.h,
	m68k/linux.h, pa/pa.h, sparc/sparc.h, vax/vax.h (ASM_OUTPUT_MI_THUNK):
	Get function name from the SYMBOL_REF in the DECL_RTL, not from
	DECL_ASSEMBLER_NAME.
	* i386/winnt.c (gen_stdcall_suffix): Comment for questionable use of
	DECL_ASSEMBLER_NAME.

Wed May 13 13:09:19 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.c (notice_update_cc, output_float_compare): Disable
	TARGET_CMOVE support.

Wed May 13 15:28:59 1998  Michael Meissner  <meissner@cygnus.com>
			  Jeff Law  <law@cygnus.com>

	* rtlanal.c (find_reg_note): Ignore notes that are not on on
	insns of class 'i'.
	(find_regno_note): Likewise.

	* Makefile.in (stor-layout.o): Depend on except.h.
	(varasm.o, function.o): Likewise.
	(expr.o): Depend on except.h, modemap.def and hard-reg-set.h.

	* Makefile.in (HOST_RTL): Add $(HOST_PREFIX)bitmap.o.
	(rtl.o, emit-rtl.o): Add dependency on bitmap.h.
	($(HOST_PREFIX_1)rtl.o): Likewise.
	($(HOST_PREFIX_1)bitmap.o): New host object.
	* emit-rtl.c (toplevel): Include bitmap.h.
	(gen_rtx): Handle 't' and 'b' nodes.
	* print-rtl.c (print_rtx): Handle printing NOTE_INSN_LIVE notes.
	Print block number for block begin/end notes.  Print 't' type
	nodes as a pointer.  Know that the 3rd argument of live range
	start/stop notes is really a range_info rtx.  If type is 'b', print
	out argument as a bitmap.
	* rtl.c: Include bitmap.c.
	(copy_rtx): Copy tree nodes as is.  Copy bitmaps if type is 'b'.
	(note_insn_name): Add NOTE_INSN_RANGE_{START,END}, NOTE_INSN_LIVE.
	* rtl.def (RANGE_LIVE): New node to hold live information while we
	recalculate the basic blocks.
	(RANGE_REG, RANGE_INFO): New rtl types for live range splitting.
	(RANGE_VAR): New node, to hold information saved in symbol node for New
	communicating live range information to the debug output functions.
	* rtl.h (rtunion_def): Add rttree and rtbit fields.
	(XBITMAP, XTREE): New accessor macros.
	(NOTE_LIVE_INFO): Overload NOTE_SOURCE_FILE for NOTE_INSN_LIVE notes.
	(NOTE_RANGE_INFO): Similarly for NOTE_INSN_RANGE_{START,END} notes.
	(NOTE_BLOCK_LIVE_RANGE_BLOCK): Define.
	(NOTE_INSN_RANGE_START, NOTE_INSN_RANGE_END, NOTE_INSN_LIVE): New notes.
	(RANGE_LIVE_{BITMAP,ORIG_BLOCK}): New accessor macros.
	(RANGE_REG_{SYMBOL,BLOCK}_NODE, RANGE_VAR_*): New accessor macros.
	(RANGE_INFO_*): Likewise.
	* sched.c (sched_analyze): Keep live range start/stop notes.
	(unlink_other_notes): Likewise.
	* haifa-sched.c (sched_analyze): Keep live range start/stop notes.
	(unlink_other_notes): Likewise.
	* tree.h (BLOCK_LIVE_RANGE_{START,END,VAR_FLAG}): New accessor macros.
	(BLOCK_LIVE_RANGE_FLAG): Likewise.
	(DECL_LIVE_RANGE_RTL): Likewise.
	(struct tree_block): Add live_range_flag, live_range_var_flag,
	live_range_start and live_range_end.
	(struct tree_decl): Add live_range_rtl field.
	* gengenrtl.c (type_from_format): Handle 'b' and 't'.
	(accessor_from_format): Likewise.

	* haifa-sched.c (schedule_block): Make verbose output line up.
	Also add a blank line in printing the individual ready lists.

Wed May 13 15:43:44 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (c-lang.o): Depend on c-tree.h, c-lex.h and toplev.h.
	(c-lex.o): Depend on output.h.
	(c-common.o): Likewise.
	(stmt.o): Likewise.
	(calls.o): Likewise.
	(integrate.o): Depend on toplev.h.
	(regclass.o): Depend on output.h.
	(final.o): Depend on reload.h.

	* c-common.c: Include output.h.
	(check_format_info): Remove unused variable `integral_format'.

	* c-decl.c (print_lang_decl): Mark parameters `file', `node' and
	`indent' with ATTRIBUTE_UNUSED.
	(print_lang_type): Likewise.
	(maybe_build_cleanup): Likewise for parameter `decl'.
	(copy_lang_decl): Likewise for parameter `node'.

	* c-lang.c: Include c-tree.h, c-lex.h and toplev.h.
	(lang_print_xnode): Mark parameters `file', `node' and `indent'
	with ATTRIBUTE_UNUSED.
	(lookup_interface): Likewise for parameter `arg'.
	(is_class_name): Likewise.
	(maybe_objc_check_decl): Likewise for parameter `decl'.
	(maybe_objc_comptypes): Likewise for parameters `lhs', `rhs' and
	`reflexive'.
	(maybe_objc_method_name): Likewise for parameter `decl'.
	(build_objc_string): Likewise for parameters `len' and `str'.

	* c-lex.c: Include output.h.

	* c-lex.h (position_after_white_space): Correct typo in prototype.

	* c-tree.h (finish_file, c_expand_start_cond, c_expand_start_else,
	c_expand_end_cond, init_iterators): Add prototypes.

	* caller-save.c (set_reg_live): Mark parameters `reg' and `setter'
	with ATTRIBUTE_UNUSED.

	* calls.c: Include output.h.

	* cccp.c (pipe_closed): Mark parameter `signo' with
	ATTRIBUTE_UNUSED.

	* combine.c: Move inclusion of expr.h to after insn-config.h.

	* iris6.h (ASM_IDENTIFY_GCC, ASM_IDENTIFY_LANGUAGE): Don't define
	as empty, rather define as ((void)0).

	* sparc.c (sparc_check_64): Add braces around ambiguous `else'.
	Add parentheses around assignment used as truth value.

	* cplus-dem.c (squangle_mop_up): Change return type to void.
	(internal_cplus_demangle): Remove unused parameter `options'.
	All callers changed.
	(cplus_demangle_opname): Remove function wide variable `int i' and
	replace with `size_t i' at each location where it is used.
	(cplus_demangle_opname): Change type of `i' from int to size_t.

	* cppexp.c (right_shift): Mark parameter `pfile' with
	ATTRIBUTE_UNUSED.

	* cpphash.c (cpp_lookup): Likewise.
	(cpp_hash_cleanup): Likewise.

	* cpplib.c (parse_name): Add a prototype and make it static.
	(null_underflow): Mark parameter `pfile' with ATTRIBUTE_UNUSED.
	(null_cleanup): Likewise for parameters `pbuf' and `pfile'.
	(macro_cleanup): Likewise for parameter `pfile'.
	(file_cleanup): Likewise.

	* cpplib.h (cpp_reader_init, cpp_options_init, cpp_start_read,
	cpp_read_check_assertion, skip_rest_of_line): Add prototypes.

	* crtstuff.c (force_to_data, __CTOR_LIST__, force_to_data,
	__DTOR_END__, __FRAME_END__): Mark with ATTRIBUTE_UNUSED.

	* cse.c (cse_check_loop_start): Mark parameter `set' with
	ATTRIBUTE_UNUSED.

	* dbxout.c (flag_minimal_debug, have_used_extensions,
	source_label_number): Move inside macro wrapper check against
	defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO).

	* dwarf2out.c (gen_entry_point_die): Hide prototype and definition.

	* except.h (doing_eh): Provide prototype.

	* expr.c: Move inclusion of expr.h to after insn-config.h.

	* final.c: Include reload.h.
	(shorten_branches): Cast the first argument of bzero to char *.

	* fix-header.c (cpp_print_containing_files): Mark parameter
	`pfile' with ATTRIBUTE_UNUSED.
	(cpp_fatal): Likewise.

	* flow.c (find_basic_blocks_1): Cast the first argument of bzero
	to char *.

	* genattrtab.c (make_length_attrs): Change the type of variable
	`i' from int to size_t.
	(zero_fn): Mark parameter `exp' with ATTRIBUTE_UNUSED.
	(one_fn): Likewise.

	* genextract.c (main): When generating insn-extract.c, mark
	variable `junk' with ATTRIBUTE_UNUSED.

	* gengenrtl.c (gencode): When generating genrtl.c, cast the first
	argument of bzero to char*.

	* integrate.c: Include toplev.h.

	* libgcc2.c: Wrap `struct exception_table' and
	`find_exception_handler' in macro DWARF2_UNWIND_INFO.

	* objc/Make-lang.in (objc-act.o): Depend on toplev.h.

	* objc/objc-act.c: Include toplev.h.
	(lang_print_xnode): Mark parameters `file', `node' and `indent'
	with ATTRIBUTE_UNUSED.
	(finish_protocol): Likewise for parameter `protocol'.

	* output.h (declare_weak): Add prototype.
	(decode_reg_name): Don't wrap with TREE_CODE macro.
	(assemble_alias): Add prototype.

	* regclass.c: Include output.h.

	* reload.h (reloads_conflict): Add prototype.

	* rtl.h (print_rtl_single, mark_elimination, reg_class_subset_p,
	output_func_start_profiler): Add prototypes.

	* rtlanal.c (reg_set_p_1): Mark parameters `x' and `pat' with
	ATTRIBUTE_UNUSED.

	* scan-decls.c: Include scan.h.

	* scan.h (recognized_function, recognized_extern): Add prototypes.

	* stmt.c: Include output.h.

	* toplev.c (error_for_asm, warning_for_asm): Remove prototypes.
	(output_lang_identify): Hide prototype and definition.
	(float_signal): Mark parameter `signo' with ATTRIBUTE_UNUSED.
	(pipe_closed): Likewise.

	* toplev.h (count_error, strip_off_ending, error_for_asm,
	warning_for_asm): Add prototypes.

Wed May 13 12:54:19 1998  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (rest_of_compilation): "Charge" final for any time
	doing various cleanup operations after finishing compilation
	of a function.

	* flow.c (dump_flow_info): Also print number of sets and
	whether or not the pseudo is a user variable.

	* flow.c (reg_n_max): New global variable.
	* regclass.c (allocate_reg_info): Keep reg_n_max up to date.
	Delete regno_max variable.
	* regs.h (REG_N_CHECK): Define.
	(REG_N_REFS, REG_N_SETS, REG_N_DEATHS): Use REG_N_CHECK.
	(REG_N_CHANGES_SIZE, REG_N_CALLS_CROSSED, REG_LIVE_LENGTH): Likewise.
	(REGNO_FIRST_UID, REGNO_LAST_UID, REGNO_LAST_NOTE_UID): Likewise.

Wed May 13 12:54:19 1998  Martin von Loewis  <martin@mira.isdn.cs.tu-berlin.de>

	* acconfig.h (ENABLE_CHECKING): Undefine.
	* configure.in (--enable-checking): New option.

Wed May 13 08:52:08 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (merge_assigned_reloads): Can merge
	RELOAD_FOR_INPUT_ADDRESS and RELOAD_FOR_OTHER_ADDRESS even
	if RELOAD_FOR_INPUT with the same reload_reg_rtx is present.

Tue May 12 20:05:57 1998  Jim Wilson  <wilson@cygnus.com>

	* collect2.c (main): Ignore do_collecting when COLLECT_EXPORT_LIST.

Wed May 13 03:23:45 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (gen_reload): Create REG_EQUIV notes.

Tue May 12 22:21:07 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload1.c (reload): Fix check for USEs to use code of pattern.
	(choose_reload_regs): Remove dead variable use_insn.

Tue May 12 14:04:49 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (DBX_CONTIN_LENGTH): Reduce to 3000 bytes.

Tue May 12 15:16:02 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (HAIFA_INLINE): Define to be __inline unless
	already defined.
	(find_insn_{,mem_}list): Use HAIFA_INLINE, not __inline.
	(insn_{unit,issue_delay}): Likewise.
	(blockage_range): Likewise.
	(actual_hazard{,_this_instance}): Likewise.
	(schedule_unit): Likewise.
	(potential_hazard): Likewise.
	(insn_cost): Likewise.
	(swap_sort): Likewise.
	(queue_insn): Likewise.
	(birthing_insn_p): Likewise.
	(adjust_priority): Likewise.
	(get_block_head_tail): Likewise.
	(init_rgn_data_dependences): Likewise.

Tue May 12 10:27:54 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha/vms.h (COMMON_ASM_OP, ASM_OUTPUT_ALIGNED_COMMON): Define.

Tue May 12 11:44:14 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/mips.h (ASM_OUTPUT_ALIGN): Remove trailing semi-colon.

Tue May 12 11:38:31 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/mips.md (dslot): Move after definition of "cpu"
	attribute.  Handle r3900 case.

Tue May 12 10:21:36 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Define the STRINGIFY macro here.
	* protoize.c: Not here.
	* gengenrtl.c (DEF_RTL_EXPR): Use the STRINGIFY macro.

Tue May 12 00:47:33 1998  John Wehle  (john@feith.com)

	* varasm.c (assemble_variable): Compute the alignment of the data
	earlier so that both initialized and uninitialized variables are
	effected by DATA_ALIGNMENT.
	* tm.texi (DATA_ALIGNMENT): Updated appropriately.

Mon May 11 19:57:58 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c: Prototype static functions.

Mon May 11 17:43:03 1998  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (fixup_match_2, find_matches, regmove_profitable):
	Add explanatory comments.

	* sparc.h (SPARC_INCOMING_INT_ARG_FIRST): Support TARGET_FLAT.

Mon May 11 17:24:27 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.md (ffsdi2): Disable.  Simplify the expression as well.

Mon May 11 13:30:44 1998  Jim Wilson  <wilson@cygnus.com>

	* varasm.c (make_decl_rtl): Disable April 1 change.

Mon May 11 09:14:41 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-gnu): Undo lossage from gcc2 merge.

Mon May 11 08:24:18 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Add '`'.
	* alpha.c (print_operand): Handle it.
	* alpha.md (fix_truncdfsi2, fix_truncsfsi2): New patterns and
	related define_splits.  Also add peepholes for SImode reload
	plus sign_extend lossage.

Mon May 11 09:33:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* genattr.c: Include stdarg.h/varargs.h.  Change function
	`fatal' to use variable arguments instead of faking it with
	integer parameters.  Provide a prototype which also
	checks the format specifiers using ATTRIBUTE_PRINTF_1.

	* genattrtab.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* genoutput.c: Likewise.  Similarly for function `error'.

Sun May 10 02:27:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* acconfig.h (HAVE_VOLATILE): Insert stub for autoconf.
	* alocal.m4 (GCC_C_VOLATILE): New autoconf test.
	* configure.in: Use GCC_C_VOLATILE.
	* system.h (volatile): Define as empty if no volatile support is
	available.

Sun May 10 01:21:43 1998  Jeffrey A Law  (law@cygnus.com)

	* genemit.c (output_add_clobbers): Removed unused variable 'i' from
	generated function.

Sat May  9 02:02:15 1998  Richard Henderson  <rth@cygnus.com>

	* loop.c (get_condition): Don't combine when either compare is MODE_CC.
	* alpha.c (alpha_emit_conditional_branch): New function.  Taken from
	the body of beq; additionally set the mode of the branch to CCmode for
	FP compares and not fast_math.
	(alpha_emit_conditional_move): Always use a compare insn for FP
	when not fast_math, as well as setting CCmode on the cmov.
	* alpha.md (beq, bne, blt, et al): Call alpha_emit_conditional_branch.

	* machmode.h (COMPLEX_MODE_P): New macro.

Sat May  9 01:53:23 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (print_exp): Fix typo.

Fri May  8 21:48:50 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri May  8 18:23:08 1998  Michael Meissner  <meissner@cygnus.com>

	* final.c (final_scan_insn): Call fatal_insn instead of abort if
	we could not split an insn when required to.

	* m32r.md ({add,sub}di3): Add define_splits and appropriate low
	level insns.
	(peepholes): Disable peepholes that call dead_or_set_p.
	(movsi): Rewrite to handle addresses better after last change.
	Add define_split to split load of addresses in large/medium modes.
	(prologue): Call m32r_expand_prologue.
	(movsi_{push,pop}): Generators for push/pop.
	(movsi): Support PRE_{INC,DEC}, POST_INC.
	(mov{di,df}): Rewrite.  Always split the insns.
	(movsf): Add define_split to get register load in correct mode.
	(cmp_ne_small_const_insn): Use 'N' instead of 'S' constraint.
	(attributes): Rewrite attributes so that type indicates both the
	type and the length of the insn directly.
	(all insns): Change to use new type attributes.
	(debug): New attribute to convey whether -mdebug was used.
	(opt_space): New attribute to convey whether -Os was used.
	(function units): Loads are 3 cycles, not 2.  Better classify all
	insns into short/long.
	(load/store/extend insns): Add separate case for load/store
	indirect operations without an offset.
	(divsi3): Division is a long operation, not short.

	* m32r.h (LEGITIMATE_LO_SUM_ADDRESS_P): Do not allow LO_SUM for
	modes > 1 word.
	(GO_IF_MODE_DEPENDENT_ADDRESS): LO_SUM is now mode dependent.
	(CONST_OK_FOR_LETTER_P): Make 'N' handle reverse 8 bit compares.
	(EXTRA_CONSTRAINT): Remove 'S' special support.  Add 'U' for
	operands with PRE_{INC,DEC}, POST_INC.
	(FUNCTION_PROFILER): Call abort instead of doing nothing.
	(GO_IF_LEGITIMATE_ADDRESS): Allow PRE_{INC,DEC}, POST_INC of
	SImode variables.
	(gen_split_move_double): Declare.
	(EXTRA_CONSTRAINT): Add 'T' for memory reference with no offset.

	* m32r.c (gen_split_move_double): Fix typo.  Also, don't call
	emit_move_insn, build up SET's directly.
	(toplevel): Include system.h, not stdio.h.
	(move_double_src_operand): Allow any DF or DI mode constant.
	(gen_split_move_double): Split moves of DI or DF values into the
	appropriate moves, loads, or stores.  Don't handle use of auto
	inc/dec if using dead index.  Do handle overlapping moves, etc.
	(m32r_frame_info): Remove prologue_size field.
	(m32r_compute_frame_size): Don't calculate prologue size.
	(m32r_output_function_prologue): Change to pretty much a NOP.
	(m32r_expand_prologue): Expand prologue as a series of INSNs.
	(m32r_print_operand): Add support for PRE_{INC,DEC}, POST_INC.
	(m32r_print_operand_address): Likewise.

Fri May  8 14:13:21 1998  H.J. Lu  (hjl@gnu.org)

	* reload1.c (emit_reload_insns): When performing expensive
	optimizations, do not output the last reload insn if OLD is
	not the dest of NSN and is in the src and is clobbered by INSN.

Fri May  8 09:47:29 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (genrtl.o): Depend on system.h.
	* gengenrtl.c (gencode): When creating genrtl.c, have it
	include system.h.

Fri May  8 10:57:33 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/t-linux: Remove extra stuff already included in
	config/t-linux.

Fri May  8 09:53:24 1998  Paul Eggert  <eggert@twinsun.com>

	* fixinc.wrap: Renamed from fixinc.math.  Put wrapper around
	curses.h if it contains `typedef char bool;', as suggested by
	Manfred Hollstein <manfred@s-direktnet.de>.

	* configure.in: Rename fixinc.math to fixinc.wrap.

Thu May  7 19:26:34 1998  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (read_specs): Handle missing blank line at end of specs file.

	* i386.md (movsicc, movhicc, movsicc_1, movhicc_1, movsfcc_1,
	movdfcc_1): Disable.

Thu May  7 15:39:14 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (enable_threads): Rename to enable_threads_flag before
	main loop.  Set enable_threads to enable_threads_flag inside main
	loop.

Thu May  7 17:38:03 1998  Michael Meissner  <meissner@cygnus.com>

	* r6000/eabi.asm (__eabi): Restore LR in case __eabi is called
	multiple times.

Thu May  7 14:26:05 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_VFPRINTF_DOPRNT): New macro.

	* configure.in: Add a call to GCC_FUNC_VFPRINTF_DOPRNT.
	(AC_CHECK_HEADERS): Remove unused check for varargs.h,sys/varargs.h.
	(AC_CHECK_FUNCS): Remove unused check for vprintf.

	* Makefile.in: Add support for linking in vfprintf.c and doprint.c.
	(cccp.o): Depend on gansidecl.h.
	(cexp.o): Likewise.

	* cccp.c: Convert from using PRINTF_ALIST/PRINTF_DCL to VPROTO as
	per the rest of gcc source.
	* cexp.y: Likewise.  Include gansidecl.h and remove all code made
	redundant.

	* cccp.c: Remove checks for HAVE_VPRINTF and the associated code
	used when vfprintf is missing.
	* cexp.y: Likewise.
	* gcc.c: Likewise.
	* genattrtab.c: Likewise.
	* mips-tfile.c: Likewise.
	* toplev.c: Likewise.

	* vfprintf.c: New file.
	* doprint.c: New file.

Thu May  7 10:18:41 1998  Jeffrey A Law  (law@cygnus.com)

	* config/linux.h (ASM_COMMENT_START): Remove from here,
	* config/linux-aout.h (ASM_COMMENT_START): and here,
	* config/i386/linux.h (ASM_COMMENT_START): to here,
	* config/i386/linux-aout.h (ASM_COMMENT_START): and here.
	* config/i386/linux-oldld.h (ASM_COMMENT_START): Define
	here as '#' too.

Thu May  7 10:55:59 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.md (adddi3, subdi3): Properly negate the DImode
	constant.

Wed May  6 22:32:37 1998  Robert Lipe  <robertl@dgii.com>

	* Makefile.in (dwarfout.o): Add toplev.h dependency.
	* dwarfout.c, i386.c: Include toplev.h.
	* toplev.h (pfatal_with_name): Add prototype.

Wed May  6 19:02:29 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in: Fix .SUFFIXES.

Wed May  6 19:31:32 1998  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* config/linux.h (ASM_COMMENT_START): Define as "#".
	* config/linux-aout.h (ASM_COMMENT_START): Likewise.

Wed May  6 15:51:39 1998  Jim Wilson  <wilson@cygnus.com>

	* objc/Make-lang.h (objc-parse.o): Add toplev.h dependency.
	* objc/objc-parse.y, objc/objc-parse.c: Regenerate.

	* toplev.c: Include toplev.h.
	* Makefile.in (c-common.o, c-convert.o, c-decl.o, c-iterate.o,
	c-lex.o, c-parse.o, c-pragma.o, c-typeck.o, calls.o, convert.o,
	dwarf2out.o, except.o, expr.o, final.o, fold-const.o, function.o,
	hash.o, profile.o, real.o, reg-stack.o, regclass.o, reload.o,
	reload1.o, stmt.o, stor-layout.o, tlink.o, tree.o, varasm.o): Add
	toplev.h dependency.

	* mips/mips.c (save_restore_insns): Change FRAME_POINTER_REGNUM to
	HARD_FRAME_POINTER_REGNUM.

	* expr.c (target_temp_slot_level): Delete duplicate definition.

Wed May  6 16:46:01 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (mark_seen_cases): Make it have external linkage again.
	* expr.h (mark_seen_cases): Add declaration, but only when tree.h
	has been included.

	* haifa-sched.c (print_value, case SUBREG): Fix typo.

	* i386.c (output_387_binary_op): Add some braces to avoid warnings.
	* i386.h (REG_CLASS_CONTENTS): Similarly.

	* toplev.c (-fsched-max): Delete flag.
	(-fsched-interblock-max-blocks,-fsched-interblock-max-insns): Likewise.
	* haifa-sched.c: Remove -fsched-max-N, -fsched-interblock-max-blocks-N
	and -fsched-interblock-max-insns-N support.  Remove INTERBLOCK_DEBUG
	conditionals.

	* haifa-sched.c (find_rgns): Correctly handle reducible loops with
	inner loops which are not reducible.

	* loop.c (regs_match_p): Fix typo in prototype.

	* regmove.c (try_auto_increment): Wrap declaration inside an
	#ifdef AUTO_INC_DEC.

Wed May  6 17:07:47 1998  Michael Meissner  <meissner@cygnus.com>

	* final.c (output_operand_lossage): Call fatal with the operand
	lossage message instead of calling abort.

Wed May  6 15:37:27 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c: Convert to using ctype macros defined in system.h.
	* c-lex.c: Likewise.
	* cccp.c: Likewise.
	* collect2.c: Likewise.
	* rs6000.c: Likewise.
	* cpplib.c: Likewise.
	* fix-header.c: Likewise.
	* gcc.c: Likewise.
	* gen-protos.c: Likewise.
	* pexecute.c: Likewise.
	* protoize.c: Likewise.
	* rtl.c: Likewise.
	* scan.c: Likewise.
	* stmt.c: Likewise.
	* tlink.c: Likewise.
	* toplev.c: Likewise.

Wed May  6 14:44:14 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/r3900.h (SUBTARGET_ASM_DEBUGGING_SPEC) :
	Replace -gdwarf-2 with -g0.

Wed May  6 11:43:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (mips-tfile.o, mips-tdump.o): Depend on system.h.
	* mips-tdump.c: Include system.h, remove redundant headers.
	* mips-tfile.c: Likewise.  Also, convert all ctype function calls
	to calls of the macro versions defined in system.h.

	* objc/Make-lang.in (objc-act.o): Depend on system.h.
	* objc/objc-act.c: Include system.h, remove redundant headers.

Wed May  6 11:21:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* configure.in (AC_CHECK_FUNCS): Add isascii.
	(GCC_NEED_DECLARATIONS): Add atof.

	* system.h: Provide prototypes for abort, atof, atol and sbrk here.
	* rtl.c, rtl.h, toplev.c, tree.h: Not here.

Wed May  6 10:52:49 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: Wrap time.h and sys/file.h in autoconf checks.
	Provide default definitions for O_RDONLY and O_WRONLY here.

	* cccp.c, cpplib.c, fix-header.c, gcc.c, protoize.c: Not here.

1998-05-06  Mark Mitchell  <mmitchell@usa.net>

	* tree.h (IS_EXPR_CODE_CLASS): Remove bogus '3'.

Wed May  6 06:35:38 1998  Robert Lipe  <robertl@dgii.com>

	* toplev.h: New file.  Protypes for functions in toplev.c.
	* tree.h, rtl.h: Deleted protos for functions in toplev.c.
	* c-common.c, c-convert.c, c-decl.c, c-iterate.c, c-lex.c,
	c-parse.in, c-parse.y, c-pragma.c, c-typeck.c, calls.c,
	convert.c, dwarf2out.c, except.c, expr.c, final.c, fold-const.c,
	function.c, hash.c, profile.c, real.c, reg-stack.c, regclass.c,
	reload.c, reload1.c, stmt.c, stor-layout.c, tlink.c, tree.c,
	varasm.c: Include it.

Wed May  6 01:09:01 1998  Jeffrey A Law  (law@cygnus.com)
			  Jim Wilson  (wilson@cygnus.com)

	* haifa-sched.c (find_rgns): In no_loops case, fix test for leaf
	blocks.  Check for 1 successor which is the EXIT_BLOCK.

	* haifa-sched.c (find_rgns): Detect unreachable blocks, including
	unreachable loops with more than one block.

Wed May  6 08:22:24 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fix-header.c (write_rbrac): Add "abort" to functions which need to
	be protected.

Wed May  6 00:09:36 1998  Jeffrey A Law  (law@cygnus.com)

	* Check in merge from gcc2.  See ChangeLog.12 for details.

Tue May  5 14:33:49 1998  Jim Wilson  <wilson@cygnus.com>

	* c-common.c (scan_char_table): Separate 's' and 'c'.  'c' does not
	accept 'a' flag.  'S' does accept 'a' flag.
	(check_format_info): When pedantic, warn for m/C/S/a/A formats,
	and `a' flag.

	* elf64.h (MULTILIB_DEFAULTS): Move definition after mips.h include.

Tue May  5 10:50:39 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.h: Declare functions from m68k.c used in
	macros and machine description.
	(ASM_OUTPUT_LONG_DOUBLE): Always use `l' flag in print format for
	long values.
	(ASM_OUTPUT_FLOAT): Likewise.
	(ASM_OUTPUT_FLOAT_OPERAND): Likewise.

Tue May  5 01:28:12 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.def: Add NAMESPACE_DECL.
	* dwarfout.c (type_ok_for_scope): Ignore NAMESPACE_DECLs for now.
	* dwarf2out.c (push_decl_scope): Likewise.
	(scope_die_for): Likewise.
	* tree.c (decl_function_context): Use TREE_CODE_CLASS to determine
	how to get next context level.

Tue May  5 01:43:16 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.c (output_fix_trunc): Add code to emulate non-popping DImode
	case.

Tue May  5 01:15:06 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (ADDITIONAL_REGISTER_NAMES): Add "er" registers.

	* reorg.c (fill_slots_from_thread): Update REG_DEAD/REG_UNUSED notes
	for any insns skipped at the start of a block because they were
	redundant.

Mon May  4 20:23:51 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.h (DBX_CONTIN_LENGTH): Decrease to 3000.

1998-05-04  Ulrich Drepper  <drepper@cygnus.com>

	* c-common.c (format_char_info): Add new field hhlen.
	(print_char_table, scan_char_table, time_char_table): Initialize
	hhlen field appropriately.
	(char_format_info): Recognize hh modifier and lookup correct char
	table entry.

Mon May  4 19:15:29 1998  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_expr, case INDIRECT_REF): Don't optimize string
	reference if this is a store.

Mon May  4 17:25:17 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.c (output_move_quad): Fix typo in mov_by_64 argument.

Sun May  3 23:57:25 1998  Robert Lipe  <robertl@dgii.com>

	Make UnixWare 7 bootstrap support work with final shipping product.
	* configure.in (i[34567]86-*-sysv5): Append, not overwrite, xm_file.
	Pick up xm-siglist and xm-alloca.
	(xm_defines): Add USG so dbxout will build.
	* configure: Regenerate.

Sun May  3 13:51:34 1998  Richard Henderson  <rth@cygnus.com>

	Support for official SPARC V9 ABI:
	* sparc.c (sparc_override_options): Force stack bias off for !arch64.
	Care for flag_pcc_struct_return default.
	(output_move_quad): Rewrite to move by halves on v9 and in the
	proper direction.
	(move_quad_direction): New function.
	(output_fp_move_quad): Use it to determine the direction of copy.
	(function_arg_slotno): Return -1 for FP reg overflow as well.
	(function_arg_record_value*): New functions.
	(function_arg): Use them.  Streamline unprototyped parameter passing.
	(function_arg_pass_by_reference): Pass TCmode by reference.
	(function_value): New function.
	* sparc.h (PTRDIFF_TYPE, SIZE_TYPE): For -pedantic's sake, don't use
	long long in 64-bit mode.
	(RETURN_IN_MEMORY): v9 returns structs < 32-bytes in regs.
	(DEFAULT_PCC_STRUCT_RETURN): Make the default detectable.
	(BASE_RETURN_VALUE_REG): Consider complex float types for arch64.
	(BASE_OUTGOING_VALUE_REG, BASE_PASSING_ARG_REG): Likewise.
	(BASE_INCOMING_ARG_REG): Likewise.
	(FUNCTION_VALUE): Call function_value.
	(FUNCTION_OUTGOING_VALUE, LIBCALL_VALUE): Likewise.
	* sparc.md (movdi_sp32_v9): Disable for arch64.
	(movsf, movdf, movtf): Sort all alternatives using fp regs first.
	(call_value_address_sp64): Remove register class constraints.
	(call_value_symbolic_sp64): Likewise.
	(nonlocal_goto): Pass label reg directly to goto_handlers.  Constrain
	v9 case to 32-bit constants.
	(goto_handler_and_restore_v9): Provide a version for arch64.
	* sparc/linux64.h (SIZE_TYPE, PTRDIFF_TYPE): Remove private definition.
	* sparc/sp64-aout.h (TARGET_DEFAULT): Turn on stack bias.
	(CPP_PREDEFINES): New.
	* sparc/sp64-elf.h: Likewise.
	(PREFERRED_DEBUGGING_TYPE): Dwarf2.
	(ASM_OUTPUT_DWARF2_ADDR_CONST): New.
	* sparc/sysv4.h (SIZE_TYPE, PTRDIFF_TYPE): Undo svr4.h's changes.

Sat May  2 17:47:17 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat May  2 01:37:29 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads): Emit USEs to mark where a pseudo
	is reloaded with the MEM of its stack slot.
	* reload1.c (cannot_omit_stores): Delete.
	(reload): Don't initialize it.
	Don't apply avoid_return_reg logic to USEs.
	When done, remove USEs that have a REG_EQUAL note on them.
	(emit_reload_insns): Handle case where we have inherited a MEM.
	(choose_reload_regs): Likewise.
	(delete_output_reload): Don't use cannot_omit_stores.

Thu Apr 30 18:59:03 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (cpp.info, gcc.info): Put -o option before input file.

Thu Apr 30 16:57:34 1998  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (print_{exp,value}): Various changes to make the
	debug output easier to read.  Also, use only one buffer, and make
	sure the buffer we are passed in doesn't overflow.
	(safe_concat): Concatenate to a buffer without overflow.

Thu Apr 30 16:57:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* haifa-sched.c (alloc_{INSN,EXPR}_LIST): Make static to agree
	with the prototype.

Wed Apr 29 21:45:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sched.c (new_insn_dead_notes): Check if the register was
	used in the original instruction.
	* haifa-sched.c (new_insn_dead_notes): Likewise.

Wed Apr 29 13:46:03 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (scope_die_for): If could not find proper scope,
	check for and handle tagged type with incorrect TYPE_CONTEXT.

Wed Apr 29 15:34:40 1998  John Carr  <jfc@mit.edu>

	* calls.c (expand_call): Fix recognition of C++ operator new.

	* alias.c (mode_alias_check): Disable type based alias detection.

Wed Apr 29 15:06:42 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/elf.h (ASM_OUTPUT_DEF,ASM_WEAKEN_LABEL,
	ASM_OUTPUT_WEAK_ALIAS): Define.
	* config/mips/elf64.h: Same.
	* config/mips/r3900.h (ASM_OUTPUT_DEF,SUPPORTS_WEAK,
	ASM_WEAKEN_LABEL): Removed.

Wed Apr 29 10:53:29 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* calls.c (expand_call): Bump the length limit on the specially
	recognized function names to 17.

Tue Apr 28 17:53:33 1998  Jim Wilson  <wilson@cygnus.com>

	* ginclude/stddef.h: Add check for _MACHINE_ANSI_H_ for BSD/OS
	when undefining macros at the end.

	* expr.c (expand_builtin, case BUILT_IN_MEMSET): Break if either
	val or len has TREE_SIDE_EFFECTS set.

	* sparc.md (mulsidi3): Call const v8plus and v8plus routines.
	(mulsidi3_v8plus, const_mulsidi3_v8plus): Delete asterisk from name.
	(smuldi3_highpart): Call const v8plus routine.
	(smulsi3_highpart_v8plus): Renamed from smulsidi3_highpart_v8plus.
	(const_smulsi3_highpart_v8plus): New pattern.
	(smulsi3_highpart_sp32): Renamed from smulsidi3_highpart_sp32.
	(umulsidi3): Call const v8plus routine.
	(umulsi3_highpart): Handle const before v8plus.  Call const v8plus
	routine.
	(umulsi3_highpart_v8plus): Renamed from umulsidi3_highpart_v8plus.
	(umulsi3_highpart_sp32): Renamed from umulsidi3_highpart_sp32.

Tue Apr 28 08:55:26 1998  Michael Meissner  <meissner@cygnus.com>

	* m32r.c (*_oper{and|ator}): Change enum arguments and return
	values to int, so they can be prototyped even in files that don't
	include rtl.h.
	({small,large}_insn_p): Likewise.
	(m32r_select_cc_mode): Likewise.
	(gen_compare): Likewise.
	(function_arg_partial_nregs): Likewise.
	(m32r_setup_incoming_varargs): Likewise.
	(init_reg_tables): Add prototype.
	(m32r_frame_info): Add prolog_size field.
	(m32r_compute_frame_size): Calculate the size of the prologue.
	(m32r_first_insn_address): Return prologue size.
	(m32r_output_function_prologue): Calculate frame size before
	printing out information.  Print out the prologue size.

	* m32r.h: Prototype all functions in m32r.c.
	(FIRST_INSN_ADDRESS): Declare, returning prologue size.

	* m32r.md (bcc functions): Cast enum's to int.

	* m32r.c (conditional_move_operand): Silence a debug message.
	({small,long}_insn): New predicates.

	* m32r.h (TARGET_M32R): New macro.
	(PREDICATE_CODES): Rearrange somewhat, add small_insn/long_insn.
	(HAIFA_P): Define as 1/0 depending on whether the Haifa scheduler
	was selected.
	(ISSUE_RATE): Define as 2.

	* m32r.md (insn_size): New attribute.
	({,rev_}branch_insn): Add .s qualifier to branches believed to be
	short.
	(m32r): New attribute.

	* configure.in (enable_haifa): Switch m32r to Haifa by default.
	* configure: Regenerate.

	(Changes from Nick Clifton <nickc@cygnus.com>)
	* m32r.h (EXTRA_CONSTRAINT): Implement 'S' constraint to perfoirm
	the equivalent of a negated 'I' constraint.
	(PRESERVE_DEATH_INFO_REGNO_P): Define in order to allow peephole
	optimization to work.

	* m32r.md (cmp_ne_small_const_insn): Use 'S' constraint rather
	than 'I' since the value is negated.
	(peephole): Add peephole optimization to cope with optimization of
	divide and subtracts of the same operands.

	* m32r.c zero_and_one, emit_cond_move): Add support for MVFC.
	* m32r.h: Likewise.
	* m32r.md: Likewise.

	* m32r.h (PREDICATE_CODES): Add declaration of machine specific
	predicates.

Tue Apr 28 07:25:53 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (libgcc2.ready): Revert last patch (Apr 24).

Mon Apr 27 18:39:47 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Check against
	frame_pointer_rtx not FRAME_POINTER_REGNUM.

Mon Apr 27 18:36:28 1998  Jim Wilson  <wilson@cygnus.com>

	* reg-stack.c: Revert last patch (Apr 20).
	(convert_regs): Set insn to PREV_INSN (next) after do while loop.

	* m68k/lb1sf68.asm (Laddsf$3): Fix typos in mcf5200 exg code.

	* loop.c (check_dbra_loop): New locals jump, first_compare, and
	compare_and_branch.  Call get_condition to set first_compare.
	Set compare_and_branch to number of compare/branch instructions.
	Replace PREV_INSN (PREV_INSN (loop_end)) with first_compare.
	Replace '2' with compare_and_branch.

Mon Apr 27 15:53:30 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* cplus-dem.c (demangle_qualified): Replace missing else.

Mon Apr 27 20:22:08 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_ashift_hi): Don't make SUBREG of a SUBREG.

Mon Apr 27 18:23:51 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (sh_expand_prologue, sh_expand_epilogue):
	If TARGET_DOUBLE_ALIGN, preserve 64 bit stack alignment.
	* sh.h (STACK_BOUNDARY): Likewise.

Mon Apr 27 17:22:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

Mon Apr 27 08:55:23 1998  Michael Meissner  <meissner@cygnus.com>

	* system.h (abort): If abort is not defined, and neither is
	USE_SYSTEM_ABORT, redefine abort to call fprintf and exit,
	reporting the line and filename of the error.

	* .gdbinit: Add breakpoints on exit and fancy_abort.

	* final.c (split_double): Avoid a compiler warning if
	BITS_PER_WORD is less than or equal to HOST_BIT_PER_WIDE_INT.

	* rtl.h (JUMP_{CROSS_JUMP,NOOP_MOVES,AFTER_REGSCAN}): New macros
	for calling jump_optimize.

	* toplev.c (rest_of_compilation): Call jump_optimize using JUMP_*
	macros, rather than 0/1's.

Sun Apr 26 23:19:10 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.h (CONST_COSTS): Zero is always free.
	(RTX_COSTS): Add EV6 costs.  Abort if alpha_cpu is unknown.

Sun Apr 26 15:38:50 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* cplus-dem.c (gnu_special): Fix off-by-one bug when checking the
	length in the name of a virtual table.

Sun Apr 26 01:21:06 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (print_operand): Don't add 'v' suffix for ALPHA_FPTM_N.

Sat Apr 25 22:11:38 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 25 17:17:15 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c (fold_convert): Fix typo.

Sat Apr 25 17:55:54 1998  John Carr  <jfc@mit.edu>

	* alias.c (alias_invariant): New variable.
	(record_base_value): New argument INVARIANT.
	(memrefs_conflict_p): If a register has an entry in the alias_invariant
	array, try substituting that value for the register.

	* rtl.h: Declare record_base_value.

	* loop.c, unroll.c: Update callers of record_base_value.

	* alias.c (find_base_value, find_base_term): SIGN_EXTEND and
	ZERO_EXTEND do not affect base values.

Fri Apr 24 15:57:02 1998  Jeffrey A Law  (law@cygnus.com)

	* dbxout.c (dbxout_type): Fix typo.
	(dbxout_range_type): Another HOST_WIDE_INT_PRINT_DEC fix.

	* configure.in: Use CC_FOR_BUILD, not BUILD_CC.

Fri Apr 24 16:11:47 1998  John Carr  <jfc@mit.edu>

	* expr.c (expand_builtin, case MEMSET): Set MEM_IN_STRUCT_P
	if the argument is the address of a structure or array.

	* configure.in: Enable Haifa scheduler by default for SPARC.

Fri Apr 24 20:55:47 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cse.c (cse_set_around_loop): Don't do optimization when
	new pseudos are created.

Fri Apr 24 11:00:18 1998  Jeffrey A Law  (law@cygnus.com)

	* dbxout.c (dbxout_type_fields): Use HOST_WIDE_INT_PRINT_DEC
	appropriately.
	(dbxout_type_method_1, dbxout_type): Likewise.
	(print_int_cst_octal, print_octal, dbxout_symbol): Likewise.
	(dbxout_type): Fix check for when to print a type range in
	octal vs decimal.

Fri Apr 24 16:45:03 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* (gen_shl_and, in case 1): Fix comparison with mask.

Fri Apr 24 06:46:40 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h (GO_IF_LEGITIMATE_ADDRESS): Disallow frame
	pointer as second register in REG+REG pair.

Fri Apr 24 09:22:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-common.c (check_format_info): Don't check for the 'x' format
	character twice, instead check for 'x' and 'X'

Fri Apr 24 08:02:30 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (libgcc2.ready): Add explicit dependency from
	$(STMP_FIXPROTO) to ensure all necessary include files have
	been created and to guarantee proper parallel builds.

Fri Apr 24 04:42:35 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (sh_expand_prologue, in !SH3E code): Don't push an extra
	register for stdarg functions.
	* sh.h (current_function_varargs): Declare.
	(FUNCTION_ARG): Ignore NAMED for stdarg functions.

1998-04-23  Jim Wilson  <wilson@cygnus.com>

	* frame.c, libgcc2.c (stdlib.h, unistd.h): Don't include when
	inhibit_libc is defined.

	* c-aux-info.c (gen_type): Use DECL_NAME only for TYPE_DECL.

Thu Apr 23 19:09:33 1998  Jim Wilson  <wilson@cygnus.com>

	* profile.c (tablejump_entry_p): New function.
	(branch_prob): Add code to recognize MIPS tablejump entry branch.
	Use tablejump_entry_p in MIPS and HPPA tablejump checking code.

Thu Apr 23 15:01:13 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/arm.c (find_barrier): Return as soon as a barrier is
	found, rather than at end of the loop, after the insn has been
	changed.

Thu Apr 23 20:21:06 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (gen_ashift_hi): Implement right shifts via gen_ashift.
	* sh.md (ashrhi3_k, lshrhi3_k, lshrhi3_m, lshrhi3, lshrhi3+1): Delete.

Wed Apr 22 17:07:35 1998  Michael Meissner  <meissner@cygnus.com>

	* loop.c (note_addr_stored): Correct function to take 2 arguments,
	instead of 1.

	* rtl.def (MATCH_INSN2): Add new matching pattern.
	* genrecog.c (add_to_sequence): Support MATCH_INSN2.

Wed Apr 22 15:52:22 1998  John Carr  <jfc@mit.edu>

	* emit-rtl.c (gen_highpart): The high part of a CONST_INT is not zero
	if HOST_BITS_PER_WIDE_INT is larger than BITS_PER_WORD.

	* final.c (split_double): Sign extend both halves of a split CONST_INT.

Wed Apr 22 10:42:45 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (compute_frame_size): Change only argument to a HOST_WIDE_INT.

Wed Apr 22 10:53:49 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* cplus-dem.c (struct work stuff): Add field for B and K mangle codes.
	(cplus_demangle_opname): Call mop_up_squangle.
	(cplus_demangle): Initialize squangle info, then call
	internal_cplus_demangle. (Most code moved there as well)
	(internal_cplus_demangle): New function, performs most of what use
	to be done in cplus_demangle, but is only called with this file.
	(squangle_mop_up): New function to clean up B and K code data.
	(mop_up): Set pointers to NULL after freeing.
	(demangle_signature, demangle_template, demangle_class): Add
	switch elements to handle K and B codes.
	(demangle_prefix, gnu_special, demangle_qualified): Add
	code to handle K and B codes.
	(do_type, demangle_fund_type): Handle B and K codes.
	(remember_Ktype): New function to store K info.
	(register_Btype, remember_Btype): New functions for B codes.
	(forget_B_and_K_types): New function to destroy B and K info.

1998-04-21  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (check_seenlabel): When search for line number note for
	warning, handle case where there is no such note.

Tue Apr 21 20:48:37 1998  John Carr  <jfc@mit.edu>

	* genemit.c (gen_exp): Allow machine description to set mode of
	MATCH_OP_DUP.

Tue Apr 21 16:36:01 1998  John Carr  <jfc@mit.edu>

	* alias.c (mode_alias_check): New function.
	(true_dependence, anti_dependence, output_dependence): Call
	mode_alias_check.

Tue Apr 21 12:05:32 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.h (STACK_BOUNDARY): Allow specific targets to override.
	(MIPS_STACK_ALIGN): Similarly.

	* c-common.c (type_for_mode): Handle TI types.
	* c-decl.c (intTI_type_node, unsigned_int_TI_type_node): Define.
	(init_decl_processing): Handle TI types.
	* c-tree.h (intTI_type_node, unsigned_int_TI_type_node): Declare.

	* mips.c (block_move_loop): Test Pmode == DImode instead of
	TARGET_MIPS64.
	(expand_block_move, save_restore_insns): Likewise.
	(function_prologue, mips_expand_prologue): Likewise.
	(mips_expand_epilogue): Likewise.
	* mips.h (POINTER_SIZE): Allow specific targets to override.
	(Pmode): Allow specific targets to override.
	(FUNCTION_PROFILER): Test Pmode == DImode instead of TARGET_MIPS64.
	(POINTER_BOUNDARY, FUNCTION_MODE): Likewise.
	(TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE): Likewise.
	(TRAMPOLINE_ALIGNMENT, INITIALIZE_TRAMPOLINE): Likewise.
	(CASE_VECTOR_MODE, ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
	(ASM_OUTPUT_ADDR_DIFF_ELT, SIZE_TYPE, PTRDIFF_TYPE): Likewise.
	* mips.md (indirect, tablejump & casesi support): Test for
	Pmode == DImode instead of TARGET_MIPS64.
	(call patterns): Likewise.

Tue Apr 21 09:43:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* objc/sendmsg.c: Define gen_rtx_MEM() to 1, as is already done
	for gen_rtx(MEM, ...).

Tue Apr 21 02:15:36 1998  Richard Henderson  <rth@cygnus.com>

	* sparc.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Rewrite
	to not be so gross, and to properly function with PIC.

Mon Apr 20 20:44:25 1998  Jim Wilson  <wilson@cygnus.com>

	* frame.c (heapsort): Rename to frame_heapsort.

	* gcc.c (do_spec_1, case '['): Move flag out of loop and initialize it.

Mon Apr 20 12:43:09 1998  Doug Evans  <devans@canuck.cygnus.com>

	* flow.c (sbitmap_vector_alloc): Ensure sbitmaps properly aligned.

Mon Apr 20 15:04:14 1998  John Wehle  (john@feith.com)

	* i386.md (movsf_push, movdf_push, movxf_push): Allow memory
	operands during and after reload.

Mon Apr 20 22:37:50 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches, init_insn_lengths): Move code
	to free label_align, uid_shuid, insn_lengths, insn_addresses
	and uid_align from the former function into the latter one;
	Add code to clear these variables.
	* sh.h (label_align): Remove declaration.

Mon Apr 20 14:48:29 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (lang_specific_driver): Declare prototype properly so
	fatal can be passed to it without error.

	* configure.in (AC_CHECK_FUNCS): Check for strchr and strrchr.
	* configure: Regenerate.
	* config.in: Add #undef's for strchr and strrchr.

	* protoize.c (toplevel): If we have rindex, but not strrchr, map
	rindex to strrchr.
	(file_could_be_converted): Use strrchr, not rindex since rindex is
	not defined on Linux systems when _POSIX_SOURCE is defined.
	(file_normally_convertible): Likewise.
	(process_aux_info_file): Likewise.
	(main): Likewise.

	* rs6000.md (mov{sf,df} define_splits): When splitting a move of
	a constant to an integer register, don't split the insns that do
	the simple AND and OR operations, rather just split each word, and
	let the normal movsi define split handle it further.

Mon Apr 20 18:19:40 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (find_barrier): Fix bug in ADDR_DIFF_VEC handling.
	(split_branches): Call init_insn_lengths.

Mon Apr 20 07:37:49 1998  Michael Meissner  <meissner@cygnus.com>

	* i386.c: Include expr.h to get the change_address prototype
	declared.

Mon Apr 20 01:00:05 1998  H.J. Lu  (hjl@gnu.org)

	* reg-stack.c (subst_asm_stack_regs): Change to return the last
	new insn generated by this function.
	(subst_stack_regs): Likewise.
	(convert_regs): Record the last newly generated insn and use
	it for change_stack () instead of INSN.

Sun Apr 19 15:41:24 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fix-header.c (enum special_file): Undefine enumerators if they
	are already defined by include files.
	* fixproto (rel_source_file in unistd.h stdlib.h): Prefix file protection
	macro with '__' to not pollute user namespace.

Sun Apr 19 02:42:06 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (queue_to_ready): Fix typo in prototype.

Sat Apr 18 23:52:35 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 18 18:30:22 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.md (fix_truncsfdi2+[123]): Add + to operand 1 constraints.

	* i386.h (CPP_CPU_DEFAULT): Renamed to CPP_CPU_DEFAULT_SPEC.
	Add missing -Dpentium* options.
	(CPP_CPU_SPEC): Delete redundant definition.  Include cpp_cpu_default
	instead of CPP_CPU_DEFAULT.
	(EXTRA_SPECS): Add entry for cpp_cpu_default.

Sat Apr 18 19:06:59 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.

Sat Apr 18 15:41:16 1998  Jim Wilson  <wilson@cygnus.com>

	* regmove.c (fixup_match_1): In three places, in flag_exceptions
	check, change p to q.

Sat Apr 18 15:30:49 1998  Jim Wilson  <wilson@cygnus.com>

	* gcc.c (lang_specific_driver): Add new parm type to prototype.
	(added_libraries): New file scope static variable.
	(process_command): Initialize added_libraries.  Pass it to
	lang_specific_driver.
	(main): Use added_libraries in check for no input files.

Sat Apr 18 01:23:11 1998  John Carr  <jfc@mit.edu>

	* sparc.c, sparc.h, sparc.md, sol2.h: Many changes related to V9
	code generation.  Use 64 bit instructions in 32 bit mode when
	possible.  Use V9 return instruction.  UltraSPARC optimizations.

	* sparc.h: Change gen_rtx (CODE to gen_rtx_CODE (.

Fri Apr 17 22:38:17 1998  Jeffrey A Law  (law@cygnus.com)

	* global.c (global_alloc): Don't pass HARD_CONST (0) to find_reg,
	just pass zero.  That will work regardless of the size of HARD_REG_SET.

	* libgcc2.c (__floatdisf): Fix a couple typos.

Fri Apr 17 17:28:26 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (mostlyclean): Delete *.mach and *.bp files.

Fri Apr 17 16:35:35 1998  Greg McGary  <gkm@gnu.org>

	* emit-rtl.c (gen_highpart): Initialize `word' properly for pseudo.

Fri Apr 17 14:30:37 1998  John Carr  <jfc@mit.edu>

	* emit-rtl.c (operand_subword_force): If a register can not be
	accessed by words, copy it to a pseudo register.

Fri Apr 17 14:30:37 1998  Jim Wilson  <wilson@cygnus.com>

	* rs6000/vxppc.h (CPP_SPEC): Add support for mrelocatable*.

Fri Apr 17 17:01:25 1998  Michael Meissner  <meissner@cygnus.com>

	* tree.h (mark_seen_cases): Delete declaration.

Fri Apr 17 13:32:20 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (mark_seen_cases): Make static and add prototype.

Fri Apr 17 11:21:43 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* frame.c: Include stdlib.h and unistd.h to possibly get various
	function prototypes.  The fixproto script guarantees these header
	files exist on the target system.
	* libgcc2.c: Likewise.

	* gthr-single.h (__gthread_mutex_lock, __gthread_mutex_trylock,
	__gthread_mutex_unlock): Add __attribute__ ((__unused__)) to the
	function parameters.
	* libgcc2.c (__udiv_w_sdiv): Likewise.

Thu Apr 16 22:41:02 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (asm_output_bss): Add prototype.
	(asm_output_aligned_bss): Likewise.

	* unroll.c (verify_addresses): Add prototype.

	* toplev.c: Add many prototypes.  Too many to mention here.

	* stmt.c (check_seenlabel): Add prototype.

	* rtlanal.c (reg_set_p_1): Add prototype.
	(reg_set_last_1): Likewise.

	* reorg.c (find_dead_or_set_registers): Add prototype.

	* regmove (try_auto_increment): Add prototype.

	* reg-stack.c (pop_stack): Add prototype.

	* recog.c (validate_replace_rtx_1): Add prototype.
	(find_constant_term_loc): Likewise.

	* loop.c (regs_patch_p): Add prototype.
	(add_label_notes, count_nonfixed_reads): Likewise.
	(find_single_use_in_loop): Likewise.
	(express_from): Surround prototype with #ifdef.
	(giv_sort): Similarly.

	* jump.c (mark_modified_reg): Add prototype.

	* haifa-sched.c (is_prisky): Add prototype.
	(queue_to_ready): Likewise.

	* genextract.c (gen_insn): Add prototype.

	* genemit.c (max_operand_1): Add prototype.
	(max_operand_vec, print_code, gen_exp, gen_insn): Likewise.
	(gen_expand, gen_explit, output_add_clobbers): Likewise.
	(output_init_mov_optab): Likewise.

	* genattrtab.c (attr_hash_add_rtx): Add prototype.
	(attr_hash_add_string, write_length_unit_log): Likewise.

	* genattr.c (init_range): Add prototype.

	* combine.c (sets_function_arg_p): Add prototype.

	* expr.c (store_constructor_field): Add prototype.
	(get_memory_usage_from_modifier): Likewise.

	* expmed.c (synth_mult): Add prototype.
	(choose_multiplier, invert_mod2n): Likewise.

	* except.c (push_eh_entry): Add prototype.
	(pop_eh_entry, enqueue_eh_entry, dequeu_eh_entry): Likewise.
	(call_get_eh_context, start_dynamic_cleanup): Likewise.
	(start_dynamic_handler, can_throw): Likewise.
	(output_exception_table_entry, scan_region): Likewise.
	(eh_regs, set_insn_eh_region): Likewise.

	* dwarfout.c (decl_class_context): Add prototype.
	(output_inheritance_die, type_ok_for_scope): Likewise.

	* c-lex.c (skip_white_space_on_line): Add prototype.

	* alias.c (record_set): Add prototype.
	(find_base_term, base_alias_check): Likewise.

	* function.c (assign_outer_stack_local): Make static and add prototype.

	* haifa-sched.c (build_control_flow): Accept raw data as inputs
	instead of computing it locally.  Callers changed.
	(find_rgns): Several new arguments.  Callers changed.
	Generally clean up and comment better.  Use dominators to
	identify reducible loops.  Convert some flag arrays to bitmaps.
	Convert most of the code to work on pred/succ lists instead of
	an edge table.  Add comments for future improvements.
	(schedule_insns): Allocate temporary tables for flow data, call
	routines to compute flow data and pass it along to children as
	arguments.
	(debug_control_flow): Delete.  Use dump_bb_data instead.

	* basic-block.h (compute_dominators): Declare.

	* flow.c (dump_sbitmap, dump_sbitmap_vector): New debugging
	functions.
	* basic-block.h: Declare them.

Thu Apr 16 13:45:51 1998  Jim Wilson  <wilson@cygnus.com>

	* reg-stack.c (constrain_asm_operands): Set n_alternatives to zero if
	no operands.

Wed Apr 15 11:33:09 1998  Alexandre Petit-Bianco  <apbianco@sendai.cygnus.com>

	* tree.c (build_expr_wfl): Use NULL_TREE if the file name is NULL.
	Propagate TREE_SIDE_EFFECTS and TREE_TYPE iff the encapsulated
	node is non NULL. Cache last file name and file name identifier node.

1998-04-15  Mark Mitchell  <mmitchell@usa.net>

	* c-common.c (declare_hidden_char_array): Use TYPE_DOMAIN to get
	the length of an array, not TREE_TYPE.

Wed Apr 15 15:31:34 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (sbitmap_union_of_successors): New function.
	* basic-block.h (sbitmap_union_of_successors): Declare it.

Wed Apr 15 12:38:03 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (gnu_ld): Rename to gnu_ld_flag before main loop.
	Set gnu_ld to gnu_ld_flag inside main loop.
	(gas): Likewise.

Wed Apr 15 14:50:05 1998  Dave Brolley  <brolley@cygnus.com>

	* toplev.c (compile_file): Call init_parse using new interface.
	(init_lex): Remove declaration.

	* c-lex.c (init_parse): Now returns char* containing filename.

Wed Apr 15 12:37:10 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Do nothing if not optimizing.

Wed Apr 15 12:10:18 1998  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (gen{config,flags,codes,emit}): Link in host print-rtl.o.
	(gen{extract,peep,opinit,output}): Likewise.

	* gen{attr,codes,config,emit,output}.c (insn_attr_name): Provide a
	global definition so print-rtl.o can be linked in.
	* gen{peep,recog}.c (insn_attr_name): Likewise.

Tue Apr 14 07:30:57 1998  K. Richard Pixley  <rich@kyoto.noir.com>

	* fixincludes: Discard empty C++ comments, as found in sys/time.h
	on hpux-11.0.

Wed Apr 15 10:47:21 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.md (adddi3, subdi3): Optimize for constant
	operand.

Wed Apr 15 01:21:21 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Rework slightly to avoid
	bogus warning from previous change.

Tue Apr 14 23:39:13 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md: Revert Oct 27 change, as it is superseded by Kenner's
	Nov 8 find_replacement change.  Move decls of get_unaligned_address
	* alpha.h: ... here.

Tue Apr 14 22:00:39 1998  John Carr  <jfc@mit.edu>

	* function.c (assign_parms): Initialize unsignedp before passing
	its pointer to promote_mode.

	* genattrtab.c (check_attr_test): Handle MATCH_INSN like MATCH_OPERAND.
	(write_test_expr): Allow MATCH_INSN.

Tue Apr 14 21:57:57 1998  Paul Eggert  <eggert@twinsun.com>

	* install.texi: Update section on warnings that can be safely ignored.

Tue Apr 14 14:55:16 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (reload_outdi): Change the scratch mode from DImode to
	TImode.  New variable scratch, used instead of operand[2] in template.
	Add code for MIPS16 HILO_REGNUM case where output reg is not M16_REG_P.

Tue Apr 14 16:19:03 1998  Michael Meissner  <meissner@cygnus.com>

	* expr.c (MOVE_RATIO): Set to 3 if optimizing for space.

Tue Apr 14 11:31:28 1998  Krister Walfridsson  <cato@df.lth.se>

	* i386/bsd386.h (ASM_OUTPUT_ALIGN): Redefine.

Tue Apr 14 09:02:32 1998  Jeffrey A Law  (law@cygnus.com)

	* svr4.h (ASM_DECLARE_OBJECT_NAME): Use HOST_WIDE_INT_PRINT_DEC.
	(ASM_FINISH_DECLARE_OBJECT): Likewise.

	* Idea and part of the patch from HJ.
	* Makefile.in: auto-host.h renamed from auto-config.h.  All references
	changed.
	(distclean): Remove auto-build.h too.
	* configure.in: Rename host autoconf generated file to auto-host.h.
	If host != build, then run autoconf to generate auto-build.h for
	the build machine and include it in build_xm_files.
	Check for wait.h and sys/wait.h.

	* combine.c (simplify_rtx, case TRUNCATE): Respect value of
	TRULY_NOOP_TRUNCATION.

Mon Apr 13 11:31:49 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.h (BINFO_OFFSET_ZEROP): Use integer_zerop.

Sun Apr 12 20:55:32 1998  Catherine Moore  <clm@cygnus.com>

	* invoke.texi (ld options): Include memset requirements
	for options -nodstdlib and -nodefaultlibs.

1998-04-12  Paul Eggert  <eggert@twinsun.com>

	This change is from an idea suggested by Arthur David Olson.

	* c-common.c (decl_attributes, record_function_format,
	check_format_info, init_function_format_info):
	Add support for strftime format checking.
	(enum format_type): New type.
	(record_function_format): Now static, and 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 `pedwarn' to `warning', since these warnings do not necessarily
	mean the program does not conform to the C Standard, as the code
	need not be executed.

	* c-tree.h (record_function_format): Remove decl; no longer extern.

	* extend.texi: Add documentation for strftime format checking.

Sun Apr 12 20:23:03 1998  Jeffrey A Law  (law@cygnus.com)

	* mips/ecoffl.h: Do not include mips.h.
	* mips/elf.h: Likewise.

	* configure.in (mips-*-ecoff): Do not mention mips/mips.h in tm_files.
	* mips/ecoff.h: Include "mips/mips.h".

Sat Apr 11 22:42:54 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Apr 11 01:24:28 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (count_reg_usage): Correctly handle REG_NONNEG notes.
	(delete_trivially_dead_insns): Renamed from delete_dead_from_cse.
	* toplev.c (rest_of_compilation): Call delete_trivially_dead_insns		instead of delete_dead_from_cse.  Also call delete_trivially_dead_insns
	between loop optimization passes.
	* rtl.h: Updated appropriately.

Fri Apr 10 22:28:32 1998  Jeffrey A Law  (law@cygnus.com)

	Reinstall this patch from Jason.
	* function.c (push_function_context_to): Don't call init_emit.

Fri Apr 10 13:40:20 1998  Nick Clifton  <nickc@cygnus.com>

	* rtl.c (read_skip_spaces): Prevent infinite loops upon
	encountering unterminated comments.

Fri Apr 10 10:43:41 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Properly handle CONST_INTs for
	64x32 cross builds.

	* configure.in: Handle --with-fast-fixincludes.
	(fixincludes): If --with-fast-fixincludes, then use a different
	fixincludes program by default.
	* Makefile.in (fixinc.sh): New rule.

Fri Apr 10 00:36:31 1998  H.J. Lu  (hjl@gnu.org)

	* i386.md (movqi+1): Handle invalid QI register.
	(movsf_push-1): Likewise.

Thu Apr  9 16:53:59 1998  Nick Clifton  <nickc@cygnus.com>

	* config/m32r/m32r.c: call_address_operand(): Only accept symbolic
	addresses.
	symbolic_memort_operand(), call32_operand(), int8_operand(),
	int16_operand(), uint24_operand(), reg_or_int8_operand(): Removed.
	Not used.
	uint16_operand(): Made static.

Thu Apr  9 01:43:04 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Fix typo.

Thu Apr  9 00:18:44 1998  Dave Brolley  (brolley@cygnus.com)

	* c-lex.c (finput): New global.
	(init_parse): Always included.  Handle !USE_CPPLIB using
	code originally in compile_file.
	(finish_parse): Update for CPPLIB.
	* toplev.c (init_parse, finish_parse): Declare.
	(finput): Delete variable.  Now in front-ends.
	(compile_file): Remove code which is now handled by init_parse
	which is unconditionally called.  Similarly for finish_parse.

Wed Apr  8 23:13:50 1998  Gavin Koch  <gavin@cygnus.com>

	* config/mips/r3900.h (ASM_OUTPUT_DEF,SUPPORTS_WEAK,
	ASM_WEAKEN_LABEL): Add.

Wed Apr  8 18:21:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/crtbegin.asm, alpha/crtend.asm, alpha/t-crtb: New files.
	* configure.in (alpha-*-linux*): Use them.

Fri Apr  3 17:02:13 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* tree.def (EXPR_WITH_FILE_LOCATION): New tree node definition.
	* tree.h (EXPR_WFL_{NODE,FILENAME,FILENAME_NODE,LINENO,
	COLNO,LINECOL,SET_LINECOL,EMIT_LINE_NOTE}): New macros.
	(build_expr_wfl): New prototype declaration.
	* tree.c (build_expr_wfl): New function, to build
	EXPR_WITH_FILE_LOCATION nodes.
	(copy_node): Don't zero TREE_CHAIN if copying a
	EXPR_WITH_FILE_LOCATION node.
	* print-tree.c (print_node): Handle EXPR_WITH_FILE_LOCATION.
	* expr.c (expand_expr): Handle EXPR_WITH_FILE_LOCATION.

Wed Apr  8 12:51:19 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (v850): Use t-v850.
	(ix86-wrs-vxworks): Recognize 786 just like other x86 configurations.

	* protoize.c (creat, read, write): Do not declare.

	* jump.c (mark_jump_label): Record REG_LABEL notes for insns which
	refer to the CODE_LABEL before a dispatch table.

	* invoke.texi: Add ARC options.

	* gcc.c (process_command): Improve error message for -o with
	either -c or -S.

	* i386/x-cygwin32 (CLIB): Link in advapi32.

	* alpha.h (ASM_IDENTIFY_GCC): Define to nothing.
	(ASM_IDENTIFY_LANGUAGE): Likewise.

	* i386.md (movqi recognizer): Don't perfom byte increment into
	a NON_QI_REG_P.

	* configure.in (x86-dg-dgux): Run fixinc.dgux.

	* i370.h: Fix typo in GEN_INT changes.

	* bitmap.c (bitmap_element_allocate): Use "void" for arglist instead
	of an empty arglist in prototype.

	* Makefile.in: Remove bytecode crud that crept back in after the
	gcc2 merge.

1998-04-08  Brendan Kehoe  <brendan@cygnus.com>

	* c-lex.h (is_class_name): Fix arg type to be tree, not void.
	(make_pointer_declarator, reinit_parse_for_function): Fix typo.

Wed Apr  8 06:16:45 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

Wed Apr  8 00:44:18 1998  Bernd Schmidt  (crux@pool.informatik.rwth-aachen.de>

	* c-lex.c (is_class_name): Delete declaration.
	(whitespace_cr): Make static and add prototype.
	* c-lex.h (make_pointer_declarator, reinit_parse_for_function,
	yylex, get_directive_line): Turn declarations into prototypes.
	(position_after_whitespace, check_newline, yyerror,, is_class_name,
	forget_protocol_qualifiers, remember_protocol_qualifiers): Add
	prototypes.
	* genattr.c (extend_range, write_upcase, gen_attr, write_units): Add
	prototypes.
	* gencodes.c (gen_insn): Add prototype.
	* genconfig.c (walk_insn, gen_insn, gen_expand, gen_split,
	gen_peephole): Add prototypes.
	* genflags.c (num_operands, gen_proto, gen_nonproto, gen_insn): Add
	prototypes.
	* gengenrtl.c (type_from_format, accessor_from_format, special_rtx,
	special_format, find_formats, gendecl, genmacro, gendef, genlegend,
	genheader, gencode): Add prototypes.
	* genopinit.c (gen_insn): Add prototype.
	* genoutput.c (output_prologue, output_epilogue, scan_operands,
	process_template, validate_insn_alternatives, gen_insn, gen_peephole,
	gen_expand, gen_split, n_occurrences): Add prototypes.
	* genpeep.c (gen_peephole): Add prototype.
	* loop.c (find_and_verify_loops, mark_loop_jump, prescan_loop,
	reg_in_basic_block_p, consec_sets_invariant_p, libcall_other_reg,
	labels_in_range_p, count_loop_regs_set, note_addr_stored,
	loop_reg_used_before_p, scan_loop, replace_call_address,
	skip_consec_insns, libcall_benefit, ignore_some_movables,
	force_movables, combine_movables, rtx_equal_for_loop_p, move_movables,
	strength_reduce, valid_initial_value_p, find_mem_givs, record_biv,
	check_final_value, record_giv, update_giv_derive, basic_induction_var,
	simplify_giv_expr, general_induction_var, consec_sets_giv,
	check_dbra_loop, express_from, combine_givs_p, combine_givs,
	product_cheap_p, maybe_eliminate_biv, maybe_eliminate_biv_1,
	last_use_this_basic_block, record_initial, update_reg_last_use,
	iteration_info, analyze_loop_iterations, insert_bct,
	instrument_loop_bct, indirect_jump_in_function_p): Turn declarations
	into prototypes.

Tue Apr  7 21:48:52 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h (LEGITIMIZE_RELOAD_ADDRESS): Define.

1998-04-07  Ken Raeburn  <raeburn@cygnus.com>

	* config/mips/mips.c (siginfo): Deleted.
	(override_options): Don't install SIGINFO signal handler.

Tue Apr  7 11:58:04 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (check_dbra_loop): When normalize comparison_val, add check
	to verify it is non-negative.

Tue Apr  7 02:01:47 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Correctly collect block offsets.
	(alpha_expand_block_clear): Likewise.

Mon Apr  6 23:36:01 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (sizetype_tab): Fix previous change for K&R.

Mon Apr  6 22:23:29 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  6 23:16:10 1998  Richard Earnshaw  (rearnsha@arm.com)

	* configure.in (sparc-*-solaris2*): Add xm-siglist.h to xm_file.
	Add USG and POSIX to xm_defines.

Mon Apr  6 21:49:57 1998  Bob Manson  <manson@charmed.cygnus.com>

	* gcc.c: Add linker spec.
	(link_command_spec): Use %(linker) instead of ld.
	(main): If collect2 is requested as the linker, see if it exists;
	if not, use ld instead.

	* Makefile.in (USE_COLLECT2): It's named collect2 now, not ld.
	(ld): Deleted.
	(install-collect2): Install as collect2, not ld.

	* configure.in(will_use_collect2): It's named collect2 now.

	* collect2: Remove checks to see if we were invoked recursively.
	(collect_execute): Use _spawnvp under cygwin32.

Mon Apr  6 17:23:41 1998  Jim Wilson  <wilson@cygnus.com>

	* haifa-sched.c (build_control_flow): Set unreachable for block whose
	only predecessor is itself.

Mon Apr  6 16:08:04 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-parse.in: Include system.h, and remove stuff now made redundant.
	* cccp.c: Likewise.
	* cexp.y: Likewise.
	* protoize.c: Likewise.  Properly check for cpp stringification.

	* Makefile.in (c-parse.o, cccp.o, cexp.o, protoize.o, unprotoize.o):
	Depend on system.h.

	* objc/Make-lang.in (objc-parse.o): Likewise.

Mon Apr  6 14:59:58 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Check if compiler supports __attribute__.  Provide
	definitions for ATTRIBUTE_UNUSED and ATTRIBUTE_PRINTF using
	__attribute__ when its available.  Also provide definitions for
	ATTRIBUTE_PRINTF_1, ATTRIBUTE_PRINTF_2 and ATTRIBUTE_PRINTF_3 in
	terms of ATTRIBUTE_PRINTF.

	* genoutput.c (process_template): Use ATTRIBUTE_UNUSED in place
	of __attribute__.

Mon Apr  6 07:17:52 1998  Catherine Moore  <clm@cygnus.com>

	* combine.c (can_combine_p): Include successor in volatile test.

Mon Apr  6 14:16:33 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (CASE_VECTOR_SHORTEN_MODE): Fix logic when to set
	offset_unsigned.

Mon Apr  6 02:03:29 1998  Jeffrey A Law  (law@cygnus.com)

	* objc/objc-act.c (encode_aggregate_within): Avoid GNU extensions
	in prototype and definition.

Mon Apr  6 00:48:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Apr  6 00:08:50 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_clear): Add missing offset arg to
	alpha_expand_unaligned_store_words.

Sun Apr  5 21:31:24 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.  Use nonmemory_operand predicate and don't bother checking
	TARGET_MOVE.
	(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.

Sun Apr  5 18:45:51 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Apr  5 16:31:10 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-dec-osf*): Match osf1.3 correctly.

Sun Apr  5 16:53:37 1998  Don Bowman  <don@pixsci.com>

	* configure.in (mips-wrs-vxworks): New target.

Sat Apr  4 23:34:32 1998  Jeff Law  (law@cygnus.com)

	* expmed.c (synth_mult): The value -1, has no zeros, so it can
	never have the form ...011.

	* version.c: Bump for snapshot.

Sat Apr  4 20:16:46 1998  Richard Henderson  <rth@cygnus.com>

	* i386.c (asm_output_function_prefix, load_pic_register):
	Use ASM_GENERATE_INTERNAL_LABEL properly.
	(output_pic_addr_const): Recognize %X to suppress any PIC sym suffix.
	(print_operand): Ignore it.
	(load_pic_register): Use it for the got load call.
	* i386.md (prologue_set_got, prologue_get_pc): Likewise.
	(prologue_get_pc_and_set_got): Likewise.
	* i386.h: Update print_operand docs.

Sat Apr  4 19:08:37 1998  Richard Henderson  <rth@cygnus.com>

	* i386.md (ffssi, ffshi): Rewrite as define_expands.
	(ffssi_1, ffshi_1): New (unspec [] 5) support patterns.
	* i386.c (notice_update_cc): Recognize unspec 5.

Sat Apr  4 18:07:16 1998  David Mosberger-Tang  (davidm@mostang.com)

	* alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Accept '(' for s/sv/svi.
	* alpha.c (print_operand): Handle it.
	* alpha.md (fix_truncsfdi2): Use it.  Add earlyclobber pattern
	for ALPHA_TP_INSN.
	(fix_truncdfdi2): Likewise.

Sat Apr  4 17:42:05 1998  Richard Henderson  <rth@cygnus.com>

	* tree.h (sizetype_tab[2], sbitsizetype, ubitsizetype): Merge all
	of these into a single struct, with additional [us]sizetype entries.
	* stor-layout.c (set_sizetype): Initialize [us]sizetype.
	* fold-const.c (size_int_wide): Don't rely on sizetype_tab being
	an array.

Sat Apr  4 17:04:41 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-*): Undo tm_file changes from gcc2 merge.

Sat Apr  4 13:50:01 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (split_block_insns): Don't suppress insn splitting
	on subsequent passes.

	* alpha.c (hard_fp_register_operand): New function.
	* alpha.h (PREDICATE_CODES): Add it.
	* alpha.md (extendsidi2): Kill bogus f<-f cvtql+cvtlq case.  Add an
	f<-m case and accompanying define_split.
	(trapb): Use a unique unspec_volatile number.

Sat Apr  4 13:32:08 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (alpha-*-linux-gnu*): Undo Feb 3 change brought in
	from gcc2 merge.

Sat Apr  4 10:23:41 1998  Jeffrey A Law  (law@cygnus.com)

	* Check in merge from gcc2.  See ChangeLog.11 and ChangeLog.12
	for details.

	* haifa-sched.c: Mirror recent changes from gcc2.

Fri Apr  3 00:17:01 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (insn*.o): Depend on system.h.

	* pa.c (output_global_address): Initialize base.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Initialize index.

1998-04-03  Mike Stump  <mrs@wrs.com>

	* gthr.h: Support systems that don't have weak, but have threads.
	* configure.in (*wrs-vxworks*): Use VxWorks threads by default.
	* gthr-vxworks.h: New file.
	* objc/thr-vxworks.h: Dummy file from thr-single.c for now.

Thu Apr  2 18:00:52 1998  Jim Wilson  <wilson@cygnus.com>

	* i386.md (movqi+1): Change alternative 1 from *r/r to *r/*rn.

1998-04-02  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* ginclude/va-i960.h (va_end): Change void * to void.

Thu Apr  2 13:51:10 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (choose-temp.o): Depend on system.h.

	* choose-temp.c: Include system.h when IN_GCC.

Thu Apr  2 02:37:07 1998  Joern Rennecke  (amylaar@cygnus.co.uk)
			  Richard Henderson  <rth@cygnus.com>

	* reload.c (find_reloads_address): Try LEGITIMIZE_RELOAD_ADDRESS.
	(move_replacements): New function.
	* reload.h: Prototype it.

	* alpha.h (LEGITIMIZE_RELOAD_ADDRESS): New definition.

Thu Apr  2 01:01:34 1998  Richard Henderson  <rth@cygnus.com>

	* configure (alpha-*-linuxecoff, alpha-*-linux-gnulibc1):
	Run fixincludes.

	* emit-rtl.c (gen_lowpart_common): Skip count by HARD_REGNO_NREGS.
	(gen_highpart): Likewise.
	* final.c (alter_subreg): Allow the target to hook by-mode subreg
	hard register number changes.

Wed Apr  1 22:26:22 1998  Jeffrey A Law  (law@cygnus.com)

	* fold-const.c optimze_bit_field_compare): Initialize rnbitpos,
	rnbitsize, rnmode and rinner.
	(make_range): Initialize type.
	(fold): Initialize arg0, arg1 and varop.

	* function.c (instantiate_virtual_regs_1): Initialize offset, regnoi
	and regnor.
	(expand_function_start): Initialize last_ptr.

	* stor-layout.c (layout_record): Initialize desired_align.
	(get_best_mode): Initialize unit.

	* tree.c (copy_node): Initialize length.

	* c-lex.c (yylex): Initialize traditional_type, ansi_type and type.

	* caller-save.c (insert_save_restore): Initialize pat, code and
	numregs.

	* emit-rtl.c (push_to_sequence): Initialize top.
	(push_topmost_sequence): Likewise.

	* genattrtab.c (simplify_by_exploding): Initialize defval.

	* profile.c (branch_prob): Initialize dest.

	* rtl.h (note_stores): Remove duplicate prototype.
	(GEN_INT): Reinstate cast of second arg to HOST_WIDE_INT.

	* cplus-dem.c (gnu_special): Don't get confused by .<digits>
	strings that are not actually lengths.

	* genattrtab.c: Make generated file use system.h, instead of
	including stdio.h, etc directly.
	* genextract.c, genopinit.c, genoutput.c: Likewise.
	* genpeep.c, genrecog.c: Likewise.

	* genoutput.c (process_template): Mark operands in the generated
	function as potentially unused if compiling with GNU CC.

	* i386/freebsd-elf.h (CPP_PREDEFINES): Update from FreeBSD folks.

	* pa.md (reload peepholes): Remove unused variable "mode".

Wed Apr  1 17:06:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.h: Add super interworking support.
	* config/arm/thumb.c: Add super interworking support.
	* config/arm/thumb.md: Add super interworking support.
	* config/arm/lib1funcs.asm: Add interworking support.
	* config/arm/lib1thumb.asm: Add super interworking support.
	* config/arm/t-semi: Add interworking support.
	* config/arm/t-thumb: Add interworking support.
	* config/arm/README-interworking: New file.

Wed Apr  1 14:38:10 1998  Jim Wilson  <wilson@cygnus.com>

	* config/mips/iris6.h (MD_EXEC_PREFIX): Set to /usr/bin/.
	(MD_STARTFILE_PREFIX): Unset.

1998-04-01  Mark Mitchell  <mmitchell@usa.net>

	* varasm.c (make_decl_rtl): Update the DECL_ASSEMBLER_NAME for a
	entity in a local scope.

	* fold-const.c (fold): Call truthvalue_conversion for values which
	are folded to boolean type.

Wed Apr  1 06:09:53 1998  Jeffrey A Law  (law@cygnus.com)

	* 1750a.md, arm.c, clipper.c, clipper.md: Use GEN_INT consistently.
	* convex.h, dsp16xx.c, fx80.md, gmicro.c, gmicro.md: Likewise.
	* i370.h, i370.md, i860.c, i860.h, i860.md, i960.c: Likewise.
	* i960.h, i960.md, m32r.md, m68k.md, m68kv4.h, m88k.c: Likewise.
	* m88k.md, ns32k.c, ns32k.md, pdp11.c, pdp11.h, pdp11.md: Likewise.
	* pyr.c, pyr.h, pyr.md, romp.c, romp.h, romp.md: Likewise.
	* rs6000.md, sparc.c, sparc.h, sparc.md, spur.c, spur.md: Likewise.
	* tahoe.md, vax.h, vax.md, we32k.c, we32k.h, we32k.md: Likewise.
	* md.texi: Likewise.

Wed Apr  1 08:33:44 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixincludes (limits.h): Fix nested comments in Motorola's
	limits.h and sys/limits.h.

Tue Mar 31 16:57:33 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.c (alpha_expand_unaligned_load): Use tgt instead of addr
	as dest of expand_binop call.

	* alpha.md (extzv): Correct check for valid operand[2] values.

	* profile.c (branch_prob): Add code to recognize HPPA tablejump entry
	branch.

	* toplev.c (rest_of__compilation): Call init_recog_no_volatile at end.

Mon Mar 30 13:11:05 1998  Stan Cox  <scox@cygnus.com>

	* libgcc2.c (__main, __do_global_dtors, __do_global_ctors):
	For __CYGWIN32__ use the versions in winsup/dcrt0.cc.

	* gcc.c, cccp.c, cpplib.c, collect2.c (GET_ENVIRONMENT): Added.
	cygwin32 can override this to allow both unix and win32 style PATHs.

	* i386/xm-cygwin32.h (GET_ENVIRONMENT): Defined to allow win32
	style environment paths.

Mon Mar 30 14:43:20 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (cppalloc.o, cpperror.o, cppexp.o, cpphash.o,
	cpplib.o, cppmain.o, fix-header.o, gcov.o, gen-protos.o,
	gengenrtl.o, halfpic.o, hash.o, scan-decls.o, scan.o): Depend on
	system.h.

	* cpphash.c: Include config.h.
	* cppalloc.c: Include system.h.  Add parameters to various
	function prototypes.
	* cpperror.c: Likewise.
	* cppexp.c: Likewise.
	* cpphash.c: Likewise.
	* cpplib.c: Likewise.
	* cppmain.c: Likewise.
	* fix-header.c: Likewise.
	* gcov.c: Likewise.
	* gen-protos.c: Likewise.
	* gengenrtl.c: Likewise.
	* halfpic.c: Likewise.
	* hash.c: Likewise.
	* scan-decls.c: Likewise.
	* scan.c: Likewise.

Mon Mar 30 11:06:45 1998  Jim Wilson  <wilson@cygnus.com>

	* README.gnat: Add lang_print_xnode definition.

Mon Mar 30 11:12:24 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c (standard_68881_constant_p): Don't use
	fmovecr on the 68060.

Mon Mar 30 00:21:03 1998  Jeffrey A Law  (law@cygnus.com)

	* genemit.c (DONE): Rework so that it works in the true arm if
	an if-else conditional.
	(FAIL): Likewise.

Sun Mar 29 12:45:23 1998  Jeffrey A Law  (law@cygnus.com)

	* rs6000.c: Do not include stdioh or ctype.h anymore.

	* Makefile.in (c-typeck.o): Delete on expr.h, insn-codes.h and
	$(RTL_H).
	(stor-layout.o): Likewise.
	* c-typeck.c: Include rtl.h and expr.h.
	* stor-layout.c: Likewise.

	* cpplib.c (cpp_file_line_for_message): Delete unused parameter.
	All callers changed.
	(do_sccs): Wrap in an SCCS_DIRECTIVE ifdef.
	* fix-header.c (cpp_file_line_for_message): Delete unused parameter.
	All callers changed.

	* collect2.c (is_in_list): Wrap inside COLLECT_EXPORT_LIST ifdef.

	* local-alloc.c (reg_classes_overlap_p): Delete dead function.

	* tree.h (lang_print_xnode): Provide prototype.

Sat Mar 28 23:50:44 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar 29 00:42:21 1998  Jeffrey A Law  (law@cygnus.com)

	* objc/sendmsg.c (__objc_block_forward): Add braces for return
	value if INVISIBLE_STRUCT_RETURN.

	* pa.c (arith_double_operand): Fix parens.

	* haifa-sched.c (print_pattern): Correct arg to sprintf.

	* Makefile.in (libgcc1.null): Make return type for __foo void.

Sat Mar 28 14:37:20 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.h: Add declarations for many functions defined in pa.c.

	* genpeep.c (main): Remove unused variable 'i' from the generated
	file.

	* genemit.c (gen_expand): Do not emit "_done" or "_fail" labels.
	(gen_split): Likewise.
	(main): Rework generated definitions of DONE and FAIL so that they
	no longer use gotos.  Avoids warnings about unused labels.

	* integrate.c (copy_rtx_and_substitute): Rework to avoid need for
	unused "junk" variable.

	* genattrtab.c (write_complex_function): Add a default case in
	generated switch statement to keep -W -Wall quiet.

Sat Mar 28 10:47:21 1998  Nick Clifton  <nickc@cygnus.com>

	* invoke.texi: Document more ARM and Thumb command line options.

	* config/arm/xm-thumb.h: New file.

Sat Mar 28 01:37:33 1998  Craig Burley  <burley@gnu.ai.mit.edu>

	* stmt.c (expand_expr_stmt): Must generate code for
	statements within an expression (gcc's `({ ... )}')
	even if -fsyntax-only.

Sat Mar 28 01:06:12 1998  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>
			  Jeffrey A Law  (law@cygnus.com)

	* basic-block.h (basic_block_computed_jump_target): Declare.
	* flags.h (current_function_has_computed_jump): Declare.
	* flow.c (basic_block_computed_jump_target): Define.
	(flow_analysis): Allocate it. Set current_function_has_computed_jump
	to 0.
	(find_basic_blocks): Set current_function_has_computed_jump and
	elements of basic_block_computed_jump_target to 1 as appropriate.
	* function.c (current_function_has_computed_jump): Define.
	* global.c (global_conflicts): Don't allocate pseudos into stack regs
	at the start of a block that is reachable by a computed jump.
	* reg-stack.c (stack_reg_life_analysis): If must restart, do so
	immediately.
	(subst_stack_regs): Undo change from Sep 4 1997.
	(uses_reg_or_mem): Now unused, deleted.
	* stupid.c (stupid_life_analysis): Compute
	current_function_has_computed_jump.
	(stupid_find_reg): Don't allocate stack regs if the function has a
	computed goto.
	* haifa-sched.c (is_cfg_nonregular): Delete code to determine if
	the current function has a computed jump.  Use the global value
	instead.

Sat Mar 28 00:21:37 1998  Jeffrey A Law  (law@cygnus.com)

	* i386/freebsd.h (CPP_PREDEFINES): Remove __386BSD__.
	(DWARF2_UNWIND_INFO): Define to zero.

Fri Mar 27 16:04:49 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (set_std_prefix): Add declaration.
	(process_command): If GCC_EXEC_PREFIX is set, remove /lib/gcc-lib/
	suffix, and update the standard prefix prefix.c uses.

	* prefix.c (std_prefix): New global to hold default prefix value.
	(get_key_value): Change to use std_prefix instead of PREFIX.
	(translate_name): Likewise.
	(update_path): Likewise.
	(get_key_value): Release allocated scratch storage.
	(set_std_prefix): New function to reset the standard prefix.

Fri Mar 27 18:08:21 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (find_barrier): Fix calculations for alignment increase.

Fri Mar 27 08:56:52 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (stmp-fixinc): If we're actually fixing include
	files, copy gcc's assert.h into the fixed include dir.
	* fixincludes (assert.h): Avoid any attempts to fix a probably
	broken system specific assert.h file.
	* fixproto (stdlib.h): Make sure, it'll contain a definition of
	size_t.

Fri Mar 27 00:49:46 1998  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (reg_scan_mark_refs): Be more selective about
	when we mark a register with REGNO_POINTER_FLAG.

Thu Mar 26 23:00:11 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	reload inheritance improvement:
	* reload1.c (reg_reloaded_contents, reg_reloaded_insn):
	Change meaning: index is now hard reg number.
	(reg_reloaded_valid, reg_reloaded_dead): New variables.
	(reload_spill_index): Content is now a hard reg number.
	(reload_as_needed): Change to fit new variable meaning.
	(forget_old_reloads_1, allocate_reload_reg): Likewise.
	(choose_reload_regs, emit_reload_insns): Likewise.

Thu Mar 26 18:34:13 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regclass.c (record_reg_classes): '?' increases cost by two.

	* reload.c (find_reloads): Double previous costs.  Output
	reloads cost one unit extra.

	* reload1.c (eliminate_regs): Delete LOAD_EXTENDED_OP code that
	boiled down to && ! 0.

	* reload.c (find_equiv_reg): Also consider a goal offset from the
	frame pointer to be constant.

Thu Mar 26 17:34:46 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (OPTIMIZATION_OPTIONS): Define.

Thu Mar 26 00:19:47 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (make_compound_operation): Simplify (subreg (*_extend) 0).

Wed Mar 25 23:53:11 1998  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_adjust_cost): Avoid redundant calls to get_attr_type.

Wed Mar 25 13:40:48 1998  Jim Wilson  <wilson@cygnus.com>

	* c-common.c (check_format_info): Initialize type, is_type.  New local
	integral_format.  Don't warn for 'L' when pedantic.  Do warn for 'L'
	when pedantic if used with integral format specifier.

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 system.h.
	(function_arg_padding): Change return type to int, cast enum's to
	int.

	(From Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>)
	* collect2.c (scan_prog_file): Add explicit braces to avoid
	ambiguous `else'.

	* dbxout.c (dbxout_type_fields): Add braces around empty body in
	an if-statement.
	(dbxout_type): Likewise.

	* 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', `reg1'
	and `reg2'.

	* 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 10:05:19 1998  Nick Clifton  <nickc@cygnus.com>

	* config/arm/thumb.c: New File.  Support for ARM's Thumb
	instruction set.
	* config/arm/thumb.h: New File.  Thumb definitions.
	* config/arm/thumb.md: New File.  Thumb machine description.
	* config/arm/tcoff.h: New File.  Thumb COFF support.
	* config/arm/t-thumb: New File.  Thumb makefile fragment.
	* config/arm/lib1thumb.asm: New File.  Thumb libgcc support functions.

	* configure.in: Add Thumb-coff target.
	* configure: Add Thumb-coff target.
	* config.sub: Add Thumb-coff target.

Wed Mar 25 10:30:32 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (scan_loop): Initialize move_insn_first to zero.

Wed Mar 25 01:06:49 1998  Joel Sherrill  (joel@OARcorp.com)

	* config/i386/go32-rtems.h: Defined TARGET_MEM_FUNCTIONS.
	* config/i386/rtems.h: Likewise.
	* config/i960/rtems.h: Likewise.
	* config/m68k/rtems.h: Likewise.
	* config/mips/rtems64.h: Likewise.
	* config/pa/rtems.h: Likewise.
	* config/rs6000/rtems.h: Likewise.
	* config/sh/rtems.h: Likewise.
	* config/sparc/rtems.h: Likewise.

Wed Mar 25 00:57:26 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pa.c (emit_move_sequence): If in reload, call find_replacement.

Tue Mar 24 10:44:11 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.in (gcov$(exeext)): Support .exe extension to gcov.

	* collect2.c (find_a_file): Add debugging.
	(find_a_file): Test for win32 style absolute paths if
	DIR_SERPARATOR is defined.
	(prefix_from_string): Add debugging.
	(main): Test for debug command line switch at start of program
	execution.
	(main): Use GET_ENVIRONMENT rather than getenv().
	(prefix_from_env): Use GET_ENVIRONMENT.

1998-03-24  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (optable): Add sizeof.
	(demangle_template_value_parm): New function containing code
	previously found in demangle_template.
	(demangle_integral_value): New function which handles complicated
	integral expressions.
	(demangle_template): Use them.

Tue Mar 24 12:13:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (genconfig.o, genflags.o, gencodes.o, genemit.o,
	genopinit.o, genrecog.o, genextract.o, genpeep.o, genattr.o,
	genattrtab.o, genoutput.o): Depend on system.h.

	* genattr.c: Include system.h.  Add arguments to various function
	prototypes.  Remove redundant prototype of read_rtx().
	* genattrtab.c: Likewise.
	* gencodes.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.

1998-03-24  Martin von Loewis  <loewis@informatik.hu-berlin.de>

	* c-lang.c (lang_print_xnode): New function.
	* objc/objc-act.c (lang_print_xnode): Likewise.
	* print-tree.c (print_node): Call it

Mon Mar 23 23:59:11 1998  H.J. Lu  (hjl@gnu.org)

	* c-parse.in: Recognize protocol qualifiers in class
	definitions for objc.
	Include "output.h".
	(yyerror): Remove redundant decl.
	(yyprint): Fix prototype.

Mon Mar 23 23:49:47 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (rtx_cost): Only call CONST_COSTS if it is defined.

	* stmt.c (unroll_block_trees): Free block_vector if needed.

Mon Mar 23 23:26:42 1998  Philippe De Muyter  <phdm@macqel.be>

	* m68k/m68k.md (zero_extendqidi2, zero_extendhidi2): New patterns.
	(zero_extendsidi2): Avoid useless copy.
	(iordi_zext): New pattern.
	(iorsi_zexthi_ashl16): Pattern reworked to avoid "0" constraint for
	operand 2.
	(iorsi_zext): New name for old unnamed pattern; indentation fixes.

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

1998-03-22  Mark Mitchell  <mmitchell@usa.net>

	* tree.h (IS_EXPR_CODE_CLASS): New macro.

Mon Mar 23 23:18:48 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.h (CONST_COSTS): Remove definition.
	(DEFAULT_RTX_COSTS): Define.

Mon Mar 23 22:58:22 1998  Joel Sherrill  (joel@OARcorp.com)

	* config/sh/rtems.h: Switched from ELF to COFF.

Mon Mar 23 14:14:20 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* freebsd.h (ASM_OUTPUT_ALIGN): Redefine.

Sat Mar 21 23:52:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar 22 00:50:42 1998  Nick Clifton  <nickc@cygnus.com>
			  Geoff Noer	<noer@cygnus.com>

	* Makefile.in: Various fixes for building cygwin32 native toolchains.

	* objc/Makefile.in: Various fixes for building cygwin32 native toolchains.
	* objc/Make-lang.in: Likewise.

	* config/i386/xm-cygwin32.h (PATH_SEPARATOR): Set to a semi-colon.

Sun Mar 22 00:21:46 1998  R. Ganesan  <rganesan@novell.com>

	* configure.in: Handle with-PACKAGE=no correctly

Fri Mar 20 17:36:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (alias.o, bitmap.o, c-aux-info.o, c-common.o,
	c-decl.o, c-iterate.o, c-lang.o, c-lex.o, c-pragma.o, c-typeck.o,
	caller-save.o, calls.o, collect2.o, combine.o, cse.o, dbxout.o,
	dwarf2out.o, dwarfout.o, emit-rtl.o, except.o, explow.o, expmed.o,
	expr.o, final.o, flow.o, function.o, getpwd.o, global.o,
	integrate.o, jump.o, local-alloc.o, loop.o, optabs.o, pexecute.o,
	prefix.o, print-rtl.o, print-tree.o, profile.o, real.o, recog.o,
	reg-stack.o, regclass.o, regmove.o, reload.o, reload1.o, reorg.o,
	rtl.o, rtlanal.o, sdbout.o, stmt.o, stor-layout.o, stupid.o,
	tlink.o, toplev.o, tree.o, unroll.o, varasm.o, xcoffout.o): Depend
	on system.h.

	* alias.c, bitmap.c, c-aux-info.c, c-common.c, c-decl.c,
	c-iterate.c, c-lang.c, c-lex.c, c-pragma.c, c-typeck.c,
	caller-save.c, calls.c, collect2.c, combine.c, cse.c, dbxout.c,
	dwarf2out.c, dwarfout.c, emit-rtl.c, except.c, explow.c, expmed.c,
	expr.c, final.c, flow.c, function.c, gcc.c, getpwd.c, global.c,
	integrate.c, jump.c, local-alloc.c, loop.c, optabs.c, pexecute.c,
	prefix.c, print-rtl.c, print-tree.c, profile.c, real.c, recog.c,
	reg-stack.c, regclass.c, regmove.c, reload.c, reload1.c, reorg.c,
	rtl.c, rtlanal.c, sched.c, sdbout.c, stmt.c, stor-layout.c,
	stupid.c, tlink.c, toplev.c, tree.c, unroll.c, varasm.c,
	xcoffout.c: Include system.h.  Organize include ordering so
	that stdarg/varargs comes before other system headers.  Remove
	spurious casts of functions assured of a prototype in system.h.

Fri Mar 20 11:19:40 1998  Stan Cox  <scox@equinox.cygnus.com>

	* reg-stack.c (pop_stack): Define. Pops any register on the
	regstack and adjusts regstack.
	(compare_for_stack_reg): Use pop_stack.

Thu Mar 19 23:51:01 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in (hppa1.0-hp-hpux10): Handle threads for this
	config too.

Thu Mar 19 20:30:31 1998  Philippe De Muyter  <phdm@macqel.be>

	* libgcc2.c (exit): Do not call __bb_exit_func if HAVE_ATEXIT.

	* fold-const.c (fold): Replace sign-extension of a zero extended
	value by a single zero extension.

Thu Mar 19 00:58:07 1998  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (init_eh): Do nothing.
	(save_eh_status): Call init_eh_for_function, not init_eh.
	* function.c (push_function_context_to): Don't call init_emit.

Thu Mar 19 13:39:52 1998  Michael Meissner  <meissner@cygnus.com>

	* rs6000/sysv4.h (RELATIVE_PREFIX_NOT_LINKDIR): Undef for System V
	and EABI.

Thu Mar 19 10:10:36 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* final.c (shorten_branches): Add parentheses around +/- in
	operand of &.

	* flow.c (life_analysis): Wrap variable `i' in macro ELIMINABLE_REGS.

Thu Mar 19 09:15:17 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* regclass.c (memory_move_secondary_cost): Wrap uses of
	SECONDARY_INPUT_RELOAD_CLASS and SECONDARY_OUTPUT_RELOAD_CLASS
	with #ifdef tests.

Thu Mar 19 09:06:35 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* config/m68k/m68k.md (addqi3): Fix typo gen_INT vs. GEN_INT.

	* flow.c (life_analysis): #include <sys/types.h> to make sure
	size_t is defined.
	* cplus-dem.c (demangle_function_name): Likewise.

Thu Mar 19 09:00:01 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* final.c (insn_noperands): Change type to unsigned int.
	(final_scan_insn): Likewise for noperands;
	properly check operand number boundaries.

Wed Mar 18 16:20:30 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (extzv): Don't reject register operands.  Fix
	mode of operand 1.

Wed Mar 18 16:14:23 1998  Richard Henderson  <rth@cygnus.com>

	* dbxout.c (dbxout_function_end): Fix last change.  The correct
	predicate is ASM_OUTPUT_SECTION_NAME.

Wed Mar 18 12:43:20 1998  Jim Wilson  <wilson@cygnus.com>

	* sh.md (ashlsi_c-1): Delete 3rd argument to gen_ashlsi_c.
	(ashlsi): Use match_dup 1 instead of match_operand 2.

Wed Mar 18 13:46:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (operand_equal_for_comparison_p): See if equal
	when nop conversions are removed.

Wed Mar 18 13:42:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_expr, case COND_EXPR): If have conditional move,
	don't use ORIGINAL_TARGET unless REG.

Wed Mar 18 16:53:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* netbsd.h (ASM_OUTPUT_ALIGN): Redefine.

Wed Mar 18 12:43:20 1998  Jim Wilson  <wilson@cygnus.com>

	* loop.c (struct movable): New field move_insn_first.
	(scan_loop): In consec sets code, set it.  Clear it otherwise.
	(move_movables): In consec sets code, use it.  Copy REG_NOTES from
	p to i1 only if i1 does not have REG_NOTES.  Delete obsolete ifdefed
	out code.

Wed Mar 18 09:52:56 1998  Richard Henderson  <rth@cygnus.com>

	* rtl.c (read_rtx): Fall back on homebrew atoll if HOST_WIDE_INT
	is large, and the system doesn't provide atoll or atoq.
	(atoll): New.

	* alpha/xm-vms.h (HAVE_ATOLL): Define.
	Reported by Klaus Kaempf <kkaempf@progis.de>.

Wed Mar 18 09:56:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lang.c (finish_file): Wrap variable `void_list_node' with macro
	test !ASM_OUTPUT_CONSTRUCTOR || !ASM_OUTPUT_DESTRUCTOR.

	* calls.c (emit_call_1): Wrap variable `already_popped' with macro
	test !ACCUMULATE_OUTGOING_ARGS.

	* collect2.c (write_c_file_glob): Wrap function definition in
	macro test !LD_INIT_SWITCH.

	* combine.c (try_combine): Wrap variables `cc_use' and
	`compare_mode' in macro test EXTRA_CC_MODES.

	* cpplib.c (do_ident): Remove unused variable `len'.
	(skip_if_group): Remove unused variables `at_beg_of_line' and
	`after_ident'.
	(cpp_get_token): Remove unused variable `dummy'.

	* dbxout.c (scope_labelno): Move static variable definition inside
	the one function scope where it is used.
	(dbxout_function_end): Wrap prototype and definition in
	macro test !NO_DBX_FUNCTION_END.

	* dwarf2out.c (add_subscript_info): Wrap variable `dimension_number'
	in macro test !MIPS_DEBUGGING_INFO.

	* expr.c (expand_builtin_setjmp): Move declaration of variable `i'
	into the scope where it is used.  Wrap empty else-statement body
	in braces.

	* fix-header.c: Fix typo in comment.
	(inf_skip_spaces): Cast results of INF_UNGET to (void).
	(check_protection, main): Likewise.

	* flow.c (find_basic_blocks_1): Remove dangling comment text.

	* function.c (contains): Wrap prototype and definition in macro
	test HAVE_prologue || HAVE_epilogue.
	(fixup_var_refs_1): Remove unused variable `width'.

	* gen-protos.c (main): Remove unused variable `optr'.

	* haifa-sched.c (debug_control_flow): Remove unused variable `j'.

	* libgcc2.c (__udiv_w_sdiv): Provide dummy return value of 0.
	(__sjpopnthrow): Remove unused variable `jmpbuf'.
	(__throw): Remove unused variable `val'.

	* protoize.c: Check for a previously existing definition before
	defining *_OK macros.

	* scan-decls.c (scan_decls): Remove unused variable `old_written'.

Tue Mar 17 00:45:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* vax.h (ADDR_VEC_ALIGN): Define.

Mon Mar 16 15:57:17 1998  Michael Meissner  <meissner@cygnus.com>

	* gcc.c (default_arg): Don't wander off the end of allocated
	memory.

	(From Geoffrey Keating  <geoffk@ozemail.com.au>)
	* rs6000.c (small_data_operand): Ensure that any address
	referenced relative to the small data area is inside the SDA.

Mon Mar 16 12:55:15 1998  Jim Wilson  <wilson@cygnus.com>

	* config/m68k/netbsd.h (ASM_SPEC): Add %{m68060}.

Mon Mar 16 15:50:20 1998  Andrew MacLeod  <amacleod@cygnus.com>

	* except.h (in_same_eh_region): New prototype.
	(free_insn_eh_region, init_insn_eh_region): New prototypes.
	* except.c (insn_eh_region, maximum_uid): New static variables.
	(set_insn_eh_region): New static function to set region numbers.
	(free_insn_eh_region): New function to free EH region table.
	(init_insn_eh_region): New function to initialize EH region table.
	(in_same_eh_region): New function used to determine if two rtl
	instructions are in the same exception region or not.
	* final.c (final): Initialize the table indicating which instructions
	belong in which exception region.
	* genpeep.c (main): Add "except.h" to include file list in generated
	file insn-peep.c.
	* config/sparc/sparc.md: Add calls to 'in_same_eh_region' in 4
	peepholes involving calls and unconditional branches.

Mon Mar 16 11:16:50 1998  Jim Wilson  <wilson@cygnus.com>

	* README.gnat: New file.

Mon Mar 16 11:14:20 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c: Include <stdlib.h> for atoi.  Include
	"recog.h" for offsettable_memref_p.
	(legitimize_pic_address): Remove unused variable `offset'.
	(notice_update_cc): Change return type to void.  Add default label
	to switch.
	(standard_68881_constant_p): Remove unused variable mode.
	(print_operand): Define local variable i only if SUPPORT_SUN_FPA.
	(const_int_cost): Explicitly declare as returning int.
	(output_dbcc_and_branch): Change return type to void.

	* config/m68k/linux.h, config/m68k/m68k.md, config/m68k/m68k.c,
	config/m68k/m68k.h: Replace gen_rtx (XXX, ...) with gen_rtx_XXX
	(...).  Use GEN_INT instead of gen_rtx_CONST_INT.

Sun Mar 15 22:30:44 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri Mar 13 11:30:12 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.h (CONST_OK_FOR_LETTER_P): Fix logic in range
	check for 'M' constraint.

Thu Mar 12 14:47:14 1998  Jim Wilson  <wilson@cygnus.com>

	* cccp.c (create_definition): If pedantic, call pedwarn for macro
	varargs feature.

Thu Mar 12 13:43:25 1998  Bernd Schmidt  <crux@Pool.Informatik.RWTH-Aachen.DE>

	* i386.c (ix86_logical_operator): New function.
	(split_di): Ensure that when a MEM is split, the resulting MEMs have
	SImode.
	* i386.md (anddi3, xordi3, iordi3): New patterns. Add a define_split
	to implement them.

Thu Mar 12 15:13:16 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
			  Richard Earnshaw  <rearnsha@arm.com>
			  Nick Clifton  <nickc@cygnus.com>

	* tm.texi (DEFAULT_RTX_COSTS): Document new macro.

	* arm.h (DEFAULT_RTX_COSTS): Define instead of RTX_COSTS.

	* cse.c (rtx_cost): Provide a default case in an enumeration
	switch, and call DEFAULT_RTX_COSTS if it's defined.

Thu Mar 12 10:02:38 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* basic-block.h (compute_preds_succs): Change return type in
	prototype to void.
	* flow.c (compute_preds_succs): Likewise in function definition.

	* regmove.c (find_matches): Cast char used as array index to unsigned char
	to suppress warning.

Thu Mar 12 09:39:40 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* i386.h (RTX_COSTS): Insert braces around nested if.
	(ADDITIONAL_REGISTER_NAMES): Insert braces around structured
	elements.

	* gcc.c (default_compilers): Properly put brackets around array elements in
	initializer.

	* getopt.c (_getopt_internal): Add explicit braces around nested if;
	reformatted.

	* reg-stack.c (record_asm_reg_life): Add explicit braces around nested if's.
	(record_reg_life_pat): Add explicit parens around && and || in expression.
	(stack_reg_life_analysis): Add parens around assignment used as expression.
	(convert_regs): Likewise.

Thu Mar 12 09:25:29 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* bitmap.c (bitmap_element_allocate): Remove unused parameter;
	change callers accordingly.

	* cplus-dem.c (arm_special): Remove unused parameter work in prototype
	and definition; change all callers accordingly.

	* except.c (init_eh): Avoid assignment of unused return value of
	build_pointer_type; cast it to void, instead, and remove unused
	variable type.

	* gcc.c (lang_specific_driver): Define prototype only #ifdef
	LANG_SPECIFIC_DRIVER.
	(temp_names): Define only #ifdef MKTEMP_EACH_FILE.

	* genoutput.c (output_epilogue): Initialize next_name to 0.

	* real.c (efrexp): #if 0 prototype and function definition.
	(eremain): Likewise.
	(uditoe): Likewise.
	(ditoe): Likewise.
	(etoudi): Likewise.
	(etodi): Likewise.
	(esqrt): Likewise.

	* reload.c (push_secondary_reload): Define prototype only
	#ifdef HAVE_SECONDARY_RELOADS.

	* varasm.c (assemble_static_space): Define rounded only
	#ifndef ASM_OUTPUT_ALIGNED_LOCAL.

Thu Mar 12 09:11:35 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* i386.md (andsi): Add default case in enumeration switch.
	(iorsi3): Likewise.
	(iorhi3): Likewise.
	(xorsi3): Likewise.

Thu Mar 12 08:37:02 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* c-decl (finish_struct): Change type of min_align to unsigned.

	* cplus-dem.c (demangle_function_name): Change type of variable i to size_t;
	remove unused variable len.

	* dwarf2out.c (reg_save): Add explicit cast of -1 to unsigned and a
	comment indicating this is proper behavior.
	(reg_loc_descriptor): Remove redundant comparison of unsigned variable
	reg >= 0.
	(based_loc_descr): Likewise.

	* enquire.c (bitpattern): Change type of variable i to unsigned.

	* final.c (output_asm_insn): Don't cast insn_noperands to unsigned.

	* flow.c (life_analysis): Change type of variable i to size_t;
	remove unused variable insn.

	* gcc.c (translate_options): Change type of variables optlen, arglen and
	complen to size_t.
	(input_filename_length): Change type to size_t.
	(do_spec_1): Change type of variable bufsize to size_t.
	(main): Change type of variables i and j to size_t;
	remove subblock local definition of variable i.
	(lookup_compiler): Change type of second argument to size_t;
	change type of variable i to size_t.

	* genemit.c (output_init_mov_optab): Change type of variable i to size_t.

	* genopinit.c (get_insn): Change type of variable pindex to size_t.

	* genrecog.c (add_to_sequence): Change type of variable i to size_t.

	* global.c (global_alloc): Change type of variable i to size_t.

	* regclass.c (init_reg_sets): Change type of variables i and j to unsigned.

	* stmt.c (expand_end_bindings): Change type of variable i to size_t.
	(expand_end_case): Change type of variable count to size_t.

	* toplev.c (main): Change type of variable j to size_t.
	(set_target_switch): Change type of variable j to size_t.
	(print_switch_values): Change type of variable j to size_t;
	remove unused variable flags.

	* varasm.c (assemble_variable): Change type of variable align to size_t.
	(const_hash_rtx): Change type of variable i to size_t.

1998-03-11  Mark Mitchell  <mmitchell@usa.net>

	* dbxout.c (dbxout_type_methods): Only treat TYPE_METHODS as a
	TREE_VEC if that's what it really is.

Wed Mar 11 15:16:01 1998  Michael Meissner  <meissner@cygnus.com>

	* {haifa-,}sched.c (rank_for_schedule): Only take void * arguments
	as per ISO C spec.

Wed Mar 11 12:05:20 1998  Teemu Torma  <tot@trema.com>

	* gthr.h: Changed the comment about return values.
	* gthr-solaris.h (__gthread_once): Do not use errno; return the
	error number instead of -1.
	(__gthread_key_create): Any nonzero return value is an error.
	* libgcc2.c (eh_context_initialize): Check for nonzero return
	value from __gthread_once.
	Check that the value of get_eh_context was really changed.

Wed Mar 11 18:26:25 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (LOOP_ALIGN): Only align when optimizing.
	* sh.c (find_barrier): Clear inc for CODE_LABELs.
	When not optimizing, calculate alignment for BARRIERs directly.

Wed Mar 11 15:07:18 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Remove conditionalizing on
	SHORTEN_WITH_ADJUST_INSN_LENGTH.
	* sh.h, pa.h (SHORTEN_WITH_ADJUST_INSN_LENGTH): Remove.

Wed Mar 11 02:37:41 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks_1): Keep the cfg accurate when removing
	an unconditional jump around deleted blocks.

Mon Mar  9 12:02:23 1998  Jim Wilson  <wilson@cygnus.com>

	* profile.c (branch_prob): If see computed goto, call fatal instead of
	abort.

	* config/mips/sni-svr4.h (CPP_PREDEFINE): Add -DSNI and -Dsinix.

	* configure.in (alpha-dec-osf): Add default case for osf* to switch.
	Patch from Bruno Haible.

	* function.c (put_reg_into_stack): Copy MEM_IN_STRUCT_P from new.
	(assign_parms): Set aggregate if hide_last_arg and last_named.

Mon Mar  9 19:57:56 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Initialize insn_addresses.

Mon Mar  9 14:10:23 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.h (MUST_PASS_IN_STACK): Define.

Sun Mar  8 13:01:56 1998  Jeffrey A Law  (law@cygnus.com)

	* final.c (shorten_branches): Fix minor logic error in
	ADDR_DIFF_VEC shortening support.

Sun Mar  8 02:17:42 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Mar  7 00:54:15 1998  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (is_cfg_nonregular): Change return type to
	an int.  No longer compute "estimated" number of edges.  Use
	computed_jump_p instead of duplicating the code.  Fixup/add
	some comments.
	(build_control_flow): Returns a value indicating an irregularity
	in the cfg was detected.  Count the number of edges in the cfg.
	allocate various edge tables.
	(find_rgns): No longer look for unreachable blocks.
	(schedule_insns): Do not allocate memory for edge tables here.
	Free memory for edge tables before returning.  Do not perform
	cross block scheduling if build_control_flow returns nonzero.
	* flow.c (compute_preds_succs): More accurately determine when
	a block drops in.

	* basic-block.h (free_basic_block_vargs): Provide prototype.

	* cccp.c (main): Fix dumb mistakes in last change.

Fri Mar  6 21:28:45 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (addr_diff_vec_flags): New typedef.
	(union rtunion_def): New member rt_addr_diff_vec_flags.
	(ADDR_DIFF_VEC_FLAGS): New macro.

	* sh.c (output_branch): Fix offset overflow problems.

	* final.c (shorten_branches): Implement CASE_VECTOR_SHORTEN_MODE.
	(final_scan_insn): New argument BODY for ASM_OUTPUT_ADDR_DIFF_ELT.
	* rtl.def (ADDR_DIFF_VEC): Three new fields (min, max and flags).
	* stmt.c (expand_end_case): Supply new arguments to
	gen_rtx_ADDR_DIFF_VEC.
	* 1750a.h (ASM_OUTPUT_ADDR_DIFF_ELT): New argument BODY.
	* alpha.h, arc.h, clipper.h, convex.h : Likewise.
	* dsp16xx.h, elxsi.h, fx80.h, gmicro.h, h8300.h : Likewise.
	* i370.h, i386.h, i860.h, i960.h, m32r.h, m68k.h, m88k.h : Likewise.
	* mips.h, mn10200.h, mn10300.h, ns32k.h, pa.h, pyr.h : Likewise.
	* rs6000.h, sh.h, sparc.h, spur.h, tahoe.h, v850.h : Likewise.
	* vax.h, we32k.h, alpha/vms.h, arm/aof.h, arm/aout.h : Likewise.
	* i386/386bsd.h, i386/freebsd-elf.h : Likewise.
	* i386/freebsd.h, i386/linux.h : Likewise.
	* i386/netbsd.h, i386/osfrose.h, i386/ptx4-i.h, i386/sco5.h : Likewise.
	* i386/sysv4.h, m68k/3b1.h, m68k/dpx2.h, m68k/hp320.h : Likewise.
	* m68k/mot3300.h, m68k/sgs.h : Likewise.
	* m68k/tower-as.h, ns32k/encore.h, sparc/pbd.h : Likewise.
	* sh.h (INSN_ALIGN, INSN_LENGTH_ALIGNMENT): Define.
	(CASE_VECTOR_SHORTEN_MODE): Define.
	(short_cbranch_p, align_length, addr_diff_vec_adjust): Don't declare.
	(med_branch_p, braf_branch_p): Don't declare.
	(mdep_reorg_phase, barrier_align): Declare.
	(ADJUST_INSN_LENGTH): Remove alignment handling.
	* sh.c (uid_align, uid_align_max): Deleted.
	(max_uid_before_fixup_addr_diff_vecs, branch_offset): Deleted.
	(short_cbranch_p, med_branch_p, braf_branch_p, align_length): Deleted.
	(cache_align_p, fixup_aligns, addr_diff_vec_adjust): Deleted.
	(output_far_jump): Don't use braf_branch_p.
	(output_branchy_insn): Don't use branch_offset.
	(find_barrier): Remove checks for max_uid_before_fixup_addr_diff_vecs.
	Remove paired barrier stuff.
	Don't use cache_align_p.
	Take alignment insns into account.
	(fixup_addr_diff_vecs): Reduce to only fixing up the base label of
	the addr_diff_vec.
	(barrier_align, branch_dest): New function.
	(machine_dependent_reorg, split_branches): Remove infrastructure
	for branch shortening that is now provided in the backend.
	* sh.md (short_cbranch_p, med_branch_p, med_cbranch_p): New attributes.
	(braf_branch_p, braf_cbranch_p): Likewise.
	(attribute length): Use new attributes.
	(casesi_worker): Get mode and unsignednedd from ADDR_DIFF_VEC.
	(addr_diff_vec_adjust): Delete.
	(align_2): Now a define_expand.
	(align_log): Now length 0.

Fri Mar  6 14:41:33 1998  Michael Meissner  <meissner@cygnus.com>

	* m32r.md (right): Correctly check for length == 2, not 1.

Fri Mar  6 14:00:04 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips/mips.h: Prototype `machine_dependent_reorg'.
	(ASM_OUTPUT_ALIGN): Remove unused variable `mask'.

Fri Mar  6 11:43:35 1998  Joern Rennecke  (amylaar@cygnus.co.uk)

	* final.c (shorten_branches): Restore accidentally removed code.

Fri Mar  6 11:00:49 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.in: Remove duplicate uses of AC_PROG_CC and
	AC_PROG_MAKE_SET.

Fri Mar  6 00:59:30 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (target_cpu_default2): Correct typo for alphapca56.

Thu Mar  5 23:24:50 1998  Jeffrey A Law  (law@cygnus.com)
			  Doug Evans	 (devans@cygnus.com)

	* haifa-sched.c (build_jmp_edges): Delete dead function.
	(build_control_flow): Use cfg routines from flow.c.
	(schedule_insns): Remove debugging code accidentally checked
	in earlier today.

	* basic-block.h: Add external integer list structures, typdefs,
	accessor macros and function declarations.  Similarly for
	basic block pred/succ support and simple bitmap stuff.
	* flow.c: Add functions for integer list, basic block pred/succ
	support and simple bitmap support.
	(compute_dominators): New function to compute dominators and
	post dominators.
	(find_basic_blocks): Split into two functions.
	(life_analysis): Likewise.
	(flow_analysis): Removed.  Now handled by calling find_basic_blocks,
	the life_analysis from toplev.c.
	* toplev.c (rest_of_compilation): Call find_basic_blocks, then
	life_analysis instead of flow_analysis.

Thu Mar  5 23:06:26 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* jump.c (jump_optimize): Call mark_jump_label also for deleted
	insns.
	(mark_jump_label): Don't increment ref counts for deleted insns.

Thu Mar  5 09:55:15 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips/iris6.h (TARGET_DEFAULT): Parenthesize macro definition.

	* mips/mips.c: Include stdlib.h and unistd.h.
	(mips_asm_file_end): Add braces around empty body in an if-statement.
	(function_prologue): Wrap variable `fnname' in
	!FUNCTION_NAME_ALREADY_DECLARED.  Correct format specifier in fprintf.
	(mips_select_rtx_section, mips_select_section): Declare as void.

	* mips/mips.h: Add prototypes for extern functions in mips.c.
	(FUNCTION_ARG_REGNO_P): Add parentheses around && within ||.
	(ENCODE_SECTION_INFO): Add braces around empty body in an
	if-statement.

	* mips/mips.md (movdi): Add parentheses around && within ||.
	(movsf, movdf): Likewise.
	(branch_zero, branch_zero_di): Add default case in
	enumeration switch.

Thu Mar  5 02:45:48 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/alpha.h (TARGET_WINDOWS_NT, TARGET_OPEN_VMS): Just make them
	real constants, since they can't be changed.
	(TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/alpha.md (builtin_setjmp_receiver): Use it.
	* alpha/osf.h (TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/osf2or3.h (TARGET_AS_CAN_SUBTRACT_LABELS): New.
	* alpha/vms.h (TARGET_OPEN_VMS): New.
	* alpha/win-nt.h (TARGET_WINDOWS_NT): New.

Thu Mar  5 02:41:27 1998  Richard Henderson  <rth@cygnus.com>

	* reload.c (find_reloads): Always force (subreg (mem)) to be
	reloaded if WORD_REGISTER_OPERATIONS.

Thu Mar  5 02:14:44 1998  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (free_list): Rename from free_pnd_lst.
	(free_pending_lists): Rename free_pnd_lst uses.
	(remove_dependence): Place expunged element on unused_insn_list.
	(alloc_INSN_LIST, alloc_EXPR_LIST): New.  Change all callers of
	gen_rtx_*_LIST and alloc_rtx to use them.
	(compute_block_backward_dependences): Free the reg_last_* lists.

Thu Mar  5 00:05:40 1998  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (main): Avoid undefined behavior when setting pend_includes
	and pend_files.

Wed Mar  4 21:58:25 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h: Don't define DEFAULT_VTABLE_THUNKS to 1 if
	USE_GNULIBC_1 is defined.
	* configure.in: Add a new case powerpc-*-linux-gnulibc1 which
	includes the t-linux-gnulibc1 fragment.

Wed Mar  4 12:11:36 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (movdf_internal1a): Fix misplaced parenthesis in condition.

Wed Mar  4 18:47:48 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (final_scan_insn, case CODE_LABEL: Cleanup.

Wed Mar  4 15:51:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Tag the loop alignment onto the
	first label after NOTE_INSN_LOOP_BEG even if there is an
	intervening insn.

Tue Mar  3 21:48:35 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (insn_current_reference_address):
	Use SEQ instead of BRANCH as argument to align_fuzz, to get a
	proper alignment chain.

	* final.c (max_labelno): New static variable.
	(final_scan_insn): Check max_labelno before outputting an
	alignment for a label.
	(shorten_branches): Remove unused variable length_align.

Tue Mar  3 14:27:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.c (ultrasparc_adjust_cost): Add default case in
	enumeration switch.

	* sparc.h: Add prototypes for extern functions defined in
	sparc.c.

Tue Mar  3 10:00:11 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c: Only generate <name>.dbr file when dumping RTL if
	DEALY_SLOTS is defined.

Tue Mar  3 07:36:37 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* reorg.c (fill_eager_delay_slots): Add new argument delay_list
	in call to fill_slots_from_thread.

Mon Mar  2 13:45:03 1998  Richard Henderson  <rth@cygnus.com>

	* alpha/linux.h (CPP_PREDEFINES): Correct connecting whitespace
	to SUB_CPP_PREDEFINES.  Reported by asun@saul4.u.washington.edu.

Mon Mar  2 22:59:28 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (insn_last_address, insn_current_align, uid_align):
	New variables.
	(in_align_chain, align_fuzz, align_shrink_fuzz): New functions.
	(insn_current_reference_address): Likewise.
	(shorten_branches, final_scan_insn): Implement LABEL_ALIGN,
	LABEL_ALIGN_AFTER_BARRIER and LOOP_ALIGN target macros.
	(label_to_alignment): New function.
	* genattrtab.c (write_test_expr): If one of LABEL_ALIGN,
	LABEL_ALIGN_AFTER_BARRIER or LOOP_ALIGN is defined, call
	insn_current_reference_address instead of insn_current_address.
	(or_attr_value, write_length_unit_log): New functions.
	(main): Call write_length_unit_log.
	(write_const_num_delay_slots): Output extra '\n'.
	* alpha.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE):
	Replace with:
	(LOOP_ALIGN, ALIGN_LABEL_AFTER_BARRIER).
	* i386.h, i386/osfrose.h, i386/svr3dbx.h, m68k.h, sparc.h: Likewise.
	* arc.h, m32r.h (ASM_OUTPUT_LOOP_ALIGN): Replace with:
	(LOOP_ALIGN).
	* i960.h, m88k.h (ASM_OUTPUT_ALIGN_CODE): Replace with:
	(LABEL_ALIGN_AFTER_BARRIER).
	* ns32k/encore.h, ns32k/merlin.h, ns32k.h, ns32k/sequent.h: Likewise.
	* ns32k/tek6000.h: Likewise.
	* i386/gas.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE): Delete.
	* i386.md (casesi+1): Use ASM_OUTPUT_ALIGN instead of
	ASM_OUTPUT_ALIGN_CODE.

Mon Mar  2 01:05:50 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Mar  2 00:52:18 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Mar  1 18:25:49 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.

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

Sun Mar  1 18:26:21 1998  Ken Rose  (rose@acm.org)

	* reorg.c (fill_slots_from_thread): New parameter, delay_list.
	All callers changed.

Sun Mar  1 18:25:37 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* frame.c (start_fde_sort, fde_split, heapsort, fde_merge,
	end_fde_sort): New functions for fast sorting of an FDE array.
	(fde_insert): Simplified.
	(add_fdes): Change argument list.
	(frame_init): Use the new functions.

Sun Mar  1 18:06:21 1998  Jeffrey A Law  (law@cygnus.com)

	* ginclude/va-ppc.h (va_arg): Fix typo in long long support.

	* i386.c (reg_mentioned_in_mem): Fix dangling else statement.

	* fold-const.c (fold_range_test): Always return a value.

Sun Mar  1 17:57:34 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* config/i386/winnt.c (i386_pe_unique_section): Put read-only
	data in the text section unless READONLY_DATA_SECTION is defined.

Sun Mar  1 17:48:46 1998  Jeffrey A Law  (law@cygnus.com)

	* c-parse.in (undeclared variable error): Tweak error message to
	be clearer.

Sun Mar  1 10:22:36 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1998-02-28  Mark Mitchell  <mmitchell@usa.net>

	* final.c (final_scan_insn): Undo overzealous removal of `set'.

Sat Feb 28 07:54:03 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* pa.h (CONST_COSTS): When checking the CONST_DOUBLE enumerated
	case, add parentheses to specify the proper order of precedence in
	the if-statement.

	* c-aux-info.c: Include string.h/strings.h.

	* pa.c: Include stdlib.h.
	(pa_combine_instructions): Prototype the function.
	(pa_can_combine_p, forward_branch_p, shadd_constant_p): Likewise.
	(reloc_needed): Add default case for enumeration switch.
	(remove_useless_addtr_insns): Remove unused variable `all'.
	(hppa_expand_prologue): Add explicit braces to avoid
	ambiguous `else'.
	(output_function_epilogue): Remove unused variable `i'.
	(output_millicode_call): Remove unused variable `link'.
	(shadd_constant_p, forward_branch_p): Make the function static.
	(following_call): Explicitly declare to return int.
	(pa_reorg): Declare as void.
	(pa_combine_instructions): Declare as static void.  Add
	parentheses around && within ||.

	* pa.h: Add prototypes for pa_reorg, symbolic_operand,
	following_call, function_label_operand, lhs_lshift_cint_operand
	and zdepi_cint_p.

	* pa.md: Add parentheses around && within ||.

	* cppalloc.c: Include stdlib.h.

	* cpperror.c (cpp_print_containing_files): Remove unused variable
	`i'.  Fix format specifier in fprintf.

	* cse.c (cse_around_loop): Add explicit braces to avoid
	ambiguous `else'.
	(delete_dead_from_cse): Wrap variable `tem' in macro HAVE_cc0.

	* expr.c (expand_expr): Add parentheses around && within ||.

	* final.c (app_enable): Replace fprintf with fputs where there are
	no format specifiers and no trailing argument after the string.
	Eg, when printing ASM_APP_ON/ASM_APP_OFF.
	(app_disable): Likewise.
	(final_end_function): Likewise.
	(final_scan_insn): Likewise.  Remove unused variable `set'.
	(profile_function): Wrap empty if-statement body in {} brackets.

	* function.c: Include stdlib.h.
	(pad_below): Wrap prototype and definition in ARGS_GROW_DOWNWARD.
	(reposition_prologue_and_epilogue_notes): Add parentheses
	around assignment used as truth value.

	* integrate.c (expand_inline_function): Wrap variable
	`cc0_insn' in macro HAVE_cc0.

	* jump.c (jump_optimize): Wrap variable `q' in macro
	HAVE_cc0.  Remove unused variable `prev1'.

	* libgcc2.c (__bb_exit_trace_func): Add parentheses around &&
	within ||.  Fix format specifier in fprintf.
	(__bb_init_prg): Add parentheses around assignment used as
	truth value.

	* local-alloc.c: Include stdlib.h.
	(requires_inout): Add parentheses around assignment used
	as truth value.

	* loop.c (analyze_loop_iterations): Wrap prototype and definition
	in macro HAVE_decrement_and_branch_on_count.
	(insert_bct, instrument_loop_bct): Likewise.
	(move_movables): Add parentheses around assignment used as
	truth value.
	(consec_sets_invariant_p): Likewise.
	(maybe_eliminate_biv_1): Wrap variable `new' in macro HAVE_cc0.

	* objc/objc-act.c: Include stdlib.h.
	(lookup_method_in_protocol_list): Wrap empty else-statement body
	in braces.
	(lookup_protocol_in_reflist): Likewise.
	(objc_add_static_instance): Remove unused variables `decl_expr'
	and `decl_spec'.
	(get_objc_string_decl): Remove unused variable `decl'.
	(generate_static_references): Remove unused variables `idecl' and
	`instance'.
	(check_protocols): Wrap empty else-statement body in braces.

	* protoize.c: Include stdlib.h.
	(substr): Add parentheses around assignment used as truth value.
	(abspath): Likewise.
	(shortpath): Likewise.

	* regmove.c (fixup_match_1): Add parentheses around assignment
	used as truth value.

	* reload.c (push_secondary_reload): Remove unused variable `i'.
	(find_reloads): Add parentheses around assignment used as truth
	value.

	* reload1.c: Include stdlib.h.

	* rtl.h: Correct typo in prototype of offsettable_memref_p.

	* stmt.c (add_case_node): Add parentheses around assignment used
	as truth value.
	(case_tree2list): Likewise.

	* tree.c (valid_machine_attribute): Wrap variable `decl_attr_list'
	in macro VALID_MACHINE_DECL_ATTRIBUTE.  Wrap variable
	`type_attr_list' in macro VALID_MACHINE_TYPE_ATTRIBUTE.
	(merge_attributes): Add explicit braces to avoid ambiguous
	`else'.

	* unroll.c (copy_loop_body): Wrap variable `cc0_insn' in
	macro HAVE_cc0.

	* varasm.c: Include stdlib.h.

	* system.h: Remove sys/stat.h.
	* gcc.c: Add sys/stat.h.

	* genattr.c: Wrap prototype of `free' in NEED_DECLARATION_FREE.
	* genattrtab.c: Likewise.
	* genconfig.c: Likewise.
	* genemit.c: Likewise.
	* genextract.c: Likewise.
	* genflags.c: Likewise.
	* genopinit.c: Likewise.
	* genoutput.c: Likewise.
	* genpeep.c: Likewise.
	* genrecog.c: Likewise.
	* tlink.c: Likewise.  Also wrap `getenv' in NEED_DECLARATION_GETENV.

Fri Feb 27 11:02:47 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* invoke.texi: Use @itemx for a secondary item in a @table.

	* config/m68k/m68k.md (movsf+1): Optimize moving a CONST_DOUBLE
	zero.

Thu Feb 26 00:13:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* choose-temp.c: Fix handling of sys/file.h to work in libiberty.

Wed Feb 25 23:40:54 1998  Jeffrey A Law  (law@cygnus.com)

	* i386.c (struct machine_function): Add new fields for PIC stuff.
	(save_386_machine_status): Fix argument to xmalloc.  Save pic_label_rtx
	and pic_label_name.
	(restore_386_machine_status): Corresponding changes.
	(clear_386_stack_locals): Also clear pic_label_rtx and pic_label_name.

Wed Feb 25 01:31:40 1998  Jeffrey A Law  (law@cygnus.com)

	* c-parse.y (undeclared variable error): Tweak error message
	to be clearer.

Tue Feb 24 23:54:07 1998  Richard Henderson  <rth@cygnus.com>

	* flags.h (g_switch_value, g_switch_set): Declare.
	* alpha.c (override_options): Set g_switch_value=8 if not set.
	* alpha/elf.h (CC1_SPEC): New.
	(ASM_SPEC): New.
	(LINK_SPEC): Pass along the -G value we were given.
	(LOCAL_ASM_OP): Remove.
	(ASM_OUTPUT_ALIGNED_LOCAL): Output to .bss or .sbss by size.
	(MAX_OFILE_ALIGNMENT): New.
	(BSS_SECTION_ASM_OP, SBSS_SECTION_ASM_OP, SDATA_SECTION_ASM_OP): New.
	(EXTRA_SECTIONS): Add sbss and sdata.
	(SECTION_FUNCTION_TEMPLATE): New.
	(EXTRA_SECTION_FUNCTIONS): Use it.
	(CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Remove.
	(SELECT_SECTION): Use sdata when small enough.
	* alpha/linux.h (ASM_SPEC): Remove.

Mon Feb 23 15:09:18 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>
	* config.sub (sco5): Fix typo.

Mon Feb 23 18:19:31 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* config/t-linux (LIBGCC1, CROSS_LIBGCC1, LIBGCC1_TEST): Add macros and
	set to empty.
	* config/t-linux-aout (LIBGCC1, CROSS_LIBGCC1, LIBGCC1_TEST): Likewise.
	* config/alpha/t-linux: Remove file.
	* config/sparc/t-linux: Remove file.
	* config/m68k/t-linux (LIBGCC1, CROSS_LIBGCC1): Remove.
	* config/m68k/t-linux-aout (LIBGCC1, CROSS_LIBGCC1): Likewise.
	* configure.in (alpha*-*-linux-gnulibc1*): Use t-linux instead of alpha/t-linux
	for tmake_file.
	(alpha*-*-linux-gnu*): Likewise.
	(sparc-*-linux-gnulibc1*): Use t-linux instead of sparc/t-linux for tmake_file.
	(sparc-*-linux-gnu*): Likewise.

Mon Feb 23 10:47:39 1998  Robert Lipe  <robertl@dgii.com>
	* collect2.c (ldd_file_name): Bracket declaration with same
	manifests as use.
	(full_real_ld_suffix): Deleted.  Variable was calloced and
	written into, but never read.

1998-02-23  Mike Stump  <mrs@wrs.com>

	* configure.in: Add support for i386-wrs-vxworks configuration.
	* i386/vxi386.h: New file.

Sun Feb 22 21:16:51 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* tree.c (contains_placeholder_p): Ensure function always returns
	a value.
	* sparc.md (movdi_sp64_insn): Add default case in enumeration switch.
	(movsf_const_insn, movdf_const_insn, movtf_const_insn): Likewise.

Sun Feb 22 20:58:19 1998  Jeffrey A Law  (law@cygnus.com)

	* vms.h (SELECT_SECTION): Use TREE_CODE_CLASS correctly.

1998-02-22  Paul Eggert  <eggert@twinsun.com>

	* config/sparc/sol2-sld.h (LINKER_DOES_NOT_WORK_WITH_DWARF2):
	Define this new symbol.
	(DWARF2_DEBUGGING_INFO, DWARF_DEBUGGING_INFO): Do not #undef.
	* toplev.c (main): Do not default to DWARF2_DEBUG with -ggdb if
	LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined.

Sun Feb 22 20:07:32 1998  Jim Wilson  <wilson@cygnus.com>

	* iris5.h (DWARF2_UNWIND_INFO): Define to 0.
	* iris5gas.h (DWARF2_UNWIND_INFO): Define to 1.

Sun Feb 22 15:29:48 1998  Richard Henderson  <rth@cygnus.com>

	* objc/Object.m (-error): Call objc_verror with our va_list.

Sun Feb 22 09:45:39 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* collect2.c (scan_prog_file): Completely cover uses of variable
	`exports' with macro COLLECT_EXPORT_LIST.

Sat Feb 21 20:36:23 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Fri Feb 20 16:22:13 1998  Michael Meissner  <meissner@cygnus.com>

	* sched.c (schedule_block): Remove code to get arguments from hard
	regs into pseudos early.  Same as Aug 25, 1997 change to
	haifa-sched.c.

1998-02-20  Jason Merrill  <jason@yorick.cygnus.com>

	* collect2.c (main): Still handle !do_collecting for non-AIX targets.

1998-02-16  Mark Mitchell  <mmitchell@usa.net>

	* toplev.c (rest_of_compilation): Do not defer the output of a
	nested function.

Fri Feb 20 10:39:47 1998  Michael Tiemann  <michael@impact.tiemann.org>

	* ginclude/va-mips.h (va_arg): Remove trailing space after '\'
	continuation character (line 243).

Fri Feb 20 12:10:26 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* genrecog.c (main): Remove duplicated sentence in emitted comment.

Thu Feb 19 22:36:53 1998  Andrey Slepuhin  <pooh@msu.net>
			  David Edelsohn  <edelsohn@mhpcc.edu>

	* collect2.c (XCOFF_SCAN_LIBS): Remove.
	(export_flag): New variable.
	(export_file): #ifdef COLLECT_EXPORT_LIST.
	(import_file, exports, imports, undefined): New variables.
	(libs, cmdline_lib_dirs, libpath_lib_dirs, libpath, libexts): Same.
	(dump_list, dump_prefix_list, is_in_list): New functions.
	(write_export_file): $ifdef COLLECT_EXPORT_LIST.
	(write_import_file, resolve_lib_name): New functions.
	(use_import_list, ignore_library): Same.
	(collect_exit): maybe_unlink import_file and #ifdef.
	(handler): Same.
	(main): New variable importf, #ifdef exportf.  Move parsing of
	-shared before general argument parsing.  Resolve AIX library
	paths and import libgcc.a symbols.  Treat .so shared libraries the
	same as objects and .a libraries.  Create alias for object_lst and
	increment it instead of original pointer.  Scan AIX libraries as
	objects earlier instead of using scan_libraries.  Perform AIX
	tlink later to resolve templates instead of forking ld.
	(GCC_OK_SYMBOL): Ensure symbol not in undef section.
	(GCC_UNDEF_SYMBOL): New macro.
	(scan_prog_file): Loop for members of AIX libraries.  Handle
	export/import of ctors/dtors.
	(aix_std_libs): New variable.
	(scan_libraries, XCOFF): Delete.

Thu Feb 19 22:36:52 1998  Robert Lipe  <robertl@dgii.com>

	* collect2.c (full_real_ld_suffix): #ifdef CROSS_COMPILE.

1998-02-19  Mike Stump  <mrs@wrs.com>

	* Makefile.in: Use $tooldir for sys-include to match toplevel
	configure.

Thu Feb 19 01:32:37 1998  Jeffrey A Law  (law@cygnus.com)
			  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* emit-rtl.c (gen_lowpart_common): Suppress last change if __complex__.

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

	* combine.c: Revert previous patch.

1998-02-19  Paul Eggert  <eggert@twinsun.com>

	* config/sparc/sol2-sld.h: New file.
	* configure.in (sparc-*-solaris2*): Use it when using the
	system linker.

Thu Feb 19 00:46:59 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (force_movables): Fix typo.

Thu Feb 19 08:26:30 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* m88k.h: Change file pattern to match reality.

Wed Feb 18 23:19:52 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (output_constant_pool): Fix dumb thinko in last
	change.

	* pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Correctly translate from
	a function name to a section name.

1998-02-18  Doug Evans  <devans@cygnus.com>

	* tree.h (merge_machine_{type,decl}_attributes): Declare.
	(split_specs_attrs, strip_attrs): Add prototypes.
	* tree.c (merge_machine_{type,decl}_attributes): New functions.
	* c-decl.c (duplicate_decls): Call merge_machine_decl_attributes.
	Update olddecl's attributes too.
	* c-common.c (strip_attrs): New function.
	* c-typeck.c (common_type): Call merge_machine_type_attributes.
	* varasm.c (make_function_rtl): New target macro REDO_SECTION_INFO_P.
	(make_decl_rtl): Likewise.

1998-02-18  Jim Wilson  <wilson@cygnus.com>

	* c-decl.c (shadow_tag_warned): Call split_specs_attrs.

Wed Feb 18 09:09:50 1998  Jeffrey A Law  (law@cygnus.com)

	Remove this change until we can fix it correctly.
	* collect2.c: Bracket declaration of 'exportf' and
	'full_real_ld_suffix'.

Wed Feb 18 08:44:25 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* Makefile.in (STAGESTUFF): Add genrtl.c, genrtl.h and gengenrtl.

Tue Feb 17 23:30:20 1998  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* c-common.c (c_expand_start_cond, c_expand_end_cond,
	c_expand_start_else): Don't warn about non-ambiguous else even if
	braces are missing.

Tue Feb 17 23:56:50 1998  Robert Lipe  <robertl@dgii.com>

	* sco5.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT,
	ASM_OUTPUT_LONG_DOUBLE): Delete.  Use the ones from i386.h
	instead.

Tue Feb 17 22:56:14 1998  Richard Henderson  <rth@cygnus.com>

	* combine.c (simplify_rtx): Obey CLASS_CANNOT_CHANGE_SIZE when
	simplifying a subreg of a hard reg.
	(expand_compound_operation): Likewise.
	(force_to_mode): Likewise.

Tue Feb 17 22:37:22 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* fold-const.c: Include "system.h" to get stdlib.h and stdio.h.
	(lshift_double): Add parentheses around + or - inside shift.
	(rshift_double): Likewise.
	(size_int_wide): Explicitly set type of `bit_p' to `int'.

	* Makefile.in (fold-const.o): Depend on system.h.

	* Makefile.in (gcc.o): Depend on system.h, in accordance with last
	change to gcc.c.

	* haifa-sched.c: Include "system.h" to get <stdlib.h> and <stdio.h>.
	(BLOCKAGE_RANGE): Add parentheses around arithmetic in operand of |.
	(sched_note_set): Remove unused parameter `b', all callers changed.
	(schedule_block): Likewise for `rgn'.
	(split_hard_reg_notes): Likewise for `orig_insn'.
	(check_live): Likewise for `trg'.
	(update_live): Likewise.
	(check_live_1): Explicitly declare variable `i' as int.
	(update_live_1): Likewise.
	(insn_issue_delay): Remove unused variable `link'.
	(sched_analyze_2): Add default case in enumeration switch.
	(schedule_insns): Remove unused variable `i'.

	* Makefile.in ($(SCHED_PREFIX)sched.o): Depend on system.h.

Tue Feb 17 22:31:04 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (rtx_equal_for_loop_p): Add some braces to disambiguate
	a dangling else clause.

Tue Feb 17 21:28:12 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.h (CAN_ELIMINATE): Don't eliminate the frame
	pointer for the stack pointer in MIPS16 and 64BIT.

Tue Feb 17 21:17:30 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* rtl.h (force_line_numbers, restore_line_number_status): Declare.
	* emit-rtl.c (force_line_numbers, restore_line_number_status):
	New functions.
	* stmt.c (struct nesting): Replace seenlabel with line_number_status.
	(expand_start_case): Adjust to this change.
	(check_seenlabel): New function.
	(pushcase, pushcase_range, expand_endcase): Use it.

Tue Feb 17 10:14:32 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* i386.md (adddi3): Add =!r,0,0,X alternative.

Mon Feb 16 16:13:43 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (MY_ISCOFF): Add numeric value of U803XTOCMAGIC.
	* x-aix31 (INSTALL): Delete.

Mon Feb 16 09:24:32 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.c (mips_expand_epilogue): Update tsize_rtx if
	tsize changes to something other than zero.

Mon Feb 16 09:11:48 1998  Gavin Koch  <gavin@cygnus.com>

	* ginclude/va-mips.h: Replace casts of pointers to int with
	casts of pointers to __PTRDIFF_TYPE__.

Mon Feb 16 08:17:14 1998  John Carr  <jfc@mit.edu>

	* loop.c (strength_reduce, record_biv, record_giv): Use
	HOST_WIDE_INT_PRINT_DEC to print CONST_INT values.

1998-02-16  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (first_rtl_op): New fn.
	(unsave_expr_now): Use it.
	* print-tree.c (print_node): Likewise.
	* tree.c (has_cleanups): New fn.
	* fold-const.c (fold, case CLEANUP_POINT_EXPR): Use it.  Be more
	conservative about pushing the cleanup point down.
	* tree.h: Declare them.

Sun Feb 15 23:28:44 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (flag_schedule_reverse_before_reload): Delete variable.
	(flag_schedule_reverse_after_reload): Likewise.
	(f_options): Remove reverse scheduling support.
	* flags.h (flag_schedule_reverse_before_reload): Delete declaration.
	(flag_schedule_reverse_after_reload): Likewise.
	* haifa-sched.c (rank_for_schedule): Remove support for reverse
	scheduling.

Sun Feb 15 21:33:55 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcc.c: Get system includes, prototypes and macros via "system.h"
	instead of doing it manually.  Change all calls of the ctype
	macros to custom versions defined in "system.h".

	* system.h: Fix return type of bcmp prototype from `void' to `int'.
	Make bcopy, bcmp and bzero prototypes explicitly `extern'.
	Add a prototype for getenv.

Sun Feb 15 17:05:41 1998  Jim Wilson  <wilson@cygnus.com>

	* mips/mips.h (INITIAL_ELIMINATION_OFFSET): Readd Jun 6 change.

Sun Feb 15 15:23:15 1998  John Carr  <jfc@mit.edu>

	* alias.c: Include <stdlib.h> and <string.h>.
	(init_alias_analysis): Pass NULL_RTX instead of 0 to record_set.

Sat Feb 14 11:23:09 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Feb 14 05:08:21 1998  Richard Earnshaw  (rearnsha@arm.com)

	* arm.md (movsfcc): Also validate operands[3] when compiling hard
	float.
	(movdfcc): Only accept fpu_add_operand for operands[3].

	* arm/t-semi (STMP_FIXPROTO): Define to nothing.
	* arm/t-semiaof (STMP_FIXPROTO): Likewise.

Sat Feb 14 02:02:41 1998  Jeffrey A Law  (law@cygnus.com)

	* varasm.c (output_constant_pool): Bring back 'done' label inside
	an appropriate #ifdef.

	* bitmap.c (bitmap_element_allocate): Wrap variable 'i' in an
	appropriate #ifdef.
	(bitmap_copy, bitmap_operation): Likewise.
	* combine.c (combinable_i3pat): Similarly for 'src'.
	* function.c (fixup_var_refs_1): Similarly for 'outerdest'.
	(locate_and_pad_parm): Similarly for 'reg_parm_stack_space'.
	* regclass.c (copy_cost): Similarly for 'secondary_class'.
	* reload.c (make_memloc): Similarly for 'i'.
	(find_reloads_address_1): Similarly for 'link'.
	* reload1.c (reload): Similarly for 'previous_frame_pointer_needed'.
	(emit_reload_insns): Similarly for 'second_reloadreg'.
	* unroll.c (iteration_info): Similarly for 'v'.

	* caller-save.c (insert_save_restore): Remove unused variable 'i'.
	* calls.c (expand_call): Similarly for 'i'.
	(emit_library_call, emit_library_call_value): Similarly for 'mode'.
	* fold-const.c (strip_compound_expr): Similarly for 'type'.
	* function.c (fixup_var_refs_1): Similarly  for 'width'.
	(fixup_memory_subreg): Similarly for 'saved'.
	(locate_and_pad_parm): Similarly for 'boundary_in_bytes.'
	(setjmp_protect): Similarly for 'sub'.
	(thread_prologue_and_epilogue_insns): Similarly for 'insn'.
	* loop.c (record_giv): Similarly for 'p'.
	(combine_givs): Similarly for 'temp_iv'.
	(indirect_jump_in_function_p): Similarly for 'is_indirect_jump'.
	* recog.c (validate_replace_rtx_1): Similarly for 'width'.
	* tree.c (get_set_constructor_bytes): Similarly for 'vals'.
	* unroll.c (unroll_loop): Similarly for 'copy'.
	(iteration_info): Similarly for 'b'.
	* varasm.c (assemble_string): Similarly for 'i'.
	* i386.h (LEGITIMIZE_ADDRESS): Similarly for 'orig_x'.

1998-02-13  Martin von Loewis  <loewis@informatik.hu-berlin.de>

	* c-lang.c (lang_print_xnode): New function.
	* objc/objc-act.c (lang_print_xnode): Likewise.
	* print-tree.c (print_node): Call it

Fri Feb 13 14:38:34 1998  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (decl_scope_node): New type.
	(decl_scope_table): Change type to use it.
	(decl_scope_table_allocated, decl_scope_depth): Change type to int.
	(push_decl_scope): Use new type.  New locals containing_scope, i.
	Add code to handle setting previous field.
	(scope_die_for): Change type of local i to int.  Add code to use
	previous field.
	(dwarf2out_init): Use new type.

1998-02-13  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (emit_throw): Lose throw_used.

Fri Feb 13 20:36:05 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sched.c (update_flow_info, REG_WAS_0): Ignore if setting insn
	was deleted.
	* haifa-sched.c (update_flow_info, REG_WAS_0): Likewise.

Fri Feb 13 12:18:40 1998  Jeffrey A Law  (law@cygnus.com)

	* genextract.c (main): Fix typo.

Fri Feb 13 08:41:49 1998  Robert Lipe  <robertl@dgii.com>

	* c-lang.c (finish_file): Bracket declaration of static_ctors,
	static_dtors.

	* calls.c (expand_call): Bracket declaration of 'rtx_before_call',
	'old_stack_arg_under_construction'
	(emit_library_call): Bracket declaration of 'upper_bound',
	'lower_bound', 'i', 'reg_parm_stack_space'
	(emit_library_call_value): Likewise.
	(store_one_arg):

	* collect2.c: Include <unistd.h> when appropriate.
	Bracket declaration of 'exportf' and 'full_real_ld_suffix'.

	* emit-rtl.c (prev_cc0_setter): Remove unused variable 'link'.

	* explow.c (plus_constant_for_output_wide): Remove unused variable
	'code'.
	(memory_address): Remove unused variable 'orig_x'.

	* genattrtab.c (make_canonical): Remove unreferenced label 'cond:'.
	(write_const_num_delay_slots): Remove unused variable 'i'.

	* genopinit.c (main): Remove unused variables 'dummy', 'insn_ptr'.
	(gen_insn): Remove unused variable 'obstack_ptr'.

	* libgcc2.c (__bb_exit_func): Remove unused variables 'ret',
	'j', 'tmp', 'i'.
	(__bb_exit_trace_func): Remove unused variable 'e'.

	* optabs.c (expand_binop): Remove unused variables 'lhs', 'rhs',
	'funexp'.
	(expand_unop): Remove unused variable 'funexp'.
	(expand_complex_abs): Remove unused variable 'funexp'.
	(init_optabs): Bracket declaration of 'j'.
	(init_complex_libfuncs): Deleted.  Dead static function.

	* profile.c (branch_prob): Remove unused variables 'insn', 'dest'.

	* reg-stack.c: Fix typo in proto for 'get_asm_operand_lengths'
	(reg_to_stack): 'initialized', 'before_function_beg'
	explicitly type as ints instead of defaulting.
	(emit_swap_insn): Remove unused variable 'i2'.
	(compare_for_stack_reg): Remove unused variable 'src_note'.

	* rtlanal.c (computed_jump_p): Remove unused variable 'computed_jump'.

	* sched.c (actual_hazard): Bracket declaration of 'this_cost'.

	* stmt.c (add_case_node): Add parens for assignment used as truth.
	(all_cases_count): Remove unused variable 'count_high'.
	(mark_seen_cases): Remove unused variable 'i'.
	(check_for_full_enumeration_handling): Remove unused variable 't'.
	Bracket declaration of  'all_values', 'l'.

	* tlink.c: Include <stdlib.h>, <unistd.h>, <string.h>/<strings.h>.

	* varasm.c (assemble_string): Remove unused variable 'i'.
	(immed_double_const): Remove unused variable 'in_current_obstack'.
	(immed_real_const_1): Likewise.
	(output_constant_pool): Remove unreferenced label 'done'.
	(output_constant): Remove unused variable 'x'.

	* i386/i386.h (ENCODE_SECTION_INFO): TREE_PUBLIC is an int, not
	a string.

	* i386/sco5.h (ASM_OUTPUT_ASCII): Add parens for assignment used
	as truth.

Fri Feb 13 10:21:41 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* combine.c (can_combine_p): Handle USEs in PARALLELs.

Fri Feb 13 01:34:14 1998  H.J. Lu  (hjl@gnu.org)

	* config/linux.h (LIB_SPEC): Add -lc for -shared if
	USE_GNULIBC_1 is not defined.
	* config/sparc/linux.h; Likewise.

	* config/sparc/linux64.h (LIB_SPEC): Add -lc for -shared.

	* config/alpha/linux-elf.h (LIB_SPEC): New. Defined if
	USE_GNULIBC_1 is not defined.

Fri Feb 13 01:29:29 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/sysv4.h (ENDFILE_SPEC): Add missing %(endfile_linux)
	for -mcall-linux.

Fri Feb 13 01:23:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* system.h: New file to get common systems includes and various
	definitions and declarations based on autoconf macros.

Fri Feb 13 00:46:19 1998  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (new_include_prefix): Correctly handle -I./.

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 16:45:17 1998  Robert Lipe  <robertl@dgii.com>

	* expr.c (expand_assignment): Correct typo exposed by -Wall.
	offset should have been a truth value, not an assignment.

Thu Feb 12 15:26:50 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (delete_dead_from_cse): If a libcall produces a constant
	result and that result can be substituted into SET_SRC of the
	insn with the REG_RETVAL note, then perform the substitution
	and delete the libcall.

Thu Feb 12 14:04:09 1998  Gavin Koch  <gavin@cygnus.com>

	* mips.md (trucndihi2,truncdiqi2): Change these to support
	mips16.

Thu Feb 12 11:34:55 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.c (movdi_operand): Direct references to symbols
	that arn't mips16 consts in mips16 mode arn't valid operands.

	* mips/mips.c (mips_move_2words): Add gprel handling.

Thu Feb 12 11:18:37 1998  Gavin Koch  <gavin@cygnus.com>

	* mips.md (extendsidi2): Allow extension to/from a non-mips16
	register.

Thu Feb 12 00:04:16 1998  Marc Lehmann  <pcg@goof.com>

	* i386.c: Conditionally include <stdlib.h>, <string.h>, and
	<strings.h>.

Wed Feb 11 11:43:34 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (WARN_CFLAGS): New variable.
	(bootstrap, bootstrap2, bootstrap3, bootstrap4): Use it.

1998-02-11  Mark Mitchell  <mmitchell@usa.net>

	* config/i386/i386.c (reg_mentioned_in_mem): Don't abort when
	falling through default case in switch.
	(i386_aligned_p): Likewise.

Wed Feb 11 12:59:56 1998  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* mips/mips.h (mips_abi_string): Correct typo in comment.

Wed Feb 11 08:29:56 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.md (movdi): These PLUS's need to be Pmode.

Wed Feb 11 01:47:54 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in (dwarf2out.o, emit-rtl.o, jump.o, cse.o, unroll.o,
	reorg.o, regmove.o): Depend on insn-codes.h, it gets included
	indirectly via expr.h.

Wed Feb 11 01:44:13 1998  Richard Henderson  <rth@cygnus.com>

	* stor-layout.c (layout_type): Do upper - lower in the native type,
	so as to properly handle negative indices.

Wed Feb 11 01:35:55 1998  Robert Lipe  <robertl@dgii.com>

	* except.c (start_dynamic_cleanup): Remove unused variable 'dhc'.
	(expand_eh_region_start_tree): Remove unused variable 'note'.
	(exception_optimize): Remove unused variable 'regions'.
	(expand_builtin_eh_stub): Remove unused variable 'temp'.
	(copy_eh_entry): Deleted.  Dead function.

	* expr.c (move_block_to_reg): Bracket declaration of 'pat' and
	'last' with same #if HAVE_load_multiple as use of it.
	(move_block_from_reg): Likewise.
	(emit_move_insn_1): Remove unused variable 'insns'.
	(store_constructor): Bracket declaration of startb, endb with
	#if TARGET_MEMFUNCTIONS.  Remove unused variables 'set_word_size'
	'target', and 'xtarget'.
	(expand_builtin_setjmp): Remove unused variables 'op0',
	'next_arg_reg', 'old_inhibit_defer_pop'.
	(expand_builtin): Remove unused variable 'offset'.
	(do_store_flag): Remove unused variables 'pattern', 'jump_pat'.
	(emit_queue): Add parens for assignment used as conditional.
	(expand_expr): Case TARGET_EXPR: Remove unused variable 'temp'.

Wed Feb 11 01:30:49 1998  Marc Lehmann  <pcg@goof.com>

	* i386.c: Added include for recog.h.
	(override_options): Removed unused variable p. Initialized regno to
	avoid warning.
	(order_regs_for_local_alloc): Initialized regno to avoid warning.
	(legitimize_address): Likewise for 'other'.
	(i386_aligned_reg_p): Added default case with abort ().
	(print_operand): Likewise.
	(reg_mentioned_in_mem): Likewise.
	(ix86_expand_binary_operator): Removed unused variables i & insn.
	(ix86_expand_unary_operator): Removed unused variable insn.
	(output_fp_cc0_set): Removed unused variable unordered_label.

Wed Feb 11 01:23:03 1998  John F. Carr  <jfc@mit.edu>

	* i386.c, i386.h, i386.md: Change gen_rtx (X, ...) to gen_rtx_X (...).
	Use GEN_INT instead of gen_rtx (CONST_INT). Make printf arguments
	and format string match.

Wed Feb 11 01:17:39 1998  Jeffrey A Law  (law@cygnus.com)

	* flow.c (life_analysis): Do not consider the stack pointer live at
	the end of a function if the function calls alloca.
	(mark_used_regs): Similarly.

1998-02-10  John F Carr  <jfc@mit.edu>

	* config/sparc/sparc.md (movdi_v8plus): Output stx on alternative
	1, fzero on alternative 8.

Tue Feb 10 09:02:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p.

Tue Feb 10 03:35:43 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (find_reloads_toplev): Handle arbitrary non-paradoxical
	SUBREGs of CONST_INTs.

Mon Feb  9 17:52:36 1998  John Carr  <jfc@mit.edu>

	* mips.c (print_operand, function_prologue): Make printf format
	match argument type.

Mon Feb  9 02:37:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* alpha.c (alpha_return_addr): Remove unused variable `first'.
	(alpha_ra_ever_killed): Remove unused variables `ra' and `i'.
	(output_epilog): Remove unused variable `frame_size_from_reg_save'.

Sun Feb  8 14:56:03 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* loop.c (strength_reduce): When placing increment for auto-inc
	case, do comparison in loop order.

Sun Feb  8 13:21:38 1998  John Carr  <jfc@mit.edu>

	* bitmap.c (bitmap_debug_file): HOST_PTR_PRINTF converts a pointer,
	not a HOST_WIDE_INT.

	* calls.c (expand_call): Change test of expand_inline_function
	return value to stop compiler warning.

	* genattrtab.c (RTL_HASH): Cast pointer to long, not HOST_WIDE_INT.

Sun Feb  8 12:04:24 1998  Jim Wilson  (wilson@cygnus.com)
			  Jeff Law  (law@cygnus.com)

	* regmove.c: Fix various minor formatting problems.
	(optimize_reg_copy_1): Stop search at CALL_INSNs if flag_exceptions
	is true.  Make end of basic block tests consistent through regmove.c.
	(optimize_reg_copy_2, optimize_reg_copy_3): Likewise.
	(fixup_match_2, fixup_match_1, regmove_optimize): Likewise.

Sun Feb  8 01:49:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gansidecl.h: Check for a conflicting macro definition before
	attempting to prototype bcopy, bcmp or bzero.

Sun Feb  8 00:09:59 1998  Jeffrey A Law  (law@cygnus.com)

	* expr.c (clear_pending_stack_adjust): Handle case where a function
	calls alloca, but the user has specified -fomit-fframe-pointer.

	* function.c (assign_parms): Fix typo in last change.

Sat Feb  7 23:54:29 1998  Robert Lipe  <robertl@dgii.com>

	* gcc.c: Include <strings.h>/<string.h>, <stdlib.h>, <unistd.h>,
	<fcntl.h>.
	(free_path_suffix): Remove unreferenced static function.
	(process_command): Remove unused variable temp.
	(default_arg): Remove unused variable i.
	(do_spec_1): Add parens for assignment used as truth value.
	(main): Likewise.
	(validate_all_switches): Likewise.
	(main): Remove unused variables i, first_time>

	* c-common.c: Include <stdlib.h> and <string.h>/<strings.h>.

	* calls.c (expand_call): Remove unused variables funtree,
	n_regs, and tmpmode.

	* dbxout.c, except.c: Include <string.h>/<strings.h>.

	* explow.c (plus_constant_for_output_wide): Removed unused
	variable all_constant.

	* c-decl.c, genattr.c, genattrtab.c, getconfig.c, genemit.c
	genextract.c, genflags.c, genopinit.c genoutput.c, genpeep.c,
	genrecog.c, global.c, integrate.c , stupid.c : Include
	<stdlib.h>.

	* genextract.c (walk_rtx): Remove unused variable link.

	* genrecog.c (concat): Remove unreferenced static function.

	* prefix.c: Include <string.h>/<strings.h>, <stdlib.h>

	* stmt.c: Include <stdlib.h>.
	(expand_asm_operands): Remove unused variable val1.
	(expand_return): Remove unused variable block.
	(pushcase): Remove unused variables l and n.
	(pushcaserange): Likewise.

	* unroll.c (unroll_loop): Remove unused variable temp.

Sat Feb  7 23:46:09 1998  Greg McGary  <gkm@gnu.org>

	* c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only.

Sat Feb  7 15:11:28 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_FUNC_PRINTF_PTR): New macro to test the printf
	functions for whether they support the %p format specifier.
	* acconfig.h (HOST_PTR_PRINTF): Insert stub for autoconf.
	* configure.in (GCC_FUNC_PRINTF_PTR): Use it.
	* configure, config.in: Rebuild.

Fri Feb  6 14:20:16 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.

Fri Feb  6 14:34:28 1998  Gavin Koch  <gavin@cygnus.com>

	* mips/t-r3900: New - same as t-ecoff but eliminate
	multilibs: mips1 and mips3.
	* configure.in (tx39*): Use new mips/t-r3900.
	* configure: Rebuild.
	* mips/r3900.h (MULTILIB_DEFAULTS): Eliminate mips1.

1998-02-06  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: Add old_args_size.
	(dwarf2out_args_size): Use it.
	(dwarf2out_begin_prologue): Initialize it.
	(dwarf2out_stack_adjust): If !asynchronous_exceptions, save up
	pushed args until we see a call.
	* final.c (final_scan_insn): Hand CALL_INSNs off to the dwarf2 code
	before outputting them.

1998-02-06  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

	* cplus-dem.c (demangle_template_template_parm): New function.
	(demangle_template): Handle template template parameters.

1998-02-02  Mark Mitchell  <mmitchell@usa.net>

	* calls.c (expand_call): Don't confuse member functions named
	realloc, setjmp, and so forth with the standard library
	functions of the same names.

Thu Feb  5 21:59:49 1998  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (expand_asm_operands): Correctly identify asm statements
	no output operands.

Thu Feb  5 21:56:06 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* c-common.c (decl_attributes): Flag unrecognized attribute
	functions as warnings instead of as errors.

1998-02-05  Marc Lehmann  <pcg@goof.com>

	* integrate.c (INTEGRATE_THRESHOLD): Inline only small functions
	when -Os is specified.
	* toplev.c (main): Don't disable flag_inline_functions anymore when
	-Os is in effect.

Fri Feb  6 00:27:36 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* regmove.c: Update.
	* flags.h (flag_regmove): Declare.
	* rtl.h (optimize_reg_copy_1, optimize_reg_copy_2): Don't declare.
	* local-alloc.c (optimize_reg_copy_1, optimize_reg_copy_2):
	Moved into regmove; changed caller.
	* toplev.c (rest_of_compilation): Call regmove_optimize also for
	expensive_optimizations.

Thu Feb  5 13:38:42 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Feb  5 01:45:19 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>
	Undo this change (the problem was actually in reload):
	Fri Jan 23 23:28:59 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	  * sh.md (movqi_i+1): New peephole.

Tue Feb  3 01:11:12 1998  Jeffrey A Law  (law@cygnus.com)

	* jump.c (jump_optimize): Lose calls to modified_in_p they are
	not needed anymore due to changes elsewhere in jump.c.

	* jump.c (jump_optimize): Fix first arg to modified_in_p in
	previous change.

Mon Feb  2 19:18:14 1998  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin_setjmp): Accept two new arguments for
	the labels to branch to on first and subsequent executions.  Don't
	play with __dummy.  Rename `setjmp' insn to `builtin_setjmp_setup',
	and provide it with the jmp_buf.  Use only one of
	`builtin_setjmp_receiver' or `nonlocal_goto_receiver',
	and provide the former with the target label.
	(expand_builtin) [BUILTIN_SETJMP]: Generate a label for use by setjmp.
	(expand_builtin) [BUILTIN_LONGJMP]: Split out to ...
	(expand_builtin_longjmp): ... here.  Recognize a `builtin_longjmp'
	insn to replace all of the normal nonlocal_goto code.  Don't play
	with __dummy.  Correct arguments to nonlocal_goto.
	* expr.h (expand_builtin_setjmp): Update prototype.
	* except.c (start_dynamic_handler): When using builtin_setjmp,
	generate more accurate flow information.

	* alpha.md (nonlocal_goto_receiver_osf): Delete.
	(nonlocal_goto_receiver_vms): Rename to nonlocal_goto_receiver.
	(builtin_longjmp, builtin_setjmp_receiver): New.
	* sparc.md (update_return): Disambiguate unspec number.
	(nonlocal_goto): Rearrange arguments to match caller in except.c.
	(builtin_setjmp_setup): Rename from setjmp.  Match and ignore the
	jmp_buf operand.
	* mips.md (nonlocal_goto_receiver, builtin_setjmp_receiver): Remove.
	(builtin_setjmp_setup*, builtin_longjmp): New.

Mon Feb  2 16:43:10 1998  John Carr  <jfc@mit.edu>

	* mips.md: Change gen_rtx (CONST_INT) to GEN_INT.

Mon Feb  2 13:06:47 1998  Jim Wilson  <wilson@cygnus.com>

	* vmsconfig.com: Remove bytecode references.

1998-01-30  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* dwarf2out.c (dwarf2out_frame_init): Undo last change, so that
	-fno-sjlj-exceptions works for a target that defines
	DWARF2_UNWIND_INFO as zero.

	* regmove.c (fixup_match_1): Undo last change which removed some
	"useless" code, and add a comment explaining this.

Mon Feb  2 10:47:14 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.c (mips_expand_prologue): Change uses of TARGET_64BIT
	to TARGET_LONG64.

Mon Feb  2 10:38:41 1998  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Remove bytecode references.
	Create genrtl files.

Mon Feb  2 02:08:04 1998  Michael P. Hayes  <michaelh@ongaonga.chch.cri.nz>

	* jump.c (jump_optimize): Allow conditional loading of floating point
	constants and constants from memory.  Reinstalled modified_in_p tests.

Mon Feb  2 01:38:39 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (get_condition): Handle sign-extended constants.

Mon Feb  2 01:22:46 1998  Hans-Peter Nilsson  <hp@axis.se>

	* expr.c (emit_push_insn): Add code to use movstrti if present.

	* expr.c (emit_push_insn): Use same max-move-amount for movstrhi
	and movstrqi as in emit_block_move ().

Mon Feb  2 00:09:52 1998  Toon Moene  <toon@moene.indiv.nluug.nl>

	* config/m68k/x-next: Remove /NextDeveloper/Headers from
	the directories to fixinclude - /usr/include is a link
	to it and hence its contents are fixed by default.

Sun Feb  1 14:15:33 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h: Define JUMP_TABLES_IN_TEXT_SECTION.

Sun Feb  1 13:01:15 1998  Klaus Kaempf  <kkaempf@progis.de>

	* cccp.c (main): Predefine __VMS_VER on VMS.

Sun Feb  1 12:39:53 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (get_inner_reference): Use sbitsizetype for type sizes.
	* fold-const.c (size_int): Replace with
	(size_int_wide).
	(make_bit_field_ref): Use bitsize_int for bit position.
	* stor-layout.c (sizetype): Delete.
	(sizetype_tab, sbitsizetype, ubitsizetype): Declare.
	(layout_record, layout_union, layout_type):
	Use bitsize_int for bit size.
	(set_sizetype): New function.
	(make_signed_type, make_unsigned_type): Use it.
	* c-decl.c (init_decl_processing): Likewise.
	* tree.h (size_int): Don't delcare, #define.
	(size_int_wide, sizetype_tab, sbitsize, ubitsize): Declare.
	(set_sizetype): Declare.
	(bitsize_int, size_int_2, BITS_PER_UNIT_LOG, sizetype, bitsizetype):
	Define.
	* c-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
	Convert result to sizetype.
	(really_start_incremental_init, push_init_level):
	Set type of constructor_bit_index to sbitsizetype.
	(push_init_level): Use unsigned arithmetic to determine padding.
	(output_init_element): Likewise.

Sun Feb  1 03:32:07 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c (simplify_shift_const): Fix typo in last change.

Sun Feb  1 02:50:46 1998  John Carr  <jfc@mit.edu>

	* combine.c (simplify_shift_const): (lshiftrt (truncate (lshiftrt)))
	is (truncate (lshiftrt)).

Sun Feb  1 01:06:53 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_unaligned_load): Use expand_binop properly.
	Make sure result winds up in TGT.
	(alpha_expand_unaligned_store): Use expand_binop properly.  Allow
	src to be other than DImode.
	(alpha_expand_unaligned_load_words): Tidy.  Take an offset argument.
	(alpha_expand_unaligned_store_words): Likewise.
	(alpha_expand_block_move): Use REGNO_POINTER_ALIGN.  Restructure so
	that source and destination are separately optimized for alignment.
	(alpha_expand_block_clear): Use REGNO_POINTER_ALIGN.

Sun Feb  1 01:55:09 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.md (adddi3_internal_2): Be consistent with adddi3 expander
	with handling of -32768.

Sun Feb  1 01:48:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* aclocal.m4 (GCC_NEED_DECLARATION): Modify macro to accept a
	shell variable argument instead of only hard coded functions.
	(GCC_NEED_DECLARATIONS): New macro to accept multiple functions.

	* configure.in: Collapse multiple calls to AC_CHECK_FUNCS into one
	call.  Collapse multiple calls to GCC_NEED_DECLARATION into one
	call to GCC_NEED_DECLARATIONS (new macro.)  Check if we need
	declarations for bcopy, bcmp and bzero.

	* acconfig.h: Add stubs for bcopy, bcmp and bzero declarations.

	* gansidecl.h: If we have bcopy but don't declare it, then do so.
	Likewise for bcmp and bzero.  Only define macros for bcopy, bcmp,
	bzero, index and rindex if they aren't already present.

Sat Jan 31 11:26:58 1998  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (close_dump_file): Wrap function prototype for
	argument "func" in PROTO.
	(dump_rtl): Likewise.

Fri Jan 30 22:30:39 1998  John Carr  <jfc@mit.edu>

	* sparc.c (sparc_override_options): Make v8plus and ultrasparc set
	MASK_V8PLUS.
	(output_function_epilogue): Omit epilogue if nothing drops through.
	(output_move_double): Suppress int ldd usage on ultrasparc and v9.
	(registers_ok_for_ldd_peep): Likewise.
	(print_operand): Suppress b,a on ultrasparc.  Let Y accept a constant.
	(ultrasparc_adjust_cost): New function.
	(sparc_issue_rate): New function.
	* sparc.h (MASK_VIS, TARGET_VIS): New.
	(MASK_V8PLUS, TARGET_V8PLUS): New.
	(TARGET_HARD_MUL32, TARGET_HARD_MUL): New.
	(TARGET_SWITCHES): Add vis and v8plus.
	(REG_CLASS_FROM_LETTER): Accept d and b for VIS.
	(REGISTER_MOVE_COST): FP<->INT move cost 12 for ultrasparc.
	(RTX_COSTS): Use TARGET_HARD_MUL.
	(ADJUST_COST): Call ultrasparc_adjust_cost.
	(ISSUE_RATE): New.
	* sparc.md (attr type): Add sload, fpmove, fpcmove.  Adjust users
	of load & fp appropriately.
	(supersparc function units): Adjust for Haifa.
	(ultrasparc function units): Likewise.
	(get_pc_via_rdpc): All v9, not just arch64.
	(movdi_v8plus, movdi_v8plus+1): New.
	(adddi3_sp32+1): New.
	(subdi3_sp32+1): New.
	(movsi_insn, movsf_const_insn, movdf_const_insn): Know VIS.
	(addsi3, subsi3, anddi3_sp32, andsi3, and_not_di_sp32): Likewise.
	(and_not_si, iordi3_sp32, iorsi3, or_not_di_sp32, or_not_si): Likewise.
	(xorsi3_sp32, xorsi3, xor_not_di_sp32, xor_not_si): Likewise.
	(one_cmpldi2_sp32, one_cmplsi2): Likewise.
	(ldd peepholes): Suppress for v9.
	(return_adddi): Kill redundant test.  Arg1 may be arith_operand.
	(return_subsi): Revmove.

Fri Jan 30 18:30:03 1998  John F Carr  <jfc@mit.edu>

	* mips.c (save_restore_insns): Set RTX_UNCHANGING_P in register
	save/restore MEM rtl.

Fri Jan 30 09:08:16 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check for declaration of abort.
	* acconfig.h: Corresponding changes.
	* toplev.c: Use NEED_DECLARATION_ABORT to determine if abort should
	be declared.

Thu Jan 29 20:26:12 1998  Jeffrey A Law  (law@cygnus.com)

	* genattrtab.c (optimize): Define in case PRESERVE_DEATH_INFO_REGNO_P
	uses it.

Thu Jan 29 09:27:56 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Jan 29 10:12:27 1998  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Check for atoq and atoll.
	* rtl.c (read_rtx): Use HAVE_ATOLL and HAVE_ATOQ to select the
	proper routine for converting ascii into long long values.

Thu Jan 29 01:28:14 1998  Klaus Kaempf  <kkaempf@progis.de>

	* cccp.c (SYS$SEARCH, SYS$PARSE): Write as upper-case.

	* vmsconfig.com: Remove bytecode references.

	* alpha/vms.h (PREFIX): Define.

	* alpha/vms.h (ASM_OUTPUT_ALIGNED_COMMON): Remove.

	* am-alpha.h: Don't include alloca for OPEN_VMS.

	* alpha/xm-vms.h (HAVE_CPP_STRINGIFY): Define.

	* alpha/xm-vms.h (INCLUDE_DEFAULTS): Define.
	(GCC_INCLUDE_DIR): Define.

	* make-cc.com, make-cccp.com, make-cc1.com: Removed.
	* makefile.vms: New file.

	* alpha/vms.h (CPP_PREDEFINES): Remove -Dalpha.

	* alpha.c (output_prolog): Output '.name' directive
	for minimal traceback information.

	* alpha.c (output_prolog): Don't prepend entry point symbols
	with '$' on OPEN_VMS.

Thu Jan 29 00:25:35 1998  David S. Miller  <davem@tanya.rutgers.edu>
			  Jeffrey A Law  (law@cygnus.com)

	* rtl.c (read_rtx): Use atol/atoq based upon disposition of
	HOST_WIDE_INT.

	* genattrtab.c (write_test_expr): Use HOST_WIDE_INT_PRINT_DEC
	as needed.
	* genemit.c (gen_exp): Likewise.
	* genpeep.c (match_rtx): Likewise.
	* genrecog.c (write_tree_1): Likewise.

	* c-lex.c (yyprint): Use proper format string based upon
	disposition of HOST_BITS_PER_WIDE_INT.
	(yylex): Put casts in right place for args to build_int_2.

Thu Jan 29 00:24:29 1998  Jeffrey A Law  (law@cygnus.com)

	* combine.c: Fix typos in Jan27 changes.

Thu Jan 29 00:07:49 1998  Ollivier Robert  <roberto@keltia.freenix.fr>

	* i386/freebsd.h (LIB_SPEC): Correctly handle -shared, -p and friends.
	(LINK_SPEC): Likewise.
	(STARTFILE_SPEC): Likewise.

1998-01-28  Mike Stump  <mrs@wrs.com>

	* rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after
	reload completes.
	* genattrtab.c (reload_completed): Define.

	* m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Remove obsolete
	comments.

Wed Jan 28 20:11:06 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
	SUBREG_REG if the word count is unchanged, also in the input reload
	case.  Disable non-applicable sanity checks.

Wed Jan 28 20:08:26 1998  Jeffrey A Law  (law@cygnus.com)

	* config/t-svr4 (TARGET_LIBGCC2_CFLAGS): Add -fPIC.

Wed Jan 28 20:04:43 1998  Ian Lance Taylor  <ian@cygnus.com>

	* i386/t-cygwin32 (LIMITS_H_TEST, LIBGCC2_INCLUDES): Define.

Wed Jan 28 11:45:27 1998  Per Bothner  <bothner@cygnus.com>

	* dbxout.c (dbxout_type): For a RECORD_TYPE, check that TYPE_BINFO
	is a TREE_VEC before trying to use it for baseclasses.
	(Chill uses the same field for a different purpose.)

	* toplev.c (strip_off_ending): Generalize to endings up to 5 chars.

Tue Jan 27 23:15:55 1998  Lassi A. Tuura  <lat@iki.fi>

	* config.sub: More accurate determination of HP processor types.

Tue Jan 27 23:11:11 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* c-lex.c: Include <stdlib.h> and <string.h>/<strings.h>.  Add
	prototype for `handle_sysv_pragma', and make it static.  Add
	parentheses around assignment used as truth value.

	* combine.c (combine_instructions): Protect variable `prev' with
	macro HAVE_cc0.
	(can_combine_p): Protect variable `link' with AUTO_INC_DEC.
	(extract_left_shift): Add parentheses around operand of &.
	(merge_outer_ops): Avoid an empty body in an else-statement.
	(gen_rtx_combine): Remove unused variable `i'.

	* sparc/gmon-sol2.c: Include <fcntl.h>.  Make return type of
	function monstartup `void'.  Likewise for internal_mcount.  Add
	`static void' prototype for moncontrol.  Reconcile sprintf format
	vs. args.

	* sparc/sparc.c: Include <stdlib.h> and <string.h>/<strings.h>.
	Make return type of function_arg_slotno explicitly `int'.
	(reg_unused_after): Add	parentheses around assignment used as
	truth value.
	(save_regs): Add explicit braces to avoid ambiguous `else'.
	(function_arg_slotno): Add parentheses around && within ||.
	(function_arg_pass_by_reference): Likewise.
	(sparc_flat_output_function_prologue): Reconcile fprintf format
	vs. args.

	* svr4.h (ASM_OUTPUT_LIMITED_STRING): Add parentheses around
	assignment used as truth value.

	* cplus-dem.c: Include <stdlib.h>.
	(demangle_signature): Avoid an empty body in an else-statement.
	(do_type): Remove unused variable `lvl'.

	* cppexp.c: Don't have <stdlib.h> depend on MULTIBYTE_CHARS.
	Include <string.h>/<strings.h>.
	(cpp_lex): Remove unused variable `namelen'.
	(cpp_lex): Explicitly declare `num_chars' as an int.

	* cpplib.c: Avoid duplicate inclusion of <stdlib.h>, include
	<unistd.h> instead.  Explicitly declare is_system_include
	returning int.
	(make_assertion): Remove unused variable `kt'.
	(cpp_expand_to_buffer): Hide variable `obuf'.
	(output_line_command): Remove unused variables, `line_end',
	`line_cmd_buf' and `len'.
	(macarg): Remove unused variable `arg_start'.
	(special_symbol): Remove unused variable `i'.  Add parentheses
	around assignment used as truth value.
	(do_include): Remove unused variables `pcfname' and `retried',
	hide `pcf' and `pcfbuflimit'.
	(do_line): Remove unused variable `i'.
	(finclude): Hide variable `missing_newline'.
	(cpp_handle_options): Remove unused variable `j'.
	(read_token_list): Remove unused variable `eofp'.
	(cpp_error_with_line): Remove unused variable `i'.
	(cpp_warning_with_line): Likewise.
	(cpp_pedwarn_with_line): Explicitly declare `column' as int.
	(cpp_error_from_errno): Remove unused variable `i'.

	* cse.c (invalidate): Add parentheses around assignment used as
	truth value.
	(find_best_addr): Move declaration of variable `our_cost' inside
	the conditional macro where its used.
	(fold_rtx): Avoid an empty body in an if-statement.
	(cse_insn): Wrap variables  `this_insn_cc0_mode' and
	`this_insn_cc0' in macro HAVE_cc0.

	* dwarf2out.c: Include <stdlib.h> and <string.h>/<string.h>.
	(ASM_OUTPUT_DWARF_DATA8): Reconcile format vs. args in fprintf's.
	(output_uleb128): Likewise.
	(output_sleb128): Likewise.
	(output_cfi): Likewise.
	(output_call_frame_info): Remove unused variables `j', `fde_size'
	and `fde_pad'.
	(comp_unit_has_inlines): Hide declaration as per rest of file.
	(size_of_line_prolog): Correct typo in prototype.
	(add_arange): Likewise.
	(output_aranges): Likewise.
	(add_name_and_src_coords_attributes): Likewise.
	(gen_array_type_die): Likewise.
	(gen_inlined_subroutine_die): Likewise.
	(equate_decl_number_to_die): Remove unused variable `i'.
	(print_die): Reconcile format vs. args in fprintf's.
	(print_dwarf_line_table): Likewise.
	(output_die): Likewise.
	(output_line_info): Likewise.
	(add_subscript_info): Avoid an empty body in an else-statement.
	(gen_subprogram_die): Remove unused variable `fp_loc'.

	* dwarfout.c: Explicitly declare `next_pubname_number' as int.
	Protect `ordering_attribute' prototype with USE_ORDERING_ATTRIBUTE
	macro.  Protect `src_coords_attribute' prototype with
	DWARF_DECL_COORDINATES macro.  Hide `output_entry_point_die'
	prototype as in the rest of the file.  Likewise for
	`output_pointer_type_die' and `output_reference_type_die'.  Remove
	prototype for `type_of_for_scope'.
	(output_unsigned_leb128): Reconcile format vs. args in fprintf.
	(type_attribute): Add explicit braces to avoid ambiguous `else'.

	* final.c: Include <stdlib.h> and <string.h>/<strings.h>.
	(shorten_branches): Protect declaration of tmp_length with
	SHORTEN_WITH_ADJUST_INSN_LENGTH and ADJUST_INSN_LENGTH macros.
	(profile_function): Protect declaration of `sval' and `cxt'
	variables with appropriate macros.
	(final_scan_insn): Likewise for `note' variable.  Add explicit
	braces to avoid empty body in an if-statement.
	(output_asm_insn): Move variable `i' inside macro conditional
	where it is used.  Add parentheses around assignment used as truth
	value.
	(asm_fprintf): Likewise, likewise.

	* fix-header.c (main): Remove unused variable `done'.  Protect
	declaration of `i' with FIXPROTO_IGNORE_LIST.

	* pexecute.c: Include <unistd.h>.  Prototype `my_strerror'.

	* print-rtl.c (print_inline_rtx): Explicitly declare the parameter
	`ind'.

	* profile.c: Include <string.h>/<strings.h>.
	(instrument_arcs): Remove unused variables `note', `inverted',
	`zero' and `neg_one'.
	(branch_prob): Avoid empty body in an if-statement.

	* regclass.c: Include <stdlib.h>.
	(reg_alternate_class): Explicitly declare parameter `regno'.

	* regmove.c (regmove_optimize): Remove unused variable `p'.  Add
	parentheses around assignment used as truth value.
	(find_matches): Remove unused variables `output_operand' and
	`matching_operand'.
	(fixup_match_1): Remove statement with no effect: "if (0) ;".

	* scan.c (sstring_append): Explicitly declare `count' as int.
	(scan_string): Explicitly declare parameter `init' as int.

	* sched.c: Include <stdlib.h>.
	(BLOCKAGE_RANGE): Add parentheses around arithmetic in operand of |.
	(rank_for_schedule): Add parentheses around assignment used as
	truth value.
	(schedule_block): Likewise.
	(regno_use_in): Likewise.
	(schedule_insns): Remove unused variable `i'.

	* toplev.c: Include <stdlib.h> and <string.h>/<strings.h>.
	(v_message_with_decl): Remove unused variable `n'.
	(botch): Explicitly declare parameter `s' as char *.
	(main): Add parentheses around assignment used as truth value.

	* tree.c (make_node): Protect the variable `kind' with the
	GATHER_STATISTICS macro.
	(real_value_from_int_cst): Move variable `e' inside conditional
	macro area where it is used.
	(tree_last): Add parentheses around assignment used as truth value.
	(build1): Protect the variable `kind' with the GATHER_STATISTICS
	macro.
	(print_obstack_statistics): Reconcile format vs. args in fprintf.
	Protect variables `i', `total_nodes', and `total_bytes' with the
	GATHER_STATISTICS macro.

Tue Jan 27 23:01:55 1998  Mike Stump  <mrs@wrs.com>

	* m32r.md, mips.md, mn10200.md, mn10300.md, pyr.md: Add
	some comments regarding use of dead_or_set_p.

Tue Jan 27 22:14:48 1998  Todd Vierling  <tv@pobox.com>

	* fixincludes: Tweak fix for struct exception in math.h

Tue Jan 27 17:21:09 1998  Gavin Koch  (gavin@cygnus.com)

	* mips/mips.c (mips_expand_prologue,mips_expand_epilogue):
	Change mode of registers used to add/sub from
	hard_frame_pointer_rtx from word_mode to Pmode.

Tue Jan 27 11:02:04 1998  Nick Clifton  <nickc@cygnus.com>

	* v850.h (ASM_OUTPUT_ALIGNED_BSS): Use
	asm_output_aligned_bss() instead of asm_output_bss().

	* toplev.c (rest_of_compilation): Replace references to
	stack_reg_dump_file and dbr_sched_dump_file with references to
	rtl_dump_file.

Tue Jan 27 10:22:13 1998  Kamil Iskra  <iskra@student.uci.agh.edu.pl>

	* tlink.c (scan_linker_output): Call fclose() for opened files.

Tue Jan 27 05:05:26 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (output_epilog [!VMS]): Don't tag global functions if
	compiling with -fpic -- we want to be able to override symbols
	properly.
	(alpha_expand_block_move): Fix thinko in last change.

	* alpha.h (ASM_OUTPUT_MI_THUNK): New define.
	* config/alpha/win-nt.h (ASM_OUTPUT_MI_THUNK): New define.
	* config/alpha/vms.h (ASM_OUTPUT_MI_THUNK): New undef.

Tue Jan 27 03:21:23 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (abssf, absdf): Revert last change.

Tue Jan 27 00:26:50 1998  John Carr  <jfc@mit.edu>

	* dwarf2out.c (dwarf2out_frame_init): Test value of DWARF2_UNWIND_INFO.
	* mips/sni-svr4.h: Define DWARF2_UNWIND_INFO as 0.

Tue Jan 27 00:07:02 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (gen_lowpart_common): Handle more case where converting
	a CONST_INT into SFmode.

Tue Jan 20 16:01:03 1998  Anthony Green  <green@cygnus.com>

	* flags.h: New flag (optimize_size).
	* toplev.c (main): Parse -Os option and set optimize_space
	accordingly.
	* gcc.c (default_compilers), cp/lang-specs.h, f/lang-specs.h: Define
	__OPTIMIZE_SIZE__ when compiling with -Os.
	* config/dsp16xx/dsp16xx.h, config/i386/i386.h,
	config/i386/dgux.h, config/i960/i960.h, config/pdp11/pdp11.h,
	config/v850/v850.h (OPTIMIZATION_OPTIONS): New SIZE argument
	to macro.
	* config/i386/i386.c (optimization_options): Accept new SIZE argument.

Mon Jan 26 23:57:39 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.

Mon Jan 26 23:52:51 1998  Markus F.X.J. Oberhumer  <k3040e4@c210.edvz.uni-linz.ac.at>

	* configure.in (i*86-pc-msdosdjgpp): Treat like msdos & go32
	configurations.

Fri Jan 23 09:39:36 1998  Nick Clifton  <nickc@cygnus.com>

	* toplev.c: Add -dM command line option to dump RTL after the
	machine dependent reorganization pass, if there is one.
	Reorganize RTL dump code, so that only one file handle is
	needed.

Mon Jan 26 12:09:42 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* except.c (check_exception_handler_labels): Disable warning when
	flag_syntax_only.

Mon Jan 26 18:17:32 1998  Jim Wilson  <wilson@cygnus.com>

	* sparc.c (pic_setup_code): Don't set LABEL_PRESERVE_P.

Mon Jan 26 18:11:30 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* c-decl.c (grokdeclarator): Get parameter tags from
	last_function_parm_tags.
	* dwarfout.c (output_formal_types): Set TREE_ASM_WRITTEN before
	traversing the parameter types.
	(output_type): No early exit for FUNCTION_TYPE / METHOD_TYPE context.

Mon Jan 26 01:44:12 1998  Jeffrey A Law  (law@cygnus.com)

	* h8300.c (print_operand): Handle CONST_DOUBLE for 'e', 'f', and
	the default case.
	(get_shift_alg): Fix typo.

Sun Jan 25 22:22:04 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_expand_block_move): Copy ADDRESSOF to reg.

Sun Jan 25 22:14:28 1998  Richard Henderson  <rth@cygnus.com>

	* toplev.c (get_run_time): Make sure each case gets its variables.

Sun Jan 25 22:10:21 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (build_xm_file): Add auto-config.h if host=build.
	(host_xm_file_list): Don't add $(srcdir) to auto-config.h.
	(build_xm_file_list): Likewise.
	* configure: Rebuild.

Sun Jan 25 22:00:25 1998  Alasdair Baird  <alasdair@wildcat.demon.co.uk>

	* recog.c (validate_replace_rtx_1): Only perform substitutions
	of arguments to commutative and comparison operators once.

Sun Jan 25 12:30:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* sparc.c (output_cbranch): Add default case in
	enumeration switch.

	* reorg.c (insn_sets_resource_p): Correct typo in prototype.
	(emit_delay_sequence): Eliminate unused parameter, all callers
	changed.
	(fill_simple_delay_slots): Likewise.
	(fill_slots_from_thread): Likewise.
	(fill_eager_delay_slots): Likewise.
	(mark_referenced_resources): Add default case in enumeration switch.
	(mark_set_resources): Likewise.
	(rare_destination): Likewise.
	(mostly_true_jump): Likewise.
	(find_dead_or_set_registers): Likewise.
	(redirect_with_delay_slots_safe_p): Remove unused variable `slots'.
	(update_reg_unused_notes): Remove unused variable `p'.
	(mark_target_live_regs): Remove unused variables `next' and
	`jump_count'.
	(fill_simple_delay_slots): Remove unused variable `j'.
	(fill_slots_from_thread): Add parentheses around assignment used
	as truth value.
	(dbr_schedule): Likewise.

	* objc/Make-lang.in (objc.stage1): Depend on stage1-start.
	(objc.stage2, objc.stage3, objc.stage4): Likewise.

Sun Jan 25 12:13:47 1998  Michael Tiemann  <michael@tiemann.org>

	* cse.c (simplify_ternary_operation): Don't try to simplify
	IF_THEN_ELSE expressions (created by combine) that don't use
	relational operators.

Fri Jan 23 22:48:24 1998  Jeffrey A Law  (law@cygnus.com)

	* cse.c (simplify_ternary_operation): Handle more IF_THEN_ELSE
	simplifications.

	* crtstuff.c (init_dummy): Keep the epilogue in the init
	section for non-ELF systems.

Fri Jan 23 23:28:59 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (movqi_i+1): New peephole.

Fri Jan 23 15:39:42 1998  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in: Remove remaining bytecode stuff.
	* emit-rtl.c, expr.c: Likewise.

Fri Jan 23 12:41:10 1998  Nick Clifton  (nickc@cygnus.com)

	* toplev.c (lang_options): Add unknown-pragma options.

Thu Jan 22 23:43:38 1998  Per Bothner  <bothner@cygnus.com>

	* dwarfout.c (byte_size_attribute): Simplify and fix - don't need
	special (and incomplete) handling for Chill arrays.

Fri Jan 23 00:27:23 1998  John Carr  <jfc@mit.edu>

	* toplev.c (get_run_time): Call sysconf(_SC_CLK_TCK), when available,
	to get clock rate.

Fri Jan 23 00:19:36 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.md (muldi3_internal2): Reverse test for TARGET_MIPS16.

1998-01-22  scott snyder  <snyder@d0sgif.fnal.gov>

	* mips.c (function_prologue): Use HARD_FRAME_POINTER_REGNUM in
	.frame directive instead of FRAME_POINTER_REGNUM.

Fri Jan 23 00:08:55 1998  Robin Kirkham  <rjk@mlb.dmt.csiro.au>

	* m68k.h (TARGET_SWITCHES): -mcpu32 now clears MASK_68881.
	(MACHINE_STATE_m68010_up): Replaced __mc68332__ with __mcpu32__.
	* m68k/m68k-none.h(CPP_FPU_SPEC): Update relative to TARGET_SWITCHES.
	(CPP_SPEC, ASM_SPEC, CC1_SPEC): Likewise.
	(CPP_SPEC): -m68332 defines both __mc68332 and __mcpu32__.
	* m68k/t-m68kbare (MULTILIB_OPTIONS): Add mcpu32.
	(MULTILIB_MATCHES): -m68332 now uses mcpu32 libraries, not m68000.
	(MULTILIB_EXCEPTIONS): Don't build 68881 libraries for m68000,
	mcpu32 or m5200.
	* longlong.h: Replace __mc68332__ with __mcpu32__.

Thu Jan 22 19:55:40 1998  Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Jan 22 14:47:31 1998  Jim Wilson  <wilson@cygnus.com>

	* reload.c (push_reload): In WORD_REGISTER_OPERATIONS code, add test
	to require the SUBREG mode to be smaller than the SUBREG_REG mode.
	* reload1.c (eliminate_regs): Likewise.

Thu Jan 22 14:49:14 1998  Jeffrey A Law  (law@cygnus.com)

	* regmove.c (find_matches): Initialize matches->earlyclobber too.

Thu Jan 22 01:40:52 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.md (abssf2, absdf2): Disable in IEEE mode.
	(negsf2, negdf2): Use proper subtract in IEEE mode.

Tue Jan 20 09:29:09 1998  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in: Remove more bytecode stuff.
	* expr.c, stmt.c, config/msdos/top.sed: Likewise.
	* vax/xm-vms.h, winnt/config-nt.sed: Likewise.
	* f/install.texi, objc/Make-lang.in: Likewise.

	* Makefile.in: Remove all bytecode support.
	(OBJS): Make sure last entry is a real object file, not EXTRA_OBJS.
	* emit-rtl.c: Remove all bytecode support.
	* expr.c, expr.h function.c, integrate.c: Likewise.
	* output.h, regclass.c, rtl.h, stmt.c, toplev.c: Likewise.
	* tree.h, varasm.c: Likewise.
	* config/m68k/m68k.h: Likewise.
	* bi-*, bc-*, bytecode*: Delete bytecode related files.
	* modemap.def: Likewise.

Tue Jan 20 09:02:31 1998  Gavin Koch  (gavin@cygnus.com)

	* mips/mips.md (divsi3,divdi3,modsi3,moddi3,udivsi3,udivdi3,
	umodsi3,umoddi3): Handle mips16 div/mod by a constant.

Mon Jan 19 21:57:00 1998  Richard Henderson  <rth@cygnus.com>

	* i386.md (push): Prohibit symbolic constants if flag_pic.
	(movsi+1): Likewise for move to non-register.

Mon Jan 19 11:15:38 1998  Jim Wilson  <wilson@cygnus.com>

	* alpha.c (mode_mask_operand): Accept 0xffffffff on 32 bit host.
	(print_operand): Handle 0xffffffff on 32 bit host.

	* configure.in (thread_file): Rename uses before main loop to
	target_thread_file.  Initialize to empty in main loop.  Set thread_file
	to target_thread_file after main loop if not set.
	* configure: Rebuild.

	* genattrtab.c (find_and_mark_used_attributes): Handle CONST_INT.
	(add_values_to_cover): Revert last change (which had no ChangeLog
	entry).
	(simplify_with_current_value_aux): Handle CONST_INT.

Mon Jan 19 10:14:55 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* unprotoize.c: Define UNPROTOIZE first, to actually take effect.

Mon Jan 19 10:11:52 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Add cpp stringify test.
	* acconfig.h (HAVE_CPP_STRINGIFY): New tag.
	* gengenrtl.c: Use it.
	* configure, config.in: Rebuild.

Mon Jan 19 09:43:15 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile.in (genrtl.c genrtl.h): Add dummy command for GNU make.

Mon Jan 19 09:38:18 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Find declaration for sbrk.
	* acconfig.h (NEED_DECLARATION_SBRK): New tag.
	* config.in, configure: Rebuild.
	* mips-tfile.c: Properly protect declaration of sbrk and free.
	* toplev.c: Properly protect declaration of sbrk.

Sun Jan 18 20:18:01 1998  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_handle_trap_shadows): Ignore CLOBBERs.

Sun Jan 18 01:54:27 1998  Jeffrey A Law  (law@cygnus.com)

	* alpha/xm-winnt.h (HAS_INIT_SECTION): Undefine.

Sun Jan 18 00:57:35 1998  Mike Stump  <mrs@wrs.com>

	* configure.in (i960-wrs-vxworks): Default to latest vxworks release.

Sat Jan 17 23:41:36 1998  David S. Miller  <davem@tanya.rutgers.edu>

	* combine.c (force_to_mode, nonzero_bits): Correctly optimize
	constant offset computations from objects with known alignment in
	the presence of STACK_BIAS.

	* varasm.c (immed_double_const): Add casts to HOST_WIDE_INT where
	necessary.
	(const_hash): Hash val is unsigned long.
	(SYMHASH): Likewise.

	* tree.c (TYPE_HASH): Type of hash val is unsigned long.

	* print-tree.c (print_node_brief): HOST_PTR_PRINTF format wants a
	char pointer, not HOST_WIDE_INT.
	(print_node): Likewise.  Also hash is unsigned long not
	HOST_WIDE_INT.

	* cse.c (canon_hash): Hash is unsigned long not HOST_WIDE_INT.

	* explow.c (optimize_save_area_alloca): New function for targets
	where SETJMP_VIA_SAVE_AREA is true.
	(allocate_dynamic_stack_space): On SETJMP_VIA_SAVE_AREA targets,
	compute the amount of stack space needed should we find later that
	setjmp is never called by this function, stuff rtl for this inside
	a REG_NOTE of the final SET of stack_pointer_rtx.
	* toplev.c (rest_of_compilation): If SETJMP_VIA_SAVE_AREA and
	current_function_calls_alloca, call optimize_save_area_alloca.

Sat Jan 17 23:22:59 1998  John Wehle  (john@feith.com)

	* i386.md: Remove redundant integer push patterns.
	Don't bother checking for TARGET_PUSH_MEMORY when
	pushing constants or registers.

Sat Jan 17 22:35:39 1998  Mumit Khan  <khan@xraylith.wisc.edu>
			  J.J VanderHeijden  <J.J.vanderHeijden@student.utwente.nl>

	* pexecute.c (pexecute): New function for mingw32. Supports pipes.
	(pwait): New function for mingw32.

	* gcc.c (execute): Mingw32 pexecute() supports pipes, but cygwin32
	pipe support is broken for now.

1998-01-17  Lee Iverson  <leei@Canada.AI.SRI.COM>

	* emit_rtl.c (init_emit_once): Ensure that potential aliasing
	between frame_pointer_rtx, hard_frame_pointer_rtx, and
	arg_pointer_rtx is respected in initialization.
	(init_emit_once): Use gen_rtx_raw_REG() to create
	return_address_pointer_rtx.

	* reorg.c: #include "expr.h" for rtx prototypes.
	* Makefile.in (reorg.o): Depend on expr.h

Sat Jan 17 21:28:08 1998  Pieter Nagel  <pnagel@epiuse.co.za>

	* Makefile.in (FLAGS_TO_PASS): Pass down gcc_include_dir and
	local_prefix to sub-make invocations.

Sat Jan 17 21:24:16 1998  David T. McWherter  <dtm@waterw.com>

	* objc-parse.c: Recognize protocol qualifiers in class definitions.

Sat Jan 17 21:16:19 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.h: Fix typos.

	* acconfig.h (NEED_DECLARATION_ATOL): New declaration to check for.
	* configure.in: Check for atol.
	* rtl.c (atol): Only provide the declaration if NEED_DECLARATION_ATOL.

	* rtl.c (read_rtx): Initialize list_rtx to NULL, not NULL_RTX.

	* loop.c (find_and_verify_loops): When attempting to move insns from
	inside the loop outside the loop, create a BARRIER if no suitable
	one was found.

	* jump.c (jump_optimize): Remove Dec 17, 1997 chance in
	favor of an equivalent change from gcc-2.8.

	* i386/x-sco5 (CC): Remove trailing whitespace.

Sat Jan 17 21:09:46 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gengenrtl.c (type_from_format): De-ANSIfy function signature.
	(accessor_from_format): Likewise.
	(xmalloc): New function for use when linking with alloca.o.

Mon Jan  5 02:53:01 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* frame.c (find_fde): Correct FDE's upper bound.

Fri Jan 16 16:23:52 1998  Richard Henderson  <rth@cygnus.com>

	* gengenrtl.c (DEF_RTL_EXPR): Provide a K&R compliant version.

Fri Jan 16 10:16:10 1998  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Move #ifdef code out of macro argument
	lists.
	(emit_library_call, emit_library_call_value): Likewise.

Fri Jan 16 00:46:40 1998  Jeffrey A Law  (law@cygnus.com)

	* rtl.def (INLINE_HEADER): Fix bug exposed by gen_rtx_FOO changes.

Thu Jan 15 01:02:30 1998  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Jan 14 22:49:17 1998  Richard Henderson  <rth@cygnus.com>

	* alias.c: Change all uses of gen_rtx(FOO...) to gen_rtx_FOO;
	change gen_rtx(expr...) to gen_rtx_fmt_foo(expr...).
	* caller-save.c, calls.c, combine.c, cse.c: Likewise.
	* dwarf2out.c, except.c, explow.c, expmed.c, expr.c: Likewise.
	* final.c, flow.c, function.c, genpeep.c, haifa-sched.c: Likewise.
	* halfpic.c, integrate.c, jump.c, local-alloc.c, loop.c: Likewise.
	* profile.c, recog.c, reg-stack.c, regclass.c, regmove.c: Likewise.
	* reload.c, reload1.c, reorg.c, sched.c, stmt.c, stupid.c: Likewise.
	* unroll.c, varasm.c: Likewise.
	* config/alpha/alpha.c, config/alpha/alpha.md: Likewise.

Wed Jan 14 19:36:08 1998  Gavin Koch  (gavin@cygnus.com)

	* mips.h: Fix some type-o's from a previous change.

Wed Jan 14 01:26:05 1998  Jeffrey A Law  (law@cygnus.com)

	* loop.c (check_dbra_loop): Make sure initial value is a
	CONST_INT before trying to normalize it.

Tue Jan 13 23:27:54 1998  Robert Lipe  (robertl@dgii.com)

	* sco5.h (ASM_OUTPUT_SECTION_NAME): Refresh from ../svr4.h.

Tue Jan 13 22:47:02 1998  Herman ten Brugge  <herman@htbrug.net.HCC.nl>

	* cppexp.c: Include gansidecl.h

Tue Jan 13 22:43:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* svr4.h (LINK_SPEC): Never specify -h.
	* ptx4.h (LINK_SPEC): Likewise.
	* rs6000/sysv4.h (LINK_SPEC): Likewise.
	* sparc/sol2.h (LINK_SPEC): Likewise.

Tue Jan 13 22:39:40 1998  Richard Henderson  (rth@cygnus.com)

	* c-typeck.c (comptypes): Exit early on NULL input.

	* haifa-sched.c (schedule_insns): Correctly remove inter-block
	dependencies after reload.

Tue Jan 13 22:22:31 1998  Franz Sirl  <franz.sirl-kernel@lauterbach.com>

	* rs6000/linux.h (CPP_PREDEFINES): Add -D__ELF__.

Tue Jan 13 22:14:57 1998  Klaus Kaempf  <kkaempf@progis.de>

	* alpha/vms.h (DIR_SEPARATOR): Define.

Tue Jan 13 22:13:04 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* Makefile.in (stamp-proto): Remove.
	(protoize.o, unprotoize.o): Straightforward compile.
	* unprotoize.c: Define UNPROTOIZE here, not in the Makefile.

Tue Jan 13 21:59:39 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (STRIP_NAME_ENCODING): Define for Win32 to strip
	off the trailing @[NUM] added by ENCODE_SECTION_INFO.

Tue Jan 13 21:55:06 1998  Jeffrey A Law  (law@cygnus.com)

	* arm/netbsd.h (DWARF2_UNWIND_INFO): Define as zero for now.
	* i386/netbsd.h, m68k/netbsd.h, ns32k/netbsd.h: Likewise.
	* sparc/netbsd.h, vax/netbsd.h: Likewise.

Tue Jan 13 21:37:07 1998  Shigeya Suzuki  <shigeya@foretune.co.jp>

	* i386/bsd386.h (DWARF2_UNWIND_INFO): Define as zero for now.

Tue Jan 13 17:50:55 1998  Jim Wilson  <wilson@cygnus.com>

	* configure.in (target_cpu_default, target_cpu_default2): Use double
	quotes around them when testing their value.
	* configure: Rebuilt.

Tue Jan 13 09:07:44 1998  John Carr  <jfc@mit.edu>

	* gengenrtl.c (gencode): Emit new function obstack_alloc_rtx
	to allocate rtx.
	(gendef): Call obstack_alloc_rtx.

Tue Jan 13 01:16:36 1998  Robert Lipe  (robertl@dgii.com)

	* configure.in (i[3456]86-UnixWare7-sysv5): Treat much like SVR4
	for now.

Thu Dec 18 18:40:17 1997  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/mingw32.h (INCOMING_RETURN_ADDR_RTX): Delete. Use the value
	of DWARF2_UNWIND_INFO, if any, from i386/cygwin32.h instead.
	(STANDARD_INCLUDE_DIR): Change to /usr/local/i386-mingw32/include.

Tue Jan 13 00:44:02 1998  Jim Wilson  <wilson@cygnus.com>

	* mips.md (return_internal): Change mode from SImode to VOIDmode.

Sat Jan 10 22:11:39 1998  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h (STARTFILE_SPEC, ENDFILE_SPEC): Correctly handle
	"-static".

Sat Jan 10 22:04:15 1998  Stan Cox  <scox@equinox.cygnus.com>

	* i386.md (movsicc_1, movhicc_1): For alternate 3 set the opcode
	suffix from operand 3.

Sat Jan 10 21:50:16 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>
			  Jeffrey A Law  (law@cygnus.com)

	* regmove.c: New implementation of regmove pass.
	* local-alloc.c (optimize_reg_copy_1, optimize_reg_copy_2): Remove
	decls, make them have external linkage.  Return a value from
	optimize_reg_copy_1.
	* reload.h (count_occurrences): Add decl.
	* reload1.c (count_occurrences): Delete decl, make it have external
	linkage.
	* rtl.h (optimize_reg_copy_1, optimize_reg_copy_2): Declare.

Sat Jan 10 20:30:12 1998  Jeffrey A Law  (law@cygnus.com)

	* regclass.c (record_address_regs): Don't use REG_OK_FOR_BASE_P
	if it is not defined.

Thu Jan  8 21:06:54 1998  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (OBJ, GEN, RTL_H): Add genrtl.[oh] bits.
	* emit-rtl.c (gen_rtx): Move special code to ...
	(gen_rtx_CONST_INT): New function.
	(gen_rtx_REG): New function.
	(*): Update all calls to gen_rtx.
	* genemit.c (gen_exp): Emit calls to gen_rtx_FOO for constant FOO.
	* rtl.h: Include genrtl.h; prototype CONST_INT & REG generators.
	(GEN_INT): Call gen_rtx_CONST_INT.
	* gengenrtl.c: New file.

Mon Jan  5 13:00:18 1998  John F. Carr  <jfc@mit.edu>

	* alias.c (*_dependence): Call base_alias_check before canon_rtx.
	(base_alias_check): If no base found for address call canon_rtx and
	try again.

Mon Jan  5 11:39:49 1998  Jeffrey A Law  (law@cygnus.com)

	* mips.c (mips_expand_prologue): Handle large frame with no outgoing
	arguments for mips16.
	(mips_expand_epilogue): Pass "orig_tsize" to save_restore_insns.
	Don't lose if tsize is zero after handling large stack for mips16.
	* mips.md (return): For trivial return, return address is in $31.

Sun Jan  4 20:24:00 1998  Nigel Stephens  <nigel@algor.co.uk>

	*  mips/mips16.S: Various changes to make it work with -msingle-float
	and -EL.

Sun Jan  4 14:25:18 1998  Gavin Koch  <gavin@cygnus.com>
			  Ian Lance Taylor  <ian@cygnus.com>
			  Jeff Law  <law@cygnus.com>

	* mips.c, mips.h, mips.md: First cut at merging in mips16
	support.  Major modifications throughout all three files.

Sun Jan  4 01:01:50 1998  scott snyder  <snyder@d0sgif.fnal.gov>

	* configure.in: Make gthr-default.h a forwarding header instead of
	a symlink.

Sat Jan  3 12:08:06 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* gcov-io.h: Include sys/types.h to ensure we get size_t.

	* pa.h (ASM_OUTPUT_MI_THUNK): Add missing % in fprintf.

Fri Jan  2 23:40:09 1998  Jim Wilson  (wilson@cygnus.com)
			  Jeffrey A Law  (law@cygnus.com)

	* crtstuff.c (__frame_dummy): New function for irix6.
	(__do_global_ctors): Call __frame_dummy for irix6.
	* iris6.h (LINK_SPEC): Hide __frame_dummy too.

Fri Jan  2 04:57:57 1998  Weiwen Liu  <liu@hepmail.physics.yale.edu>

	* alpha.c (vms_valid_decl_attribute_p): Move within #if OPEN_VMS.

Fri Jan  2 04:34:14 1998  Richard Henderson  <rth@cygnus.com>

	* c-decl.c (init_decl_processing): Provide proper fallback symbol
	for __builtin_memset.
	* expr.c (expand_builtin) [MEMSET]: Arg 3 type code is INTEGER_TYPE
	not INTEGER_CST.  Assert arg 3 is a constant.

	* alpha.c (mode_width_operand): Accept 64-bit modes.
	(mode_mask_operand): Likewise.
	(print_operand): Likewise for 'M' and 'U' codes.
	(alpha_expand_unaligned_load): New function.
	(alpha_expand_unaligned_store): Likewise.
	(alpha_expand_unaligned_load_words): Likewise.
	(alpha_expand_unaligned_store_words): Likewise.
	(alpha_expand_block_move): Likewise.
	(alpha_expand_block_clear): Likewise.
	* alpha.h (MOVE_RATIO): New define.
	* alpha.md (extxl, ext*h, ins*l, mskxl): Name them.
	(insql, insxh, mskxh, extv, extzv, insv, movstrqi, clrstrqi): New.

	* alpha.h (ASM_OUTPUT_LOOP_ALIGN, ASM_OUTPUT_ALIGN_CODE): Set to 3.
	(CONSTANT_ALIGNMENT, DATA_ALIGNMENT): Disable.

Thu Jan  1 15:40:15 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in: Put parenthesis around TARGET_CPU_DEFAULT's value.
	* configure: Update.

Thu Jan  1 10:49:12 1998  Jeffrey A Law  (law@cygnus.com)

	* emit-rtl.c (operand_subword): Correctly handle extracting a word
	from a CONST_DOUBLE for 16bit targets with !WORDS_BIG_ENDIAN.

	* mn10200.md (tstxx, cmpxx): Use "nonimmediate_operand" as predicate
	for first argument.

Wed Dec 31 14:42:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set and substitute host_exeext.  Use it when creating
	the assembler and linker symlinks.
	* configure: Rebuild.
	* Makefile.in (exeext): Set to @host_exeext@.
	(build_exeext): New variable, set to @build_exeext@.
	(FLAGS_TO_PASS): Pass down build_exeext.
	(STAGESTUFF): Use build_exeext, not exeext, for gen* and bi*
	programs.

Wed Dec 31 10:05:44 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10200.md (addsi3, subsi3): Fix thinkos.

Tue Dec 30 00:04:49 1997  Richard Henderson  <rth@cygnus.com>

	* sparc.h (ASM_OUTPUT_MI_THUNK): Move %o7 through %g1 instead of
	save+restore.  Fix pic+big_offset delay slot.  Use "pic" case for
	unix always, since we want to be able to thunk to functions in a
	shared library from an application.

Mon Dec 29 14:37:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mips/t-ecoff (CROSS_LIBGCC1): Define to libgcc1-asm.a.
	(LIB1ASMSRC, LIB1ASMFUNCS): Define.

Mon Dec 29 14:03:38 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.c (expand_expr): For {BITFIELD,COMPONENT,ARRAY}_REF, if the
	offset's mode is not ptr_mode, convert it.

Mon Dec 29 15:58:18 1997  Michael Meissner  <meissner@cygnus.com>

	* libgcc2.c (inhibit_libc): Don't define inhibit_libc when cross
	compiling if it was already defined.

Sun Dec 28 00:32:16 1997  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks): Don't create a new basic block
	for calls in a LIBCALL block.

Sun Dec 28 00:30:24 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* config/fp-bit.c (L_df_to_sf): Fix typo in last change.

Sat Dec 27 22:43:12 1997  Jeffrey A Law  (law@cygnus.com)

	* cse.c (rtx_cost): Remove conflicting default case.

Sat Dec 27 21:20:02 1997  Richard Henderson  <rth@cygnus.com>

	* configure.in: Move default enabling of Haifa out of for loop.
	* configure: Rebuild.

Thu Dec 25 01:02:54 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

1997-12-25  Teemu Torma  <tot@trema.com>

	* Makefile.in (GTHREAD_FLAGS): New var.
	(LIBGCC2_CFLAGS): Added $(GTHREAD_FLAGS).
	(distclean): Remove gthr-default.h.

	* configure.in: Accept dce as a thread package.
	Check for thread.h and pthread.h.
	Link gthr-default.h to appropriate thread file and set
	gthread_flags.
	(hppa1.1-*-hpux10*): If --enable-threads, use dce threads and
	include multilib definitions from pa/t-dce-thr.
	(sparc-*-solaris2*): Enable threads by default, if thread.h or
	pthread.h is found, preferring posix threads over solaris ones.

	* config/pa/t-dce-thr: New file.
	* config/pa/t-pa: Removed multilibs.
	* config/sparc/t-sol2: Likewise.

	* gthr.h: New file.
	* gthr-single.h: New file.
	* gthr-posix.h: New file.
	* gthr-solaris.h: New file.
	* gthr-dce.h: New file.
	* libgcc-thr.h: Removed.
	* objc/thr-dce.c: New file copied from thr-decosf1.c.

	* frame.c: Include gthr.h instead of libgcc-thr.h.
	* libgcc2.c: Include gthr.h instead of libgcc-thr.h.
	(eh_context_initialize): If __gthread_once fails, use static eh
	context.
	(eh_context_free): Call __gthread_key_dtor.

Wed Dec 24 23:33:17 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.h (MUST_PASS_IN_STACK): Allow target port to override.

Wed Dec 24 23:12:14 1997  Jim Wilson  <wilson@cygnus.com>

	* cse.c (max_insn_uid): New variable.
	(cse_around_loop): Use max_insn_uid.
	(cse_main): Set max_insn_uid.

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

Wed Dec 24 22:38:34 1997  John Carr  <jfc@mit.edu>

	* flags.h, toplev.c, calls.c, alias.c: Remove flag_alias_check;
	optimization is now always enabled.

	* calls.c (expand_call): Recognize C++ operator new as malloc-like
	function.

	* alias.c (memrefs_conflict_p): Eliminate tests now done by
	base_alias_check.
	(*_dependence): Call canon_rtx before base_alias_check.
	(init_alias_once): New function to precompute set of registers which
	can hold Pmode function arguments.

	* rtl.h: Declare init_alias_once.

	* toplev.c (compile_file): Call init_alias_once.

Wed Dec 24 22:34:55 1997  Jeffrey A Law  (law@cygnus.com)

	* tree.c (restore_tree_status): Do not dereference a null pointer.

Tue Dec 23 12:56:46 1997  Paul Eggert  <eggert@twinsun.com>

	* genattrtab.c (main): Check HAVE_{G,S}ETRLIMIT in addition to
	RLIMIT_STACK.  This maintains consistency with the recent, similar
	patch to cccp.c and toplev.c.

Tue Dec 23 05:17:28 1997  Richard Henderson  <rth@cygnus.com>

	* genattrtab.c (expand_units): For large nr opclasses, expand
	function_units_used with ORX to prevent blowups.  Tag with FFS.
	(num_unit_opclasses): New variable.
	(gen_unit): Update it.
	(enum operator): Add ORX_OP.
	(operate_exp): Treat ORX as or, except don't expand across an if.
	Reuse number rtx's after operating on them.
	(check_attr_value): Accept IOR, AND, & FFS.
	(write_test_expr): Transmute `in_comparison' to `flags'.  Allow
	for attribute value caching.  Handle CONST_STRING, IF_THEN_ELSE.
	(write_expr_attr_cache, write_toplevel_expr): New functions.
	(write_attr_get): Handle FFS-tagged expressions.
	(make_canonical): Don't expand const attributes.
	(convert_const_symbol_ref): Dike out.
	(evaluate_eq_attr): Handle SYMBOL_REF.
	(main): Don't emit get_attr_foo for const attributes.

	* alpha.c (override_options): Reinstate PROCESSOR_EV6.
	(alpha_adjust_cost): Add EV6 tuning; streamline EV5 tests.
	* alpha.h (REGISTER_MOVE_COST): Increase ftoi/itof cost slightly.
	* alpha.md: Redo all of the scheduling, adding EV6 support, and
	combining function units where possible.
	(attr "type"): Split loads, stores, cmov into int/fp.  Combine
	multiplies and divides.  Add EV6 sqrt, ftoi, itof.
	(attr "opsize"): New attribute.
	(sqrtsf2-1, sqrtdf2-1): Provide proper TP_INSN patterns.
	(movsf2-[12], movdf2-[12]): Provide CIX varients; don't allow CIX
	to control register allocation.
	(movsi2-1, movdi2-1): Likewise.

Tue Dec 23 03:53:21 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.h (CPP_PREDEFINES, LIB_SPEC, LINK_SPEC, STARTFILE_SPEC,
	MD_STARTFILE_PREFIX, ASM_FILE_START, ASM_SPEC, ASM_FINAL_SPEC):
	Move OSF/1 specific defines out.
	* alpha/elf.h (TARGET_VERSION, CPP_PREDEFINES, DEFAULT_VTABLE_THUNKS):
	Move Linux specific defines out.
	(LINK_SPEC): Genericize.
	(ASM_FILE_START): Emit .arch if using more than the base insn set.
	(ASM_OUTPUT_SOURCE_LINE): Remove; identical to alpha.h version.
	(SDB_DEBUGGING_INFO): Remove; gas can't handle it.
	(HANDLE_SYSV_PRAGMA): Define.
	* alpha/osf.h: New file.
	* alpha/linux.h: Split.  Retain file-format independent defines.
	Import Linux bits from elf.h.
	(CPP_PREDEFINES): Take a file-format specific SUB_CPP_PREDEFINES.
	(FUNCTION_PROFILER): _mcount takes its address in $28.
	(MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): Remove undef.
	* alpha/linux-ecoff.h: New file.
	* alpha/linux-elf.h: New file.
	* alpha/vms.h (LIB_SPEC, LINK_SPEC): Copy from osf.h.
	* alpha/win-nt.h (TARGET_DEFAULT): Define.
	* configure.in (alpha*-*-osf*, alpha*-*-linux*) [tm_file]:
	Add new headers as appropriate.

	* configure.in (alpha*): Enable Haifa by default.
	(*-*-winnt3*): Change to winnt*, since we're not v3 specific.
	* configure: Rebuild.

Tue Dec 23 03:14:54 1997  Richard Henderson  <rth@cygnus.com>

	* Makefile.in (clean): Remove the stages with their objects here ...
	(distclean): ... instead of here.

Mon Dec 22 11:24:01 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* cse.c (rtx_cost): Add default case in enumeration switch.
	* fix-header.c (recognized_macro): Likewise.
	(recognized_extern): Likewise.
	(write_rbrac): Likewise.
	* objc/objc-act.c (encode_aggregate): Likewise.
	(gen_declarator): Likewise.
	(gen_declspecs): Likewise.

Mon Dec 22 09:58:51 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (create_reg_dead_note): Detect and handle another
	case where we kill more regs after sched than were killed before
	sched.
	* sched.c (create_reg_dead_note): Similarly.

Mon Dec 22 09:18:37 1997  Jeffrey A Law  (law@cygnus.com)

	* c-pragma.c: Include flags.h.

Sun Dec 21 22:10:59 1997  Mumit Khan  <khan@xraylith.wisc.edu>

	* i386/cygwin32.h (NO_IMPLICIT_EXTERN_C): Don't assume anything
	about system headers.
	(LIB_SPEC): Add -ladvapi32 -lshell32 to be consistent with mingw32
	and also to resolve symbols in prefix.c.

	* i386/xm-cygwin32.h (HAVE_BCOPY): Define. This avoids a conflict
	between gansidecl.h and newlib's _ansi.h when building libgcc2.a,
	when the definitions in auto-config.h is not visible.
	(HAVE_BZERO): Likewise.
	(HAVE_BCMP): Likewise.
	(HAVE_RINDEX): Likewise.
	(HAVE_INDEX): Likewise.

Sun Dec 21 21:54:22 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (emit_move_sequence): Handle a function label source
	operand.

Sun Dec 21 16:13:55 1997  Nick Clifton  <nickc@cygnus.com>

	* c-pragma.c (handle_pragma_token): Generate warning messages
	about unknown pragmas if warn_unknown_pragmas is set.

	* c-decl.c (c_decode_option): Parse -Wunknown-pragmas command
	line option to set variable: warn_unknown_pragmas.

Sun Dec 21 15:51:10 1997  Manfred Hollstein  <manfred@lts.sel.alcatel.de>

	* m68k/mot3300.h (ASM_BYTE_OP): Don't include '\t' in the
	definition.
	(ASM_OUTPUT_ASCII): Prefix ASM_BYTE_OP by one single '\t'.

Sun Dec 21 13:58:39 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (FPBIT_FUNCS, DPBIT_FUNCS): Define.
	(libgcc2.a): Depend on $(DPBIT) and $(FPBIT).  Add rules to
	generate more fine grained floating point emulation libraries.
	* config/fp-bit.c: Add protecting #ifdef to all functions so
	that they can be compiled separately.  If !FINE_GRAINED_LIBRARIES,
	then compile all suitable functions.
	(pack_d, unpack_d, fpcmp_parts): Add declarations, define with two
	underscores to avoid namespace pollution.
	* t-mn10200 (LIB2FUNCS_EXTRA): Remove fp-bit.c.
	(FPBIT): Define.
	* t-mn10300 (LIB2FUNCS_EXTRA): Remove fp-bit.c and dp-bit.c.
	(FPBIT): Define.
	(DPBIT): Define.

Sat Dec 20 11:26:47 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
			  Jeff Law  <law@cygnus.com>

	* bitmap.c (bitmap_clear): Ensure `inline' is at the beginning
	of the declaration.
	* c-decl.c (finish_decl): Use parentheses around && within ||.
	* rtl.c: Include stdlib.h.
	(read_skip_spaces): Add parentheses around assignments used as
	truth values.
	(read_rtx): Initialize list_rtx.
	* cppexp.c (parse_number): Use || when operands are truth values.
	* alias.c (find_base_value): Add default case.
	(memrefs_conflict): Likewise.
	* combine.c (sets_function_arg_p): Likewise.
	* genemit.c (gen_exp): Likewise.
	* local-alloc.c (contains_replace_regs): Likewise.
	* rtlanal.c (jmp_uses_reg_or_mem): Likewise.
	* fold-const.c (fold_convert): Use "&&" for truth values.
	(fold): Add default case.
	* sdbout.c (sdbout_field_types): Fix typo in declaration.
	(sdbout_one_type): Add default case.
	* alpha.c (alpha_sa_mask): Prototype only if OPEN_VMS.
	(some_operand): Add default case.
	(input_operand): Likewise.
	(signed_comparison_operator): Likewise.
	(divmod_operator): Likewise.
	(alpha_set_memflags_1): Likewise.
	* reload1.c (reload_cse_simplify_operands): Ensure function
	always returns a value.
	* scan-decls.c (scan_decls): Likewise.
	* c-lex.c (skip_white_space): Fix typo in declaration.
	* c-typeck.c (comp_target_types): Add parentheses around assignment
	used as truth value.
	(print_spelling): Likewise.
	(constructor_implicit, constructor_result): Remove unused variables.
	* collect2.c (scan_library): Protect prototype with
	#ifdef SCAN_LIBRARIES.
	* emit-rtl.c (find_line_note): Fix typo in declaration.
	* final.c (asm_insn_count): Protect prototype with
	#ifdef HAVE_ATTR_length.
	* flow.c (find_auto_inc): Protect prototype with #ifdef AUTO_INC_DEC.
	(try_pre_increment_1, try_pre_increment): Likewise.
	* regclass.c (auto_inc_dec_reg_p): Protect prototype with
	#ifdef FORBIDDEN_INC_DEC_CLASSES.  Make return type explicit.
	* gcov-io.h (__store_long, __write_long, __read_long): Fix
	unsigned/signed comparisons.
	* gcov.c (read_files): Remove unused "first_type" variable.
	(scan _for_source_files): Initialize s_ptr.
	(function_summary): Eliminate "%lf" formatting, use %ld for
	longs.
	(output_data): Initialize branch_probs and last_line_num.
	Eliminate "%lf" formatting, use "%ld" for longs.

Fri Dec 19 17:31:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mips16.S: New file.

	* libgcc2.c (varargs): Handle mips16.

	* expr.c (do_tablejump): Let CASE_VECTOR_PC_RELATIVE be an
	expression.
	* stmt.c (expand_end_case): Likewise.
	* alpha.h (CASE_VECTOR_PC_RELATIVE): Update.
	* fx80.h, gmicro.h, m68k.h, m88k.h, ns32k.h: Likewise.
	* rs6000.h, sh.h, tahoe.h, v850.h, vax.h: Likewise.

Tue Dec 16 15:14:09 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objc/Make-lang.in: Create runtime-info.h and libobjc_entry.o in
	the build directory.
	(libobjc.a): Update dependency list.
	(libobjc.dll): Likewise.  Use libobjc_entry.o from the build
	directory.
	(objc/sendmsg.o): Add -Iobjc to find runtime-info.h.
	(objc.mostlyclean): Remove runtime-info.h.

Fri Dec 19 00:19:42 1997  Richard Henderson  <rth@cygnus.com>

	* tree.c (build_range_type): Allow creation of ranges with no maximum.
	* dbxout.c (dbxout_range_type): Handle missing TYPE_MAX_VALUE.
	* dwarf2out.c (add_subscript_info): Likewise.
	* dwarfout.c (subscript_data_attribute, byte_size_attribute): Likewise.
	* sdbout.c (plain_type_1): Likewise.
	* stmt.c (pushcase_range, all_cases_count, node_has_high_bound):
	Likewise.
	* fold-const.c (int_const_binop, fold_convert, make_range, fold):
	Likewise.

Thu Dec 18 17:05:10 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* mips.c (fatal): Remove declaration.

1997-12-18  Mark Mitchell  <mmitchell@usa.net>

	* integrate.c (get_label_from_map): New function.
	(expand_inline_function): Use it.  Initialize the 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): Use them.
	(copy_loop_body): Likewise.

Thu Dec 18 19:19:57 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mips/mips.h (INIT_SUBTARGET_OPTABS): Define if not defined.
	(INIT_TARGET_OPTABS): Define.
	* mips/ecoff.h: Include gofast.h before mips.h.
	(INIT_SUBTARGET_OPTABS): Define instead of INIT_TARGET_OPTABS.
	* mips/elf64.h: Likewise.
	* mips/elf.h (ASM_OUTPUT_SECTION_NAME): Define.

Thu Dec 18 14:51:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c: Remove register_exception_table{,_p}.

Thu Dec 18 14:57:29 1997  Gavin Koch  <gavin@cygnus.com>

	* unroll.c (calculate_giv_inc): Handle constant increment found in
	a MEM with an appropriate REG_EQUAL note.

	* calls.c (expand_call): Implement LOAD_ARGS_REVERSED.

	* dwarf2out.c (dwarf2out_frame_debug): Handle adjustments of the
	frame pointer in the prologue.

Thu Dec 18 00:19:38 1997  Robert Lipe  <robertl@dgii.com>

	* i386/x-sco5 (CLIB): Deleted.
	(ALLOCA): Added.
	* i386/xm-sco5.h (USE_C_ALLOCA): Added.

Tue Dec 16 18:51:00 1997  Bill Moyer  <billm@cygnus.com>

	* config/m68k/m68k.c (output_function_prologue): Typecast
	dwarf2out_cfi_label to (char *).
	* config/m68k/m68kemb.h (STARTFILE_SPEC): Redefined to "".

Wed Dec 17 15:06:04 1997  Richard Henderson  <rth@cygnus.com>

	* sparc.md (jump): Don't use the annul bit around an empty loop.
	Patch from Kevin.Kelly@East.Sun.COM.

Wed Dec 17 00:51:36 1997  Stan Cox  (scox@cygnus.com)

	* jump.c (jump_optimize): Don't use the return register as a
	source1 of a conditional move.

Tue Dec 16 23:45:40 1997  Richard Henderson  <rth@cygnus.com>

	* sparc.c (DF_MODES): Or the mask not the bit number.
	(function_arg) [ARCH64]: Send unprototyped arg to fp reg first.

Wed Dec 17 00:13:48 1997  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>

	* combine.c (force_to_mode): Return immediately if operand is a
	CLOBBER.

Tue Dec 16 23:44:54 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixincludes (size_t): Add support for Motorola's stdlib.h
	which fails to provide a definition for size_t.
	(fabs/hypot): Provide a prototype for fabs on m88k-motorola-sysv3.
	(strlen,strspn,strcspn return value): Handle different layout on sysV88.
	(hypot): Provide a fake for hypot for m88k-motorola-sysv3.

	* m68k/xm-mot3300.h (ADD_MISSING_POSIX, ADD_MISSING_XOPEN): Define to
	prevent unresolved externals in libio.
	* m88k/xm-sysv3.h (ADD_MISSING_POSIX, ADD_MISSING_XOPEN): Likewise.

Tue Dec 16 23:25:45 1997  H.J. Lu  (hjl@gnu.org)

	* config/sparc/linux64.h (LIBGCC_SPEC): Removed.
	(CPP_SUBTARGET_SPEC): Add %{pthread:-D_REENTRANT}.
	(LIB_SPEC): Updated for glibc 2.

Tue Dec 16 20:11:36 1997  Jeffrey A Law  (law@cygnus.com)

	* ginclude/stdarg.h: Undo BeOS changes, they break hpux.
	* ginclude/varargs.h: Likewise.

Tue Dec 16 00:32:01 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Dec 16 00:14:29 1997  H.J. Lu  (hjl@gnu.org)

	* frame.h (__register_frame, __register_frame_table,
	__deregister_frame): New.
	* frame.c (__register_frame, __register_frame_table,
	__deregister_frame): New.
	* frame.c (__deregister_frame_info): Return void *.
	* frame.h (__deregister_frame_info): Likewise.
	* collect2.c (__deregister_frame_info): Likewise.

Mon Dec 15 18:40:08 1997  Richard Henderson  <rth@cygnus.com>

	* expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG.

Mon Dec 15 18:31:43 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_cpu_name): New variable.
	(alpha_mlat_string): Likewise.
	(alpha_memory_latency): Likewise.
	(override_options): Handle -mmemory-latency.
	(alpha_adjust_cost): Adjust load cost for latency.
	* alpha.h (TARGET_OPTIONS): Add memory-latency.
	(REGISTER_MOVE_COST): Define in terms of memory_latency.  Take
	TARGET_CIX into account.
	(MEMORY_MOVE_COST): Define in terms of memory_latency.
	* invoke.texi (DEC Alpha Options): Document -mmemory-latency.

	* alpha.h (ASM_COMMENT_START): New macro.

Mon Dec 15 17:48:05 1997  Richard Henderson  <rth@cygnus.com>

	* reload.h, reload1.c (eliminate_regs), caller-save.c, dbxout.c,
	dwarfout.c, dwarf2out.c, reload.c, sdbout.c: Revert March 15 change.

	* reload.c (push_reload): If WORD_REGISTER_OPERATIONS, reload the
	SUBREG_REG if the word count is unchanged.
	* reload1.c (eliminate_regs) [case SET]: If W_R_O, preserve
	subregs of identical word size for push_reload.

Mon Dec 15 11:41:32 1997  Mark Mitchell  <mmitchell@usa.net>

	* toplev.c (rest_of_compilation): Don't call save_for_inline_copy
	if all we're doing is dealing with -Wreturn-type.

Mon Dec 15 09:44:39 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (zero_extendqihi2, zero_extendqisi2, zero_extendqidi2):
	Use and 255 instead of zapnot 1, since it schedules better.

Mon Dec 15 08:48:24 1997  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (expand_asm_operands): If an ASM has no outputs, then treat
	it as volatile.

Mon Dec 15 00:04:48 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (remove_dependencies): Set RTX_INTEGRATED_P on
	dependency we delete.  Properly update prev for multiple consecutive
	deletions.
	(priority): Skip deleted dependence.

Fri Dec 12 18:54:23 1997  Per Bothner  <bothner@cygnus.com>

	* expr.c (expand_builtin): Support BUILT_IN_FMOD - just call fmod.

Fri Dec 12 01:19:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* flow.c (flow_analysis): Be consistent with find_basic_blocks in
	determining when a new basic block starts.

	* alpha/osf2or3.h (LIB_SPEC): Restore missing defn.

	* pa.h (TEXT_SPACE_P): Use TREE_CODE_CLASS.
	* pa.md (iorsi3): Add missing args to *_operand calls.

	* except.c (call_get_eh_context): Don't mess with sequences.
	(emit_eh_context): Include the call in the sequence here.

1997-12-11  Paul Eggert  <eggert@twinsun.com>

	* collect2.c (write_c_file_glob): Allocate initial frame object
	in static storage and pass its address.

Thu Dec 11 23:33:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (call_get_eh_context): Don't take a parm.
	Put the call at the top of the function.
	(emit_eh_context): Adjust.
	(get_eh_context): Replace with former use_eh_context.
	(get_eh_context_once, get_saved_pc_ref): Remove.
	(start_eh_unwinder, end_eh_unwinder, emit_unwinder): Remove.
	* except.h: Adjust.
	* integrate.c (expand_inline_function): Adjust.
	* toplev.c (rest_of_compilation): Don't call emit_unwinder.

Fri Oct 10 17:58:31 1997  Marc Lehmann  <pcg@goof.com>

	* i386/xm-go32.h (EXECUTABLE_SUFFIX): Define.
	(DIR_SEPARATOR, NO_SYS_SIGLIST): Likewise.

Thu Dec 11 23:55:17 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* fixincludes (strlen,strspn,strcspn return value): Handle different
	layout on sysV88.
	(hypot): Provide a fake for hypot which is broken on
	m88k-motorola-sysv3.

Thu Dec 11 23:50:17 1997  John F. Carr  <jfc@mit.edu>

	* tree.c, tree.h: Change tree_code_type, tree_code_length, and
	tree_code_name from pointers to arrays.
	* tree.c: Remove standard_tree_code_* variables, no longer used.
	* print-tree.c: Remove declaration of tree_code_name.

	* cp/lex.c (init_lex): Update for tree_code_* changes.
	* objc/objc-act.c (init_objc): Likewise.

	* tree.def, cp/cp-tree.def, objc/objc-tree.def: Update for tree_code
	changes.

Thu Dec 11 23:34:54 1997  Fred Fish  <fnf@ninemoons.com>

	* config.sub: Add support for BeOS target.
	* configure.in: Likewise.
	* ginclude/stdarg.h: Likewise.
	* ginclude/stddef.h: Likewise.
	* ginclude/varargs.h: Likewise.
	* rs6000/beos.h: New file for BeOS.
	* rs6000/t-beos: Likewise.
	* rs6000/x-beos: Likewise.
	* rs6000/xm-beos.h: Likewise.
	* toplev.c (get_run_time): Just return 0 on BeOS.

Thu Dec 11 23:25:23 1997  Jeffrey A Law  (law@cygnus.com)
			  Toon Moene  (toon@moene.indiv.nluug.nl)

	* m68k.h (GO_IF_LEGITIMATE_ADDRESS): No longer cater to horribly
	old and broken Sun3 assemblers.  Newer versions handle large
	offsets correctly as does the GNU assembler.

Thu Dec 11 23:06:48 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* objc/objc-act.c (lang_report_error_function): Disable.
	* objc/objc-parse.y: Include "output.h".
	(yyerror): Remove redundant decl.
	(yyprint): Fix prototype.
	(apply_args_register_offset): Remove redundant decl.
	(get_file_function_name): Likewise.

Thu Dec 11 22:02:10 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* flow.c (find_basic_blocks): A CALL_INSN that can throw starts
	a new basic block.
	(find_basic_blocks_1): Likewise.

Thu Dec 11 21:08:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (use_eh_context): Don't copy_rtx a REG.
	(emit_throw): Lose old unwinder support.
	(expand_internal_throw): Likewise.
	* libgcc2.c (struct eh_context): Likewise.
	(new_eh_context): Likewise.
	(__get_eh_info): Lose redundant cast.
	(__get_dynamic_handler_chain): Likewise.
	(__get_saved_pc): Lose.
	Lose all old unwinder support code.

Thu Dec 11 20:42:18 1997  Teemu Torma  <tot@trema.com>

	Thread-safe EH support for pthreads, DCE threads and Solaris threads.

	* integrate.c (expand_inline_function): If the inline fn uses eh
	context, make sure that the current fn has one.
	* toplev.c (rest_of_compilation): Call emit_eh_context.
	* except.c (use_eh_context): New fn.
	(get_eh_context_once): New fn.
	(call_get_eh_context): New fn.
	(emit_eh_context): New fn.
	(get_eh_context): Call either get_eh_context_once or
	call_get_eh_context, depending on what we have.
	(get_dynamic_handler_chain): Call get_eh_context_once.
	* except.h: Prototypes for fns above.
	* optabs.c (get_eh_context_libfunc): Removed.
	(init_optabs): Don't initialize it.
	* expr.h (get_eh_context_libfunc): Removed.
	* rtl.h, rtl.c: New reg_note REG_EH_CONTEXT.
	* config/pa/pa.h (CPP_SPEC): Support for -threads.
	* config/pa/pa-hpux10.h (LIB_SPEC): Likewise.
	* config/pa/t-pa (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
	New multilib for -threads.
	* config/sparc/t-sol2: Added multilibs for -threads and
	made -pthreads alias to it.
	* config/sparc/sol2.h (CPP_SPEC, LIB_SPEC):
	Added -threads and -pthreads options.
	* libgcc-thr.h: New file.
	* libgcc2.c (__get_cpp_eh_context): Removed.
	(struct cpp_eh_context): Removed.
	(struct eh_context): Replaced cpp_eh_context with generic language
	specific pointer.
	(__get_eh_info): New function.
	(__throw): Check eh_context::info.
	(__sjthrow): Likewise.
	* libgcc2.c: Include libgcc-thr.h.
	(new_eh_context, __get_eh_context,
	eh_pthread_initialize, eh_context_initialize, eh_context_static,
	eh_context_specific, eh_context_free): New functions.
	(get_eh_context, eh_context_key): New variables.
	(__sjthrow, __sjpopnthrow, __eh_pcnthrow, __throw): Use
	get_eh_context to get the context.
	(longjmp): Move the declaration inside
	#ifdef DONT_USE_BUILTIN_SETJMP.
	* frame.c: Include libgcc-thr.h.
	(object_mutex): Mutex to protect the object list.
	(find_fde, __register_frame, __register_frame_table,
	__deregister_frame): Hold the lock while accessing objects.
	* except.h (get_eh_context): Declare.
	* except.c (current_function_ehc): Define.
	(current_function_dhc, current_function_dcc): Removed.
	(get_eh_context): New function.
	(get_dynamic_handler_chain): Use get_eh_context.
	(get_saved_pc_ref): Likewise.
	(get_dynamic_cleanup_chain): Removed references to
	current_function_dcc.
	(save_eh_status, restore_eh_status): Save and restore
	current_function_ehc instead.
	* optabs.c (get_eh_context_libfunc): New variable.
	(init_optabs): Initialize it.
	* expr.h: Declare get_eh_context_libfunc.
	* function.h (struct function): Replaced dhc and dcc with ehc.
	* except.c (get_saved_pc_ref): New functions.
	(eh_saved_pc_rtx, eh_saved_pc): Deleted.
	(expand_internal_throw_indirect): Use get_saved_pc_ref() instead
	of eh_saved_pc.
	(end_eh_unwinder): Likewise.
	(init_eh): Remove initialization of eh_saved_pc.
	* optabs.c (get_saved_pc_libfunc): New variable.
	(init_optabs): Initialize it.
	* expr.h: Declare get_saved_pc_libfunc.
	* except.h (eh_saved_pc_rtx): Deleted.
	(get_saved_pc_ref): Declared.

	From Scott Snyder <snyder@d0sgif.fnal.gov>:
	* libgcc2.c (__get_saved_pc): New.
	(__eh_type, __eh_pc): Deleted.
	(__eh_pcnthrow): Use __get_saved_pc() instead of __eh_pc.
	(__get_dynamic_handler_chain): Move __dynamic_handler_chain inside
	this fcn.

Thu Dec 11 17:23:48 1997  John F. Carr  <jfc@mit.edu>

	* sparc/sol2.h: Use 64 bit multiply and divide functions in
	Solaris libc.  Define TARGET_LIVE_G0 and TARGET_BROKEN_SAVERESTORE
	as 0.

	* rtl.h (global_rtl): New variable, replacing separate variables for
	commonly used rtl.
	(const_int_rtx): Now array of rtx_def, not rtx.
	* emit-rtl.c: Update for new rtl data structures.
	* genattrtab.c: Define global_rtl.

Thu Dec 11 15:50:29 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* configure.in ({rs6000,powerpc}-*-*): Enable Haifa scheduler by
	default.

Wed Dec 10 12:30:18 1997  Anthony Green  <green@cygnus.com>

	* crtstuff.c (__do_global_ctors): Fix typo.

Tue Dec  9 09:43:59 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* toplev.c (main): Check HAVE_GETRLIMIT and HAVE_SETRLIMIT in addition
	to RLIMIT_STACK to see if we can call getrlimit and setrlimit.

Tue Dec  9 09:38:58 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.h (FUNCTION_ARG_PADDING): Define.
	* rs6000.c (function_arg_padding): New function.

Tue Dec  9 10:34:21 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* m68k.c: Include tree.h only once.

Tue Dec  9 09:32:33 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* integrate.c (save_for_inline_copying): Make a new reg_parm_stack_loc.

Tue Dec  9 01:16:06 1997  Jeffrey A Law  (law@cygnus.com)

	* Partially cleaned up prototyping code from HJ.
	* tree.h: Add many prototypes.
	* haifa-sched.c (haifa_classify_insn): Renamed from classify_insn.
	All references changed.
	* rtl.h: Protect from multiple inclusions.  Add many prototypes.

Tue Dec  9 01:15:15 1997  Fred Fish  <fnf@ninemoons.com>

	* libgcc2.c (string.h): Hoist inclusion to occur before first use of
	string functions like strlen.

Tue Dec  9 00:57:38 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in: Check for functions getrlimit and setrlimit.
	* cccp.c (main): Check HAVE_GETRLIMIT and HAVE_SETRLIMIT in addition
	to RLIMIT_STACK to see if we can call getrlimit and setrlimit.

Mon Dec  8 23:53:26 1997  Jay Sachs  <sachs@bull.cs.williams.edu>

	* Makefile.in (compare*): Handle losing behavior from 4.4bsd make.

Mon Dec  8 21:03:28 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (REG_RA, alpha_return_addr, output_epilog):
	Fix merge problems.

	* alpha.c (override_options): Don't know about scheduling for EV6.
	* alpha.md (ev5 function units): Don't overload as ev6.

	* alpha.c (alpha_adjust_cost): Simplify.  Fix typo in ev5 mult case.
	* alpha.md (define_attr type): Add mvi.
	(ev5_e0): Define sceduling parameters for it.
	(TARGET_MAX insns): Type is mvi not shift.

Mon Dec  8 18:15:00 1997  Richard Henderson  <rth@cygnus.com>

	* alpha/win-nt.h (TRAMPOLINE_TEMPLATE): Fix backported gcc-2.8 bug.

Mon Dec  8 21:17:28 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* cstamp-h, auto-config.h: Delete.

Sun Dec  7 19:19:03 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sat Dec  6 22:22:22 1997  Jeffrey A Law  (law@cygnus.com)

	* cccp.c: Fix typo brought over in merge.

	* Merge in changes from gcc-2.8.

Mon Nov  3 05:45:32 1997  Philippe De Muyter  <phdm@macqel.be>

	* m68k.c: Include tree.h for dwarf2out_cfi_label.

	* gcc.c (process_command): Do not take address of function fatal when
	calling lang_specific_driver.

Sat Dec  6 01:02:38 1997  Mumit Khan  <khan@xraylith.wisc.edu>

	* config/i386/cygwin32.h (DWARF2_UNWIND): Exception handling
	doesn't work with it yet, so set it to 0.
	* config/i386/xm-cygwin32.h (NO_SYS_SIGLIST): Define.

Sat Dec  6 01:01:02 1997  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>

	* cse.c (cse_insn): Check for invalid entries when taking references.

Fri Dec  5 18:26:25 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* loop.c (invariant_p): Don't test flag_rerun_loop_opt.
	(loop_optimize, scan_loop, strength_reduce): New argument unroll_p.
	* toplev.c (rest_of_compilation): Pass it.  Remove code to
	save / clear / restore flag_unroll_{,all_}loops.

Fri Dec  5 16:26:03 1997  Bernd Schmidt  <crux@ohara.Informatik.RWTH-Aachen.DE>

	* i386.c (notice_update_cc): Remove bogus pentium GCC code.

Fri Dec  5 16:25:14 1997  Jeffrey A Law  (law@cygnus.com)

	* stmt.c (warn_if_unused_value): Don't warn for TRY_CATCH_EXPR.

Thu Dec  4 11:51:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (get_dynamic_handler_chain): Only make the call once per
	function.

	* except.c (expand_end_all_catch): Fix for sjlj exceptions.

Thu Dec  4 12:30:40 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (final_prescan_insn): Use local label prefix
	when emitting .uses pseudo-ops.

Wed Dec  3 12:01:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (__throw): Use __builtin_return_addr instead of __eh_pc.
	* except.c: Lose outer_context_label_stack.
	(expand_eh_region_end): Rethrow from outer_context here.
	(expand_fixup_region_end): Let expand_eh_region_end do the rethrow.
	(expand_internal_throw): Take no args.
	(expand_internal_throw_indirect): Lose.
	(expand_leftover_cleanups, expand_start_all_catch): Use expand_rethrow.
	(expand_start_all_catch): Start a rethrow region.
	(expand_end_all_catch): End it.
	(expand_rethrow): New fn.
	* except.h: Reflect above changes.
	* flow.c: Revert change of Nov 27.

Thu Dec  4 00:24:09 1997  Jeffrey A Law  (law@cygnus.com)

	* i386/t-sol2 (CRTSTUFF_T_CFLAGS): Turn on the optimizer.

Wed Dec  3 12:01:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_fixup_region_end): New fn.
	(expand_fixup_region_start): Likewise.
	(expand_eh_region_start_tree): Store cleanup into finalization here.
	* stmt.c (expand_cleanups): Use them to protect fixups.

Wed Dec  3 11:41:13 1997  Gavin Koch  <gavin@cygnus.com>

	* mips/mips.md (muldi3_r4000): Broaden the output template
	and attribute assignments to handle three operand dmult;
	rename to muldi3_internal2.
	(muldi3): Call the new muldi3_internal2 for R4000, and
	any GENERATE_MULT3 chip.

Tue Dec  2 19:40:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_decl_cleanup): Update thisblock after eh_region_start.

Tue Dec  2 12:54:33 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (find_splittable_givs): Remove last change.  Handle givs
	with a dest_reg that was created by loop.

Sat Nov 29 12:44:57 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.c (function_arg_partial_nregs): Undo Nov. 26 patch.

	* rs6000/aix41.h (ASM_CPU_SPEC): Define.

Fri Nov 28 10:00:27 1997  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Fix NCR entries.

Thu Nov 27 12:20:19 1997  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks): Handle cfg issues for rethrows and
	nested exceptions correctly.

	* unroll.c (find_splittable_givs): Don't split givs with a dest_reg
	that was created by loop.

Thu Nov 27 09:34:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (preexpand_calls): Don't look past a TRY_CATCH_EXPR.

	* except.c (expand_start_all_catch): One more do_pending_stack_adjust.

Wed Nov 26 15:47:30 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (SMALL_DATA_REG): Register to use for small data relocs.
	(print_operand): Use SMALL_DATA_REG for the register involved in
	small data relocations.
	(print_operand_address): Likewise.

	* rs6000/linux.h (LINK_SPEC): Pass -dynamic-linker /lib/ld.so.1 if
	-dynamic linker is not used.

	* rs6000.md (call insns): For local calls, use @local suffix under
	System V.  Don't use @plt under Solaris.

	* rs6000.c (output_function_profiler): Put label address in r0, and
	store LR in 4(sp) for System V/eabi.

	* rs6000.h (ASM_OUTPUT_REG_{PUSH,POP}): Keep stack aligned to 16
	byte boundary, and maintain stack backchain.

Tue Nov 25 14:08:12 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.md (fix_truncdfsi2, fix_truncsfsi2, fix_truncdfdi2,
	fix_truncsfdi2): Change *.

Wed Nov 26 11:12:26 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (main): Complain about -gdwarfn.

Tue Nov 25 22:43:30 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarfout.c (output_type): If finalizing, write out nested types
	of types we've already written.

Tue Nov 25 20:32:24 1997  Michael Meissner  <meissner@cygnus.com>

	(patches originally from Geoffrey Keating)
	* rs6000.c (function_arg): Excess floating point arguments don't
	go into GPR registers after exhausting FP registers under the
	System V.4 ABI.
	(function_arg_partial_nregs): Likewise.

	* rs6000.md (call insns): If -fPIC or -mrelocatable, add @plt
	suffix to calls.

Tue Nov 25 23:37:27 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* integrate.c (output_inline_function): Just unset DECL_INLINE.

Tue Nov 25 23:33:29 1997  scott snyder  <snyder@d0sgif.fnal.gov>

	* dwarf2out.c (outout_call_frame_info): Ensure that the info has
	proper alignment.

	* libgcc2.c (__throw): Initialize HANDLER.

Tue Nov 25 14:08:12 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.md (fix_truncdfsi2, fix_truncsfsi2, fix_truncdfdi2,
	fix_truncsfdi2): Change *X to ?*X.

Tue Nov 25 10:00:42 1997  Richard Henderson  (rth@cygnus.com)

	* alpha.h (CONST_OK_FOR_LETTER): Fix 'L' handling.

Tue Nov 25 10:00:42 1997  Jeffrey A Law  (law@cygnus.com)

	* crtstuff.c (do_global_dtors_aux): Handle multiple calls better.

Tue Nov 25 01:26:55 1997  Bruno Haible  <haible@ilog.fr>

	* dwarf2out.c (ASM_OUTPUT_DWARF_DELTA1): Implement.

Mon Nov 24 22:41:55 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (get_dynamic_handler_chain): Build up a FUNCTION_DECL.
	* optabs.c (init_optabs): Lose get_dynamic_handler_chain_libfunc.
	* expr.h: Likewise.

Sat Nov 22 18:58:20 1997  Jeffrey A Law  (law@cygnus.com)

	* pa-hpux10.h (NEW_HP_ASSEMBLER): Define.
	* pa.h (LEGITIMATE_CONSTANT_P): Reject LABEL_REFs if not using
	gas and not using the new HP assembler.

Fri Nov 21 15:20:05 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (program_transform_cross_name): Clean up "-e" confusion.
	(GCC_INSTALL_NAME, GCC_CROSS_NAME): Likewise.

Fri Nov 21 19:37:40 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* config/mips/elf64.h (MULTILIB_DEFAULTS): Test for
	TARGET_ENDIAN_DEFAULT == zero instead of testing for macro
	definition.

Fri Nov 21 12:49:56 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* stmt.c (expand_end_bindings): Allow jump into block with cleanups.

Fri Nov 21 12:18:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.h: Add outer_context_label_stack.
	* except.c: Likewise.
	(expand_start_all_catch): Push the outer_context for the try block
	onto outer_context_label_stack.
	(expand_end_all_catch): Use it and pop it.

Fri Nov 21 10:13:11 1997  Robert Lipe  (robertl@dgii.com)

	* i386/sco5.h (HAVE_ATEXIT): Revert last change.

Thu Nov 20 16:11:50 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_emit_set_const_1): Handle narrow hosts better.

Thu Nov 20 16:11:50 1997  Klaus Kaempf  <kkaempf@progis.de>

	* alpha/vms.h (ASM_OUTPUT_ADDR_VEC_ELT): Add an L for the local label
	to correspond with the change to ASM_GENERATE_INTERNAL_LABEL.

Thu Nov 20 14:42:15 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (LIB2FUNCS): Remove C++ memory management support.
	* libgcc2.c: Remove __builtin_new, __builtin_vec_new, set_new_handler,
	__builtin_delete, and __builtin_vec_delete.

	* except.c (output_exception_table): Don't bother with
	__EXCEPTION_END__.

Thu Nov 20 16:11:50 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (pre_stwm, post_stwm, pre_ldwm, post_ldwm): Base register
	is an in/out operand.
	(zero extended variants of stwm/stwm patterns): Similarly.

	* mips/x-iris (FIXPROTO_DEFINES): Add -D_SGI_SOURCE.

Thu Nov 20 13:19:32 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (ASM_OUTPUT_DWARF_OFFSET4): Rename from VALUE4.
	Use assemble_name.
	(ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Use assemble_name.
	(output_call_frame_info): Emit a \n after using it.

Thu Nov 20 00:38:46 1997  Dave Love  <d.love@dl.ac.uk>

	* configure.in: Add AC_ARG_ENABLE for Haifa as documentation.

Wed Nov 19 12:03:04 1997  Philippe De Muyter  <phdm@macqel.be>

	* dwarf2out.c (CIE_LENGTH_LABEL, FDE_LENGTH_LABEL): New macros.
	(ASM_OUTPUT_DWARF_VALUE4): New macro.
	(ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Define if SET_ASM_OP is
	defined.
	(output_call_frame_info): Do not output forward label differences
	if ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL is defined.
	* m68k/mot3300.h (SET_ASM_OP): Define when not using gas.

Tue Nov 18 23:03:30 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.md (attribute "type"): Add nil.
	(movsi_ie): y/y alternative is type nil.
	(movsf_ie): Replace ry/yr/X alternative by r/y/X , y/r/X and y/y/X
	alternatives.
	(movsf_ie+1): Delete.

Tue Nov 18 15:39:59 1997  Jim Wilson  <wilson@cygnus.com>

	* mips/mips.c (save_restore_insns): If gp_offset or fp_offset are
	large_int, emit two insns instead of one splitable insn.
	* dwarf2out.c (dwarf2out_frame_debug): When set cfa_store_offset
	from cfa_temp_value, use cfa_offset.  Add assert checking that
	cfa_reg is SP.

Mon Nov 17 15:35:38 1997  Tom Tromey  <tromey@cygnus.com>

	* cccp.c (deps_output): Properly quote file names for make.

Mon Nov 17 13:21:40 1997  Jeffrey A Law  (law@cygnus.com)

	* t-h8300 (MULTILIB_EXCEPTIONS): Define.

Fri Nov  7 15:33:11 1997  Robert Lipe  (robertl@dgii.com)

	* i386/sco5.h (HAVE_ATEXIT): Delete definition.

Sun Nov 16 23:52:48 1997  Jeffrey A Law  (law@cygnus.com)

	* cse.c (cse_insn): Don't look at JUMP_LABEL field of a conditional
	return.
	(cse_end_of_basic_block): Similarly.

Sun Nov 16 23:01:40 1997  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h (ASM_OUTPUT_ALIGNED_BSS): Define.
	(SELECT_RTX_SECTION): Define.
	(LIBGCC_SPEC, LIB_SPEC): Do the right thing for PIC.

Sun Nov 16 22:47:03 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (compare, compare-lean): Define $stage for each
	shell command.
	(gnucompare, gnucompare-lean): Likewise.

Sun Nov 16 22:02:16 1997  Richard Henderson  (rth@cygnus.com)

	* alpha/win-nt.h (TRAMPOLINE_TEMPLATE): Fix offsets.

	* alpha.h (ASM_OUTPUT_ADDR_DIFF_ELT): Add an L for the local label
	to correspond with the change to ASM_GENERATE_INTERNAL_LABEL.

Fri Nov 14 09:09:20 1997  Fred Fish  (fnf@cygnus.com)

	* dwarfout.c (byte_size_attribute): Add local var upper_bound
	and add case to handle STRING_TYPE.
	* dwarfout.c (output_string_type_die): Fix code to generate
	correct string length attribute for fixed length strings.
	Still needs support for varying length strings.

Fri Nov 14 08:46:56 1997  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (get_run_time): Do something sensible for cygwin32.

Fri Nov 14 07:24:20 1997  Richard Henderson  <rth@cygnus.com>

	* expr.c (expand_builtin_setjmp): Set
	current_function_has_nonlocal_label.
	* stupid.c (stupid_life_analysis): If has_nonlocal_label, kill
	call-saved registers across calls.

	* alpha.md (exception_receiver): Remove.
	(nonlocal_goto_receiver_osf): New.
	(nonlocal_goto_receiver_vms): Renamed from nonlocal_goto_receiver.
	(nonlocal_goto_receiver): New, select _osf or _vms.

	* alpha.c (output_prolog [*]): Prefix entry labels with '$' to
	keep them from being propagated to the object file.
	(alpha_write_linkage): Likewise.
	* alpha.md (call_vms): Likewise.
	(call_value_vms): Likewise.
	(unnamed osf call insns): Likewise.

	* alpha.h (ASM_OUTPUT_INTERNAL_LABEL): Don't omit L from local label.
	(ASM_GENERATE_INTERNAL_LABEL): Likewise.

	* alpha.c (call_operand): Any reg is valid for WinNT.
	* alpha.md (call_nt, call_value_nt): Don't force address into $27.
	(anon nt calls): Add 'R' alternative.
	* alpha/win-nt.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE,
	INITIALIZE_TRAMPOLINE): Handle lack of original $27 and 32-bit ptrs.

Fri Nov 14 06:59:33 1997  Jeffrey A Law  (law@cygnus.com)

	* calls.c (expand_call): Handle pcc_struct_value correctly for C++.

	* i386/xm-cygwin32.h (HAVE_FILE_H, HAVE_RUSAGE): Delete defines.
	* i386/xm-mingw32.h (HAVE_FILE_H, HAVE_RUSAGE): Likewise.
	* rs6000/xm-cygwin32.h (HAVE_FILE_H, HAVE_RUSAGE): Likewise.

Thu Nov 13 20:37:33 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* reload1.c (new_spill_reg): Improve fixed or forbidden register
	spill error message.

Thu Nov 13 20:29:08 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* prefix.c: Use stdarg.h only ifdef __STDC__.  Otherwise,
	use varargs.h.  Wrap header with <>, not "".

Thu Nov 13 20:21:17 1997  Jeffrey A Law  (law@cygnus.com)

	* integrate.c (save_for_inline_copying): Add return value from
	savealloc.

Thu Nov 13 19:12:33 1997  Brendan Kehoe  <brendan@cygnus.com>

	* fixincludes: Be a little more restrictive on what we will
	substitute to replace definitions of MAXINT for HPUX.

Thu Nov 13 18:41:02 1997  Michael Meissner  <meissner@cygnus.com>

	* dbxout.c (dbxout_symbol_location): Don't assume that variables
	whose address is the stack or argument pointers are indirect
	pointers.

1997-11-13  Paul Eggert  <eggert@twinsun.com>

	* cccp.c, cpplib.c (compare_defs):
	Don't complain about arg name respellings unless pedantic.
	* cpplib.c (compare_defs): Accept pfile as new arg.
	All callers changed.

Thu Nov 13 23:33:50 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* fold-const.c (fold_truthop): Fix bug in last change.

1997-11-13  Paul Eggert  <eggert@twinsun.com>

	Fix some confusion with IEEE minus zero.

	* real.h (REAL_VALUES_IDENTICAL): New macro.

	* expr.c (is_zeros_p): Don't consider -0.0 to be all zeros.
	* fold-const.c (operand_equal_p): Don't consider -0.0 to be
	identical to 0.0.
	* tree.c (simple_cst_equal): Don't consider -0.0 to have the
	same tree structure as 0.0.

	* varasm.c (immed_real_const_1): Use new REAL_VALUES_IDENTICAL
	macro instead of doing it by hand.

Thu Nov 13 16:56:14 1997  Jeffrey A Law  (law@cygnus.com)

	* v850/lib1funcs.asm: Minor whitespace changes.
	* v850.c: Fix minor formatting problems in many places.
	(construct_restore_jr, construct_save_jarl): Remove unwanted aborts.

Thu Nov 13 12:53:44 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.h (GO_IF_LEGITIMATE_ADDRESS): Delete code swapping xplus0 and
	xplus1 when xplus0 is not a register.

Thu Nov 13 11:41:42 1997  Jeffrey A Law  (law@cygnus.com)

	* flow.c (find_basic_blocks): During marking phase, if we encounter
	an insn with a REG_LABEL note, make the target block live and
	create an edge from the insn to the target block.  Do not make
	edges from all blocks to the target block.

	* m68k/x-next (OTHER_FIXINCLUDES_DIRS): Include /NextDeveloper/Headers.

	* confiugre.in: Tweak NCR entries.
	* configure: Rebuilt.

Thu Nov 13 11:07:41 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.c (num_insns_constant): Use REAL_VALUE_FROM_CONST_DOUBLE to
	pick apart floating point values, instead of using CONST_DOUBLE_LOW
	and CONST_DOUBLE_HIGH.

	* rs6000.md (define_splits for DF constants): Use the appropriate
	REAL_VALUE_* interface to pick apart DF floating point constants in
	a machine independent fashion.

Thu Nov 13 00:06:58 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* fold-const.c (fold_truthop): When changing a one-bit comparison
	against zero into a comparison against mask, do a proper sign
	extension.

Wed Nov 12 09:37:01 1997  Jeffrey A Law  (law@cygnus.com)

	* except.c: Do not include "assert.h".
	(save_eh_status): Turn asserts into conditional aborts.
	(restore_eh_status, scan_region): Likewise.
	* dwarfout.c: Do not include "assert.h".
	(bit_offset_attribute): Turn asserts into conditional aborts.
	(bit_size_attribute, output_inlined_enumeration_type_die): Likewise.
	(output_inlined_structure_type_die): Likewise.
	(output_inlined_union_type_die): Likewise.
	(output_tagged_type_instantiation): Likewise.
	(dwarfout_file_scope_decl): Likewise.
	* dwarf2out.c: Do not include "assert.h"
	(expand_builtin_dwarf_reg_size): Turn asserts into conditional aborts.
	(reg_save, initial_return_save, dwarf2out_frame_debug): Likewise.
	(add_child_die, modified_type_die, add_bit_offset_attribute): Likewise.
	(add_bit_size_attribute, scope_die_for): Likewise.
	(output_pending_types_for_scope): Likewise.
	(get_inlined_enumeration_type_die): Likewise.
	(get_inlined_structure_type_die): Likewise.
	(get_inlined_union_type_die, gen_subprogram_die): Likewise.
	(gen_tagged_type_instantiation_die): Likewise.

	* flow.c (find_basic_blocks): Refine further to get a more correct
	cfg, especially in the presense of exception handling, computed
	gotos, and other non-trivial cases.  Call abort if an inaccuracy
	is detected in the cfg.

Tue Nov 11 21:47:27 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* glimits.h (SHRT_MIN): Define in a way suitable for 16 bit hosts.

	* c-lex.c (whitespace_cr, skip_white_space_on_line): New functions.
	(skip_white_space): Use whitespace_cr.
	(check_newline): Handle whitespace more consistently.

Tue Nov 11 16:25:49 1997  Jim Wilson  <wilson@cygnus.com>

	* i386/cygwin32.h (CPP_PREDEFINES): Delete -DPOSIX.
	* i386/xm-cygwin32.h (POSIX): Define.

Mon Nov 10 20:53:11 1997  Gavin Koch  <gavin@cygnus.com>

	* config/mips/mips.h (MASK_DEBUG_H): Set to zero, so this bit
	is available elsewhere.

Mon Nov 10 16:21:58 1997  Doug Evans  <devans@canuck.cygnus.com>

	* sparc/sparc.md (mov[sdt]f_const_insn): Fix condition to match
	what the instruction can handle.

Mon Nov 10 03:02:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stmt.c (expand_decl_cleanup_no_eh): New fn.

	* except.c (expand_leftover_cleanups): do_pending_stack_adjust.

Mon Nov 10 00:05:56 1997  Jeffrey A Law  (law@cygnus.com)

	* alias.c (MAX_ALIAS_LOOP_PASSES): Define.
	(init_alias_analysis): Break out of loops after MAX_ALIAS_LOOP_PASSES.

Sun Nov  9 14:34:47 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (lshrdi3_power): Delete '&' from first alternative and
	swap instruction order.

Sun Nov  9 02:07:16 1997  Jeffrey A Law  (law@cygnus.com)

	* fixinc.svr4 (__STDC__): Add another case.

Sun Nov  9 02:00:29 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying
	addresses in the epilogue delay slot.

Sun Nov  9 01:40:40 1997  Manfred Hollstein  (manfred@s-direktnet.de)

	* m88k/dgux.h (ASM_CPU_SPEC): Reformatted to suppress wrong whitespace
	in generated `specs' file.

Sun Nov  9 01:37:11 1997  Jim Wilson  (wilson@cygnus.com)

	* flags.h (flag_rerun_loop_opt): Declare.
	* loop.c (invariant_p, case LABEL_REF): Check flag_rerun_loop_opt.
	* toplev.c (flag_rerum_loop_opt): Delete static.

Sat Nov  8 18:20:21 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	Bring over from FSF:

	Thu Oct 30 12:21:06 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* va-sh.h (__va_arg_sh1): Define.
	(va_arg): Use it.
	SH3E doesn't use any integer registers for subsequent arguments
	once a non-float value was passed in the stack.
	* sh.c (machine_dependent_reorg): If optimizing, put explicit
	alignment in front label for ADDR_DIFF_VEC.
	* sh.h (PASS_IN_REG_P): Fix SH3E case.
	(ADJUST_INSN_LENGTH): If not optimizing, add two extra bytes length.

	Tue Oct 28 15:06:44 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh/elf.h (PREFERRED_DEBUGGING_TYPE): Undefine before including
	svr4.h.

	Mon Oct 27 16:11:52 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh.c (machine_dependent_reorg): When -flag_delayed_branches,
	put an use_sfunc_addr before each sfunc.
	* sh.md (use_sfunc_addr, dummy_jump): New insns.
	(casesi): For TARGET_SH2, emit a dummy_jump after LAB.

	Tue Oct 21 07:12:28 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sh/elf.h (PREFERRED_DEBUGGING_TYPE): Don't redefine.

Fri Nov  7 10:22:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* frame.c (add_fdes, count_fdes): Go back to checking pc_begin for
	linked once FDEs.

Wed Nov  5 14:26:05 1997  Jeffrey A Law  (law@cygnus.com)

	* alias.c (find_base_value): Only return the known base value for
	pseudo registers.

Wed Nov  5 11:27:14 1997  Jim Wilson  <wilson@cygnus.com>

	* i386.c (load_pic_register): Call prologue_get_pc_and_set_got.
	* i386.md (prologue_set_got, prologue_get_pc): Add UNSPEC_VOLATILE
	to pattern.
	(prologue_get_pc_and_set_got): New pattern.

Tue Nov  4 20:36:50 1997  Richard Henderson  (rth@cygnus.com)

	* alpha.c (summarize_insn): Handle ASM_OPERANDS.  Don't recurse
	for SUBREG, just fall through.

	* alpha.c (alpha_handle_trap_shadows): Init sum.defd to zero.

	* alpha.md (attr trap): Make TRAP_YES nonzero for sanity's sake.

Tue Nov  4 18:49:42 1997  Jeffrey A Law  (law@cygnus.com)

	* fixincludes: Fix "hypot" prototype in NeXT math.h.

	* Makefile.in (USE_ALLOCA): Always include alloca.o.
	(USE_HOST_ALLOCA): Likewise.

	* rtl.def (CODE_LABEL): Use separate fields for LABEL_NUSES
	and LABEL_REFS fields.
	* rtl.h (LABEL_REFS): Update.

Tue Nov  4 16:55:11 1997  Jim Wilson  <wilson@cygnus.com>

	* combine.c (try_combine): When setting elim_i2, check whether newi2pat
	sets i2dest.  When calling distribute_notes for i3dest_killed, pass
	elim_i2 and elim_i1.  When setting elim_i1, check if newi2pat
	sets i1dest.

	* mips.md (insv, extzv, extv): Add change_address call.
	(movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern.

	* integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc.

	* reload.c (find_reloads, case 'm' and 'o'): Reject HIGH constants.

	* mips.c (mips_expand_epilogue): Emit blockage insn before call to
	save_restore_insns if no FP and GP will be restored.

	* dwarf2out.c (expand_builtin_dwarf_reg_size): New variable mode.
	Convert CCmode to word_mode before calling GET_MODE_SIZE.

	* acconfig.h (HAVE_INTTYPES_H): Undef.
	* configure.in (inttypes.h): Check for conflicts between sys/types.h
	and inttypes.h, and verify that intmax_t is defined.
	* config/mips/x-iris (CC, OPT, OLDCC): Comment out.
	* config/mips/x-iris3: Likewise.

Tue Nov  4 16:07:15 1997  Jeffrey A Law  (law@cygnus.com)

	* alias.c (find_base_value): When copying arguments, return the
	tentative value for a hard register.

Tue Nov  4 13:40:35 1997  Doug Evans  <devans@canuck.cygnus.com>

	* c-lex.c (MULTIBYTE_CHARS): #undef if cross compiling.
	(yylex): Record wide strings using target endianness, not host.

Tue Nov  4 13:13:12 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10200.h (ASM_OUTPUT_BSS): Delete.
	(ASM_OUTPUT_ALIGNED_BSS): New macro.
	* mn10300.h (ASM_OUTPUT_BSS): Delete.
	(ASM_OUTPUT_ALIGNED_BSS): New macro.
	* v850.h (ASM_OUTPUT_BSS): Delete.
	(ASM_OUTPUT_ALIGNED_BSS): New macro.

Tue Nov  4 00:55:48 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* profile.c (branch_prob): Insert an insn after a NOTE_INSN_SETJMP.

Mon Nov  3 14:36:50 1997  Jeffrey A Law  (law@cygnus.com)

	* configure.in (sco5): Use cpio to install header files.

Sun Nov  2 23:31:43 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* aclocal.m4 (conftestdata_from, conftestdata_to): Names shortened to
	14 char length.
	* configure: Rebuild.

Sun Nov  2 19:44:00 1997  Robert Lipe  (robertl@dgii.com)

	* i386/sco5.h: Enable -gstabs once again.

Sun Nov  2 19:27:21 1997  Jeffrey A Law  (law@cygnus.com)

	* arm.c (output_move_double): Allocate 3 entries in otherops array.

Sat Nov  1 21:43:00 1997  Mike Stump  <mrs@wrs.com>

	* except.c (expand_eh_region_start_for_decl): Emit EH_REGION_BEG
	notes for sjlj exceptions too.
	(expand_eh_region_end): Similarly for EH_REGION_END notes.
	(exception_optimize): Optimize EH regions for sjlj exceptions too.
	* final.c (final_scan_insn): Don't output labels for EH REGION
	notes if doing sjlj exceptions.

Sat Nov  1 19:15:28 1997  Jeffrey A Law  (law@cygnus.com)

	* alias.c (init_alias_analysis): Handle -fno-alias-check when
	optimizing correctly.

	* expr.c (expand_builtin_setjmp): Don't emit a SETJMP note
	or set current_function_calls_setjmp anymore.

	* flow.c (find_basic_blocks): If we delete the label for an
	exception handler, remove it from the EH label list and remove
	the EH_BEGIN/EH_END notes for that EH region.

Sat Nov  1 16:44:49 1997  Jason Merrill  (jason@cygnus.com)

	* flow.c (find_basic_blocks): Generate correct flow control
	information when exception handling notes are present.

Sat Nov  1 13:42:19 1997  Jeffrey A Law  (law@cygnus.com)

	* dwarf2out.c (output_call_frame_info): Fix length argument
	to ASM_OUTPUT_ASCII.
	(output_die, output_pubnames, output_line_info): Likewise.

Fri Oct 31 07:10:09 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

	* dwarf2out.c (output_call_frame_info): Use ASM_OUTPUT_ASCII to
	output ASCII by default.  Only use ASM_OUTPUT_DWARF_STRING if
	flag_debug_asm is on.
	(output_die, output_pubnames, output_line_info): Likewise.

	* alias.c (init_alias_analysis): Add struct_value_incoming_rtx
	and static_chain_rtx into the potential base values array if
	they are registers.

	* alias.c (new_reg_base_value): New array of potential base values.
	(unique_id): Now file scoped static.
	(find_base_value, case REG): Return the value in reg_base_value
	array for the REG if it exists.  Else, return the value from
	new_reg_base_value if copying args and REG is a hard register.
	(find_base_value, case PLUS): If either operand of the PLUS is
	a REG, try to get its base value.  Handle base + index and
	index + base.
	(record_set): Use new_reg_base_value instead of reg_base_value.
	(init_alias_analysis): Allocate space for new_reg_base_value too.
	Rework code to iterate over the insns propagating base value
	information until nothing changes.

	* global.c (global_alloc): Free the conflict matrix after
	reload has finished.

Fri Oct 31 01:45:31 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (L_eh): Define __eh_pc.
	Replace __eh_type with generic pointer __eh_info.

Fri Oct 31 00:34:55 1996  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* expr.c (expand_increment): When enqueing a postincrement for a MEM,
	use copy_to_reg if address is not a general_operand.

Fri Oct 31 00:16:55 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* profile.c (output_func_start_profiler): Clear flag_inline_functions
	for the duration of the call to rest_of_compilation.

Thu Oct 30 14:40:10 1997  Doug Evans  <devans@canuck.cygnus.com>

	* configure.in (sparc-*-elf*): Use sparc/elf.h, sparc/t-elf.
	Set extra_parts.
	(sparc*-*-*): Recognize --with-cpu=v9.
	* sparc/elf.h: New file.
	* sparc/t-elf: New file.

Thu Oct 30 13:26:12 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (const_8bit_operand): New function.
	(mask_ok_for_mem_btst): New function.
	* mn10300.md (btst patterns with mem operands): Use new functions
	to avoid creating btst instructions with invalid operands.

Wed Oct 29 16:57:19 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000/xm-sysv4.h: Include xm-linux.h instead of xm-svr4.h if we
	are running on PowerPC Linux.

Wed Oct 29 13:10:11 1997  Gavin Koch  <gavin@cygnus.com>

	* config/mips/elf64.h (PREFERRED_DEBUGGING_TYPE): Only define
	if not previously defined.

Tue Oct 28 23:55:27 1997  Doug Evans  (devans@cygnus.com)

	* function.c (assign_parms): Correct mode of stack_parm if
	entry_parm underwent a mode conversion.

1997-10-28  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* global.c (global_alloc): Use xmalloc instead of alloca for
	CONFLICTS, since max_allocno * allocno_row_words alone can be more
	than 2.5Mb sometimes.

Tue Oct 28 15:29:15 1997  Richard Henderson  <rth@cygnus.com>

	* reload1.c (eliminate_regs [SET]): If [SUBREG] widened the mode of
	DEST for the spill, adjust mode of SRC to compensate.

Tue Oct 28 14:36:45 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (reload_inqi): Check for MEM before strict_memory_address_p,
	since any_memory_operand() allows pseudos during reload.
	(reload_inhi, reload_outqi, reload_outhi): Likewise.

Tue Oct 28 11:53:14 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (btst patterns): Add 5200 support.

Tue Oct 28 11:58:40 1997  Toon Moene  <toon@moene.indiv.nluug.nl>

	* fold-const.c (fold): For ((a * C1) / C3) or (((a * C1) + C2) / C3)
	optimizations, look inside dividend to determine if the expression
	can be simplified by using EXACT_DIV_EXPR.

Tue Oct 28 10:19:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	From Brendan:
	* dwarf2out.c (output_call_frame_info): Use l1 instead of ".".

Tue Oct 28 00:32:14 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (summarize_insn [SUBREG]): Propagate SET.

Mon Oct 27 23:59:26 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_handle_trap_shadows): Don't call get_attr_trap
	on a CLOBBER.

Mon Oct 27 21:25:20 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (movqi, movhi): Make sure new insns created during reload
	won't need reloading themselves.
	(reload_inqi, reload_inhi, reload_outqi, reload_outhi): Likewise.

Mon Oct 27 16:11:10 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Disable reg+reg.

Sun Oct 26 13:50:44 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_sa_mask [VMS]): Don't include $26 in the mask.
	Patch from Klaus Kaempf <kkaempf@progis.de>.

Sun Oct 26 13:31:47 1997  Jim Wilson  (wilson@cygnus.com)

	* expr.c (expand_expr, case INDIRECT_REF): Optimize a reference
	to an element in a constant string.

Sun Oct 26 11:41:49 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (output_call_frame_info): The CIE pointer is now a 32
	bit PC-relative offset.  The exception range table pointer is now in
	the CIE.
	* frame.c (dwarf_cie, dwarf_fde): Rename CIE_pointer to CIE_delta.
	(count_fdes, add_fdes, get_cie): Adjust.
	(cie_info, extract_cie_info, __frame_state_for): Adjust eh_ptr uses.

	From H.J. Lu:
	* frame.c (count_fdes, add_fdes): Skip linked once FDE entries.

Sun Oct 26 11:52:01 1997  Richard Henderson  <rth@cygnus.com>

	* alias.c (memrefs_conflict_p): Treat arg_pointer_rtx just
	like stack_pointer_rtx.

Sun Oct 26 11:32:16 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (bootstrap-lean): Combined with `normal' bootstrap
	targets using "$@" to provide support for similar but not identical
	targets without having to duplicate code.
	(bootstrap4): New goal.

	* Makefile.in (compare, compare-lean, compare3): Combined to one
	ruleset determining actions to be performed via $@.
	(compare4, compare4-lean): New targets.
	(gnucompare, gnucompare3): Combined to one ruleset determining
	actions to be performed via $@. Also, note which files failed
	the comparison test in .bad_compare.
	(gnucompare-lean, gnucompare3-lean, gnucompare4-lean): New targets.

Sun Oct 26 10:06:11 1997  Toon Moene  <toon@moene.indiv.nluug.nl>

	* fold-const (fold): Also simplify FLOOR_DIV_EXPR to EXACT_DIV_EXPR
	if the dividend is a multiple of the divisor.

Sun Oct 26 09:21:40 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (LIBGCC2_CFLAGS): Add -fexceptions.

	* alias.c (find_base_term): Handle PRE_INC, PRE_DEC, POST_INC,
	and POS_DEC.

	* alias.c (true_dependence): Fix typo.

	* toplev.c (flag_rerun_loop_opt): New variable.
	(f_options): Handle -frerun-loop-opt.
	(rest_of_compilation): If -frerun-loop-opt, then run the loop
	optimizer twice.
	(main): Enable -frerun-loop-opt by default for -O2 or greater.

	* loop.c (simplify_giv_expr): Adding two invariants results
	in an invariant.

Sun Oct 26 09:15:15 1997  Richard Henderson  <rth@cygnus.com>

	* expr.c (get_inner_reference): Remove the array bias after
	converting the index to Pmode.

Sat Oct 25 12:20:58 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.h (TARGET_SWITCHES): Add -mmult-bug and -mno-mult-bug.
	(TARGET_MULT_BUG): Define.
	(TARGET_DEFAULT): Default to TARGET_MULT_BUG.
	* mn10300.md (mulsi3): Handle TARGET_MULT_BUG.

Fri Oct 24 17:40:34 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10200.c (indirect_memory_operand): Delete unused function.
	* mn10200.h (EXTRA_CONSTRAINT): Handle 'R'.
	* mn10200.md (bset, bclr insns): Handle output in a reg too.

Fri Oct 24 15:54:57 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (call patterns): Revert Oct 16 change; if we are to elide
	the callee's ldgp, we must do it ourselves, and we use the jsr tag
	for more than scheduling.

Fri Oct 24 13:23:04 1997  Doug Evans  <devans@canuck.cygnus.com>

	* sparc/sparc.h (ASM_SPEC): Delete asm_arch.

Fri Oct 24 13:19:40 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.c (symbolic_operand, legitimize_address): New functions.
	* mn10300.h (LEGITIMIZE_ADDRESS): Call legitimize_address.
	(GO_IF_LEGITIMATE_ADDRESS): Don't allow base + symbolic.

Thu Oct 23 09:35:12 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Oct 23 08:03:59 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* dbxout.c (dbxout_start_new_source_file): Use output_quoted_string
	for FILENAME.

Wed Oct 22 00:34:12 1997  Jeffrey A Law  (law@cygnus.com)

	* toplev.c (flag_exceptions): Default value is 2.
	(compile_file): If flag_exceptions still has the value 2, then
	set it to 0.

	* rs6000.c (struct machine_function): Add pic_offset_table_rtx.
	(rs6000_save_machine_status): Save pic_offset_table_rtx.
	(rs6000_restore_machine_status: Restore pic_offset_table_rtx.

	* local-alloc.c (block_alloc): Don't lose if two SCRATCH expressions
	are shared.

	* rs6000.md (*movsi_got_internal_mem): New pattern.
	(*movsi_got_internal_mem splitter): New define_split.

Tue Oct 21 18:14:03 1997  Jim Wilson  <wilson@cygnus.com>

	* obstack.h (obstack_empty_p): Fix spurious space after backslash.

Tue Oct 21 18:34:01 1997  Geoffrey KEATING  <geoffk@ozemail.com.au>

	* rs6000.c: Avoid creating a stack frame under SYSV ABI if we
	only need to save LR.

Tue Oct 21 10:06:40 1997  Jeffrey A Law  (law@cygnus.com)

	* mn10300.md (movqi, movhi): Avoid using address registers as
	destinations unless absolutely necessary.

	* mn10200.c (expand_prologue): Fix typo.

	* mn10200.h (GO_IF_LEGITIMATE_ADDRESS): Do not allow indexed
	addresses.
	* mn10200.md (neghi2): Provide an alternative which works if
	the input and output register are the same.

	* mn10300.c (print_operand): Handle 'S'.
	* mn10300.md (ashlsi3, lshrsi3, ashrsi3): Use %S for
	shift amount in last alternative.

	* mn10300.c (expand_epilogue): Rework to handle register restores
	in "ret" and "retf" instructions correctly.

Mon Oct 20 16:47:08 1997  Jim Wilson  <wilson@cygnus.com>

	* expmed.c (extract_bit_field): Don't make flag_force_mem disable
	extzv for memory operands.

	* cse.c (simplify_ternary_operation, case IF_THEN_ELSE): Collapse
	redundant conditional moves to single operand.

Mon Oct 20 15:30:26 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.h: Move define of __v850__ from CPP_PREDEFINES
	to CPP_SPEC.

	* xm-v850.h: Use __v850 rather than __v850__ to
	identify v850 port.

Mon Oct 20 14:15:02 1997  Jim Wilson  <wilson@cygnus.com>

	* mips/mips.c (compute_frame_size): Not a leaf function if
	profile_flag set.

Mon Oct 20 14:16:38 1997  Geoffrey KEATING  <geoffk@ozemail.com.au>

	* rs6000/t-ppccomm: Use -msdata=none for crtstuff.

Mon Oct 20 12:28:17 1997  Doug Evans  <devans@canuck.cygnus.com>

	* sparc/sparc.h (SPARC_V9,SPARC_ARCH64): Delete.
	(DEFAULT_ARCH32_P): New macro.
	(TARGET_ARCH{32,64}): Allow compile time or runtime selection.
	(enum cmodel): Declare.
	(sparc_cmodel_string,sparc_cmodel): Declare.
	(SPARC_DEFAULT_CMODEL): Provide default.
	(TARGET_{MEDLOW,MEDANY}): Renamed to TARGET_CM_{MEDLOW,MEDANY}.
	(TARGET_FULLANY): Deleted.
	(TARGET_CM_MEDMID): New macro.
	(CPP_CPU_DEFAULT_SPEC): Renamed from CPP_DEFAULT_SPEC.
	(ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
	(CPP_PREDEFINES): Take out stuff now handled by %(cpp_arch).
	(CPP_SPEC): Rewrite.
	(CPP_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
	(CPP_{ENDIAN,SUBTARGET}_SPEC): New macros.
	(ASM_ARCH{,32,64,_DEFAULT}_SPEC): New macros.
	(ASM_SPEC): Add %(asm_arch).
	(EXTRA_SPECS): Rename cpp_default to cpp_cpu_default.
	Rename asm_default to asm_cpu_default.
	Add cpp_arch32, cpp_arch64, cpp_arch_default, cpp_arch, cpp_endian,
	cpp_subtarget, asm_arch32, asm_arch64, asm_arch_default, asm_arch.
	(NO_BUILTIN_{PTRDIFF,SIZE}_TYPE): Define ifdef SPARC_BI_ARCH.
	({PTRDIFF,SIZE}_TYPE): Provide 32 and 64 bit values.
	(MASK_INT64,MASK_LONG64): Delete.
	(MASK_ARCH64): Renamed to MASK_64BIT.
	(MASK_{MEDLOW,MEDANY,FULLANY,CODE_MODEL}): Delete.
	(EMBMEDANY_BASE_REG): Renamed from MEDANY_BASE_REG.
	(TARGET_SWITCHES): Always provide 64 bit options.
	(ARCH64_SWITCHES): Delete.
	(TARGET_OPTIONS): New option -mcmodel=.
	(INT_TYPE_SIZE): Always 32.
	(MAX_LONG_TYPE_SIZE): Define ifdef SPARC_BI_ARCH.
	(INIT_EXPANDERS): sparc64_init_expanders renamed to sparc_init_....
	(FUNCTION_{,BLOCK_}PROFILER): Delete TARGET_EMBMEDANY support.
	(PRINT_OPERAND_PUNCT_VALID_P): Add '_'.
	* sparc/linux-aout.h (CPP_PREDEFINES): Take out stuff handled by
	CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	* sparc/linux.h: Likewise.
	* sparc/linux64.h (SPARC_V9,SPARC_ARCH64): Delete.
	(ASM_CPU_DEFAULT_SPEC): Renamed from ASM_DEFAULT_SPEC.
	(TARGET_DEFAULT): Delete MASK_LONG64, MASK_MEDANY, add MASK_64BIT.
	(SPARC_DEFAULT_CMODEL): Define.
	(CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(LONG_DOUBLE_TYPE_SIZE): Define.
	(ASM_SPEC): Add %(asm_arch).
	* sparc/sol2.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(TARGET_CPU_DEFAULT): Add ultrasparc case.
	* sparc/sp64-aout.h (SPARC_V9,SPARC_ARCH64): Delete.
	(TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT.
	(SPARC_DEFAULT_CMODEL): Define.
	* sparc/sp64-elf.h (SPARC_V9,SPARC_ARCH64): Delete.
	(TARGET_DEFAULT): MASK_ARCH64 renamed to MASK_64BIT.  Delete
	MASK_LONG64, MASK_MEDANY.
	(SPARC_DEFAULT_CMODEL): Define.
	(CPP_PREDEFINES): Delete.
	(CPP_SUBTARGET_SPEC): Renamed from CPP_SPEC.
	(ASM_SPEC): Add %(asm_arch).
	(LONG_DOUBLE_TYPE_SIZE): Define.
	(DWARF2_DEBUGGING_INFO): Define.
	* sparc/splet.h (CPP_SPEC): Delete.
	* sparc/sysv4.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC.
	(FUNCTION_BLOCK_PROFILER): Delete TARGET_EMBMEDANY support.
	(BLOCK_PROFILER): Likewise.
	* sparc/sparc.c (sparc_cmodel_string,sparc_cmodel): New globals.
	(sparc_override_options): Handle code model selection.
	(sparc_init_expanders): Renamed from sparc64_init_expanders.
	* sparc/sparc.md: TARGET_<code_model> renamed to TARGET_CM_....
	TARGET_MEDANY renamed to TARGET_CM_EMBMEDANY.
	(sethi_di_embmedany_{data,text}): Renamed from sethi_di_medany_....
	(sethi_di_fullany): Delete.

Mon Oct 20 02:00:18 1997  Klaus Kaempf  <kkaempf@progis.de>
			  Jeff Law  <law@cygnus.com>
			  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* alpha/vms.h (DIVSI3_LIBCALL): OTS$ functions are upper case.
	(DIVDI3_LIBCALL, UDIVSI3_LIBCALL, UDIVDI3_LIBVALL): Likewise.
	(MODSI3_LIBCALL, MODDI3_LIBCALL): Likewise.
	(UMODSI3_LIBCALL, UMODDI3_LIBCALL): Likewise.
	* alpha/alpha.md (arg_home): Likewise.

	* alpha/alpha.c (vmskrunch): Delete.
	* alpha/vms.h (ENCODE_SECTION_INFO, ASM_DECLARE_FUNCTION_NAME): Delete.
	* alpha.c (output_prolog, VMS): Use alloca for entry_label and don't
	truncate to 64 characters.

	* make-l2.com: Support openVMS/Alpha.

	* vmsconfig.com: Fix to work on openVMS/Alpha and openVMS/VAX.

Sun Oct 19 19:00:35 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* longlong.h (count_leading_zeros): Add missing casts to USItype.

Sun Oct 19 18:44:06 1997  Jeffrey A Law  (law@cygnus.com)

	* i386/bsd386.h (ASM_COMMENT_START): Define.

Sat Oct 18 13:47:15 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (restore_tree_status): Also free up temporary storage
	when we finish a toplevel function.
	(dump_tree_statistics): Print stats for backend obstacks.

Sat Oct 18 12:47:31 1997  Doug Evans  <dje@canuck.cygnus.com>

	* expr.c (use_group_regs): Don't call use_reg for MEMs.

Sat Oct 18 09:49:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (__throw): Don't copy the return address.
	* dwarf2out.c (expand_builtin_dwarf_reg_size): Ignore return address.

	* except.c (exceptions_via_longjmp): Initialize to 2 (uninitialized).
	* toplev.c (main): Initialize exceptions_via_longjmp.

	* tree.c: Add extra_inline_obstacks.
	(save_tree_status): Use it.
	(restore_tree_status): If this is a toplevel inline obstack and we
	didn't want to save anything on it, recycle it.
	(print_inline_obstack_statistics): New fn.
	* function.c (pop_function_context_from): Pass context to
	restore_tree_status.
	* obstack.h (obstack_empty_p): New macro.

Sat Oct 18 00:43:59 1997  Jeffrey A Law  (law@cygnus.com)

	* i386/freebsd.h (ASM_COMMENT_START): Fix.

Fri Oct 17 23:48:52 1997  Jim Wilson  (wilson@cygnus.com)

	* v850.c (ep_memory_offset): New function.
	(ep_memory_operand, substitute_ep_register, v850_reorg): Call it.

	* v850.h (CONST_OK_FOR_*): Add and correct comments.
	(CONSTANT_ADDRESS_P): Add comment.
	(EXTRA_CONSTRAINT): Define 'U'.
	* v850.md: Add comments on bit field instructions.
	(addsi3): Delete &r/r/r alternative.  Add r/r/U alternative.
	(lshrsi3): Use N not J constraint.

	* v850.md (v850_tst1+1): New define_split for tst1 instruction.

	* v850.c (reg_or_0_operand): Call register_operand.
	(reg_or_int5_operand): Likewise.
	* v850.h (MASK_BIG_SWITCH, TARGET_BIG_SWITCH): New macros.
	(TARGET_SWITCHES): Add "big-switch".
	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT, CASE_VECTOR_MODE,
	ASM_OUTPUT_BEFORE_BASE_LABEL): Add support for TARGET_BIG_SWITCH.
	(CASE_DROPS_THROUGH): Comment out.
	(CASE_VECTOR_PC_RELATIVE, JUMP_TABLES_IN_TEXT_SECTION): Define.
	* v850.md (cmpsi): Delete compare mode.
	(casesi): New pattern.

	* v850.h (CONST_OK_FOR_N): Delete redundant compare against zero.
	* v850.md (ashlsi3): Use SImode not QImode for shift count.
	(lshrsi3): Likewise.

	* v850.c (print_operand): Add 'c', 'C', and 'z' support.  Delete
	unreachable switch statement after 'b' support.  Remove "b" from
	strings for 'b' support.
	* v850.md (branch_normal, branch_invert): Change %b to b%b.

Fri Oct 17 23:33:20 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (LIBGCC2_CFLAGS): Avoid a backslash then an
	empty line if @inhibit_libc@ is empty.

Fri Oct 17 23:24:40 1997  Robert Lipe  (robertl@dgii.com)

	* i386/sco5.h: Let ELF use dwarf2 unwinding.  COFF uses sjlj.
	(EH_FRAME_SECTION_ASM_OP, EH_FRAME_SECTION_ASM_OP_ELF): Defined.
	(EH_FRAME_SECTION_ASM_OP_COFF): Likewise.
	(DWARF2_UNWIND_INFO): Let this track object file format.
	(EXTRA_SECTIONS): Add in_eh.
	(EH_FRAME_SECTION_ASM_OP, EH_FRAME_SECTION_ASM_OP_ELF): Define.
	(EH_FRAME_SECTION_ASM_OP_COFF): Likewise.

Fri Oct 17 17:13:42 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* sparc/linux64.h (LINK_SPEC): Dynamic linker is ld-linux64.so.2.
	* sparc/sparc.h (FUNCTION_PROFILER): Fix format string when
	TARGET_MEDANY.
	* sparc/sparc.c (dwarf2out_cfi_label): Extern no longer needed.
	(output_double_int): Output DI mode values correctly when
	HOST_BITS_PER_WIDE_INT is 64.
	(output_fp_move_quad): If TARGET_V9 and not TARGET_HARD_QUAD, use
	fmovd so it works if a quad float ends up in one of the upper 32
	float regs.
	* sparc/sparc.md (pic_{lo_sum,sethi}_di): New patterns
	necessary for PIC support on sparc64.

Fri Oct 17 13:39:56 1997  Doug Evans  <dje@canuck.cygnus.com>

	* sparc/sp64-elf.h (TARGET_DEFAULT): Delete MASK_STACK_BIAS.
	* sparc/sparc.h (PROMOTE_MODE): Promote small ints if arch64.
	(PROMOTE_FUNCTION_ARGS,PROMOTE_FUNCTION_RETURN): Define.
	(SPARC_FIRST_FP_REG, SPARC_FP_REG_P): New macros.
	(SPARC_{OUTGOING,INCOMING}_INT_ARG_FIRST): New macros.
	(SPARC_FP_ARG_FIRST): New macro.
	(CONDITIONAL_REGISTER_USAGE): All v9 fp regs are volatile now.
	(REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER): Reorganize fp regs.
	(NPARM_REGS): There are 32 fp argument registers now.
	(FUNCTION_ARG_REGNO_P): Likewise.
	(FIRST_PARM_OFFSET): Update to new v9 abi.
	(REG_PARM_STACK_SPACE): Define for arch64.
	(enum sparc_arg_class): Delete.
	(sparc_arg_count,sparc_n_named_args): Delete.
	(struct sparc_args): Redefine and use for arch32 as well as arch64.
	(GET_SPARC_ARG_CLASS,ROUND_REG,ROUND_ADVANCE): Delete.
	(FUNCTION_ARG_ADVANCE): Rewrite.
	(FUNCTION_ARG,FUNCTION_INCOMING_ARG): Rewrite.
	(FUNCTION_ARG_{PARTIAL_NREGS,PASS_BY_REFERENCE}): Rewrite.
	(FUNCTION_ARG_CALLEE_COPIES): Delete.
	(FUNCTION_ARG_{PADDING,BOUNDARY}): Define.
	(STRICT_ARGUMENT_NAMING): Define.
	(doublemove_string): Declare.
	* sparc/sparc.c (sparc_arg_count,sparc_n_named_args): Delete.
	(single_move_string): Use GEN_INT, and HOST_WIDE_INT.
	(doublemove_string): New function.
	(output_move_quad): Clean up some of the arch64 support.
	(compute_frame_size): Add REG_PARM_STACK_SPACE if arch64.
	Don't add 8 bytes of reserved space if arch64.
	(sparc_builtin_saveregs): Combine arch32/arch64 versions.
	(init_cumulative_args): New function.
	(function_arg_slotno): New static function.
	(function_arg,function_arg_partial_nregs): New functions.
	(function_arg_{pass_by_reference,advance}): New functions.
	(function_arg_padding): New function.
	* ginclude/va-sparc.h: Rewrite v9 support.

Fri Oct 17 12:29:48 1997  Christian Iseli  <Christian.Iseli@lslsun.epfl.ch>

	* regclass.c (record_address_regs): Look at REG_OK_FOR_{BASE,INDEX}_P
	for hard regs to determine base and index registers.

	* reload.c (debug_reload_to_stream): New function.  Specify stream
	into which to write debug info.
	(debug_reload): Modify to call debug_reload_to_stream with stderr.

Thu Oct 16 15:07:51 1997  Richard Henderson  <rth@cygnus.com>

	* combine.c (can_combine_p): Don't combine with an asm whose
	output is a hard register.

Thu Oct 16 15:43:26 1997  Mike Stump  <mrs@wrs.com>

	* c-decl.c (start_struct): Ensure that structs with forward
	declarations are in fact packed when -fpack-struct is given.

	* stor-layout.c (layout_record): Ignore STRUCTURE_SIZE_BOUNDARY if
	we are packing a structure.  This allows a structure with only
	bytes to be aligned on a byte boundary and have no padding on a
	m68k.

Thu Oct 16 15:17:54 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* rs6000.h (ROUND_TYPE_ALIGN): Don't blow up if no fields in record.

Thu Oct 16 11:20:30 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (alpha_return_addr_rtx): New variable.
	(alpha_save_machine_status): New; save it.
	(alpha_restore_machine_status): New; restore it.
	(alpha_init_expanders): New; clear it.
	(alpha_return_addr): New; set it.
	(alpha_ra_ever_killed): New; if alpha_return_addr_rtx, regs_ever_live
	is overly conservative, so search the insns explicitly.
	(alpha_sa_mask [VMS]): Check alpha_ra_ever_killed.
	(alpha_sa_size [VMS && !VMS]): Likewise.
	* alpha.h (RETURN_ADDR_RTX): Call alpha_return_addr.
	(INIT_EXPANDERS): New definition.

	* alpha.c: Move REG_PV, REG_RA somewhere more visible in the file.
	(output_prolog [!VMS]): Use them.

	* alpha.c (output_prolog [!VMS]): Move gp detection to ...
	(alpha_does_function_need_gp): ... a new function.  Refine the
	CALL_INSN test to just TYPE_JSR.
	* alpha.md (most call insns): Fix some jsr/ibr type transpositions.

Thu Oct 16 09:36:47 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Oct 15 21:38:18 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pa.c (move_operand): Respect -mdisable-indexing.
	* pa.h (GO_IF_LEGITIMATE_ADDRESS): Likewise.

Wed Oct 15 21:34:45 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md (udivsi3, divsi3): Split into MQ and non-MQ cases for
	PPC601.
	(umulsidi3,umulsi3_highpart): Likewise.
	(smulsi3_highpart_no_mq): Add !TARGET_POWER.

Wed Oct 15 18:21:46 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.c (final_prescan_insn): Gut, remove and transform to ...
	(alpha_handle_trap_shadows): ... a new function.  Handle the entire
	function in one go.  Emit RTL for trapb, instead of printf directly.
	(alpha_reorg): New function.  Call alpha_handle_trap_shadows.
	(trap_pending): Kill global variable.
	(output_epilog): Don't call final_prescan_insn.
	(struct shadow_summary): Elide $31 and $f31; now it fits in a word.
	* alpha.h (FINAL_PRESCAN_INSN): Remove.
	(MACHINE_DEPENDENT_REORG): Define.
	* alpha.md (jsr patterns with trapb): Stupid and useless.  Kill.
	(trapb): New insn.

Wed Oct 15 18:16:05 1997  Richard Henderson  <rth@cygnus.com>

	Tune Haifa scheduler for Alpha:
	* alpha.h (ISSUE_RATE): Define.
	* alpha.c (alpha_adjust_cost): Handle EV5 mult delay; don't apply
	EV4 adjustments to EV5.
	* alpha.md: Remove all scaling from function unit delays.  Rework
	EV5 function units to match the CPU.
	(umuldi3_highpart): EV5 added the IMULH insn class.

Wed Oct 15 17:42:41 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (following_call): Fail if the CALL_INSN is an indirect
	call.

Tue Oct 14 12:01:00 1997  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (demangle_signature): Don't look for return types on
	constructors.  Handle member template constructors.

Tue Oct 14 11:30:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (expr_tree_cons, build_expr_list, expralloc): New fns.
	* tree.h: Declare them.

Fri Oct 10 13:46:56 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in: Handle --with-newlib.
	* Makefile.in (LIBGCC2_CFLAGS): Add @inhibit_libc@.

	* sparc/t-sp64 (LIBGCC2_CFLAGS): Delete.

Wed Oct  8 14:37:44 1997  Jeffrey A Law  (law@cygnus.com)

	* config/ptx4.h: Fix typo.

Wed Oct  8 08:57:20 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Oct  7 16:27:34 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* aclocal.m4: Substitute INSTALL.
	* configure: Re-built.

Tue Oct  7 15:37:35 1997  Jeffrey A Law  (law@cygnus.com)

	* integrate.c (save_for_inline_copying): Avoid undefined pointer
	operations.
	(expand_inline_function): Likewise.

	* dwarf2out.c (output_call_frame_info): Reinstate last change
	using flag_debug_asm check instead of flag_verbose_asm.

Tue Oct  7 12:57:26 1997  Jim Wilson  <wilson@cygnus.com>

	* dwarf2out.c (output_call_frame_info): Remove last change.

1997-10-04  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* frame.c (__frame_state_for): Execute the FDE insns until the
	current pc value is strictly bigger than the target pc value.

Tue Oct  7 11:00:42 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* regclass.c (init_reg_modes): If we can't find a mode for the
	register, use the previous one.

Tue Oct  7 10:55:34 1997  Richard Henderson  <rth@cygnus.com>

	* haifa-sched.c (print_block_visualization): Call fprintf directly,
	don't sprintf through an alloca'ed buffer.

Tue Oct  7 10:52:29 1997  Thomas Koenig  (ig25@rz.uni-karlsruhe.de)

	* reload.c (decompose): Always initialize val.base.

Tue Oct  7 10:19:26 1997  Manfred Hollstein  (manfred@lts.sel.alcatel.de)

	* m68k/mot3300.h (ASM_OUTPUT_ALIGN): Accept any alignment
	instead of aborting.
	* dwarf2out.c (output_call_frame_info): Call app_enable and
	app_disable to let GNU as accept the generated comments.

Tue Oct  7 11:41:21 1997  Michael Meissner  <meissner@cygnus.com>

	* tree.h (get_file_function_name): Add declaration.
	* dwarf2out.c (output_call_frame_info): No need to cast
	get_file_function_name call anymore.
	* profile.c (toplevel): Remove get_file_function_name
	declaration.
	* c-lang.c (finish_file): Likewise.

Tue Oct  7 10:01:45 1997  Chip Salzenberg  <chip@rio.atlantic.net>

	* Makefile.in (program_transform_name): Let autoconf substitute
	the correct value.

Tue Oct  7 09:54:35 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (schedule_block): If the first real insn in a
	block has any special notes attached to it, remove them.

Tue Oct  7 09:48:51 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.h (FLOAT_STORE_FLAG_VALUE): It's 2.0 not 0.5.

Mon Oct  6 12:47:32 1997  Manfred Hollstein  (manfred@lts.sel.alcatel.de)

	* m88k.c (m88k_begin_prologue): Remove superfluous backslash.

Mon Oct  6 12:04:24 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (check-g77): New test target.
	(CHECK-TARGETS): Add check-g77.

Fri Oct  3 11:56:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* toplev.c (rest_of_compilation): Defer all non-nested inlines.

Fri Oct  3 15:49:27 1997  Michael Meissner  <meissner@cygnus.com>

	* flow.c (print_rtl_with_bb): Cast alloca return value for
	in_bb_p.

Thu Oct  2 21:15:03 1997  Richard Henderson  <rth@cygnus.com>

	* i386.h (RETURN_ADDR_RTX): New definition that works for
	__builtin_return_address(0) and -fomit-frame-pointer.

Wed Oct  1 13:43:53 1997  Jim Wilson  <wilson@cygnus.com>

	Bring over from FSF.
	Tue Aug  5 16:10:45 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.c (function_arg): Handle passing a struct
	containing a double in a DFmode register without the PARALLEL.

Wed Oct  1 11:13:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* pexecute.c: Use spawn if __CYGWIN32__.

	* pexecute.c: Include "config.h" first, as per autoconf manual
	(from Paul Eggert  <eggert@twinsun.com>).

Wed Oct  1 01:44:36 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* m68k/x-mot3300 (XCFLAGS): Disable as's long/short jump
	optimization for f/expr.o and f/stb.o.

Tue Sep 30 23:48:57 1997  Jeffrey A Law  (law@cygnus.com)

	* cse.c (this_insn_cc0_mode): Initialize.

Tue Sep 30 23:09:40 1997  Thomas Koenig  <ig25@mvmap66.ciw.uni-karlsruhe.de>

	* cccp.c (expand_to_temp_buffer): Initialize all members of obuf.

	* haifa-sched.c (get_block_head_tail): Remove unneeded initialization.

Tue Sep 30 23:06:43 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (beq): For registers and ints 0-255, use cmpeq+bne, since
	that pair will dual-issue on the 21164 and plus+beq won't.
	(bne): Likewise for cmpeq+beq.

Tue Sep 30 16:07:58 1997  Jim Wilson  <wilson@cygnus.com>

	* except.c (find_exception_handler_labels): Correct argument to free.

Tue Sep 30 11:00:00 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c (find_exception_handler_labels): Free LABELS when we're
	done.

Mon Sep 29 14:04:35 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Sep 29 10:51:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* flow.c (find_basic_blocks): Mark calls as potentially jumping
	to the EH labels.

Mon Sep 29 09:58:06 1997  Jeffrey A Law  (law@cygnus.com)

	* configure.in: Substitute for "install" too.
	* configure: Rebuilt.

Mon Sep 29 00:38:42 1997  Aaron Jackson  <jackson@negril.msrce.howard.edu>

	* Makefile.in (bootstrap-lean, compare-lean): New targets.

Mon Sep 29 00:18:16 1997  Richard Henderson  (rth@cygnus.com)

	* alias.c (base_alias_check): Two symbols can conflict if they
	are accessed via AND.
	(memrefs_conflict_p): Likewise.

	* alpha.h (SETUP_INCOMING_VARARGS): Emit a blockage insn
	after flushing argument registers to the stack.

	* Makefile.in (mostlyclean): Remove .regmove files.

Sun Sep 28 18:59:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (__throw): Fix thinko.

Sun Sep 28 12:00:52 1997  Mark Mitchell  <mmitchell@usa.net>

	* cplus-dem.c (demangle_template): Add new parameter.  Handle new
	template-function mangling.
	(consume_count_with_underscores): New function.
	(demangle_signature): Handle new name-mangling scheme.

Sun Sep 28 01:55:04 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* flow.c (print_rtl_with_bb): Cast alloca return values for variables
	start and end.

Sun Sep 28 01:05:16 1997  Jeffrey A Law  (law@cygnus.com)

	* frame.c: Remove last change.
	* dwarf2.h: Remove last change.
	* tree.h: Add declarations of DWARF2 unwind info support
	functions.

Sat Sep 27 11:02:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* c-decl.c (init_decl_processing): Add __builtin_dwarf_reg_size.
	* tree.h (built_in_function): Likewise.
	* expr.c (expand_builtin): Likewise.
	* except.h: Likewise.
	* dwarf2out.c (expand_builtin_dwarf_reg_size): New fn.
	* libgcc2.c (copy_reg): New fn.
	(__throw): Use it.

Fri Sep 26 08:54:59 1997  Paul Eggert  <eggert@twinsun.com>

	* c-typeck.c (build_binary_op): Warn about comparing signed vs
	unsigned if -W is specified and -Wno-sign-compare is not.
	* c-decl.c (warn_sign_compare): Initialize to -1.
	(c_decode_option): -Wall no longer implies -Wsign-compare.

Fri Sep 26 09:00:13 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* frame.c: Include gansidecl.h for PROTO.
	* dwarf2out.c: Move inclusion of dwarf2.h down so that PROTO is
	defined.  Don't declare dwarf2out_cfi_label here.
	* dwarf2.h: Add declarations of DWARF2 unwind info support
	functions.
	* m68k.c: Include dwarf2.h.
	(output_function_prologue): Add dwarf2 support.
	* m68k.h (INCOMING_RETURN_ADDR_RTX, DWARF_FRAME_REGNUM): New macros.
	(INCOMING_FRAME_SP_OFFSET): Likewise.

	* integrate.c (expand_inline_function): Make sure there is at
	least one insn that can be used as an insertion point.

Wed Sep 24 21:34:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c: s/flag_verbose_asm/flag_debug_asm/

Wed Sep 24 22:05:30 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Wed Sep 24 17:36:23 1997  Doug Evans  <dje@canuck.cygnus.com>

	Bring over from FSF.

	Wed Sep 24 19:17:08 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sparc.md (get_pc_via_call): Renamed from get_pc_sp32.
	(get_pc_via_rdpc): Renamed from get_pc_sp64.
	* sparc/sparc.c (finalize_pic): Update call to gen_get_pc_via_call.

	Wed Sep 24 18:38:22 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* sparc/sparc.h (ASM_CPU_SPEC): Pass -Av9a for v8plus, ultrasparc.
	(TARGET_OPTIONS): Add -malign-loops=, -malign-jumps=,
	-malign-functions=.
	(sparc_align_{loops,jumps,funcs}_string): Declare.
	(sparc_align_{loops,jumps,funcs}): Declare.
	(DEFAULT_SPARC_ALIGN_FUNCS): New macro.
	(FUNCTION_BOUNDARY): Use sparc_align_funcs.
	(STACK_BIAS): Define.
	(SPARC_SIMM*_P): Cast to unsigned HOST_WIDE_INT first, then perform
	test.
	(SPARC_SETHI_P): New macro.
	(CONST_OK_FOR_LETTER_P): Use it.
	(ASM_OUTPUT_ALIGN_CODE): Define.
	(ASM_OUTPUT_LOOP_ALIGN): Define.
	* sparc/sparc.c (sparc_align_{loops,jumps,funcs}_string): New globals.
	(sparc_align_{loops,jumps,funcs}): New globals.
	(sparc_override_options): Handle -malign-loops=, -malign-jumps=,
	-malign-functions=.
	(move_operand): Use SPARC_SETHI_P.
	(arith_double_operand): Cast to unsigned HOST_WIDE_INT first, then
	perform test.
	(arith11_double_operand): Likewise.
	(arith10_double_operand): Likewise.
	(finalize_pic): Finish sparc64 support.
	(emit_move_sequence): Use SPARC_SETHI_P.  Simplify low part of
	64 bit constants if able.
	(output_fp_move_quad): Don't use fmovq unless TARGET_HARD_QUAD.
	(sparc_builtin_saveregs, sparc64 case): Don't save fp regs if
	! TARGET_FPU.
	* sparc/sparc.md (*): Use GEN_INT instead of gen_rtx.
	(get_pc_sp32): Use for sparc64 as well.
	(lo_sum_di_sp{32,64}): Fix handling on 64 bit hosts.
	(sethi_di_sp64_const): Likewise.
	(movtf_cc_sp64): Check TARGET_HARD_QUAD.
	(cmp_zero_extract_sp64): Use unsigned HOST_WIDE_INT in cast.
	(ashlsi3, ashldi3, ashrsi3, ashrdi3, lshrsi3, lshrdi3): Likewise.

	Tue Sep 23 19:02:46 1997  Doug Evans  <dje@cygnus.com>

	* sparc/linux-aout.h (COMMENT_BEGIN): Delete.
	* sparc/linux.h (COMMENT_BEGIN): Likewise.
	* sparc/linux64.h (COMMENT_BEGIN): Likewise.

	Tue Sep 23 14:48:18 1997  David S. Miller  <davem@tanya.rutgers.edu>

	Add sparc64 linux support.
	* configure.in (sparc64-*-linux*): Recognize.  Add sparc/xm-sparc.h
	to xm_file list on 32-bit sparc-linux.
	* sparc/xm-sp64.h: New file.
	* sparc/linux64.h: New file.
	* sparc/xm-linux.h: Include some standard headers if not inhibit_libc.
	Don't include xm-sparc.h.
	* config/xm-linux.h (HAVE_PUTENV, HAVE_ATEXIT): Define.
	* glimits.h (LONG_MAX): Handle sparc64.

	Sat Sep 20 03:07:54 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sysv4.h (ASM_COMMENT_START): Delete.
	* sparc.h (ASM_COMMENT_START): Define.
	* sparc.c (output_function_prologue): Use it.
	(sparc_flat_output_function_{epi,pro}logue): Likewise.

	Wed Sep 17 15:04:19 1997  Doug Evans  <dje@cygnus.com>

	* sparc/sysv4.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Delete,
	use sparc.h's copies.
	* sparc/sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Print
	ascii form as well.

	Mon Sep  8 08:45:19 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* sparc.c (dwarf2out_cfi_label): Add declaration.
	(save_regs, output_function_prologue): Remove cast for it.
	(sparc_flat_{save_restore,output_function_prologue): Likewise.
	({save,restore}_regs): No longer inline.

Tue Sep 23 12:34:51 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* fold-const.c (make_range): Correctly handle cases of converting
	from unsigned to signed type.

Tue Sep 23 12:34:51 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* fold-const.c (merge_ranges): Make sure that if one range is subset
	of another, it will always be the second range.  Correct (+,-) case to
	account for this.

Tue Sep 23 08:32:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_end_function): Also do dwarf2 thing if
	DWARF2_DEBUGGING_INFO.
	(final_start_function): Likewise.

Tue Sep 23 01:15:50 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* expmed.c (expand_divmod): If compute_mode is not the same as
	mode, handle the case where convert_modes() causes op1 to no
	longer be a CONST_INT.

	* reorg.c (dbr_schedule): At end of this pass, add REG_BR_PRED
	note holding get_jump_flags() calculation to all JUMP_INSNs.
	* rtl.h (enum reg_note): New note types REG_BR_PRED and REG_SAVE_AREA.
	* rtl.c (reg_note_name): Add new note types.

Tue Sep 23 00:59:54 1997  Jeffrey A Law  (law@cygnus.com)

	* rtlanal.c (computed_jump_p): Fix typo in last change.

Tue Sep 23 00:42:44 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* loop.c (indirect_jump_in_function_p): Return 0
	by default.

Tue Sep 23 00:33:55 1997  Jeffrey A Law  (law@cygnus.com)

	* rs6000/xm-rs6000.h: Fix thinko in last change.
	* rs6000/xm-sysv4.h: Likewise.

Mon Sep 22 19:33:53 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.c (save_restore_insns): Only set RTX_FRAME_RELATED_P if store_p.

Mon Sep 22 14:41:00 1997  Jeffrey A Law  (law@cygnus.com)

	* reg-stack.c (find_blocks): Fix thinko in last change.

1997-09-21  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68k.c (output_function_prologue): Add dwarf2 support.

	* m68k.h (INCOMING_RETURN_ADDR_RTX, DWARF_FRAME_REGNUM,
	INCOMING_FRAME_SP_OFFSET): New definitions.

Mon Sep 22 11:36:42 1997  David S. Miller  <davem@tanya.rutgers.edu>

	* combine.c (try_combine): Use NULL_RTX instead of '0' where
	appropriate in calls to gen_rtx().
	* cse.c (cse_main): Likewise.
	* emit-rtl.c (gen_label_rtx): Likewise.
	* expr.c (init_expr_once): Likewise.
	* haifa-sched.c (flush_pending_lists, sched_analyze_insn,
	sched_analyze, init_rgn_data_dependences,
	compute_block_backward_dependences): Likewise.
	* sched.c (schedule_insns): Likewise.
	* varasm.c (immed_double_const): Likewise.

	* sparc.h (INCOMING_FRAME_SP_OFFSET): Define to
	SPARC_STACK_BIAS for sake of dwarf2 on sparc64.

Mon Sep 22 11:21:33 1997  J. Kean Johnston  <jkj@sco.com>

	* i386/sco5.h: Make ELF default file format and add -mcoff/-melf..
	(MULTILIB_DEFAULTS): Define.
	(ASM_SPEC, CPP_SPEC): Handle -mcoff.
	(STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Likewise.
	(LIBGCC_SPEC): Likewise.
	(MASK_COFF, TARGET_COFF, TARGET_ELF): Define.
	(SUBTARGET_SWITCHES): Add -mcoff and -melf.
	* i386/t-sco5 (CRTSTUFF_T_CFLAGS): Add -fPIC.
	(CRTSTUFF_T_CFLAGS_S): Tweak for COFF.
	(EXTRA_PARTS, TAROUTOPTS): Delete.
	(libgcc1-elf, libgcc2-elf, libgcc-elf targets): Delete.
	(MULTILIB_OPTIONS): Define.
	(MULTILIB_DIRNAMES, MULTILIB_EXCEPTIONS): Likewise.
	(MULTILIB_MATCHE, MULTILIB_EXTRA_OPTS): Likewise.

Mon Sep 22 02:10:43 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Sep 21 17:45:45 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (loop_number): Delete function.  Change all references
	to use uid_loop_num array.
	* loop.h (loop_number): Delete declaration.
	* unroll.c (unroll_loop): Change "loop_number" references to
	use uid_loop_num instead.

	* loop.c (loop_unroll_factor): Move outside #ifdef HAIFA
	conditional.
	(loop_unroll_iter): Remove unused variable and all references.
	(loop_optimize): Always allocate and clear space for loop_unroll_factor.
	(insert_bct): Fix minor formatting problems.
	* loop.h (loop_unroll_factor): Move decl outside #ifdef HAIFA.
	(loop_unroll_iter): Removed unused decl.
	* unroll.c (unroll_loop): Remove code to set loop_unroll_iter.
	Always record the unrolling factor.

	* cse.c (simplify_relational_operation): Set h0u just like h0s.
	Similarly for h1u and h1s.

	* flow.c (jmp_uses_reg_or_mem): Deleted unused function.
	(find_basic_blocks): Use computed_jump_p to determine if a
	particular JUMP_INSN is a computed jump.
	* reg-stack.c (find_blocks): Use computed_jump_p to determine
	if a particular JUMP_INSN is a computed jump.
	* rtlanal.c (jmp_uses_reg_or_mem): New function.
	(computed_jump_p): Likewise.
	* rtl.h (computed_jump_p): Declare.
	* genattrtab.c (pc_rtx): Define and initialize.
	* loop.c (loop_optimize): Always determine if the current
	function has a computed jump.
	(indirect_jump_in_function_p): Use computed_jump_p to determine
	if a particular JUMP_INSN is a computed jump.

	* loop.c (fix_bct_param): Delete unused function.
	(check_bct_param): Likewise.

Sat Sep 20 16:22:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* frame.c (__deregister_frame): Check properly for initialized object.

Fri Sep 19 20:51:03 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* alpha/linux.h (HANDLE_SYSV_PRAGMA): Defined.

Fri Sep 19 18:53:50 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* jump.c (thread_jumps): Check can_reverse_comparison_p before
	threading a reversed-condition jump.

	* sched.c (update_flow_info): Don't pass SCRATCH to dead_or_set_p.
	* haifa-sched.c (update_flow_info): Likewise.

Thu Sep 18 21:13:40 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (BOOT_CFLAGS): Use -O2.

	* configure.in (strtoul, bsearch): Have autoconf check for these
	functions.
	* configure, config.in: Rebuilt.

	* m68k/xm-mot3300.h (alloca): Properly declare if __STDC__.
	* mips/mips.h (alloca): Likewise.
	* rs6000/xm-rs6000.h (alloca): Likewise.
	* rs6000/xm-sysv4.h: Likewise.

Thu Sep 18 14:22:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* final.c (final_scan_insn): Hand BARRIERs off to the dwarf2 code.
	* dwarf2out.c (dwarf2out_frame_debug): Pass the whole insn along.
	(dwarf2out_stack_adjust): A BARRIER resets the args space to 0.

	* except.c (end_eh_unwinder): Subtract 1 from return address.
	* libgcc2.c (__throw): Likewise.
	(find_exception_handler): Don't change PC here.  Compare end with >.

Thu Sep 18 10:43:07 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.c (compute_register_save_size): Correct register
	number.
	* v850.md (save_interrupt, return_interrupt): Correct
	register number.
	* v850/lib1funcs.asm (save_interrupt): Correct register number.
	(return_interrupt): Use stack pointer, not element pointer.

1997-09-18  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* configure.in, configure: Make sure to create the stage* and include
	symbolic links in each subdirectory.

Thu Sep 18 01:47:06 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (reload_peepholes): Don't allow addresses with side
	effects for the memory operand.

Wed Sep 17 18:19:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (find_exception_handler): Subtract one from our PC when
	looking for a handler, to avoid hitting the beginning of the next
	region.

	* except.c (expand_builtin_set_return_addr_reg): Use force_operand.

Wed Sep 17 18:33:59 1997  Jeffrey A Law  (law@cygnus.com)

	* mips/abi64.h (LONG_MAX_SPEC): Define.
	* mips.h (LONG_MAX_SPEC): Define.
	(CPP_SPEC): Include long_max_spec.
	(EXTRA_SPECS): Include long_max_spec.

Wed Sep 17 14:11:38 1997  Jeffrey A Law  (law@cygnus.com)

	* v850.c (construct_save_jarl): Fix thinko in last change.

Wed Sep 17 09:53:07 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Tue Sep 16 14:22:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* libgcc2.c (find_exception_handler): Not found is -1.

	* integrate.c (expand_inline_function): Move expand_start_bindings
	after expanding the arguments.

Tue Sep 16 11:13:46 1997  Jim Wilson  <wilson@cygnus.com>

	* expr.c (expand_expr): Remove previous incorrect change.
	If target and slot has no DECL_RTL, then call mark_addressable
	again for the slot after we give it RTL.

Tue Sep 16 09:18:52 1997  Jason Merrill  (jason@cygnus.com)

	* expr.c (expand_expr, case TARGET_EXPR): Call mark_addressable
	again for the slot after we give it RTL.

Tue Sep 16 00:13:20 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.c (register_is_ok_for_epilogue,
	pattern_is_ok_for_epilogue, construct_restore_jr,
	pattern_is_ok_for_prologue, construct_save_jarl): New functions.

	* v850.h (pattern_is_ok_for_prologue,
	pattern_is_ok_for_epilogue, register_is_ok_for_epilogue): New
	predicates.

	* v850.md: Replace prologue and epilogue patterns with a
	match_parallel pattern.

Mon Sep 15 22:53:01 1997  Jeffrey A Law  (law@cygnus.com)

	* aclocal.m4: Add replacement for AC_PROG_INSTALL.
	* configure.in: Use EGCS_PROG_INSTALL.

Mon Sep 15 22:40:55 1997  Jim Wilson  (wilson@cygnus.com)

	* dwarf2out.c (gen_subprogram_die): Handle redefinition of an
	extern inline function.

Mon Sep 15 22:40:55 1997  Richard Henderson  (rth@cygnus.com)

	* dwarf2out.c (reg_loc_descriptor): Fix prototype.
	(concat_loc_descriptor): New function.
	(loc_descriptor): Call it.
	(add_AT_location_description): Also elide the descriptor if both
	halves of a CONCAT are pseudos.
	(add_location_or_const_value_attribute): Recognize CONCAT too.

Mon Sep 15 15:24:00 1997  Richard Henderson  <rth@cygnus.com>

	* alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS.

	* alpha/alpha.c (output_prolog): New variable sa_reg.  Use it for
	out-or-range reg_offset.
	(output_epilog): Likewise.

Mon Sep 15 15:39:26 1997  Jeffrey A Law  (law@cygnus.com)

	* cse.c (simplify_relational_operation): If MODE specifies a
	mode wider than HOST_WIDE_INT, then the high word of a CONST_INT
	is derived from the sign bit of the low word.

Mon Sep 15 11:43:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Support dwarf2 unwinding on PUSH_ROUNDING targets like the x86.

	* dwarf2.h: Add DW_CFA_GNU_args_size.
	* frame.c (execute_cfa_insn): Likewise.
	* dwarf2out.c (dwarf_cfi_name, output_cfi): Likewise.
	(dwarf2out_args_size, dwarf2out_stack_adjust): New fns.
	(dwarf2out_frame_debug): If this isn't a prologue or epilogue
	insn, hand it off to dwarf2out_stack_adjust.
	(dwarf2out_begin_prologue): Initialize args_size.
	* frame.h (struct frame_state): Add args_size.
	* libgcc2.c (__throw): Use args_size.
	* final.c (final_scan_insn): If we push args, hand off all insns
	to dwarf2out_frame_debug.
	* defaults.h (DWARF2_UNWIND_INFO): OK for !ACCUMULATE_OUTGOING_ARGS.

	* dwarf2out.c dwarf2out_frame_debug): Fix typo.
	Handle epilogue restore of SP from FP.
	* emit-rtl.c (gen_sequence): Still generate a sequence if the
	lone insn has RTX_FRAME_RELATED_P set.

	* frame.c (extract_cie_info): Handle "e" augmentation.
	* dwarf2out.c (ASM_OUTPUT_DWARF_*): Provide definitions in the
	absence of UNALIGNED_*_ASM_OP.
	(UNALIGNED_*_ASM_OP): Only provide defaults if OBJECT_FORMAT_ELF.
	(output_call_frame_info): Use "e" instead of "z" for augmentation.
	Don't emit augmentation fields length.
	(dwarf2out_do_frame): Move outside of #ifdefs.
	* defaults.h (DWARF2_UNWIND_INFO): Don't require unaligned data
	opcodes.

	* sparc.h (UNALIGNED_INT_ASM_OP et al): Don't define here after all.
	* sparc/sysv4.h (UNALIGNED_INT_ASM_OP): Define here.
	* sparc/sunos4.h (DWARF2_UNWIND_INFO): Define to 0.
	* sparc/sun4gas.h: New file.
	* configure.in: Use sun4gas.h if SunOS 4 --with-gnu-as.

	* collect2.c (write_c_file_stat, write_c_file_glob): Declare
	__register_frame_table and __deregister_frame.

1997-09-15  Brendan Kehoe  <brendan@cygnus.com>

	* except.c (find_exception_handler_labels): Use xmalloc instead of
	alloca, since MAX_LABELNO - MIN_LABELNO can be more than 1 million
	in some cases.

Sun Sep 14 21:01:23 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in: Various changes to build info files
	in the object tree rather than the source tree.

Sun Sep 14 12:24:30 1997  Jeffrey A Law  (law@cygnus.com)

	* fixinc.math: New file to fix math.h on some systems.
	* configure.in (freebsd, netbsd): Use fixinc.math on these
	systems.
	* configure: Rebuilt.

Sun Sep 14 11:11:05 1997  Jeffrey A Law  (law@cygnus.com)

	* regmove.c (regmove_optimize): If we end up moving the
	original insn due to lifetime overlaps, make sure to move
	REG_NOTES too.

Sat Sep 13 15:51:11 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (INSTALL_{PROGRAM,DATA}): Use value found by configure.

Sat Sep 13 12:57:26 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (add_branch_dependences): Make each insn in
	a SCHED_GROUP_P block explicitly depend on the previous insn.

Fri Sep 12 13:49:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.h: Prototype dwarf2 hooks.
	* expr.c: Adjust.

Thu Sep 11 17:43:55 1997  Jim Wilson  <wilson@cygnus.com>

	* configure.in (native_prefix): Delete.
	(mips-dec-netbsd): Don't set prefix.
	(*linux*): Don't set prefix.

Thu Sep 11 15:48:32 1997  Fred Fish  <fnf@ninemoons.com>

	* protoize.c: Include <varargs.h> only if HAVE_VARARGS_H is
	defined.  If not defined, include <sys/varargs.h> if
	HAVE_SYS_VARARGS_H is defined.
	* configure.in: Test for varargs.h and sys/varargs.h.
	* configure: Regenerate with autoconf.
	* config.in: Regenerate with autoheader.

	* cpplib.c (quote_string): Cast first arg of sprintf call
	from "unsigned char *" to "char *".
	(output_line_command): Likewise.
	(macroexpand): Likewise.
	(do_line): Cast atoi arg from "unsigned char *" to "char *".

Wed Sep 10 21:37:30 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

	* Makefile.in (compare): Exit with nonzero status if there
	are comparison failures.  Note which files failed the
	comparison test in .bad_compare.

Wed Sep 10 17:05:46 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* config/alpha/elf.h (CPP_PREDEFINES): Remove -D__PIC__ -D__pic__.

Wed Sep 10 16:37:28 1997  Fred Fish  <fnf@ninemoons.com>

	* Makefile.in (LN, LN_S): New macros, use where appropriate.
	* aclocal.m4 (GCC_PROG_LN_S, GCC_PROG_LN): New tests.
	* configure.in: Use GCC_PROG_LN_S and GCC_PROG_LN.
	* configure: Regenerated.

Thu Sep 11 11:09:43 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (strength_reduce): Fix typo.

Wed Sep 10 16:01:15 1997  Jim Wilson  <wilson@cygnus.com>

	* m88k/m88k.c (struct option): Rename to struct options.
	* m88k/dolph.h (INITIALIZE_TRAMPOLINE): Delete here.
	* m88k/sysv3.h (INITIALIZE_TRAMPOLINE): Delete ifdef and comments.
	* libgcc2.c (__enable_execute_stack): Check for __sysV88__ not
	__DOLPHIN__ or sysV88.

Wed Sep 10 14:58:40 1997  Jim Wilson  <wilson@cygnus.com>

	* emit-rtl.c (gen_lowpart_common): For a SUBREG, add in word when
	create new subreg.

Wed Sep 10 15:19:22 1997  Jeffrey A Law  (law@cygnus.com)

	* config.sub: Accept 'amigados' for backward compatibility.

Wed Sep 10 14:05:08 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* Makefile.in (testsuite/site.exp): New target.
	(check-gcc, check-g++): Depend on testsuite/site.exp.
	Don't stop for failure.

Wed Sep 10 12:59:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_builtin): Only support __builtin_dwarf_fp_regnum()
	if DWARF2_UNWIND_INFO.

Wed Sep 10 11:49:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Add support for exception handling using DWARF 2 frame unwind info.
	Currently works on SPARC and MIPS, and almost on x86.

	* libgcc2.c (get_reg, put_reg, get_return_addr, put_return_addr,
	next_stack_level, in_reg_window): Helper fns.
	(__throw): Implement for DWARF2_UNWIND_INFO.

	* expr.c (expand_builtin): Handle builtins used by __throw.
	* tree.h (enum built_in_function): Add builtins used by __throw.
	* c-decl.c (init_decl_processing): Declare builtins used by __throw.
	* dwarf2out.c (expand_builtin_dwarf_fp_regnum): Used by __throw.
	* except.c (expand_builtin_unwind_init): Hook for dwarf2 __throw.
	(expand_builtin_extract_return_addr): Likewise.
	(expand_builtin_frob_return_addr): Likewise.
	(expand_builtin_set_return_addr_reg): Likewise.
	(expand_builtin_eh_stub): Likewise.
	(expand_builtin_set_eh_regs): Likewise.
	(eh_regs): Choose two call-clobbered registers for passing back values.

	* frame.c, frame.h: New files for parsing dwarf 2 frame info.
	* Makefile.in (LIB2ADD): New variable.  Add $(srcdir)/frame.c.
	(libgcc2.a): Use it instead of $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
	(stmp-multilib): Likewise.
	($(T)crtbegin.o, $(T)crtend.o): Add -fno-exceptions.

	* except.c: #include "defaults.h".
	(exceptions_via_longjmp): Default depends on DWARF2_UNWIND_INFO.
	(emit_throw): Don't defeat assemble_external if DWARF2_UNWIND_INFO.
	(register_exception_table_p): New fn.
	(start_eh_unwinder): Don't do anything if DWARF2_UNWIND_INFO.
	(end_eh_unwinder): Likewise.

	* crtstuff.c: Wrap .eh_frame section, use EH_FRAME_SECTION_ASM_OP,
	call __register_frame and __deregister_frame as needed.
	* varasm.c (eh_frame_section): New fn if EH_FRAME_SECTION_ASM_OP.
	* dwarf2out.c (EH_FRAME_SECTION): Now a function-like macro.  Check
	EH_FRAME_SECTION_ASM_OP.
	* sparc/sysv4.h (EH_FRAME_SECTION_ASM_OP): Define.
	* mips/iris6.h (EH_FRAME_SECTION_ASM_OP): Define.
	(LINK_SPEC): Add __EH_FRAME_BEGIN__ to hidden symbols.

	* dwarf2out.c (output_call_frame_info): If no support for
	EXCEPTION_SECTION, mark the start of the frame info with a
	collectible tag.
	* collect2.c (frame_tables): New list.
	(is_ctor_dtor): Recognize frame entries.
	(scan_prog_file): Likewise.
	(main): Pass -fno-exceptions to sub-compile.  Also do collection
	if there are any frame entries.
	(write_c_file_stat): Call __register_frame_table and
	__deregister_frame as needed.
	(write_c_file_glob): Likewise.

	* defaults.h (DWARF2_UNWIND_INFO): Default to 1 if supported.
	Also require unaligned reloc support.
	* sparc.h (UNALIGNED_SHORT_ASM_OP, UNALIGNED_INT_ASM_OP,
	UNALIGNED_DOUBLE_INT_ASM_OP): Define here.
	* sparc/sysv4.h: Not here.

	* toplev.c (compile_file): Call dwarf2out_frame_{init,finish}.
	* dwarf2out.c (dwarf2out_init): Don't call dwarf2out_frame_init.
	(dwarf2out_finish): Don't call dwarf2out_frame_finish.

	* libgcc2.c (L_eh): Reorganize, moving code shared by different
	EH implementations to the top.
	(find_exception_handler): Split out.  Start from 0.  Compare against
	end with >=.
	(__find_first_exception_table_match): Use it.
	* except.c (output_exception_table): Don't do anything if there's
	no table.  Don't output a first entry of zeroes.
	(eh_outer_context): Adjust properly.
	(add_eh_table_entry): Use xrealloc.
	* toplev.c (compile_file): Just call output_exception_table.

Wed Sep 10 11:30:36 1997  Jason Merrill  <jason@cygnus.com>

	* i386.c (ix86_prologue): Add dwarf2 support for !do_rtl case.

Wed Sep 10 08:17:10 1997  Torbjorn Granlund  <tege@pdc.kth..se>

	* except.c (eh_outer_context): Do masking using expand_and.

Wed Sep 10 01:38:30 1997  Doug Evans  <dje@cygnus.com>

	Add port done awhile ago for the ARC cpu.
	* arc/arc.h: New file.
	* arc/arc.c: New file.
	* arc/arc.md: New file.
	* arc/initfini.c: New file.
	* arc/lib1funcs.asm: New file.
	* arc/t-arc: New file.
	* arc/xm-arc.h: New file.
	* ginclude/va-arc.h: New file.
	* ginclude/stdarg.h: Include va-arc.h ifdef __arc__.
	* ginclude/varargs.h: Likewise.
	* Makefile.in (USER_H): Add va-arc.h.
	* configure.in (arc-*-elf*): Recognize.
	* longlong.h: Add ARC support.

Wed Sep 10 01:32:54 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.c (clear_storage): Use CONST0_RTX instead of const0_rtx.
	when clearing non-BLKmode data.

Wed Sep 10 00:29:29 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* m88k/sysv3.h (INITIALIZE_TRAMPOLINE): Define.
	* libgcc2.c (__enable_execute_stack): Provide for sysV88 too.

	* xm-m88k.h (USG): Only define if it hasn't already been defined.

	* Makefile.in (risky-stage1): Delete gratuitous whitespace.

	* Makefile.in (clean): Delete libgcc1-test.

	* Makefile.in (INSTALL): cd to $(srcdir) before running texinfo.

Tue Sep  9 17:07:36 1997  Stan Cox  <coxs@dg-rtp.dg.com>

	* m88k.c (m88k_expand_prologue): Set MEM_IN_STRUCT_P of va_list
	template.

Tue Sep  9 09:50:02 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* dwarf2out.c (output_call_frame_info): Call named_section.

Tue Sep  9 09:12:17 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (print_value): Fix last change.

Tue Sep  9 01:30:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.h (DWARF_FRAME_REGNUM): Use the same numbering regardless of
	write_symbols.

Mon Sep  8 16:32:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.c (function_prologue): Set up the CFA when ABI_32.

	* sparc.c (save_regs): Check dwarf2out_do_frame instead of DWARF2_DEBUG
	for dwarf2 unwind info.
	(output_function_prologue, sparc_flat_output_function_prologue): Same.

	* final.c (final_end_function): Check dwarf2out_do_frame instead
	of DWARF2_DEBUG for dwarf2 unwind info.
	(final_scan_insn): Likewise.
	(final_start_function): Likewise.  Initialize dwarf2 frame debug here.
	(final): Not here.

	* expr.c (expand_builtin_return_addr): Only SETUP_FRAME_ADDRESSES if
	count > 0.

	* varasm.c (exception_section): Check EXCEPTION_SECTION first.

Mon Sep  8 15:15:11 1997  Nick Clifton  <nickc@cygnus.com>

	* v850.h (ASM_SPEC): Pass on target processor.
	(CPP_PREDEFINES): Only define if not already specified.
	(TARGET_VERSION): Only define if not already specified.
	(MASK_CPU, MASK_V850, MASK_DEFAULT): Bits to specify target
	processor.
	(EXTRA_SWITCHES): Extra entries in the switches array.
	(TARGET_DEFAULT): Set default target processor.

Mon Sep  8 18:26:35 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): In MOTOROLA
	cases, add %# and %/, and add : to make them into extended asms.

Sun Sep  7 23:57:50 1997  Weiwen Liu  <liu@hepunix.physics.yale.edu>

	* alias.c (init_alias_analysis): Clean up incompatible pointer
	type warning in bzero.
	* regmove.c (regmove_optimize): Likewise.
	* haifa-sched.c (find_rgns): Likewise.

	* haifa-sched.c (print_value): Clean up ptr->int cast
	warnings.

Sun Sep  7 23:18:32 1997  Fred Fish  <fnf@ninemoons.com>

	* INSTALL: Change 'amigados' to 'amigaos' to match current usage.
	* install.texi (Configurations): Likewise.
	* config.sub: Likewise.

Sun Sep  7 22:56:56 1997  Weiwen Liu  (liu@hepvms.physics.yale.edu)

	* Makefile.in (sdbout.o): Depend on insn-config.h.

Sun Sep  7 18:44:50 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k/m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881.
	For 68303, 68332, cpu32, subtract MASK_68040_ONLY.

Sun Sep  7 18:30:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* dwarf2out.c (dwarf2out_frame_debug): Assume that in a PARALLEL
	prologue insn, only the first elt is significant.
	(output_call_frame_info): For exception handling, always use 4-byte
	fields as specified by the dwarf2 spec.
	Don't skip trivial FDEs.

Sun Sep  7 14:19:39 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun Sep  7 14:17:36 1997  Torbjorn Granlund  (tege@pdc.kth.se)

	* expmed.c (expand_divmod): Make op1_is_pow2 depend on unsignedp
	for negative constants.  Promote EXACT_DIV_EXPR to TRUNC_DIV_EXPR
	when op1_is_pow2.

Sun Sep  7 13:46:46 1997  Jeffrey A Law  (law@cygnus.com)

	* final.c (shorten_branches): During first pass, assume worst
	possible alignment for ADDR_VEC and ADDR_VEC_DIFF insns.

	* Makefile.in (distclean): Remove various things left around
	by running the testsuite.

Sun Sep  7 13:16:06 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* configure.in (out_file): Emit definition to config.status in order
	to have a defined value for configure.lang.
	* configure: Re-built.

Sun Sep  7 09:59:08 1997  Jan-Jaap van der Heijden  (J.J.vanderHeijden@student.utwente.nl)

	* configure.in: Make symlink to as-new rather than as.new.  Similarly
	for ld-new.
	* configure: Rebuilt.

Fri Sep  5 16:54:55 1997  Jim Wilson  <wilson@cygnus.com>

	* profile.c (output_func_start_profiler): Set DECL_EXTERNAL to zero.

Fri Sep  5 16:16:44 1997  Christian Kuehnke  <Christian.Kuehnke@arbi.Informatik.Uni-Oldenburg.DE>

	* sparc/sparc.md: Add ultrasparc scheduling support.
	* sparc/sparc.h (RTX_COSTS): For MULT give v9 a cost of 25 insns.

Fri Sep  5 14:04:59 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* integrate.c (save_for_inline_copying): Use 0, not NULL_PTR,
	as initial value for real_label_map.
	(copy_for_inline): Likewise.

Fri Sep  5 13:36:44 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* sched.c (update_flow_info): When looking if to set found_split_dest
	or found_orig_dest, look at all parts of a PARALLEL.
	* haifa-sched.c (update_flow_info): Likewise.

Fri Sep  5 10:08:44 1997  Jeffrey A Law  (law@cygnus.com)

	* v850: New directory for v850 port.
	* v850/lib1funcs.asm: New file.
	* t-v850, v850.c, v850.h, v850.md, xm-v850.h: New files.
	* ginclude/va-v850.h: New file.
	* ginclude/varargs.h, ginclude/stdarg.h: Include va-mn10200.h.
	* configure.in (mn10200-*-*): New target.
	* configure: Rebuilt.
	* config.sub: Handle v850-elf.
	* Makefile.in (USER_H): Add va-mn10200.h.
	* invoke.texi: Document v850 stuff.

Fri Sep  5 09:37:50 1997  Jim Wilson  (wilson@cygnus.com)

	* sdbout.c (plain_type_1, case ARRAY_TYPE): Verify that TYPE_DOMAIN
	has integer TYPE_{MAX,MIN}_VALUE before using them.

	* m68k/m68k.h (MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
	__HPUX_ASM__ versions.

Fri Sep  5 09:08:44 1997  Jeffrey A Law  (law@cygnus.com)

	* install.sh: Delete duplicate install script.

Thu Sep  4 23:14:27 1997  Stan Cox  (coxs@dg-rtp.dg.com)

	* reg-stack.c (subst_stack_regs): Pop the stack register for a
	computed goto which sets the same stack register.

	* reg-stack.c (compare_for_stack_reg): Swap only if the source and
	destination are both on the regstack.
	(subst_stack_regs_pat): Put the destination at the top of the regstack.

Thu Sep  4 15:02:27 1997  Jim Wilson  <wilson@cygnus.com>

	* mips.md (nonlocal_goto_receiver): Define.

	* profile.c (output_arc_profiler): Check next_insert_after for non
	NULL before deferencing it.

	* i386/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define to -fPIC.

Thu Sep  4 14:51:57 1997  Jeffrey A Law  (law@cygnus.com)

	* i386.h (CPP_CPU_DEFAULT): Avoid using #elif.

Thu Sep  4 15:01:49 1997  Michael Meissner  <meissner@cygnus.com>

	* toplev.c (rest_of_compilation): For passes starting with
	flow_analysis, use print_rtl_with_bb instead of print_rtl.

	* print-rtl.c (print_rtl_single): Print a single rtl value to a
	file.

	* flow.c (print_rtl_with_bb): Print which insns start and end
	basic blocks.  For the start of a basic block, also print the live
	information.

Thu Sep  4 11:51:43 1997  Jim Wilson  <wilson@cygnus.com>

	* toplev.c (main): Change #elif to #else/#ifdef.

	* tlink.c: Include ctype.h.
	* ginclude/va-mips.h: Add _VA_MIPS_H_ENUM ifdef/define/endif.

Thu Sep  4 11:17:16 1997  Mikeael Meissner  (meissner@cygnus.com)

	* bitmap.c: Conditionally include stdlib.h.
	(free): Provide a declaration if NEED_DECLARATION_FREE.

Thu Sep  4 09:58:53 1997  Joel Sherrill  (joel@OARcorp.com)

	* i960/i960.h: Added default for SUBTARGET_SWITCHES macro.

Thu Sep  4 09:53:20 1997  Jim Wilson  (wilson@cygnus.com)

	* profile.c (output_arc_profiler): Verify next_insert_after is an
	INSN before and after skipping a stack pop.

Thu Sep  4 07:39:19 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* final.c (shorten_branches): Don't count the lengths of deleted
	instructions.

Thu Sep  4 09:43:01 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Thu Sep  4 11:04:21 1997  Michael Meissner  <meissner@cygnus.com>

	* bitmap.h (EXECUTE_IF_AND_IN_BITMAP): New macro, to iterate over
	two bitmaps ANDed together.
	(bitmap_print): Declare.

	* bitmap.c (function_obstack): Don't declare any more.
	(bitmap_obstack): Obstack for allocating links from.
	(bitmap_obstack_init): New static to say whether to initialize
	bitmap_obstack.
	(bitmap_element_allocate): Use bitmap_obstack to allocate from.
	(bitmap_release_memory): Free all memory allocated from
	bitmap_obstack.

	* basic-block.h (EXECUTE_IF_AND_IN_REG_SET): New macro, invoke
	EXECUTE_IF_AND_IN_BITMAP.

Wed Sep  3 10:39:42 1997  Jim Wilson  <wilson@cygnus.com>

	* alias.c (true_dependence): Address with AND can alias scalars.
	(anti_dependence, output_dependence): Likewise.

	* alias.c (true_dependence): Test x for BLKmode, in addition to mem.

Wed Sep  3 09:28:50 1997  Joel Sherrill  (joel@OARcorp.com)

	* i386/go32-rtems.h, i386/rtems.h, i960/rtems.h, m68k/rtems.h,
	  mips/rtems64.h, pa/rtems.h, rs6000/rtems.h, sh/rtems.h,
	  sparc/rtems.h (subtarget_switches): Removed SUBTARGET_SWITCHES
	  definitions.  Use -qrtems instead of -mrtems.

Wed Sep  3 09:05:41 1997  Robert Lipe  (robert@dgii.com)

	* xm-sco5.h (sys_siglist): Define.
	(SYS_SIGLIST_DECLARED): Likewise.

Tue Sep  2 23:33:33 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.c (convert_move): Handle truncation from TQFmode to QFmode.

Wed Sep  3 02:09:30 1997  Torbjorn Granlund  <tege@pdc.kth..se>

	* except.c (eh_outer_context): Expand masking operation using
	expand_binop.

Tue Sep  2 18:09:39 1997  Jim Wilson  <wilson@cygnus.com>

	* alpha.md (floatdisf2-1): New pattern.

Tue Sep  2 18:41:55 1997  Jeffrey A Law  (law@cygnus.com)

	* xm-svr4.h (SYS_SIGLIST_DECLARED): Define.
	* xm-news.h (SYS_SIGLIST_DECLARED): Likewise.
	* xm-sysv4.h (SYS_SIGLIST_DECLARED): Likewise.
	* gcc.texi: Note that if you define sys_siglist that you should
	also define SYS_SIGLIST_DECLARED.

	* mn10200.h (INITIALIZE_TRAMPOLINE): PC relative instructions
	are relative to the next instruction, not the current instruction.

Tue Sep  2 14:22:43 1997  Jim Wilson  <wilson@cygnus.com>

	* local-alloc.c (contains_replace_regs): New function.
	(update_equiv_regs): When adding a REG_EQUIV note for a set of a MEM,
	verify that there is no existing REG_EQUIV note, and add a call to
	contains_place_regs.

Tue Sep  2 12:48:11 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* config/alpha/elf.h (CPP_PREDEFINES): Add -D__PIC__ -D__pic__.
	(STARTFILE_SPEC): Always use crtbegin.o%s.
	(ENDFILE_SPEC): Always use crtend.o%s.

Tue Sep  2 12:00:36 1997  Jim Wilson  <wilson@cygnus.com>

	* alpha/alpha.h (PREFERRED_RELOAD_CLASS): Return NO_REGS if NO_REGS
	is passed in.
	* emit-rtl.c (gen_lowpart_common): Add code to convert CONST_INT to
	SFmode for 64 bit hosts.

Tue Sep  2 13:42:38 1997  Paul N. Hilfinger  <hilfingr@CS.Berkeley.EDU>

	* fixincludes: Permits spaces between # and define.  Discard C++
	comments in sys/pci.h on HP/UX 10.20.

Mon Sep  1 22:13:18 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

	* pa.c (restore_unscaled_index_insn_codes): New function.
	(record_unscaled_index_insn_codes): Likewise.
	(output_function_prologue): Call restore_unscaled_index_insn_codes.
	(output_function_epilogue): Free memory for unscaled_index_insn_codes.
	(pa_reorg): Call record_unscaled_index_insn_codes.

	* haifa-sched.c (move_insn): Handle notes correctly for insns
	with SCHED_GROUP_P set.

Mon Sep  1 16:58:57 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* alpha/xm-linux.h (USE_BFD): Undef before define.

Mon Sep  1 16:25:34 1997  Jim Wilson  <wilson@cygnus.com>

	* cse.c (cse_insn): Don't record BLKmode values.

Mon Sep  1 11:25:47 1997  Stephen Williams  (steve@icarus.icarus.com)

	* i960.h (LINK_SPEC): Handle "-mjX" and "-mrp" switches.

Mon Sep  1 08:29:46 1997  Jeffrey A Law  (law@cygnus.com)

	* cccp.c (sys_errlist): Remove special 4.4bsd declaration.
	* collect2.c (sys_errlist): Likewise.
	* cpplib.c (sys_errlist): Likewise.
	* gcc.c (sys_errlist): Likewise.
	* protoize (sys_errlist): Likewise.
	* configure.in: Check for strerror.
	* xm-freebsd.h (HAVE_STRERROR): Remove definition.
	* xm-gnu.h (HAVE_STRERROR): Likewise.
	* xm-linux.h (HAVE_STRERROR): Likewise.
	* xm-netbsd.h (HAVE_STRERROR): Likewise.
	* xm-bsd386.h (HAVE_STRERROR): Likewise.
	* xm-cygwin32.h (HAVE_STRERROR): Likewise.
	* xm-dos.h (HAVE_STRERROR): Likewise.
	* xm-mingw32.h (HAVE_STRERROR): Likewise.
	* xm-pa.h (HAVE_STRERROR): Likewise.
	* xm-papro.h (HAVE_STRERROR): Likewise.
	* xm-sysv4.h (HAVE_STRERROR): Likewise.
	* configure, config.in: Rebuilt.

	* Makefile.in: Add several missing "else true" clauses.

	* collect2.c: Change DONT_DECLARE_SYS_SIGLIST to SYS_SIGLIST_DECLARED.
	* mips-tfile.c: Likewise.
	* gcc.texi: DONT_DECLARE_SYS_SIGLIST: Remove docs.
	* xm-linux.h (DONT_DECLARE_SYS_SIGLIST): Delete definition.
	* xm-freebsd.h, xm-bsd386.h, xm-sysv4.h, xm-sol2.h: Likewise.
	* configure.in: Check for sys_siglist declaration.
	* configure, config.in: Rebuilt.

Mon Sep  1 08:04:07 1997  Joel Sherrill  (joel@OARcorp.com)

	* i386/go32-rtems.h, i386/rtems.h, i960/rtems.h,
	m68k/rtems.h, mips/rtems64.h, pa/rtems.h, rs6000/rtems.h,
	sparc/rtems.h (subtarget_switches): Added -mrtems as a switch.
	* i960/i960.h: Added SUBTARGET_SWITCHES macro.
	* rs6000/sysv4.h (extra_subtarget_switches): Added new
	macro EXTRA_SUBTARGET_SWITCHES.
	* configure.in (sh*-*-rtems*): New target.
	* sh/rtems.h: New file.
	* sh/sh.h: Added SUBTARGET_SWITCHES macro.
	* configure: Rebuilt.

Sat Aug 30 22:54:26 1997  Jim Wilson  <wilson@cygnus.com>

	* unroll.c (calculate_giv_inc): Handle increment with code PLUS.

Sat Aug 30 10:49:46 1997  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000.md: Make DF fused-add operations pay attention to
	-mno-fused-add.

Fri Aug 29 19:19:54 1997  Jim Wilson  <wilson@cygnus.com>

	* i386/xm-sysv4.h (DONT_DECLARE_SYS_SIGLIST): Define.

Fri Aug 29 16:13:51 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.md (reload_peepholes): Make sure operand is a REG before
	examining REGNO.  Allow general registers too.

Fri Aug 29 11:42:04 1997  Jim Wilson  <wilson@cygnus.com>

	* varasm.c (mark_constants): Don't look inside CONST_DOUBLEs.

Fri Aug 29 09:33:20 1997  Philipp Thomas  (kthomas@lxi165.gwdg.de)

	* dwarf2out.c (build_abbrev_table): Use xrealloc, not xmalloc
	to reallocate abbrev_die_table.

Thu Aug 28 15:14:46 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k/m68k.md (iorsi_zexthi_ashl16): Disable.

1997-08-27  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile.in (config.status): Depend on version.c.

	* expr.h (insn_gen_function): Reenable prototype.

	* expr.c (move_by_pieces_1, clear_by_pieces_1): Fix prototype of
	first parameter.

Thu Aug 28 13:01:43 1997  Jim Wilson  <wilson@cygnus.com>

	* i386.c (ix86_expand_epilogue): Emit blockage instruction when pic.

Thu Aug 28 07:03:15 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for latest snapshot.

	* bc-optab.c: Conditionally include stdlib.h.
	(free): Provide a declaration if NEED_DECLARATION_FREE.
	* tree.c (free): Provide a declaration if NEED_DECLARATION_FREE.
	* rtl.h (free): Remove declaration.
	* tree.h (free): Remvoe declaration.

	* configure: Rebuilt.

Wed Aug 27 21:32:20 1997  Jeffrey A Law  (law@cygnus.com)

	* flags.h (flag_move_all_movables): Declare.
	(flag_reduce_all_givs): Likewise.
	* loop.c (move_movables): Handle flag_move_all_movables.
	(strength_reduce): Handle flag_reduce_all_givs.
	* toplev.c (flag_move_all_movables): Define.
	(flag_reduce_all_givs): Likewise.
	(f_options): Add -fmove-all-movables and -freduce-all-givs.
	* invoke.texi: Document new options, including alias stuff that
	wasn't included last time.

Wed Aug 27 18:08:51 1997  Bob Manson  (manson@cygnus.com)

	* t-h8300: Use TARGET_LIBGCC2_CFLAGS instead of LIBGCC2_CFLAGS.
	* t-mn10200: Likewise.
	* t-vxsparc: Likewise.
	* t-vxworks68: Likewise.
	* t-vxworks960: Likewise.
	* t-vx29k: Likewise.

Wed Aug 27 16:35:29 1997  Richard Henderson  <rth@cygnus.com>

	* alpha/xm-alpha.h (alloca): Define alloca to builtin_alloca for GNUC
	if not already defined, and USE_C_ALLOCA not defined.

Wed Aug 27 16:08:43 1997  Jim Wilson  <wilson@cygnus.com>

	* config.guess: Replace with script that uses ../config.guess.

	* config/alpha/elf.h (DEFAULT_VTABLE_THUNKS): New. Defined as 1
	if USE_GNULIBC_1 is not defined.

Wed Aug 27 15:49:12 1997  Richard Henderson  <rth@cygnus.com>

	* alpha/elf.h (LINK_SPEC): Conditionalize on USE_GNULIBC_1.
	* config.guess: Recognize alpha-linux-gnulibc1.
	* configure.in (alpha-*-linux-gnulibc1): New target.
	(alpha-*-linux-gnu*): Don't build crtbegin/end.

Wed Aug 27 11:52:58 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k.md (iorsi3_internal): Readd ! TARGET_5200 check lost in
	last change.

Wed Aug 27 01:56:18 1997  Doug Evans  <dje@seba.cygnus.com>

	* loop.c (combine_movables): Earlier insns don't match later ones.

Wed Aug 27 01:24:25 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* config/linux.h (CC1_SPEC): Define it only if not defined.

	* config/m68k/linux.h (CC1_SPEC): Undefine it before include
	<linux.h>

	* config/linux.h (DEFAULT_VTABLE_THUNKS): New. Defined as 1 if
	USE_GNULIBC_1 is not defined.

	* config/rs6000/linux.h (DEFAULT_VTABLE_THUNKS): New.  Defined as 1.

	* config/sparc/linux.h (DEFAULT_VTABLE_THUNKS): New. Defined
	as 1 if USE_GNULIBC_1 is not defined.

Wed Aug 27 00:49:14 1997  Jeffrey A Law  (law@cygnus.com)

	* reorg.c (dbr_schedule): Allow current_function_return_rtx
	to be something other than a REG.
	* function.c (expand_function_end): Fix current_function_return_rtx
	if it was a pseudo.

	* t-freebsd (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS.
	* x-netbsd: Likewise.
	* x-dgux (USER_H): Include EXTRA_HEADERS and LANG_EXTRA_HEADERS.
	(INSTALL_HEADERS): Delete.
	* x-dguxbcs: Likewise.
	* x-hp3bsd44: Likewise.
	* x-pa: Likewise.

Wed Aug 27 00:30:00 1997  Bernd Schmidt  <crux@pool.informatik.rwth-aachen.de>

	* i386.md (pop): pop increments the stack pointer.
	(prologue_set_stack_ptr): New pattern.
	* i386.c (ix86_expand_prologue): Use prologue_set_stack_ptr
	instead of subsi3.

Tue Aug 26 18:50:32 1997  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads, case '0'): Reject matching a non-offsettable
	address where an offsettable address is required.

Tue Aug 26 17:54:56 1997  Michael P. Hayes  (michaelh@ongaonga.chch.cri.nz>

	* loop.c (check_final_value): Don't miss a biv increment in a
	parallel.

Tue Aug 26 12:03:49 1997  Jim Wilson  (wilson@cygnus.com)

	* dwarfout.c (dwarfout_file_scope_decl, case TYPE_DECL): Check
	TYPE_DECL_IS_STUB instead of DECL_NAME.

Mon Aug 25 23:27:10 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* objc/Make-lang.in ($(OBJC_O)): Also depend on cc1obj.

Mon Aug 25 23:27:10 1997  Jim Meyering  <meyering@eng.ascend.com>

	* objc/Make-lang.in ($(OBJC_O)): Also depend on $(GCC_PASSES).

Mon Aug 25 13:12:24 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (find_pre_sched_live): Remove #if 0 code.
	(find_post_sched_live): Likewise.

	* haifa-sched.c (schedule_block): Remove old code to get arguments
	from hard regs into pseudos early.

Mon Aug 25 08:55:00 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for new snapshot.

	* local-alloc.c (update_equiv_regs): All the target to reject
	promotion of some REG_EQUAL to REG_EQUIV notes.
	* pa.h (DONT_RECORD_EQUIVALENCE): Define.

	* pa.c (secondary_reload_class): (mem (mem ... )) does not need
	secondary reloads.

	* pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
	store of the argument registers.

Mon Aug 25 08:39:02 1997  Craig Burley  (burley@gnu.ai.mit.edu)

	* fold-const.c (multiple_of_p): New function.
	(fold): Turn some cases of *_DIV_EXPR into EXACT_DIV_EXPR.

Mon Aug 25 01:47:41 1997  Jeffrey A Law  (law@cygnus.com)

	* expr.h (insn_gen_function): Temporarily remove prototype.

Sun Aug 24 17:22:21 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (install-info): Don't cd into srcdir.  Add srcdir to
	filenames.  Use sed to extract base filename for install.

Sat Aug 23 18:19:40 1997  John F. Carr  <jfc@mit.edu>

	* unroll.c (find_splittable_givs): Only share if two givs have the
	same add and multiply values.

Sat Aug 23 14:36:27 1997  Jim Wilson  <wilson@cygnus.com>

	* m68k/next.h (GO_IF_INDEXABLE_BASE): Fix typo in undef.
	* m68k/m68kemb.h (LIB_SPEC): Add missing comment end before it.

Sat Aug 23 00:18:22 1997  Jeffrey A Law  (law@cygnus.com)

	* pa.c (pa_reorg): Always put begin_brtab and end_brtab insns
	around branch tables.
	* pa.md (begin_brtab, end_brtab): Only emit the .begin_brtab
	and .end_brtab directives if TARGET_GAS.

Fri Aug 22 14:05:55 1997  Jim Wilson  <wilson@cygnus.com>

	* alias.c (true_dependence): Pass x_addr not x to varies.

	* acconfig.h (NEED_DECLARATION_CALLOC): Add.
	* configure.in: Add GCC_NEED_DECLARATION call for calloc.
	* rs6000/xm-rs6000.h (malloc, realloc, calloc, free): Delete
	declarations.
	* config.in, configure: Regenerate.

Thu Aug 21 23:52:16 1997  John F. Carr  <jfc@mit.edu>

	* alias.c (find_base_value): Improve handling of PLUS, MINUS, and
	LO_SUM.
	(record_set): Handle LO_SUM like PLUS.
	(init_alias_analysis): When following chains of base addresses,
	do not stop on reaching a hard register.

Thu Aug 21 20:17:37 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump for new snapshot.

Thu Aug 21 17:28:00 1997  Jim Wilson  <wilson@cygnus.com>

	* alpha.h (ARCH_ASM_FILE_START): Define.
	(ASM_FILE_START): Use ARCH_ASM_FILE_START.
	* osf12.h, osf2or3.h (ARCH_ASM_FILE_START): Redefine to null string.

Thu Aug 21 10:22:19 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (install-common): Put gcov comment at start of line.

Wed Aug 20 22:47:33 1997  Jeffrey A Law  (law@cygnus.com)

	* alias.c (init_alias_analysis): When simplifying the reg_base_value
	array, simplify entries for hard registers too.

Wed Aug 20 12:35:47 1997  Dave Love  <d.love@dl.ac.uk>

	* dwarf2.h (enum dwarf_call_frame_info): Remove trailing comma from
	list.

Wed Aug 20 11:58:33 1997  Jim Wilson  <wilson@cygnus.com>

	* stmt.c (start_cleanup_deferral, end_cleanup_deferral): Test
	block_stack before dereferencing it.

Wed Aug 20 11:57:11 1997  Michael Meissner  <meissner@cygnus.com>

	* rs6000.h (ISSUE_RATE): Define instead of MACHINE_issue_rate.

Tue Aug 19 17:10:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cplus-dem.c: Add 'extern' to prepends_underscore.

Tue Aug 19 09:34:57 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (ISSUE_RATE): Renamed from MACHINE_issue_rate.
	(get_issue_rate): Delete.
	* pa.h (ISSUE_RATE): Define.

	* configure.in: Turn on haifa by default for the PA.
	* configure: Rebuilt.
	* pa.c (override_options): Accept -mschedule=7200 option.
	(pa_adjust_cost): No longer need to scale costs for newer
	processors.
	* pa.h (enum processor_type): Add PROCESSOR_7200.
	* pa.md: Revamp scheduling parameters to work better with
	haifa.  Add scheduling parameters for the 7200.

	* haifa-sched.c (move_insn): Reemit notes for SCHED_GROUP_P
	insns too.
	(schedule_block): When adjusting basic_block_{head,end}, account
	for movement of SCHED_GROUP_P insns too.

	* haifa-sched.c (debug_dependencies): Fix thinko.

	* Makefile.in (EXPECT, RUNTEST, RUNTESTFLAGS): Define.
	(site.exp, check, check-g++, check-gcc): New targets.

	* haifa-sched.c: Make lots of variables static.

Tue Aug 19 07:18:34 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* expr.h, real.h: Finish prototyping.

Mon Aug 18 21:49:02 1997  Jim Wilson  <wilson@cygnus.com>

	* reload.c (find_reloads): Add code to convert RELOAD_FOR_OPADDR_ADDR
	reloads to RELOAD_FOR_OPERAND_ADDRESS reloads.
	* reload1.c: Undo bugfix from Aug 11.

Mon Aug 18 17:39:02 1997  Mike Meissner  <meissner@cygnus.com>

	* configure.in ({powerpc,rs6000}*-*-*, --with-cpu): Remove single
	quotes around the name.
	* configure: Regenerate.

Mon Aug 18 13:46:47 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (stmp-multilib-sub): Fix typo in last change.

Thu Aug  7 10:33:13 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* Makefile.in (sub-makes): Pass the current value of LANGUAGES down
	to sub-makes to avoid building more passes than the user might have
	requested on the command line.

Sun Aug 17 15:42:17 1997  Dave Love  (d.love@dl.ac.uk)

	* configure.in: Expurgate `broken_install' (install is
	autoconfed).

	* configure.lang: Substitute autoconfed ${INSTALL} (not currently
	relevant).

Sat Aug 16 01:08:12 1997  Jeffrey A Law  (law@cygnus.com)

	* loop.c (is_power_of_2, is_conditional_branch): Delete unused
	functions and declarations.
	(analyze_loop_iterations): Use condjump_p.
	(insert_bct): Likewise.  Use exact_log2.

Fri Aug 15 23:48:32 1997  Jeffrey A Law  (law@cygnus.com)

	* haifa-sched.c (find_post_sched_live): Call FREE_REG_SET as needed.
	(schedule_region): Likewise.
	(schedule_insns): Likewise.

	* PROJECTS: Update with Haifa stuff.

Fri Aug 15 12:49:56 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Change the version string to look like:
	egcs-2.90.00 970814 (gcc2-970802 experimental).

	* loop.c (is_conditional_branch): Make definition match declaration.

	* gcc.c: Take out experimental snapshot warning message.

Fri Aug 15 13:43:39 1997  Michael Meissner  <meissner@cygnus.com>

	* haifa-sched.c (debug_dependencies): Use GET_NOTE_INSN_NAME to
	print out the names of the notes.  Print out the name of the insn
	that is not a note, and not an {,CALL_,JUMP_}INSN.

Wed Aug 13 17:32:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (expand_expr, case TARGET_EXPR): Call mark_addressable
	again for the slot after we give it RTL.

Wed Aug 13 01:03:37 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure.in (haifa configury): Fix typo.
	* configure: Regenerate.

Tue Aug 12 10:20:36 1997  Jeffrey A Law  (law@cygnus.com)

	* version.c: Bump version to "gcc-3.0.0 970802 experimental".

	* gcc.info*: Rebuilt.

	* COPYING.g77, README.g77: New files.
	* real.c (ereal_unto_float, ereal_unto_double): New functions.
	* real.h (ereal_unto_float, ereal_unto_double): Declare them.
	(REAL_VALUE_UNTO_TARGET_DOUBLE, REAL_VALUE_UNTO_TARGET_SINGLE): Define.

Mon Aug 11 14:50:55 1997  Jeffrey A Law  (law@cygnus.com)

	* Integrate Haifa instruction scheduler.
	* Makefile.in (ALL_CFLAGS): Add SCHED_CFLAGS.  Prefix all references
	to sched with $(SCHED_CFLAGS.
	* configure.in: Handle --enable-haifa.
	* configure: Rebuilt.
	* flags.h: Add new flags for haifa instruction scheduler.
	* genattrtab.c (expand_units): For haifa, don't subtract one
	when computing blockage.
	* toplev.h (flag_schedule_interblock): Haifa scheduler flag.
	(flag_schedule_speculative): Likewise.
	(flag_schedule_speculative_load): Likewise.
	(flag_schedule_speculative_load_dangerous): Likewise.
	(flag_schedule_reverse_before_reload): Likewise.
	(flag_schedule_reverse_after_reload): Likewise.
	(flag_branch_on_count_reg): Likewise.
	(f_options): Add Haifa switches.
	(main): Turn off some Haifa options if appropriate macro is
	defined.  Process Haifa switches.
	* unroll.c (iteration_info): No longer static, since Haifa
	scheduler uses it.
	(unroll_loop): Inform HAIFA scheduler about loop unrolling factor.
	* unroll.c (unroll_loop): Set loop_unroll_iter, loop_start_value.
	* loop.h (loop_unroll_factor, loop_number): Add HAIFA decls.
	* loop.h (loop_initial_value,loop_unroll_iter): New globals.
	* loop.c (loop_optimize): If HAIFA is defined, allocate additional
	storage for the Haifa scheduler.
	(mark_loop_jump): If HAIFA defined, set LABEL_OUTSIDE_LOOP_P and
	LABEL_NEXTREF.
	(strength_reduce): If HAIFA and HAVE_decrement_and_branch_on_count
	are defined, call analyze_loop_iterations and insert_bct to use
	countdown loops.
	(record_giv): Refine test for jumps out of loops if HAIFA is
	defined.
	(analyze_loop_iterations): New function to identify if we can use
	a countdown loop.
	(insert_bct): Insert countdown loop.
	(instrument_loop_bct): Low level code to insert countdown loop.
	(loop_number): Calculate UID of loop.
	(indirect_jump_in_function_p): Return true if an indirect jump is
	in the function.
	(is_power_of_2): Return true if value is a power of 2.
	(is_conditional_branch): Return true if insn is a conditional
	jump.
	(fix_bct_param): Process -fbct-{min,max}-N switches.
	(check_bct_param): Return true if loop should be instrumented.
	* loop.c (loop_initial_value,loop_unroll_iter): New globals.
	(loop_optimize): Initialize.
	(get_condition_for_loop): Likewise.
	* loop.c (strength_reduce): Inside of code that uses #ifdef
	HAVE_decrement_and_branch_on_count code, test it to make sure the
	condition is true.
	(instrument_loop_bct): Likewise.
	* haifa-sched.c: New file.

	* Integrate regmove pass.
	* Makefile.in (OBJS): Add regmove.o.
	(regmove.o): Add dependencies.
	* flow.c (find_use_as_address): No longer static.
	* rtl.h (find_use_as_address): Declare.
	* toplev.c (regmove_dump, flag_regmove): Define.
	(f_options): Add -fregmove.
	(regmove_dump_file, regmove_time): Define.
	(fatal_insn): Close the regmove dump file.
	(compile_file): Initialize regmove_time; open/close the regmove dump
	file as needed.  Print regmove time as needed.
	(rest_of_compilation): Run regmove pass if requested, dump
	RTL after regmove if requested.
	(main): If -O2 or more, turn on regmove.  Handle dump switches.
	* regmove.c: New file.

Mon Aug 11 14:15:02 1997  Jeffrey A Law  (law@cygnus.com)

	* Integrate tlink patch from jason@cygnus.com
	* gcc.c (SWITCH_TAKES_ARG): Add 'V', 'B' and 'b'.
	(process_command): Increment n_switches for them.  Don't discard
	their args.  Validate them.
	(main): Escape " marks when creating COLLECT_GCC_OPTIONS.
	From Rohan Lenard.
	(process_command): Set include_prefixes from COMPILER_PATH.
	(main): Set COLLECT_GCC_OPTIONS sooner.
	* confiugre.in: Link ../ld/ld.new to collect-ld rather than real-ld.
	* tlink.c, hash.c, hash.h: New files.
	* Makefile.in (USE_COLLECT2): Always use collect2.
	(collect2): Depend on and link in hash.o and tlink.o.
	(tlink.o, hash.o): Add dependencies.

Mon Aug 11 10:04:49 1997  Jeffrey A Law  (law@cygnus.com)

	* Integrate alias analysis changes from jfc@mit.edu
	* Makefile.in (OBJS): Add alias.o.
	(alias.o): Add dependencies.
	* alias.c: New file.
	* sched.c: Remove alias analysis code.  It lives in alias.c now.
	(sched_analyze_2): Add new arguments to true_dependence.
	(schedule_insns): Always call init_alias_analysis.
	* calls.c (expand_call): Note calls to malloc, calloc, and realloc;
	mark return value from such functions as a pointer and keep track of
	them for alias analysis.  If a return value from a function is a
	pointer, mark it as such.
	* combine.c (distribute_notes): Handle REG_NOALIAS.
	* cse.c (struct write_data): Delete.  No longer needed.
	(invalidate): Don't call set_nonvarying_address_components anymore.
	Use true_dependence to decide if an entry should be removed from
	the hash table.
	(invalidate_memory): Remove WRITES argument, simplify appropriately.
	Fix all callers.
	(note_mem_written): Similarly for WRITE_PTR argument.
	(invalidate_from_clobbers): Similarly for W argument.
	(invalidate_for_call): Remove memory elements from the hash table.
	(refers_to_mem_p, cse_rtx_addr_varies_p): Deleted.
	(cse_rtx_varies_p): New function.  Derived from old
	cse_rtx_addr_varies_p.
	(cse_insn): Remove WRITES_MEMORY and INIT variables and all references.
	Don't call note_mem_written anymore.  Stack pushes invalidate the stack
	pointer if PUSH_ROUNDING is defined.  No longer need to call
	cse_rtx_addr_varies_p to decide if a MEM should be invalidated.
	(skipped_writes_memory): Remove variable.
	(invalidate_skipped_set): Simplify and wewrite to use invalidate_memory.
	(invalidate_skipped_block): Simplify for new alias analysis code.
	(cse_set_around_loop): Likewise.
	(cse_main): Call init_alias_analysis.
	* flags.h (flag_alias_check, flag_argument_noalias): Declare.
	* toplev.c (flag_alias_check, flag_argument_noalias): Define.
	(f_options): Add new alias checking arguments.
	(main): Set flag_alias_check when optimizing.
	* local_alloc (validate_equiv_mem_from_store): Add new arguments
	to true_dependence.
	(memref_referenced_p): Likewise.
	* loop.c (NUM_STORES): Increase to 30.
	(prescan_loop): Only non-constant calls set unknown_address_altered.
	(invariant_p): Add new arguments to true_dependence.
	(record_giv): Initialize unrolled and shared fields.
	(emit_iv_add_mult): Call record_base_value as needed.
	* loop.h (struct induction): Add unrolled and shared fields.
	* unroll.c  (unroll_loop): Call record_base_value as needed.
	(copy_loop_body): Likewise.
	(final_biv_value): Likewise.
	(final_giv_value): Likewise.
	(find_splittable_regs): Likewise.  Only create one new pseudo
	if we have multiple address GIVs that were combined with the same
	dst_reg GIV.  Note when a new register is created due to unrolling.
	* rtl.c (reg_note_name): Add REG_NOALIAS.
	* rtl.h (enum reg_note): Similarly.
	(rtx_varies_p, may_trap_p, side_effects_p): Declare.
	(volatile_refs_p, volatile_insn_p, remove_note): Likewise.
	(note_stores, refers_to_regno_p, reg_overlap_mentioned_p): Likewise.
	(true_dependence, read_dependence, anti_dependence): Likewise.
	(output_dependence, init_alias_analysis, end_alias_analysis): Likewise.
	(mark_user_reg, mark_reg_pointer): Likewise.

	* Integrate reload bugfix from Wilon which enables the PA port
	to bootstrap again.
	* reload1.c (reload): Sum needs for both OPADDR_ADDR and
	OPERAND_ADDRESS when computing how many registers an insn needs.
	(reload_reg_free_p): OPADDR_ADDR and OPERAND_ADDRESS reloads do
	conflict.
	(reload_reg_free_before_p): Treat OPERAND_ADDRESS reloads just like
	OPADDR_ADDR reload.
	(reload_reg_reaches_end_p): For RELOAD_FOR_OPADDR_ADDR insns, registers
	in reload_reg_use_in_op_addr do not reach the end.
	do not reach the end.
	(reloads_conflict): RELOAD_FOR_OPADDR_ADDR conflicts with
	RELOAD_FOR_OPERAND_ADDRESS.

Sun Aug 10 12:00:20 1997  Jeffrey A Law  (law@cygnus.com)

	* egcs project officially starts.

Local Variables:
add-log-time-format: current-time-string
End:
