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): Propogage 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): Initialise 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 dont 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 superceded 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 (proces_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 non-zero return value is an error.
	* libgcc2.c (eh_context_initialize): Check for non-zero 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 non-zero 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): Recognise 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:
