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 comman 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 commment.  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 EDT 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 PDT 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 PDT 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_*): Ditto.
	(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 spurrious 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 lables.

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 struture checks
	to handle optinal 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 PDT 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 existance.
        * 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): Propogate 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.  Propogate 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 EDT 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 EDT 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 EDT 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 EDT 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 PDT 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 PDT 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 EDT 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 EDT 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 12:46:56 1998  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 PDT 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 EDT 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
	overlfows. 

	* 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 EDT 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 PDT 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 EDT 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 PDT 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 ambigious
	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 PDT 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 EDT 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): Ditto.
	(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
	accordignly.  Add missing paratheses around << operation.
	(arm_rtx_costs): Correctly parenthesise 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 PDT 1998 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon May 25 11:56:24 PDT 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 PDT 1998 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Sun May 24 02:08:57 PDT 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 EDT 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 EDT 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 PDT 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 EDT 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 equivilent 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_moveables 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_elimiation, 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}): Ditto.
	(blockage_range): Ditto.
	(actual_hazard{,_this_instance}): Ditto.
	(schedule_unit): Ditto.
	(potential_hazard): Ditto.
	(insn_cost): Ditto.
	(swap_sort): Ditto.
	(queue_insn): Ditto.
	(birthing_insn_p): Ditto.
	(adjust_priority): Ditto.
	(get_block_head_tail): Ditto.
	(init_rgn_data_dependences): Ditto.

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

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 PDT 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): Ditto.

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  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 CDT 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 PDT 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 ulternatives 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 PDT 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): Ditto.
	(m32r_select_cc_mode): Ditto.
	(gen_compare): Ditto.
	(function_arg_partial_nregs): Ditto.
	(m32r_setup_incoming_varargs): Ditto.
	(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
	optimisation to work.

	* m32r.md (cmp_ne_small_const_insn): Use 'S' constriant rather
	than 'I' since the value is negated.
	(peephole): Add peephole optimisation 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: Ditto.
	* m32r.md: Ditto.

	* 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 EDT 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 PDT 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 dependancy 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 EDT 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): Ditto.
	(process_aux_info_file): Ditto.
	(main): Ditto.

	* 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 PDT 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_cosntant_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}): Ditto.

	* 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): Ditto.

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 superceeded 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 PDT 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 PDT 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 PDT 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 PDT 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 PST 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 supress 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 supress 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): Re-instate 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 paramter.
	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 PST 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): Ditto.
	(update_path): Ditto.
	(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): Ditto.

	* 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 PST 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 EST 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 PST 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 supress 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 behaviour.
	(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 PST 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.  Simlarly 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 PST 1998 Jeff Law  (law@cygnus.com)

	* version.c: Bump for snapshot.

Mon Mar 2 00:52:18 PST 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 PST 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): Explcitly 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 PST 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): Simliarly 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_compund_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'
	explictly 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; Ditto.

	* 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 referances 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 conside the stack pointer live at
	the end of a function if the fucntio ncalls 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 PST 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): Supress int ldd usage on ultrasparc and v9.
	(registers_ok_for_ldd_peep): Likewise.
	(print_operand): Supress 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 appropritely.
	(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 PST 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 reorganisation pass, if there is one.
	Reorganise 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 PST 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 subsitute 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: Ditto.

	* 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 independant 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 declaraion.
	* 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): Ditto.

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): Ditto.
	* collect2.c (__deregister_frame_info): Ditto.

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 meory-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  Mark Mitchell  <mmitchell@usa.net> 11:41:32 1997

	* 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 CEST 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): Ditto.
	* 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): Ditto.
	* 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): Ditto.
	(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): Ditto.

	* 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): Ditto.

	* 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 conditionl
	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 propogated 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
	tenative 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_ex_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 funtion.
	* 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]): Propogate 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): Ditto.
	(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_DEPENENT_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): Ditto.

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
	optimisation 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): Ditto.
	(macroexpand): Ditto.
	(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 compatability.

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
 	collectable 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 gratutious 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): Ditto.
	* haifa-sched.c (find_rgns): Ditto.

	* 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): Ditto.
	* config.sub: Ditto.

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 CDT 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: Ditto.
	* t-vxsparc: Ditto.
	* t-vxworks68: Ditto.
	* t-vxworks960: Ditto.
	* t-vx29k: Ditto.

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_deferal, end_cleanup_deferal): 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): Ditto.
	(flag_schedule_speculative_load): Ditto.
	(flag_schedule_speculative_load_dangerous): Ditto.
	(flag_schedule_reverse_before_reload): Ditto.
	(flag_schedule_reverse_after_reload): Ditto.
	(flag_branch_on_count_reg): Ditto.
	(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): Ditto.
	* 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): Ditto.
	* 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:
